From 0a19e0f4e1de64051aa1ded083d0835d19e10b17 Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Thu, 25 Jan 2024 04:03:36 +0330 Subject: [PATCH] Initial Commit ... --- .gitkeep | 0 Docs/R&D/Candlestick.Patterns.md | 134 ++ Docs/R&D/EMA.md | 15 + Docs/R&D/ichimoku.md | 14 + Docs/Samples/Angle.md | 3 + Docs/Samples/ArraySetAsSeries.md | 26 + Docs/Samples/Ask&Bid.md | 3 + Docs/Samples/BarIndex.md | 50 + Docs/Samples/CCI.EA.SL.TP.Tutorial.md | 407 ++++ Docs/Samples/CandleIndexing.md | 4 + Docs/Samples/Chart.Indicator.Tutorial.md | 129 ++ Docs/Samples/ChartRedraw.md | 6 + Docs/Samples/Comment.md | 5 + Docs/Samples/CopyBuffer.md | 0 Docs/Samples/DrawFibonnaciTemplate.md | 203 ++ Docs/Samples/DrawSignal.md | 102 + Docs/Samples/Expert.Advisor.Tutorial.md | 309 +++ Docs/Samples/ExpertAdviser.md | 4 + Docs/Samples/Get.Account.Balance.md | 13 + Docs/Samples/Get.BID.Price.md | 7 + Docs/Samples/Input.md | 32 + Docs/Samples/IsNewBar.md | 17 + Docs/Samples/Libraries.md | 12 + Docs/Samples/MQL.md | 106 + Docs/Samples/MetaTrader.StrategyTester.md | 49 + Docs/Samples/OBJPROP_CORNER.md | 14 + Docs/Samples/Object Types.md | 7 + Docs/Samples/OnCalculate.md | 32 + Docs/Samples/OnDeinit.md | 26 + Docs/Samples/OnInit.md | 9 + Docs/Samples/OnTick.md | 7 + Docs/Samples/OrderSend.md | 56 + Docs/Samples/Pine.Calculation.md | 27 + Docs/Samples/Plot.md | 14 + Docs/Samples/Position.Counting.md | 4 + Docs/Samples/PositionGetTicket.md | 3 + Docs/Samples/PositionsTotal.md | 3 + Docs/Samples/Print.md | 3 + Docs/Samples/RMA.md | 39 + .../RSI Moving Average Cross EA.Tutorial.md | 149 ++ Docs/Samples/SMA.md | 36 + Docs/Samples/SampleOrder.md | 66 + Docs/Samples/Simple.Oscillator.md | 5 + Docs/Samples/Simple.indicator.md | 221 ++ Docs/Samples/Slope.md | 5 + Docs/Samples/Stochastic EA Tutorial.md | 31 + Docs/Samples/SymbolInfoDouble.md | 71 + Docs/Samples/TP-SL Calculation.md | 22 + Docs/Samples/Trade.md | 27 + Docs/Samples/TradeOncePerBar.md | 38 + Docs/Samples/VWMA.md | 12 + Docs/Samples/_Point.md | 9 + Docs/Samples/iBarShift.md | 5 + Docs/Samples/iCustom.md | 36 + Docs/Samples/include.mql.md | 10 + Docs/Samples/indicator_buffers.md | 53 + Docs/Samples/nz.md | 6 + Docs/Samples/property.md | 9 + Docs/Samples/show_label_on_last_candle.pine | 5 + Docs/Strategies/XST_SR15M.md | 64 + Docs/Templates/ee.mq4 | 30 + Docs/Templates/raw-strategy.doc.md | 38 + Docs/Templates/report.md | 96 + Docs/Templates/strategy.report.md | 16 + Docs/Templates/x-lib.candle.mq4 | 39 + Docs/Templates/x-mql.ea.template.mq4 | 53 + Docs/Templates/x-mql.indicator.template.mq4 | 104 + Docs/Templates/x-mql.lib.template.mq4 | 25 + Docs/Templates/x-mql.oscillator.template.mq4 | 56 + .../x-pine-script.indicator.template.pine | 57 + .../x-pine-script.oscillator.template.pine | 57 + .../x-pine-script.strategy.template.pine | 195 ++ Docs/Templates/x-trade.tempolate.report.txt | 55 + Packed/XAUUSD-15M/Configs/3000 - 0.75.set | 296 +++ Packed/XAUUSD-15M/EX4/EA/x-saherelm.ea.ex4 | Bin 0 -> 120242 bytes .../EX4/Indicators/x-saherelm.ma.ex4 | Bin 0 -> 9996 bytes .../EX4/Indicators/x-saherelm.xrange.ex4 | Bin 0 -> 11490 bytes .../EX4/Indicators/x-saherelm.xtpow.ex4 | Bin 0 -> 12628 bytes .../EX4/Libraries/x-saherelm.draw.lib.ex4 | Bin 0 -> 6922 bytes .../Libraries/x-saherelm.indicator.lib.ex4 | Bin 0 -> 7664 bytes .../EX4/Libraries/x-saherelm.lib.ex4 | Bin 0 -> 7332 bytes .../EX4/Libraries/x-saherelm.log.lib.ex4 | Bin 0 -> 5524 bytes .../EX4/Libraries/x-saherelm.models.lib.ex4 | Bin 0 -> 5442 bytes .../EX4/Libraries/x-saherelm.signal.lib.ex4 | Bin 0 -> 17822 bytes .../EX4/Libraries/x-saherelm.x.signal.lib.ex4 | Bin 0 -> 11002 bytes .../Libraries/x-saherelm.xr.signal.lib.ex4 | Bin 0 -> 10398 bytes .../Libraries/x-saherelm.xtpw.signal.lib.ex4 | Bin 0 -> 11152 bytes Packed/XAUUSD-15M/MQL4/EA/x-saherelm.ea.mq4 | 1038 +++++++++ .../MQL4/Indicators/x-saherelm.ma.mq4 | 173 ++ .../MQL4/Indicators/x-saherelm.xrange.mq4 | 294 +++ .../MQL4/Indicators/x-saherelm.xtpow.mq4 | 275 +++ .../MQL4/Libraries/x-saherelm.draw.lib.mq4 | 2010 +++++++++++++++++ .../Libraries/x-saherelm.indicator.lib.mq4 | 450 ++++ .../MQL4/Libraries/x-saherelm.lib.mq4 | 1662 ++++++++++++++ .../MQL4/Libraries/x-saherelm.log.lib.mq4 | 91 + .../MQL4/Libraries/x-saherelm.models.lib.mq4 | 154 ++ .../MQL4/Libraries/x-saherelm.signal.lib.mq4 | 1756 ++++++++++++++ .../Libraries/x-saherelm.x.signal.lib.mq4 | 1063 +++++++++ .../Libraries/x-saherelm.xr.signal.lib.mq4 | 1142 ++++++++++ .../Libraries/x-saherelm.xtpw.signal.lib.mq4 | 1332 +++++++++++ .../Reports/Screenshot 2023-08-03 202922.png | Bin 0 -> 107106 bytes .../Reports/Screenshot 2023-08-08 174923.png | Bin 0 -> 106894 bytes .../Strategy Tester_ x-saherelm.ea.pdf | Bin 0 -> 704415 bytes .../Strategy Tester_ x-saherelm.ea_1.pdf | Bin 0 -> 1576414 bytes ...r X (XR and XXX and XTPW) - 0.2 - Full.gif | Bin 0 -> 8569 bytes ...r X (XR and XXX and XTPW) - 0.2 - Full.htm | 445 ++++ ...tegyTester X (XXX and XTPW) Full - 0.2.gif | Bin 0 -> 7548 bytes ...tegyTester X (XXX and XTPW) Full - 0.2.htm | 223 ++ ...r X (XXX and XTPW) Full - 0.4. - 2000$.gif | Bin 0 -> 7574 bytes ...r X (XXX and XTPW) Full - 0.4. - 2000$.htm | 223 ++ ...r X (XXX and XTPW) Full - 0.4. - 2000$.pdf | Bin 0 -> 708166 bytes ... X (XXX and XTPW) Full - 0.75. - 3000$.gif | Bin 0 -> 7752 bytes ... X (XXX and XTPW) Full - 0.75. - 3000$.htm | 227 ++ ... X (XXX and XTPW) Full - 0.75. - 3000$.pdf | Bin 0 -> 724327 bytes .../StrategyTester X (XXX and XTPW) Full.gif | Bin 0 -> 7566 bytes .../StrategyTester X (XXX and XTPW) Full.htm | 227 ++ .../Reports/X/Long/StrategyTester.gif | Bin 0 -> 7287 bytes .../Reports/X/Long/StrategyTester.htm | 111 + .../Reports/XR/Long/StrategyTester 1.gif | Bin 0 -> 8518 bytes .../Reports/XR/Long/StrategyTester 1.htm | 217 ++ .../Reports/XR/Long/StrategyTester 10.gif | Bin 0 -> 7435 bytes .../Reports/XR/Long/StrategyTester 10.htm | 89 + .../Reports/XR/Long/StrategyTester 11.gif | Bin 0 -> 9361 bytes .../Reports/XR/Long/StrategyTester 11.htm | 167 ++ .../Reports/XR/Long/StrategyTester 2.gif | Bin 0 -> 8102 bytes .../Reports/XR/Long/StrategyTester 2.htm | 91 + .../Reports/XR/Long/StrategyTester 3.gif | Bin 0 -> 8185 bytes .../Reports/XR/Long/StrategyTester 3.htm | 87 + .../Reports/XR/Long/StrategyTester 4.gif | Bin 0 -> 7696 bytes .../Reports/XR/Long/StrategyTester 4.htm | 85 + .../Reports/XR/Long/StrategyTester 5.gif | Bin 0 -> 8130 bytes .../Reports/XR/Long/StrategyTester 5.htm | 103 + .../Reports/XR/Long/StrategyTester 6.gif | Bin 0 -> 6488 bytes .../Reports/XR/Long/StrategyTester 6.htm | 89 + .../Reports/XR/Long/StrategyTester 7.gif | Bin 0 -> 8765 bytes .../Reports/XR/Long/StrategyTester 7.htm | 143 ++ .../Reports/XR/Long/StrategyTester 8.gif | Bin 0 -> 7827 bytes .../Reports/XR/Long/StrategyTester 8.htm | 97 + .../Reports/XR/Long/StrategyTester 9.gif | Bin 0 -> 8847 bytes .../Reports/XR/Long/StrategyTester 9.htm | 123 + .../Reports/XR/Short/StrategyTester 1.gif | Bin 0 -> 9417 bytes .../Reports/XR/Short/StrategyTester 1.htm | 283 +++ .../Reports/XR/Short/StrategyTester 2.gif | Bin 0 -> 8153 bytes .../Reports/XR/Short/StrategyTester 2.htm | 97 + .../Reports/XR/Short/StrategyTester 3.gif | Bin 0 -> 7795 bytes .../Reports/XR/Short/StrategyTester 3.htm | 95 + .../Reports/XR/Short/StrategyTester 4.gif | Bin 0 -> 9432 bytes .../Reports/XR/Short/StrategyTester 4.htm | 174 ++ .../Reports/XR/StrategyTester 1 - Full.gif | Bin 0 -> 9202 bytes .../Reports/XR/StrategyTester 1 - Full.htm | 297 +++ .../XR/StrategyTester 2 - 0.2 - Full.gif | Bin 0 -> 9133 bytes .../XR/StrategyTester 2 - 0.2 - Full.htm | 301 +++ .../Reports/XTPW/Full/StrategyTester 1.gif | Bin 0 -> 7717 bytes .../Reports/XTPW/Full/StrategyTester 1.htm | 169 ++ .../XTPW/Long/StrategyTester Long 13.gif | Bin 0 -> 7329 bytes .../XTPW/Long/StrategyTester Long 13.htm | 103 + .../Reports/XTPW/Short/StrategyTester 13.gif | Bin 0 -> 7848 bytes .../Reports/XTPW/Short/StrategyTester 13.htm | 139 ++ README.md | 11 + xEAs/x-saherelm.ea.mq4 | 1038 +++++++++ xIndicators/x-saherelm.adx.mq4 | 220 ++ xIndicators/x-saherelm.ma.mq4 | 173 ++ xIndicators/x-saherelm.momentum.mq4 | 160 ++ xIndicators/x-saherelm.osc.mq4 | 257 +++ xIndicators/x-saherelm.psar.mq4 | 215 ++ xIndicators/x-saherelm.rma.mq4 | 141 ++ xIndicators/x-saherelm.rsi.mq4 | 234 ++ xIndicators/x-saherelm.shpd.mq4 | 402 ++++ xIndicators/x-saherelm.sl.mq4 | 154 ++ xIndicators/x-saherelm.tp.mq4 | 221 ++ xIndicators/x-saherelm.trend.mq4 | 250 ++ xIndicators/x-saherelm.volume.mq4 | 270 +++ xIndicators/x-saherelm.x.hl.mq4 | 412 ++++ xIndicators/x-saherelm.x.trend.power.mq4 | 265 +++ xIndicators/x-saherelm.x.trend.power.v2.mq4 | 291 +++ xIndicators/x-saherelm.x.xma.mq4 | 355 +++ xIndicators/x-saherelm.xbnd.mq4 | 425 ++++ xIndicators/x-saherelm.xhh.mq4 | 410 ++++ xIndicators/x-saherelm.xma.1.mq4 | 337 +++ xIndicators/x-saherelm.xma.mq4 | 695 ++++++ xIndicators/x-saherelm.xmarket.mq4 | 394 ++++ xIndicators/x-saherelm.xmma.mq4 | 408 ++++ xIndicators/x-saherelm.xmma.signalling.mq4 | 249 ++ xIndicators/x-saherelm.xmtrend.mq4 | 221 ++ xIndicators/x-saherelm.xrange.mq4 | 294 +++ xIndicators/x-saherelm.xtpow.mq4 | 275 +++ xIndicators/x-saherelm.zigzag.mq4 | 476 ++++ xLibraries/x-saherelm.draw.lib.mq4 | 2010 +++++++++++++++++ xLibraries/x-saherelm.indicator.lib.mq4 | 450 ++++ xLibraries/x-saherelm.lib.mq4 | 1662 ++++++++++++++ xLibraries/x-saherelm.log.lib.mq4 | 91 + xLibraries/x-saherelm.models.lib.mq4 | 154 ++ xLibraries/x-saherelm.signal.lib.mq4 | 1756 ++++++++++++++ xLibraries/x-saherelm.x.signal.lib.mq4 | 1063 +++++++++ xLibraries/x-saherelm.xr.signal.lib.mq4 | 1142 ++++++++++ xLibraries/x-saherelm.xtpw.signal.lib.mq4 | 1332 +++++++++++ xSamples/ATR.mq4 | 104 + xSamples/Accelerator.mq4 | 114 + xSamples/Accumulation.mq4 | 69 + xSamples/Alligator.mq4 | 81 + xSamples/Awesome.mq4 | 101 + xSamples/Bands.mq4 | 138 ++ xSamples/Bears.mq4 | 67 + xSamples/Bulls.mq4 | 67 + xSamples/CCI.mq4 | 125 + xSamples/Custom Moving Averages.mq4 | 190 ++ xSamples/Heiken Ashi.mq4 | 138 ++ xSamples/Ichimoku.mq4 | 208 ++ xSamples/MACD.mq4 | 89 + xSamples/Momentum.mq4 | 78 + xSamples/OsMA.mq4 | 91 + xSamples/Parabolic.mq4 | 239 ++ xSamples/ParabolicSar.mq4 | 333 +++ xSamples/RSI.mq4 | 133 ++ xSamples/Stochastic.mq4 | 157 ++ xSamples/ZigZag.mq4 | 257 +++ xSamples/iExposure.mq4 | 249 ++ 217 files changed, 41677 insertions(+) create mode 100644 .gitkeep create mode 100644 Docs/R&D/Candlestick.Patterns.md create mode 100644 Docs/R&D/EMA.md create mode 100644 Docs/R&D/ichimoku.md create mode 100644 Docs/Samples/Angle.md create mode 100644 Docs/Samples/ArraySetAsSeries.md create mode 100644 Docs/Samples/Ask&Bid.md create mode 100644 Docs/Samples/BarIndex.md create mode 100644 Docs/Samples/CCI.EA.SL.TP.Tutorial.md create mode 100644 Docs/Samples/CandleIndexing.md create mode 100644 Docs/Samples/Chart.Indicator.Tutorial.md create mode 100644 Docs/Samples/ChartRedraw.md create mode 100644 Docs/Samples/Comment.md create mode 100644 Docs/Samples/CopyBuffer.md create mode 100644 Docs/Samples/DrawFibonnaciTemplate.md create mode 100644 Docs/Samples/DrawSignal.md create mode 100644 Docs/Samples/Expert.Advisor.Tutorial.md create mode 100644 Docs/Samples/ExpertAdviser.md create mode 100644 Docs/Samples/Get.Account.Balance.md create mode 100644 Docs/Samples/Get.BID.Price.md create mode 100644 Docs/Samples/Input.md create mode 100644 Docs/Samples/IsNewBar.md create mode 100644 Docs/Samples/Libraries.md create mode 100644 Docs/Samples/MQL.md create mode 100644 Docs/Samples/MetaTrader.StrategyTester.md create mode 100644 Docs/Samples/OBJPROP_CORNER.md create mode 100644 Docs/Samples/Object Types.md create mode 100644 Docs/Samples/OnCalculate.md create mode 100644 Docs/Samples/OnDeinit.md create mode 100644 Docs/Samples/OnInit.md create mode 100644 Docs/Samples/OnTick.md create mode 100644 Docs/Samples/OrderSend.md create mode 100644 Docs/Samples/Pine.Calculation.md create mode 100644 Docs/Samples/Plot.md create mode 100644 Docs/Samples/Position.Counting.md create mode 100644 Docs/Samples/PositionGetTicket.md create mode 100644 Docs/Samples/PositionsTotal.md create mode 100644 Docs/Samples/Print.md create mode 100644 Docs/Samples/RMA.md create mode 100644 Docs/Samples/RSI Moving Average Cross EA.Tutorial.md create mode 100644 Docs/Samples/SMA.md create mode 100644 Docs/Samples/SampleOrder.md create mode 100644 Docs/Samples/Simple.Oscillator.md create mode 100644 Docs/Samples/Simple.indicator.md create mode 100644 Docs/Samples/Slope.md create mode 100644 Docs/Samples/Stochastic EA Tutorial.md create mode 100644 Docs/Samples/SymbolInfoDouble.md create mode 100644 Docs/Samples/TP-SL Calculation.md create mode 100644 Docs/Samples/Trade.md create mode 100644 Docs/Samples/TradeOncePerBar.md create mode 100644 Docs/Samples/VWMA.md create mode 100644 Docs/Samples/_Point.md create mode 100644 Docs/Samples/iBarShift.md create mode 100644 Docs/Samples/iCustom.md create mode 100644 Docs/Samples/include.mql.md create mode 100644 Docs/Samples/indicator_buffers.md create mode 100644 Docs/Samples/nz.md create mode 100644 Docs/Samples/property.md create mode 100644 Docs/Samples/show_label_on_last_candle.pine create mode 100644 Docs/Strategies/XST_SR15M.md create mode 100644 Docs/Templates/ee.mq4 create mode 100644 Docs/Templates/raw-strategy.doc.md create mode 100644 Docs/Templates/report.md create mode 100644 Docs/Templates/strategy.report.md create mode 100644 Docs/Templates/x-lib.candle.mq4 create mode 100644 Docs/Templates/x-mql.ea.template.mq4 create mode 100644 Docs/Templates/x-mql.indicator.template.mq4 create mode 100644 Docs/Templates/x-mql.lib.template.mq4 create mode 100644 Docs/Templates/x-mql.oscillator.template.mq4 create mode 100644 Docs/Templates/x-pine-script.indicator.template.pine create mode 100644 Docs/Templates/x-pine-script.oscillator.template.pine create mode 100644 Docs/Templates/x-pine-script.strategy.template.pine create mode 100644 Docs/Templates/x-trade.tempolate.report.txt create mode 100644 Packed/XAUUSD-15M/Configs/3000 - 0.75.set create mode 100644 Packed/XAUUSD-15M/EX4/EA/x-saherelm.ea.ex4 create mode 100644 Packed/XAUUSD-15M/EX4/Indicators/x-saherelm.ma.ex4 create mode 100644 Packed/XAUUSD-15M/EX4/Indicators/x-saherelm.xrange.ex4 create mode 100644 Packed/XAUUSD-15M/EX4/Indicators/x-saherelm.xtpow.ex4 create mode 100644 Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.draw.lib.ex4 create mode 100644 Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.indicator.lib.ex4 create mode 100644 Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.lib.ex4 create mode 100644 Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.log.lib.ex4 create mode 100644 Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.models.lib.ex4 create mode 100644 Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.signal.lib.ex4 create mode 100644 Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.x.signal.lib.ex4 create mode 100644 Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.xr.signal.lib.ex4 create mode 100644 Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.xtpw.signal.lib.ex4 create mode 100644 Packed/XAUUSD-15M/MQL4/EA/x-saherelm.ea.mq4 create mode 100644 Packed/XAUUSD-15M/MQL4/Indicators/x-saherelm.ma.mq4 create mode 100644 Packed/XAUUSD-15M/MQL4/Indicators/x-saherelm.xrange.mq4 create mode 100644 Packed/XAUUSD-15M/MQL4/Indicators/x-saherelm.xtpow.mq4 create mode 100644 Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.draw.lib.mq4 create mode 100644 Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.indicator.lib.mq4 create mode 100644 Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.lib.mq4 create mode 100644 Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.log.lib.mq4 create mode 100644 Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.models.lib.mq4 create mode 100644 Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.signal.lib.mq4 create mode 100644 Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.x.signal.lib.mq4 create mode 100644 Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.xr.signal.lib.mq4 create mode 100644 Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.xtpw.signal.lib.mq4 create mode 100644 Packed/XAUUSD-15M/Reports/Screenshot 2023-08-03 202922.png create mode 100644 Packed/XAUUSD-15M/Reports/Screenshot 2023-08-08 174923.png create mode 100644 Packed/XAUUSD-15M/Reports/Strategy Tester_ x-saherelm.ea.pdf create mode 100644 Packed/XAUUSD-15M/Reports/Strategy Tester_ x-saherelm.ea_1.pdf create mode 100644 Packed/XAUUSD-15M/Reports/StrategyTester X (XR and XXX and XTPW) - 0.2 - Full.gif create mode 100644 Packed/XAUUSD-15M/Reports/StrategyTester X (XR and XXX and XTPW) - 0.2 - Full.htm create mode 100644 Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.2.gif create mode 100644 Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.2.htm create mode 100644 Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.4. - 2000$.gif create mode 100644 Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.4. - 2000$.htm create mode 100644 Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.4. - 2000$.pdf create mode 100644 Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.75. - 3000$.gif create mode 100644 Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.75. - 3000$.htm create mode 100644 Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.75. - 3000$.pdf create mode 100644 Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full.gif create mode 100644 Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full.htm create mode 100644 Packed/XAUUSD-15M/Reports/X/Long/StrategyTester.gif create mode 100644 Packed/XAUUSD-15M/Reports/X/Long/StrategyTester.htm create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 1.gif create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 1.htm create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 10.gif create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 10.htm create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 11.gif create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 11.htm create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 2.gif create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 2.htm create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 3.gif create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 3.htm create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 4.gif create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 4.htm create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 5.gif create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 5.htm create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 6.gif create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 6.htm create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 7.gif create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 7.htm create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 8.gif create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 8.htm create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 9.gif create mode 100644 Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 9.htm create mode 100644 Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 1.gif create mode 100644 Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 1.htm create mode 100644 Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 2.gif create mode 100644 Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 2.htm create mode 100644 Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 3.gif create mode 100644 Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 3.htm create mode 100644 Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 4.gif create mode 100644 Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 4.htm create mode 100644 Packed/XAUUSD-15M/Reports/XR/StrategyTester 1 - Full.gif create mode 100644 Packed/XAUUSD-15M/Reports/XR/StrategyTester 1 - Full.htm create mode 100644 Packed/XAUUSD-15M/Reports/XR/StrategyTester 2 - 0.2 - Full.gif create mode 100644 Packed/XAUUSD-15M/Reports/XR/StrategyTester 2 - 0.2 - Full.htm create mode 100644 Packed/XAUUSD-15M/Reports/XTPW/Full/StrategyTester 1.gif create mode 100644 Packed/XAUUSD-15M/Reports/XTPW/Full/StrategyTester 1.htm create mode 100644 Packed/XAUUSD-15M/Reports/XTPW/Long/StrategyTester Long 13.gif create mode 100644 Packed/XAUUSD-15M/Reports/XTPW/Long/StrategyTester Long 13.htm create mode 100644 Packed/XAUUSD-15M/Reports/XTPW/Short/StrategyTester 13.gif create mode 100644 Packed/XAUUSD-15M/Reports/XTPW/Short/StrategyTester 13.htm create mode 100644 README.md create mode 100644 xEAs/x-saherelm.ea.mq4 create mode 100644 xIndicators/x-saherelm.adx.mq4 create mode 100644 xIndicators/x-saherelm.ma.mq4 create mode 100644 xIndicators/x-saherelm.momentum.mq4 create mode 100644 xIndicators/x-saherelm.osc.mq4 create mode 100644 xIndicators/x-saherelm.psar.mq4 create mode 100644 xIndicators/x-saherelm.rma.mq4 create mode 100644 xIndicators/x-saherelm.rsi.mq4 create mode 100644 xIndicators/x-saherelm.shpd.mq4 create mode 100644 xIndicators/x-saherelm.sl.mq4 create mode 100644 xIndicators/x-saherelm.tp.mq4 create mode 100644 xIndicators/x-saherelm.trend.mq4 create mode 100644 xIndicators/x-saherelm.volume.mq4 create mode 100644 xIndicators/x-saherelm.x.hl.mq4 create mode 100644 xIndicators/x-saherelm.x.trend.power.mq4 create mode 100644 xIndicators/x-saherelm.x.trend.power.v2.mq4 create mode 100644 xIndicators/x-saherelm.x.xma.mq4 create mode 100644 xIndicators/x-saherelm.xbnd.mq4 create mode 100644 xIndicators/x-saherelm.xhh.mq4 create mode 100644 xIndicators/x-saherelm.xma.1.mq4 create mode 100644 xIndicators/x-saherelm.xma.mq4 create mode 100644 xIndicators/x-saherelm.xmarket.mq4 create mode 100644 xIndicators/x-saherelm.xmma.mq4 create mode 100644 xIndicators/x-saherelm.xmma.signalling.mq4 create mode 100644 xIndicators/x-saherelm.xmtrend.mq4 create mode 100644 xIndicators/x-saherelm.xrange.mq4 create mode 100644 xIndicators/x-saherelm.xtpow.mq4 create mode 100644 xIndicators/x-saherelm.zigzag.mq4 create mode 100644 xLibraries/x-saherelm.draw.lib.mq4 create mode 100644 xLibraries/x-saherelm.indicator.lib.mq4 create mode 100644 xLibraries/x-saherelm.lib.mq4 create mode 100644 xLibraries/x-saherelm.log.lib.mq4 create mode 100644 xLibraries/x-saherelm.models.lib.mq4 create mode 100644 xLibraries/x-saherelm.signal.lib.mq4 create mode 100644 xLibraries/x-saherelm.x.signal.lib.mq4 create mode 100644 xLibraries/x-saherelm.xr.signal.lib.mq4 create mode 100644 xLibraries/x-saherelm.xtpw.signal.lib.mq4 create mode 100644 xSamples/ATR.mq4 create mode 100644 xSamples/Accelerator.mq4 create mode 100644 xSamples/Accumulation.mq4 create mode 100644 xSamples/Alligator.mq4 create mode 100644 xSamples/Awesome.mq4 create mode 100644 xSamples/Bands.mq4 create mode 100644 xSamples/Bears.mq4 create mode 100644 xSamples/Bulls.mq4 create mode 100644 xSamples/CCI.mq4 create mode 100644 xSamples/Custom Moving Averages.mq4 create mode 100644 xSamples/Heiken Ashi.mq4 create mode 100644 xSamples/Ichimoku.mq4 create mode 100644 xSamples/MACD.mq4 create mode 100644 xSamples/Momentum.mq4 create mode 100644 xSamples/OsMA.mq4 create mode 100644 xSamples/Parabolic.mq4 create mode 100644 xSamples/ParabolicSar.mq4 create mode 100644 xSamples/RSI.mq4 create mode 100644 xSamples/Stochastic.mq4 create mode 100644 xSamples/ZigZag.mq4 create mode 100644 xSamples/iExposure.mq4 diff --git a/.gitkeep b/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Docs/R&D/Candlestick.Patterns.md b/Docs/R&D/Candlestick.Patterns.md new file mode 100644 index 0000000..4222bba --- /dev/null +++ b/Docs/R&D/Candlestick.Patterns.md @@ -0,0 +1,134 @@ +# Candlestick Patters + +## Doji + +X_CT_DOJI + +- Continue Trend +- Maybe end of a Trend + +## Evening Star + +X_CT_EVENING_STAR + +- Bearish +- End of Bullish Trend + +## Morning Star + +X_CT_MORNING_STAR + +- Bullish +- End of Bearish Trend + +## Shooting Star + +X_CT_SHOOTING_STAR + +- Bearish +- End of Bullish Trend + +## Hammer + +X_CT_HAMMER + +- Bullish +- End of Bearish Trend + +## Inverted Hammer + +X_CT_INVERTED_HAMMER + +- Bullish +- End of Bearish Trend + +## Bearish Harami + +X_CT_BEARISH_HARAMI + +- Bearish +- End Of Bullish Trend + +## Bullish Harami + +X_CT_BULLISH_HARAMI + +- Bullish +- End of Bearish Trend + +## Bearish Engulfing + +X_CT_BEARISH_ENGULFING + +- Bearish +- End of Bullish Trend + +## Bullish Engulfing + +X_CT_BULLISH_ENGULFING + +- Bullish +- End of Bearish Trend + +## Piercing Line + +X_CT_PRICE_LINE + +- Bearish +- End of Bullish Trend + +## Bullish Belt + +X_CT_BULLISH_BELT + +- Bullish +- End of Bearish Trend + +## Bullish Kicker + +X_CT_BULLISH_KICKER + +- Bullish +- End of Bearish Trend + +## Bearish Kicker + +X_CT_BEARISH_KICKER + +- Bearish +- End of Bullish Trend + +## Hanging Man + +X_CT_HANGING_MAN + +- Bearish +- End of Bullish Trend + +## Dark Cloud Cover + +X_CT_DARK_CLOUD_COVER + +- Bearish +- End of Bullish Trend + +## Bullish Candles + +X_CT_HAMMER +X_CT_BULLISH_BELT +X_CT_MORNING_STAR +X_CT_BULLISH_KICKER +X_CT_BULLISH_HARAMI +X_CT_INVERTED_HAMMER +X_CT_BULLISH_ENGULFING + +## Bearish Candles + +X_CT_PRICE_LINE +X_CT_HANGING_MAN +X_CT_EVENING_STAR +X_CT_SHOOTING_STAR +X_CT_BEARISH_HARAMI +X_CT_BEARISH_KICKER +X_CT_DARK_CLOUD_COVER +X_CT_BEARISH_ENGULFING diff --git a/Docs/R&D/EMA.md b/Docs/R&D/EMA.md new file mode 100644 index 0000000..8516441 --- /dev/null +++ b/Docs/R&D/EMA.md @@ -0,0 +1,15 @@ +# EMA + +The EMA is designed to improve on the idea of an SMA by giving more weight to the most recent price data, which is considered to be more relevant than older data. Since new data carries greater weight, the EMA responds more quickly to price changes than the SMA does. + +## Fromula + +EMA = Price(t) × k + EMA(y) × (1−k) + +where: + +t = today +y = yesterday +N = number of days in EMA +k = 2 ÷ (N + 1) +​ diff --git a/Docs/R&D/ichimoku.md b/Docs/R&D/ichimoku.md new file mode 100644 index 0000000..f58e80b --- /dev/null +++ b/Docs/R&D/ichimoku.md @@ -0,0 +1,14 @@ +# Ichimoku + +1. **Conversion Line** (*tenkan sen*) => **9-PH+9-PL**/**2** +2. **Base Line** (*kijun sen*) => **26-PH + 26-PL**/**2** +3. **Leading Span A** (*senkou span A*) => **CL + Base Line**/**2** +4. **Leading Span B** (*senkou span B*) => **52-PH + 52-PL**/**2** +5. **Lagging Span** (*chikou span*) => **Close plotted 26 periods in the past** + +## where + +**PH** = Period high +**PL** = Period low +**CL** = Conversion line +​ diff --git a/Docs/Samples/Angle.md b/Docs/Samples/Angle.md new file mode 100644 index 0000000..6f4c0b6 --- /dev/null +++ b/Docs/Samples/Angle.md @@ -0,0 +1,3 @@ +# Angle + +tan A = | (m - m’) / (1 + mm’ ) | diff --git a/Docs/Samples/ArraySetAsSeries.md b/Docs/Samples/ArraySetAsSeries.md new file mode 100644 index 0000000..81be7d8 --- /dev/null +++ b/Docs/Samples/ArraySetAsSeries.md @@ -0,0 +1,26 @@ +# ArraySetAsSeries + +The function sets the AS_SERIES flag to a selected object of a dynamic array, and elements will be indexed like in timeseries. + +bool ArraySetAsSeries( + const void& array[], // array by reference + bool flag // true denotes reverse order of indexing + ); + +Parameters + +array[] + +[in][out] Numeric array to set. + +flag + +[in] Array indexing direction. + +Return Value + +The function returns true on success, otherwise - false. + +Note + +The AS_SERIES flag can't be set for multi-dimensional arrays or static arrays (arrays, whose size in square brackets is preset already on the compilation stage). Indexing in timeseries differs from a common array in that the elements of timeseries are indexed from the end towards the beginning (from the newest to oldest data). \ No newline at end of file diff --git a/Docs/Samples/Ask&Bid.md b/Docs/Samples/Ask&Bid.md new file mode 100644 index 0000000..91bb5d9 --- /dev/null +++ b/Docs/Samples/Ask&Bid.md @@ -0,0 +1,3 @@ +# Note on Bid and Ask + +The Bid price is what you see on the MT4 charts, and the Ask price is just a few pips above the bid price, with the difference between them being the spread. We open buy orders and close sell orders on the Ask price; we open sell orders and close buy orders on the Bid price. diff --git a/Docs/Samples/BarIndex.md b/Docs/Samples/BarIndex.md new file mode 100644 index 0000000..2d6910c --- /dev/null +++ b/Docs/Samples/BarIndex.md @@ -0,0 +1,50 @@ +# BarIndex + +in pine script bar_index reffers to current candle number, in reversal indexing. +in MQL for accessing bar_index to calculate indicator data, we have to do something like this: + +```mq4 +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[]) + { + // + // here we define our limit ... + int limit = rates_total - prev_calculated; + + // + // if our indicator requires some candles to pass as a length, + // and then start calculating by past passed values, by this way + // we are going to inform MQL Compiler, which do nothing, until + // required length passed ... + if(rates_total <= InpBullsPeriod) { + return(0); + } + + // + // because bar index a zero start indexing system, for fixing + // qctual indexing in for loops, we have to call this ... + if(prev_calculated > 0) { + limit++; + } + + // + // Loop through Bar Indexes ... + for(int i = 0; i < limit; i++) { + // + // Filling Exists Buffers, based on current Bar Index and required Conditions ... + ExtTempBuffer[i]=iMA(NULL,0,InpBullsPeriod,0,MODE_EMA,PRICE_CLOSE,i); + ExtBullsBuffer[i]=high[i]-ExtTempBuffer[i]; + } + + // + return(rates_total); +} +``` diff --git a/Docs/Samples/CCI.EA.SL.TP.Tutorial.md b/Docs/Samples/CCI.EA.SL.TP.Tutorial.md new file mode 100644 index 0000000..131f86a --- /dev/null +++ b/Docs/Samples/CCI.EA.SL.TP.Tutorial.md @@ -0,0 +1,407 @@ +# CCI EA With SL and TP + +this tutorial consists 5 part: + +1. Create a CCI EA with SL and TP; +2. add a Moving Average Filter on a higher Timeframe; +3. add a Partial Close; +4. add a Break Event Stop; +5. Backtesting; + +## Create a CCI EA with SL and TP + +CCI is an Oscillator which provides some usefull data about iver baughts and over solds. +each of this situations can used as a signal. + +the general idea in this tutorial is to use this states as a signal and then open and close positions based on them ... + +Create a Expert Advisor and named it what you want. + +now we have to read CCI data. create a pointer to it's iFunction and then create a buffer based on it on OnTick function. +we can now create a buy and sell conditions and check where this happens to open the positions. + +the idea is when cci going above special level we get buy signal and when going below special level we get sell signal. + +for implement this mechanism, first add two input for buyLevel and sellLevel and give them default values. + +```mq4 +#include + +// +CTrade trader; + +// +input double Lots = 1; +input double TpPoints = 100; +input double SlPoints = 100; + +// +input double CciBuyLevel = -150; +input double CciSellLevel = 150; + +// +int barsTotal; + +// +int OnInit() { + // + barsTotal = iBars(_Symbol, CciTimeFrame); + + // + OnTick(); + + // + return INIT_SUCCEEDED; +} + +// +void OnTick() { + // + // for every single tick, we check current amount of bars + // for preventing double signaling on single bar ... + int bars = iBars(_Symbol, CciTimeframe); + if (barsTotal < bars) { + // + barsTotal = bars; + + // + double cci[]; + CopyBuffer(cciPointer, 0, 1, 2, cci); + + // + // Buy Signal Condition ... + if (cci[1] < CciBuyLevel && cci[0] > CciBuyLevel) { + // + // Do Buy Trade ... + + // + // retrieve ask price ... + // since trader.Buy alway use market price (ask price) ... + double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Normalize ask price ... + ask = NormalizeDouble(ask, _Digits); + + // + // Calculating Tp based on Ask price ... + double tp = ask + TpPoints * _Point; + tp = NormalizeDouble(tp, _Digits); + + + // + // Calculating Sl based on Ask price ... + double sl = ask - SlPoints * _Point; + sl = NormalizeDouble(sl, _Digits); + + // + trader.Buy(Lots, _Symbol, ask, sl, tp, "CCI Buy ..."); + } else + // + // Sell Signal Condition ... + if (cci[1] > CciSellLevel && cci[0] < CciSellLevel) { + // + // Do Sell Trade ... + + // + // retrieve bid price ... + // since trader.Sell alway use market price (bid price) ... + double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); + + // + // Normalize bid price ... + bid = NormalizeDouble(bid, _Digits); + + // + // Calculating Tp based on Bid price ... + double tp = bid - TpPoints * _Point; + tp = NormalizeDouble(tp, _Digits); + + + // + // Calculating Sl based on Bid price ... + double sl = bid + SlPoints * _Point; + sl = NormalizeDouble(sl, _Digits); + + // + trader.Sell(Lots, _Symbol, bid, sl, tp, "CCI Sell ..."); + } + + // + // Show data on Chart side ... + Comment("\nCCI[0]: ", cci[0], + "\nCCI[1]: ", cci[1] + ); + } +} +``` + +## add a Moving Average Filter on a higher Timeframe + +moving average is another usefull indicator which provides a way to following market trend direction. +the idea is to accdept signals in direction of ma result. +so we have to implement Moving average in our EA then use it's values for filtering signals, this is what we call MA Verifications. + +attached proper inputs related to MA Indicator to your advisor. + +then create a Pointer(Handler) for iFunction of MA indicator. + +we have to check for buy signals, that the ask price is above than moving average. and for sell signals the bid price is below than moving average, then if this conditions +are full filled, enter the positions. + +```mq4 +void OnTick() { + ... + + // + // reading ma series, buffer ... + double ma[]; + CopyBuffer(maPointer, 0, 1, 1, ma); + + // + // Buy Signal Condition ... + if (cci[1] < CciBuyLevel && cci[0] > CciBuyLevel) { + // + // Do Buy Trade ... + + // + // retrieve ask price ... + // since trader.Buy alway use market price (ask price) ... + double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Filter by Moving Average ... + if (ask > ma[0]) { + ... + } + } else + // + // Sell Signal Condition ... + if (cci[1] > CciSellLevel && cci[0] < CciSellLevel) { + // + // Do Sell Trade ... + + // + // retrieve bid price ... + // since trader.Sell alway use market price (bid price) ... + double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); + + // + // Filter by Moving Average ... + if (bid < ma[0]) { + ... + } + } + + ... + + // + // Show data on Chart side ... + Comment("\nCCI[0]: ", cci[0], + "\nCCI[1]: ", cci[1], + "\nMA[0]: ", ma[0], + ); +} +``` + +## add a Partial Close + +partial close positions is an idea to save money more than usual in trading exit strategy. +actually implementing CTrade instance provide this for us. and we can use it in our EAs. + +in this section we are going to review how we can do it ... + +```mq4 +// +// Define Some Inputs for Partial Close Positions Management ... +input int PartialClosePoints = 70; +input double PartialCloseFactor = 0.5; + +... + +// +void OnTick() { + + ... + + // + // Calculate Ask and Bid Price values ... + double ask = ... + double bid = ... + + // + // here we loop through all open Positions ... + for (int i = PositionsTotal() - 1; i >=0; i--) { + // + // retrieve position ticket ... + ulong positionTicket = PositionGetTicket(i); + + // + // retrieve Position by it's Ticket ... + if (PositionSelectByTicket(positionTicket)) { + // + // now we can check conditions ... + + // + // Retrieve Position Open Price ... + double positionOpenPrice = PositionGetDouble(POSITION_PRICE_OPEN); + + // + // Retrieve Position Volume ... + double positionVolume = PositionGetDouble(POSITION_VOLUME); + + // + // Retrieve Position Type: Buy or Sell Position ... + ENUM_POSITION_TYPE positionType = (ENUM_POSITION_TYPE) PositionGetInteger(POSITION_TYPE); + + // + // now we have check position volume, for prevent partialy closing a partial closed position ... + if (positionVolume == Lots) { + // + // Calculate Partially close volume ... + double lotsToClose = positionVolume * PartialCloseFactor; + lotsToClose = NormalizeDouble(lotsToClose, 2); + + // + // Check Position Type and do Partial Close based on Separation Type ... + if (positionType == POSITION_TYPE_BUY) { + // + // Partialy Close Buy Positions ... + if (bid > positionOpenPrice + PartialClosePoints * _Point) { + // + // Try to Partially Close Position ... + if (trade.PositionClosePartial(positionTicket, lotsToClose)) { + // + // show a simple message ... + Print("Pos ", positionTicket, " was closed partially ..."); + } + } + } else if (positionType == POSITION_TYPE_SELL) { + // + // Partialy Close Sell Positions ... + if (ask < positionOpenPrice - PartialClosePoints * _Point) { + // + // Try to Partially Close Position ... + if (trade.PositionClosePartial(positionTicket, lotsToClose)) { + // + // show a simple message ... + Print("Pos ", positionTicket, " was closed partially ..."); + } + } + } + } + } + } +} +``` + +## add a Break Event Stop + +some times is some trades we need to make a position risk free. +this means when a position triggered at specified point of profits, move sl to specified point. + +for example we have a buy position of 100.100 price. +we need to move it's sl when bid price touch 100.150 to 100.105 + +moving sl of a position called Break Event ... + +for this reason we have to specify 2 pqarams: + +- TriggerPoint: this is a value which we change sl of position when or open price of position changed by this point; +- PufferPoint: this is a value which we change sl based on it. + +```mq4 +void OnTick() { + + ... + + // + // here we loop through all open Positions ... + for (int i = PositionsTotal() - 1; i >=0; i--) { + // + // retrieve position ticket ... + ulong positionTicket = PositionGetTicket(i); + + // + // retrieve Position by it's Ticket ... + if (PositionSelectByTicket(positionTicket)) { + // + // now we can check conditions ... + + // + // Retrieve Position Open Price ... + double positionOpenPrice = PositionGetDouble(POSITION_PRICE_OPEN); + + // + // Retrieve Position TP ... + double positionTP = PositionGetDouble(POSITION_TP); + + // + // Retrieve Position SL ... + double positionSL = PositionGetDouble(POSITION_SL); + + // + // Retrieve Position Volume ... + double positionVolume = PositionGetDouble(POSITION_VOLUME); + + // + // Retrieve Position Type: Buy or Sell Position ... + ENUM_POSITION_TYPE positionType = (ENUM_POSITION_TYPE) PositionGetInteger(POSITION_TYPE); + + // + // Check Position Type and do Partial Close based on Separation Type ... + if (positionType == POSITION_TYPE_BUY) { + // + // Break Event Buy Positions ... + + // + // Check if Price recive to value for changing sl ... + if (bid > positionOpenPrice + BETriggerPoint * _Point) { + // + // Calculate new SL Price ... + double sl = positionOpenPrice + BEPufferPoint * _Points; + sl = NormalizeDouble(sl, _Digits); + + // + // Check new Calculated SL be Bigger than current SL ... + if (sl > positionSL) { + // + // Modify Trade and Change it's SL ... + if (trader.PositionModify(positionTicket, sl, positionTp)) { + // + Print("Pos ", poistionTicket, " was saved as Break Event ..."); + } + } + } + } else if (positionType == POSITION_TYPE_SELL) { + // + // Break Event Sell Positions ... + + // + // Check if Price recive to value for changing sl ... + if (ask < positionOpenPrice - BETriggerPoint * _Point) { + // + // Calculate new SL Price ... + double sl = positionOpenPrice - BEPufferPoint * _Points; + sl = NormalizeDouble(sl, _Digits); + + // + // Check new Calculated SL be Bigger than current SL ... + if (sl < positionSL) { + // + // Modify Trade and Change it's SL ... + if (trader.PositionModify(positionTicket, sl, positionTp)) { + // + Print("Pos ", poistionTicket, " was saved as Break Event ..."); + } + } + } + } + } + } +} +``` + +## Backtesting + +you must use Strategy tester in back test ... \ No newline at end of file diff --git a/Docs/Samples/CandleIndexing.md b/Docs/Samples/CandleIndexing.md new file mode 100644 index 0000000..e6c3422 --- /dev/null +++ b/Docs/Samples/CandleIndexing.md @@ -0,0 +1,4 @@ +# Candle Indexing + +like Pine Script, in MQL 4 or 5 Candles, Buffers and Series indexed in reversal pattern. +this is an important note ... diff --git a/Docs/Samples/Chart.Indicator.Tutorial.md b/Docs/Samples/Chart.Indicator.Tutorial.md new file mode 100644 index 0000000..f121b5f --- /dev/null +++ b/Docs/Samples/Chart.Indicator.Tutorial.md @@ -0,0 +1,129 @@ +# Chart Indicator Tutorial + +## Create Indicator + +open meta editor and create a new custom indicator. + +## Inputs + +we have to show 2 lines in chart as my indicator, so in creation time, i specified these on input window: + +line 1 => Line => Red +line 2 => Line => Yellow + +in this section if you check the Indicator in separate window, you tell the MT4 which this is an Oscillator. + +after finish this section and source code will opened in meta editor. +you can see how it defined as source code ... + +i will complete all next works on the source code, and comment it ... + +## Source Code + +```mq4 +// +// these line are comment lines and no necessary ... +//+------------------------------------------------------------------+ +//| x-saherelm-custom-indicator.mq4 | +//| Copyright 2023, SaherElm IT Center. | +//| https://www.saherelm.ir | +//+------------------------------------------------------------------+ + +// +// all compiler options defines using # sign ... + +// +// here define some global properties of indicator ... +// these are not necessary, but provides some usefull info about indicator itself ... +#property copyright "Copyright 2023, SaherElm IT Center." +#property link "https://www.saherelm.ir" +#property version "1.00" + +// +// use for improvement compiling ... +#property strict + +// +// here we tell this is usually indicator which +// represent's on chart itself ... +#property indicator_chart_window + +// +// define which buffers processed using this indicator ... +#property indicator_buffers 2 + +// +// define which plots represent using this indicator ... +#property indicator_plots 2 + +// +// here we declare plot line1 to system ... +#property indicator_label1 "line1" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrLime +#property indicator_style1 STYLE_SOLID +#property indicator_width1 1 + +// +// here we declare plot line2 to system ... +#property indicator_label2 "line2" +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrRed +#property indicator_style2 STYLE_SOLID +#property indicator_width2 1 + +// +// here we declare indicator buffers ... +double line1Buffer[]; +double line2Buffer[]; + +// +//+------------------------------------------------------------------+ +//| Custom indicator initialization function | +//+------------------------------------------------------------------+ + +// +// this event handle used to initialize what we want to use and what we +// can do on indicator ... +int OnInit() { + // + // indicator buffers mapping ... + // we must assign which buffer must used to drawn which plot ... + SetIndexBuffer(0,line1Buffer); + SetIndexBuffer(1,line2Buffer); + + // + // this means initialization end's successfully ... + return(INIT_SUCCEEDED); +} + +// +//+------------------------------------------------------------------+ +//| Custom indicator iteration function | +//+------------------------------------------------------------------+ + +// +// this event handler calls with system every time a change happens on price ( new tick ) ... +// all of calculatings must be done in this section ... +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // here we must do all of indicator related calculations and fill buffers for drawing plots on chart ... + + // + // return value of prev_calculated for next call + return(rates_total); +} + +// +//+------------------------------------------------------------------+ +``` diff --git a/Docs/Samples/ChartRedraw.md b/Docs/Samples/ChartRedraw.md new file mode 100644 index 0000000..4831483 --- /dev/null +++ b/Docs/Samples/ChartRedraw.md @@ -0,0 +1,6 @@ +# ChartRedraw + +```mq4 +//--- redraw the chart and wait for 1 second + ChartRedraw(); +``` diff --git a/Docs/Samples/Comment.md b/Docs/Samples/Comment.md new file mode 100644 index 0000000..a9b67eb --- /dev/null +++ b/Docs/Samples/Comment.md @@ -0,0 +1,5 @@ +# Comment + +by this command you can show som data on charts window itself. +this data can be change through candles. + diff --git a/Docs/Samples/CopyBuffer.md b/Docs/Samples/CopyBuffer.md new file mode 100644 index 0000000..e69de29 diff --git a/Docs/Samples/DrawFibonnaciTemplate.md b/Docs/Samples/DrawFibonnaciTemplate.md new file mode 100644 index 0000000..2ba4183 --- /dev/null +++ b/Docs/Samples/DrawFibonnaciTemplate.md @@ -0,0 +1,203 @@ +# DrawFibonnaci + +```mq4 + // + // START Draw Fibonachi Retracement Object ... + // + // // + // int fibIndex = 0; + // int fibLevelsCount = 6; + // int fibLevelWidths[6]; + // color fibLevelColors[6]; + // double fibLevelValues[6]; + // string fibLevelDescriptions[6]; + // ENUM_LINE_STYLE fibLevelStyles[6]; + + // // + // // Level 1 ... + // // 0.0 + // // clrGray ... + // fibLevelValues[fibIndex] = 0.0; + // fibLevelColors[fibIndex] = clrGray; + // fibLevelStyles[fibIndex] = STYLE_DOT; + // fibLevelWidths[fibIndex] = 1; + // fibLevelDescriptions[fibIndex] = "0.0 @ %$"; + // fibIndex++; + + // // + // // Level 2 ... + // // 0.236 + // // clrOliveDrab ... + // fibLevelValues[fibIndex] = 0.236; + // fibLevelColors[fibIndex] = clrOliveDrab; + // fibLevelStyles[fibIndex] = STYLE_DOT; + // fibLevelWidths[fibIndex] = 1; + // fibLevelDescriptions[fibIndex] = "0.236 @ %$"; + // fibIndex++; + + // // + // // Level 3 ... + // // 0.382 + // // clrYellow ... + // fibLevelValues[fibIndex] = 0.382; + // fibLevelColors[fibIndex] = clrYellow; + // fibLevelStyles[fibIndex] = STYLE_DASHDOTDOT; + // fibLevelWidths[fibIndex] = 1; + // fibLevelDescriptions[fibIndex] = "0.382 @ %$"; + // fibIndex++; + + // // + // // Level 4 ... + // // 0.5 + // // clrLime ... + // fibLevelValues[fibIndex] = 0.5; + // fibLevelColors[fibIndex] = clrLime; + // fibLevelStyles[fibIndex] = STYLE_DASHDOT; + // fibLevelWidths[fibIndex] = 1; + // fibLevelDescriptions[fibIndex] = "0.5 @ %$"; + // fibIndex++; + + // // + // // Level 5 ... + // // 0.618 + // // clrYellow ... + // fibLevelValues[fibIndex] = 0.618; + // fibLevelColors[fibIndex] = clrYellow; + // fibLevelStyles[fibIndex] = STYLE_DASHDOTDOT; + // fibLevelWidths[fibIndex] = 1; + // fibLevelDescriptions[fibIndex] = "0.618 @ %$"; + // fibIndex++; + + // // + // // Level 6 ... + // // 1 + // // clrGray ... + // fibLevelValues[fibIndex] = 1.0; + // fibLevelColors[fibIndex] = clrGray; + // fibLevelStyles[fibIndex] = STYLE_DOT; + // fibLevelWidths[fibIndex] = 1; + // fibLevelDescriptions[fibIndex] = "1.0 @ %$"; + // fibIndex++; + + // // + // string fibName = StringConcatenate( + // signalPrefix, + // "_[", totalSignals, "]_", + // "[Fibo]" + // ); + + // // + // double fibDestPrice = hasLongSignal ? + // slInfo.longSL : + // slInfo.shortSL; + + // // + // // Draw Fibonacci on Signal Propposed Area ... + // DrawCustomFibonacci( + // fibLevelsCount, + // fibLevelValues, + // fibLevelColors, + // fibLevelStyles, + // fibLevelWidths, + // fibLevelDescriptions, + // 0, // Chart ID ... + // fibName, // Object Name ... + // 0, // SubWindow ... + // zigZagHighTime, // Time 1 ... + // zigZagHigh, // Price 1 ... + // time, // Time 2 ... + // fibDestPrice, // Price 2 ... + // clrCadetBlue // Fib Aroow Color ... + // ); + + // + // TODO: now we have to analyse Entry Point (price), using Fib ... + // string fibLevel3Description = ""; + // fibLevel3Description = ObjectGetFiboDescription(fibName, 2); + // string message = StringConcatenate( + // "Fib Level 3 Desc: ", + // fibLevel3Description + // ); + // LogMessage(fibLevel3Description); + + // // + // // + // string fibLevel5Description = ""; + + // + double fibDestPrice = hasLongSignal ? + slInfo.longSL : + slInfo.shortSL; + + // + datetime fibTime1 = iTime( + _Symbol, + _Period, + 1 + ); + + // + datetime fibTime2 = iTime( + _Symbol, + _Period, + 0 + ); + + // + double minFibLevelValue = 0.382; + double minFibLevel = GetFibonacciLevel( + zigZagHigh, // Up ... + fibDestPrice, // Down ... + minFibLevelValue, // Level ... + X_DOWN // Direction ... + ); + string minFibLevelName = StringConcatenate( + signalPrefix, + "_[", totalSignals, "]_", + "[Fibo_0.382]" + ); + + // + // Draw minFibLevel ... + DrawTrendLine( + 0, + minFibLevelName, + 0, + fibTime1, + minFibLevel, + fibTime2, + minFibLevel, + clrYellow + ); + + // + double maxFibLevelValue = 0.618; + double maxFibLevel = GetFibonacciLevel( + zigZagHigh, // Up ... + fibDestPrice, // Down ... + maxFibLevelValue, // Level ... + X_DOWN // Direction ... + ); + string maxFibLevelName = StringConcatenate( + signalPrefix, + "_[", totalSignals, "]_", + "[Fibo_0.618]" + ); + + // + // Draw minFibLevel ... + DrawTrendLine( + 0, + minFibLevelName, + 0, + fibTime1, + maxFibLevel, + fibTime2, + maxFibLevel, + clrYellow + ); + + // + // END Draw Fibonachi Retracement Object ... + // +``` \ No newline at end of file diff --git a/Docs/Samples/DrawSignal.md b/Docs/Samples/DrawSignal.md new file mode 100644 index 0000000..f2e0318 --- /dev/null +++ b/Docs/Samples/DrawSignal.md @@ -0,0 +1,102 @@ +# Draw Signal + +```mql + // + // Draw a shape On Chart ... + if (hasLongSignal) { + // + arrowups++; + + // + string arrowUpName = StringConcatenate(signalPrefix, "_ArrowUp_", arrowups); + + // + datetime arrowTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + double arrowPrice = iOpen( + _Symbol, + _Period, + bar_index + ); + arrowPrice = arrowPrice - (100 * _Point); + + // + // Draw Signal Arrow Shape ... + bool isDraw = DrawArrow( + 0, + arrowUpName, + 0, + arrowTime, + arrowPrice, + SYMBOL_ARROWUP, + ANCHOR_BOTTOM, + clrAqua, + STYLE_SOLID, + 3, + false, + false, + false, + 0 + ); + + // + // SL Info ... + XSLInfo slInfo = GetSwngSL(bar_index); + + // + // TP Info ... + XTPInfo tpInfo = GetTP(bar_index); + + + // + string arrowUpSLName = StringConcatenate(signalPrefix, "_SL_", arrowups); + string arrowUpTPName = StringConcatenate(signalPrefix, "_TP_", arrowups); + + // + datetime time1 = iTime( + _Symbol, + _Period, + bar_index + 1 + ); + datetime time2 = iTime( + _Symbol, + _Period, + bar_index + ); + + // + // Draw Signal SL ... + DrawTrendLine( + 0, + arrowUpSLName, + 0, + time1, + slInfo.longSL, + time2, + slInfo.longSL, + clrFuchsia, + STYLE_SOLID, + 2 + ); + + // + // Draw Signal TP ... + DrawTrendLine( + 0, + arrowUpTPName, + 0, + time1, + tpInfo.longTP, + time2, + tpInfo.longTP, + clrAqua, + STYLE_SOLID, + 2 + ); + } +``` \ No newline at end of file diff --git a/Docs/Samples/Expert.Advisor.Tutorial.md b/Docs/Samples/Expert.Advisor.Tutorial.md new file mode 100644 index 0000000..56d28ce --- /dev/null +++ b/Docs/Samples/Expert.Advisor.Tutorial.md @@ -0,0 +1,309 @@ +# EA Tutorials + +in this tutorial we cover this titles step by step: + +1. Create new Expert Advisor +2. Variables +3. Functions +4. Control Structures +5. Read Indicator Data +6. Open Trades +7. Modify Trades +8. Close Trades + +## Create new Expert Advisor + +in meta editor (f4, tools > meta editor), click on new and select expert adviser. + +as you know all mql programs runing based on event handlers. + +there are three main event handlers, which used in an EA: + +- OnInit // runs each time tf changes, or ea attached ... +- OnDeinit // runs when ea removed from chart ... +- OnTick // most important function, all of business logics implemented here ... + +you can see all of it's documents on proppered file. + +the main feature of an EA in MQL, is there are some features which helps us. such as notification of signals and auto trading abbility. + +## Variables + +usually used to store some values of specific Data Types. +so this is much better to see supported datat types in documentations. + +for using variables, you had to define a variable, also you can set init value of it's supported data type. +each variable must be specific it's own data type. + +each variable defined by assign a name to it. + +so by using this name you can assign value to it or read it assigned value ... + +## Functions + +in programming, a function can get some params and do some actions on them and return a result. +doing some actions is the permanent part of it's definition. +this means a function can only do a simple action and not have any params, and not have any return type. + +each function must contain a unioque name. + +in scope of project you can call a function by providing it's name and passing required params and also gives it's result. + +## Control Structures + +conditional operators gives an expression and determines it's result is true or false. +there are many commands in programming which used a conditional expression to act based on it's result. +by this way you can make your own business logic to control programming flow, or data flow or anything you want. + +most commonly used conditional command is if command, which used like this syntax: + +```mq4 +// +if (conditional_expression) { + // + // Blocks of code which run when conditional expression is true ... +} else { + // + // Blocks of code which run when conditional expression is false ... +} + +// +also we can make loops in programing, a loop is a code blocks which runs until a condition happens. +there are many type of loops in programming languages. + +most commonly used loops is create using for command by following this syntax: + +for (int i; i <= 6; i++) { + // + // Loop Code Block ... + Print("Loop Itrator: ", i); +} +``` + +## Read Indicator Data + +in this example we specially use RSI indicator. +but you can replace this by any other indicator you want, strusture is same; + +RSI Indicator provide a value for each candle and draw a line. this value is between 0 and 100; + +**Note** each standard indicator in MQL has a related function, which is usually starts with i{IndicatorName}, such as iRSI, iIchimoku and etc. +this functions, return specific values related to Indicator Data. +by calling this functions you can capture Indicator data for specific types of inputs. + +there are some standard inputs which usually used as params in iFunctions which i describe them in following: + +- Symbol: reffer to which symbol you need to inject it's data from indicator. (_Symbol) +- Period: reffer to which Time Frame you need to inject symbol's data on it from indicator (CURRENT_PERIOD). +- ... + +as i described before all candle related data, or indicators data, usually stores in Buffers. +by calling iFunctions, you retrieve an integer result, which it's an index number that point to a Buffer. +for using it's value, you had to create a Buffer on top of it. + +```mq4 +// +// here we define a pointer to iFunction buffer ... +// for reading values, each time we need we had to define +// a global pointer and then fill it on Init handler ... +int rsiPointer = iRSI(_Symbol, _Period, 14, PRICE_CLOSE); + +// +// define a dynamic size array, which calls Buffer ... +double rsiBuffer[]; + +// +// fill defined Buffer by iFunction Pointer ... +CopyBuffer(rsiPointer, 0, 1, 1, s); +``` + +**Note** there are some different ways in MQL4 and MQL5 to read the Pointer value. as i think this above described method is for MQL5, since in MQL4 for each bar_index, you shoud to call the iFunction once, by passing the bar to it ... + +## Open Trades + +as i described before, one of the main features an EA Programs, which used commonly is to Open Trade positions and specific conditions. + +imagine that we want to send signal for Long and Short positions, based on rsi value. +the condition is when rsi value at the current candle is abopve than 70, means Bullish Signal, and otherwise if it is below than 30 means Bearish Signal. + +we can handle this in OnTick event handler like this: + +```mq4 +// +// Prepare RSI Buffer ... +double rsi[]; +CopyBuffer(rsiPointer, 0, 1, 1, rsi); + +// +// Prepare Signal Conditions ... +if (rsi[0] > 70) { + // + // Bullish Signal ... +} else if (rsi[0] < 30) { + // + // Bearish Signal ... +} +``` + +we need to open position based on above Trading Conditions. + +at the first step we have to include Trade library in our EA Project. + +```mq4 +// +// here we include header file ... +#include + +... + +// +// now we have to define an instance of CTrade class to manipulate Positions ... +CTrade trader; +... +``` + +after create CTrade instance, we have to use it in right way and right place to manipulate positions: + +```mq4 +// +// Prepare Signal Conditions ... +if (rsi[0] > 70) { + // + // Bearish Signal ... + trader.Sell(0.001, _Symbol); +} else if (rsi[0] < 30) { + // + // Bullish Signal ... + trader.Buy(0.01. _Symbol); +} +``` + +in above example, we just open positions and there is no access to them for manipulate them. +we have to specify unique id to each position and store them somewhere in our EA to next times we have to manage or manipulate positions, simply reffer to them ... + +```mq4 +// +// Prepare Signal Conditions ... +if (rsi[0] > 70) { + // + // Bearish Signal ... + trader.Sell(0.001, _Symbol); + ulong ticket = trader.ResultOrder(); +} else if (rsi[0] < 30) { + // + // Bullish Signal ... + // we can provide tp and sl on positions ... + trader.Buy(0.01. _Symbol); + ulong ticket = trader.ResultOrder(); +} +``` + +we can simply check ticket as a global variable and then before opening new position, check it's value and then provide business logic ... + +## Modify Trades + +before do any manipulation on a position, we have to select the position itself ... + +PositionSelectByTicket is a Method which used to select a position by providing it's ticket id. +this returns a boolean value which determines position selected correctly or not ... + +[here](https://www.mql5.com/en/docs/constants/tradingconstants/positionproperties) are some resources related to position. + +for modifying an specific position, we have to use this function like following: + +```mq4 +// +// assume that this value filled on opening a position ... +ulong positionTicket; + +// +// validate position selectedsuccessfully, then try +// to manipulate it ... +if (PositionSelectByTicket(positionTicket)) { + // + // Do what ever we want to modify on popsition ... + + // + // reading some Position info ... + double positionPrice = PositionGetDouble(POSITION_PRICE_OPEN); + double positionTP = PositionGetDouble(POSITION_TP); + double positionSL = PositionGetDouble(POSITION_SL); + + // + // detect Position Type ... + // POSITION_TYPE_BUY + // POSITION_TYPE_SELL + int positionType = PositionGetInteger(POSITION_TYPE); + + // + // Check Position has SL ... + if (positionSL == 0) { + // + // here we calculate and define SL and TP for position ... + double sl = 0; + double tp = 0; + + // + // then we use PositionModify method to apply our changes on specified Position ... + trader.PositionModify(positionTicket, sl, tp); + } +} +``` + +## Close Trades + +some times we need to conditionally close an open position. maybe some times we got a reversal signal or anything else, based on our EA Business Logic. +for this we can also check positionTicket must be greater than zero. + +in following code, we update above sample to add supports for close last open position, before opening another one ... + +```mq4 +// +// Prepare Signal Conditions ... +if (rsi[0] > 70) { + // + // close last open position ... + // this condition means there are an open position ... + if (positionTicket > 0 && PositionSelectByTicket(positionTicket)) { + // + // retrieve Position Type ... + int positionType = PositionGetInteger(POSITION_TYPE); + if (positionType == POSITION_TYPE_BUY) { + // + // Close Position ... + trade.PositionClose(positionTicket); + + // + positionTicket = 0; + } + } + + // + // Bearish Signal ... + trader.Sell(0.001, _Symbol); + positionTicket = trader.ResultOrder(); +} else if (rsi[0] < 30) { + // + // close last open position ... + // this condition means there are an open position ... + if (positionTicket > 0 && PositionSelectByTicket(positionTicket)) { + // + // retrieve Position Type ... + int positionType = PositionGetInteger(POSITION_TYPE); + if (positionType == POSITION_TYPE_SELL) { + // + // Close Position ... + trade.PositionClose(positionTicket); + + // + positionTicket = 0; + } + } + + // + // Bullish Signal ... + // we can provide tp and sl on positions ... + trader.Buy(0.01. _Symbol); + positionTicket = trader.ResultOrder(); +} +``` diff --git a/Docs/Samples/ExpertAdviser.md b/Docs/Samples/ExpertAdviser.md new file mode 100644 index 0000000..df745c1 --- /dev/null +++ b/Docs/Samples/ExpertAdviser.md @@ -0,0 +1,4 @@ +# Expert Adviser + +a complete combination of all of features in meta trader to calculate anything in business logic and draw wath we want on chart. even mopre, advice some position related data to user. + diff --git a/Docs/Samples/Get.Account.Balance.md b/Docs/Samples/Get.Account.Balance.md new file mode 100644 index 0000000..6a62bf0 --- /dev/null +++ b/Docs/Samples/Get.Account.Balance.md @@ -0,0 +1,13 @@ +# Get Account Balance + +[Resource](https://docs.mql4.com/account/accountinfodouble) + +```mq4 +// +// Retrieve Account Balance ... +double Balance = AccountInfoDouble(ACCOUNT_BALANCE); + +// +// Retrieve Account Equity ... +double Equity = AccountInfoDouble(ACCOUNT_EQUITY); +``` diff --git a/Docs/Samples/Get.BID.Price.md b/Docs/Samples/Get.BID.Price.md new file mode 100644 index 0000000..8fbe777 --- /dev/null +++ b/Docs/Samples/Get.BID.Price.md @@ -0,0 +1,7 @@ +# Get Bid Price + +bid price means our buy price. + +```mq4 +double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_BID, _Digits)); +``` diff --git a/Docs/Samples/Input.md b/Docs/Samples/Input.md new file mode 100644 index 0000000..a907815 --- /dev/null +++ b/Docs/Samples/Input.md @@ -0,0 +1,32 @@ +# Input + +Input Variables +The input storage class defines the external variable. The input modifier is indicated before the data type. A variable with the input modifier can't be changed inside mql4-programs, such variables can be accessed for reading only. Values of input variables can be changed only by a user from the program properties window. External variables are always reinitialized immediately before the OnInit() is called. + +Example: + +//--- input parameters +input int MA_Period=13; +input int MA_Shift=0; +input ENUM_MA_METHOD MA_Method=MODE_SMMA; + +There is another way to set how your input parameter will look like in the Inputs tab. For this, place a string comment after the description of an input parameter in the same line. In this way you can make names of input parameters more understandable for users. + +//--- input parameters +input int InpMAPeriod=13; // Smoothing period +input int InpMAShift=0; // Line horizontal shift +input ENUM_MA_METHOD InpMAMethod=MODE_SMMA; // Smoothing method + +input ENUM_MA_METHOD MAMethod = MODE_EMA; + +// +// Gives time frame as an input ... +input ENUM_TIMEFRAMES Timeframe = PERIOD_CURRENT; + + +in adding input data to your advisors, indicators or etc, you can groups your input's together. +for this following below descriptions: + +int group "Moving Avarage Filter" + +every inputs appears after this, attached to created group ... diff --git a/Docs/Samples/IsNewBar.md b/Docs/Samples/IsNewBar.md new file mode 100644 index 0000000..7abeab9 --- /dev/null +++ b/Docs/Samples/IsNewBar.md @@ -0,0 +1,17 @@ +# IsNewBar + +this is a best way to find is in new bar or not ... + +```mq4 +bool IsNewBar() +{ + static datetime lastbar; + datetime curbar = (datetime)SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE); + if(lastbar != curbar) + { + lastbar = curbar; + return true; + } + return false; +} +``` diff --git a/Docs/Samples/Libraries.md b/Docs/Samples/Libraries.md new file mode 100644 index 0000000..e220164 --- /dev/null +++ b/Docs/Samples/Libraries.md @@ -0,0 +1,12 @@ +# Libraries + +in programming there is concept which named Library, Module, Package or etc, and this concept is a place which consist of some classes and grouped functions. +this package and compiled and other programmers can only used this packages provided tools and stuffs regarding less to access it's source code. it is a BlackBox. + +in MQL Libraries compiled to files by .mqh extension, like C++, and can imports using include reserved key. + +```mq4 +#include +``` + +see Include file ... diff --git a/Docs/Samples/MQL.md b/Docs/Samples/MQL.md new file mode 100644 index 0000000..9d8e247 --- /dev/null +++ b/Docs/Samples/MQL.md @@ -0,0 +1,106 @@ +# MQL + +MetaQuotes Language 4 (MQL4) is a built-in language for programming trading strategies. This language is developed by MetaQuotes Software Corp. based on their long experience in the creation of online trading platforms. Using this language, you can create your own Expert Advisors that make trading management automated and are perfectly suitable for implementing your own trading strategies. Besides, using MQL4 you can create your own technical indicators (custom indicators), scripts and libraries. + +[Resource](https://docs.mql4.com/) + +Programs written in MetaQuotes Language 4 have different features and purposes: + +Expert Advisor is a mechanical trading system linked up to a certain chart. An Expert Advisor starts to run when an event happens that can be handled by it: events of initialization and deinitialization, event of a new tick receipt, a timer event, depth of market changing event, chart event and custom events. +An Expert Advisor can both inform you about a possibility to trade and automatically trade on an account sending orders directly to a trade server. Expert Advisors are stored in terminal_directory\MQL4\Experts. +Custom Indicator is a technical indicator written independently in addition to those already integrated into the client terminal. Like built-in indicators, they cannot trade automatically and are intended for implementing of analytical functions only. +Custom indicators are stored in terminal_directory\MQL4\Indicators +Script is a program intended for a single execution of some actions. Unlike Expert Advisors, scripts do not process any actions, except for the start event (this requires the OnStart handler function in a script). Scripts are stored in terminal_directory\MQL4\Scripts +Library is a set of custom functions intended for storing and distributing frequently used blocks of custom programs. Libraries cannot start executing by themselves. +Libraries are stored in terminal_directory\MQL4\Libraries +Include File is a source text of the most frequently used blocks of custom programs. Such files can be included into the source texts of Expert Advisors, scripts, custom indicators, and libraries at the compiling stage. The use of included files is more preferable than the use of libraries because of additional burden occurring at calling library functions. +Include files can be stored in the same directory as a source file - in this case the #include directive with double quotes is used. Another place to store include files is terminal_directory\MQL4\Include, in this case the #include directive is used with angle brackets. + +## Language Basics + +The MetaQuotes Language 4 (MQL4) is an object-oriented high-level programming language intended for writing automated trading strategies, custom technical indicators for the analysis of various financial markets. It allows not only to write a variety of expert systems, designed to operate in real time, but also create their own graphical tools to help you make trade decisions. + +MQL4 is based on the concept of the popular programming language C++. The language has enumerations, structures, classes and event handling. By increasing the number of embedded main types, the interaction of executable programs in MQL4 with other applications through dll is now as easy as possible. MQL4 syntax is similar to the syntax of C++, and this makes it easy to translate into it programs from modern programming languages. + +## Constants, Enumerations and Structures + +[Resource](https://docs.mql4.com/constants) + +To simplify the program writing and to make program texts more convenient for perception, the MQL4 language provides predefined standard constants and enumerations. Besides that, service structures are used for storing information. + +Standard constants are similar to macros and are of int type. + +The constants are grouped by their purposes: + +- [Chart constants](https://docs.mql4.com/constants/chartconstants): are used when working with price charts: opening, navigation, setting parameters; +- [Objects constants](https://docs.mql4.com/constants/objectconstants): are intended for processing graphical objects that can be created and displayed in charts; +- [Indicators constants](https://docs.mql4.com/constants/indicatorconstants): are used for working with standard and custom indicators; +- [Environment state](https://docs.mql4.com/constants/environment_state): constants describe properties of a MQL4-program, show information about a client terminal, financial instrument and current account; +- [Trade constants](https://docs.mql4.com/constants/tradingconstants): allow to specify a variety of information in the course of trading; +- [Named constants](https://docs.mql4.com/constants/namedconstants): are constants of the MQL4 language; +- [Data structures](https://docs.mql4.com/constants/structures): describe data storage formats used; +- [Codes of errors and warnings](https://docs.mql4.com/constants/errorswarnings): describe compiler messages and trading server answers to trade requests; +- [In/out constants](https://docs.mql4.com/constants/io_constants): are designed for working with file functions and displaying messages on the screen by the MessageBox() function. + +## MQL4 Programs + +For the mql4-program to operate, it must be compiled (Compile button or F7 key). Compilation should pass without errors (some warnings are possible; they should be analyzed). At this process, an executable file with the same name and with EX4 extension must be created in the corresponding directory, terminal_dir\MQL4\Experts, terminal_dir\MQL4\indicators or terminal_dir\MQL4\scripts. This file can be run. + +Operating features of MQL4 programs are described in the following sections: + +- [Program running](https://docs.mql4.com/runtime/running): order of calling predefined event-handlers. +- [Client terminal events](https://docs.mql4.com/runtime/event_fire): description of events, which can be processed in programs. +- [Call of imported functions](https://docs.mql4.com/runtime/imports): description order, allowed parameters, search details and call agreement for imported functions. +- [Runtime errors](https://docs.mql4.com/runtime/errors): getting information about runtime and critical errors. + +Expert Advisors, custom indicators and scripts are attached to one of opened charts by Drag'n'Drop method from the Navigator window. + +For an expert Advisor to stop operating, it should be removed from a chart. To do it select "Expert list" in chart context menu, then select an Expert Advisor from list and click "Remove" button. Operation of Expert Advisors is also affected by the state of the "AutoTrading" button. + +In order to stop a custom indicator, it should be removed from a chart. + +Custom indicators and Expert Advisors work until they are explicitly removed from a chart; information about attached Expert Advisors and Indicators is saved between client terminal sessions. + +Scripts are executed once and are deleted automatically upon operation completion or change of the current chart state, or upon client terminal shutdown. After the restart of the client terminal scripts are not started, because the information about them is not saved. + +Maximum one Expert Advisor, one script and unlimited number of indicators can operate in one chart. + +## How MQL Programs Run + +[Resource](https://docs.mql4.com/runtime/running) + +Right after a program is attached to a chart, it is uploaded to the client terminal memory, as well as global variable are initialized. If some global variable of the class type has a constructor, this constructor will be called during initialization of global variables. + +After that the program is waiting for an event from the client terminal. Each mql4-program should have at least one event-handler, otherwise the loaded program will not be executed. Event handlers have predefined names, parameters and return types. + +| Type | Function Name | Params | App Type | Comment | +| :-: | :-: | :-: | :-: | :-: | +int | [OnInit](https://docs.mql4.com/basis/function/events#oninit) | none | Expert Advisors, indicators and scripts | [Init](https://docs.mql4.com/runtime/event_fire#init) event handler. It allows to use the void return type. | +void | [OnDeinit](https://docs.mql4.com/basis/function/events#ondeinit) | const int reason | Expert Advisors, indicators and scripts | [Deinit](https://docs.mql4.com/runtime/event_fire#deinit) event handler. | +void | [OnStart](https://docs.mql4.com/basis/function/events#onstart) | none | scripts | [Start](https://docs.mql4.com/runtime/event_fire#start) event handler. +int | [OnCalculate](https://docs.mql4.com/basis/function/events#oncalculate) | const int rates_total,const int prev_calculated,const datetime &Time[],const double &Open[],const double &High[],const double &Low[],const double &Close[],const long &TickVolume[],const long &Volume[],const int &Spread[] | indicators | Calculate event handler for all prices. | +void | [OnTick](https://docs.mql4.com/basis/function/events#ontick) | none | Expert Advisors | [NewTick](https://docs.mql4.com/runtime/event_fire#newtick) event handler. While the event of a new tick receipt is being processed, no other events of this type are received. | +void | [OnTimer](https://docs.mql4.com/basis/function/events#ontimer) | none | Expert Advisors and indicators | [Timer](https://docs.mql4.com/runtime/event_fire#timer) event handler | +double | [OnTester](https://docs.mql4.com/basis/function/events#ontester) | none | Expert Advisors | [Tester](https://docs.mql4.com/runtime/event_fire#tester) event handler. | +void | [OnChartEvent](https://docs.mql4.com/basis/function/events#onchartevent) | const int id,const long &lparam,const double &dparam,const string &sparam | Expert Advisors and indicators | [ChartEvent](https://docs.mql4.com/runtime/event_fire#chartevent) event handler. | + +**Libraries** do not handle any events. + +## Functions prohibited in Indicators and Expert Advisors + +Indicators, scripts and Expert Advisors are executable programs written in MQL4. They are designed for different types of tasks. Therefore there are some restrictions on the use of certain functions, depending on the type of program. The following functions are prohibited in indicators: + +- [OrderSend()](https://docs.mql4.com/trading/ordersend); +- [SendFTP()](https://docs.mql4.com/common/sendftp); +- [Sleep()](https://docs.mql4.com/common/sleep); +- [ExpertRemove()](https://docs.mql4.com/common/expertremove); +- [MessageBox()](https://docs.mql4.com/common/messagebox). + +All functions designed for indicators are prohibited in Expert Advisors and scripts: + +- [SetIndexBuffer()](https://docs.mql4.com/customind/setindexbuffer); +- [IndicatorSetDouble()](https://docs.mql4.com/customind/indicatorsetdouble); +- [IndicatorSetInteger()](https://docs.mql4.com/customind/indicatorsetinteger); +- [IndicatorSetString()](https://docs.mql4.com/customind/indicatorsetstring). + +The library is not an independent program and is executed in the context of the MQL4 program that has called it: script, indicator or Expert Advisor. Accordingly, the above restrictions apply to the called library. diff --git a/Docs/Samples/MetaTrader.StrategyTester.md b/Docs/Samples/MetaTrader.StrategyTester.md new file mode 100644 index 0000000..7c88696 --- /dev/null +++ b/Docs/Samples/MetaTrader.StrategyTester.md @@ -0,0 +1,49 @@ +# Meta Trader Strategy Tester + +[Resource](https://www.mql5.com/en/blogs/post/702993) + +To get the most out of your expert advisor, you'll need to optimize and backtest your strategy using MetaTrader's Strategy Tester. While forward testing on a demo account is essential, backtesting allows you to simulate trading over a long period of time in just minutes. And with the optimization feature, you can find out which settings performed best over a selected historical chart period. + +There is considerable debate over the accuracy of MetaTrader's strategy tester. At best, backtesting offers only a close approximation of how trades would be executed in real-time. But it's the only tool available to rapidly test any strategy over a wide range of trading situations, and one that you should learn how to use well. + +Open the Strategy Tester in MetaTrader by clicking the appropriate button on the toolbar or by selecting Strategy Tester from the View menu. + +## History Center + +Before backtesting or optimizing, it's important to make sure that your history data is complete and accurate, especially if you're using 'Every tick' as your testing model. If you see 'mismatched chart' errors in your Journal log or if your modeling quality is less than 90%, your history data is insufficient to generate accurate ticks. + +Open the History Center from the Tools menu or by pressing F2 on your keyboard. Double click the chart pair in the left column that you plan to backtest for. A list of time periods will appear below. Start by double clicking on 1 Minute (M1) to load the history data for that period. The backtester uses M1 data to generate ticks, so it is important that your M1 data is complete. + +From the History Center, you can download or import data to use in backtesting. Your broker will automatically provide some recent data, but it may not be enough for a longer backtest. In addition, the free downloadable data from MetaTrader (accessible via the Download button) is not always complete, and can contain large gaps. + +You can download free M1 data from http://www.forextester.com/data/datasources.html. First, select the M1 period for the symbol from the list on the left-hand side. Click the Import button, and then click Browse in the Import dialog to select the M1 data file you just downloaded. Press OK to import the data -- it may take several minutes. You now have several years of M1 data for that symbol. + +To make use of this data on higher timeframes, you'll need to use the period_converter script that comes with MetaTrader. Open a chart window and set it to M1. Drag and drop the period_converter script from the Navigator window onto the chart, and set the ExtPeriodMultiplier setting to the number of minutes to convert to. For M15, use 15; for H1, use 60; for H4, use 240, and so on. + +Repeat this process for all of the symbols/periods you plan to test on. Once you have sufficient history data, you can begin testing. The video below demonstrates the process of importing and converting the M1 data:Optimization + +The optimization feature of MetaTrader 4 allows you to test thousands of combinations of expert advisor settings to find the most profitable settings for the selected chart, period and date range. Indicator-based strategies will need to be optimized for maximum profitability. However, almost all EAs will benefit from optimization - even those that trade on tick data, provided you have complete M1 history data (see above). + +While the optimizer will return the most profitable settings for the selected date range, this is no guarantee that these settings will be profitable in the future. Market conditions change often, so it is important to regularly re-optimize your expert advisor for best results. + +To optimize your expert advisor, first select it from the Expert Advisor drop-down box. Select the currency pair from the Symbol box and chart period from the Period box. For Model, you'll generally want to select "Open Prices Only," unless you are optimizing an EA that runs on tick data. In that case, select "Every Tick." Check the Use Date option and select a range of dates to optimize for. Lastly, make sure that Optimization is checked. + +Click the Expert Properties button to open your expert advisor settings. Under the Inputs tab is where you'll enter the range of values to optimize for. The Start column will be the lowest value for a given setting, while the Stop column will be the highest. The Step column is the amount that the optimizer will "step through" from the Start to the Stop setting. + +## Backtesting + +By now, it should be obvious how the backtester works. Select your Expert Advisor, Symbol, Period and Model, check the Use Date box and select a date range. Select Visual Mode only if you want a visual walkthrough of the backtesting. Leave Optimization unchecked. + +Hit the Expert Properties button and enter your settings in the Value column under the Inputs tab. You can also load or save settings using the buttons in the bottom right. The Start, Step and Stop columns are ignored, as are the checkboxes. + +Close the Expert Properties dialog and press Start to begin testing. It will take anywhere from a few seconds to several minutes depending on your settings. Once testing has finished, open the Report tab on the bottom to see your results. + +A few statistics to take note of: + +- **Total net profit** - The **Gross profit** minus the **Gross loss**. +- **Profit factor** - The **ratio** of **gross profit** to **gross loss**. Higher is better, anything above 1.5 is good. +- **Absolute drawdown** - The **drawdown** of your *initial deposit*. High drawdowns increase the likelihood that your account will be blown out. +- **Profit trades** - Your overall **win percentage**. +- **Modeling quality** - Only important if your testing model is **Every Tick**. If so, this should be at 90%. If not, follow the instructions above to update your history with accurate M1 data. + +The Results tab at the bottom of the strategy tester will give you the details on opened and closed orders, including trailing stop, take profit and stop loss. Click the Open Chart button to get a visual representation of your results. When testing your new EA, examine these closely to ensure that your strategy is working as intended. diff --git a/Docs/Samples/OBJPROP_CORNER.md b/Docs/Samples/OBJPROP_CORNER.md new file mode 100644 index 0000000..26daebe --- /dev/null +++ b/Docs/Samples/OBJPROP_CORNER.md @@ -0,0 +1,14 @@ +# OBJPROP_CORBNER + +defines the chart corner relative to which the anchor point coordinates are specified. Can be one of the 4 values of the ENUM_BASE_CORNER enumeration; + +## ENUM_BASE_CORNER + +- CORNER_LEFT_UPPER: + Center of coordinates is in the upper left corner of the chart. +- CORNER_LEFT_LOWER: + Center of coordinates is in the lower left corner of the chart. +- CORNER_RIGHT_LOWER: + Center of coordinates is in the lower right corner of the chart. +- CORNER_RIGHT_UPPER: + Center of coordinates is in the upper right corner of the chart. diff --git a/Docs/Samples/Object Types.md b/Docs/Samples/Object Types.md new file mode 100644 index 0000000..30b1a7f --- /dev/null +++ b/Docs/Samples/Object Types.md @@ -0,0 +1,7 @@ +# Object Types + +When a graphical object is created using the ObjectCreate() function, it's necessary to specify the type of object being created, which can be one of the values of the ENUM_OBJECT enumeration. Object type identifiers are used in ObjectCreate(), ObjectsDeleteAll() and ObjectType() functions. + +Further specifications of object properties are possible using functions for working with graphical objects. + +[Reference](https://docs.mql4.com/constants/objectconstants/enum_object) diff --git a/Docs/Samples/OnCalculate.md b/Docs/Samples/OnCalculate.md new file mode 100644 index 0000000..c412756 --- /dev/null +++ b/Docs/Samples/OnCalculate.md @@ -0,0 +1,32 @@ +# OnCalculate + +The OnCalculate() function is called only in custom indicators when it's necessary to calculate the indicator values by the Calculate event. This usually happens when a new tick is received for the symbol, for which the indicator is calculated. This indicator is not required to be attached to any price chart of this symbol. + +The OnCalculate() function must have a return type int. + +```MQL4 +int OnCalculate ( + const int rates_total, // size of input time series + const int prev_calculated, // bars handled in previous call + const datetime& time[], // Time + const double& open[], // Open + const double& high[], // High + const double& low[], // Low + const double& close[], // Close + const long& tick_volume[], // Tick Volume + const long& volume[], // Real Volume + const int& spread[] // Spread +); +``` + +Parameters of open[], high[], low[] and close[] contain arrays with open prices, high and low prices and close prices of the current time frame. The time[] parameter contains an array with open time values, the spread[] parameter has an array containing the history of spreads (if any spread is provided for the traded security). The parameters of volume[] and tick_volume[] contain the history of trade and tick volume, respectively. + +**Note** +To determine the indexing direction of time[], open[], high[], low[], close[], tick_volume[], volume[] and spread[], call ArrayGetAsSeries(). In order not to depend on default values, you should unconditionally call the ArraySetAsSeries() function for those arrays, which are expected to work with. + +**Note** +The first rates_total parameter contains the number of bars, available to the indicator for calculation, and corresponds to the number of bars available in the chart. + +We should note the connection between the return value of OnCalculate() and the second input parameter prev_calculated. During the function call, the prev_calculated parameter contains a value returned by OnCalculate() during previous call. This allows for economical algorithms for calculating the custom indicator in order to avoid repeated calculations for those bars that haven't changed since the previous run of this function. + +For this, it is usually enough to return the value of the rates_total parameter, which contains the number of bars in the current function call. If since the last call of OnCalculate() price data has changed (a deeper history downloaded or history blanks filled), the value of the input parameter prev_calculated will be set to zero by the terminal. diff --git a/Docs/Samples/OnDeinit.md b/Docs/Samples/OnDeinit.md new file mode 100644 index 0000000..f8bce5e --- /dev/null +++ b/Docs/Samples/OnDeinit.md @@ -0,0 +1,26 @@ +# OnDeinit + +The OnDeinit() function is called during deinitialization and is the Deinit event handler. It must be declared as the void type and should have one parameter of the const int type, which contains the code of deinitialization reason. If a different type is declared, the compiler will generate a warning, but the function will not be called. + +The Deinit event is generated for Expert Advisors and indicators in the following cases: + +before reinitialization due to the change of a symbol or chart period, to which the mql4 program is attached; +before reinitialization due to the change of input parameters; +before unloading the mql4 program. + +```mq4 +void OnDeinit(const int reason); +``` + +| Constant | Value | Description | +| -------- | ----- | ----------- | +| REASON_PROGRAM | 0 | Expert Advisor terminated its operation by calling the ExpertRemove() function| +| REASON_REMOVE | 1 | Program has been deleted from the chart | +| REASON_RECOMPILE | 2 | Program has been recompiled | +| REASON_CHARTCHANGE | 3 | Symbol or chart period has been changed | +| REASON_CHARTCLOSE | 4 | Chart has been closed | +| REASON_PARAMETERS | 5 | Input parameters have been changed by a user | +| REASON_ACCOUNT | 6 | Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings | +| REASON_TEMPLATE | 7 | A new template has been applied | +| REASON_INITFAILED | 8 | This value means that OnInit() handler has returned a nonzero value | +| REASON_CLOSE | 9 | Terminal has been closed | diff --git a/Docs/Samples/OnInit.md b/Docs/Samples/OnInit.md new file mode 100644 index 0000000..00ea010 --- /dev/null +++ b/Docs/Samples/OnInit.md @@ -0,0 +1,9 @@ +# OnInit + +The Init event is generated immediately after an Expert Advisor or an indicator is downloaded; The OnInit() function is used for initialization. If OnInit() has the int type of the return value, the non-zero return code means unsuccessful initialization, and it generates the Deinit event with the code of deinitialization reason REASON_INITFAILED. + +OnInit() function execution result is analyzed by the terminal's runtime subsystem only if the program has been compiled using #property strict. + +INIT_SUCCEEDED +INIT_FAILED +INIT_PARAMETERS_INCORRECT diff --git a/Docs/Samples/OnTick.md b/Docs/Samples/OnTick.md new file mode 100644 index 0000000..555cb19 --- /dev/null +++ b/Docs/Samples/OnTick.md @@ -0,0 +1,7 @@ +# OnTick Event Handler Function + +as i told before, this is main and most important event handler function in an EA. + +each tick represent a price change, som during an EA there are some cases which same price or etc maybe occures twice or more. +we have to handle this situations to prevent double signaling, or opening positions more than once. + diff --git a/Docs/Samples/OrderSend.md b/Docs/Samples/OrderSend.md new file mode 100644 index 0000000..041bbd4 --- /dev/null +++ b/Docs/Samples/OrderSend.md @@ -0,0 +1,56 @@ +# OrderSend + +[Trade Functions](https://docs.mql4.com/trading) + +The main function used to open an order or place a pending order. + +```mq4 +int OrderSend( + string symbol, // symbol + int cmd, // operation + double volume, // volume + double price, // price + int slippage, // slippage + double stoploss, // stop loss + double takeprofit, // take profit + string comment=NULL, // comment + int magic=0, // magic number + datetime expiration=0, // pending order expiration + color arrow_color=clrNONE // color + );dg +``` + +## Order Properties (CMD) + +| ID | Value | Description | +| -- | ----- | ----------- | +| OP_BUY | 0 | Buy operation | +| OP_SELL | 1 | Sell operation | +| OP_BUYLIMIT | 2 | Buy limit pending order | +| OP_SELLLIMIT | 3 | Sell limit pending order | +| OP_BUYSTOP | 4 | Buy stop pending order | +| OP_SELLSTOP | 5 | Sell stop pending order | + +## Market Order + +There are three types of orders that can be placed in MetaTrader: market, stop and limit orders. Being the most common, a market order opens a position immediately at the nearest Bid or Ask price. + +### Buy + +OrderSend(Symbol(),OP_BUY,0.1,Ask,2,Bid-15*Point,Bid+15*Point); + +double bid =MarketInfo("GBPUSD",MODE_BID); // Request for the value of Bid + double ask =MarketInfo("GBPUSD",MODE_ASK); // Request for the value of Ask + double point =MarketInfo("GBPUSD",MODE_POINT);//Request for Point + // Opening BUY + OrderSend("GBPUSD",OP_BUY,0.1,ask,2,bid-15*Point,bid+15*Point); + Alert (GetLastError()); // Error message + return; // Exit start() + + +OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, Bid-StopLoss *Point, Bid+TakeProfit*Point, “EAName”, MagicNumber, 0, Blue) +Here is an example of a sell market order: + +### Sell + +OrderSend (Symbol(), OP_SELL, Lots, Bid, Slippage, Ask+StopLoss *Point, Ask-TakeProfit*Point, “EAName”, MagicNumber, 0, Blue) diff --git a/Docs/Samples/Pine.Calculation.md b/Docs/Samples/Pine.Calculation.md new file mode 100644 index 0000000..dd98862 --- /dev/null +++ b/Docs/Samples/Pine.Calculation.md @@ -0,0 +1,27 @@ +# Create a loop for rights + +```mq4 +int OnCalculate(...) { + // + // wait to pass bars until we have rights ... + if (rates_total <= InpPeriod) { + // + // return not calculated ... + return 0; + } + + // + // find loop count for bars manipulation ... + int count = (prev_calculated == 0) ? rates_total - InpPeriod - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = count - 1; i >= 0; i--) { + + } + + // + // return current calculated ... + return rates_totlat; +} +``` diff --git a/Docs/Samples/Plot.md b/Docs/Samples/Plot.md new file mode 100644 index 0000000..e89827e --- /dev/null +++ b/Docs/Samples/Plot.md @@ -0,0 +1,14 @@ +# Define Plots using Compiler + +```MQL +#property indicator_chart_window +#property indicator_buffers 1 + +// +//--- plot Line +#property indicator_label1 "Line" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrDarkBlue +#property indicator_style1 STYLE_SOLID +#property indicator_width1 1 +``` diff --git a/Docs/Samples/Position.Counting.md b/Docs/Samples/Position.Counting.md new file mode 100644 index 0000000..cc02435 --- /dev/null +++ b/Docs/Samples/Position.Counting.md @@ -0,0 +1,4 @@ +# Position Counting + +- **PositionTotal()**: counts all positions; +- **OrdersTotal()**: counts all orders; \ No newline at end of file diff --git a/Docs/Samples/PositionGetTicket.md b/Docs/Samples/PositionGetTicket.md new file mode 100644 index 0000000..99b4f3f --- /dev/null +++ b/Docs/Samples/PositionGetTicket.md @@ -0,0 +1,3 @@ +# PositionGetTicket + +it is a function which get position index and retrieve and returns the specified position ticket ... diff --git a/Docs/Samples/PositionsTotal.md b/Docs/Samples/PositionsTotal.md new file mode 100644 index 0000000..2238d75 --- /dev/null +++ b/Docs/Samples/PositionsTotal.md @@ -0,0 +1,3 @@ +# PositionsTotal + +a function which returns number of open position diff --git a/Docs/Samples/Print.md b/Docs/Samples/Print.md new file mode 100644 index 0000000..86ce94f --- /dev/null +++ b/Docs/Samples/Print.md @@ -0,0 +1,3 @@ +# Print + +this command used to show some data in MT Log window. diff --git a/Docs/Samples/RMA.md b/Docs/Samples/RMA.md new file mode 100644 index 0000000..f567e36 --- /dev/null +++ b/Docs/Samples/RMA.md @@ -0,0 +1,39 @@ +# RMA + +Relative Moving Average (RMA) with the ta.rma() function. + +A Relative Moving Average adds more weight to recent data (and gives less importance to older data). This makes the RMA similar to the Exponential Moving Average, although it’s somewhat slower to respond than an EMA is. + +ta.rma(source, length) + +source is the series of numerical values to process. It’s the (price) data we calculate the RMA on. +length is an integer with the moving average length in bars. This is the lookback period over which Pine Script calculates the average. +ta.rma() returns the Relative Moving Average as a floating-point value [1] . + +The RMA is obtained by dividing a stock's short-term moving average of price by its long-term moving average of price. Stocks rising in price the fastest always have the highest RMAs, and those going down in price the fastest always have the lowest RMAs. + +[Formula](https://www.hybrid-solutions.com/plugins/client-vtl-plugins/free/rma.html) + +This indicator represents the relative moving average indicator (RMA). RMA = SMA(3 x Period) - SMA(2 x Period) + SMA(1 x Period) per formula: https://www.hybrid-solutions.com/plugins/client-vtl-plugins/free/rma.html + +ShortAverage = new SimpleMovingAverage(name + "_Short", period); +MediumAverage = new SimpleMovingAverage(name + "_Medium", period * 2); +LongAverage = new SimpleMovingAverage(name + "_Long", period * 3); + +LongAverage.Current.Value - MediumAverage.Current.Value + ShortAverage.Current.Value; + +rma = sma(price,period*3) + sma (price,period*2) - sma(price,period) + +[Fromula 1](https://www.tradingcode.net/tradingview/relative-moving-average/) + +alpha = 1 / length + +rma = alpha * source + (1 - alpha) * RMA[1] + +pine_rma(source, length) => + alpha = 1 / length + sum = 0.0 + sum := na(sum[1]) ? + ta.sma(source, length) : + alpha * source + (1 - alpha) * nz(sum[1]) + diff --git a/Docs/Samples/RSI Moving Average Cross EA.Tutorial.md b/Docs/Samples/RSI Moving Average Cross EA.Tutorial.md new file mode 100644 index 0000000..559e8f6 --- /dev/null +++ b/Docs/Samples/RSI Moving Average Cross EA.Tutorial.md @@ -0,0 +1,149 @@ +# RSI MA Cross Strategy + +EURUSD M15 Chart is Open + +## Strategy Used + +- 10 Period RSI: + - ; + - ; +- 5 Period EMA; +- 10 Period MA; + +works by over solde and over baughts on rsi and then check mas; + +## Implementation + +```mq4 +// +// Fast MA ... +input int fastMaPeriod = 20; // Fast MA Bars +input ENUM_MA_METHOD fastMaMethod = MODE_EMA; // Fast MA Method +input ENUM_APPLIED_PRICE fastMaAppliedPrice = PRICE_CLOSE; // Fast MA Applied Price + +// +// Slow MA ... +input int slowMaPeriod = 50; // Slow MA Bars +input ENUM_MA_METHOD slowMaMethod = MODE_EMA; // Slow MA Method +input ENUM_APPLIED_PRICE slowMaAppliedPrice = PRICE_CLOSE; // Slow MA Applied Price + +// +// SL / TP ... +input int stopLossPips = 50; // SL Pips +input int takeProfitPips = 50; // TP Pips + +// +// Trade ... +intput double orderSize = 0.01; // Order size in Lots + +// +// Buffers ... +double fastMaBuffer[]; +double slowMaBuffer[]; + +const int buffersValuesRequired = 3; + +// +// Global Variables ... +double stopLoss; +double takeProfit; + +// +int OnInit() { + // + stopLoss = PipsToDouble(stopLossPips); + takeProfit = PipsToDouble(takeProfitPips); + + // + IsNewBar(); +} +``` + +## Calculating SL and TP Gaps on Trading Open + +```mq4 +// +// Define Some Variables ... +double price; +double closePrice; +double tp = 0; +double sl = 0; +double slGap = PointsToDouble((int) SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL)); + +// +if (stopLoss > 0 && stopLoss < slGap) { + return; +} + +// +if (takeProfit > 0 && takeProfit < slGap) { + return; +} + +// +RefreshRates(); + +// +if (type == ORDER_TYPE_BUY) { + // + price = SymbolInfoDouble(_Symbol, SYMBOL_ASK); + closePrice = SymbolInfoDouble(_Symbol, SYMBOL_BID); + + // + if (stopLoss > 0) { + sl = closePrice - stopLoss; + } + + // + if (takeProfit > 0) { + tp = price + takeProfit; + } +} else { + // + price = SymbolInfoDouble(_Symbol, SYMBOL_BID); + closePrice = SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + if (stopLoss > 0) { + sl = closePrice + stopLoss; + } + + // + if (takeProfit > 0) { + tp = price - takeProfit; + } +} + +// +price = NormalizeDouble(price, _Digits); +sl = NormalizeDouble(sl, _Digits); +tp = NormalizeDouble(tp, _Digits); +``` + +## Usefull Library Methods + +```mq4 +// +// Convert points to Actual Point ... +double PointsToDouble(int points) { + // + double result = points * _Point; + return result; +} + +// +// Converts Pips to Points ... +int PipsToPoints(int pips) { + // + int result = pips * ((_Digits == 3 || _Digits == 5) ? 10 : 1); + return result; +} + +// +// Converts Pips to Double ... +double PipsToDouble(int pips) { + // + double result = PointsToDouble(PipsToPoints(pips)); + return result; +} +``` diff --git a/Docs/Samples/SMA.md b/Docs/Samples/SMA.md new file mode 100644 index 0000000..984b860 --- /dev/null +++ b/Docs/Samples/SMA.md @@ -0,0 +1,36 @@ +# SMA + +Simple Moving Average + +[Resource 1](https://www.investopedia.com/terms/s/sma.asp) + +A simple moving average (SMA) calculates the average of a selected range of prices, usually closing prices, by the number of periods in that range. + +Simple moving averages calculate the average of a range of prices by the number of periods within that range. +A simple moving average is a technical indicator that can aid in determining if an asset price will continue or if it will reverse a bull or bear trend. +A simple moving average can be enhanced as an exponential moving average (EMA) that is more heavily weighted on recent price action. + +## Formula + +SMA = (A1 + A2 + ... + An) / n + +An = price of an asset at period n +n = the number of total periods + +[Tutorial](https://mql4tutorial.com/mql4-tutorial-english/mql4-tutorial-basics-11-how-to-calculate-a-simple-moving-average) + +```mq4 +double sma = iMA(_Symbol, _Period, numOfCandles, 0, MODE_SMA, PRICE_CLOSE, 0) +``` + +## Calculation process + +```pine +pine_sma(source, length) => + sum = 0.0 + for i = 0 to length - 1 + sum += source[i] / length + sum + +plot(pine_sma(close, 15)) +``` \ No newline at end of file diff --git a/Docs/Samples/SampleOrder.md b/Docs/Samples/SampleOrder.md new file mode 100644 index 0000000..8d3d8e4 --- /dev/null +++ b/Docs/Samples/SampleOrder.md @@ -0,0 +1,66 @@ +# Some Usefull Tutorials + +## Open Order + +for opening a sample order in mql4 follow following syntax: + +// +buy => ASK Price ... +sell => BID Price ... + +```mql4 +void OnTick() { + // + if (OrdersTotal() > 0) { + return; + } + + // + // we are on bullish candle ... + if (close[1] > open[1]) { + // + OrderSend( + _Symbol, // Symbol ... + OP_BUY, // Operation ... + 0.1 // Lot Size ( Volume ) ... + Ask, // Open Order Price ... + 3, // tolerance ... + Ask - 300 * _Point, // SL ... + Ask + 150 * _Point, // TP ... + NULL, // Trade Comment ... + 0, // Magic Number (user unique number) ... + 0, // Expiration ... + Green // Arrow Line ... + ); + } +} +``` + +## Counting Open Buy Positions + +```mql4 +int CountOpenBuyOrders() { + // + int result = 0; + + // + for (int i = OrdersTotal() - 1; i >= 0; i--) { + // + OrderSelect(i, SELECT_BY_POSITION, MODE_TRADES); + + // + string orderSymbol = OrderSymbol(); + + // + if ( + orderSymbol == _Symbol && + OrderType() == OP_BUY + ) { + result++; + } + } + + // + return result; +} +``` \ No newline at end of file diff --git a/Docs/Samples/Simple.Oscillator.md b/Docs/Samples/Simple.Oscillator.md new file mode 100644 index 0000000..2767213 --- /dev/null +++ b/Docs/Samples/Simple.Oscillator.md @@ -0,0 +1,5 @@ +# Oscillator + +usually oscillators is visualized some additional data related to chart, but not price momentums, and drwn on spearate window by default. +specially works on volumes. + diff --git a/Docs/Samples/Simple.indicator.md b/Docs/Samples/Simple.indicator.md new file mode 100644 index 0000000..eec82f5 --- /dev/null +++ b/Docs/Samples/Simple.indicator.md @@ -0,0 +1,221 @@ +# Indicator + +usually indicators is visualized some additional data on chart, and drwn on candle charts by default. +specially works on prices. + +```mq4 +#property indicator_buffers numOfBuffers +``` + +for example: + +```mq4 +#property indicator_buffers 2 +``` + +here we define 2 buffer to system for processing in each candle ... + +then we have to define arrays ... + +double BufferFast[]; +double BufferSlow[]; + +usually for each indicator buffers we can define a constant to hold it's index on chart queue. + +```mq4 +#define FastIndicator 0 +#define SlowIndicator 1 +``` + +each buffer holds data to use in candle calculation time and then draw things on chart. + +we have to define Indexes for Buffers to draw themon chart. +this happens on OnInit() event handler method. + +```mq4 +int OnInit() { + // + // Fast Indicator ... + SetIndexStyle(FastIndicator, DRAW_LINE, STYLE_DOT, 1, clrFireBrick); + SetIndexBuffer(FastIndicator, BufferFast); + SetIndexLabel(FastIndicator, "Fast"); + + // + // Slow Indicator ... + SetIndexStyle(SlowIndicator, DRAW_LINE, STYLE_DOT, 1, clrGreen); + SetIndexBuffer(SlowIndicator, BufferSlow); + SetIndexLabel(SlowIndicator, "Slow"); + + // + return INIT_SUCCEEDED; +} +``` + +after define styling of indicators parts, we have to fill buffers by required data's, in OnCalculate() event handler. +since at initialization time, there is no data in Buffers to use them. + +in OnCalculate event handler, also some usefull args and params to use them for calculation steps or implement our business logic. + +if you need to know them completely, see proppered documentation file. + +```mq4 +int OnCalculate( + const int rates_total, // size of input time series + const int prev_calculated, // bars handled in previous call + const datetime& time[], // Time + const double& open[], // Open + const double& high[], // High + const double& low[], // Low + const double& close[], // Close + const long& tick_volume[], // Tick Volume + const long& volume[], // Real Volume + const int& spread[] // Spread +) { + // + // Here we defined some variables to use them ... + int limit; + double signalMa, + fastMa, + slowMa; + + // + // in this example, SlowMAPeriod is an input for + // using in Calculations ... + // so as we don't reach to this input candle, we cant calculate + // anything ... + // for this reasin we check rates_total param, and if not reach to our + // input variable, we return 0 means nothing passed ... + if (rates_total <= SlowMAPeriod) { + return 0; + } + + // + // found which candles calculated before ... + limit = rates_total - prev_calculated; + if (prev_calculated>0) { + limit++; + } + + // + // Do Calculation ... + // Symbol() => retrieve current chart window symbol ... + // Period() => retrieve current period ... + for (int i = limit - 1; i>0; i--) { + // + signalMa = iMa(Symbol(), Period(), SignalMaPeriod, 0, MAMethod, PRICE_CLOSE, i); + + // + fastMa = iMa(Symbol(), Period(), FastMaPeriod, 0, MAMethod, PRICE_CLOSE, i); + + // + slowMa = iMa(Symbol(), Period(), SlowMaPeriod, 0, MAMethod, PRICE_CLOSE, i); + + // + // Here we have to do some calculation, and check some conditions, then + // fill up buffers based on conditions ... + // Trending Up Condition ... + if (signalMa > fastMa && fastMa < slowMa) { + // + BufferFast[i] = fastMa; + BufferSlow[i] = slowMa; + // + // Trending Down Condition ... + } else if (signalMa < fastMa && fastMa < slowMa>) { + // + BufferFast[i] = fastMa; + BufferSlow[i] = slowMa; + } + // + // NOTE: it could be possible to combine above two condition, but + // we separate them for learning purposed ... + } + + // + // this tells meta trader how many candles we used ... + return rate_total; +} +``` + +in above example we just show two line, and there is no histogram. +in mt4 for drawing histogram we have to do some unusual works ... + +we are going to complete the example to support histogram. + +for showing histogram, we need two more buffers. + +```mq4 +// +// Increase System Defined Buffers ... +#property indicator_buffers 4 + +// +// Next we have to define two more Buffer ... +double BufferUp[]; +double BufferDown[]; + +// +// then we have to change definition of indexes of buffers for supporting histograms ... +// wen MT draws Histogram, it's used area between next indicator and selected one ... +#define UpIndicator 0 +#define DownIndicator 2 +#define FastIndicator 3 +#define SlowIndicator 1 + +// +// Then we have to define Styling for histogram ... +int OnInit() { + // + // Fast Indicator ... + SetIndexStyle(FastIndicator, DRAW_LINE, STYLE_DOT, 1, clrFireBrick); + SetIndexBuffer(FastIndicator, BufferFast); + SetIndexLabel(FastIndicator, "Fast"); + + // + // Slow Indicator ... + SetIndexStyle(SlowIndicator, DRAW_LINE, STYLE_DOT, 1, clrGreen); + SetIndexBuffer(SlowIndicator, BufferSlow); + SetIndexLabel(SlowIndicator, "Slow"); + + // + // Up Indicator ... + SetIndexStyle(UpIndicator, DRAW_HISTOGRAM, STYLE_DOT, 1, clrGreen); + SetIndexBuffer(UpIndicator, BufferUp); + SetIndexEmptyValue(UpIndicator, 0.0); + + // + // Down Indicator ... + SetIndexStyle(DownIndicator, DRAW_HISTOGRAM, STYLE_DOT, 1, clrFireBrick); + SetIndexBuffer(DownIndicator, BufferDown); + SetIndexEmptyValue(DownIndicator, 0.0); + + // + return INIT_SUCCEEDED; +} + +// +// then we have to change calculation for filling bufferup and bufferdown ... +// +// the reason which we separate this conditions, for drawing histograms ... +// Trending Up Condition ... +if (signalMa > fastMa && fastMa < slowMa) { + // + BufferFast[i] = fastMa; + BufferSlow[i] = slowMa; + + // + // the histogram drawn between fast line and slow line ... + // so up indicator draws between itself and slow ... + BufferUp[i] = fastMa; +// +// Trending Down Condition ... +} else if (signalMa < fastMa && fastMa < slowMa>) { + // + BufferFast[i] = fastMa; + BufferSlow[i] = slowMa; + + // + // the histogram drawn between slow line and fast line ... + // so up indicator draws between itself and fast ... + BufferDown[i] = slowMa; +} +``` diff --git a/Docs/Samples/Slope.md b/Docs/Samples/Slope.md new file mode 100644 index 0000000..1646f7a --- /dev/null +++ b/Docs/Samples/Slope.md @@ -0,0 +1,5 @@ +# Slope + +Shib + +m = (y2 - y1) / (x2 - x1) diff --git a/Docs/Samples/Stochastic EA Tutorial.md b/Docs/Samples/Stochastic EA Tutorial.md new file mode 100644 index 0000000..e4a1705 --- /dev/null +++ b/Docs/Samples/Stochastic EA Tutorial.md @@ -0,0 +1,31 @@ +# Stochastic EA + +we want to buy on bottom of stochastic when cross over stock with signal +and sell when cross under stock with signall on top ... + +```mql4 +// +int totalBars; + +// +int OnInit() { + // + totalBars = iBars(Symbol, _Period); + + // + ... +}; + +// +void OnTick() { + // + int bars = iBars(_Symbol, _Period); + if (totlaBars != bars) { + // + totalBars = bars; + + // + // Do Actions here ... + } +} +``` diff --git a/Docs/Samples/SymbolInfoDouble.md b/Docs/Samples/SymbolInfoDouble.md new file mode 100644 index 0000000..45e63b8 --- /dev/null +++ b/Docs/Samples/SymbolInfoDouble.md @@ -0,0 +1,71 @@ +# SymbolInfoDouble + +[Reference](https://docs.mql4.com/marketinformation/symbolinfodouble); + +Returns the corresponding property of a specified symbol. There are 2 variants of the function. + +1. Immediately returns the property value. + +```mq4 +double SymbolInfoDouble( + string name, // symbol + ENUM_SYMBOL_INFO_DOUBLE prop_id // identifier of the property + ); +``` + +2. Returns true or false depending on whether a function is successfully performed. In case of success, the value of the property is placed into a recipient variable, passed by reference by the last parameter. + +```mq4 +bool SymbolInfoDouble( + string name, // symbol + ENUM_SYMBOL_INFO_DOUBLE prop_id, // identifier of the property + double& double_var // here we accept the property value + ); +``` + +Parameters + +name + +[in] Symbol name. + +prop_id + +[in] Identifier of a symbol property. The value can be one of the values of the ENUM_SYMBOL_INFO_DOUBLE enumeration. + +double_var + +[out] Variable of double type receiving the value of the requested property. + +Return Value + +The value of double type. In case of execution failure, information about the error can be obtained using GetLastError() function: + +4106 — symbol is not selected in "Market Watch" (not found in the list of available ones), +4051 — invalid identifier of a symbol property, +4024 — internal error. +Note + +It is recommended to use SymbolInfoTick() if the function is used for getting information about the last tick. It may well be that not a single quote has appeared yet since the terminal is connected to a trading account. In such a case, the requested value will be indefinite. + +In most cases, it is enough to use SymbolInfoTick() function allowing a user to receive the values of Ask, Bid, Last, Volume and the time of the last tick's arrival during a single call. + +Example: + +```mq4 +void OnTick() + { +//--- obtain spread from the symbol properties + bool spreadfloat=SymbolInfoInteger(Symbol(),SYMBOL_SPREAD_FLOAT); + string comm=StringFormat("Spread %s = %I64d points\r\n", + spreadfloat?"floating":"fixed", + SymbolInfoInteger(Symbol(),SYMBOL_SPREAD)); +//--- now let's calculate the spread by ourselves + double ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK); + double bid=SymbolInfoDouble(Symbol(),SYMBOL_BID); + double spread=ask-bid; + int spread_points=(int)MathRound(spread/SymbolInfoDouble(Symbol(),SYMBOL_POINT)); + comm=comm+"Calculated spread = "+(string)spread_points+" points"; + Comment(comm); + } +``` diff --git a/Docs/Samples/TP-SL Calculation.md b/Docs/Samples/TP-SL Calculation.md new file mode 100644 index 0000000..11c7c1d --- /dev/null +++ b/Docs/Samples/TP-SL Calculation.md @@ -0,0 +1,22 @@ +# How to Calculate TP based on SL and Risk To Reward Ratio + +```solo + // Long: + // + // ask Price: 1.14443 + // sl: 1.14325 + // tp: 1.14620 + // risk: askprice - sl = 0.00118 + // reward: risk * ration = 0.00177 + // tp: ask + reward + // + // Short: + // + // ask price: 1.14214 + // sl: 1.14325 + // tp: 1.14048 + // + // risk: sl - ask = 0.00111 + // reward: risk * ration = 0.001665 + // tp: ask - reward +``` diff --git a/Docs/Samples/Trade.md b/Docs/Samples/Trade.md new file mode 100644 index 0000000..dc007da --- /dev/null +++ b/Docs/Samples/Trade.md @@ -0,0 +1,27 @@ +# Trade Libnrary + +a built-in library in MQL which is used to manipulate and manage Trade Positions in Expert Advisors. + +for using this library, at the first step yopu have to include it oin your EA. this happens like this: + +```mq4 +#include +``` + +then you can access to it's provided stuffs. + +## CTrade + +it is a Class, which provides Trading Management functionalities for MQL Programmers ... + +[here](https://www.mql5.com/en/docs/standardlibrary/tradeclasses/ctrade) are it's documentation. + +this class is an static class and there is no need to call any constructor for it's usage. simple making it's instance by assigning a name to it's type: + +```mq4 +CTrade trader; +``` + +now you can acssess to all of it's provided actions, methods and etc to manipulate trade positions ... + +**NOTE** for using this class you have to enable Auto Trading and also for your EA check it's checkbox for allow AutoTrading ... \ No newline at end of file diff --git a/Docs/Samples/TradeOncePerBar.md b/Docs/Samples/TradeOncePerBar.md new file mode 100644 index 0000000..1f80254 --- /dev/null +++ b/Docs/Samples/TradeOncePerBar.md @@ -0,0 +1,38 @@ +# Best Way to Code Trade Once per Bar at Open on MT4 + +So there are various ways to code an EA to trade once per bar. + +```mq4 +int BarsCount = 0; +if (Bars>BarsCount) { + Do the algo and then + BarsCount = Bars; +} +``` + +```mq4 +static datetime prevtime = 0; +if(prevtime == Time[0]) return; +prevtime = Time[0]; +Do the algo here after the code +``` + +```mq4 +if (Time[0] >= TimeCurrent()) { + Do the algo here +} +``` + +```mq4 +int BarsCount = 0 +if (Bars>BarsCount) etc. +``` + +```mq4 +static datetime prevtime = Time[0]; +if (prevtime == Time[0]) return; +prevtime = Time[0]; +``` + +```mq4 +``` diff --git a/Docs/Samples/VWMA.md b/Docs/Samples/VWMA.md new file mode 100644 index 0000000..f353abe --- /dev/null +++ b/Docs/Samples/VWMA.md @@ -0,0 +1,12 @@ +# VWMA + +Volume-Weighted Moving Average (VWMA) + +## Calculation process + +TradingView calculates the Volume-Weighted Moving Average with two Simple Moving Averages (SMAs) [1] . The first SMA multiplies each bar’s data with that bar’s volume. The second SMA is the volume average. Dividing those gives the VWMA. + +```pine +pine_vwma(source, length) => + ta.sma(source * volume, length) / ta.sma(volume, length) +``` diff --git a/Docs/Samples/_Point.md b/Docs/Samples/_Point.md new file mode 100644 index 0000000..f53e70a --- /dev/null +++ b/Docs/Samples/_Point.md @@ -0,0 +1,9 @@ +# _Point + +[Resource](https://docs.mql4.com/predefined/_point) + +The _Point variable contains the point size of the current symbol in the quote currency. + +You may also use the Point() function. + +smallest price changes corresponding to Symbol diff --git a/Docs/Samples/iBarShift.md b/Docs/Samples/iBarShift.md new file mode 100644 index 0000000..528411b --- /dev/null +++ b/Docs/Samples/iBarShift.md @@ -0,0 +1,5 @@ +# iBarShift + +Search for a bar by its time. The function returns the index of the bar which covers the specified time. + +[Resource](https://docs.mql4.com/series/ibarshift) diff --git a/Docs/Samples/iCustom.md b/Docs/Samples/iCustom.md new file mode 100644 index 0000000..dd12adb --- /dev/null +++ b/Docs/Samples/iCustom.md @@ -0,0 +1,36 @@ +# iCustom + +Calculates the specified custom indicator and returns its value. + +```mq4 +double iCustom( + string symbol, // symbol + int timeframe, // timeframe + string name, // path/name of the custom indicator compiled program + ... // custom indicator input parameters (if necessary) + int mode, // line index + int shift // shift + ); +``` + +## Parameters + +- **symbol** - Symbol name on the data of which the indicator will be calculated. NULL means the current symbol. +- **timeframe** - Timeframe. It can be any of ENUM_TIMEFRAMES enumeration values. 0 means the current chart timeframe. +- **name** - Custom indicator compiled program name, relative to the root indicators directory (MQL4/Indicators/). If the indicator is located in subdirectory, for example, in MQL4/Indicators/Examples, its name must be specified as "Examples\\indicator_name" (double backslash "\\"must be specified as separator instead of a single one). +- **...** -Custom indicator input-parameters, separated by commas. + + The passed parameters and their order must correspond with the declaration order and the type of extern variables of the custom indicator. If the values of input parameters is not specified, the default values will be used. + +- **mode** - Line index. Can be from 0 to 7 and must correspond with the index, specified in call of the SetIndexBuffer() function. +- **shift** - Index of the value taken from the indicator buffer (shift relative to the current bar the given amount of periods ago). + +## Returned value + +Numerical value of the specified custom indicator. The custom indicator must be compiled (*.EX4 file) and be in the terminal_directory\MQL4\Indicators\ directory. + +## Example + +```mq4 + double val=iCustom(NULL,0,"SampleInd",13,1,0); +``` diff --git a/Docs/Samples/include.mql.md b/Docs/Samples/include.mql.md new file mode 100644 index 0000000..7361f06 --- /dev/null +++ b/Docs/Samples/include.mql.md @@ -0,0 +1,10 @@ +# Including files + +in MQL Language we can put some functions on separated files, then include them in our main MQL Program (such as Indicator or EA) ... +then we can call it's functions ... + +```mq4 +#include "file.mq4" +``` + +see Library file ... \ No newline at end of file diff --git a/Docs/Samples/indicator_buffers.md b/Docs/Samples/indicator_buffers.md new file mode 100644 index 0000000..0e22cac --- /dev/null +++ b/Docs/Samples/indicator_buffers.md @@ -0,0 +1,53 @@ +# Buffers + +simply they are arrays which store information for using them as series in candles ... +in each mql program you had to define which buffers youi have to use in your program. + +this happens by the following pattern + +```mq4 +#property indicator_buffers numOfBuffers +``` + +for example: + +```mq4 +#property indicator_buffers 2 +``` +here we define 2 buffer to system for processing in each candle ... + +then we have to define arrays ... + +double BufferFast[]; +double BufferSlow[]; + +usually for each indicator buffers we can define a constant to hold it's index on chart queue. + +```mq4 +#define FastIndicator 0 +#define SlowIndicator 1 +``` + +each buffer holds data to use in candle calculation time and then draw things on chart. + +we have to define Indexes for Buffers to draw themon chart. +this happens on OnInit() event handler method. + +```mq4 +int OnInit() { + // + // Fast Indicator ... + SetIndexStyle(FastIndicator, DRAW_LINE, STYLE_DOT, 1, clrFireBrick); + SetIndexBuffer(FastIndicator, BufferFast); + SetIndexLabel(FastIndicator, "Fast"); + + // + // Slow Indicator ... + SetIndexStyle(SlowIndicator, DRAW_LINE, STYLE_DOT, 1, clrGreen); + SetIndexBuffer(SlowIndicator, BufferSlow); + SetIndexLabel(SlowIndicator, "Slow"); + + // + return INIT_SUCCEEDED; +} +``` diff --git a/Docs/Samples/nz.md b/Docs/Samples/nz.md new file mode 100644 index 0000000..cbf139b --- /dev/null +++ b/Docs/Samples/nz.md @@ -0,0 +1,6 @@ +# nz + +nz is a “filler”, as it fills na values of a series with zeros (in the case of nz(x) ) or with a user-specified value (in the case of nz(x, y) ). + +[Resources](https://www.tradingview.com/pine-script-docs/en/v3/language/Expressions_declarations_and_statements.html#preventing-na-values-functions-na-and-nz) + diff --git a/Docs/Samples/property.md b/Docs/Samples/property.md new file mode 100644 index 0000000..2c0cbaf --- /dev/null +++ b/Docs/Samples/property.md @@ -0,0 +1,9 @@ +# Property + +[Resource](https://docs.mql4.com/basis/preprosessor/compilation) + +Every MQL4-program allows to specify additional specific parameters named #property that help client terminal in proper servicing for programs without the necessity to launch them explicitly. This concerns external settings of indicators, first of all. Properties described in included files are completely ignored. Properties must be specified in the main mq4 file. + +#property identifier value + +The compiler will write declared values in the configuration of the module executed. diff --git a/Docs/Samples/show_label_on_last_candle.pine b/Docs/Samples/show_label_on_last_candle.pine new file mode 100644 index 0000000..f06a1c2 --- /dev/null +++ b/Docs/Samples/show_label_on_last_candle.pine @@ -0,0 +1,5 @@ + +var label l = na +if (barstate.islast) + l := label.new(bar_index, high, text="CE ATR Multiplier: " + str.tostring(chandelierExitATRMultiplier)) + label.delete(l[1]) diff --git a/Docs/Strategies/XST_SR15M.md b/Docs/Strategies/XST_SR15M.md new file mode 100644 index 0000000..e2703c7 --- /dev/null +++ b/Docs/Strategies/XST_SR15M.md @@ -0,0 +1,64 @@ +# Support and Resistance Scalping (XTS_SR15M) + +## Setup + +- **TF**: 15m +- **Asset**: AAPL +- **R2R**: 1:1.5 +- **Indicators**: + - Leledc Levels (IS) InSillico: + - Change Exhaustion bar count to 42; + - Change Line Tickness to 7; + - Hide Support Level line; + - Hide Resistance Level linel; + - ATR Stop Loss garethyeo: + - Change Source to low; +- **Oscillators**: + - Kurutoga Histogram (D7R): + - Hide Kurutuga Lead 4x; + +## Descriptions + +since Kurutoga Histogram doesn't provides it's source code, i try to implement +Cycle Channel Oscillator, instead of it. + +after i try to do back testing usage of CCH and KUH, i found this rules: + +- kurutuga histogram green color, means both red and green line in Cycle Channel must be above than 0.5 (Middle) line and green line above than red line. +- kurutuga histogram red color, means both red and green line in Cycle Channel must be below than 0.5 (Middle) line and red line below than green line. + +so we have to implement cycle channel oscillator and it's verifications on signals ... + +## Using the Strategy + +### Long/Buy Conditions + +- Leledc Level gives **Support Signal** (green to up side triangle); +- kurutuga histogram is **red** color; +- market forms a **bullish** candle; + +#### Long SL + +place sl at low of ATR Stop Loss Purple(red) Line. + +#### Long TP + +calculate based on R2R; + +### Short/Sell Conditions + +- Leledc Level gives **Resistance Signal** (red to down side triangle); +- kurutuga histogram is **green** color; +- market forms a **bearish** candle; + +#### Short SL + +place sl at high of ATR Stop Loss Green Line. + +#### Short TP + +calculate based on R2R; + +### Signals Overlap + +how to handle signals overlaps. diff --git a/Docs/Templates/ee.mq4 b/Docs/Templates/ee.mq4 new file mode 100644 index 0000000..524d8bf --- /dev/null +++ b/Docs/Templates/ee.mq4 @@ -0,0 +1,30 @@ + // // + // // Long Signal ... + // if ( + // // + // hasLongSignal && + // // + // price xmaBigHigh && + // tp > xmaHigh + // ) { + // tp = MathMin(xmaHigh, xmaBigHigh); + // } else + // // + // // Short Signal ... + // // TODO: Change ... + // if ( + // // + // hasShortSignal && + // // + // price < xmaHigh && + // price < xmaBigHigh && + // price > xmaLow && + // // + // tp < xmaLow + // ) { + // tp = xmaLow; + // } diff --git a/Docs/Templates/raw-strategy.doc.md b/Docs/Templates/raw-strategy.doc.md new file mode 100644 index 0000000..3e2bf1a --- /dev/null +++ b/Docs/Templates/raw-strategy.doc.md @@ -0,0 +1,38 @@ +## Strategy Title + +### Setup + +- **TF**: +- **Asset**: +- **R2R**: 1:1.5 +- **Indicators**: + -- + -- +- **Oscillators**: + -- + +### Using the Strategy + +#### Long/Buy Conditions + +- ; + +##### Long SL + +place sl below of previous market. + +##### Long TP + +calculate based on R2R; + +#### Short/Sell Conditions + +- ; + +##### Short SL + +place sl below of previous market. + +##### Short TP + +calculate based on R2R; diff --git a/Docs/Templates/report.md b/Docs/Templates/report.md new file mode 100644 index 0000000..e489b23 --- /dev/null +++ b/Docs/Templates/report.md @@ -0,0 +1,96 @@ +# XST_??? + +## Report + +### Makret + +??? + +### Exchange + +??? + +### Time Frame + +???min + +### Start Date + +14 may 2023 | 07:25 UTC + +### End Date + +22 may 2023 | 08:55 UTC + +### Risk to Reward + +1:1.5 + +### Reports + +#### Longs + +| ID | Position Type | TP | SL | Description | +| :--: | :-----------: | :--: | :--: | :---------- | +| 1 | Long | | | | +| 2 | Long | | | | +| 3 | Long | | | | +| 4 | Long | | | | +| 5 | Long | | | | +| 6 | Long | | | | +| 7 | Long | | | | +| 8 | Long | | | | +| 9 | Long | | | | +| 10 | Long | | | | +| 11 | Long | | | | +| 12 | Long | | | | +| 13 | Long | | | | +| 14 | Long | | | | +| 15 | Long | | | | +| 16 | Long | | | | +| 17 | Long | | | | +| 18 | Long | | | | +| 19 | Long | | | | +| 20 | Long | | | | + +#### Shorts + +| ID | Position Type | TP | SL | Description | +| :--: | :-----------: | :--: | :--: | :---------- | +| 1 | Short | | | | +| 2 | Short | | | | +| 3 | Short | | | | +| 4 | Short | | | | +| 5 | Short | | | | +| 6 | Short | | | | +| 7 | Short | | | | +| 8 | Short | | | | +| 9 | Short | | | | +| 10 | Short | | | | +| 11 | Short | | | | +| 12 | Short | | | | +| 13 | Short | | | | +| 14 | Short | | | | +| 15 | Short | | | | +| 16 | Short | | | | +| 17 | Short | | | | +| 18 | Short | | | | +| 19 | Short | | | | +| 20 | Short | | | | + +#### Signals Results + +| Type | Count | TPs | SLs | +| :----: | :-: | :-: | :-: | +| Longs | 00 | 00 | 00 | +| Shorts | 00 | 00 | 00 | +| Total | 00 | 00 | 00 | + +#### Analysis + +per trade volume: 10$ +total drawdown: 200$ +total lose: $ +total reward: $ +total cash: $ +win rate: % diff --git a/Docs/Templates/strategy.report.md b/Docs/Templates/strategy.report.md new file mode 100644 index 0000000..da62a67 --- /dev/null +++ b/Docs/Templates/strategy.report.md @@ -0,0 +1,16 @@ +# ???? + +## Makret + +## Exchange + +## Time Frame + +## Start Date + +## End Date + +## Reports + +| ID | Position Type | TP | SL | Description | +| -- | ------------- | -- | -- | ----------- | diff --git a/Docs/Templates/x-lib.candle.mq4 b/Docs/Templates/x-lib.candle.mq4 new file mode 100644 index 0000000..75fdeb6 --- /dev/null +++ b/Docs/Templates/x-lib.candle.mq4 @@ -0,0 +1,39 @@ + +// +// Check if a Candle is Bullish based on CRT Indicator ... +bool isBullishCRT(X_CANDLE_TYPE type) { + // + switch(type) { + // + case X_CT_HAMMER: + case X_CT_BULLISH_BELT: + case X_CT_MORNING_STAR: + case X_CT_BULLISH_KICKER: + case X_CT_BULLISH_HARAMI: + case X_CT_INVERTED_HAMMER: + case X_CT_BULLISH_ENGULFING: + return true; + default: + return false; + } +} + +// +// Check if a Candle is Bearish based on CRT Indicator ... +bool isBearishCRT(X_CANDLE_TYPE type) { + // + switch(type) { + // + case X_CT_PRICE_LINE: + case X_CT_HANGING_MAN: + case X_CT_EVENING_STAR: + case X_CT_SHOOTING_STAR: + case X_CT_BEARISH_HARAMI: + case X_CT_BEARISH_KICKER: + case X_CT_DARK_CLOUD_COVER: + case X_CT_BEARISH_ENGULFING: + return true; + default: + return false; + } +} diff --git a/Docs/Templates/x-mql.ea.template.mq4 b/Docs/Templates/x-mql.ea.template.mq4 new file mode 100644 index 0000000..1aff0b1 --- /dev/null +++ b/Docs/Templates/x-mql.ea.template.mq4 @@ -0,0 +1,53 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center ??? Strategy Expert Advisor +// --------------------------------------------- +// saherelm implementation of strategy expert advisor ... +// +// ShortName: ??? +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm ??? Strategy Expert Advisor" +#property strict + +// +// START Inputs ... +// +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Ticker Event Handler ... +void OnTick() +{ +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// END Functions ... +// \ No newline at end of file diff --git a/Docs/Templates/x-mql.indicator.template.mq4 b/Docs/Templates/x-mql.indicator.template.mq4 new file mode 100644 index 0000000..57cdd00 --- /dev/null +++ b/Docs/Templates/x-mql.indicator.template.mq4 @@ -0,0 +1,104 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center ??? Indicator +// --------------------------------------------- +// saherelm implementation of above indicator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm ??? Indicator" +#property strict + +// +// START Inputs ... +// +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_chart_window +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + + // + return(INIT_SUCCEEDED); +} + +// +// Calculating what we want ... +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, 0); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// END Functions ... +// \ No newline at end of file diff --git a/Docs/Templates/x-mql.lib.template.mq4 b/Docs/Templates/x-mql.lib.template.mq4 new file mode 100644 index 0000000..4cc1a17 --- /dev/null +++ b/Docs/Templates/x-mql.lib.template.mq4 @@ -0,0 +1,25 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center Library +// --------------------------------------------- +// saherelm implementation of strategy expert advisor ... +// +// ShortName: ??? +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// START Functions ... +// +// +// END Functions ... +// \ No newline at end of file diff --git a/Docs/Templates/x-mql.oscillator.template.mq4 b/Docs/Templates/x-mql.oscillator.template.mq4 new file mode 100644 index 0000000..32ab8eb --- /dev/null +++ b/Docs/Templates/x-mql.oscillator.template.mq4 @@ -0,0 +1,56 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center ??? Oscillator +// --------------------------------------------- +// saherelm implementation of above oscillator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm ??? Oscillator" +#property strict + +// +// START Inputs ... +// +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_separate_window +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + + // + return(INIT_SUCCEEDED); +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// END Functions ... +// \ No newline at end of file diff --git a/Docs/Templates/x-pine-script.indicator.template.pine b/Docs/Templates/x-pine-script.indicator.template.pine new file mode 100644 index 0000000..5a5dabe --- /dev/null +++ b/Docs/Templates/x-pine-script.indicator.template.pine @@ -0,0 +1,57 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center ??? Indicator +// --------------------------------------------- +// saherelm implementation of above indicator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// + +// +//@version=5 +indicator(title="SaherElm ??? Indicator", shorttitle = "XS_??_IND", overlay = true) + +// +// START Inputs .... +// +// +// END Inputs .... +// + +// +// START Functions .... +// +// +// END Functions .... +// + +// +// START Calculations .... +// +// +// END Calculations .... +// + +// +// START Plots .... +// +plot(close) +// +// END Plots .... +// + +// +// START Alerts ... +// +// +// END Alerts ... +// + +////////////////////////////////////////////////////// +// TODOS: +// ------- +// - [] +////////////////////////////////////////////////////// diff --git a/Docs/Templates/x-pine-script.oscillator.template.pine b/Docs/Templates/x-pine-script.oscillator.template.pine new file mode 100644 index 0000000..f95cc78 --- /dev/null +++ b/Docs/Templates/x-pine-script.oscillator.template.pine @@ -0,0 +1,57 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center ??? Oscillator +// --------------------------------------------- +// saherelm implementation of above oscillator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// + +// +//@version=5 +indicator(title="SaherElm ??? Oscillator", shorttitle = "XS_??_OSC", overlay = false) + +// +// START Inputs .... +// +// +// END Inputs .... +// + +// +// START Functions .... +// +// +// END Functions .... +// + +// +// START Calculations .... +// +// +// END Calculations .... +// + +// +// START Plots .... +// +plot(close) +// +// END Plots .... +// + +// +// START Alerts ... +// +// +// END Alerts ... +// + +////////////////////////////////////////////////////// +// TODOS: +// ------- +// - [] +////////////////////////////////////////////////////// diff --git a/Docs/Templates/x-pine-script.strategy.template.pine b/Docs/Templates/x-pine-script.strategy.template.pine new file mode 100644 index 0000000..f80bbd7 --- /dev/null +++ b/Docs/Templates/x-pine-script.strategy.template.pine @@ -0,0 +1,195 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center XTrade ??? Strategy +// --------------------------------------------- +// in this strategy i must use: +// - ; +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// + +// +//@version=5 +indicator(title="SaherElm XTrade ??? Strategy", shorttitle = "XST_???", overlay = true) + +// +// START Inputs .... +// +// +// Determines Show Signals or not ... +showSignals = input.bool(defval = true, title = "Show Signals", group = "Strategy") +showStopLosses = input.bool(defval = true, title = "Show Stop Losses", group = "Strategy") + +// +// Show Signals based on their types ... +showLongSignals = input.bool(defval = true, title = "Show Long Signals", group = "Signals") +showShortSignals = input.bool(defval = true, title = "Show Short Signals", group = "Signals") + +// +// Show Stop Losses based on their types ... +swingLoopback = input.int(defval = 7, title = "Swing Loopback Period", group = "Stop Loss") +showLongStopLosses = input.bool(defval = true, title = "Show Long Stop Losses", group = "Stop Loss") +showShortStopLosses = input.bool(defval = true, title = "Show Short Stop Losses", group = "Stop Loss") +// +// END Inputs .... +// + +// +// START Functions .... +// +////////////////////////////// +// START Price Action Candles +////////////////////////////// +// +// Retrieve Specific Candle Height (based on low and high) ... +getCandleRange() => + high - low + +// +// Retrieve Candle Ranges Thirs Section ... +getCandleThird() => + getCandleRange() / 3 + +// +// Determines a Candle is Bullish or not ... +isBullishCandle() => + close > low + (getCandleThird() * 2) + +// +// Determines a Candle is Bearish or not ... +isNeutralCandle() => + close < low + (getCandleThird() * 2) and close > low + getCandleThird() + +// +// Determines a Candle is Neutral or not ... +isBearishCandle() => + close < low + getCandleThird() +///////////////////////////// +// END Price Action Candles +///////////////////////////// +// +// END Functions .... +// + +// +// START Calculations .... +// +// +var shortColor = color.red +var longColor = color.lime + +////////////////////////////// +// START Price Action Candles +////////////////////////////// +// +var bullishColor = color.lime +var bullishShape = shape.arrowup +var bullishTitle = "Bullish" +var bullishType = 1 + +// +var bearishColor = color.red +var bearishShape = shape.arrowdown +var bearishTitle = "Bearish" +var bearishType = -1 + +// +var neutralColor = color.gray +var neutralShape = shape.circle +var neutralTitle = "Neutral" +var neutralType = 0 + +// +candleType = isBullishCandle() ? bullishType : isNeutralCandle() ? neutralType : isBearishCandle() ? bearishType : neutralType + +// +prevCandleType = not na(candleType[1]) ? candleType[1] : neutralType + +// +candleNeighborhoodBaseType = prevCandleType + candleType +///////////////////////////// +// END Price Action Candles +///////////////////////////// + +//////////////////////////// +// START Last Market Price +//////////////////////////// +// +lastMarketLowest = ta.lowest(low, swingLoopback) +lastMarketLowest2 = ta.lowest(low, swingLoopback * 2) +lastMarketLowest3 = ta.lowest(low, swingLoopback * 3) + +// +lastMarketHighest = ta.highest(high, swingLoopback) +lastMarketHighest2 = ta.highest(high, swingLoopback * 2) +lastMarketHighest3 = ta.highest(high, swingLoopback * 3) +//////////////////////////// +// END Last Market Price +//////////////////////////// + +/////////////////////// +// START Strategy ... +/////////////////////// +// +canShowStopLoss = showSignals and showStopLosses and (showLongSignals or showShortSignals) and (showLongStopLosses or showShortStopLosses) +canShowLongStopLoss = canShowStopLoss and showLongStopLosses // and not na(ATRSLLongStopLoss) +canShowShortStopLoss = canShowStopLoss and showShortStopLosses // and not na(ATRSLShortStopLoss) + +// +hasSignal = false // HUTRHasSignal + +// +hasLongSignal = hasSignal and isBullishCandle() and false // HUTRHasLongSignal +longSignal = hasLongSignal ? na : na // HUTRLongSignal : na +float longStopLoss = lastMarketLowest + +// +hasShortSignal = hasSignal and isBearishCandle() and false // HUTRHasShortSignal +shortSignal = hasShortSignal ? na : na // HUTRShortSignal : na +float shortStopLoss = lastMarketHighest + +// +canShowSignal = showSignals and (showLongSignals or showShortSignals) +canShowLongSignal = canShowSignal and showLongSignals and hasLongSignal +canShowShortSignal = canShowSignal and showShortSignals and hasShortSignal +/////////////////////// +// END Strategy ... +/////////////////////// +// +// END Calculations .... +// + +// +// START Plots .... +// +// +// Signals ... +plotshape(canShowLongSignal ? longSignal : na, title = "Long Signal", color = longColor, location = location.belowbar, style = shape.triangleup, size = size.normal) +plotshape(canShowShortSignal ? shortSignal : na, title = "Short Signal", color = shortColor, location = location.abovebar, style = shape.triangledown, size = size.normal) + +// +// Stop Losses ... +plot(series = canShowLongStopLoss ? longStopLoss : na, color = color.fuchsia, linewidth = 1, style = plot.style_stepline, title = "Long Stop Loss") +plot(series = canShowShortStopLoss ? shortStopLoss : na, color = color.aqua, linewidth = 1, style = plot.style_stepline, title = "Short Stop Loss") +// +// END Plots .... +// + +// +// START Alerts ... +// +alertcondition(hasSignal, "XST_SHULL5M > Signal") +alertcondition(hasLongSignal, "XST_SHULL5M > Long Signal") +alertcondition(hasShortSignal, "XST_SHULL5M > Short Signal") +// +// END Alerts ... +// + +////////////////////////////////////////////////////// +// TODOS: +// ------- +// - [] +////////////////////////////////////////////////////// diff --git a/Docs/Templates/x-trade.tempolate.report.txt b/Docs/Templates/x-trade.tempolate.report.txt new file mode 100644 index 0000000..1c44a5b --- /dev/null +++ b/Docs/Templates/x-trade.tempolate.report.txt @@ -0,0 +1,55 @@ +Daily Time Frame: +------------------ + +------------------------- +LONGS: +------------------------- + +XTrade Strong Buy Signals +------------------------- +R2R => 1 risk to 2 reward + +Signals: +--------- +Found: +TP: +SL: +Open: + +XTrade Buy Signals +------------------- +R2R => 1 risk to 1.5 reward + +Signals: +--------- +Found: +TP: +SL: +Open: + + +-------------------------- +SHORTS: +-------------------------- + +XTrade Strong SELl Signals +-------------------------- +R2R => 1 risk to 2 reward + +Signals: +--------- +Found: +TP: +SL: +Open: + +XTrade Sell Signals +-------------------- +R2R => 1 risk to 1.5 reward + +Signals: +--------- +Found: +TP: +SL: +Open: diff --git a/Packed/XAUUSD-15M/Configs/3000 - 0.75.set b/Packed/XAUUSD-15M/Configs/3000 - 0.75.set new file mode 100644 index 0000000..32e95b8 --- /dev/null +++ b/Packed/XAUUSD-15M/Configs/3000 - 0.75.set @@ -0,0 +1,296 @@ +signalPrefix=XST_EA +bullishSignalLabel=X_BUY +bullishSignalColor=16776960 +bearishSignalLabel=X_SELL +bearishSignalColor=16711935 +signalEntryColor=13959039 +signalSLColor=255 +signalTPColor=32768 +candleGapBetweenSignals=7 +candleGapBetweenSignals,F=0 +candleGapBetweenSignals,1=6 +candleGapBetweenSignals,2=0 +candleGapBetweenSignals,3=0 +allowTrade=1 +allowTrade,F=0 +allowTrade,1=0 +allowTrade,2=1 +allowTrade,3=1 +allowLongTrades=1 +allowLongTrades,F=0 +allowLongTrades,1=0 +allowLongTrades,2=1 +allowLongTrades,3=1 +allowShortTrades=1 +allowShortTrades,F=0 +allowShortTrades,1=0 +allowShortTrades,2=1 +allowShortTrades,3=1 +alertEvents=1 +alertEvents,F=0 +alertEvents,1=0 +alertEvents,2=1 +alertEvents,3=1 +alertPositions=1 +alertPositions,F=0 +alertPositions,1=0 +alertPositions,2=1 +alertPositions,3=1 +longPositionAlerts=1 +longPositionAlerts,F=0 +longPositionAlerts,1=0 +longPositionAlerts,2=1 +longPositionAlerts,3=1 +shortPositionAlerts=1 +shortPositionAlerts,F=0 +shortPositionAlerts,1=0 +shortPositionAlerts,2=1 +shortPositionAlerts,3=1 +terminalAlert=0 +terminalAlert,F=0 +terminalAlert,1=0 +terminalAlert,2=1 +terminalAlert,3=1 +pushAlert=0 +pushAlert,F=0 +pushAlert,1=0 +pushAlert,2=1 +pushAlert,3=1 +lotsPerTradePercent=0.00001000 +lotsPerTradePercent,F=0 +lotsPerTradePercent,1=0.00030000 +lotsPerTradePercent,2=0.00000000 +lotsPerTradePercent,3=0.00000000 +maxOpenTrades=4 +maxOpenTrades,F=0 +maxOpenTrades,1=4 +maxOpenTrades,2=0 +maxOpenTrades,3=0 +maxDrawdownPercentPerPTrade=0.10000000 +maxDrawdownPercentPerPTrade,F=0 +maxDrawdownPercentPerPTrade,1=0.30000000 +maxDrawdownPercentPerPTrade,2=0.00000000 +maxDrawdownPercentPerPTrade,3=0.00000000 +minBalancePercent=0.50000000 +minBalancePercent,F=0 +minBalancePercent,1=0.50000000 +minBalancePercent,2=0.00000000 +minBalancePercent,3=0.00000000 +maxEquityPercent=0.10000000 +maxEquityPercent,F=0 +maxEquityPercent,1=0.10000000 +maxEquityPercent,2=0.00000000 +maxEquityPercent,3=0.00000000 +xStarter=- X Signal Provider - +enableXSignalling=1 +enableXSignalling,F=0 +enableXSignalling,1=0 +enableXSignalling,2=1 +enableXSignalling,3=1 +enableXLong=1 +enableXLong,F=0 +enableXLong,1=0 +enableXLong,2=1 +enableXLong,3=1 +enableXShort=1 +enableXShort,F=0 +enableXShort,1=0 +enableXShort,2=1 +enableXShort,3=1 +xShortR2R=3.00000000 +xShortR2R,F=0 +xShortR2R,1=2.50000000 +xShortR2R,2=0.00000000 +xShortR2R,3=0.00000000 +xShortLotsPerTradePercent=0.00025000 +xShortLotsPerTradePercent,F=0 +xShortLotsPerTradePercent,1=0.00002000 +xShortLotsPerTradePercent,2=0.00000000 +xShortLotsPerTradePercent,3=0.00000000 +xShortMaxDrawdownPerTradePercent=0.45000000 +xShortMaxDrawdownPerTradePercent,F=0 +xShortMaxDrawdownPerTradePercent,1=0.02000000 +xShortMaxDrawdownPerTradePercent,2=0.00000000 +xShortMaxDrawdownPerTradePercent,3=0.00000000 +xLongR2R=3.00000000 +xLongR2R,F=0 +xLongR2R,1=2.50000000 +xLongR2R,2=0.00000000 +xLongR2R,3=0.00000000 +xLongLotsPerTradePercent=0.00025000 +xLongLotsPerTradePercent,F=0 +xLongLotsPerTradePercent,1=0.00002000 +xLongLotsPerTradePercent,2=0.00000000 +xLongLotsPerTradePercent,3=0.00000000 +xLongMaxDrawdownPerTradePercent=0.45000000 +xLongMaxDrawdownPerTradePercent,F=0 +xLongMaxDrawdownPerTradePercent,1=0.02000000 +xLongMaxDrawdownPerTradePercent,2=0.00000000 +xLongMaxDrawdownPerTradePercent,3=0.00000000 +xSharpDetectorFactor=700.00000000 +xSharpDetectorFactor,F=0 +xSharpDetectorFactor,1=700.00000000 +xSharpDetectorFactor,2=0.00000000 +xSharpDetectorFactor,3=0.00000000 +xMaximumCandlesPerTrade=206 +xMaximumCandlesPerTrade,F=0 +xMaximumCandlesPerTrade,1=504 +xMaximumCandlesPerTrade,2=0 +xMaximumCandlesPerTrade,3=0 +xOscillatorLength=7 +xOscillatorLength,F=0 +xOscillatorLength,1=7 +xOscillatorLength,2=0 +xOscillatorLength,3=0 +xPSarStep=0.02000000 +xPSarStep,F=0 +xPSarStep,1=0.02000000 +xPSarStep,2=0.00000000 +xPSarStep,3=0.00000000 +xPSarMaximum=0.20000000 +xPSarMaximum,F=0 +xPSarMaximum,1=0.20000000 +xPSarMaximum,2=0.00000000 +xPSarMaximum,3=0.00000000 +xRangeMarketLength=5 +xRangeMarketLength,F=0 +xRangeMarketLength,1=35 +xRangeMarketLength,2=0 +xRangeMarketLength,3=0 +xSwingLength=7 +xSwingLength,F=0 +xSwingLength,1=7 +xSwingLength,2=0 +xSwingLength,3=0 +xRStarter=- XR Signal Provider - +enableXRSignalling=0 +enableXRSignalling,F=0 +enableXRSignalling,1=0 +enableXRSignalling,2=1 +enableXRSignalling,3=1 +enableXRLong=1 +enableXRLong,F=0 +enableXRLong,1=0 +enableXRLong,2=1 +enableXRLong,3=1 +enableXRShort=1 +enableXRShort,F=0 +enableXRShort,1=0 +enableXRShort,2=1 +enableXRShort,3=1 +xRShortR2R=1.50000000 +xRShortR2R,F=0 +xRShortR2R,1=2.00000000 +xRShortR2R,2=0.00000000 +xRShortR2R,3=0.00000000 +xRShortLotsPerTradePercent=0.00020000 +xRShortLotsPerTradePercent,F=0 +xRShortLotsPerTradePercent,1=0.00001000 +xRShortLotsPerTradePercent,2=0.00000000 +xRShortLotsPerTradePercent,3=0.00000000 +xRShortMaxDrawdownPerTradePercent=0.15000000 +xRShortMaxDrawdownPerTradePercent,F=0 +xRShortMaxDrawdownPerTradePercent,1=0.01000000 +xRShortMaxDrawdownPerTradePercent,2=0.00000000 +xRShortMaxDrawdownPerTradePercent,3=0.00000000 +xRLongR2R=1.50000000 +xRLongR2R,F=0 +xRLongR2R,1=2.00000000 +xRLongR2R,2=0.00000000 +xRLongR2R,3=0.00000000 +xRLongLotsPerTradePercent=0.00020000 +xRLongLotsPerTradePercent,F=0 +xRLongLotsPerTradePercent,1=0.00001000 +xRLongLotsPerTradePercent,2=0.00000000 +xRLongLotsPerTradePercent,3=0.00000000 +xRLongMaxDrawdownPerTradePercent=0.15000000 +xRLongMaxDrawdownPerTradePercent,F=0 +xRLongMaxDrawdownPerTradePercent,1=0.01000000 +xRLongMaxDrawdownPerTradePercent,2=0.00000000 +xRLongMaxDrawdownPerTradePercent,3=0.00000000 +xRMaximumCandlesPerTrade=96 +xRMaximumCandlesPerTrade,F=0 +xRMaximumCandlesPerTrade,1=252 +xRMaximumCandlesPerTrade,2=0 +xRMaximumCandlesPerTrade,3=0 +xRSwingLength=48 +xRSwingLength,F=0 +xRSwingLength,1=7 +xRSwingLength,2=0 +xRSwingLength,3=0 +xRSharpDetectionFactor=1350.00000000 +xRSharpDetectionFactor,F=0 +xRSharpDetectionFactor,1=650.00000000 +xRSharpDetectionFactor,2=0.00000000 +xRSharpDetectionFactor,3=0.00000000 +xTPWStarter=- XTPW Signal Provider - +enableXTPWSignalling=1 +enableXTPWSignalling,F=0 +enableXTPWSignalling,1=0 +enableXTPWSignalling,2=1 +enableXTPWSignalling,3=1 +enableXTPWLong=1 +enableXTPWLong,F=0 +enableXTPWLong,1=0 +enableXTPWLong,2=1 +enableXTPWLong,3=1 +enableXTPWShort=1 +enableXTPWShort,F=0 +enableXTPWShort,1=0 +enableXTPWShort,2=1 +enableXTPWShort,3=1 +xTPWShortR2R=2.00000000 +xTPWShortR2R,F=0 +xTPWShortR2R,1=1.50000000 +xTPWShortR2R,2=0.00000000 +xTPWShortR2R,3=0.00000000 +xTPWShortLotsPerTradePercent=0.00025000 +xTPWShortLotsPerTradePercent,F=0 +xTPWShortLotsPerTradePercent,1=0.00001000 +xTPWShortLotsPerTradePercent,2=0.00000000 +xTPWShortLotsPerTradePercent,3=0.00000000 +xTPWShortMaxDrawdownPerTradePercent=0.30000000 +xTPWShortMaxDrawdownPerTradePercent,F=0 +xTPWShortMaxDrawdownPerTradePercent,1=0.01000000 +xTPWShortMaxDrawdownPerTradePercent,2=0.00000000 +xTPWShortMaxDrawdownPerTradePercent,3=0.00000000 +xTPWLongR2R=2.00000000 +xTPWLongR2R,F=0 +xTPWLongR2R,1=1.50000000 +xTPWLongR2R,2=0.00000000 +xTPWLongR2R,3=0.00000000 +xTPWLongLotsPerTradePercent=0.00025000 +xTPWLongLotsPerTradePercent,F=0 +xTPWLongLotsPerTradePercent,1=0.00001000 +xTPWLongLotsPerTradePercent,2=0.00000000 +xTPWLongLotsPerTradePercent,3=0.00000000 +xTPWLongMaxDrawdownPerTradePercent=0.30000000 +xTPWLongMaxDrawdownPerTradePercent,F=0 +xTPWLongMaxDrawdownPerTradePercent,1=0.01000000 +xTPWLongMaxDrawdownPerTradePercent,2=0.00000000 +xTPWLongMaxDrawdownPerTradePercent,3=0.00000000 +xTPWMaximumCandlesPerTrade=206 +xTPWMaximumCandlesPerTrade,F=0 +xTPWMaximumCandlesPerTrade,1=206 +xTPWMaximumCandlesPerTrade,2=0 +xTPWMaximumCandlesPerTrade,3=0 +xTPWPSarStep=0.02000000 +xTPWPSarStep,F=0 +xTPWPSarStep,1=0.02000000 +xTPWPSarStep,2=0.00000000 +xTPWPSarStep,3=0.00000000 +xTPWPSarMaximum=0.20000000 +xTPWPSarMaximum,F=0 +xTPWPSarMaximum,1=0.20000000 +xTPWPSarMaximum,2=0.00000000 +xTPWPSarMaximum,3=0.00000000 +xTPWSwingLength=7 +xTPWSwingLength,F=0 +xTPWSwingLength,1=7 +xTPWSwingLength,2=0 +xTPWSwingLength,3=0 +xTPWSharpDetectionFactor=650.00000000 +xTPWSharpDetectionFactor,F=0 +xTPWSharpDetectionFactor,1=700.00000000 +xTPWSharpDetectionFactor,2=0.00000000 +xTPWSharpDetectionFactor,3=0.00000000 diff --git a/Packed/XAUUSD-15M/EX4/EA/x-saherelm.ea.ex4 b/Packed/XAUUSD-15M/EX4/EA/x-saherelm.ea.ex4 new file mode 100644 index 0000000000000000000000000000000000000000..aef5abdde2d2da72da36473bcef78ee382db46d4 GIT binary patch literal 120242 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 aZ?amGQql-Zdb*IC^jnfaS#)O}i2nd4#&Q7w literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/EX4/Indicators/x-saherelm.ma.ex4 b/Packed/XAUUSD-15M/EX4/Indicators/x-saherelm.ma.ex4 new file mode 100644 index 0000000000000000000000000000000000000000..9748437f57f28de5460ba1df4559acb804deeb23 GIT binary patch literal 9996 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 literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/EX4/Indicators/x-saherelm.xrange.ex4 b/Packed/XAUUSD-15M/EX4/Indicators/x-saherelm.xrange.ex4 new file mode 100644 index 0000000000000000000000000000000000000000..448c8e17ffe82853a5f2ff9e48cdf2a16c15d34b GIT binary patch literal 11490 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 literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.draw.lib.ex4 b/Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.draw.lib.ex4 new file mode 100644 index 0000000000000000000000000000000000000000..2e4494b2142b320181347d44fd7908491d996eb8 GIT binary patch literal 6922 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 Fe*x_92FCyZ literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.log.lib.ex4 b/Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.log.lib.ex4 new file mode 100644 index 0000000000000000000000000000000000000000..89c1f41d18cdbe91d6fe7747c07a59dcf5823524 GIT binary patch literal 5524 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 T>rJ*-%~W|s%ZQVmkrw|0HjrdX literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.models.lib.ex4 b/Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.models.lib.ex4 new file mode 100644 index 0000000000000000000000000000000000000000..7fcdc6540de261374ffbcde0dfe917d35fd48bf6 GIT binary patch literal 5442 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 literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.signal.lib.ex4 b/Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.signal.lib.ex4 new file mode 100644 index 0000000000000000000000000000000000000000..0332293f6b76da253993668c1b8f593d2e0a56ff GIT binary patch literal 17822 zcmdS9bCB;|5HI*0>yC{(wr$(?9ox2T&mG&gZQHhOYwz#9+E-ikcB^*(+&-10)16e( z-F0%hKOGTu8W1~xArt@s007_v0EeLej{g^$Kby^^uCEmDVN*G(>4W3_zo`BfO9A}9 z*#C_Q2l<~OKS;j+p76g&ou%QI4H+?baOz9O6A29X%ZoCIv9bb=Ap-BWy@zN1 z)DE-TbXLB!1tQcz6)xVrrPC#Jf}Mwbg4B5sWkFj<6;K{h8i3U_eO9v^i5l=8ZySP(jo^y z#S)gmS;N|{84MCe9-jhsergYCmLZfTKv`MoRML9n8;}gLgdv4C77O?5M~0O)X3Ku5 zB%g`V&{x~FQmg7$wcYU2vM8)Uu@_7wuatQTlf4#qPN3IQU!Lvgj5!ppZSkm;S(1pR z;P-Oe`6`zhXa5=b#mmUu1)gF_4AStX{+lyW4T&8y-#A+O9A!%~^4#y5Kf2xS(KQE1 zu+8-*7K4Mzf%Clp7hZ1Lui?ew`CJo7)(qdK!+8dCMQA;ISCwd5&H}DuC_DiP{TXe@N zJ}whd7E)UVW;7CSIOnnE`v!agbK)EqOm=z#oM{lS8?|AGT_fpQ;KPs~1ny5j0jlsA z@+H2Qg;*M>XHkb>db1!CFkzn@EL8#qR6{fpvC_ue{g5Z74PD!j#>u$Rn2pi4?M@1^ zg?sQmF+GM*5~a5PxBp%WLY`wKM6C;Fuc(OtvLRAjKf!iov9o2|--f4yP^5`{&G)V2 zgK+~|)nVw3Kn~J-V>M`pb8?Ke?LqMb*x)9*4h8|cB0`G(ACGk zDbp=8WUzJQW8 znI_-laCOH^wP56ZwkWw-xJ{GB^fv3m%Iiga8KNP-okT92uN5GlT~>z zje#F4hd608_Ev0bDP&T})un+&_wf_q|1_A+2V`VxCvWS~0gOH{TSj;+6GH`C@mpFU z4E?x5o{!*acaQfGYt{IxU;Ct&J?oTK;qEyZ|A77SJ&dKti{22QG(`G+_Ujl*t+1JB z3z~Z?^4zd6$v;P*X6S+2H3qiSq8NCsVDnA(x$85i`Al|wJaEo1>kn5_RzBR;j}B)H zBNuq9Ok$Ny!r9D%@mGLU(I~4un)&V}FX{@|Rft{G5l_3(#Toj!)3NixMkNsupjm$M z%E7cUER$gMoelTG{p*~_W`IHP_lSty1R0-_LGyKMIfE64vbEmWh6_-`hOs1y$b7NZ z&85DD5MnDsnt`7937Ggk=%0RTXpALPv7TEc^Dbx#e;`}+{n5bL)Iv2RiDhn>lAIP} zr5X3zk*2kMj;(S{A=IKaMWhGe98RjvmbPr3_+geR_^%UtYAcJmLF7&C_N^O#o$mJD zDVYorDjQxCZVvdV|g)4Z|V+iGCQMhS3VM2{I2;fYuU&LrA_rVdLT?GYezE?Dq z!hAZ`5r|Qvs+$Bu4>IqkHsCyuNZ=;ciWlK{r zwFSC3EXwsh6YA8@2mEDOI>R=EG#N(drToMz6WCJo;`TM-vbougZsBUGBdBxi8E?K6 z?$ECKAgW@2EBOT_lFT^>U>NbkZ?AE8y(pGOeT~ucXYpHZ<$6^lD-tXy^2q&#)K|Mu zokoAbrKcmj*<0J_(BPXyu2ettfeEJE_*egcN`Hm$JV8v*rEX!K+$lk({>q@lR*c-r zaLk|S>aHzjN_-P2jG{nn2IXB2E0>|C>y40o@Z82%Lf5+W^ZZpS=$R(8bDfn8&-Iv; z%j>|w(o3*@7lz*{;4fPdFTu#JGw;A+Gm~-s1+#VFxZHd&l(E}XdNpp~Ay(hyAc*F7 zv&i2!b0kG9_4I`O7Dg0_lzbA58@l*HX4dAzcZaU9_)F#inG{rRwNz&zPU?-I2{2oz zXx}vc-n|*jvysmSg}=((j0Rrw-8v|OYw$GmByV>aB%3|=E8dA;wFcBUI++j4ph9B} zIh=FKaEo~v2BuM=$7J9VU&h+f-O%&J%ZZuw2OJq$xdu@1)VFt|N!k$eB-ZaDbwiem zC7#Kw#WG=qlJ!vn&VOHZ1pzIIu6ckBB-d7T;)IH)QD}ndqh;>ke25kxQrxVP%XMwki^$24Y1_6vS!vPQ7pqVRa3tLi>1c;)I!- z$#0o8W>Ui1x!fK0DeK>5 zn(wFG1xJRU=gBf=iF6IHg{Lm48n;YJAtRYo{M`Oh-}XW2FhAk7vKHH3%$$^AB;qsxt00_=poKMnK@hxY+UU_uAC7&6wfz9DiGuB~E&axB& ze|>rYy5bE~ZI(M13aR26W=^&N@w=@-K|;kHr|_4)?G;b(GtkN7ks7t&gfS+q6!G@4 zTlDXC*scK9j}F0ZdK#CYCrrr3iQBp9YfF-o4SrldeJ1w0u=DIxeNnzQCqo06@&t4S zx3RN+IrpFDFJVZA%wJiGtH{R!_pFtxWTh+pitU6B2eKHo?oMDDD0Ct4#rXE5(nMpJ z)3}d)_-9R!8$eQ81a?%{62iIOT2%~_*tjzd+}3fjUv}D3h+O2>Zq!*+R5}N37ncKI zE6#8ZFf>D}F!+*h%>Clg%5Wk!oXlE9Zr2kw%U~8=xk;k*?V-Bz$F|g;=LM_<8fY`m zFx{p5W7K0XfAjB}lX zS%LATX}lkM&&#VYPH7|=>rjYX3==RxR&Q{|A-~E7b5TtM9^%%h5srLRR3NrynJf{< z?Zb`>m8sd5#j$ke1%)Ek#3fR@fs2=wVUzSbAXB+Lse7CRh!o-jcxj{yO$wi_|)bajgDy-cOQtmgA}U`q`@1 z)Dw$M!FIYH_n0~Q_7|irZ&mcpzVfQ^!#1mQW?JZ8HMfgW z3urwo8Neb!{6O`MxBWS~q4n&xBB9!n#E;N?_?7@Me=u1*m9FD^9$5Un90k8z)!XN1 zwWqi5r~yj8rtXM>Zc~%4u7Tq=#jEkmr-B^s-tO`QIV&1d89(p}CU!8iOI=J9Lo&ddoLt$irnD}&|AfeYc^uO_n5~8@p6tZ| z>K>b#H>D`>mfno{T~GY?2PF#w#$l3*bW_W(gdQ6gQ439mRgi2d@UOdKhrY$#j}uY!esyz0WvAad&yl|F}B;>y)9qX03cVfF>FN*bpI1HgZ_!f zx^_R*9ZEX}VA5>%%33gLFoe!^R%_FRcE6p^{$#LJv|kN{s`P@%4**KqQJ9~b%9Is^o$!jS>C-^rSSHu?^^O8h3s^Bi zHRl07REf8R?^2F~8bn)zz{q!|lH_U}4BAIb$lG*sLV;(4w+;b)d;JrgS#Zh?_)vjf zX*A+0}LH z&OK$#iC51dFq`jC=z=*mj8@UfQ_=-Aq?=mR(E0`LXUSP5D5e-aM$pWChSQEr(#%C) zW0*AxA-l_5>nV)HQA#yWYLPuHxnX)lJQ**ktAh&NxgGox4y3Ez0KMpLot?*WsLvD0 zCc-#0!m-oig>!Z+SlfZP47-mqtsNbw&<|a%-%aVv=1#tirPyDj76p!1r8D;?i#&hQjCJ0Qiy%M6e&^j#x{6xHaFU zH|YrgN7_8b62V|AY9bj?N1eA(bMlzRgc}B>iEmzX%SdsL%_#WBOuU*Mhe}=A3UYXu zhe%%UEjia zNdRfg$ahUMy)FIxkvqgOA9Tn8Q8#*O@t+zA+Mtf1xOc~M|Nee2Dd5h6d{C7yw;D#$ z1&uMp+szDsAuPwiMSOn*c&ik9c?wAbe`h@5#AJZQw%83nw4dEDXiH$PXxJQ&VdRa( z$ZaR0Qt+rbrZU34?HY@!RC*^LuPkPNOaRMH7ycrZ&J#*T)}mAL_lzRCF&6iL+Tm6t zLMY2*cavQMqA&mzCyYmk#o$(!oL(251gd#5Sjss+7YfKahdpF3V^AB!u}vrNs*sh_ zez6eUt?L-}K0#gjwsok1z?2vlXA$U83iV-dAXcBS|LbLL5zghV8ZlvRB9P>?6u5Y+*lveo zjQ;VvtD2KKZBA{5cw*${049k%!G6Pw5}Hkf#sUMF{Howw!(BP?NUUL145bXd0z}81OzS>y~{W2mOrjK%_6WWdCfxU7tU_NBW}$JU~* zE#aQ7#m33D8Oqr<-NFG6Tvu%C&$>~EKO6prhq;EYpX6(E0U)jU1H+g1W}{;kg5tz{ zU0+bvgj#9V%>t)yjhtT?ri%l+bs8pu34N)f2}+d3e~sqyn8;jlkNjiW7BO6wMuMO* zQXrSLNl|{AzO=sus&3OtZ#Q?Z@-$al`0ryG_LLs#{@^{S^KV*(30b#f*!q&F&0X4e z3-6}9VVq^hi&`fm%;Fzj4%4Inl4wMX*cTGqt6JDDO16DF@r*&$qZQDS;^$t~zn1LO z1p+Eqs7Z8q;2yzTQ#esQiBN^m1pEty=I@qeADMx$ia!m9i{Jc zt9UH>=rrn54sTqLATvR@zaWQQnQEA@N?qTIZeF#z={si$a6&S{u?MgP2l^}jh&S2_ z{T5OxSx~p8i++9@MylJ4Y1@@>Rp%6~gGIE_g*Yy@WbQUntJpHKI=cNyAX;CS2)k;>uwvf{ z^Xg%Y-z<&n{D;}?6w@2q>0cQlMKjR zN?7O$7D)S5aNY!So9%|OiDx^ShO2FRR&K3rrVk6+9TGAE`v-L|rJIv5k-SbFZ^d!9 zaJW3QfCVePdY;qyhy`*HK7iY{8(T-1>Rl5DCOx5-U2GfA67P>j(88z+dw|k~{)S2n zNQta&z^8B72rsuz^6S(Il<$iP#A3O-wXbH7CiKJdLst81HDW-hKZb4nZ z<=YOG+Td^)Tffy9{qKeajx&;P>SQ?Fn^4NDwnCyz{b*y?7vIMU>x>6B^-oDEK<~M) zK3J&clPVYv9%ezKiS&$Vv=>zWlJsW$d9cu_4r`q4QE;<%jKrn4Z4-AVT%8EhS%02E zv*p%@FRx58$UQ6n*w0`POz7J)pG^0DL^n&ucJg{qf*L7q0k>GjFiujl^a;+T!oh5| zi(rk@&Zelo_u_VyZPFB+Lgp?4f5N~kmsRE*nx^w=$04)64fpY1_2Ds~S@!cvS>U_5 z7d1>bscy4_~{Ffxfc8i%If zc#jb9dhO*hd>pM*LP_Y-x;QOgogSeeEZTI!mu`eo0}@U0`Ap>m4Urbu*#|iV8UAJq z0g2UKIRw$P%b)$_xwM0M&%gts@?L!SeJipkBg_(kwOY`|Sd}o*+8gsQMExsCeS;~o z1|qr_r$B{tMg%ZCH5c5xfe!lw#4k$CrEzuM;4TEVRn1paEqjHWLZnwHPs+<*E4!&$ ztKbX+#21C&)g9beYWjpDNEhmohy(yo5o02~G)$N=|KI)P$V@h@z=|gfx6i88Crm%) zdg6rRA~JUa(u50+<=M-4F1d0p2QT6c22hATmJv98ofTe}H!SeNsw+ z8dLxFQ_qA$_6{|Mc2n?kz@(5@Zd&U7(%orx65LkgoVkfmlFP}x92{qkta_W{Q{w8g z9-aMbzSGpA(Nz~b!rou@;LQJ#>9ny1cWGY7AjmD zd%-r$ZtbnvS1Mx~Yi&pEpZ{;PmAM=BHV!)CFmD!Js`8v$;Mg7W;fcWA$foHN{c^(D z7zrezp|-mmhLRcV@loXX9mC+Y1#1@$*-u7K=hnab|Adzt9`1Ju zh3+Y;>`m-ms%Vv-E)PfMP3|S#2~~YAe>~8zblwLV8m`-pon?77XO4Ubi!0=j&vm}$ zLe%{XEEYlfyii-mKa!E83k^X^*?&i>kl1}O!Wow!|Dhg(Je>@&X|9ljg5)Rr^X222 zS~om`>T+1z!hf^#Q`Kz47~ZlP-yQ6-78rNf{{uB{+nxxxZyPJEyn>y86zFTPrx?Nl zwu}^o-=NYdH@7|Ebsg}%I-C@~wR9ZNM@7jK(v-DtFpRF*CgJeDxlc=ZkEwbq8EX9G zcTY(&zU$Y`c2tAD_i^m-s6KWo4S^`?w?3(e$TP%Ox_BAg3=U*?^$CoW$Q4J^P=q0< z>OS4Q5Va^cj&A6@CKRWThy`11^Fo44wLiT0i;T{G)n5Za3JYB?ASt@>ByaqC*2#i$ z(pq0RIkqizM8Oy#z?=9?TFnKbsW#_^iB9Hg>UB&s7~%rtLQQ%$b{S64rG|d`f>Dgj z+2eG2M*+~k|DXNUn_tc7+cS*oC;xN)1?1oU?wpK_4J?2Z!Av_U;9M4?dqgR=RVnI$ zIlrX|TEJ^3_cpH6?i%V!5XZHIrNZ+cut{A224VBfp=IcS zIyfoWGKYPgb)Pl6<*%VMy|AIf6JJO>W(%X?2QqY)s4c%37T4qPlVLtBjK06<*U>FF znb=rdbxUQo9~RZdjwGW)KZX2PSqJvRO)VI--Sg%nK-}p43XL`89?A%_$V)P>0H!ug z20?$f!tN&ybxQQ6B1Pr#_s;m4d7lss20sTrSCyKHk@1rAy0W2`7+9Ufm2RIuAegP6 zpILqDl61STpnj-DUfe@_G_;nwl_q&O+P*HUn!f(#LQQ(817v20+`yNiN0)s%qfkaI zaJLEv3P4pm&-y|C3_ev8dGNYU2*8mM)-*hzA8(T%7Bu^LK%{JVfYGJ`2^v;p^NG=0 zcWi=)&y-=alLZN3^abR5%z8o4at@$<7ipq{?+xI|mz? zm5qfCetFx{9QiMIlZgROq?}-xkWdx8Gx>6r<%R(&$>>Ug@7P67co`+5qMCyn6-~@H z*8M}y3J0dWkbuM@9}rbY@b93+J91KdTdOoM=*_MP>1u5vLo%S$cq*R2e@}k>KD`_L z#7091|P8j##DDD$@|-6AWVFUXB_W6 z6eS!5S?}+zKh&}6vA^68%B*vN^#DY25(B^X%%g~DYPFtPhCLox0Sk*%@0{AW&30aq`>}rX6m5PZ9Fq(Z6UziFaa)HWX)HD|LeHQ0; zP&Yf}$w)wIfk^i?wOZ!XpuoaMc6;<|!mBZJmZF?pW8yc8y!NeIK{2%H8;N$W7bVK!O>lJuX z%`YFb;K{u!F8=DtExGTJlll%vwuU|Ez{85npOQwX6Jpw%zdNlY=-by*b4ZN0G$zNZ z$+G8sWO22Y%mDeo8Q!k(ZMh8Bqd2!5snXh;L2Dro98OyM2K~rm)aCPhl!J(F0?P=H zx~b0O_4-+qLv7koh|k@4_XuB*eo$6PofeFFzxtvxMb|(`i&85h3FhBVY4*29zEP|Y zm{m*K0DAh*isjhN>-1oA)37j;z*ROaH?6GsNqOMKkLrw0rXTosiw&}x-=2m|`W*vf z*{Bx*#DC=Aon6tZ$w{qe5M>_qRXw=>Jfc9GglRO0`td->}-`|8Mz6 zlNf;O<~Qz&6PHjir`XLDC3BJF?U*oYcJ=9{kfBP#g(c0!u)$CjtEwPO4?K;#qQ*vbbu{~p;4yx^LQ=VAJ6$U7F*nx~kYAmCt;f!^*G+TGtwYXACwH6vna-i^jDpVYqo*UF z8f(>7P6&WgBB3l3wUS1_#GFL#v*5QC7g2`T&{UBJ$Xd4_qY0W#W^% zh>`5)%Q2jytkrDpL?*iGO2s{Q&uMw=E(KO~<#NIqVHXbF_* z9+w5`e(dgC1m3*&JYsX^brmfh2Fug(pp@6wX-o3s>`Dx zoXba3tg49X#m^MZ%$)U5f-#bW~WV#e_kjMQJ8O9_spjy^Z{tUC@?#PwIn9g?$;B< zZjUeSl+Av-R&=BkdOyZ0$)+bH=mN*#dV#5=tv++X$l^UPZui%u*ccWXPJn1c=Mz

lQ=G4R_EIia*la-{Y!B+rI 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 literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.x.signal.lib.ex4 b/Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.x.signal.lib.ex4 new file mode 100644 index 0000000000000000000000000000000000000000..890d254de39305333b780815bb0da7dff85c4306 GIT binary patch literal 11002 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

3XI(c7eO; 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 HJ{J5xvt$p4 literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.xr.signal.lib.ex4 b/Packed/XAUUSD-15M/EX4/Libraries/x-saherelm.xr.signal.lib.ex4 new file mode 100644 index 0000000000000000000000000000000000000000..2495863fd46df3a2cf0896695d25ea16d6c74288 GIT binary patch literal 10398 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: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 literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/MQL4/EA/x-saherelm.ea.mq4 b/Packed/XAUUSD-15M/MQL4/EA/x-saherelm.ea.mq4 new file mode 100644 index 0000000..d8a63ca --- /dev/null +++ b/Packed/XAUUSD-15M/MQL4/EA/x-saherelm.ea.mq4 @@ -0,0 +1,1038 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center XST Strategy Expert Advisor +// --------------------------------------------- +// saherelm implementation of strategy expert advisor ... +// in this EA, we try to combine multiple tools, to ashive best +// results ... +// +// ShortName: XST +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +989121694056 +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XST Strategy Expert Advisor" +#property strict + +// +// START Inputs ... +// +// +// Signal Prefixe ... +input string signalPrefix = "XST_EA"; // Signal Prefix + +// +// Signal Draw Specifications ... +input string bullishSignalLabel = "X_BUY"; // Bullish Signal Label +input color bullishSignalColor = clrAqua; // Bullish Signal Color + +// +input string bearishSignalLabel = "X_SELL"; // Bearish Signal Label +input color bearishSignalColor = clrFuchsia; // Bearish Signal Color + +// +input color signalEntryColor = clrAquamarine; // Signal Entry Ptice Color +input color signalSLColor = clrRed; // Signal SL Color +input color signalTPColor = clrGreen; // Signal TP Color + +// +input int candleGapBetweenSignals = 7; // How many Candle waits to new Signal from last one + +// +// Trade ... +input bool allowTrade = true; // Allow Trade Based on given Signals +input bool allowLongTrades = true; // Allow Long Trades +input bool allowShortTrades = true; // Allow Short Trades + +// +// Alerts ... +input bool alertEvents = true; // Alert Events +input bool alertPositions = true; // Alert Positions +input bool longPositionAlerts = true; // Alert Long Positions +input bool shortPositionAlerts = true; // Alert Short Positions + +// +// Alert Types ... +input bool terminalAlert = false; // Terminal Alert +input bool pushAlert = false; // Push Notification Alerts + +// +// Balance and Finanical Specifications ... +input double lotsPerTradePercent = 0.00001; // Lots Per Trade Percent +input int maxOpenTrades = 4; // Maximum Open Trade +input double maxDrawdownPercentPerPTrade = 0.1; // Maximum DrawDown Per Trade +input double minBalancePercent = 0.5; // Minimum Balance for Trading +input double maxEquityPercent = 0.1; // Maximum Trade Equity + +// +// START Global Definitions: Variables, Properties and etc ... +// +int lastSignalledBar = 0; + +// +// Includes our shared library ... +#include "../Libraries/x-saherelm.lib.mq4" + +// +// Includes our shared library ... +#include "../Libraries/x-saherelm.signal.lib.mq4" + +// +int maxMarketLength = 0; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Validate Inputs ... + bool inputsNotValiid = + // + // EA ... + maxOpenTrades <= 0 + || maxEquityPercent < 0 + || minBalancePercent < 0 + || lotsPerTradePercent < 0 + || maxDrawdownPercentPerPTrade < 0 + ; + + // + if (inputsNotValiid) { + return INIT_PARAMETERS_INCORRECT; + } + + // + totalSignals = 0; + totalLongSignals = 0; + totalShortSignals = 0; + + // + initialBalance = 0; + + // + // START Define Array Series ... + // + // + // END Define Array Series ... + // + + // + // here we specify logging enabled or not ... + enableLogging = true; + + // + // this is a Tag which attached to our Logger ... + logTag = "XST"; + + // + ClearSignalConditions(); + + // + maxMarketLength = MathMax(0, GetDailyCandleCount()); + + // + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) { +} + +// +// Ticker Event Handler ... +void OnTick() { + // + isNewDay = IsNewDay(); + if (isNewDay) { + // + LogMessage( + StringConcatenate( + "New Day ..." + ) + ); + } + + // + // Process Signals to Open Positions ... + ProcessSignals(); + + // + // Checking State for Signal Handling ... + CheckState(); + + // + // Process Open Positions for Trailing Stop Loss or Close ... + ProcessOpenPositions(); +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Check State for Signal Handling ... +void CheckState() { + // + // Here we Must to Check Market State for enable or disable + // Signal Handlers and also make dection to close all long/short + // trades ... +} + +// +// Calculate Signals and Process Based on Exists Signals ... +void ProcessSignals() { + // + XSignalRequest request = {}; + request.type = X_SIGNAL_NONE; + request.hasSignal = false; + + // + // Prevent Multiple Calculating on Same Bars ... + isNewBar = IsNewBar(); + if (isNewBar) { + countedBars++; + } + + // + if (countedBars < maxMarketLength) { + return; + } + + // + bool allowDoTrade = true; + + // + // Check Balance ... + if (initialBalance > 0) { + // + // Retrieve Account Balance ... + double balance = AccountInfoDouble(ACCOUNT_BALANCE); + double minimumBalanceForTrade = + balance > initialBalance + ? + minBalancePercent * balance + : + minBalancePercent * initialBalance; + + // + // Retrieve Account Equity ... + double equity = AccountInfoDouble(ACCOUNT_EQUITY); + double maxAllowedEquity = balance - (balance * maxEquityPercent); + + // + // Retrieve Free Marigin ... + double freeMargin = AccountFreeMargin(); + double maximumMariginRisk = balance - (balance * maxEquityPercent); + + // + if ( + // + // Do not Open Positions if equity not passed ... + equity < maxAllowedEquity || + // + // Do not Open Positions if free margin not passed ... + freeMargin <= maximumMariginRisk || + // + // Do not open positions if balance less than minimum ... + balance <= minimumBalanceForTrade + ) { + // + static bool tradingPauseAlerted; + + // + allowDoTrade = false; + + // + if (!tradingPauseAlerted) { + // + string message = StringConcatenate( + "Trading Pause => ", + "Balance: ", balance, + ", Equity: ", equity, + ", FreeMargin: ", freeMargin + ); + + // + LogMessage(message); + SendAlert(message); + + // + tradingPauseAlerted = true; + } + } + } + + // + // Retrieve Signal Exists ... + request = GenerateSignal(0); + + // + // Prevent doing anything else, if there is no signals ... + if ( + !allowDoTrade || + !request.hasSignal || + request.type == X_SIGNAL_NONE + ) { + return; + } + + // + bool hasLongSignal = request.type == X_SIGNAL_LONG; + + // + // Check last Signalled Bar with Counted Bars ... + // Prevent Multiple Signalling on Same Bar ... + bool isInLastSignalledBars = false; + for (int i=0; i < candleGapBetweenSignals; i++) { + // + isInLastSignalledBars = + isInLastSignalledBars + || lastSignalledBar == countedBars - i + ; + } + if (isInLastSignalledBars) { + // + // Clear Signal Conditions ... + if (hasLongSignal) { + ClearLongSignalConditions(); + } else { + ClearShortSignalConditions(); + } + + // + return; + } + + // + // increase last signalled bar ... + lastSignalledBar = countedBars; + + // + // Calculate Can Trade or not ... + allowDoTrade = allowTrade + && ( + hasLongSignal ? + allowLongTrades : + allowShortTrades + ); + + // + // Chack Maximum Open Positions ... + int openTrades = CountOpenTrades(); + if (maxOpenTrades > 0) { + // + if (openTrades >= maxOpenTrades) { + // + allowDoTrade = false; + + // + if (!allowDoTrade) { + // + string message = StringConcatenate( + "Trading Pause => ", + "Max Open Trades (", + maxOpenTrades, + ") reached ..." + ); + + // + LogMessage(message); + SendAlert(message); + } + } + } + + // + // Check Trading is Enable or not ... + // nothing to do if trading is disabled ... + if (!allowDoTrade) { + // + // Clear Signal Conditions ... + if (hasLongSignal) { + ClearLongSignalConditions(); + } else { + ClearShortSignalConditions(); + } + + // + string message = StringConcatenate( + "Trading Not Allowed ..." + ); + + // + LogMessage(message); + SendAlert(message); + return; + } + + // + // Retrieve Signal Lots Per Trade ... + double lPTradePercent = GetSignalLottage( + request.signal, + lotsPerTradePercent + ); + + // + bool isPositionOpened = TradeSignal( + request.signal, + lPTradePercent, + // + bullishSignalLabel, + bullishSignalColor, + bearishSignalLabel, + bearishSignalColor + ); + + // + totalSignals++; + if (hasLongSignal) { + // + totalLongSignals++; + ClearLongSignalConditions(); + } else { + // + totalShortSignals++; + ClearShortSignalConditions(); + } + + // + if (isPositionOpened) { + // + bool canAlert = + alertPositions + && ( + hasLongSignal ? + longPositionAlerts + : + shortPositionAlerts + ); + + // + if (canAlert) { + // + // Alert Message ... + string message = StringConcatenate( + "Trade on Signal ID: ", request.signal.id, + ", ProvidedBy: ", GetSignalProviderIdentifier(request.signal.provider), + ", Entry: ", request.signal.entry, + ", TP: ", request.signal.tp + ); + + // + // Terminal Alert ... + if (terminalAlert) { + Alert(message); + } + + // + // Push Alert ... + if (pushAlert) { + SendNotification(message); + } + } + } +} + +// +// Process All Open Positions ... +void ProcessOpenPositions() { + // + // XSignalling ... + if (enableXSignalling) { + // + // Close All XXX Provided Signals on it's Specific Condition ... + if (xCloseLongTrades) { + // + CloseAllProviderLongTrades(X_XXX_PROVIDER); + + // + xCloseLongTrades = false; + } + + // + if (xCloseShortTrades) { + // + CloseAllProviderShortTrades(X_XTPW_PROVIDER); + + // + xCloseShortTrades = false; + } + + // + // Close Maximum DrawDown Passed Trades ... + + // + // Longs ... + bool hasClosedLongInDrawDownLongTrade = CloseAllMaximumDrawDownPassedTrades( + xLongMaxDrawdownPerTradePercent, + X_SIGNAL_LONG, + X_XXX_PROVIDER + ); + + // + // Shorts ... + bool hasClosedShortInDrawDownLongTrade = CloseAllMaximumDrawDownPassedTrades( + xShortMaxDrawdownPerTradePercent, + X_SIGNAL_SHORT, + X_XXX_PROVIDER + ); + + // + // Close All Long Time Trades based on Provider provided Length ... + bool hasClosedLongTimeTrade = CloseAllLongTimeTrades( + xMaximumCandlesPerTrade, + X_XXX_PROVIDER + ); + + // + if ( + hasClosedLongTimeTrade + || hasClosedLongInDrawDownLongTrade + || hasClosedShortInDrawDownLongTrade + ) { + xFailedSignals++; + } + } + + // + // XR Signalling ... + if (enableXRSignalling) { + // + if (xRCloseLongTrades) { + // + CloseAllProviderLongTrades(X_XR_PROVIDER); + + // + xRCloseLongTrades = false; + } + + // + if (xRCloseShortTrades) { + // + CloseAllProviderShortTrades(X_XR_PROVIDER); + + // + xRCloseShortTrades = false; + } + + // + // Close Maximum DrawDown Passed Trades ... + + // + // Longs ... + bool hasClosedLongInDrawDownLongTrade = CloseAllMaximumDrawDownPassedTrades( + xRLongMaxDrawdownPerTradePercent, + X_SIGNAL_LONG, + X_XR_PROVIDER + ); + + // + // Shorts ... + bool hasClosedShortInDrawDownLongTrade = CloseAllMaximumDrawDownPassedTrades( + xRShortMaxDrawdownPerTradePercent, + X_SIGNAL_SHORT, + X_XR_PROVIDER + ); + + // + // Close All Long Time Trades based on Provider provided Length ... + bool hasClosedLongTimeTrade = CloseAllLongTimeTrades( + xRMaximumCandlesPerTrade, + X_XR_PROVIDER + ); + + // + if ( + hasClosedLongTimeTrade + || hasClosedLongInDrawDownLongTrade + || hasClosedShortInDrawDownLongTrade + ) { + xRFailedSignals++; + } + } + + // + // XTPW Signalling ... + if (enableXTPWSignalling) { + // + if (xTPWCloseLongTrades) { + // + CloseAllProviderLongTrades(X_XTPW_PROVIDER); + + // + xTPWCloseLongTrades = false; + } + + // + if (xTPWCloseShortTrades) { + // + CloseAllProviderShortTrades(X_XTPW_PROVIDER); + + // + xTPWCloseShortTrades = false; + } + + // + // Close Maximum DrawDown Passed Trades ... + + // + // Longs ... + bool hasClosedLongInDrawDownLongTrade = CloseAllMaximumDrawDownPassedTrades( + xTPWLongMaxDrawdownPerTradePercent, + X_SIGNAL_LONG, + X_XTPW_PROVIDER + ); + + // + // Shorts ... + bool hasClosedShortInDrawDownLongTrade = CloseAllMaximumDrawDownPassedTrades( + xTPWShortMaxDrawdownPerTradePercent, + X_SIGNAL_SHORT, + X_XTPW_PROVIDER + ); + + // + // Close All Long Time Trades based on Provider provided Length ... + bool hasClosedLongTimeTrade = CloseAllLongTimeTrades( + xTPWMaximumCandlesPerTrade, + X_XTPW_PROVIDER + ); + + // + if ( + hasClosedLongTimeTrade + || hasClosedLongInDrawDownLongTrade + || hasClosedShortInDrawDownLongTrade + ) { + xTPWFailedSignals++; + } + } + + // + // Close Maximum DrawDown Passed Trades ... + // this is the Maximum Controller ... + // + double maxOfXPercent = enableXSignalling ? + MathMax( + xLongMaxDrawdownPerTradePercent, + xShortMaxDrawdownPerTradePercent + ) : 0 + ; + + // + double maxOfXRPercent = enableXRSignalling ? + MathMax( + xRLongMaxDrawdownPerTradePercent, + xRShortMaxDrawdownPerTradePercent + ) : 0 + ; + + // + double maxOfXTPWPercent = enableXTPWSignalling ? + MathMax( + xTPWLongMaxDrawdownPerTradePercent, + xTPWShortMaxDrawdownPerTradePercent + ) : 0 + ; + + // + double maxDrawDownPercent = MathMax( + maxOfXPercent, + maxOfXRPercent + ); + maxDrawDownPercent = MathMax( + maxDrawDownPercent, + maxOfXTPWPercent + ); + maxDrawDownPercent = MathMax( + maxDrawDownPercent, + maxDrawdownPercentPerPTrade + ); + + // + // we Calculate Max DrawDown Percent Per Trade ... + // then try to Close based on them ... + bool hasClosedInDrawDownLongTrade = CloseAllMaximumDrawDownPassedTrades( + maxDrawDownPercent + ); +} + +// +// Send Special Type of Alerts ... +void SendAlert(string message) { + // + if (!alertEvents) { + return; + } + + // + // Terminal Alert ... + if (terminalAlert) { + Alert(message); + } + + // + // Push Alert ... + if (pushAlert) { + SendNotification(message); + } +} +// +// END Functions ... +// + +// +// +// Calculate Signal ... +// in this function we calculate a signal exists in +// specific bar or not ... +XSignalRequest GenerateSignal( + const int bar_index // Bar Index ... +) { + // + // create temp result ... + XSignalRequest result = {}; + result.hasSignal = false; + result.type = X_SIGNAL_NONE; + result.provider = X_UNKNOWN_PROVIDER; + + // + bool hasSignal = false; + bool hasLongSignal = false; + bool hasShortSignal = false; + + // + XSignal signal = {}; + + // + // Define Template Signal Requests for Managing Multiple Signals ... + // + // X ... + XSignalRequest xLongSignalRequest = {}; + XSignalRequest xShortSignalRequest = {}; + // + // XR ... + XSignalRequest xrLongSignalRequest = {}; + XSignalRequest xrShortSignalRequest = {}; + // + // XTPW ... + XSignalRequest xTPWLongSignalRequest = {}; + XSignalRequest xTPWShortSignalRequest = {}; + + // + // START XR Signal Handler ... + // + // + if (enableXRSignalling) { + // + CheckXRSignalHandler( + bar_index + ); + + // + // Long Trades ... + if (allowTrade && allowLongTrades) { + // + if (xRWaitForLongSignals) { + // + CheckXRLongSignalConditions( + bar_index + ); + + // + xrLongSignalRequest = GenerateXRSignal( + X_SIGNAL_LONG, + signalPrefix, + bar_index + ); + + // + if (xrLongSignalRequest.hasSignal) { + // + // Here we can Check and Filter Signals Based On State ... + bool isReady = IsReadyForXRSignals( + xrLongSignalRequest.signal + ); + + // + if (isReady && xRWaitForLongSignals) { + // + hasLongSignal = true; + signal = xrLongSignalRequest.signal; + } else { + ClearXRLongSignalConditions(); + } + } + } else { + ClearXRLongSignalConditions(); + } + } + + // + // Short Trades ... + if (allowTrade && allowShortTrades) { + // + if (xRWaitForShortSignals) { + // + CheckXRShortSignalConditions( + bar_index + ); + + // + xrShortSignalRequest = GenerateXRSignal( + X_SIGNAL_SHORT, + signalPrefix, + bar_index + ); + + // + if (xrShortSignalRequest.hasSignal) { + // + // Here we can Check and Filter Signals Based On State ... + bool isReady = IsReadyForXRSignals( + xrShortSignalRequest.signal + ); + + // + if (isReady && xRWaitForShortSignals) { + // + hasShortSignal = true; + signal = xrShortSignalRequest.signal; + } else { + ClearXRShortSignalConditions(); + } + } + } else { + ClearXRShortSignalConditions(); + } + } + } + // + // END XR Signal Handler ... + // + + // + // START XTPW Signal Handler ... + // + if (enableXTPWSignalling) { + // + CheckXTPWSignalHandler( + bar_index + ); + + // + // Long Trades ... + if (allowTrade && allowLongTrades) { + // + if (xTPWWaitForLongSignals) { + // + CheckXTPWLongSignalConditions( + bar_index + ); + + // + xTPWLongSignalRequest = GenerateXTPWSignal( + X_SIGNAL_LONG, + signalPrefix, + bar_index + ); + + // + if (xTPWLongSignalRequest.hasSignal) { + // + // Here we can Check and Filter Signals Based On State ... + bool isReady = IsReadyForXTPWSignals( + xTPWLongSignalRequest.signal + ); + + // + if (isReady && xTPWWaitForLongSignals) { + // + hasLongSignal = true; + signal = xTPWLongSignalRequest.signal; + } else { + ClearXTPWLongSignalConditions(); + } + } + } else { + ClearXTPWLongSignalConditions(); + } + } + + // + // Short Trades ... + if (allowTrade && allowShortTrades) { + // + if (xTPWWaitForShortSignals) { + // + CheckXTPWShortSignalConditions( + bar_index + ); + + // + xTPWShortSignalRequest = GenerateXTPWSignal( + X_SIGNAL_SHORT, + signalPrefix, + bar_index + ); + + // + if (xTPWShortSignalRequest.hasSignal) { + // + // Here we can Check and Filter Signals Based On State ... + bool isReady = IsReadyForXTPWSignals( + xTPWShortSignalRequest.signal + ); + + // + if (isReady && xTPWWaitForShortSignals) { + // + hasShortSignal = true; + signal = xTPWShortSignalRequest.signal; + } else { + ClearXTPWShortSignalConditions(); + } + } + } else { + ClearXTPWShortSignalConditions(); + } + } + } + // + // END XTPW Signal Handler ... + // + + // + // START X Signal Handler ... + // + // + if (enableXSignalling) { + // + CheckXSignalHandler( + bar_index + ); + + // + // Long Trades ... + if (allowTrade && allowLongTrades) { + // + if (xWaitForLongSignals) { + // + CheckXLongSignalConditions( + bar_index + ); + + // + xLongSignalRequest = GenerateXSignal( + X_SIGNAL_LONG, + signalPrefix, + bar_index + ); + + // + if (xLongSignalRequest.hasSignal) { + // + // Here we can Check and Filter Signals Based On State ... + bool isReady = IsReadyForXSignals( + xLongSignalRequest.signal + ); + + // + if (isReady && xWaitForLongSignals) { + // + hasLongSignal = true; + signal = xLongSignalRequest.signal; + } else { + ClearXLongSignalConditions(); + } + } + } else { + ClearXLongSignalConditions(); + } + } + + // + // Short Trades ... + if (allowTrade && allowShortTrades) { + // + if (xWaitForShortSignals) { + // + CheckXShortSignalConditions( + bar_index + ); + + // + xShortSignalRequest = GenerateXSignal( + X_SIGNAL_SHORT, + signalPrefix, + bar_index + ); + + // + if (xShortSignalRequest.hasSignal) { + // + // Here we can Check and Filter Signals Based On State ... + bool isReady = IsReadyForXSignals( + xShortSignalRequest.signal + ); + + // + if (isReady && xWaitForShortSignals) { + // + hasShortSignal = true; + signal = xShortSignalRequest.signal; + } else { + ClearXShortSignalConditions(); + } + } + } else { + ClearXShortSignalConditions(); + } + } + } + // + // END XR Signal Handler ... + // + + // + hasSignal = hasLongSignal || hasShortSignal; + + // + if (!hasSignal) { + // + signal.type = X_SIGNAL_NONE; + result.type = X_SIGNAL_NONE; + } + + // + // Normalize TP, SL and Entry Price ... + signal.tp = NormalizeDouble(signal.tp, _Digits); + signal.sl = NormalizeDouble(signal.sl, _Digits); + signal.entry = NormalizeDouble(signal.entry, _Digits); + + // + result.signal = signal; + result.type = signal.type; + result.hasSignal = hasSignal; + result.provider = signal.provider; + + // + // Return Result ... + return result; +} diff --git a/Packed/XAUUSD-15M/MQL4/Indicators/x-saherelm.ma.mq4 b/Packed/XAUUSD-15M/MQL4/Indicators/x-saherelm.ma.mq4 new file mode 100644 index 0000000..e3a5737 --- /dev/null +++ b/Packed/XAUUSD-15M/MQL4/Indicators/x-saherelm.ma.mq4 @@ -0,0 +1,173 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MA Indicator +// --------------------------------------------- +// saherelm implementation of above indicator ... +// this indicator uses two ma line: +// - fast ma; +// - slow ma; +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm MA Indicator" +#property strict + +// +// START Inputs ... +// +// +// Fast MA ... +input int maLength = 20; // MA Length +input int maShift = 0; // MA Shift +input ENUM_MA_METHOD maMethod = MODE_EMA; // MA Method +input ENUM_APPLIED_PRICE maAppliedPrice = PRICE_CLOSE; // MA Applied Price + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_chart_window + +// +#property indicator_buffers 1 + +// +#property indicator_plots 1 + +// +// Start Define Indicator Buffer Styles ... +// +// +// Fast Ma Buffer ... +#property indicator_label1 "Ma" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrYellow +#property indicator_style1 STYLE_DOT +#property indicator_width1 2 + +// +// End Define Indicator Buffer Styles ... +// + +// +// Buffers ... +#define maBufferIndex 0 + +double maBuffer[]; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + if (maLength <= 0) { + return INIT_PARAMETERS_INCORRECT; + } + + // + // Start Set Index Buffers ... + // + // + // Ma ... + SetIndexBuffer(maBufferIndex, maBuffer); + SetIndexDrawBegin(maBufferIndex, maLength + 1); + // + // End Set Index Buffers ... + // + + // + return INIT_SUCCEEDED; +} + +// +// Calculating what we want ... +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, maLength); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate Ma ... + CalculateMa(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculating Ma ... +void CalculateMa( + const int &bar_index +) { + // + // Calculating Fast Ma ... + double ma = iMA( + _Symbol, + _Period, + maLength, + maShift, + maMethod, + maAppliedPrice, + bar_index + ); + + // + maBuffer[bar_index] = ma; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/Packed/XAUUSD-15M/MQL4/Indicators/x-saherelm.xrange.mq4 b/Packed/XAUUSD-15M/MQL4/Indicators/x-saherelm.xrange.mq4 new file mode 100644 index 0000000..1359f57 --- /dev/null +++ b/Packed/XAUUSD-15M/MQL4/Indicators/x-saherelm.xrange.mq4 @@ -0,0 +1,294 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center XRange Indicator +// --------------------------------------------- +// saherelm implementation of above indicator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XRange Indicator" +#property strict + +// +// START Inputs ... +// +input int marketLength = 14; +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_chart_window + +// +#property indicator_buffers 3 + +// +#property indicator_plots 3 + +// +// Start Define Indicator Buffer Styles ... +// +// +// Highest High Buffer ... +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrGreen +#property indicator_style1 STYLE_DOT +#property indicator_width1 1 + +// +// Lowest Low Buffer ... +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrRed +#property indicator_style2 STYLE_DOT +#property indicator_width2 1 + +// +// Middle Buffer ... +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrYellow +#property indicator_style3 STYLE_DASH +#property indicator_width3 1 +// +// End Define Indicator Buffer Styles ... +// + +// +// Buffers ... +// +#define highestHighBufferIndex 0 +#define lowestLowBufferIndex 1 +#define middleBufferIndex 2 + +// +double highestHighBuffer[]; +double lowestLowBuffer[]; +double middleBuffer[]; + +// +datetime startTime; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + if ( + marketLength <= 0 + ) { + return INIT_PARAMETERS_INCORRECT; + } + + // + string hhLbl = StringConcatenate( + "XR HH(", marketLength, ")" + ); + SetIndexBuffer(highestHighBufferIndex, highestHighBuffer); + SetIndexLabel(highestHighBufferIndex, hhLbl); + + // + string llLbl = StringConcatenate( + "XR LL(", marketLength, ")" + ); + SetIndexBuffer(lowestLowBufferIndex, lowestLowBuffer); + SetIndexLabel(lowestLowBufferIndex, llLbl); + + // + string midLbl = StringConcatenate( + "XR Mid(", marketLength, ")" + ); + SetIndexBuffer(middleBufferIndex, middleBuffer); + SetIndexLabel(middleBufferIndex, midLbl); + + // + return INIT_SUCCEEDED; +} + +// +// Calculating what we want ... +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, marketLength); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculations ... + CalculateBuffers(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculations ... +void CalculateBuffers( + const int &bar_index +) { + // + // Retrieve Bar Time ... + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + if (startTime == 0) { + // + startTime = barTime; + SetIndicatorBuffersNone(bar_index); + return; + } + + // + int startBarIndex = iBarShift( + _Symbol, + _Period, + startTime + ); + + // + int startDistance = startBarIndex - bar_index; + if (startDistance < marketLength) { + // + SetIndicatorBuffersNone(bar_index); + return; + } + + // + // Highest High ... + int hhIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + marketLength, + bar_index + ); + double hh = iHigh( + _Symbol, + _Period, + hhIdx + ); + highestHighBuffer[bar_index] = hh; + + // + // Lowest Low ... + int llIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + marketLength, + bar_index + ); + double ll = iLow( + _Symbol, + _Period, + llIdx + ); + lowestLowBuffer[bar_index] = ll; + + // + // Middle Buffer ... + double mid = (hh + ll) / 2; + middleBuffer[bar_index] = mid; + + // + // Reset Start Time ... + startTime = 0; +} + +// +void SetIndicatorBuffersNone( + const int bar_index +) { + // + int lastBarIndex = bar_index + 1; + + // + double lastHighestHigh; + double lastLowestLow; + + // + // Highest High ... + if (ArraySize(highestHighBuffer) > lastBarIndex) { + lastHighestHigh = highestHighBuffer[lastBarIndex]; + } else { + lastHighestHigh = 0; + } + + // + // Lowest Low ... + if (ArraySize(lowestLowBuffer) > lastBarIndex) { + lastLowestLow = lowestLowBuffer[lastBarIndex]; + } else { + lastLowestLow = 0; + } + + // + highestHighBuffer[bar_index] = lastHighestHigh; + lowestLowBuffer[bar_index] = lastLowestLow; + + // + double mid = (lastHighestHigh + lastLowestLow) / 2; + middleBuffer[bar_index] = mid; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/Packed/XAUUSD-15M/MQL4/Indicators/x-saherelm.xtpow.mq4 b/Packed/XAUUSD-15M/MQL4/Indicators/x-saherelm.xtpow.mq4 new file mode 100644 index 0000000..46ff59e --- /dev/null +++ b/Packed/XAUUSD-15M/MQL4/Indicators/x-saherelm.xtpow.mq4 @@ -0,0 +1,275 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center Trend Power Indicator +// --------------------------------------------- +// saherelm implementation of above indicator ... +// this indicator uses two ma line: +// - fast ma; +// - slow ma; +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm MA Indicator" +#property strict + +// +// START Inputs ... +// +input int marketLength = 7; // Market Length +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_separate_window + +// +#property indicator_plots 3 +#property indicator_buffers 3 +#property indicator_minimum 0 +#property indicator_maximum 100 + +// +#property indicator_levelcolor clrGray +#property indicator_levelstyle STYLE_DOT + +// +// Start Define Indicator Buffer Styles ... +// +#property indicator_type1 DRAW_HISTOGRAM +#property indicator_color1 clrLime +#property indicator_style1 STYLE_DOT +#property indicator_width1 1 + +// +#property indicator_type2 DRAW_HISTOGRAM +#property indicator_color2 clrRed +#property indicator_style2 STYLE_DOT +#property indicator_width2 1 + +// +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrYellow +#property indicator_style3 STYLE_DOT +#property indicator_width3 1 +// +// End Define Indicator Buffer Styles ... +// + +// +// Buffers ... +#define powerUpBufferIndex 0 +#define powerDownBufferIndex 1 +#define signalBufferIndex 2 + +double powerUpBuffer[]; +double powerDownBuffer[]; +double signalBuffer[]; + +// +#include "../Libraries/x-saherelm.lib.mq4" +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + if (marketLength <= 0) { + return INIT_PARAMETERS_INCORRECT; + } + + // + SetLevelValue(0, 0.0); + IndicatorSetString(INDICATOR_LEVELTEXT,0,""); + + // + SetLevelValue(1, 20.0); + IndicatorSetString(INDICATOR_LEVELTEXT,1,""); + + // + SetLevelValue(2, 50); + IndicatorSetString(INDICATOR_LEVELTEXT,2,""); + + // + SetLevelValue(3, 100); + IndicatorSetString(INDICATOR_LEVELTEXT,3,""); + + // + string pUpLbl = StringConcatenate( + "P Up (", marketLength, ")" + ); + SetIndexLabel(powerUpBufferIndex, pUpLbl); + SetIndexBuffer(powerUpBufferIndex, powerUpBuffer); + SetIndexDrawBegin(powerUpBufferIndex, marketLength + 1); + + // + string pDownLbl = StringConcatenate( + "P Down (", marketLength, ")" + ); + SetIndexLabel(powerDownBufferIndex, pDownLbl); + SetIndexBuffer(powerDownBufferIndex, powerDownBuffer); + SetIndexDrawBegin(powerDownBufferIndex, marketLength + 1); + + // + string pSignalLbl = StringConcatenate( + "P Signal (", marketLength, ")" + ); + SetIndexLabel(signalBufferIndex, pSignalLbl); + SetIndexBuffer(signalBufferIndex, signalBuffer); + SetIndexDrawBegin(signalBufferIndex, marketLength + 1); + + // + // here we specify logging enabled or not ... + enableLogging = true; + + // + // this is a Tag which attached to our Logger ... + logTag = "X_TPW_OSC"; + + // + return INIT_SUCCEEDED; +} + +// +// Calculating what we want ... +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, marketLength); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate Buffers ... + CalculateBuffers(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculating Ma ... +void CalculateBuffers( + const int &bar_index +) { + // + double powerUp = 0; + double powerDown = 0; + + // + int dailyCount = GetDailyCandleCount(); + double dailyHH = GetMarketHighestHigh( + bar_index, + dailyCount + ); + double dailyLL = GetMarketLowestLow( + bar_index, + dailyCount + ); + double dailyDiff = dailyHH - dailyLL; + double rate = dailyDiff / 100; + + // + for (int i = bar_index; i < bar_index + marketLength; i++) { + // + XOHCL c = GetCandleModel(i); + + // + double cRange = + MathAbs(c.open - c.close) + // MathAbs(c.high - c.low) + ; + bool isBullish = c.open < c.close; + + // + if (isBullish) { + powerUp += cRange; + } else { + powerDown += cRange; + } + } + + // + powerUp = powerUp / rate; + powerDown = powerDown / rate; + + // + int doubleMarketLength = (marketLength * 2); + double ema = GetMA( + bar_index, + doubleMarketLength, + 0, + MODE_EMA, + PRICE_WEIGHTED + ); + + // + double emaRate = GetMarketHighestHigh(bar_index, doubleMarketLength) - GetMarketLowestLow(bar_index, doubleMarketLength) / 100; + + // + double signal = (ema / 100) * rate; + double signalAddition = MathMin(powerUp, powerDown); + + // + powerUpBuffer[bar_index] = powerUp; + powerDownBuffer[bar_index] = powerDown; + signalBuffer[bar_index] = signal + signalAddition; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.draw.lib.mq4 b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.draw.lib.mq4 new file mode 100644 index 0000000..776cde4 --- /dev/null +++ b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.draw.lib.mq4 @@ -0,0 +1,2010 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 Draw Global Library +// --------------------------------------------- +// saherelm useful tools and definitions ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Includes our shared library ... +#include "../Libraries/x-saherelm.log.lib.mq4" + +// +// Draw Highest High ... +bool DrawHighestHigh( + const int bar_index, + const int marketLen, + const string tag, + const int drawUntilBarIndex = 0, + const long chartID = 0, + const int subWindow = 0, + const color clr = clrAqua, + const ENUM_LINE_STYLE style = STYLE_DOT, + const int width = 1, + const bool back = false, + const bool selection = false, + const bool hidden = false, + const long zOrder = 0 +) { + // + bool result = false; + + // + // Calculate Highest High ... + int hhIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + marketLen, + bar_index + ); + + // + datetime hhTime = iTime( + _Symbol, + _Period, + hhIdx + ); + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + datetime drawUntilTime = + drawUntilBarIndex != bar_index ? + iTime( + _Symbol, + _Period, + drawUntilBarIndex + ) : + barTime + ; + + // + double hh = iHigh( + _Symbol, + _Period, + hhIdx + ); + + // + int rnd = rand(); + + // + // Define Label ... + string lbl = StringConcatenate( + tag, + "_HH(", marketLen ,")_", + hh, + "_", rnd + ); + + // + result = ObjectDelete( + chartID, + lbl + ); + + // + // Draw a Trend Line ... + result = DrawTrendLine( + chartID, + lbl, + subWindow, + hhTime, + hh, + drawUntilTime, + hh, + clr, + style, + width, + back, + selection, + hidden, + zOrder + ); + + // + return result; +} + +// +// Draw Lowest Low ... +bool DrawLowestLow( + const int bar_index, + const int marketLen, + const string tag, + const int drawUntilBarIndex = 0, + const long chartID = 0, + const int subWindow = 0, + const color clr = clrFuchsia, + const ENUM_LINE_STYLE style = STYLE_DOT, + const int width = 1, + const bool back = false, + const bool selection = false, + const bool hidden = false, + const long zOrder = 0 +) { + // + bool result = false; + + // + // Calculate Highest High ... + int llIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + marketLen, + bar_index + ); + + // + datetime llTime = iTime( + _Symbol, + _Period, + llIdx + ); + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + datetime drawUntilTime = + drawUntilBarIndex != bar_index ? + iTime( + _Symbol, + _Period, + drawUntilBarIndex + ) : + barTime + ; + + // + double ll = iLow( + _Symbol, + _Period, + llIdx + ); + + // + int rnd = rand(); + + // + // Define Label ... + string lbl = StringConcatenate( + tag, + "_LL(", marketLen ,")_", + ll, + "_", rnd + ); + + // + result = ObjectDelete( + chartID, + lbl + ); + + // + // Draw a Trend Line ... + result = DrawTrendLine( + chartID, + lbl, + subWindow, + llTime, + ll, + drawUntilTime, + ll, + clr, + style, + width, + back, + selection, + hidden, + zOrder + ); + + // + return result; +} + +// +// Draw Market Middle ... +bool DrawMarketMiddle( + const int bar_index, + const int marketLen, + const string tag, + const int drawUntilBarIndex = 0, + const long chartID = 0, + const int subWindow = 0, + const color clr = clrYellow, + const ENUM_LINE_STYLE style = STYLE_DOT, + const int width = 1, + const bool back = false, + const bool selection = false, + const bool hidden = false, + const long zOrder = 0 +) { + // + bool result = false; + + // + // Calculate Highest High ... + int llIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + marketLen, + bar_index + ); + + // + datetime llTime = iTime( + _Symbol, + _Period, + llIdx + ); + + // + double ll = iLow( + _Symbol, + _Period, + llIdx + ); + + // + // Calculate Highest High ... + int hhIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + marketLen, + bar_index + ); + + // + datetime hhTime = iTime( + _Symbol, + _Period, + hhIdx + ); + + // + double hh = iHigh( + _Symbol, + _Period, + hhIdx + ); + + // + double middle = ll + ((hh - ll) / 2); + datetime middleTime = hhIdx < llIdx + ? hhTime + : llTime + ; + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + datetime drawUntilTime = + drawUntilBarIndex != bar_index ? + iTime( + _Symbol, + _Period, + drawUntilBarIndex + ) : + barTime + ; + + // + int rnd = rand(); + + // + // Define Label ... + string lbl = StringConcatenate( + tag, + "_MID(", marketLen ,")_", + middle, + "_", rnd + ); + + // + result = ObjectDelete( + chartID, + lbl + ); + + // + // Draw a Trend Line ... + result = DrawTrendLine( + chartID, + lbl, + subWindow, + middleTime, + middle, + drawUntilTime, + middle, + clr, + style, + width, + back, + selection, + hidden, + zOrder + ); + + // + return result; +} + +// +// Start Arrow Functions ... +// +// +// Draw an Arrow Object on Chart ... +bool DrawArrow( + const long chartID = 0, // chart's ID + const string name = "Arrow", // arrow name + const int subWindow = 0, // subwindow index + datetime time = 0, // anchor point time + double price = 0, // anchor point price + const uchar arrowCode = OBJ_ARROW_UP, // arrow code + const ENUM_ARROW_ANCHOR anchor = ANCHOR_BOTTOM, // anchor point position + const color clr = clrAqua, // arrow color + const ENUM_LINE_STYLE style = STYLE_SOLID, // border line style + const int width = 3, // arrow size + const bool back = false, // in the background + const bool selection = false, // highlight to move + const bool hidden = false, // hidden in the object list + const long zOrder = 0 // Order Object ... +) { + // + // set anchor point coordinates if they are not set ... + ChangeArrowEmptyPoint(time, price); + + // + // reset the error value ... + ResetLastError(); + + // + // create an arrow ... + if(!ObjectCreate(chartID, name, OBJ_ARROW, subWindow, time, price)) { + // + string message = StringConcatenate(__FUNCTION__, + ": failed to create an arrow! Error code = ", + GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // set the arrow code ... + ObjectSetInteger(chartID, name, OBJPROP_ARROWCODE, arrowCode); + + // + // set anchor type ... + ObjectSetInteger(chartID, name, OBJPROP_ANCHOR, anchor); + + // + // set the arrow color ... + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // set the border line style ... + ObjectSetInteger(chartID, name, OBJPROP_STYLE, style); + + // + // set the arrow's size ... + ObjectSetInteger(chartID, name, OBJPROP_WIDTH, width); + + // + // display in the foreground (false) or background (true) ... + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // enable (true) or disable (false) the mode of moving the arrow by mouse + // when creating a graphical object using ObjectCreate function, the object cannot be + // highlighted and moved by default. Inside this method, selection parameter + // is false by default, if you want making it possible to highlight and move the object + // change it to true ... + ObjectSetInteger(chartID,name, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID,name, OBJPROP_SELECTED, selection); + + // + // hide (true) or display (false) graphical object name in the object list ... + ObjectSetInteger(chartID, name, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, name, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return(true); +} + +// +// Move the anchor point of Arrow ... +bool MoveArrow( + const long chartID = 0, // chart's ID + const string name = "Arrow", // object name + datetime time = 0, // anchor point time coordinate + double price = 0 // anchor point price coordinate +) { + // + // if point position is not set, move it to the current bar having Bid price ... + if(!time) { + time = TimeCurrent(); + } + + // + if(!price) { + price = SymbolInfoDouble(_Symbol, SYMBOL_BID); + } + + // + // reset the error value + ResetLastError(); + + // + // move the anchor point ... + if(!ObjectMove(chartID, name, 0, time, price)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to move the anchor point! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Delete an arrow ... +bool DeleteArrow( + const long chartID = 0, // chart's ID + const string name = "Arrow" // arrow name +) { + // + // reset the error value ... + ResetLastError(); + + // + // delete an arrow ... + if(!ObjectDelete(chartID, name)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to delete an arrow! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Change the arrow code ... +bool ArrowCodeChange( + const long chartID = 0, // chart's ID + const string name = "Arrow", // object name + const uchar code = 252 // arrow code +) { + // + // reset the error value ... + ResetLastError(); + + // + // change the arrow code ... + if(!ObjectSetInteger(chartID, name, OBJPROP_ARROWCODE, code)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to change the arrow code! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Change anchor type ... +bool ArrowAnchorChange( + const long chartID = 0, // chart's ID + const string name="Arrow", // object name + const ENUM_ARROW_ANCHOR anchor = ANCHOR_TOP // anchor type +) { + // + // reset the error value ... + ResetLastError(); + + // + // change anchor type ... + if(!ObjectSetInteger(chartID, name, OBJPROP_ANCHOR, anchor)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to change anchor type! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Check anchor point values and set default values +// for empty ones ... +void ChangeArrowEmptyPoint( + datetime &time, + double &price +) { + // + // if the point's time is not set, it will be on the current bar ... + if(!time) { + time = TimeCurrent(); + } + + // + // if the point's price is not set, it will have Bid value ... + if(!price) { + price = SymbolInfoDouble(_Symbol, SYMBOL_BID); + } +} +// +// End Arrow Functions ... +// + +// +// Start Horizontal Line Functions ... +// +// +// Create, Draw the horizontal line ... +bool DrawHorizontalLine( + const long chartID = 0, // chart's ID + const string name = "HLine", // line name + const int subWindow = 0, // subwindow index + double price = 0, // line price + const color clr = clrRed, // line color + const ENUM_LINE_STYLE style = STYLE_SOLID, // line style + const int width = 1, // line width + const bool back = false, // in the background + const bool selection = false, // highlight to move + const bool hidden = false, // hidden in the object list + const long zOrder = 0 // priority for mouse click +) { + // + // if the price is not set, set it at the current Bid price level ... + if(!price) { + price=SymbolInfoDouble(Symbol(),SYMBOL_BID); + } + + // + // reset the error value ... + ResetLastError(); + + // + // create a horizontal line ... + if(!ObjectCreate(chartID, name, OBJ_HLINE, subWindow, 0, price)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to create a horizontal line! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // set line color ... + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // set line display style ... + ObjectSetInteger(chartID, name, OBJPROP_STYLE, style); + + // + // set line width ... + ObjectSetInteger(chartID, name, OBJPROP_WIDTH, width); + + // + // display in the foreground (false) or background (true) ... + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // enable (true) or disable (false) the mode of moving the line by mouse + // when creating a graphical object using ObjectCreate function, the object cannot be + // highlighted and moved by default. Inside this method, selection parameter + // is true by default making it possible to highlight and move the object + ObjectSetInteger(chartID, name, OBJPROP_SELECTABLE, selection); + ObjectSetInteger(chartID, name, OBJPROP_SELECTED, selection); + + // + // hide (true) or display (false) graphical object name in the object list ... + ObjectSetInteger(chartID, name, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, name, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return(true); +} + +// +// Move horizontal line ... +bool MoveHorizontalLine( + const long chartID = 0, // chart's ID + const string name = "HLine", // line name + double price = 0 // line price +) { + // + // if the line price is not set, move it to the current Bid price level ... + if(!price) { + price = SymbolInfoDouble(Symbol(),SYMBOL_BID); + } + + // + // reset the error value ... + ResetLastError(); + + // + // move a horizontal line ... + if(!ObjectMove(chartID, name, 0, 0, price)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to move the horizontal line! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Delete a horizontal line ... +bool DeleteHorizontalLine( + const long chartID = 0, // chart's ID + const string name = "HLine" // line name +) { + // + // reset the error value ... + ResetLastError(); + + // + // delete a horizontal line ... + if(!ObjectDelete(chartID, name)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to delete a horizontal line! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} +// +// End Horizontal Line Functions ... +// + +// +// Start Vertical Line Functions ... +// +// +// Create the vertical line ... +bool DrawVerticalLine( + const long chartID = 0, // chart's ID + const string name = "VLine", // line name + const int sub_window = 0, // subwindow index + datetime time = 0, // line time + const color clr=clrRed, // line color + const ENUM_LINE_STYLE style = STYLE_SOLID, // line style + const int width = 1, // line width + const bool back = false, // in the background + const bool selection = false, // highlight to move + const bool hidden = false, // hidden in the object list + const long zOrder = 0 // priority for mouse click +) { + // + // if the line time is not set, draw it via the last bar ... + if (!time) { + time = TimeCurrent(); + } + + // + // reset the error value + ResetLastError(); + + // + // create a vertical line ... + if (!ObjectCreate(chartID, name, OBJ_VLINE, sub_window, time, 0)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to create a vertical line! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return false; + } + + // + // set line color ... + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // set line display style ... + ObjectSetInteger(chartID, name, OBJPROP_STYLE, style); + + // + // set line width ... + ObjectSetInteger(chartID, name, OBJPROP_WIDTH, width); + + // + // display in the foreground (false) or background (true) ... + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // enable (true) or disable (false) the mode of moving the line by mouse + // when creating a graphical object using ObjectCreate function, the object cannot be + // highlighted and moved by default. Inside this method, selection parameter + // is true by default making it possible to highlight and move the object ... + ObjectSetInteger(chartID, name, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID, name, OBJPROP_SELECTED, selection); + + // + // hide (true) or display (false) graphical object name in the object list ... + ObjectSetInteger(chartID, name, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart + ObjectSetInteger(chartID, name, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return true; +} + +// +// Move the vertical line ... +bool MoveVerticalLine( + const long chartID = 0, // chart's ID + const string name = "VLine", // line name + datetime time = 0 // line time +) { + // + // if line time is not set, move the line to the last bar ... + if (!time) { + time = TimeCurrent(); + } + + // + // reset the error value ... + ResetLastError(); + + // + // move the vertical line ... + if(!ObjectMove(chartID, name, 0, time, 0)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to move the vertical line! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Delete the vertical line ... +bool DeleteVerticalLine( + const long chartID = 0, // chart's ID + const string name = "VLine" // line name +) { + // + // reset the error value ... + ResetLastError(); + + // + // delete the vertical line ... + if (!ObjectDelete(chartID, name)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to delete the vertical line! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return false; + } + + // + // successful execution ... + return true; +} +// +// End Vertical Line Functions ... +// + +// +// Start RectangleLabel Functions ... +// +// +// Create Rectangle Label Object ... +bool DrawRectangleLabel( + const long chartID = 0, // chart's ID + const string name = "RectLabel", // label name + const int subWindow = 0, // subwindow index + const int x = 0, // X coordinate + const int y = 0, // Y coordinate + const int width = 50, // width + const int height = 18, // height + const color back_clr = C'236,233,216', // background color + const ENUM_BORDER_TYPE border = BORDER_SUNKEN, // border type + const ENUM_BASE_CORNER corner = CORNER_LEFT_UPPER, // chart corner for anchoring + const color clr = clrRed, // flat border color (Flat) + const ENUM_LINE_STYLE style = STYLE_SOLID, // flat border style + const int lineWidth = 1, // flat border width + const bool back = false, // in the background + const bool selection = false, // highlight to move + const bool hidden = false, // hidden in the object list + const long zOrder = 0 // priority for mouse click +) { + // + // reset the error value ... + ResetLastError(); + + // + //--- create a rectangle label + if(!ObjectCreate(chartID, name, OBJ_RECTANGLE_LABEL, subWindow, 0, 0)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to create a rectangle label! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // set label coordinates ... + ObjectSetInteger(chartID, name, OBJPROP_XDISTANCE, x); + ObjectSetInteger(chartID, name, OBJPROP_YDISTANCE, y); + + // + // set label size ... + ObjectSetInteger(chartID, name, OBJPROP_XSIZE, width); + ObjectSetInteger(chartID, name, OBJPROP_YSIZE, height); + + // + // set background color ... + ObjectSetInteger(chartID, name, OBJPROP_BGCOLOR, back_clr); + + // + // set border type ... + ObjectSetInteger(chartID, name, OBJPROP_BORDER_TYPE, border); + + // + // set the chart's corner, relative to which point coordinates are defined ... + ObjectSetInteger(chartID, name, OBJPROP_CORNER, corner); + + // + // set flat border color (in Flat mode) ... + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // set flat border line style ... + ObjectSetInteger(chartID, name, OBJPROP_STYLE, style); + + // + // set flat border width ... + ObjectSetInteger(chartID, name, OBJPROP_WIDTH, lineWidth); + + // + // display in the foreground (false) or background (true) ... + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // enable (true) or disable (false) the mode of moving the label by mouse ... + ObjectSetInteger(chartID, name, OBJPROP_SELECTABLE, selection); + ObjectSetInteger(chartID, name, OBJPROP_SELECTED, selection); + + // + // hide (true) or display (false) graphical object name in the object list ... + ObjectSetInteger(chartID, name, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, name, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return(true); +} + +// +// Move Rectangle Label .. +bool MoveRectangleLabel( + const long chartID = 0, // chart's ID + const string name = "RectLabel", // label name + const int x = 0, // X coordinate + const int y=0 // Y coordinate +) { + // + // reset the error value ... + ResetLastError(); + + // + // move the rectangle label ... + if(!ObjectSetInteger(chartID, name, OBJPROP_XDISTANCE, x)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to move X coordinate of the label! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + if(!ObjectSetInteger(chartID, name, OBJPROP_YDISTANCE, y)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to move Y coordinate of the label! Error code = ",GetLastError() + ); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Delete the rectangle label ... +bool DeleteRectangleLabel( + const long chartID = 0, // chart's ID + const string name = "RectLabel" // label name +) { + // + // reset the error value ... + ResetLastError(); + + // + // delete the label ... + if(!ObjectDelete(chartID, name)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to delete a rectangle label! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Change Rectangle Label Size ... +bool ChangeSizeRectangleLabel( + const long chartID = 0, // chart's ID + const string name = "RectLabel", // label name + const int width = 50, // label width + const int height = 18 // label height +) { + // + // reset the error value ... + ResetLastError(); + + // + // change label size ... + if(!ObjectSetInteger(chartID, name, OBJPROP_XSIZE, width)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to change the label's width! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + if(!ObjectSetInteger(chartID, name, OBJPROP_YSIZE, height)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to change the label's height! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Change rectangle label border type ... +bool RectLabelChangeBorderType( + const long chartID = 0, // chart's ID + const string name = "RectLabel", // label name + const ENUM_BORDER_TYPE border = BORDER_SUNKEN // border type +) { + // + // reset the error value ... + ResetLastError(); + + // + // change border type ... + if(!ObjectSetInteger(chartID, name, OBJPROP_BORDER_TYPE, border)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to change the border type! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} +// +// End RectangleLabel Functions ... +// + +// +// Start TrendLine Funcions ... +// +// Create a trend line by the given coordinates ... +bool DrawTrendLine( + const long chartID = 0, // chart's ID + const string name = "TrendLine", // line name + const int subWindow = 0, // subwindow index + datetime time1 = 0, // first point time + double price1 = 0, // first point price + datetime time2 = 0, // second point time + double price2 = 0, // second point price + const color clr = clrYellow, // line color + const ENUM_LINE_STYLE style = STYLE_SOLID, // line style + const int width = 1, // line width + const bool back = false, // in the background + const bool selection = false, // highlight to move + const bool rayRight = false, // line's continuation to the right + const bool hidden = false, // hidden in the object list + const long zOrder = 0 // priority for mouse click +) { + // + // set anchor points' coordinates if they are not set ... + ChangeTrendLineEmptyPoints( + time1, + price1, + time2, + price2 + ); + + // + // reset the error value ... + ResetLastError(); + + // + // create a trend line by the given coordinates ... + if(!ObjectCreate(chartID, name, OBJ_TREND, subWindow, time1, price1, time2, price2)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to create a trend line! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // set line color ... + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // set line display style ... + ObjectSetInteger(chartID, name, OBJPROP_STYLE, style); + + // + // set line width ... + ObjectSetInteger(chartID, name, OBJPROP_WIDTH, width); + + // + // display in the foreground (false) or background (true) ... + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // enable (true) or disable (false) the mode of moving the line by mouse + // when creating a graphical object using ObjectCreate function, the object cannot be + // highlighted and moved by default. Inside this method, selection parameter + // is true by default making it possible to highlight and move the object ... + ObjectSetInteger(chartID, name, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID, name, OBJPROP_SELECTED, selection); + + // + // enable (true) or disable (false) the mode of continuation of the line's display to the right ... + ObjectSetInteger(chartID, name, OBJPROP_RAY_RIGHT, rayRight); + + // + // hide (true) or display (false) graphical object name in the object list ... + ObjectSetInteger(chartID, name, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, name, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return(true); +} + +// +// Move trend line anchor point ... | +bool ChangeTrendLinePoint( + const long chartID = 0, // chart's ID + const string name = "TrendLine", // line name + const int pointindex = 0, // anchor point index + datetime time = 0, // anchor point time coordinate + double price = 0 // anchor point price coordinate +) { + // + // if point position is not set, move it to the current bar having Bid price ... + if (!time) { + time = TimeCurrent(); + } + + // + if (!price) { + price = SymbolInfoDouble(Symbol(),SYMBOL_BID); + } + + // + // reset the error value ... + ResetLastError(); + + // + // move trend line's anchor point ... + if(!ObjectMove(chartID, name, pointindex, time, price)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to move the anchor point! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// The function deletes the trend line from the chart ... +bool DeleteTrendLine( + const long chartID = 0, // chart's ID + const string name = "TrendLine" // line name +) { + // + // reset the error value ... + ResetLastError(); + + // + // delete a trend line ... + if(!ObjectDelete(chartID, name)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to delete a trend line! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Check the values of trend line's anchor points and set default ... +// values for empty ones ... +void ChangeTrendLineEmptyPoints( + datetime &time1, + double &price1, + datetime &time2, + double &price2 +) { + // + // if the first point's time is not set, it will be on the current bar ... + if (!time1) { + time1 = TimeCurrent(); + } + + // + // if the first point's price is not set, it will have Bid value ... + if (!price1) { + price1 = SymbolInfoDouble(Symbol(), SYMBOL_BID); + } + + // + // if the second point's time is not set, it is located 9 bars left from the second one ... + if (!time2) { + // + // array for receiving the open time of the last 10 bars ... + datetime temp[10]; + CopyTime(Symbol(), Period(), time1, 10, temp); + + // + // set the second point 9 bars left from the first one ... + time2 = temp[0]; + } + + // + // if the second point's price is not set, it is equal to the first point's one ... + if (!price2) { + price2 = price1; + } +} +// +// End TrendLine Functions ... +// + +// +// Start Text Functions ... +// +// Create and Draw a Text Object ... +bool DrawText( + const long chartID = 0, // chart's ID + const string name = "Text", // object name + const int subWindow = 0, // subwindow index + datetime time = 0, // anchor point time + double price = 0, // anchor point price + const string text = "Text", // the text itself + const string font = "Arial", // font + const int fontSize = 10, // font size + const color clr = clrRed, // color + const double angle = 0.0, // text slope + const ENUM_ANCHOR_POINT anchor = ANCHOR_CENTER, // anchor type + const bool back = false, // in the background + const bool selection = false, // highlight to move + const bool hidden = true, // hidden in the object list + const long zOrder = 0 // priority for mouse click +) { + // + // set anchor point coordinates if they are not set ... + ChangeTextEmptyPoint(time,price); + + // + // reset the error value ... + ResetLastError(); + + // + //--- create Text object + if(!ObjectCreate(chartID, name, OBJ_TEXT, subWindow, time, price)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to create \"Text\" object! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // set the text ... + ObjectSetString(chartID, name , OBJPROP_TEXT, text); + + // + // set text font ... + ObjectSetString(chartID, name, OBJPROP_FONT, font); + + // + // set font size ... + ObjectSetInteger(chartID, name, OBJPROP_FONTSIZE, fontSize); + + // + // set the slope angle of the text ... + ObjectSetDouble(chartID, name, OBJPROP_ANGLE, angle); + + // + // set anchor type ... + ObjectSetInteger(chartID, name, OBJPROP_ANCHOR, anchor); + + // + // set color ... + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // display in the foreground (false) or background (true) ... + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // enable (true) or disable (false) the mode of moving the object by mouse ... + ObjectSetInteger(chartID, name, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID ,name, OBJPROP_SELECTED, selection); + + // + // hide (true) or display (false) graphical object name in the object list ... + ObjectSetInteger(chartID, name, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, name, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return(true); +} + +// +// Move the anchor point ... +bool MoveText( + const long chartID = 0, // chart's ID + const string name = "Text", // object name + datetime time = 0, // anchor point time coordinate + double price = 0 // anchor point price coordinate +) { + // + //--- if point position is not set, move it to the current bar having Bid price + if (!time) { + time = TimeCurrent(); + } + + // + if (!price) { + price = SymbolInfoDouble(_Symbol, SYMBOL_BID); + } + + // + // reset the error value ... + ResetLastError(); + + // + // move the anchor point .. + if(!ObjectMove(chartID, name, 0, time, price)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to move the anchor point! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Change the object text ... +bool ChangeText( + const long chartID = 0, // chart's ID + const string name = "Text", // object name + const string text = "Text" // text +) { + // + // reset the error value ... + ResetLastError(); + + // + // change object text ... + if(!ObjectSetString(chartID, name, OBJPROP_TEXT, text)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to change the text! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Delete Text object ... +bool DeleteText( + const long chartID = 0, // chart's ID + const string name = "Text" // object name +) { + // + // reset the error value ... + ResetLastError(); + + // + // delete the object ... + if(!ObjectDelete(chartID, name)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to delete \"Text\" object! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution + return(true); +} + +// +// Check anchor point values and set default values +// for empty ones ... +void ChangeTextEmptyPoint( + datetime &time, + double &price +) { + // + // if the point's time is not set, it will be on the current bar ... + if(!time) { + time = TimeCurrent(); + } + + // + // if the point's price is not set, it will have Bid value ... + if(!price) { + price = SymbolInfoDouble(_Symbol, SYMBOL_BID); + } + } +// +// End Text Functions ... +// + +// +// Start Fibonacchi Functions ... +// +// +// Create Fibonacci Retracement by the given coordinates ... +bool DrawFibonacci( + const long chartID = 0, // chart's ID + const string name="Fibonacci", // object name + const int subWindow = 0, // subwindow index + datetime time1 = 0, // first point time + double price1 = 0, // first point price + datetime time2 = 0, // second point time + double price2 = 0, // second point price + const color clr = clrRed, // object color + const ENUM_LINE_STYLE style = STYLE_SOLID, // object line style + const int width = 1, // object line width + const bool back = false, // in the background + const bool selection = true, // highlight to move + const bool rayRight = false, // object's continuation to the right + const bool hidden = true, // hidden in the object list + const long zOrder = 0 // priority for mouse click +) { + // + // set anchor points' coordinates if they are not set ... + ChangeFibonacciEmptyPoints(time1, price1, time2, price2); + + // + // reset the error value ... + ResetLastError(); + + // + // Create Fibonacci Retracement by the given coordinates ... + if (!ObjectCreate(chartID, name, OBJ_FIBO, subWindow, time1, price1, time2, price2)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to create \"Fibonacci Retracement\"! Error code = " , GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // set color ... + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // set line style ... + ObjectSetInteger(chartID, name, OBJPROP_STYLE, style); + + // + // set line width ... + ObjectSetInteger(chartID, name, OBJPROP_WIDTH, width); + + // + // display in the foreground (false) or background (true) ... + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // enable (true) or disable (false) the mode of highlighting the channel for moving + // when creating a graphical object using ObjectCreate function, the object cannot be + // highlighted and moved by default. Inside this method, selection parameter + // is true by default making it possible to highlight and move the object ... + ObjectSetInteger(chartID, name, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID, name, OBJPROP_SELECTED, selection); + + // + // enable (true) or disable (false) the mode of continuation of the object's display to the right ... + ObjectSetInteger(chartID, name, OBJPROP_RAY_RIGHT, rayRight); + + // + // hide (true) or display (false) graphical object name in the object list ... + ObjectSetInteger(chartID, name, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, name, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return(true); +} + +// +// Create Fibonacci Retracement by the given coordinates ... +bool DrawCustomFibonacci( + // + int levels, // number of level lines + double &values[], // values of level lines + color &colors[], // color of level lines + ENUM_LINE_STYLE &styles[], // style of level lines + int &widths[], // width of level lines + string &descriptions[], // level Descriptions + // + const long chartID = 0, // chart's ID + const string name = "Fibonacci", // object name + const int subWindow = 0, // subwindow index + datetime time1 = 0, // first point time + double price1 = 0, // first point price + datetime time2 = 0, // second point time + double price2 = 0, // second point price + const color clr = clrAqua, // object color + const ENUM_LINE_STYLE style = STYLE_DOT, // object line style + const int width = 1, // object line width + const bool back = false, // in the background + const bool selection = true, // highlight to move + const bool rayRight = false, // object's continuation to the right + const bool hidden = true, // hidden in the object list + const long zOrder = 0 // priority for mouse click +) { + // + // set anchor points' coordinates if they are not set ... + ChangeFibonacciEmptyPoints(time1, price1, time2, price2); + + // + // reset the error value ... + ResetLastError(); + + // + // Create Fibonacci Retracement by the given coordinates ... + if (!ObjectCreate(chartID, name, OBJ_FIBO, subWindow, time1, price1, time2, price2)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to create \"Fibonacci Retracement\"! Error code = " , GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // set color ... + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // set line style ... + ObjectSetInteger(chartID, name, OBJPROP_STYLE, style); + + // + // set line width ... + ObjectSetInteger(chartID, name, OBJPROP_WIDTH, width); + + // + // display in the foreground (false) or background (true) ... + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // enable (true) or disable (false) the mode of highlighting the channel for moving + // when creating a graphical object using ObjectCreate function, the object cannot be + // highlighted and moved by default. Inside this method, selection parameter + // is true by default making it possible to highlight and move the object ... + ObjectSetInteger(chartID, name, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID, name, OBJPROP_SELECTED, selection); + + // + // enable (true) or disable (false) the mode of continuation of the object's display to the right ... + ObjectSetInteger(chartID, name, OBJPROP_RAY_RIGHT, rayRight); + + // + // hide (true) or display (false) graphical object name in the object list ... + ObjectSetInteger(chartID, name, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, name, OBJPROP_ZORDER, zOrder); + + // + // Change Levels Of Fibonacci ... + bool result = FibonacciLevelsSet( + levels, + values, + colors, + styles, + widths, + descriptions, + chartID, + name + ); + + // + // successful execution ... + return result; +} + +// +// Set number of levels and their parameters ... +bool FibonacciLevelsSet( + int levels, // number of level lines + double &values[], // values of level lines + color &colors[], // color of level lines + ENUM_LINE_STYLE &styles[], // style of level lines + int &widths[], // width of level lines + string &descriptions[], // level Descriptions + const long chartID = 0, // chart's ID + const string name = "Fibonacci" // object name +) { + // + // check array sizes ... + if( + levels!=ArraySize(colors) || + levels!=ArraySize(styles) || + levels!=ArraySize(widths) || + levels!=ArraySize(widths) + ) { + // + string message = StringConcatenate( + __FUNCTION__, + ": array length does not correspond to the number of levels, error!" + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // set the number of levels ... + ObjectSetInteger(chartID, name, OBJPROP_LEVELS, levels); + + // + // set the properties of levels in the loop ... + for(int i = 0; i < levels; i++) { + // + // level value ... + ObjectSetDouble(chartID, name, OBJPROP_LEVELVALUE, i, values[i]); + + // + // level color ... + ObjectSetInteger(chartID, name, OBJPROP_LEVELCOLOR, i, colors[i]); + + // + // level style ... + ObjectSetInteger(chartID, name, OBJPROP_LEVELSTYLE, i, styles[i]); + + // + // level width ... + ObjectSetInteger(chartID, name, OBJPROP_LEVELWIDTH, i, widths[i]); + + // + // level description ... + // ObjectSetString(chartID, name, OBJPROP_LEVELTEXT, i, DoubleToString(100 * values[i], 1)); + ObjectSetString(chartID, name, OBJPROP_LEVELTEXT, i, descriptions[i]); + } + + // + // successful execution ... + return(true); +} + +// +// Move Fibonacci Retracement anchor point ... +bool FibonacciPointChange( + const long chartID = 0, // chart's ID + const string name = "Fibonacci", // object name + const int pointIndex = 0, // anchor point index + datetime time = 0, // anchor point time coordinate + double price = 0 // anchor point price coordinate +) { + // + // if point position is not set, move it to the current bar having Bid price ... + if (!time) { + time = TimeCurrent(); + } + + // + if (!price) { + price = SymbolInfoDouble(_Symbol, SYMBOL_BID); + } + + // + // reset the error value ... + ResetLastError(); + + // + // move the anchor point ... + if(!ObjectMove(chartID, name, pointIndex, time, price)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to move the anchor point! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Delete Fibonacci Retracement ... +bool DeleteFibonachi( + const long chartID = 0, // chart's ID + const string name = "Fibonacci" // object name +) { + // + // reset the error value ... + ResetLastError(); + + // + // delete the object ... + if(!ObjectDelete(chartID, name)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to delete \"Fibonacci Retracement\"! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Check the values of Fibonacci Retracement anchor points and set +// default values for empty ones ... +void ChangeFibonacciEmptyPoints( + datetime &time1, + double &price1, + datetime &time2, + double &price2 +) { + // + // if the second point's time is not set, it will be on the current bar ... + if (!time2) { + time2 = TimeCurrent(); + } + + // + // if the second point's price is not set, it will have Bid value ... + if (!price2) { + price2 = SymbolInfoDouble(_Symbol, SYMBOL_BID); + } + + // + // if the first point's time is not set, it is located 9 bars left from the second one ... + if (!time1) { + // + // array for receiving the open time of the last 10 bars ... + datetime temp[10]; + CopyTime(Symbol(),Period(),time2,10,temp); + + // + // set the first point 9 bars left from the second one ... + time1 = temp[0]; + } + + // + // if the first point's price is not set, move it 200 points below the second one ... + if (!price1) { + price1 = price2 - 200 * SymbolInfoDouble(_Symbol, SYMBOL_POINT); + } +} +// +// End Fibonacci Functions ... +// + + +// +// Start General Functions ... +// +// +// Remove all Drawn Objects ... +void RemoveDraws(const string &tag) { + // + for(int iObj=ObjectsTotal()-1; iObj >= 0; iObj--) { + // + string on = ObjectName(iObj); + if (StringFind(on, tag) == 0) { + ObjectDelete(on); + } + } +} +// +// End General Functions ... +// \ No newline at end of file diff --git a/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.indicator.lib.mq4 b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.indicator.lib.mq4 new file mode 100644 index 0000000..0e4b162 --- /dev/null +++ b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.indicator.lib.mq4 @@ -0,0 +1,450 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 Indicator Global Library +// --------------------------------------------------- +// saherelm useful tools and definitions ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Includes library ... +#include "../Libraries/x-saherelm.lib.mq4" + +// +// Includes Models library ... +#include "../Libraries/x-saherelm.models.lib.mq4" + +// +// START Global Requirement Functions ... +// +// +// Reading specified Buffer From ADX Indicator ... +double ReadXMABuffer( + const int bar_index, + const int buffer_index, + // + const int marketLen, + // + const double stp, + const double mxm, + // + const int shortCycleMult, + const int mediumCycleMult, + const int longCycleMult +) { + // + string xmaIndicatorName = "x-saherelm.x.xma"; + + // + double result = iCustom( + _Symbol, + _Period, + xmaIndicatorName, + // + // Inputs ... + marketLen, + stp, + mxm, + shortCycleMult, + mediumCycleMult, + longCycleMult, + MODE_SMA, + // + buffer_index, + bar_index + ); + + // + return result; +} + +// +// Reading specified Buffer from XHL Indicator ... +double ReadXHLBuffer( + const int bar_index, + const int buffer_index, + // + const int marketLen, + // + const int shortCycleMult, + const int mediumCycleMult, + const int longCycleMult +) { + // + string xhlIndicatorName = "x-saherelm.x.hl"; + + // + double result = iCustom( + _Symbol, + _Period, + xhlIndicatorName, + // + // Inputs ... + marketLen, + shortCycleMult, + mediumCycleMult, + longCycleMult, + MODE_SMA, + // + buffer_index, + bar_index + ); + + // + return result; +} + +// +// Reading ADX Values ... +double ReadADX( + const int bar_index, + const int marketLen, + const int mult +) { + // + double result; + + // + int period = marketLen * mult; + + // + result = iADX( + _Symbol, + _Period, + period, + PRICE_CLOSE, + MODE_MAIN, + bar_index + ); + + // + return result; +} + +// +// Reading Pivot States ... +XPvtState GetPVTState( + const int bar_index, + const int marketLen +) { + // + XPvtState result = {}; + + // + double hh = GetMarketHighestHigh( + bar_index, + marketLen + ); + + // + double ho = GetMarketHighestOpen( + bar_index, + marketLen + ); + + // + double hc = GetMarketHighestClose( + bar_index, + marketLen + ); + + // + double hl = GetMarketHighestLow( + bar_index, + marketLen + ); + + // + double ll = GetMarketLowestLow( + bar_index, + marketLen + ); + + // + double lo = GetMarketLowestOpen( + bar_index, + marketLen + ); + + // + double lc = GetMarketLowestClose( + bar_index, + marketLen + ); + + // + double lh = GetMarketLowestHigh( + bar_index, + marketLen + ); + + // + // Filling Result ... + // + result.hh = hh; + result.ho = ho; + result.hc = hc; + result.hl = hl; + + // + result.ll = ll; + result.lo = lo; + result.lc = lc; + result.lh = lh; + + // + return result; +} + +// +// Calculate XRange from Market ... +static XRState lastXRState; +XRState GetXRange( + const int bar_index, + const int rangeMarketLength +) { + // + XRState result = {}; + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + int marketBarIndex = bar_index + rangeMarketLength; + + // + // Highest High ... + // + int hhIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + marketBarIndex, + bar_index + ); + + // + double hh = iHigh( + _Symbol, + _Period, + hhIdx + ); + + // + // Lowest Low ... + // + int llIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + marketBarIndex, + bar_index + ); + + // + double ll = iLow( + _Symbol, + _Period, + llIdx + ); + + // + if (lastXRState.start == 0) { + // + lastXRState.start = barTime; + lastXRState.length = rangeMarketLength; + + // + lastXRState.hh = hh; + lastXRState.ll = ll; + + // + // Middle ... + double mid = (hh + ll) / 2; + lastXRState.mid = mid; + } else { + // + int startBarIndex = iBarShift( + _Symbol, + _Period, + lastXRState.start + ); + + // + if (startBarIndex - bar_index >= rangeMarketLength) { + // + lastXRState.start = barTime; + lastXRState.length = rangeMarketLength; + + // + lastXRState.hh = hh; + lastXRState.ll = ll; + + // + // Middle ... + double mid = (hh + ll) / 2; + lastXRState.mid = mid; + } + } + + // + result = lastXRState; + + // + return result; +} + +// +// Reading XTPowState from Indicatoe ... +XTPOWState GetXTPowState( + const int bar_index, + const int marketLen +) { + // + XTPOWState result = {}; + + // + // + double powerUp = 0; + double powerDown = 0; + double signal = 0; + + // + string indicatorName = "x-saherelm.xtpow"; + + // + int pUpIndex = 0; + int pDownIndex = 1; + int signalIndex = 2; + + // + powerUp = iCustom( + _Symbol, + _Period, + indicatorName, + // + marketLen, + // + pUpIndex, + bar_index + ); + + // + powerDown = iCustom( + _Symbol, + _Period, + indicatorName, + // + marketLen, + // + pDownIndex, + bar_index + ); + + // + signal = iCustom( + _Symbol, + _Period, + indicatorName, + // + marketLen, + // + signalIndex, + bar_index + ); + + // + result.signal = signal; + result.powerUp = powerUp; + result.powerDown = powerDown; + + // + return result; +} + +// +// Reading XRState From Indicator ... +XRState ReadXRange( + const int bar_index, + const int marketLen +) { + // + XRState result = {}; + + // + // Define Buffer Indexes ... + int hhBufferIndex = 0; + int llBufferIndex = 1; + int midBufferIndex = 2; + + // + string indicatorName = "x-saherelm.xrange"; + + // + // Read Values From XRange Indicator ... + + // + double hh = iCustom( + _Symbol, + _Period, + indicatorName, + // + // Inputs ... + marketLen, + // + hhBufferIndex, // Buffer Index ... + bar_index + ); + + // + double ll = iCustom( + _Symbol, + _Period, + indicatorName, + // + // Inputs ... + marketLen, + // + llBufferIndex, // Buffer Index ... + bar_index + ); + + // + double mid = iCustom( + _Symbol, + _Period, + indicatorName, + // + // Inputs ... + marketLen, + // + midBufferIndex, // Buffer Index ... + bar_index + ); + + // + // Filling Result ... + result.hh = hh; + result.ll = ll; + result.mid = mid; + + // + return result; +} +// +// END Indicator Reading Data ... +// diff --git a/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.lib.mq4 b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.lib.mq4 new file mode 100644 index 0000000..cc0e23e --- /dev/null +++ b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.lib.mq4 @@ -0,0 +1,1662 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 Global Library +// --------------------------------------------- +// saherelm useful tools and definitions ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Includes Logger library ... +#include "../Libraries/x-saherelm.log.lib.mq4" + +// +// Includes Drawing library ... +#include "../Libraries/x-saherelm.draw.lib.mq4" + +// +static datetime lastBarTime; + +// +struct XOHCL { + double high; + double open; + double close; + double low; +}; + +// +struct XRange { + // + datetime time; + + // + double highestHigh; + double lowestLow; + + // + int levels; + int marketLength; + + // + double rate; +}; + +// +struct XPrice { + // + double askPrice; + double bidPrice; + double priceGap; + + // + double longEntry; + double longExit; + + // + double shortEntry; + double shortExit; +}; + +// +// START Functions ... +// + +// +// Determines current working is New Bar or not ... +bool IsNewBar() { + // + // Reading Last Bar Date ... + datetime curbar = (datetime)SeriesInfoInteger( + _Symbol, + _Period, + SERIES_LASTBAR_DATE + ); + + // + if(lastBarTime != curbar) { + // + lastBarTime = curbar; + return true; + } + + // + return false; +} + +// +// Determines we are in new Day or not ... +bool IsNewDay() { + // + bool result = false; + + // + // Reading Last Bar Date ... + datetime curbar = (datetime)SeriesInfoInteger( + _Symbol, + _Period, + SERIES_LASTBAR_DATE + ); + + // + if (lastBarTime == 0) { + lastBarTime = curbar; + } + + // + if (curbar == lastBarTime) { + return result; + } + + // + // Retrieve Day and Month and Year for Last Bar Time ... + int lastBarDay = TimeDay(lastBarTime); + int lastBarMonth = TimeMonth(lastBarTime); + int lastBarYear = TimeYear(lastBarTime); + + // + // Retrieve Day and Month and Year for Current Bar Time ... + int curBarDay = TimeDay(curbar); + int curBarMonth = TimeMonth(curbar); + int curBarYear = TimeYear(curbar); + + // + result = curBarDay > lastBarDay + || curBarMonth > lastBarMonth + || curBarYear > lastBarYear; + + // + return result; +} + +// +// Retrieve Number of Candles in a Day ... +int GetDailyCandleCount() { + // + int seconds = PeriodSeconds(_Period); + + // + int daySeconds = 24 * 60 * 60; + + // + int result = daySeconds / seconds; + + // + return result; +} + +// +// XRange Detector ... +XRange GetMarketRange( + const int bar_index, + const int marketLen, + const int levels +) { + // + XRange result = {}; + + // + result.levels = levels; + result.marketLength = marketLen; + + // + datetime time = iTime( + _Symbol, + _Period, + bar_index + ); + result.time = time; + + // + double highestHigh = GetMarketHighestHigh( + bar_index, + marketLen + ); + result.highestHigh = highestHigh; + + // + double lowestLow = GetMarketLowestLow( + bar_index, + marketLen + ); + result.lowestLow = lowestLow; + + // + double diff = highestHigh - lowestLow; + double rate = diff / levels; + + // + result.rate = rate; + + // + return result; +} + +// +// Retrieve RMA on Specific Candle ... +double GetRMA( + int bar_index, + int length +) { + // + double shortSMA = iMA(_Symbol, _Period, length, 0, MODE_SMA, PRICE_CLOSE, bar_index); + double mediumSMA = iMA(_Symbol, _Period, length * 2, 0, MODE_SMA, PRICE_CLOSE, bar_index); + double longSMA = iMA(_Symbol, _Period, length * 3, 0, MODE_SMA, PRICE_CLOSE, bar_index); + + // + double result = longSMA - mediumSMA + shortSMA; + + // + return result; +} + +// +// Retrieve Moving Average ... +double GetMA( + const int bar_index, + const int maLength, + const int maShift, + const ENUM_MA_METHOD maMethod, + const ENUM_APPLIED_PRICE appliedPrice +) { + // + double result = iMA( + _Symbol, + _Period, + maLength, + maShift, + maMethod, + appliedPrice, + bar_index + ); + + // + return result; +} + +// +// Calculate Fib Level ... +double GetFibonacciLevel( + double upPrice, + double downPrice, + double level, + int direction +) { + // + double ling = upPrice - downPrice; + double pLevel = (ling / 100) * (level * 100); + + // + double result = direction > 0 ? + upPrice - pLevel : + downPrice + pLevel; + result = NormalizeDouble(result, _Digits); + + // + return result; +} + +// +// Retrieve True Range ... +double GetTR( + const int bar_index +) { + // + double result = 0; + + // + double high = iHigh( + _Symbol, + _Period, + bar_index + ); + + // + double low = iLow( + _Symbol, + _Period, + bar_index + ); + + // + double prevClose = iClose( + _Symbol, + _Period, + bar_index + 1 + ); + + // + double highLowDif = high - low; + double hpCDif = MathAbs(high - prevClose); + double lpCDiff = MathAbs(low - prevClose); + + // + result = MathMax(highLowDif, hpCDif); + result = MathMax(result, lpCDiff); + + // + return result; +} + +// +// Calculate True Range Simple Moving Average ... +double GetMarketTRSMA( + const int bar_index, + const int marketLen +) { + // + double result = 0; + + // + // Create Barket Length Trs ... + double trs[]; + ArrayResize( + trs, + marketLen + ); + int index = 0; + double trSum = 0; + for (int i = bar_index; i < bar_index + marketLen; i++) { + // + double tr = GetTR(i); + trs[index] = tr; + + // + trSum += tr; + + // + index++; + } + + // + result = trSum / marketLen; + + // + return result; +} + +// +// Retrieve Commodity Channel ... +double GetMarketCCI( + const int bar_index, + const int marketLen, + const ENUM_APPLIED_PRICE appliedPrice = PRICE_CLOSE +) { + // + double result = 0; + + // + result = iCCI( + _Symbol, + _Period, + marketLen, + appliedPrice, + bar_index + ); + + // + return result; +} + +// +// this function check crossing up two Buffers ... +bool IsCrossedOver( + double &arr1[], + double &arr2[], + int index1, + int index2 = -1 +) { + // + // Normalize Index 2 Value ... + if (index2 < 0) { + index2 = index1 + 1; + } + + // + bool result = (arr1[index1] > arr2[index1]) && !(arr1[index2] > arr2[index2]); + + // + return result; +} + +// +// this function check crossing down two Buffers ... +bool IsCrossedUnder( + double &arr1[], + double &arr2[], + int index1, + int index2 = -1 +) { + // + // Normalize Index 2 Value ... + if (index2 < 0) { + index2 = index1 + 1; + } + + // + bool result = (arr1[index1] < arr2[index1]) && !(arr1[index2] < arr2[index2]); + + // + return result; +} + +// +// Convert points to Actual Point ... +double PointsToDouble(int points) { + // + double result = points * _Point; + return result; +} + +// +// Converts Pips to Points ... +int PipsToPoints(int pips) { + // + int result = pips * ((_Digits == 3 || _Digits == 5) ? 10 : 1); + return result; +} + +// +// Converts Pips to Double ... +double PipsToDouble(int pips) { + // + double result = PointsToDouble(PipsToPoints(pips)); + return result; +} + +// +// Converts Double Value to Pips ... +int PriceToPips(double value) { + // + if (value <= 0) { + return 0; + } + + // + double pipValue = _Point * MathPow(10, _Digits); + int result = (int)(value / pipValue); + + // + return result; +} + +// +// Converts Pips to Double ... +double PipsToPrice(int pips) { + // + if (pips <= 0) { + return 0; + } + + // + double pipValue = _Point * MathPow(10, _Digits); + double result = pipValue * pips; + + // + return result; +} + +// +// Generate ATR StopLoss Value ... +double CalculateATRSL( + int period, + double multiplier +) { + // + if (period <= 0 || multiplier <= 0) { + return 0; + } + + // + double atrValue = iATR( + _Symbol, + _Period, + period, + 0 + ); + + // + double result = atrValue * multiplier; + + // + return result; +} + +// +// Detect Candle Type ... +// Bullish => means close > open ... +bool IsBullishCandle( + const int bar_index +) { + // + // Temp Result ... + bool result = false; + + // + if (bar_index < 0) { + return result; + } + + // + double open = iOpen( + _Symbol, + _Period, + bar_index + ); + + // + double close = iClose( + _Symbol, + _Period, + bar_index + ); + + // + result = IsBullishCandle( + open, + close + ); + + // + return result; +} + +bool IsBullishCandle( + const double open, + const double close +) { + // + // Temp Result ... + bool result = false; + + // + result = open < close; + + // + return result; +} + +// +// Detect Candle Type ... +// Bearish => means close < open ... +bool IsBearishCandle( + const int bar_index +) { + // + // Temp Result ... + bool result = false; + + // + if (bar_index < 0) { + return result; + } + + // + double open = iOpen( + _Symbol, + _Period, + bar_index + ); + + // + double close = iClose( + _Symbol, + _Period, + bar_index + ); + + // + result = IsBearishCandle( + open, + close + ); + + // + return result; +} + +bool IsBearishCandle( + const double open, + const double close +) { + // + // Temp Result ... + bool result = false; + + // + result = open > close; + + // + return result; +} + +// +// Retrieve a Candle Info ... +XOHCL GetCandleModel( + const int bar_index +) { + // + XOHCL result = {}; + + // + double high = iHigh( + _Symbol, + _Period, + bar_index + ); + result.high = high; + + // + double open = iOpen( + _Symbol, + _Period, + bar_index + ); + result.open = open; + + // + double close = iClose( + _Symbol, + _Period, + bar_index + ); + result.close = close; + + // + double low = iLow( + _Symbol, + _Period, + bar_index + ); + result.low = low; + + // + return result; +} + +// +// Retrieve Market Current Prices for Signals ... +XPrice GetPrice() { + // + XPrice result = {}; + + // + RefreshRates(); + + // + double askPrice = SymbolInfoDouble( + _Symbol, + SYMBOL_ASK + ); + + // + double bidPrice = SymbolInfoDouble( + _Symbol, + SYMBOL_BID + ); + + // + double priceGap = MathAbs(bidPrice - askPrice); + + // + result.askPrice = askPrice; + result.bidPrice = bidPrice; + result.priceGap = priceGap; + + // + result.longEntry = askPrice; + result.longExit = bidPrice; + + // + result.shortEntry = bidPrice; + result.shortExit = askPrice; + + // + return result; +} + +// +// Detect Market Has Sharp Bullish or not ... +bool IsSharpBullishDetected( + const int bar_index, // Bar Index ... + const int marketLen, // Market Length ... + // + const double shpDetectMultipliers // Sharp Detect Multiplier +) { + // + bool result = false; + + // + double open = iOpen( + _Symbol, + _Period, + bar_index + ); + + // + double close = iClose( + _Symbol, + _Period, + bar_index + ); + + // + double high = iHigh( + _Symbol, + _Period, + bar_index + ); + + // + double low = iLow( + _Symbol, + _Period, + bar_index + ); + + // + double minValue = 0; + double maxValue = 0; + int positionedLength = bar_index + marketLen; + + // + for (int i = bar_index; i < positionedLength; i++) { + // + double cHigh = iHigh( + _Symbol, + _Period, + i + ); + + // + double cLow = iLow( + _Symbol, + _Period, + i + ); + + // + minValue += MathMin(cLow, cHigh); + maxValue += MathMax(cLow, cHigh); + } + + // + double minAvg = minValue / positionedLength; + double maxAvg = maxValue / positionedLength; + + // + double shpValue = shpDetectMultipliers * _Point; + + // + result = (low - minAvg) > shpValue; + + // + int index = bar_index; + while ( + index < positionedLength + || !result + ) { + // + low = iLow( + _Symbol, + _Period, + index + ); + + // + result = result + || (low - minAvg) > shpValue; + + // + index++; + }; + + // + return result; +} + +// +// Detect Market Has Sharp Bullish or not ... +bool IsSharpBearishDetected( + const int bar_index, // Bar Index ... + const int marketLen, // Market Length ... + // + const double shpDetectMultipliers // Sharp Detect Multiplier +) { + // + bool result = false; + + // + double open = iOpen( + _Symbol, + _Period, + bar_index + ); + + // + double close = iClose( + _Symbol, + _Period, + bar_index + ); + + // + double high = iHigh( + _Symbol, + _Period, + bar_index + ); + + // + double low = iLow( + _Symbol, + _Period, + bar_index + ); + + // + double minValue = 0; + double maxValue = 0; + int positionedLength = bar_index + marketLen; + + // + for (int i = bar_index; i < positionedLength; i++) { + // + double cHigh = iHigh( + _Symbol, + _Period, + i + ); + + // + double cLow = iLow( + _Symbol, + _Period, + i + ); + + // + minValue += MathMin(cLow, cHigh); + maxValue += MathMax(cLow, cHigh); + } + + // + double minAvg = minValue / positionedLength; + double maxAvg = maxValue / positionedLength; + + // + double shpValue = shpDetectMultipliers * _Point; + + // + result = (high - maxAvg) > shpValue; + + // + int index = bar_index; + while ( + index < positionedLength + || !result + ) { + // + high = iHigh( + _Symbol, + _Period, + index + ); + + // + result = result + || (high - maxAvg) > shpValue; + + // + index++; + }; + + // + return result; +} + +// +// Retrieve Highest High Value based on Given Market ... +double GetMarketHighestHigh( + // + const int bar_index, // Bar Index ... + const int marketLen // Market Length ... +) { + // + // Empty Result ... + double result = 0.0; + + // + // Retrieve Desired Bar Index ... + int foundedBarIndex = iHighest( + _Symbol, + _Period, + MODE_HIGH, + marketLen, + bar_index + ); + + // + // Retrieve Price ... + result = iHigh( + _Symbol, + _Period, + foundedBarIndex + ); + + // + return result; +} + +// +// Retrieve Highest Low Value based on Given Market ... +double GetMarketHighestLow( + // + const int bar_index, // Bar Index ... + const int marketLen // Market Length ... +) { + // + // Empty Result ... + double result = 0.0; + + // + // Retrieve Desired Bar Index ... + int foundedBarIndex = iHighest( + _Symbol, + _Period, + MODE_LOW, + marketLen, + bar_index + ); + + // + // Retrieve Price ... + result = iLow( + _Symbol, + _Period, + foundedBarIndex + ); + + // + return result; +} + +// +// Retrieve Highest Open Value based on Given Market ... +double GetMarketHighestOpen( + // + const int bar_index, // Bar Index ... + const int marketLen // Market Length ... +) { + // + // Empty Result ... + double result = 0.0; + + // + // Retrieve Desired Bar Index ... + int foundedBarIndex = iHighest( + _Symbol, + _Period, + MODE_OPEN, + marketLen, + bar_index + ); + + // + // Retrieve Price ... + result = iOpen( + _Symbol, + _Period, + foundedBarIndex + ); + + // + return result; +} + +// +// Retrieve Highest Close Value based on Given Market ... +double GetMarketHighestClose( + // + const int bar_index, // Bar Index ... + const int marketLen // Market Length ... +) { + // + // Empty Result ... + double result = 0.0; + + // + // Retrieve Desired Bar Index ... + int foundedBarIndex = iHighest( + _Symbol, + _Period, + MODE_CLOSE, + marketLen, + bar_index + ); + + // + // Retrieve Price ... + result = iClose( + _Symbol, + _Period, + foundedBarIndex + ); + + // + return result; +} + +// +// Retrieve Lowest Low Value based on Given Market ... +double GetMarketLowestLow( + // + const int bar_index, // Bar Index ... + const int marketLen // Market Length ... +) { + // + // Empty Result ... + double result = 0.0; + + // + // Retrieve Desired Bar Index ... + int foundedBarIndex = iLowest( + _Symbol, + _Period, + MODE_LOW, + marketLen, + bar_index + ); + + // + // Retrieve Price ... + result = iLow( + _Symbol, + _Period, + foundedBarIndex + ); + + // + return result; +} + +// +// Retrieve Lowest High Value based on Given Market ... +double GetMarketLowestHigh( + // + const int bar_index, // Bar Index ... + const int marketLen // Market Length ... +) { + // + // Empty Result ... + double result = 0.0; + + // + // Retrieve Desired Bar Index ... + int foundedBarIndex = iLowest( + _Symbol, + _Period, + MODE_HIGH, + marketLen, + bar_index + ); + + // + // Retrieve Price ... + result = iHigh( + _Symbol, + _Period, + foundedBarIndex + ); + + // + return result; +} + +// +// Retrieve Lowest Open Value based on Given Market ... +double GetMarketLowestOpen( + // + const int bar_index, // Bar Index ... + const int marketLen // Market Length ... +) { + // + // Empty Result ... + double result = 0.0; + + // + // Retrieve Desired Bar Index ... + int foundedBarIndex = iLowest( + _Symbol, + _Period, + MODE_OPEN, + marketLen, + bar_index + ); + + // + // Retrieve Price ... + result = iOpen( + _Symbol, + _Period, + foundedBarIndex + ); + + // + return result; +} + +// +// Retrieve Lowest Close Value based on Given Market ... +double GetMarketLowestClose( + // + const int bar_index, // Bar Index ... + const int marketLen // Market Length ... +) { + // + // Empty Result ... + double result = 0.0; + + // + // Retrieve Desired Bar Index ... + int foundedBarIndex = iLowest( + _Symbol, + _Period, + MODE_CLOSE, + marketLen, + bar_index + ); + + // + // Retrieve Price ... + result = iClose( + _Symbol, + _Period, + foundedBarIndex + ); + + // + return result; +} + +// +// Find last Candle which it's Low Price is +// less than given price ... +double GetLowLessCandlePrice( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int index = bar_index + 1; + double result = iLow( + _Symbol, + _Period, + index + ); + + // + while (result >= price) { + // + index++; + + // + result = iLow( + _Symbol, + _Period, + index + ); + } + + // + return result; +} +int GetLowLessCandleIndex( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int result = bar_index + 1; + double cP = iLow( + _Symbol, + _Period, + result + ); + + // + while (cP >= price) { + // + result++; + + // + cP = iLow( + _Symbol, + _Period, + result + ); + } + + // + return result; +} + +// +// Find last Candle which it's Low Price is +// great than given price ... +double GetLowGreatCandlePrice( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int index = bar_index + 1; + double result = iLow( + _Symbol, + _Period, + index + ); + + // + while (result >= price) { + // + index++; + + // + result = iLow( + _Symbol, + _Period, + index + ); + } + + // + return result; +} +int GetLowGreatCandleIndex( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int result = bar_index + 1; + double cP = iLow( + _Symbol, + _Period, + result + ); + + // + while (cP >= price) { + // + result++; + + // + cP = iLow( + _Symbol, + _Period, + result + ); + } + + // + return result; +} + +// +// Find last Candle which it's High Price is +// less than given price ... +double GetHighLessCandlePrice( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int index = bar_index + 1; + double result = iHigh( + _Symbol, + _Period, + index + ); + + // + while (result >= price) { + // + index++; + + // + result = iLow( + _Symbol, + _Period, + index + ); + } + + // + return result; +} +int GetHighLessCandleIndex( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int result = bar_index + 1; + double cP = iHigh( + _Symbol, + _Period, + result + ); + + // + while (cP >= price) { + // + result++; + + // + cP = iLow( + _Symbol, + _Period, + result + ); + } + + // + return result; +} + +// +// Find last Candle which it's High Price is +// great than given price ... +double GetHighGreatCandlePrice( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int index = bar_index + 1; + double result = iHigh( + _Symbol, + _Period, + index + ); + + // + while (result <= price) { + // + index++; + + // + result = iLow( + _Symbol, + _Period, + index + ); + } + + // + return result; +} +int GetHighGreatCandleIndex( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int result = bar_index + 1; + double cP = iHigh( + _Symbol, + _Period, + result + ); + + // + while (cP <= price) { + // + result++; + + // + cP = iLow( + _Symbol, + _Period, + result + ); + } + + // + return result; +} + +// +// Find last Candle which it's Open Price is +// less than given price ... +double GetOpenLessCandlePrice( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int index = bar_index + 1; + double result = iOpen( + _Symbol, + _Period, + index + ); + + // + while (result >= price) { + // + index++; + + // + result = iLow( + _Symbol, + _Period, + index + ); + } + + // + return result; +} +int GetOpenLessCandleIndex( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int result = bar_index + 1; + double cP = iOpen( + _Symbol, + _Period, + result + ); + + // + while (cP >= price) { + // + result++; + + // + cP = iLow( + _Symbol, + _Period, + result + ); + } + + // + return result; +} + +// +// Find last Candle which it's Open Price is +// less than given price ... +double GetOpenGreatCandlePrice( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int index = bar_index + 1; + double result = iOpen( + _Symbol, + _Period, + index + ); + + // + while (result <= price) { + // + index++; + + // + result = iLow( + _Symbol, + _Period, + index + ); + } + + // + return result; +} +int GetOpenGreatCandleIndex( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int result = bar_index + 1; + double cP = iOpen( + _Symbol, + _Period, + result + ); + + // + while (cP <= price) { + // + result++; + + // + cP = iLow( + _Symbol, + _Period, + result + ); + } + + // + return result; +} + +// +// Find last Candle which it's Close Price is +// less than given price ... +double GetCloseLessCandlePrice( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int index = bar_index + 1; + double result = iClose( + _Symbol, + _Period, + index + ); + + // + while (result >= price) { + // + index++; + + // + result = iLow( + _Symbol, + _Period, + index + ); + } + + // + return result; +} +int GetCloseLessCandleIndex( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int result = bar_index + 1; + double cP = iClose( + _Symbol, + _Period, + result + ); + + // + while (cP >= price) { + // + result++; + + // + cP = iLow( + _Symbol, + _Period, + result + ); + } + + // + return result; +} + +// +// Find last Candle which it's Close Price is +// great than given price ... +double GetCloseGreatCandlePrice( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int index = bar_index + 1; + double result = iClose( + _Symbol, + _Period, + index + ); + + // + while (result <= price) { + // + index++; + + // + result = iLow( + _Symbol, + _Period, + index + ); + } + + // + return result; +} +int GetCloseGreatCandleIndex( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int result = bar_index + 1; + double cP = iClose( + _Symbol, + _Period, + result + ); + + // + while (cP <= price) { + // + result++; + + // + cP = iLow( + _Symbol, + _Period, + result + ); + } + + // + return result; +} + +// +// Get Slope of a Line by it's two Point ... +double GetSlope( + double x1, + double y1, + double x2, + double y2 +) { + // + double result = (y2 - y1)/MathAbs(x2 - x1); + return result; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.log.lib.mq4 b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.log.lib.mq4 new file mode 100644 index 0000000..066b3f7 --- /dev/null +++ b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.log.lib.mq4 @@ -0,0 +1,91 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 Draw Global Library +// --------------------------------------------- +// saherelm useful tools and definitions ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Log Tag ... +static string logTag = ""; + +// +// Enable or Disable Logging ... +static bool enableLogging = false; + +// +// Start Log Messages ... +// + +// +// Logging a Message, specified for this EA ... +// using provided LogTag ... +void LogMessage(string message) { + // + if (!enableLogging) { + return; + } + + // + Print(logTag, " > ", message); +} + +// +// this used for logging series ... +void LogSeries( + double &series[], // which series to Log ... + int length = 0, // number of items to Log, 0 means all ... + int skip = 0 // number of items which skip before logging ... +) { + // + string msg = ""; + + // + int seriesSize = ArraySize(series); + if ( + skip < 0 + || length < 0 + || seriesSize == 0 + || skip > seriesSize + || skip + length > seriesSize + ) { + return; + } + + // + length = length == 0 ? + seriesSize : + length; + int start = skip > 1 ? + skip - 1 : + skip == 1 ? + 1 : + 0; + + // + // Loop through series items ... + for (int i = start; i < start + length; i++) { + // + msg += StringConcatenate( + "i[", i, "]: ", series[i], ", " + ); + } + + // + LogMessage(msg); +} +// +// End Log Messages ... +// + diff --git a/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.models.lib.mq4 b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.models.lib.mq4 new file mode 100644 index 0000000..fa9903f --- /dev/null +++ b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.models.lib.mq4 @@ -0,0 +1,154 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 Models Global Library +// --------------------------------------------- +// saherelm useful tools and definitions ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// START STATIC Variables ... +// +// +static int totalSignals = 0; +static int totalLongSignals = 0; +static int totalShortSignals = 0; + +// +static double initialBalance = 0; + +// +static int countedBars = 0; +static bool isNewBar = false; +static bool isNewDay = false; +// +// END STATIC Variables ... +// + +// +// Start Models ... +// +// +// Signal Providers ... +enum ENUM_X_SIGNAL_PROVIDER { + X_UNKNOWN_PROVIDER, + X_XXX_PROVIDER, + X_XR_PROVIDER, + X_XTPW_PROVIDER +}; + +// +// these are different signal types ... +enum ENUM_X_SIGNAL_TYPE { + X_SIGNAL_NONE, + X_SIGNAL_LONG, + X_SIGNAL_SHORT, +}; + +// +// Model Market Highs and Lows ... +struct XPvtState { + // + double hh; + double ho; + double hc; + double hl; + + // + double ll; + double lo; + double lc; + double lh; +}; + +// +// we Model each signals as this type ... +struct XSignal { + // + // Signal Symbol ... + string symbol; + + // + // Signal Type ... + ENUM_X_SIGNAL_TYPE type; + + // + // Signal ID ... + int id; + + // + // Signal Ticket Number, when Opening Trade ... + int ticket; + + // + // Signal Provider ... + ENUM_X_SIGNAL_PROVIDER provider; + + // + // Target Point ... + double tp; + + // + // Stop Loss ... + double sl; + + // + // Signal Entry Price ... + double entry; + + // + // Signalling Time ... + datetime time; + + // + // Signal Comments ... + string comment; + + // + // Signal TAG ... + string tag; +}; + +// +// this is Signal Request Response model ... +struct XSignalRequest { + bool hasSignal; + XSignal signal; + ENUM_X_SIGNAL_TYPE type; + ENUM_X_SIGNAL_PROVIDER provider; +}; + +// +struct XRState { + // + datetime start; + int length; + + // + double hh; + double ll; + double mid; +}; + +// +struct XTPOWState { + // + double powerUp; + double powerDown; + + // + double signal; +}; +// +// End Models ... +// diff --git a/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.signal.lib.mq4 b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.signal.lib.mq4 new file mode 100644 index 0000000..097ce74 --- /dev/null +++ b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.signal.lib.mq4 @@ -0,0 +1,1756 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 Signal Draw Global Library +// --------------------------------------------------- +// saherelm useful tools and definitions ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Includes library ... +#include "../Libraries/x-saherelm.lib.mq4" + +// +// Includes Indicator library ... +#include "../Libraries/x-saherelm.indicator.lib.mq4" + +// +// Includes Models library ... +#include "../Libraries/x-saherelm.models.lib.mq4" + +// +// Includes Drawing library ... +#include "../Libraries/x-saherelm.draw.lib.mq4" + +// +#include "../Libraries/x-saherelm.x.signal.lib.mq4" +#include "../Libraries/x-saherelm.xr.signal.lib.mq4" +#include "../Libraries/x-saherelm.xtpw.signal.lib.mq4" + +// +// START Global Requirement Functions ... +// +// +// END Global Requirement Functions ... +// + +// +// START Signal Related Functions ... +// +// +// Retrieve Signal Bar Index ... +int GetSignalBarIndex(XSignal &signal) { + // + // Temp Result ... + int result = -1; + + // + // Retriev Signal Bar Index ... + result = iBarShift( + _Symbol, + _Period, + signal.time + ); + + // + return result; +} + +// +string GetSignalProviderIdentifier( + ENUM_X_SIGNAL_PROVIDER provider +) { + // + string result = ""; + + // + switch (provider) { + // + case X_XXX_PROVIDER: + result = "XXX"; + break; + + // + case X_XR_PROVIDER: + result = "XR"; + break; + + // + case X_XTPW_PROVIDER: + result = "XTPW"; + break; + + // + default: + result = ""; + break; + } + + // + return result; +} + +// +ENUM_X_SIGNAL_PROVIDER GetSignalProvider(string identifier) { + // + ENUM_X_SIGNAL_PROVIDER result = X_UNKNOWN_PROVIDER; + + // + if ( + StringFind( + identifier, + GetSignalProviderIdentifier(X_XXX_PROVIDER) + ) > -1 + ) { + result = X_XXX_PROVIDER; + } else if ( + StringFind( + identifier, + GetSignalProviderIdentifier(X_XR_PROVIDER) + ) > -1 + ) { + result = X_XR_PROVIDER; + } else if ( + StringFind( + identifier, + GetSignalProviderIdentifier(X_XTPW_PROVIDER) + ) > -1 + ) { + result = X_XTPW_PROVIDER; + } + + // + return result; +} + +// +// Retrieve Signal Lots Per Trade ... +double GetSignalLottage( + const XSignal &signal, + const double defLotsPerTrade +) { + // + double result = defLotsPerTrade; + + // + bool isLong = signal.type == X_SIGNAL_LONG; + + // + switch (signal.provider) { + // + case X_XR_PROVIDER: + // + result = isLong ? + xRLongLotsPerTradePercent : + xRShortLotsPerTradePercent + ; + break; + + // + case X_XXX_PROVIDER: + // + result = isLong ? + xLongLotsPerTradePercent : + xShortLotsPerTradePercent + ; + break; + + // + case X_XTPW_PROVIDER: + // + result = isLong ? + xTPWLongLotsPerTradePercent : + xTPWShortLotsPerTradePercent + ; + break; + } + + // + return result; +} + +// +// Draw Specific Range On Chart ... +void DrawRange( + const XRange &range, + const long chartID = 0, + const int subWindowID = 0, + const string tag = "", + const color clr = clrYellow +) { + // + // Loop through Levels Count ... + for (int i = 0; i <= range.levels; i++) { + // + datetime time1 = iTime( + _Symbol, + _Period, + 1 + ); + + // + datetime time2 = iTime( + _Symbol, + _Period, + 0 + ); + + // + double price = range.lowestLow + (i * range.rate); + + // + string lbl = StringConcatenate( + tag, + "_XRL_", + price + ); + + // + DrawTrendLine( + chartID, + lbl, + subWindowID, + time1, + price, + time2, + price, + clr, + STYLE_DOT + ); + } +} + +// +// Draw Signal Shapes on Chart ... +bool DrawSignal( + const XSignal &signal, + long chartID = 0, + int subWindowID = 0, + const double positionThresholdFactor = 10, + string longSignalLabel = "X-Long", + color longSignalColor = clrAqua, + string shortSignalLabel = "X-Short", + color shortSignalColor = clrFuchsia +) { + // + // Generate isLongSignal Var ... + bool isLongSignal = signal.type == X_SIGNAL_LONG; + + // + // Signal Bar Index ... + int bar_index = iBarShift( + _Symbol, + _Period, + signal.time + ); + + // + // START Draw Signal Arrow ... + // + // + // Arrow Shape Name ... + string arrowName = StringConcatenate(signal.tag, "_Arrow_", signal.id); + + // + // Arrow Price ... + double arrowPrice = 0; + if (isLongSignal) { + // + arrowPrice = iLow( + _Symbol, + _Period, + bar_index + 1 + ); + + // + arrowPrice = arrowPrice - (positionThresholdFactor * _Point); + } else { + // + arrowPrice = iHigh( + _Symbol, + _Period, + bar_index + 1 + ); + + // + arrowPrice = arrowPrice + (positionThresholdFactor * _Point); + } + + // + // Arrow Code ... + uchar arrowCode = isLongSignal ? SYMBOL_ARROWUP : SYMBOL_ARROWDOWN; + + // + // Arrow Anchor Point ... + ENUM_ARROW_ANCHOR arrowAnchorPoint = isLongSignal ? ANCHOR_BOTTOM : ANCHOR_TOP; + + // + // Arrow Color ... + color arrowColor = isLongSignal ? longSignalColor : shortSignalColor; + + // + // Draw Signal Arrow Shape ... + bool result = DrawArrow( + chartID, + arrowName, + subWindowID, + signal.time, + arrowPrice, + arrowCode, + arrowAnchorPoint, + arrowColor + ); + // + // END Draw Signal Arrow ... + // + + // + // START Draw Signal SL/TP ... + // + string slLineName = StringConcatenate(signal.tag, "_SL_", signal.id); + string tpLineName = StringConcatenate(signal.tag, "_TP_", signal.id); + string entryLineName = StringConcatenate(signal.tag, "_ENTRY_", signal.id); + + // + color slColor = shortSignalColor; // isLongSignal ? shortSignalColor : longSignalColor; + color tpColor = longSignalColor; // isLongSignal ? shortSignalColor : longSignalColor; + color entryColor = clrGreen; + + // + datetime time1 = iTime( + _Symbol, + _Period, + bar_index + 1 + ); + + // + // Draw Enrty Price ... + result = DrawTrendLine( + chartID, + entryLineName, + subWindowID, + time1, + signal.entry, + signal.time, + signal.entry, + entryColor, + STYLE_SOLID, + 2 + ); + + // + // Draw Signal SL ... + if (signal.sl > 0) { + // + result = DrawTrendLine( + chartID, + slLineName, + subWindowID, + time1, + signal.sl, + signal.time, + signal.sl, + slColor, + STYLE_SOLID, + 2 + ); + } + + // + // Draw Signal TP ... + if (signal.tp > 0) { + // + result = DrawTrendLine( + chartID, + tpLineName, + subWindowID, + time1, + signal.tp, + signal.time, + signal.tp, + tpColor, + STYLE_SOLID, + 2 + ); + } + // + // END Draw Signal SL/TP ... + // + + // + // Start Draw Signal Label ... + // + // + string labelName = StringConcatenate(signal.tag, "_Label_", signal.id); + + // + double labelPrice = isLongSignal ? arrowPrice - (positionThresholdFactor * _Point) : arrowPrice + (positionThresholdFactor * _Point); + + // + string labelText = isLongSignal ? longSignalLabel : shortSignalLabel; + labelText = StringConcatenate( + labelText, + "_", + GetSignalProviderIdentifier(signal.provider) + ); + + // + result = DrawText( + chartID, + labelName, + subWindowID, + signal.time, + labelPrice, + labelText, + "Arial", + 8, + arrowColor, + 0, + ANCHOR_CENTER + ); + // + // End Draw Signal Label ... + // + + // + return result; +} + +// +// Trade on Specific Signal ... +bool TradeSignal( + XSignal &signal, + // + double volumePercent, + // + // Long ... + const string longSignalLabel, + const color longSignalColor, + // + // Short ... + const string shortSignalLabel, + const color shortSignalColor +) { + // + // Temp Result ... + bool result = false; + + // + if (initialBalance == 0) { + initialBalance = AccountInfoDouble(ACCOUNT_BALANCE); + } + + // + double balance = AccountInfoDouble(ACCOUNT_BALANCE); + int openPositions = CountOpenTrades(); + double volume = (volumePercent * initialBalance); + + // + if ( + signal.type != X_SIGNAL_LONG && + signal.type != X_SIGNAL_SHORT + ) { + return result; + } + + // + bool hasLongSignal = signal.type == X_SIGNAL_LONG; + + // + // Check TP and Entry Price ... + if ( + ( + hasLongSignal + && signal.entry > signal.tp + ) || + ( + !hasLongSignal + && signal.entry < signal.tp + ) + ) { + return result; + } + + // + // Order Operation ... + int operation = hasLongSignal ? + OP_BUY : + OP_SELL; + + // + // Detect Trade Color ... + color clr = hasLongSignal ? + longSignalColor : + shortSignalColor; + + // + // Generate Signal Comment ... + string label = hasLongSignal ? + longSignalLabel : + shortSignalLabel; + + // + // Generate Signal Comment ... + string comment = StringConcatenate( + signal.tag, + "_", signal.id, + "_", GetSignalProviderIdentifier(signal.provider), + "_", label + ); + + // + // Placing Order ... + int orderTicket = OrderSend( + _Symbol, + operation, + volume, + signal.entry, + 3, + signal.sl, + signal.tp, + comment, + signal.id, + 0, + clr + ); + + // + // Draw Signal Shape if Order Opened Successfully ... + if (orderTicket >= 0) { + // + signal.ticket = orderTicket; + + // + // Here i must to Draw Signal Shapes ... + bool isDrawn = DrawSignal( + signal, + 0, + 0, + 50, + longSignalLabel, // Long Signal Label ... + longSignalColor, + shortSignalLabel, // Short Signal Label ... + shortSignalColor + ); + + // + LogMessage( + StringConcatenate( + "Order [", orderTicket ,"]: Provided by: ", GetSignalProviderIdentifier(signal.provider) + ) + ); + + // + // TODO: here we have to check if there are another + // open positions which their entry price is bigger + // than current signal entry price, for long trades and + // their tp is high than current tp, ... + // close in profit trades or modify orders tp to current ... + // // + // if (CountOpenTrades() > 0) { + // // + // // Here we have to + // ModifyOpenTradesBasedOnCurrentTrade(signal); + // } + + // + result = true; + } + + // + return result; +} +// +// END Signal Related Functions ... +// + +// +// START Orders Functions ... +// +// +// Convert To XSignal Model ... +XSignal OrderToSignal() { + // + // Temp Result ... + XSignal result = {}; + result.type = X_SIGNAL_NONE; + + // + // Here we can get some usefull info based on selected order ... + double swap = OrderSwap(); + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + double stopLoss = OrderStopLoss(); + double openPrice = OrderOpenPrice(); + datetime openTime = OrderOpenTime(); + int magicNumber = OrderMagicNumber(); + double takeProfit = OrderTakeProfit(); + string comment = OrderComment(); + + // + ENUM_X_SIGNAL_PROVIDER provider = GetSignalProvider(comment); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // Conver Position to Signal ... + result.sl = stopLoss; + result.tp = takeProfit; + result.time = openTime; + result.symbol = _Symbol; + result.id = magicNumber; + result.comment = comment; + result.entry = openPrice; + result.provider = provider; + result.type = isLongOrder ? X_SIGNAL_LONG : X_SIGNAL_SHORT; + + // + return result; +} + +// +// START Count Orders ... +// +// +// Count Open Positions ... +int CountOpenTrades() { + // + int result = 0; + + // + // Loop through Orders ... + for (int i = 0; i < OrdersTotal(); i++) { + // + // Select indexed Order ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order ... + if (OrderSymbol() == _Symbol) { + result++; + } + } + } + + // + // Return Result ... + return result; +} + +// +// Count Open Long Positions ... +int CountOpenLongTrades() { + // + int result = 0; + + // + // Loop through Orders ... + for (int i = 0; i < OrdersTotal(); i++) { + // + // Select indexed Order ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order ... + if ( + OrderSymbol() == _Symbol + && OrderType() == OP_BUY + ) { + result++; + } + } + } + + // + // Return Result ... + return result; +} + +// +// Count Open Short Positions ... +int CountOpenShortTrades() { + // + int result = 0; + + // + // Loop through Orders ... + for (int i = 0; i < OrdersTotal(); i++) { + // + // Select indexed Order ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order ... + if ( + OrderSymbol() == _Symbol + && OrderType() == OP_SELL + ) { + result++; + } + } + } + + // + // Return Result ... + return result; +} +// +// END Count Orders ... +// + +// +// START Close Orders ... +// +// +// Close All Open Trades ... +bool CloseAllTrades() { + // + // Loop through all Positions ... + bool result = false; + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of All Trade Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + + // + return result; +} + +// +bool CloseAllProviderTrades( + ENUM_X_SIGNAL_PROVIDER provider +) { + // + bool result = false; + + // + // Loop through Signals ... + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + XSignal signal = OrderToSignal(); + + // + if (signal.provider == provider) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of All Provider Long Trades Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +bool CloseAllProviderLongTrades( + ENUM_X_SIGNAL_PROVIDER provider +) { + // + bool result = false; + + // + // Loop through Signals ... + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + XSignal signal = OrderToSignal(); + + // + if ( + signal.provider == provider + && signal.type == X_SIGNAL_LONG + ) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of All Provider Long Trades Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +bool CloseAllProviderShortTrades( + ENUM_X_SIGNAL_PROVIDER provider +) { + // + bool result = false; + + // + // Loop through Signals ... + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + XSignal signal = OrderToSignal(); + + // + if ( + signal.provider == provider + && signal.type == X_SIGNAL_SHORT + ) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of All Provider Long Trades Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +// Close All Open Long Trades ... +bool CloseAllLongTrades() { + // + // Loop through all Positions ... + bool result = false; + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + if (isLongOrder) { + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of All Long Trade Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +// Close All Open Short Trades ... +bool CloseAllShortTrades() { + // + // Loop through all Positions ... + bool result = false; + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + if (!isLongOrder) { + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of All Short Trade Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +// Close All In Profit Trades ... +bool CloseAllInProfitTrades() { + // + // Loop through all Positions ... + bool result = false; + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + if ( + profit > 0 + && profit > 50 * _Point + ) { + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of InProfit Trade Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +// Close All In DrawDown Trades ... +bool CloseAllInDrawDownTrades() { + // + // Loop through all Positions ... + bool result = false; + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + if (profit < 0) { + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of InDrawDown Trade Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +// Close Biggest In DrawDown Trades ... +bool CloseBiggestDrawDownTrade() { + // + // Loop through all Positions ... + bool result = false; + double drawDown = 0; + + // + // Find Biggest In DrawDown ... + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + if ( + profit < 0 + && MathAbs(profit) > drawDown + ) { + drawDown = profit; + } + } + } + } + + // + // Close Biggest In DrawDown ... + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + if ( + profit < 0 + && MathAbs(profit) >= drawDown + ) { + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of Max InDrawDown Trade Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +// Close All Long Time Trades ... +bool CloseAllLongTimeTrades( + const int passedCandles, + const ENUM_X_SIGNAL_PROVIDER provider = X_UNKNOWN_PROVIDER +) { + // + bool result = false; + + // + if (passedCandles <= 0) { + return result; + } + + // + int currentBarIndex = iBarShift( + _Symbol, + _Period, + TimeCurrent() + ); + + // + int openTrades = CountOpenTrades(); + + // + // Loop through all Positions ... + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + datetime openTime = OrderOpenTime(); + int openBarIndex = iBarShift( + _Symbol, + _Period, + openTime + ); + string comment = OrderComment(); + + // + ENUM_X_SIGNAL_PROVIDER orderProvider = GetSignalProvider(comment); + bool isProviderVerified = + provider == X_UNKNOWN_PROVIDER ? + true : + orderProvider != X_UNKNOWN_PROVIDER + && orderProvider == provider + ; + + // + if ( + profit < 0 + && isProviderVerified + && openBarIndex - currentBarIndex >= passedCandles + // || ( + // profit > 0.5 + // && openBarIndex - currentBarIndex >= passedCandles - (passedCandles / 3) + // ) + ) { + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of Long Time issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + // else if ( + // openTrades > 0 + // && openBarIndex - currentBarIndex >= passedCandles - (passedCandles / 2) + // ) { + // result = CloseAllInProfitTrades() + // && CloseBiggestDrawDownTrade(); + // } + } + } + } + + // + return result; +} + +// +// Close all trades which passed Maximum Drawdown ... +bool CloseAllMaximumDrawDownPassedTrades( + const double maxDrDownPercentPerPTrade, + const ENUM_X_SIGNAL_TYPE type = X_SIGNAL_NONE, + const ENUM_X_SIGNAL_PROVIDER provider = X_UNKNOWN_PROVIDER +) { + // + if ( + initialBalance <= 0 + || maxDrDownPercentPerPTrade <= 0 + ) { + return false; + } + + // + // Retrieve Account Balance ... + double balance = AccountInfoDouble(ACCOUNT_BALANCE); + double maxAllowedDrawDown = -1 * (initialBalance * maxDrDownPercentPerPTrade); + + // + // Loop through all Positions ... + bool result = false; + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + string comment = OrderComment(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + bool isTypeVerified = + type == X_SIGNAL_NONE ? + true : + ( isLongOrder + && type == X_SIGNAL_LONG + ) || ( + !isLongOrder + && type == X_SIGNAL_SHORT + ) + ; + + // + ENUM_X_SIGNAL_PROVIDER orderProvider = GetSignalProvider(comment); + bool isProviderVerified = + provider == X_UNKNOWN_PROVIDER ? + true : + orderProvider != X_UNKNOWN_PROVIDER + && orderProvider == provider + ; + + // + if ( + profit < 0 + && isTypeVerified + && isProviderVerified + && MathAbs(profit) >= MathAbs(maxAllowedDrawDown) + ) { + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of Maximum DarwDown issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +// Close All Trades Which Opens before Specified Length ... +bool CloseAllTradesWhichOpenInPastMarketLength( + const int marketLen +) { + // + bool result = false; + + // + if (marketLen <= 0) { + return result; + } + + // + int currentBarIndex = iBarShift( + _Symbol, + _Period, + TimeCurrent() + ); + + // + int openTrades = CountOpenTrades(); + + // + // Loop through all Positions ... + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + datetime openTime = OrderOpenTime(); + int openBarIndex = iBarShift( + _Symbol, + _Period, + openTime + ); + + // + if (openBarIndex <= currentBarIndex + marketLen) { + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of Market Reverse issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } else if (openTrades > 0) { + // + // Close all InProfit Trdes and Biggest InDrawDown Trades ... + // result = CloseAllInProfitTrades(); + // && CloseBiggestDrawDownTrade(); + } + } + } + } + + // + return result; +} +// +// END Close Orders ... +// + +// +// START Modify Orders ... +// +// +void ModifyAllPriceLesserOpenTrades( + const XSignal &signal +) { + // + // Loop through all Open Trades ... + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + double stopLoss = OrderStopLoss(); + double openPrice = OrderOpenPrice(); + datetime openTime = OrderOpenTime(); + double takeProfit = OrderTakeProfit(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // When new Signal Comming with price less than + // currently open trade and tp less than currently + // open trade, this means a market change happens ... + // here we can Close InProfit Trades or Modify Trades TP ... + if ( + ( + openPrice < signal.entry + || MathAbs(openPrice - signal.entry) < 300 * _Point + ) + && takeProfit > signal.tp + ) { + bool result = OrderModify( + ticket, + openPrice, + signal.sl, + signal.tp, + clrYellow + ); + } + } + } + } +} + +// +void ModifyOpenTradesBasedOnCurrentTrade( + const XSignal &signal +) { + // + ModifyAllPriceLesserOpenTrades(signal); +} +// +// END Modify Orders ... +// +// +// END Orders Functions ... +// + +// +// START Signal Conditions ... +// +// +// Clear Signal Conditions ... +void ClearSignalConditions() { + // + ClearLongSignalConditions(); + ClearShortSignalConditions(); +} + +// +// Clear all Conditions Waiter for Long Signals ... +void ClearLongSignalConditions() { + // + ClearXLongSignalConditions(); + ClearXRLongSignalConditions(); + ClearXTPWLongSignalConditions(); +} + +// +// Clear all Conditions Waiter for Short Signals ... +void ClearShortSignalConditions() { + // + ClearXShortSignalConditions(); + ClearXRShortSignalConditions(); + ClearXTPWShortSignalConditions(); +} +// +// END Signal Conditions ... +// diff --git a/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.x.signal.lib.mq4 b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.x.signal.lib.mq4 new file mode 100644 index 0000000..834ddb1 --- /dev/null +++ b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.x.signal.lib.mq4 @@ -0,0 +1,1063 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 X Signal Global Library +// --------------------------------------------------- +// saherelm useful tools and definitions ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Includes library ... +#include "../Libraries/x-saherelm.lib.mq4" + +// +// Includes Indicator library ... +#include "../Libraries/x-saherelm.indicator.lib.mq4" + +// +// Includes Models library ... +#include "../Libraries/x-saherelm.models.lib.mq4" + +// +// START Inputs ... +// +// +input string xStarter = "- X Signal Provider -"; // ---> X Signal Provider <--- + +// +input bool enableXSignalling = true; // X Signalling Enable + +// +input bool enableXLong = true; // X Signalling Enable Long +input bool enableXShort = true; // X Signalling Enable Short + +// +input double xShortR2R = 3; // X Short Risk To Reward Ratio +input double xShortLotsPerTradePercent = 0.0002; // X Lots Percent per Short Trades +input double xShortMaxDrawdownPerTradePercent = 0.4; // X Max Allowed DrawDown Percent per Short Trade + +// +input double xLongR2R = 3; // X Long Risk To Reward Ratio +input double xLongLotsPerTradePercent = 0.0002; // X Lots Percent per Short Trades +input double xLongMaxDrawdownPerTradePercent = 0.4; // X Max Allowed DrawDown Percent per Long Trade + +// +input double xSharpDetectorFactor = 700; // X Sharp Detection Factor + +// +input int xMaximumCandlesPerTrade = 206; // X Maximum Candles which a Trade can open + +// +input int xOscillatorLength = 7; // X Oscillator Length + +// +input double xPSarStep = 0.02; // X Parabolic Sar Step +input double xPSarMaximum = 0.2; // X Parabolic Sar Maximum + +// +input int xRangeMarketLength = 5; // X Range Detector Length + +// +input int xSwingLength = 7; // X Signal Swing Length +// +// END Inputs ... +// + +// +// START Global Requirement Functions ... +// +// +// X Based Signal Conditions ... +struct XSignalConditions { + datetime startTime; + datetime signalTime; + datetime entryTime; +}; + +// +struct XMarketState { + double psar; + double fast; + double slow; + double open; + double verifier; + double oscillator; + double oscillatorVerifier; +}; + +// +static XSignalConditions xLongConds; +static bool xCloseLongTrades = false; +static bool xWaitForLongSignals = true; + +// +static XSignalConditions xShortConds; +static bool xCloseShortTrades = false; +static bool xWaitForShortSignals = true; + +// +// Count Number of Closed Maximum DrawDown Trades ... +static int xFailedSignals = 0; + +// +datetime lastVerifierTouched; +// +// END Global Requirement Functions ... +// + +// +// START Functions ... +// +// +// Check and Fill Long and Short Signal Handlers ... +void CheckXSignalHandler( + const int bar_index +) { + // + // Check Market For Enable/Disable Signal Handlers ... + // Checking Market for Long Signals ... + // + if ( + !enableXSignalling + || !(enableXLong || enableXShort) + ) { + return; + } + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + XOHCL candle = GetCandleModel(bar_index); + XOHCL pCandle = GetCandleModel(bar_index + 1); + XTPOWState tPowState = GetXTPowState( + bar_index + 1, + xSwingLength + ); + + // + XMarketState state = GetXMarketState( + bar_index + 1 + ); + + // + // Check Verifier Last Touched ... + bool isVerifierTouched = pCandle.high > state.verifier + && pCandle.low < state.verifier; + + // + // Disable Signals if a signal Failed ... + if (xFailedSignals) { + // + // TODO: Complete this ... + } + + // + // Enable Or Disable Signalling ... + if (isVerifierTouched) { + // + lastVerifierTouched = barTime; + + // + if (xWaitForLongSignals) { + xWaitForLongSignals = false; + } + + // + if (xWaitForShortSignals) { + xWaitForShortSignals = false; + } + } else { + // + int lastVerifierTouchedBarIndex = iBarShift( + _Symbol, + _Period, + lastVerifierTouched + ); + + // + int distance = MathAbs(lastVerifierTouchedBarIndex - bar_index); + + // + if ( + !xWaitForLongSignals + && distance > (xSwingLength * 2) + ) { + xWaitForLongSignals = true; + } + + // + if ( + !xWaitForShortSignals + && ( + distance > (xSwingLength * 2) + || ( + tPowState.powerDown > tPowState.powerUp + && tPowState.powerDown < 49 + ) + ) + ) { + xWaitForShortSignals = true; + } + } + + // + // Close All Long Open Trades ... + if ( + tPowState.powerDown > 55 + && tPowState.powerDown > tPowState.powerUp + ) { + // xCloseLongTrades = true; + } +} + +// +// Check and Fill Long Signal Conditions ... +void CheckXLongSignalConditions( + const int bar_index +) { + // + if ( + !enableXLong + || !enableXSignalling + || !xWaitForLongSignals + ) { + return; + } + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + bool isCrossOver = false; + bool isCrossUnder = false; + + // + XMarketState cState = GetXMarketState(1); + XMarketState pState = GetXMarketState(2); + + // + isCrossUnder = + cState.fast < cState.slow + && !(pState.fast < pState.slow) + ; + + // + isCrossOver = + cState.fast > cState.slow + && !(pState.fast > pState.slow) + ; + + // + if ( + isCrossUnder + && xLongConds.startTime == 0 + ) { + // + xLongConds.startTime = barTime; + return; + } + + // + if ( + isCrossOver + && xLongConds.startTime > 0 + && xLongConds.signalTime == 0 + ) { + // + xLongConds.signalTime = barTime; + xLongConds.entryTime = barTime; + return; + } +} + +// +// Check and Fill Short Signal Conditions ... +void CheckXShortSignalConditions( + const int bar_index +) { + // + if ( + !enableXShort + || !enableXSignalling + || !xWaitForShortSignals + ) { + return; + } + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + bool isCrossOver = false; + bool isCrossUnder = false; + + // + XMarketState cState = GetXMarketState(1); + XMarketState pState = GetXMarketState(2); + + // + isCrossUnder = + cState.fast < cState.slow + && !(pState.fast < pState.slow) + ; + + // + isCrossOver = + cState.fast > cState.slow + && !(pState.fast > pState.slow) + ; + + // + if ( + isCrossOver + && xShortConds.startTime == 0 + ) { + // + xShortConds.startTime = barTime; + return; + } + + // + if ( + isCrossUnder + && xShortConds.startTime > 0 + && xShortConds.signalTime == 0 + ) { + // + xShortConds.signalTime = barTime; + xShortConds.entryTime = barTime; + return; + } +} + +// +// Convert Long Signal Conditions to XSignal ... +XSignalRequest GenerateXSignal( + const ENUM_X_SIGNAL_TYPE type, // Signal Type ... + const string signalTag , // Signal Tag ... + const int bar_index +) { + // + XSignalRequest result = {}; + + // + result.hasSignal = false; + result.type = X_SIGNAL_NONE; + result.provider = X_UNKNOWN_PROVIDER; + + // + if ( + !enableXSignalling + || !(enableXLong || enableXShort) + ) { + return result; + } + + // + bool requestLong = type == X_SIGNAL_LONG; + + // + if (requestLong) { + // + if ( + !ValidateXLongConditions() + ) { + return result; + } + } else { + // + if ( + !ValidateXShortConditions() + ) { + return result; + } + } + + // + // Price Calculations ... + // + RefreshRates(); + + // + double askPrice = SymbolInfoDouble( + _Symbol, + SYMBOL_ASK + ); + + // + double bidPrice = SymbolInfoDouble( + _Symbol, + SYMBOL_BID + ); + + // + double entryPrice = requestLong ? + askPrice : + bidPrice; + + // + double exitPrice = requestLong ? + bidPrice : + askPrice; + + // + double priceGap = MathAbs(entryPrice - exitPrice); + + // + double ll = + // + GetMarketLowestLow( + bar_index, + xSwingLength + ) + ; + + // + double hh = + // + GetMarketHighestHigh( + bar_index, + xSwingLength + ) + ; + + // + double openPrice = iOpen( + _Symbol, + _Period, + bar_index + ); + + // + double closePrice = iClose( + _Symbol, + _Period, + bar_index + ); + + // + double risk = requestLong ? + MathMin(openPrice, closePrice) - ll : + hh - MathMax(openPrice, closePrice) + ; + + // + double reward = + requestLong ? + risk * xLongR2R : + risk * xShortR2R + ; + + // + double sl = requestLong ? + 0 : + 0; + double tp = requestLong ? + entryPrice + reward : + entryPrice - reward + ; + + // + XRState range = GetXRange( + bar_index, + xRangeMarketLength + ); + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + result.signal.tp = tp; + result.signal.sl = sl; + result.signal.type = type; + result.signal.time = barTime; + result.signal.tag = signalTag; + result.signal.symbol = _Symbol; + result.signal.entry = entryPrice; + result.signal.id = totalSignals + 1; + result.signal.provider = X_XXX_PROVIDER; + + // + result.hasSignal = true; + result.type = type; + result.provider = X_XXX_PROVIDER; + + // + return result; +} + +// +// Validate Signal Conditions ... +bool ValidateXLongConditions() { + // + if ( + !enableXLong + || !enableXSignalling + ) { + return false; + } + + // + bool isConditionsFilled = + xLongConds.startTime > 0 + && xLongConds.signalTime > 0 + && xLongConds.entryTime > 0 + ; + + // + bool isBLFilled = false; + if (isConditionsFilled) { + // + int startBarIndex = iBarShift( + _Symbol, + _Period, + xLongConds.startTime + ); + + // + int signalBarIndex = iBarShift( + _Symbol, + _Period, + xLongConds.signalTime + ); + + // + int entryBarIndex = iBarShift( + _Symbol, + _Period, + xLongConds.entryTime + ); + + // + isBLFilled = + // + xLongConds.signalTime > xLongConds.startTime + && xLongConds.entryTime >= xLongConds.signalTime + // && MathAbs(signalBarIndex - startBarIndex) >= 1 + ; + } + + // + bool result = + isBLFilled + && isConditionsFilled + && xWaitForLongSignals + ; + + // + // Since maybe Conditions Filled but + // Slope is Negative, for Handling Next Signals and + // Prevent from infinity loop, here we Clear Signal Conditions ... + if ( + !result + && isConditionsFilled + ) { + ClearXLongSignalConditions(); + } + + // + return result; +} + +// +// Validate Signal Conditions ... +bool ValidateXShortConditions() { + // + if ( + !enableXShort + || !enableXSignalling + ) { + return false; + } + + // + bool isConditionsFilled = + xShortConds.startTime > 0 + && xShortConds.signalTime > 0 + && xShortConds.entryTime > 0 + ; + + // + bool isBLFilled = false; + if (isConditionsFilled) { + // + int startBarIndex = iBarShift( + _Symbol, + _Period, + xShortConds.startTime + ); + + // + int signalBarIndex = iBarShift( + _Symbol, + _Period, + xShortConds.signalTime + ); + + // + int entryBarIndex = iBarShift( + _Symbol, + _Period, + xShortConds.entryTime + ); + + // + isBLFilled = + // + xShortConds.signalTime > xShortConds.startTime + && xShortConds.entryTime >= xShortConds.signalTime + ; + } + + // + bool result = + isBLFilled + && isConditionsFilled + && xWaitForShortSignals + ; + + // + // Since maybe Conditions Filled but + // Slope is Negative, for Handling Next Signals and + // Prevent from infinity loop, here we Clear Signal Conditions ... + if ( + !result + && isConditionsFilled + ) { + ClearXShortSignalConditions(); + } + + // + return result; +} + +// +// Clear Long Signal Conditions for New One ... +void ClearXLongSignalConditions() { + // + xLongConds.startTime = 0; + xLongConds.entryTime = 0; + xLongConds.signalTime = 0; +} + +// +// Clear Short Signal Conditions for New One ... +void ClearXShortSignalConditions() { + // + xShortConds.startTime = 0; + xShortConds.entryTime = 0; + xShortConds.signalTime = 0; +} + +// +// Check State for Long Signals ... +bool IsReadyForXSignals( + const XSignal &signal +) { + // + bool result = false; + + // + if ( + !enableXSignalling + || !(enableXLong || enableXShort) + ) { + return result; + } + + // + int signalBarIndex = iBarShift( + _Symbol, + _Period, + signal.time + ); + + // + // XOHCL candle = GetCandleModel(0); + XOHCL candle = GetCandleModel(signalBarIndex); + XOHCL pCandle = GetCandleModel(signalBarIndex + 1); + + // + // Retrieve Range ... + XRState range = GetXRange( + signalBarIndex, + xRangeMarketLength + ); + + // + // Retrive XMarket States ... + XMarketState xState0 = GetXMarketState(signalBarIndex); + XMarketState xState1 = GetXMarketState(signalBarIndex + 1); + XMarketState xState2 = GetXMarketState(signalBarIndex + 2); + XMarketState xStateLast = GetXMarketState(signalBarIndex + xSwingLength); + + // + // Retrieve Trend Powers ... + XTPOWState xTPow0 = GetXTPowState( + signalBarIndex, + xSwingLength + ); + XTPOWState xTPow1 = GetXTPowState( + signalBarIndex + 1, + xSwingLength + ); + + // + double hh = GetMarketHighestHigh( + signalBarIndex, + xSwingLength + ); + double ll = GetMarketLowestLow( + signalBarIndex, + xSwingLength + ); + double diffChange = (hh - ll); + bool isBigSharpOccured = + diffChange > (xSharpDetectorFactor * _Point) + ; + + // + bool isPSarVerified = false; + bool isTPowVerified = false; + bool isStateVerified = false; + bool isPriceVerified = false; + + // + // Verify Long Signals ... + if (signal.type == X_SIGNAL_LONG) { + // + // Get Price Verification for Long ... + isPriceVerified = + // + // Starter ... + true + // + && !isBigSharpOccured + // + && signal.entry < hh + // + // && signal.entry < range.hh + // && signal.entry > range.mid + // // + // && candle.high > xState0.verifier + // && signal.entry > xState0.verifier + // + // && pCandle.low != ll + && pCandle.high != hh + ; + + // + int above20TPowers = 0; + double signalSlope = 0; + int tPowUnverifyConditions = 0; + int tPowUnverifyConditionsIdx = 0; + for (int i = signalBarIndex; i < signalBarIndex + xSwingLength; i++) { + // + XTPOWState iTPowState = GetXTPowState( + i, + xSwingLength + ); + + // + // Calculate Signal Slope ... + if (i == signalBarIndex) { + // + signalSlope = iTPowState.signal; + } else if (i == signalBarIndex + 1) { + // + signalSlope = GetSlope( + 1, + iTPowState.signal, + 2, + signalSlope + ); + } + + // + if ( + iTPowState.powerUp > iTPowState.powerDown + && MathMax(iTPowState.powerUp, iTPowState.powerDown) > 20 + ) { + above20TPowers++; + } + + // + if (tPowUnverifyConditionsIdx < 3) { + // + if ( + iTPowState.powerUp < iTPowState.powerDown + || iTPowState.signal > MathMax(iTPowState.powerUp, iTPowState.powerDown) + ) { + tPowUnverifyConditions++; + } + + // + tPowUnverifyConditionsIdx++; + } + } + + // + isTPowVerified = + above20TPowers > 1 + && tPowUnverifyConditions == 0 + ; + + // + isPSarVerified = + xState0.psar < signal.entry + && xState0.psar < candle.low; + + // + isStateVerified = + // + // Start ... + true + // + // && xState0.open < xState0.slow + ; + + // + result = + // + // Starter ... + true + // + && isPSarVerified + // + && isTPowVerified + // + && isStateVerified + // + && isPriceVerified + ; + } else + // + // Verify Short Signals ... + if (signal.type == X_SIGNAL_SHORT) { + // + isPSarVerified = + xState0.psar > signal.entry + && xState0.psar > candle.high + ; + + // + // Get Price Verification for Short ... + isPriceVerified = + // + // Starter ... + true + // + && !isBigSharpOccured + // + && signal.entry > ll + && pCandle.low != ll + ; + + // + int above20TPowers = 0; + double signalSlope = 0; + int tPowUnverifyConditions = 0; + int tPowUnverifyConditionsIdx = 0; + for (int i = signalBarIndex; i < signalBarIndex + xSwingLength; i++) { + // + XTPOWState iTPowState = GetXTPowState( + i, + xSwingLength + ); + + // + // Calculate Signal Slope ... + if (i == signalBarIndex) { + // + signalSlope = iTPowState.signal; + } else if (i == signalBarIndex + 1) { + // + signalSlope = GetSlope( + 1, + iTPowState.signal, + 2, + signalSlope + ); + } + + // + if ( + iTPowState.powerUp > iTPowState.powerDown + && MathMax(iTPowState.powerUp, iTPowState.powerDown) > 20 + ) { + above20TPowers++; + } + + // + if (tPowUnverifyConditionsIdx < 3) { + // + if ( + iTPowState.powerUp > iTPowState.powerDown + || iTPowState.signal < MathMax(iTPowState.powerUp, iTPowState.powerDown) + ) { + tPowUnverifyConditions++; + } + + // + tPowUnverifyConditionsIdx++; + } + } + + // + isTPowVerified = + above20TPowers < 1 + && tPowUnverifyConditions == 0 + && MathAbs(xTPow0.powerUp - xTPow0.powerDown) > 50 * _Point + ; + + // + isStateVerified = + // + // Start ... + true + // + // && (xStateLast.verifier - xState0.verifier) >= 0 + // + && xState0.verifier > signal.entry + // + && MathAbs(signal.entry - xState0.verifier) < (xSharpDetectorFactor * _Point) + ; + + // + result = + // + // Starter Condition ... + true + // + && isPSarVerified + // + && isTPowVerified + // + && isStateVerified + // + && isPriceVerified + ; + } + + // + return result; +} +// +// END Functions ... +// + +// +// START Data Provider ... +// +XMarketState GetXMarketState( + const int bar_index +) { + // + XMarketState result = {}; + + // + double fast = GetMA( + bar_index, + xSwingLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double open = GetMA( + bar_index, + xSwingLength, + 0, + MODE_SMA, + PRICE_OPEN + ); + + // + double slow = GetMA( + bar_index, + xSwingLength * 2, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double oscillator = GetMA( + bar_index, + xSwingLength, + 0, + MODE_EMA, + PRICE_CLOSE + ); + + // + double oscillatorVerifier = GetMA( + bar_index, + xSwingLength, + 0, + MODE_EMA, + PRICE_WEIGHTED + ); + + // + int dailyCount = GetDailyCandleCount(); + double verifier = GetMA( + bar_index, + dailyCount, + 0, + MODE_EMA, + PRICE_MEDIAN + ); + + // + double psar = iSAR( + _Symbol, + _Period, + xPSarStep, + xPSarMaximum, + bar_index + ); + + // + result.psar = psar; + result.fast = fast; + result.open = open; + result.slow = slow; + result.verifier = verifier; + result.oscillator = oscillator; + result.oscillatorVerifier = oscillatorVerifier; + + // + return result; +} +// +// END Data Provider ... +// diff --git a/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.xr.signal.lib.mq4 b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.xr.signal.lib.mq4 new file mode 100644 index 0000000..d4ae238 --- /dev/null +++ b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.xr.signal.lib.mq4 @@ -0,0 +1,1142 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 X Signal Global Library +// --------------------------------------------------- +// saherelm useful tools and definitions ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Includes library ... +#include "../Libraries/x-saherelm.lib.mq4" + +// +// Includes Indicator library ... +#include "../Libraries/x-saherelm.indicator.lib.mq4" + +// +// Includes Models library ... +#include "../Libraries/x-saherelm.models.lib.mq4" + +// +// START Inputs ... +// +// +input string xRStarter = "- XR Signal Provider -"; // --> XR Signal Provider <-- + +// +input bool enableXRSignalling = true; // XR Signalling Enable + +// +input bool enableXRLong = true; // XR Signalling Enable Long +input bool enableXRShort = true; // XR Signalling Enable Short + +// +input double xRShortR2R = 1.5; // XR Short Risk To Reward Ratio +input double xRShortLotsPerTradePercent = 0.0002; // XR Lots Percent per Short Trades +input double xRShortMaxDrawdownPerTradePercent = 0.15; // XR Max Allowed DrawDown Percent per Short Trade + +// +input double xRLongR2R = 1.5; // XR Long Risk To Reward Ratio +input double xRLongLotsPerTradePercent = 0.0002; // XR Lots Percent per Short Trades +input double xRLongMaxDrawdownPerTradePercent = 0.15; // XR Max Allowed DrawDown Percent per Long Trade + +// +input int xRMaximumCandlesPerTrade = 96; // XR Maximum Candles which a Trade can open + +// +input int xRSwingLength = 48; // XR Swing Length +// +// END Inputs ... +// + +// +input double xRSharpDetectionFactor = 1350; // XR Sharp Detection Factor + +// +// START Global Requirement Functions ... +// +// +// XR Market State ... +struct XRMarketState { + // + double fast; + double slow; + double open; + + // + double range; + double rangeFast; + double rangeSlow; + double rangeOpen; + + // + double verifier; +}; + +// +// XR Based Signal Conditions ... +struct XRSignalConditions { + datetime startTime; + datetime signalTime; + datetime entryTime; +}; + +// +static XRSignalConditions xRLongConds; +static bool xRCloseLongTrades = false; +static bool xRWaitForLongSignals = true; + +// +static XRSignalConditions xRShortConds; +static bool xRCloseShortTrades = false; +static bool xRWaitForShortSignals = true; + +// +// Count Number of Closed Maximum DrawDown Trades ... +static int xRFailedSignals = 0; + +// +double xRMaximumDrawDown = 0; + +// +int fastLength = 0; +int slowLength = 0; + +// +int verifierLength = 0; + +// +int rangeFastLength = 0; +int rangeSlowLength = 0; +// +// END Global Requirement Functions ... +// + +// +// START Functions ... +// +// +// Check and Fill Long and Short Signal Handlers ... +void CheckXRSignalHandler( + const int bar_index +) { + // + // Check Market For Enable/Disable Signal Handlers ... + // Checking Market for Long Signals ... + + // + if ( + !enableXRSignalling + || !(enableXRLong || enableXRShort) + ) { + return; + } +} + +// +// Check and Fill Long Signal Conditions ... +void CheckXRLongSignalConditions( + const int bar_index +) { + // + if ( + !enableXRLong + || !enableXRSignalling + ) { + return; + } + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + // Read Prices ... + XPrice prices = GetPrice(); + + // + // Read XPVTState ... + XPvtState pvt0 = GetPVTState( + bar_index, + xRSwingLength + ); + + // + // Double Length Pivots ... + XPvtState dblPvt0 = GetPVTState( + bar_index, + (xRSwingLength * 2) + ); + + // + // Reading Required Candles ... + XOHCL candle0 = GetCandleModel(bar_index); + XOHCL candle1 = GetCandleModel(bar_index + 1); + XOHCL candle2 = GetCandleModel(bar_index + 2); + XOHCL candle3 = GetCandleModel(bar_index + 3); + + // + // Reding Required XRMarketStates ... + XRMarketState state0 = GetXRMarketState(bar_index); + XRMarketState state1 = GetXRMarketState(bar_index + 1); + XRMarketState state2 = GetXRMarketState(bar_index + 2); + XRMarketState state3 = GetXRMarketState(bar_index + 3); + + // + // Reading required XRangeStates ... + XRState range0 = ReadXRange( + bar_index + xRSwingLength, + xRSwingLength + ); + XRState range1 = ReadXRange( + bar_index + xRSwingLength + 1, + xRSwingLength + ); + XRState range2 = ReadXRange( + bar_index + xRSwingLength + 2, + xRSwingLength + ); + + // + XRState cRange0 = ReadXRange( + bar_index, + xRSwingLength + ); + + // + // Validate Farest Range Values ... + if ( + range2.hh == 0 + || + range2.ll == 0 + || + range2.mid == 0 + ) { + return; + } + + // + // Reading Required XTPowStates ... + XTPOWState tPow0 = GetXTPowState( + bar_index, + xRSwingLength + ); + XTPOWState tPow1 = GetXTPowState( + bar_index + 1, + xRSwingLength + ); + XTPOWState tPow2 = GetXTPowState( + bar_index + 2, + xRSwingLength + ); + + // + // if state verifier below range middle + // this means market is bullish ... + // + // if state verifier above range middle + // this means market is bearish ... + // + + // + bool isMarketBullish = + state0.verifier < range0.mid + && state1.verifier < range1.mid; + bool isMarketBearish = + state0.verifier > range0.mid + && state1.verifier > range1.mid; + bool isMarketGoingBullish = + state0.verifier > range0.mid + && !(state1.verifier > range1.mid); + bool isMarketGoingBearish = + state0.verifier < range0.mid + && !(state1.verifier < range1.mid); + + // + // Check Highest High Conditions ... + bool isHHVerified = + !( + pvt0.hh == dblPvt0.hh + ) + ; + + // + int sharpDetectionLength = 7; + double sharpDetectionValue = xRSharpDetectionFactor * _Point; + + // + int sharpHHIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + sharpDetectionLength, + bar_index + ); + double sharpHH = iHigh( + _Symbol, + _Period, + sharpHHIdx + ); + + // + int sharpLLIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + sharpDetectionLength, + bar_index + ); + double sharpLL = iLow( + _Symbol, + _Period, + sharpLLIdx + ); + + // + double sharpDiff = sharpHH - sharpLL; + bool isSharpOccered = + sharpDiff > sharpDetectionValue; + + // + XRMarketState lastState = GetXRMarketState( + bar_index + sharpDetectionLength + ); + + // + double stateFSDiff = (state0.fast - state0.slow) - (lastState.fast - lastState.slow); + + // + // Start Calculating Long Conditions ... + bool longCondition1 = + // + // Starter ... + true + // + && isMarketBullish + // + && + ( + candle2.high < range2.mid + || ( + candle2.high > range2.mid + && candle2.low < range2.mid + ) + ) + && candle1.low > range1.mid + ; + + // + if ( + // + ( + longCondition1 + ) + // + && xRLongConds.startTime == 0 + && xRLongConds.entryTime == 0 + && xRLongConds.signalTime == 0 + ) { + // + xRLongConds.startTime = barTime; + xRLongConds.entryTime = barTime; + xRLongConds.signalTime = barTime; + + // + return; + } +} + +// +// Check and Fill Short Signal Conditions ... +void CheckXRShortSignalConditions( + const int bar_index +) { + // + if ( + !enableXRShort + || !enableXRSignalling + ) { + return; + } + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + // Read Prices ... + XPrice prices = GetPrice(); + + // + // Read XPVTState ... + XPvtState pvt0 = GetPVTState( + bar_index, + xRSwingLength + ); + + // + // Double Length Pivots ... + XPvtState dblPvt0 = GetPVTState( + bar_index, + (xRSwingLength * 2) + ); + + // + // Reading Required Candles ... + XOHCL candle0 = GetCandleModel(bar_index); + XOHCL candle1 = GetCandleModel(bar_index + 1); + XOHCL candle2 = GetCandleModel(bar_index + 2); + XOHCL candle3 = GetCandleModel(bar_index + 3); + + // + // Reding Required XRMarketStates ... + XRMarketState state0 = GetXRMarketState(bar_index); + XRMarketState state1 = GetXRMarketState(bar_index + 1); + XRMarketState state2 = GetXRMarketState(bar_index + 2); + XRMarketState state3 = GetXRMarketState(bar_index + 3); + + // + // Reading required XRangeStates ... + XRState range0 = ReadXRange( + bar_index + xRSwingLength, + xRSwingLength + ); + XRState range1 = ReadXRange( + bar_index + xRSwingLength + 1, + xRSwingLength + ); + XRState range2 = ReadXRange( + bar_index + xRSwingLength + 2, + xRSwingLength + ); + + // + XRState cRange0 = ReadXRange( + bar_index, + xRSwingLength + ); + + // + // Validate Farest Range Values ... + if ( + range2.hh == 0 + || + range2.ll == 0 + || + range2.mid == 0 + ) { + return; + } + + // + // Reading Required XTPowStates ... + XTPOWState tPow0 = GetXTPowState( + bar_index, + xRSwingLength + ); + XTPOWState tPow1 = GetXTPowState( + bar_index + 1, + xRSwingLength + ); + XTPOWState tPow2 = GetXTPowState( + bar_index + 2, + xRSwingLength + ); + + // + // if state verifier below range middle + // this means market is bullish ... + // + // if state verifier above range middle + // this means market is bearish ... + // + + // + bool isMarketBullish = + state0.verifier < range0.mid + && state1.verifier < range1.mid; + bool isMarketBearish = + state0.verifier > range0.mid + && state1.verifier > range1.mid; + bool isMarketGoingBullish = + state0.verifier > range0.mid + && !(state1.verifier > range1.mid); + bool isMarketGoingBearish = + state0.verifier < range0.mid + && !(state1.verifier < range1.mid); + + // + // Check Highest High Conditions ... + bool isHHVerified = + !( + pvt0.hh == dblPvt0.hh + ) + ; + + // + int sharpDetectionLength = 7; + double sharpDetectionValue = xRSharpDetectionFactor * _Point; + + // + int sharpHHIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + sharpDetectionLength, + bar_index + ); + double sharpHH = iHigh( + _Symbol, + _Period, + sharpHHIdx + ); + + // + int sharpLLIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + sharpDetectionLength, + bar_index + ); + double sharpLL = iLow( + _Symbol, + _Period, + sharpLLIdx + ); + + // + double sharpDiff = sharpHH - sharpLL; + bool isSharpOccered = + sharpDiff > sharpDetectionValue; + + // + XRMarketState lastState = GetXRMarketState( + bar_index + sharpDetectionLength + ); + + // + double stateFSDiff = (state0.fast - state0.slow) - (lastState.fast - lastState.slow); + + // + // Start Calculating Long Conditions ... + bool shortCondition1 = + // + // Starter ... + true + // + && isMarketBearish + // + && + ( + candle2.low > range2.mid + || ( + candle2.high > range2.mid + && candle2.low < range2.mid + ) + ) + && candle1.high < range1.mid + ; + + // + if ( + // + ( + shortCondition1 + ) + // + && xRShortConds.startTime == 0 + && xRShortConds.entryTime == 0 + && xRShortConds.signalTime == 0 + ) { + // + xRShortConds.startTime = barTime; + xRShortConds.entryTime = barTime; + xRShortConds.signalTime = barTime; + + // + return; + } +} + +// +// Convert Long Signal Conditions to XSignal ... +XSignalRequest GenerateXRSignal( + const ENUM_X_SIGNAL_TYPE type, // Signal Type ... + const string signalTag , // Signal Tag ... + const int bar_index +) { + // + XSignalRequest result = {}; + + // + result.hasSignal = false; + result.type = X_SIGNAL_NONE; + result.provider = X_UNKNOWN_PROVIDER; + + // + if ( + !enableXRSignalling + || !(enableXRLong || enableXRShort) + ) { + return result; + } + + // + bool requestLong = type == X_SIGNAL_LONG; + + // + if (requestLong) { + // + if ( + !ValidateXRLongConditions() + ) { + return result; + } + } else { + // + if ( + !ValidateXRShortConditions() + ) { + return result; + } + } + + // + // Price Calculations ... + XPvtState pvts = GetPVTState( + bar_index, + xRSwingLength + ); + XPrice prices = GetPrice(); + + // + double entryPrice = requestLong ? + prices.longEntry : + prices.shortEntry + ; + + // + double openPrice = iOpen( + _Symbol, + _Period, + bar_index + ); + + // + double closePrice = iClose( + _Symbol, + _Period, + bar_index + ); + + // + double risk = requestLong ? + MathMin(openPrice, closePrice) - pvts.ll : + pvts.hh - MathMax(openPrice, closePrice); + if (risk <= 0) { + // + risk = requestLong ? + MathAbs(pvts.hh - entryPrice) : + MathAbs(pvts.ll - entryPrice) + ; + } + + // + double reward = + requestLong ? + risk * xRLongR2R : + risk * xRShortR2R + ; + + // + double sl = requestLong ? + 0 : + 0; + + // + double tp = requestLong ? + entryPrice + reward : + entryPrice - reward + ; + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + result.signal.tp = tp; + result.signal.sl = sl; + result.signal.type = type; + result.signal.time = barTime; + result.signal.tag = signalTag; + result.signal.symbol = _Symbol; + result.signal.entry = entryPrice; + result.signal.id = totalSignals + 1; + result.signal.provider = X_XR_PROVIDER; + + // + result.hasSignal = true; + result.type = type; + result.provider = X_XR_PROVIDER; + + // + return result; +} + +// +// Validate Long Signal Conditions ... +bool ValidateXRLongConditions() { + // + if ( + !enableXRLong + || !enableXRSignalling + ) { + return false; + } + + // + bool isConditionsFilled = + xRLongConds.startTime > 0 + && xRLongConds.signalTime > 0 + && xRLongConds.entryTime > 0 + ; + + // + bool isBLFilled = false; + if (isConditionsFilled) { + // + isBLFilled = + // + xRLongConds.signalTime >= xRLongConds.startTime + && xRLongConds.entryTime >= xRLongConds.signalTime + ; + } + + // + bool result = + isBLFilled + && isConditionsFilled + && xRWaitForLongSignals + ; + + // + // Since maybe Conditions Filled but + // Slope is Negative, for Handling Next Signals and + // Prevent from infinity loop, here we Clear Signal Conditions ... + if ( + !result + && isConditionsFilled + ) { + ClearXRLongSignalConditions(); + } + + // + return result; +} + +// +// Validate Short Signal Conditions ... +bool ValidateXRShortConditions() { + // + if ( + !enableXRShort + || !enableXRSignalling + ) { + return false; + } + + // + bool isConditionsFilled = + xRShortConds.startTime > 0 + && xRShortConds.signalTime > 0 + && xRShortConds.entryTime > 0 + ; + + // + bool isBLFilled = false; + if (isConditionsFilled) { + // + isBLFilled = + // + xRShortConds.signalTime >= xRShortConds.startTime + && xRShortConds.entryTime >= xRShortConds.signalTime + ; + } + + // + bool result = + isBLFilled + && isConditionsFilled + && xRWaitForShortSignals + ; + + // + // Since maybe Conditions Filled but + // Slope is Negative, for Handling Next Signals and + // Prevent from infinity loop, here we Clear Signal Conditions ... + if ( + !result + && isConditionsFilled + ) { + ClearXRShortSignalConditions(); + } + + // + return result; +} + +// +// Clear Long Signal Conditions for New One ... +void ClearXRLongSignalConditions() { + // + xRLongConds.startTime = 0; + xRLongConds.signalTime = 0; + xRLongConds.entryTime = 0; +} + +// +// Clear Short Signal Conditions for New One ... +void ClearXRShortSignalConditions() { + // + xRShortConds.startTime = 0; + xRShortConds.signalTime = 0; + xRShortConds.entryTime = 0; +} + +// +// Check State for Long Signals ... +bool IsReadyForXRSignals( + const XSignal &signal +) { + // + bool result = false; + + // + if ( + !enableXRSignalling + || !(enableXRLong || enableXRShort) + ) { + return result; + } + + // + // Find Signal Bar Index ... + int signalBarIndex = iBarShift( + _Symbol, + _Period, + signal.time + ); + + // + // Read Prices ... + XPrice prices = GetPrice(); + + // + // Read XPVTState ... + XPvtState pvt0 = GetPVTState( + signalBarIndex, + xRSwingLength + ); + + // + // Reading Required Candles ... + XOHCL candle0 = GetCandleModel(signalBarIndex); + XOHCL candle1 = GetCandleModel(signalBarIndex + 1); + XOHCL candle2 = GetCandleModel(signalBarIndex + 2); + XOHCL candle3 = GetCandleModel(signalBarIndex + 3); + + // + // Reding Required XRMarketStates ... + XRMarketState state0 = GetXRMarketState(signalBarIndex); + XRMarketState state1 = GetXRMarketState(signalBarIndex + 1); + XRMarketState state2 = GetXRMarketState(signalBarIndex + 2); + XRMarketState state3 = GetXRMarketState(signalBarIndex + 3); + + // + // Reading required XRangeStates ... + XRState range0 = ReadXRange( + signalBarIndex + xRSwingLength, + xRSwingLength + ); + XRState range1 = ReadXRange( + signalBarIndex + xRSwingLength + 1, + xRSwingLength + ); + XRState range2 = ReadXRange( + signalBarIndex + xRSwingLength + 2, + xRSwingLength + ); + + // + // Reading Required XTPowStates ... + XTPOWState tPow0 = GetXTPowState( + signalBarIndex, + xRSwingLength + ); + XTPOWState tPow1 = GetXTPowState( + signalBarIndex + 1, + xRSwingLength + ); + XTPOWState tPow2 = GetXTPowState( + signalBarIndex + 2, + xRSwingLength + ); + + // + double hhllDiff = MathAbs(pvt0.hh - pvt0.ll); + double sharpDetectionValue = xRSharpDetectionFactor * _Point; + bool isSharpOccured = hhllDiff > sharpDetectionValue; + + // + // Calculate State Min Max Diff ... + // + double state0Min = MathMin(state0.fast, state0.slow); + state0Min = MathMin(state0Min, state0.open); + state0Min = MathMin(state0Min, state0.rangeFast); + state0Min = MathMin(state0Min, state0.rangeSlow); + state0Min = MathMin(state0Min, state0.rangeOpen); + state0Min = MathMin(state0Min, state0.verifier); + + // + double state0Max = MathMax(state0.fast, state0.slow); + state0Max = MathMax(state0Max, state0.open); + state0Max = MathMax(state0Max, state0.rangeFast); + state0Max = MathMax(state0Max, state0.rangeSlow); + state0Max = MathMax(state0Max, state0.rangeOpen); + state0Max = MathMax(state0Max, state0.verifier); + + // + double state0MinMaxDiff = (state0Max - state0Min); + + // + bool isTPowValid = false; + bool isStateValid = false; + bool isRangeValid = false; + + // + // Verify Long Signals ... + if (signal.type == X_SIGNAL_LONG) { + // + // Retrieve TPow Verifications ... + isTPowValid = + // + // Starter ... + true + ; + + // + // Retrieve XMarket Verifications ... + isStateValid = + // + // Starter ... + true + // + // && !(state0MinMaxDiff > sharpDetectionValue) + ; + + // + // Retrieve XRange Verifications ... + isRangeValid = + // + // Starter ... + true + ; + + // + result = + // + // Starter ... + true + // + && isTPowValid + && isStateValid + && isRangeValid + ; + } else + // + // Verify Short Signals ... + if (signal.type == X_SIGNAL_SHORT) { + // + // Retrieve TPow Verifications ... + isTPowValid = + // + // Starter ... + true + ; + + // + // Retrieve XMarket Verifications ... + isStateValid = + // + // Starter ... + true + ; + + // + // Retrieve XRange Verifications ... + isRangeValid = + // + // Starter ... + true + ; + + // + result = + // + // Starter ... + true + // + && isTPowValid + && isStateValid + && isRangeValid + ; + } + + // + return result; +} +// +// END Functions ... +// + +// +// START Data Providers ... +// +// +XRMarketState GetXRMarketState( + const int bar_index +) { + // + XRMarketState result = {}; + + // + // Calculate Market Lengths ... + + // + if (fastLength == 0) { + fastLength = xRSwingLength; + } + + // + if (slowLength == 0) { + slowLength = xRSwingLength * 2; + } + + // + if (verifierLength == 0) { + verifierLength = (GetDailyCandleCount() * 2); + } + + // + if (rangeFastLength == 0) { + rangeFastLength = (int)(verifierLength / 2); + } + + // + if (rangeSlowLength == 0) { + rangeSlowLength = verifierLength; + } + + // + // Reading Values ... + + // + double fast = GetMA( + bar_index, + fastLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double slow = GetMA( + bar_index, + slowLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double open = GetMA( + bar_index, + fastLength, + 0, + MODE_SMA, + PRICE_OPEN + ); + + // + double rangeFast = GetMA( + bar_index, + rangeFastLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double rangeSlow = GetMA( + bar_index, + rangeSlowLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double rangeOpen = GetMA( + bar_index, + rangeFastLength, + 0, + MODE_SMA, + PRICE_OPEN + ); + + // + double verifier = GetMA( + bar_index, + verifierLength, + 0, + MODE_EMA, + PRICE_MEDIAN + ); + + // + // Filling Result ... + result.fast = fast; + result.slow = slow; + result.open = open; + result.verifier = verifier; + result.rangeFast = rangeFast; + result.rangeSlow = rangeSlow; + result.rangeOpen = rangeOpen; + + // + return result; +} +// +// END Data Providers ... +// \ No newline at end of file diff --git a/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.xtpw.signal.lib.mq4 b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.xtpw.signal.lib.mq4 new file mode 100644 index 0000000..4bf02ce --- /dev/null +++ b/Packed/XAUUSD-15M/MQL4/Libraries/x-saherelm.xtpw.signal.lib.mq4 @@ -0,0 +1,1332 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 XTPW Signal Global Library +// --------------------------------------------------- +// XSaherElm EA Signal Provider based on +// XTPow Indicator... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Includes library ... +#include "../Libraries/x-saherelm.lib.mq4" + +// +// Includes Indicator library ... +#include "../Libraries/x-saherelm.indicator.lib.mq4" + +// +// Includes Models library ... +#include "../Libraries/x-saherelm.models.lib.mq4" + +// +// START Inputs ... +// +// +input string xTPWStarter = "- XTPW Signal Provider -"; // ---> XTPW Signal Provider <--- + +// +input bool enableXTPWSignalling = true; // XTPW Signalling Enable + +// +input bool enableXTPWLong = true; // XTPW Signalling Enable Long +input bool enableXTPWShort = true; // XTPW Signalling Enable Short + +// +input double xTPWShortR2R = 2; // XTPW Short Risk To Reward Ratio +input double xTPWShortLotsPerTradePercent = 0.0002; // XTPW Lots Percent per Short Trades +input double xTPWShortMaxDrawdownPerTradePercent = 0.3; // XTPW Max Allowed DrawDown Percent per Short Trade + +// +input double xTPWLongR2R = 2; // XTPW Long Risk To Reward Ratio +input double xTPWLongLotsPerTradePercent = 0.0002; // XTPW Lots Percent per Short Trades +input double xTPWLongMaxDrawdownPerTradePercent = 0.3; // XTPW Max Allowed DrawDown Percent per Long Trade + +// +input int xTPWMaximumCandlesPerTrade = 206; // XTPW Maximum Candles which a Trade can open + +// +input double xTPWPSarStep = 0.02; // XTPW Parabolic Sar Step +input double xTPWPSarMaximum = 0.2; // XTPW Parabolic Sar Maximum + +// +input int xTPWSwingLength = 7; // XTPW Signal Swing Length +// +// END Inputs ... +// + +// +input double xTPWSharpDetectionFactor = 650; // XTPW Sharp Detection Factor + +// +// START Global Requirement Functions ... +// +// +// XTPW Based Signal Conditions ... +struct XTPWSignalConditions { + datetime startTime; + datetime signalTime; + datetime entryTime; +}; + +// +struct XTPWMarketState { + // + double psar; + + // + double scFast; + double scSlow; + double scWeight; + + // + double mcFast; + double mcSlow; + double mcWeight; + + // + double lcFast; + double lcSlow; + double lcWeight; +}; + +// +struct XLHS { + // + double scHH; + double scLL; + + // + double mcHH; + double mcLL; + + // + double lcHH; + double lcLL; +}; + +// +static XTPWSignalConditions xTPWLongConds; +static bool xTPWCloseLongTrades = false; +static bool xTPWWaitForLongSignals = true; + +// +static XTPWSignalConditions xTPWShortConds; +static bool xTPWCloseShortTrades = false; +static bool xTPWWaitForShortSignals = true; + +// +// Count Number of Closed Maximum DrawDown Trades ... +static int xTPWFailedSignals = 0; + +// +double tPowerVerifier = 20; +double tPowerMaxVerifier = 55; + +// +int scFastLength = 0; +int scSlowLength = 0; + +// +int mcFastLength = 0; +int mcSlowLength = 0; + +// +int lcFastLength = 0; +int lcSlowLength = 0; + +// +datetime lastTurnOffLongTradesTime; +datetime lastTurnOffShortTradesTime; +// +// END Global Requirement Functions ... +// + +// +// START Functions ... +// +// +// Check and Fill Long and Short Signal Handlers ... +void CheckXTPWSignalHandler( + const int bar_index +) { + // + // Check Market For Enable/Disable Signal Handlers ... + // Checking Market for Long Signals ... + + // + if ( + !enableXTPWSignalling + || !(enableXTPWLong || enableXTPWShort) + ) { + return; + } + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + XOHCL candle0 = GetCandleModel(bar_index); + XOHCL candle1 = GetCandleModel(bar_index + 1); + XOHCL candle2 = GetCandleModel(bar_index + 1); + + // + XTPOWState tPow0 = GetXTPowState( + bar_index, + xTPWSwingLength + ); + XTPOWState tPow1 = GetXTPowState( + bar_index + 1, + xTPWSwingLength + ); + XTPOWState tPow2 = GetXTPowState( + bar_index + 2, + xTPWSwingLength + ); + + // + XTPWMarketState state0 = GetXTPWMarketState( + bar_index + ); + XTPWMarketState state1 = GetXTPWMarketState( + bar_index + 1 + ); + XTPWMarketState state2 = GetXTPWMarketState( + bar_index + 2 + ); + + // // + // // Disable Long Conditions ... + // if ( + // xTPWWaitForLongSignals + // && + // ( + // isRangeCrossOverRangeWeight + // || + // isRangeCrossUnderRangeWeight + // || + // isTPowUpperAboveMaxVerifier + // ) + // ) { + // // + // xTPWWaitForLongSignals = false; + // lastTurnOffLongTradesTime = barTime; + // } + + // // + // // Enable Long Conditions ... + // if ( + // !xTPWWaitForLongSignals + // && lastTurnOffLongTradesTime > 0 + // && ( + // // isFastCrossOverSlow + // // || + // // isFastCrossUnderSlow + // isRangeCrossOverRangeWeight + // || + // isRangeCrossUnderRangeWeight + // || + // isTPowUpperBelowMaxVerifier + // ) + // ) { + // // + // // Find Last Turn Off Bar Index ... + // int lastTurnOffLongTradesBarIndex = iBarShift( + // _Symbol, + // _Period, + // lastTurnOffLongTradesTime + // ); + + // // + // // the Distance must be bigger than market length ... + // if (MathAbs(lastTurnOffLongTradesBarIndex - bar_index) > xTPWSwingLength) { + // // + // xTPWWaitForLongSignals = true; + // lastTurnOffLongTradesTime = 0; + // } + // } +} + +// +// Check and Fill Long Signal Conditions ... +void CheckXTPWLongSignalConditions( + const int bar_index +) { + // + if ( + !enableXTPWLong + || !enableXTPWSignalling + || !xTPWWaitForLongSignals + ) { + return; + } + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + // Retrieve TPow States ... + XTPOWState tPow0 = GetXTPowState( + bar_index, + xTPWSwingLength + ); + XTPOWState tPow1 = GetXTPowState( + bar_index + 1, + xTPWSwingLength + ); + XTPOWState tPow2 = GetXTPowState( + bar_index + 2, + xTPWSwingLength + ); + + // + // Retrieve TPowMarket State ... + XTPWMarketState state0 = GetXTPWMarketState( + bar_index + ); + XTPWMarketState state1 = GetXTPWMarketState( + bar_index + 1 + ); + XTPWMarketState state2 = GetXTPWMarketState( + bar_index + 2 + ); + + // + // Retrieve XPrice Model ... + XPrice prices = GetPrice(); + + // + // Retrieve Candles ... + XOHCL candle0 = GetCandleModel(bar_index); + XOHCL candle1 = GetCandleModel(bar_index + 1); + XOHCL candle2 = GetCandleModel(bar_index + 2); + + // + XLHS lhs = GetXTPWLHS(bar_index); + + // + bool isHHSame = + lhs.scHH == lhs.mcHH + && lhs.mcHH == lhs.lcHH + ; + + // + bool isLLSame = + lhs.scLL == lhs.mcLL + && lhs.mcLL == lhs.lcLL + ; + + // + bool startCondition = false; + bool signalCondition = false; + bool entryCondition = false; + + // + bool longCondition1 = + // + true + // + && !isHHSame + // + && !( + lhs.scLL == lhs.mcLL + ) + // + && !( + lhs.scHH == lhs.mcHH + ) + // + && !( + prices.longEntry + && candle0.high < state0.scFast + && candle0.high < state0.scSlow + && candle0.high < state0.mcFast + && candle0.high < state0.mcSlow + && candle0.high < state0.lcFast + && candle0.high < state0.lcSlow + ) + // + && tPow0.powerDown > tPowerMaxVerifier + && tPow1.powerDown > tPowerMaxVerifier + && tPow0.powerDown < MathMax(tPow1.powerUp, tPow1.powerDown) + && MathMax(tPow1.powerUp, tPow1.powerDown) > tPowerMaxVerifier + ; + + // + // Start Conditions ... + startCondition = ( + longCondition1 + ) + ; + + // + if ( + startCondition + && xTPWLongConds.startTime == 0 + && xTPWLongConds.signalTime == 0 + && xTPWLongConds.entryTime == 0 + ) { + // + xTPWLongConds.startTime = barTime; + xTPWLongConds.signalTime = barTime; + xTPWLongConds.entryTime = barTime; + + // + return; + } +} + +// +// Check and Fill Short Signal Conditions ... +void CheckXTPWShortSignalConditions( + const int bar_index +) { + // + if ( + !enableXTPWShort + || !enableXTPWSignalling + || !xTPWWaitForShortSignals + ) { + return; + } + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + // Retrieve TPower State ... + XTPOWState tPow0 = GetXTPowState( + bar_index, + xTPWSwingLength + ); + XTPOWState tPow1 = GetXTPowState( + bar_index + 1, + xTPWSwingLength + ); + XTPOWState tPow2 = GetXTPowState( + bar_index + 2, + xTPWSwingLength + ); + + // + // Retrieve TPWMarket State ... + XTPWMarketState state0 = GetXTPWMarketState( + bar_index + ); + XTPWMarketState state1 = GetXTPWMarketState( + bar_index + 1 + ); + XTPWMarketState state2 = GetXTPWMarketState( + bar_index + 2 + ); + + // + // Retrieve Candles ... + XOHCL candle0 = GetCandleModel(bar_index); + XOHCL candle1 = GetCandleModel(bar_index + 1); + XOHCL candle2 = GetCandleModel(bar_index + 2); + + // + XPrice prices = GetPrice(); + XLHS lhs = GetXTPWLHS(bar_index); + + // + double sharpDetectionValue = + xTPWSharpDetectionFactor * _Point; + + // + bool isHHSame = + lhs.scHH == lhs.mcHH + && lhs.mcHH == lhs.lcHH + ; + + // + bool isLLSame = + lhs.scLL == lhs.mcLL + && lhs.mcLL == lhs.lcLL + ; + + // + bool startCondition = false; + bool signalCondition = false; + bool entryCondition = false; + + // + bool shortCondition1 = + // + true + // + && tPow1.powerDown > tPowerMaxVerifier + && tPow2.powerDown < tPowerMaxVerifier + ; + + // + startCondition = ( + shortCondition1 + ) + ; + + // + if ( + startCondition + && xTPWShortConds.startTime == 0 + && xTPWShortConds.signalTime == 0 + && xTPWShortConds.entryTime == 0 + ) { + // + xTPWShortConds.startTime = barTime; + xTPWShortConds.signalTime = barTime; + xTPWShortConds.entryTime = barTime; + + // + return; + } +} + +// +// Convert Long Signal Conditions to XSignal ... +XSignalRequest GenerateXTPWSignal( + const ENUM_X_SIGNAL_TYPE type, // Signal Type ... + const string signalTag , // Signal Tag ... + const int bar_index +) { + // + XSignalRequest result = {}; + + // + result.hasSignal = false; + result.type = X_SIGNAL_NONE; + result.provider = X_UNKNOWN_PROVIDER; + + // + if ( + !enableXTPWSignalling + || !(enableXTPWLong || enableXTPWShort) + ) { + return result; + } + + // + bool requestLong = type == X_SIGNAL_LONG; + + // + // Check Condition Validations ... + if (requestLong) { + // + // Check Long Condtion is Valid, if Long Requested ... + if ( + !ValidateXTPWLongConditions() + ) { + return result; + } + } else { + // + // Check Short Condtion is Valid, if Short Requested ... + if ( + !ValidateXTPWShortConditions() + ) { + return result; + } + } + + // + double ll = + // + GetMarketLowestLow( + bar_index, + xTPWSwingLength + ) + ; + + // + double hh = + // + GetMarketHighestHigh( + bar_index, + xTPWSwingLength + ) + ; + + // + double openPrice = iOpen( + _Symbol, + _Period, + bar_index + ); + + // + double closePrice = iClose( + _Symbol, + _Period, + bar_index + ); + + // + // Price Calculations ... + XPrice prices = GetPrice(); + + // + // Read State ... + XTPWMarketState state0 = GetXTPWMarketState(bar_index); + + // + XOHCL candle0 = GetCandleModel(bar_index); + XOHCL candle1 = GetCandleModel(bar_index + 1); + XOHCL candle2 = GetCandleModel(bar_index + 2); + XOHCL candle3 = GetCandleModel(bar_index + 2); + + // + double risk = requestLong ? + // + MathMin(openPrice, closePrice) - ll : + hh - MathMax(openPrice, closePrice) + ; + + // + double longR2R = xTPWLongR2R; + double shortR2R = xTPWShortR2R; + + // + double sharpDetectorValue = xTPWSharpDetectionFactor * _Point; + + // + if ( + risk > 0 + && requestLong + ) { + return result; + } + + // + // Define Entry Price ... + double entryPrice = requestLong + ? + prices.longEntry + : + prices.shortEntry + ; + + // + // Fix TP Detects for Short Signals ... + if (!requestLong) { + risk = 0; + } + + // + double reward = requestLong ? + risk * longR2R : + risk * shortR2R + ; + + // + if (risk == 0) { + // + // Calculate Reward ... + reward = requestLong + ? + MathAbs(hh - entryPrice) + : + MathAbs(hh - entryPrice) + ; + + // + // Detect Sharp Change Occured or not ... + bool isSharpOccured = reward > sharpDetectorValue + || MathAbs(reward - sharpDetectorValue) < (50 * _Point); + + // + // Change Rewards on Special Conditions ... + if ( + ( + requestLong + && isSharpOccured + && ( + state0.lcFast < state0.lcSlow + || ( + state0.mcFast > state0.mcSlow + && state0.mcWeight < state0.mcSlow + ) + ) + ) + ) { + reward = reward / 2; + } + + // + if (reward < 50 * _Point) { + reward = (50 * _Point) + prices.priceGap; + } + + // // + // if (!requestLong) { + // reward = reward * shortR2R; + // } + } + + // + double sl = requestLong ? + 0 : + 0; + double tp = requestLong ? + entryPrice + reward : + entryPrice - reward + ; + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + result.signal.tp = tp; + result.signal.sl = sl; + result.signal.type = type; + result.signal.time = barTime; + result.signal.tag = signalTag; + result.signal.symbol = _Symbol; + result.signal.entry = entryPrice; + result.signal.id = totalSignals + 1; + result.signal.provider = X_XTPW_PROVIDER; + + // + result.hasSignal = true; + result.type = type; + result.provider = X_XTPW_PROVIDER; + + // + return result; +} + +// +// Validate Signal Conditions ... +bool ValidateXTPWLongConditions() { + // + if ( + !enableXTPWLong + || !enableXTPWSignalling + ) { + return false; + } + + // + bool isConditionsFilled = + xTPWLongConds.startTime > 0 + && xTPWLongConds.signalTime > 0 + && xTPWLongConds.entryTime > 0 + ; + + // + bool isBLFilled = false; + if (isConditionsFilled) { + // // + // int startBarIndex = iBarShift( + // _Symbol, + // _Period, + // xTPWLongConds.startTime + // ); + + // // + // int signalBarIndex = iBarShift( + // _Symbol, + // _Period, + // xTPWLongConds.signalTime + // ); + + // // + // int entryBarIndex = iBarShift( + // _Symbol, + // _Period, + // xTPWLongConds.entryTime + // ); + + // // + // int startSignalDiff = (signalBarIndex - startBarIndex); + // int entrySignalDiff = (entryBarIndex - signalBarIndex); + // int maxDiff = MathMax(startSignalDiff, entrySignalDiff); + + // + isBLFilled = + // + // Starter ... + true + // + && xTPWLongConds.signalTime >= xTPWLongConds.startTime + && xTPWLongConds.entryTime >= xTPWLongConds.signalTime + // + // && maxDiff < (xTPWSwingLength * 2) + ; + } + + // + bool result = + isBLFilled + && isConditionsFilled + && xTPWWaitForLongSignals + ; + + // + // Since maybe Conditions Filled but + // Slope is Negative, for Handling Next Signals and + // Prevent from infinity loop, here we Clear Signal Conditions ... + if ( + !result + && isConditionsFilled + ) { + ClearXTPWLongSignalConditions(); + } + + // + return result; +} + +// +// Validate Signal Conditions ... +bool ValidateXTPWShortConditions() { + // + if ( + !enableXTPWShort + || !enableXTPWSignalling + ) { + return false; + } + + // + bool isConditionsFilled = + xTPWShortConds.startTime > 0 + && xTPWShortConds.signalTime > 0 + && xTPWShortConds.entryTime > 0 + ; + + // + bool isBLFilled = false; + if (isConditionsFilled) { + // // + // int startBarIndex = iBarShift( + // _Symbol, + // _Period, + // xTPWShortConds.startTime + // ); + + // // + // int signalBarIndex = iBarShift( + // _Symbol, + // _Period, + // xTPWShortConds.signalTime + // ); + + // // + // int entryBarIndex = iBarShift( + // _Symbol, + // _Period, + // xTPWShortConds.entryTime + // ); + + // + isBLFilled = + // + // Starter ... + true + // + && xTPWShortConds.signalTime >= xTPWShortConds.startTime + && xTPWShortConds.entryTime >= xTPWShortConds.signalTime + ; + } + + // + bool result = + isBLFilled + && isConditionsFilled + && xTPWWaitForShortSignals + ; + + // + // Since maybe Conditions Filled but + // Slope is Negative, for Handling Next Signals and + // Prevent from infinity loop, here we Clear Signal Conditions ... + if ( + !result + && isConditionsFilled + ) { + ClearXTPWShortSignalConditions(); + } + + // + return result; +} + +// +// Clear Long Signal Conditions for New One ... +void ClearXTPWLongSignalConditions() { + // + xTPWLongConds.startTime = 0; + xTPWLongConds.entryTime = 0; + xTPWLongConds.signalTime = 0; +} + +// +// Clear Short Signal Conditions for New One ... +void ClearXTPWShortSignalConditions() { + // + xTPWShortConds.startTime = 0; + xTPWShortConds.entryTime = 0; + xTPWShortConds.signalTime = 0; +} + +// +// Check State for Long Signals ... +bool IsReadyForXTPWSignals( + const XSignal &signal +) { + // + bool result = false; + + // + if ( + !enableXTPWSignalling + || !(enableXTPWLong || enableXTPWShort) + ) { + return result; + } + + // + int signalBarIndex = iBarShift( + _Symbol, + _Period, + signal.time + ); + + // + // XOHCL candle = GetCandleModel(0); + XOHCL candle0 = GetCandleModel(signalBarIndex); + XOHCL candle1 = GetCandleModel(signalBarIndex + 1); + + // + // Retrieve TPow State ... + XTPOWState tPow0 = GetXTPowState( + signalBarIndex, + xTPWSwingLength + ); + XTPOWState tPow1 = GetXTPowState( + signalBarIndex + 1, + xTPWSwingLength + ); + + // + // Retrive XMarket States ... + XTPWMarketState state0 = GetXTPWMarketState(signalBarIndex); + XTPWMarketState state1 = GetXTPWMarketState(signalBarIndex + 1); + XTPWMarketState state2 = GetXTPWMarketState(signalBarIndex + 2); + + // + bool isPSarVerified = false; + bool isTPowVerified = false; + bool isStateVerified = false; + bool isPriceVerified = false; + + // + // Calculate Sharp Detection Value ... + double sharpDetectionValue = + xTPWSharpDetectionFactor * _Point; + + // + // Find State0 Min ... + double state0Min = MathMin(state0.scFast, state0.scSlow); + state0Min = MathMin(state0Min, state0.mcFast); + state0Min = MathMin(state0Min, state0.mcSlow); + state0Min = MathMin(state0Min, state0.lcFast); + state0Min = MathMin(state0Min, state0.lcSlow); + + // + // Find State0 Min ... + double state0Max = MathMax(state0.scFast, state0.scSlow); + state0Max = MathMax(state0Max, state0.mcFast); + state0Max = MathMax(state0Max, state0.mcSlow); + state0Max = MathMax(state0Max, state0.lcFast); + state0Max = MathMax(state0Max, state0.lcSlow); + + // + // Find Distance Between State0 Min and Max ... + double state0MinMaxDistance = MathAbs(state0Max - state0Min); + + // + // Verify Long Signals ... + if (signal.type == X_SIGNAL_LONG) { + // + // Get Price Verification for Long ... + isPriceVerified = + // + // Starter ... + true + // + ; + + // + isTPowVerified = + // + // Starter ... + true + // + && tPow0.powerDown > tPowerMaxVerifier + && tPow1.powerDown > tPowerMaxVerifier + && tPow0.powerDown < MathMax(tPow1.powerUp, tPow1.powerDown) + && MathMax(tPow1.powerUp, tPow1.powerDown) > tPowerMaxVerifier + ; + + // + isPSarVerified = + // + // Starter ... + true + // + ; + + // + isStateVerified = + // + // Start ... + true + // + && state0.mcFast > state0.mcSlow + && state1.mcFast > state1.mcSlow + // + && !( + state0.lcFast > state0.mcSlow + && state0.lcFast < state0.mcFast + ) + // + && MathAbs(state1.mcFast - state1.mcSlow) > (50 * _Point) + ; + + // + result = + // + // Starter ... + true + // + && isPSarVerified + // + && isTPowVerified + // + && isStateVerified + // + && isPriceVerified + ; + } else + // + // Verify Short Signals ... + if (signal.type == X_SIGNAL_SHORT) { + // + isPSarVerified = + // + // Starter ... + true + ; + + // + // Get Price Verification for Short ... + isPriceVerified = + // + // Starter ... + true + ; + + // + isTPowVerified = + // + // Starter ... + true + // + && tPow0.signal > MathMax(tPow0.powerUp, tPow0.powerDown) + ; + + // + isStateVerified = + // + // Start ... + true + // + && ( + // + state0.scFast < state0.scSlow + && state0.mcFast < state0.mcSlow + && state0.lcFast < state0.lcSlow + ? + signal.entry > state0.scFast + : + // + // Find Minimum and Maximum Distance of State ... + state0MinMaxDistance > sharpDetectionValue + ? + signal.entry > state0Min + : + true + ) + // + && MathAbs(state0.mcFast - state0.mcSlow) > 50 * _Point + ; + + // + result = + // + // Starter Condition ... + true + // + && isPSarVerified + // + && isTPowVerified + // + && isStateVerified + // + && isPriceVerified + ; + } + + // + return result; +} +// +// END Functions ... +// + +// +// START Data Provider ... +// +// +// Retrieve Market State ... +XTPWMarketState GetXTPWMarketState( + const int bar_index +) { + // + XTPWMarketState result = {}; + + // + int dayCount = GetDailyCandleCount(); + int halfDayCount = (int)(dayCount / 2); + + // + if (scFastLength == 0) { + scFastLength = xTPWSwingLength; + } + + // + if (scSlowLength == 0) { + scSlowLength = xTPWSwingLength * 2; + } + + // + if (mcFastLength == 0) { + mcFastLength = halfDayCount; + } + + // + if (mcSlowLength == 0) { + mcSlowLength = dayCount; + } + + // + if (lcFastLength == 0) { + lcFastLength = halfDayCount * 3; + } + + // + if (lcSlowLength == 0) { + lcSlowLength = dayCount * 3; + } + + // + double scFast = GetMA( + bar_index, + scFastLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double scSlow = GetMA( + bar_index, + scSlowLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double scWeight = GetMA( + bar_index, + scSlowLength, + 0, + MODE_EMA, + PRICE_MEDIAN + ); + + // + double mcFast = GetMA( + bar_index, + mcFastLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double mcSlow = GetMA( + bar_index, + mcSlowLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double mcWeight = GetMA( + bar_index, + mcSlowLength, + 0, + MODE_EMA, + PRICE_MEDIAN + ); + + // + double lcFast = GetMA( + bar_index, + lcFastLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double lcSlow = GetMA( + bar_index, + lcSlowLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double lcWeight = GetMA( + bar_index, + lcSlowLength, + 0, + MODE_EMA, + PRICE_MEDIAN + ); + + // + double psar = iSAR( + _Symbol, + _Period, + xTPWPSarStep, + xTPWPSarMaximum, + bar_index + ); + + // + result.psar = psar; + result.scFast = scFast; + result.scSlow = scSlow; + result.mcFast = mcFast; + result.mcSlow = mcSlow; + result.lcFast = lcFast; + result.lcSlow = lcSlow; + result.scWeight = scWeight; + result.mcWeight = mcWeight; + result.lcWeight = lcWeight; + + // + return result; +} + +// +// Retrieve Highest Highs and Lowest Lows in Cycles ... +XLHS GetXTPWLHS( + const int bar_index +) { + // + XLHS result = {}; + + // + // Retrieve LL and HH (s) ... + + // + // SC HH ... + double scHH = GetMarketHighestHigh( + bar_index, + scFastLength + ); + + // + // SC LL ... + double scLL = GetMarketHighestHigh( + bar_index, + scFastLength + ); + + // + // MC HH ... + double mcHH = GetMarketHighestHigh( + bar_index, + mcFastLength + ); + + // + // MC LL ... + double mcLL = GetMarketHighestHigh( + bar_index, + mcFastLength + ); + + // + // LC HH ... + double lcHH = GetMarketHighestHigh( + bar_index, + lcFastLength + ); + + // + // LC LL ... + double lcLL = GetMarketHighestHigh( + bar_index, + lcFastLength + ); + + // + result.scHH = scHH; + result.scLL = scLL; + result.mcHH = mcHH; + result.mcLL = mcLL; + result.lcHH = lcHH; + result.lcLL = lcLL; + + // + return result; +} +// +// END Data Provider ... +// diff --git a/Packed/XAUUSD-15M/Reports/Screenshot 2023-08-03 202922.png b/Packed/XAUUSD-15M/Reports/Screenshot 2023-08-03 202922.png new file mode 100644 index 0000000000000000000000000000000000000000..98f6bb02157df48ff0190316325ab2ca2f3c938a GIT binary patch literal 107106 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%0De)1S(cEF;8Q;Se3ZRbE|;;c$9r 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©xbW{%`CUR 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 z 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 QPyhe`07*qoM6N<$f_AR^mjD0& literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/Strategy Tester_ x-saherelm.ea.pdf b/Packed/XAUUSD-15M/Reports/Strategy Tester_ x-saherelm.ea.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5041ce965e68656d99c5a25b453e9b7062dfb1e9 GIT binary patch literal 704415 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 {wn1sy@BKU*}369#TzcJ;|` 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 ON(r-P|FA;wg#QN@H6q~v literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/Strategy Tester_ x-saherelm.ea_1.pdf b/Packed/XAUUSD-15M/Reports/Strategy Tester_ x-saherelm.ea_1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ed4eefa5986325c66a4959bc6ed750821d1859f3 GIT binary patch literal 1576414 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

    wWwS#}VAL$SQQ9 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 HeC7WH72=>! literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/StrategyTester X (XR and XXX and XTPW) - 0.2 - Full.gif b/Packed/XAUUSD-15M/Reports/StrategyTester X (XR and XXX and XTPW) - 0.2 - Full.gif new file mode 100644 index 0000000000000000000000000000000000000000..dcdca949254e1e78cd765f700a9080864de17735 GIT binary patch literal 8569 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 literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/StrategyTester X (XR and XXX and XTPW) - 0.2 - Full.htm b/Packed/XAUUSD-15M/Reports/StrategyTester X (XR and XXX and XTPW) - 0.2 - Full.htm new file mode 100644 index 0000000..342d0e7 --- /dev/null +++ b/Packed/XAUUSD-15M/Reports/StrategyTester X (XR and XXX and XTPW) - 0.2 - Full.htm @@ -0,0 +1,445 @@ + + + + Strategy Tester: x-saherelm.ea + + + + + + + +

    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.08 12:30 (2020.01.01 - 2023.08.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=true; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.0002; xShortMaxDrawdownPerTradePercent=0.4; xLongR2R=3; xLongLotsPerTradePercent=0.0002; xLongMaxDrawdownPerTradePercent=0.4; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=true; +enableXRLong=true; +enableXRShort=true; +xRShortR2R=1.5; xRShortLotsPerTradePercent=0.0002; xRShortMaxDrawdownPerTradePercent=0.15; xRLongR2R=1.5; xRLongLotsPerTradePercent=0.0002; xRLongMaxDrawdownPerTradePercent=0.15; xRMaximumCandlesPerTrade=96; xRSwingLength=48; xRSharpDetectionFactor=1350; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=true; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.0002; xTPWShortMaxDrawdownPerTradePercent=0.3; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.0002; xTPWLongMaxDrawdownPerTradePercent=0.3; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63768Ticks modelled73089409Modelling qualityn/a
    Mismatched charts errors905
    Initial deposit1000.00SpreadCurrent (51)
    Total net profit11549.05Gross profit21988.17Gross loss-10439.12
    Profit factor2.11Expected payoff62.43
    Absolute drawdown79.00Maximal drawdown2410.03 (23.15%)Relative drawdown52.81% (1054.29)
    Total trades185Short positions (won %)105 (59.05%)Long positions (won %)80 (58.75%)
    Profit trades (% of total)109 (58.92%)Loss trades (% of total)76 (41.08%)
    Largestprofit trade929.92loss trade-408.85
    Averageprofit trade201.73loss trade-137.36
    Maximumconsecutive wins (profit in money)15 (3323.80)consecutive losses (loss in money)8 (-643.55)
    Maximalconsecutive profit (count of wins)4023.21 (12)consecutive loss (count of losses)-1081.46 (7)
    Averageconsecutive wins4consecutive losses3
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.11.27 06:45sell10.201807.850.001797.08
    22020.11.27 15:09t/p10.201797.080.001797.08215.401215.40
    32020.11.27 15:09sell20.201796.570.001788.89
    42020.11.27 15:36t/p20.201788.890.001788.89153.601369.00
    52020.12.01 19:30buy30.201812.580.001853.94
    62020.12.02 10:39buy40.201824.820.001839.43
    72020.12.02 14:45close40.201817.320.001839.43-150.001219.00
    82020.12.04 09:30buy50.201842.380.001854.80
    92020.12.07 10:38close50.201822.380.001854.80-408.85810.15
    102020.12.07 16:52t/p30.201853.940.001853.94774.121584.28
    112021.01.06 02:00buy60.201950.710.001958.51
    122021.01.06 12:00t/p60.201958.510.001958.51156.001740.28
    132021.01.29 16:54sell70.201865.800.001855.99
    142021.01.29 17:39t/p70.201855.990.001855.99196.201936.48
    152021.02.04 16:00sell80.201808.190.001779.92
    162021.02.05 17:24close80.201808.200.001779.923.921940.40
    172021.02.05 19:15buy90.201814.780.001846.22
    182021.02.08 14:49buy100.201824.180.001843.47
    192021.02.09 09:54t/p100.201843.470.001843.47376.952317.35
    202021.02.09 11:24t/p90.201846.220.001846.22611.112928.46
    212021.02.09 17:45sell110.201841.990.001838.33
    222021.02.09 18:09t/p110.201838.330.001838.3373.203001.66
    232021.02.10 17:00sell120.201841.300.001827.41
    242021.02.11 19:09t/p120.201827.410.001827.41290.173291.83
    252021.02.16 15:15sell130.201811.040.001788.17
    262021.02.16 17:09sell140.201804.040.001801.47
    272021.02.16 18:49t/p140.201801.470.001801.4751.403343.23
    282021.02.16 18:49sell150.201800.960.001767.09
    292021.02.17 01:09t/p130.201788.170.001788.17461.523804.75
    302021.02.19 02:39t/p150.201767.090.001767.09698.014502.76
    312021.02.19 05:15buy160.201769.850.001786.38
    322021.02.19 16:09t/p160.201786.380.001786.38330.604833.36
    332021.02.23 04:00buy170.201813.570.001842.72
    342021.02.23 05:45buy180.201813.260.001827.74
    352021.02.23 11:24close170.201806.070.001842.72-150.004683.36
    362021.02.23 11:24close180.201805.760.001827.74-150.004533.36
    372021.02.23 11:24buy190.201806.260.001820.62
    382021.02.23 16:37close190.201798.760.001820.62-150.004383.36
    392021.03.03 16:51sell200.201712.530.001708.07
    402021.03.03 17:36t/p200.201708.070.001708.0789.204472.56
    412021.03.11 16:48buy210.201719.840.001727.97
    422021.03.11 20:09t/p210.201727.970.001727.97162.604635.16
    432021.03.17 13:48buy220.201728.280.001737.00
    442021.03.17 20:06t/p220.201737.000.001737.00174.404809.56
    452021.04.08 14:00buy230.201746.240.001756.38
    462021.04.08 16:39t/p230.201756.380.001756.38202.805012.36
    472021.04.19 15:15buy240.201775.840.001781.87
    482021.04.21 04:30buy250.201779.820.001788.61
    492021.04.21 04:39t/p240.201781.870.001781.87102.915115.27
    502021.04.21 16:39t/p250.201788.610.001788.61175.805291.07
    512021.04.27 18:24buy260.201778.360.001784.35
    522021.04.28 12:24close260.201763.360.001784.35-308.854982.22
    532021.05.04 23:15sell270.201779.150.001777.35
    542021.05.05 03:24t/p270.201777.350.001777.3540.125022.34
    552021.05.06 18:00buy280.201815.870.001857.41
    562021.05.10 17:45sell290.201839.580.001833.85
    572021.05.11 03:39t/p290.201833.850.001833.85118.725141.07
    582021.05.12 23:21close280.201815.850.001857.41-35.785105.28
    592021.05.13 13:15sell300.201810.390.001791.73
    602021.05.13 15:07close300.201817.890.001791.73-150.004955.28
    612021.05.19 22:00buy310.201863.400.001881.95
    622021.05.20 19:49t/p310.201881.950.001881.95344.465299.74
    632021.06.17 10:30sell320.201809.210.001762.92
    642021.06.18 08:45sell330.201784.490.001777.35
    652021.06.18 15:52t/p330.201777.350.001777.35142.805442.54
    662021.06.18 22:54t/p320.201762.920.001762.92929.926372.47
    672021.07.01 05:00buy340.201771.700.001788.95
    682021.07.02 15:39t/p340.201788.950.001788.95336.156708.62
    692021.07.06 19:07buy350.201794.020.001807.68
    702021.07.07 13:24t/p350.201807.680.001807.68264.356972.97
    712021.07.08 14:00buy360.201817.710.001849.35
    722021.07.08 16:39close360.201810.210.001849.35-150.006822.97
    732021.07.08 18:04buy370.201801.870.001814.59
    742021.07.13 15:30buy380.201813.520.001824.52
    752021.07.13 15:30close380.201806.020.001824.52-150.006672.97
    762021.07.13 15:39t/p370.201814.590.001814.59227.866900.84
    772021.07.13 17:21sell390.201811.750.001808.46
    782021.07.13 20:34t/p390.201808.460.001808.4665.806966.64
    792021.07.14 06:30buy400.201813.380.001826.10
    802021.07.14 08:30buy410.201813.760.001827.05
    812021.07.14 11:30buy420.201814.800.001828.95
    822021.07.14 15:04buy430.201821.020.001839.02
    832021.07.14 15:09t/p400.201826.100.001826.10254.407221.04
    842021.07.14 15:37t/p410.201827.050.001827.05265.807486.84
    852021.07.14 15:39t/p420.201828.950.001828.95283.007769.84
    862021.07.15 17:09close430.201821.010.001839.02-26.747743.10
    872021.07.16 22:30sell440.201810.350.001786.20
    882021.07.19 09:15sell450.201806.190.001789.75
    892021.07.19 16:09close450.201813.690.001789.75-150.007593.10
    902021.07.19 18:15sell460.201807.210.001794.99
    912021.07.19 23:30close440.201811.980.001786.20-28.487564.62
    922021.07.19 23:30sell470.201811.480.001805.66
    932021.07.20 04:04close460.201814.710.001794.99-145.887418.74
    942021.07.20 04:04sell480.201814.210.001812.49
    952021.07.20 05:07close470.201818.980.001805.66-145.887272.86
    962021.07.20 11:09t/p480.201812.490.001812.4934.407307.26
    972021.07.20 18:15sell490.201810.140.001788.26
    982021.07.20 20:30sell500.201810.840.001790.01
    992021.07.21 10:30sell510.201808.770.001801.56
    1002021.07.21 14:03t/p510.201801.560.001801.56144.207451.46
    1012021.07.23 10:54close490.201810.150.001788.2620.417471.87
    1022021.07.23 14:34t/p500.201790.010.001790.01437.217909.08
    1032021.07.29 04:30buy520.201816.130.001850.99
    1042021.07.30 19:52close520.201816.120.001850.99-9.057900.04
    1052021.07.30 21:45sell530.201810.450.001779.33
    1062021.08.02 04:45sell540.201809.440.001783.03
    1072021.08.02 06:30sell550.201811.180.001792.46
    1082021.08.02 19:24close540.201816.940.001783.03-150.007750.04
    1092021.08.02 19:39close530.201817.950.001779.33-145.887604.16
    1102021.08.02 19:39sell560.201817.450.001799.74
    1112021.08.02 19:54close550.201818.680.001792.46-150.007454.16
    1122021.08.03 04:30sell570.201809.740.001795.34
    1132021.08.03 06:15sell580.201810.010.001796.02
    1142021.08.04 05:30close570.201813.380.001795.34-68.687385.48
    1152021.08.04 05:30sell590.201812.880.001810.08
    1162021.08.04 07:15close580.201812.750.001796.02-50.687334.80
    1172021.08.04 14:36close560.201817.460.001799.748.047342.85
    1182021.08.04 15:07close590.201820.380.001810.08-150.007192.85
    1192021.08.04 18:30sell600.201806.630.001769.34
    1202021.08.04 21:45sell610.201810.860.001779.92
    1212021.08.05 08:54sell620.201808.740.001803.00
    1222021.08.05 10:52close600.201814.130.001769.34-137.637055.21
    1232021.08.05 11:37sell630.201809.130.001802.26
    1242021.08.05 16:39sell640.201802.930.001795.96
    1252021.08.05 16:39t/p620.201803.000.001803.00114.807170.01
    1262021.08.05 16:39t/p630.201802.260.001802.26137.407307.41
    1272021.08.06 10:18t/p640.201795.960.001795.96143.527450.94
    1282021.08.06 15:39t/p610.201779.920.001779.92635.298086.22
    1292021.08.17 17:15buy650.201782.620.001787.73
    1302021.08.18 04:09t/p650.201787.730.001787.7393.358179.58
    1312021.08.20 17:39sell660.201781.750.001777.75
    1322021.08.23 02:18t/p660.201777.750.001777.7584.128263.70
    1332021.08.26 13:45buy670.201787.170.001795.30
    1342021.08.26 18:04t/p670.201795.300.001795.30162.608426.30
    1352021.08.27 19:15buy680.201814.880.001860.66
    1362021.08.30 20:15close680.201810.010.001860.66-106.258320.05
    1372021.08.31 04:30buy690.201813.980.001822.79
    1382021.08.31 14:15buy700.201814.230.001820.43
    1392021.08.31 16:06close700.201806.730.001820.43-150.008170.05
    1402021.08.31 16:06close690.201806.480.001822.79-150.008020.05
    1412021.08.31 20:00buy710.201814.290.001832.64
    1422021.09.01 04:30buy720.201812.910.001829.19
    1432021.09.01 11:23sell730.201811.910.001804.44
    1442021.09.01 15:52close730.201819.410.001804.44-150.007870.05
    1452021.09.01 18:19sell740.201812.290.001800.92
    1462021.09.01 21:00close710.201812.490.001832.64-44.857825.21
    1472021.09.02 06:04close720.201812.900.001829.19-26.747798.47
    1482021.09.02 07:30sell750.201811.430.001804.14
    1492021.09.02 17:30sell760.201807.760.001793.92
    1502021.09.03 04:06close740.201812.300.001800.9216.297814.76
    1512021.09.03 04:37sell770.201810.730.001806.97
    1522021.09.03 08:30close750.201811.800.001804.14-3.287811.48
    1532021.09.03 14:07close760.201815.260.001793.92-145.887665.60
    1542021.09.03 14:07sell780.201814.760.001805.79
    1552021.09.03 15:34close770.201818.240.001806.97-150.207515.40
    1562021.09.03 15:36close780.201822.260.001805.79-150.007365.40
    1572021.09.07 13:15sell790.201810.900.001786.66
    1582021.09.07 16:15sell800.201810.490.001785.77
    1592021.09.08 16:54t/p790.201786.660.001786.66488.927854.32
    1602021.09.08 16:54t/p800.201785.770.001785.77498.528352.85
    1612021.10.21 09:45buy810.201786.670.001797.59
    1622021.10.22 15:22t/p810.201797.590.001797.59209.558562.40
    1632021.10.27 18:09sell820.201793.560.001789.11
    1642021.10.28 16:30close820.201808.560.001789.11-287.638274.77
    1652021.11.03 04:00sell830.201783.060.001779.26
    1662021.11.03 08:15t/p830.201779.260.001779.2676.008350.77
    1672021.11.05 18:45buy840.201814.330.001857.76
    1682021.11.10 16:24t/p840.201857.760.001857.76842.069192.83
    1692021.11.22 19:45sell850.201810.200.001755.21
    1702021.11.23 04:15sell860.201807.780.001757.35
    1712021.11.26 09:54close860.201807.790.001757.3520.419213.24
    1722021.11.26 12:03close850.201810.210.001755.2124.539237.77
    1732021.11.30 17:48sell870.201794.770.001781.02
    1742021.11.30 18:04t/p870.201781.020.001781.02275.009512.77
    1752021.12.13 16:49sell880.201785.140.001782.99
    1762021.12.14 10:24t/p880.201782.990.001782.9947.129559.89
    1772021.12.15 04:45sell890.201771.980.001768.80
    1782021.12.15 07:39t/p890.201768.800.001768.8063.609623.49
    1792021.12.15 16:54sell900.201769.740.001766.01
    1802021.12.15 17:39t/p900.201766.010.001766.0174.609698.09
    1812021.12.20 17:01sell910.201793.800.001789.41
    1822021.12.20 22:09t/p910.201789.410.001789.4187.809785.89
    1832021.12.21 16:52buy920.201793.730.001796.76
    1842021.12.22 18:04t/p920.201796.760.001796.7651.759837.65
    1852021.12.27 18:00buy930.201812.980.001827.61
    1862021.12.28 08:00buy940.201813.200.001822.49
    1872021.12.28 17:00buy950.201814.150.001821.35
    1882021.12.28 19:00close930.201810.530.001827.61-57.859779.80
    1892021.12.28 19:00buy960.201811.050.001813.05
    1902021.12.28 20:51close950.201806.650.001821.35-150.009629.80
    1912021.12.28 20:54close940.201805.700.001822.49-150.009479.80
    1922021.12.29 10:07close960.201803.550.001813.05-158.859320.95
    1932021.12.30 19:00buy970.201813.820.001839.85
    1942022.01.03 15:09close970.201813.810.001839.85-17.899303.06
    1952022.01.03 16:00sell980.201806.970.001776.15
    1962022.01.04 17:00close980.201811.720.001776.15-90.889212.18
    1972022.01.04 17:45buy990.201817.010.001844.22
    1982022.01.04 19:30buy1000.201814.590.001838.17
    1992022.01.05 21:09close990.201817.000.001844.22-9.059203.14
    2002022.01.05 21:09close1000.201814.580.001838.17-9.059194.09
    2012022.01.05 22:30sell1010.201810.000.001780.84
    2022022.01.11 08:16close1010.201810.010.001780.8424.539218.62
    2032022.01.11 18:30buy1020.201815.670.001836.03
    2042022.01.13 17:51close1020.201815.660.001836.03-35.589183.04
    2052022.01.18 12:00sell1030.201810.270.001791.81
    2062022.01.18 15:30sell1040.201806.890.001783.36
    2072022.01.18 15:34close1040.201814.390.001783.36-150.009033.04
    2082022.01.18 15:37close1030.201817.770.001791.81-150.008883.04
    2092022.01.18 18:19sell1050.201813.030.001806.19
    2102022.01.19 05:15sell1060.201810.740.001797.05
    2112022.01.19 07:00sell1070.201811.540.001805.36
    2122022.01.19 12:34close1060.201818.240.001797.05-150.008733.04
    2132022.01.19 12:37close1070.201819.040.001805.36-150.008583.04
    2142022.01.19 12:37sell1080.201818.540.001805.81
    2152022.01.19 16:37close1080.201826.040.001805.81-150.008433.04
    2162022.01.19 16:52close1050.201828.030.001806.19-295.888137.16
    2172022.01.27 09:00sell1090.201810.600.001776.66
    2182022.01.27 13:15sell1100.201810.700.001793.86
    2192022.01.27 18:24t/p1100.201793.860.001793.86336.808473.96
    2202022.02.02 17:24close1090.201810.610.001776.6616.298490.25
    2212022.02.04 12:30buy1110.201814.020.001827.67
    2222022.02.04 15:30buy1120.201813.290.001824.06
    2232022.02.04 15:36close1110.201806.520.001827.67-150.008340.25
    2242022.02.04 15:36close1120.201805.780.001824.06-150.208190.05
    2252022.02.07 02:45buy1130.201812.800.001843.33
    2262022.02.07 11:00buy1140.201813.370.001822.93
    2272022.02.07 14:00buy1150.201813.930.001821.18
    2282022.02.07 18:37buy1160.201818.370.001830.55
    2292022.02.07 21:06t/p1150.201821.180.001821.18145.008335.05
    2302022.02.07 21:37t/p1140.201822.930.001822.93191.208526.25
    2312022.02.09 11:30buy1170.201827.790.001831.60
    2322022.02.09 15:07t/p1160.201830.550.001830.55225.918752.16
    2332022.02.09 15:09t/p1170.201831.600.001831.6076.208828.36
    2342022.02.11 20:34t/p1130.201843.330.001843.33557.529385.88
    2352022.02.15 11:19buy1180.201856.870.001866.96
    2362022.02.16 19:19t/p1180.201866.960.001866.96192.959578.84
    2372022.02.18 17:33sell1190.201895.770.001893.21
    2382022.02.18 17:37t/p1190.201893.210.001893.2151.209630.04
    2392022.03.02 18:16sell1200.201921.470.001907.56
    2402022.03.03 13:34close1200.201936.480.001907.56-287.839342.20
    2412022.03.14 08:45sell1210.201975.330.001973.05
    2422022.03.14 09:54t/p1210.201973.050.001973.0545.609387.80
    2432022.04.22 19:22sell1220.201936.790.001932.93
    2442022.04.22 20:28t/p1220.201932.930.001932.9377.209465.00
    2452022.04.26 16:08sell1230.201905.800.001905.21
    2462022.04.26 16:57t/p1230.201905.210.001905.2111.809476.80
    2472022.05.13 16:15sell1240.201802.800.001764.16
    2482022.05.13 17:01close1240.201810.300.001764.16-150.009326.80
    2492022.05.13 19:00sell1250.201808.990.001779.64
    2502022.05.16 02:00sell1260.201810.840.001796.49
    2512022.05.16 03:58close1250.201816.490.001779.64-145.889180.92
    2522022.05.16 06:45sell1270.201809.830.001798.46
    2532022.05.16 10:42t/p1270.201798.460.001798.46227.409408.32
    2542022.05.16 10:43t/p1260.201796.490.001796.49287.009695.32
    2552022.05.18 06:30sell1280.201808.180.001785.79
    2562022.05.18 10:00sell1290.201809.610.001794.63
    2572022.05.18 10:28close1280.201815.680.001785.79-150.009545.32
    2582022.05.18 11:12close1290.201817.110.001794.63-150.009395.32
    2592022.05.18 15:15sell1300.201808.580.001791.15
    2602022.05.18 16:43close1300.201816.090.001791.15-150.209245.12
    2612022.06.10 16:01sell1310.201839.900.001834.17
    2622022.06.10 16:18t/p1310.201834.170.001834.17114.609359.72
    2632022.06.14 19:00sell1320.201810.290.001778.72
    2642022.06.14 21:30sell1330.201810.070.001778.17
    2652022.06.15 04:38close1330.201817.570.001778.17-145.889213.85
    2662022.06.15 05:20close1320.201817.790.001778.72-145.889067.97
    2672022.06.24 05:00sell1340.201823.760.001819.89
    2682022.06.24 16:00t/p1340.201819.890.001819.8977.409145.37
    2692022.06.30 13:45sell1350.201810.240.001792.95
    2702022.06.30 15:37close1350.201817.750.001792.95-150.208995.17
    2712022.06.30 18:00sell1360.201808.930.001784.98
    2722022.06.30 20:00sell1370.201809.760.001787.05
    2732022.07.01 14:39t/p1370.201787.050.001787.05458.329453.49
    2742022.07.01 15:24t/p1360.201784.980.001784.98483.129936.61
    2752022.07.20 16:52sell1380.201708.520.001702.79
    2762022.07.20 19:48t/p1380.201702.790.001702.79114.6010051.21
    2772022.08.01 01:30buy1390.201764.460.001772.38
    2782022.08.01 12:57t/p1390.201772.380.001772.38158.4010209.61
    2792022.08.02 18:02sell1400.201776.930.001767.92
    2802022.08.02 21:02t/p1400.201767.920.001767.92180.2010389.81
    2812022.08.22 14:15buy1410.201735.800.001742.64
    2822022.08.23 11:42t/p1410.201742.640.001742.64127.9510517.77
    2832022.09.05 04:45buy1420.201711.690.001722.31
    2842022.09.06 03:46t/p1420.201722.310.001722.31203.5510721.32
    2852022.09.30 20:35buy1430.201663.070.001667.31
    2862022.10.03 04:30t/p1430.201667.310.001667.3175.9510797.27
    2872022.11.02 21:03sell1440.201647.760.001626.40
    2882022.11.03 10:26t/p1440.201626.400.001626.40439.5711236.84
    2892022.11.15 04:45buy1450.201771.800.001782.63
    2902022.11.15 09:47t/p1450.201782.630.001782.63216.6011453.44
    2912022.11.21 20:30buy1460.201738.320.001753.50
    2922022.11.21 23:45buy1470.201738.430.001742.36
    2932022.11.22 03:06t/p1470.201742.360.001742.3669.7511523.19
    2942022.11.24 02:26t/p1460.201753.500.001753.50259.3711782.56
    2952022.11.30 10:00buy1480.201755.420.001761.93
    2962022.11.30 11:36t/p1480.201761.930.001761.93130.2011912.76
    2972022.11.30 17:18buy1490.201751.830.001763.12
    2982022.11.30 21:20t/p1490.201763.120.001763.12225.8012138.56
    2992022.12.09 17:23buy1500.201791.170.001800.19
    3002022.12.09 18:20t/p1500.201800.190.001800.19180.4012318.96
    3012022.12.13 16:30buy1510.201818.890.001875.11
    3022022.12.13 17:47close1510.201811.390.001875.11-150.0012168.96
    3032022.12.13 18:45buy1520.201813.270.001859.04
    3042022.12.13 19:25close1520.201805.770.001859.04-150.0012018.96
    3052022.12.20 17:15buy1530.201820.840.001871.26
    3062022.12.21 06:43close1530.201813.340.001871.26-158.8511860.12
    3072022.12.21 09:30buy1540.201815.350.001820.14
    3082022.12.21 14:00buy1550.201814.060.001816.91
    3092022.12.21 15:13t/p1550.201816.910.001816.9157.0011917.12
    3102022.12.21 17:07t/p1540.201820.140.001820.1495.8012012.92
    3112022.12.22 16:15sell1560.201807.890.001789.40
    3122022.12.22 20:02t/p1560.201789.400.001789.40369.8012382.72
    3132022.12.27 17:30buy1570.201821.700.001850.34
    3142022.12.27 19:56close1570.201814.190.001850.34-150.2012232.52
    3152022.12.27 20:15buy1580.201814.990.001833.56
    3162022.12.28 03:30buy1590.201814.650.001832.71
    3172022.12.28 09:03close1580.201807.490.001833.56-158.8512073.67
    3182022.12.28 10:08close1590.201807.130.001832.71-150.4011923.27
    3192022.12.29 17:00buy1600.201814.310.001828.76
    3202022.12.29 18:45buy1610.201814.680.001829.68
    3212022.12.30 18:38close1600.201814.300.001828.76-9.0511914.23
    3222023.01.03 01:07t/p1610.201829.680.001829.68273.4612187.69
    3232023.01.11 17:38buy1620.201870.920.001874.91
    3242023.01.11 19:21t/p1620.201874.910.001874.9179.8012267.49
    3252023.01.12 17:10sell1630.201884.680.001867.96
    3262023.01.12 21:05close1630.201899.680.001867.96-300.0011967.49
    3272023.01.20 09:00buy1640.201926.850.001936.66
    3282023.01.20 10:08t/p1640.201936.660.001936.66196.2012163.69
    3292023.02.07 16:32sell1650.201869.860.001868.93
    3302023.02.07 16:45t/p1650.201868.930.001868.9318.6012182.29
    3312023.02.09 17:00sell1660.201879.160.001868.22
    3322023.02.09 18:03t/p1660.201868.220.001868.22218.8012401.09
    3332023.02.24 18:15sell1670.201809.460.001784.47
    3342023.02.24 20:00sell1680.201809.720.001785.12
    3352023.02.24 23:15sell1690.201811.200.001791.97
    3362023.02.27 05:30sell1700.201810.190.001802.03
    3372023.02.27 16:00close1670.201816.960.001784.47-145.8812255.21
    3382023.02.27 16:22close1680.201817.220.001785.12-145.8812109.33
    3392023.02.27 16:22sell1710.201816.720.001801.36
    3402023.02.27 16:23close1700.201817.690.001802.03-150.0011959.33
    3412023.02.27 16:57close1690.201818.700.001791.97-145.8811813.45
    3422023.02.28 10:00sell1720.201810.360.001797.04
    3432023.02.28 12:00sell1730.201810.170.001796.57
    3442023.02.28 16:46close1730.201817.670.001796.57-150.0011663.45
    3452023.02.28 16:47close1720.201817.860.001797.04-150.0011513.45
    3462023.02.28 17:03close1710.201824.220.001801.36-145.8811367.58
    3472023.03.01 04:30buy1740.201829.010.001845.24
    3482023.03.02 20:35sell1750.201835.870.001834.86
    3492023.03.02 20:43t/p1750.201834.860.001834.8620.2011387.78
    3502023.03.03 10:41t/p1740.201845.240.001845.24289.2211676.99
    3512023.03.08 05:15sell1760.201809.930.001774.74
    3522023.03.08 16:32close1760.201817.430.001774.74-150.0011526.99
    3532023.04.25 09:30buy1770.201995.350.002008.13
    3542023.04.26 16:27t/p1770.202008.130.002008.13246.7511773.75
    3552023.04.26 19:17buy1780.201988.980.001995.09
    3562023.04.27 05:12t/p1780.201995.090.001995.0995.6611869.41
    3572023.05.15 17:34sell1790.202016.660.002011.32
    3582023.05.16 09:04t/p1790.202011.320.002011.32110.9211980.33
    3592023.05.26 17:09sell1800.201951.200.001949.72
    3602023.05.26 17:19t/p1800.201949.720.001949.7229.6012009.93
    3612023.06.07 17:32sell1810.201958.950.001947.93
    3622023.06.07 18:50t/p1810.201947.930.001947.93220.4012230.33
    3632023.07.04 17:45buy1820.201928.500.001932.73
    3642023.07.05 16:17t/p1820.201932.730.001932.7375.7512306.08
    3652023.07.13 18:04sell1830.201959.610.001957.54
    3662023.07.13 18:51t/p1830.201957.540.001957.5441.4012347.48
    3672023.07.19 18:12sell1840.201974.940.001970.18
    3682023.07.20 17:35t/p1840.201970.180.001970.18107.5712455.05
    3692023.07.25 15:30sell1850.201958.580.001953.88
    3702023.07.25 17:00t/p1850.201953.880.001953.8894.0012549.05
    +
    diff --git a/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.2.gif b/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.2.gif new file mode 100644 index 0000000000000000000000000000000000000000..6b9c0a9ffd945c23533c09da80afe7b492c4bd66 GIT binary patch literal 7548 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 EA60XC@c;k- literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.2.htm b/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.2.htm new file mode 100644 index 0000000..0f86f87 --- /dev/null +++ b/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.2.htm @@ -0,0 +1,223 @@ + + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.01 23:45 (2020.01.01 - 2023.08.02)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=true; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.0002; xShortMaxDrawdownPerTradePercent=0.4; xLongR2R=3; xLongLotsPerTradePercent=0.0002; xLongMaxDrawdownPerTradePercent=0.4; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=false; +enableXRLong=true; +enableXRShort=true; +xRShortR2R=2; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.01; xRLongR2R=2; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.01; xRMaximumCandlesPerTrade=252; xROscillatorLength=7; xRFastLength=20; xRSlowLength=50; xRRangeMarketLength=50; xRSwingLength=7; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=true; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.0002; xTPWShortMaxDrawdownPerTradePercent=0.3; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.0002; xTPWLongMaxDrawdownPerTradePercent=0.3; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63353Ticks modelled72601176Modelling qualityn/a
    Mismatched charts errors808
    Initial deposit1000.00SpreadCurrent (50)
    Total net profit7795.40Gross profit9684.44Gross loss-1889.04
    Profit factor5.13Expected payoff105.34
    Absolute drawdown601.05Maximal drawdown714.05 (64.16%)Relative drawdown64.16% (714.05)
    Total trades74Short positions (won %)39 (89.74%)Long positions (won %)35 (94.29%)
    Profit trades (% of total)68 (91.89%)Loss trades (% of total)6 (8.11%)
    Largestprofit trade439.57loss trade-409.05
    Averageprofit trade142.42loss trade-314.84
    Maximumconsecutive wins (profit in money)19 (2789.35)consecutive losses (loss in money)1 (-409.05)
    Maximalconsecutive profit (count of wins)2789.35 (19)consecutive loss (count of losses)-409.05 (1)
    Averageconsecutive wins11consecutive losses1
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.12.04 09:30buy10.201842.370.001854.79
    22020.12.07 10:38close10.201822.360.001854.79-409.05590.95
    32021.01.06 02:00buy20.201950.700.001958.50
    42021.01.06 12:00t/p20.201958.500.001958.50156.00746.95
    52021.01.29 16:54sell30.201865.800.001855.99
    62021.01.29 17:39t/p30.201855.990.001855.99196.20943.15
    72021.02.09 17:45sell40.201841.990.001838.33
    82021.02.09 18:09t/p40.201838.330.001838.3373.201016.35
    92021.02.10 17:00sell50.201841.300.001827.41
    102021.02.11 19:09t/p50.201827.410.001827.41290.171306.52
    112021.02.16 17:09sell60.201804.040.001801.47
    122021.02.16 18:49t/p60.201801.470.001801.4751.401357.92
    132021.02.19 05:15buy70.201769.840.001786.37
    142021.02.19 16:09t/p70.201786.370.001786.37330.601688.52
    152021.03.03 16:51sell80.201712.530.001708.07
    162021.03.03 17:36t/p80.201708.070.001708.0789.201777.72
    172021.03.11 16:48buy90.201719.830.001727.97
    182021.03.11 20:09t/p90.201727.970.001727.97162.801940.52
    192021.03.17 13:48buy100.201728.270.001737.00
    202021.03.17 20:06t/p100.201737.000.001737.00174.602115.12
    212021.04.08 14:00buy110.201746.230.001756.37
    222021.04.08 16:39t/p110.201756.370.001756.37202.802317.92
    232021.04.19 15:15buy120.201775.830.001781.86
    242021.04.21 04:39t/p120.201781.860.001781.86102.912420.83
    252021.04.27 18:24buy130.201778.350.001784.35
    262021.04.28 12:24close130.201763.350.001784.35-308.852111.98
    272021.05.04 23:15sell140.201779.150.001777.35
    282021.05.05 03:24t/p140.201777.350.001777.3540.122152.10
    292021.05.10 17:45sell150.201839.580.001833.85
    302021.05.11 03:39t/p150.201833.850.001833.85118.722270.83
    312021.05.19 22:00buy160.201863.390.001881.95
    322021.05.20 19:49t/p160.201881.950.001881.95344.662615.49
    332021.06.18 08:45sell170.201784.490.001777.35
    342021.06.18 15:52t/p170.201777.350.001777.35142.802758.29
    352021.07.01 05:00buy180.201771.690.001788.94
    362021.07.02 15:39t/p180.201788.940.001788.94336.153094.44
    372021.07.06 19:07buy190.201794.010.001807.68
    382021.07.07 13:24t/p190.201807.680.001807.68264.553359.00
    392021.07.08 18:04buy200.201801.860.001814.59
    402021.07.13 15:39t/p200.201814.590.001814.59228.063587.06
    412021.07.13 17:21sell210.201811.750.001808.46
    422021.07.13 20:34t/p210.201808.460.001808.4665.803652.86
    432021.07.14 12:00buy220.201814.410.001822.33
    442021.07.14 15:06t/p220.201822.330.001822.33158.403811.26
    452021.08.17 17:15buy230.201782.610.001787.72
    462021.08.18 04:09t/p230.201787.720.001787.7293.353904.61
    472021.08.20 17:39sell240.201781.750.001777.75
    482021.08.23 02:18t/p240.201777.750.001777.7584.123988.73
    492021.08.26 13:45buy250.201787.160.001795.29
    502021.08.26 18:04t/p250.201795.290.001795.29162.604151.33
    512021.08.31 15:30sell260.201811.860.001809.11
    522021.08.31 16:04t/p260.201809.110.001809.1155.004206.33
    532021.10.21 09:45buy270.201786.660.001797.58
    542021.10.22 15:22t/p270.201797.580.001797.58209.554415.89
    552021.10.27 18:09sell280.201793.560.001789.11
    562021.10.28 16:30close280.201808.560.001789.11-287.634128.25
    572021.11.03 04:00sell290.201783.060.001779.26
    582021.11.03 08:15t/p290.201779.260.001779.2676.004204.25
    592021.11.30 17:48sell300.201794.770.001781.02
    602021.11.30 18:04t/p300.201781.020.001781.02275.004479.25
    612021.12.13 16:49sell310.201785.140.001782.99
    622021.12.14 10:24t/p310.201782.990.001782.9947.124526.38
    632021.12.15 04:45sell320.201771.980.001768.80
    642021.12.15 07:39t/p320.201768.800.001768.8063.604589.98
    652021.12.15 16:54sell330.201769.740.001766.01
    662021.12.15 17:39t/p330.201766.010.001766.0174.604664.58
    672021.12.20 17:01sell340.201793.800.001789.41
    682021.12.20 22:09t/p340.201789.410.001789.4187.804752.38
    692021.12.21 16:52buy350.201793.720.001796.76
    702021.12.22 18:04t/p350.201796.760.001796.7651.954804.33
    712022.01.18 18:19sell360.201813.030.001806.19
    722022.01.19 16:52close360.201828.030.001806.19-295.884508.45
    732022.02.09 11:30buy370.201827.780.001831.59
    742022.02.09 15:09t/p370.201831.590.001831.5976.204584.65
    752022.02.15 11:19buy380.201856.860.001866.95
    762022.02.16 19:19t/p380.201866.950.001866.95192.954777.61
    772022.02.18 17:33sell390.201895.770.001893.21
    782022.02.18 17:37t/p390.201893.210.001893.2151.204828.81
    792022.03.02 18:16sell400.201921.470.001907.56
    802022.03.03 13:34close400.201936.470.001907.56-287.634541.17
    812022.03.14 08:45sell410.201975.330.001973.05
    822022.03.14 09:54t/p410.201973.050.001973.0545.604586.77
    832022.04.22 19:22sell420.201936.790.001932.93
    842022.04.22 20:28t/p420.201932.930.001932.9377.204663.97
    852022.04.26 16:08sell430.201905.800.001905.21
    862022.04.26 16:57t/p430.201905.210.001905.2111.804675.77
    872022.06.10 16:01sell440.201839.900.001834.17
    882022.06.10 16:18t/p440.201834.170.001834.17114.604790.37
    892022.06.24 05:00sell450.201823.760.001819.89
    902022.06.24 16:00t/p450.201819.890.001819.8977.404867.77
    912022.07.20 16:52sell460.201708.520.001702.79
    922022.07.20 19:48t/p460.201702.790.001702.79114.604982.37
    932022.08.01 01:30buy470.201764.450.001772.37
    942022.08.01 12:57t/p470.201772.370.001772.37158.405140.77
    952022.08.02 18:02sell480.201776.930.001767.92
    962022.08.02 21:02t/p480.201767.920.001767.92180.205320.97
    972022.08.22 14:15buy490.201735.790.001742.63
    982022.08.23 11:42t/p490.201742.630.001742.63127.955448.93
    992022.09.05 04:45buy500.201711.680.001722.30
    1002022.09.06 03:46t/p500.201722.300.001722.30203.555652.48
    1012022.09.30 20:35buy510.201663.060.001667.30
    1022022.10.03 04:30t/p510.201667.300.001667.3075.955728.43
    1032022.11.02 21:03sell520.201647.760.001626.40
    1042022.11.03 10:26t/p520.201626.400.001626.40439.576168.00
    1052022.11.15 04:45buy530.201771.790.001782.62
    1062022.11.15 09:47t/p530.201782.620.001782.62216.606384.60
    1072022.11.21 20:30buy540.201738.310.001753.49
    1082022.11.21 23:45buy550.201738.420.001742.35
    1092022.11.22 03:06t/p550.201742.350.001742.3569.756454.35
    1102022.11.24 02:26t/p540.201753.490.001753.49259.376713.72
    1112022.11.30 10:00buy560.201755.410.001761.92
    1122022.11.30 11:36t/p560.201761.920.001761.92130.206843.92
    1132022.11.30 17:18buy570.201751.820.001763.12
    1142022.11.30 21:20t/p570.201763.120.001763.12226.007069.92
    1152022.12.09 17:23buy580.201791.160.001800.19
    1162022.12.09 18:20t/p580.201800.190.001800.19180.607250.52
    1172023.01.11 17:38buy590.201870.910.001874.91
    1182023.01.11 19:21t/p590.201874.910.001874.9180.007330.52
    1192023.01.12 17:10sell600.201884.680.001867.96
    1202023.01.12 21:05close600.201899.680.001867.96-300.007030.52
    1212023.01.20 09:00buy610.201926.840.001936.65
    1222023.01.20 10:08t/p610.201936.650.001936.65196.207226.72
    1232023.02.07 16:32sell620.201869.860.001868.93
    1242023.02.07 16:45t/p620.201868.930.001868.9318.607245.32
    1252023.02.09 17:00sell630.201879.160.001868.22
    1262023.02.09 18:03t/p630.201868.220.001868.22218.807464.12
    1272023.03.01 04:30buy640.201829.000.001845.23
    1282023.03.02 20:35sell650.201835.870.001834.87
    1292023.03.02 20:43t/p650.201834.870.001834.8720.007484.12
    1302023.03.03 10:41t/p640.201845.230.001845.23289.227773.34
    1312023.04.25 09:30buy660.201995.340.002008.12
    1322023.04.26 16:27t/p660.202008.120.002008.12246.758020.09
    1332023.04.26 19:17buy670.201988.970.001995.08
    1342023.04.27 05:12t/p670.201995.080.001995.0895.668115.76
    1352023.05.15 17:34sell680.202016.660.002011.32
    1362023.05.16 09:04t/p680.202011.320.002011.32110.928226.68
    1372023.05.26 17:09sell690.201951.200.001949.72
    1382023.05.26 17:19t/p690.201949.720.001949.7229.608256.28
    1392023.06.07 17:32sell700.201958.950.001947.93
    1402023.06.07 18:50t/p700.201947.930.001947.93220.408476.68
    1412023.07.04 17:45buy710.201928.490.001932.72
    1422023.07.05 16:17t/p710.201932.720.001932.7275.758552.43
    1432023.07.13 18:04sell720.201959.610.001957.54
    1442023.07.13 18:51t/p720.201957.540.001957.5441.408593.83
    1452023.07.19 18:12sell730.201974.940.001970.18
    1462023.07.20 17:35t/p730.201970.180.001970.18107.578701.40
    1472023.07.25 15:30sell740.201958.580.001953.88
    1482023.07.25 17:00t/p740.201953.880.001953.8894.008795.40
    +
    diff --git a/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.4. - 2000$.gif b/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.4. - 2000$.gif new file mode 100644 index 0000000000000000000000000000000000000000..5c72c27450faf2289fdd7da1c386199f0e5fef3c GIT binary patch literal 7574 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 + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.23 17:30 (2020.01.01 - 2023.08.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=true; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.0002; xShortMaxDrawdownPerTradePercent=0.4; xLongR2R=3; xLongLotsPerTradePercent=0.0002; xLongMaxDrawdownPerTradePercent=0.4; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=false; +enableXRLong=true; +enableXRShort=true; +xRShortR2R=1.5; xRShortLotsPerTradePercent=0.0002; xRShortMaxDrawdownPerTradePercent=0.15; xRLongR2R=1.5; xRLongLotsPerTradePercent=0.0002; xRLongMaxDrawdownPerTradePercent=0.15; xRMaximumCandlesPerTrade=96; xRSwingLength=48; xRSharpDetectionFactor=1350; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=true; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.0002; xTPWShortMaxDrawdownPerTradePercent=0.3; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.0002; xTPWLongMaxDrawdownPerTradePercent=0.3; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63774Ticks modelled73094491Modelling qualityn/a
    Mismatched charts errors1102
    Initial deposit2000.00SpreadCurrent (48)
    Total net profit15560.04Gross profit19323.70Gross loss-3763.66
    Profit factor5.13Expected payoff210.27
    Absolute drawdown1204.19Maximal drawdown1430.99 (64.26%)Relative drawdown64.26% (1430.99)
    Total trades74Short positions (won %)39 (89.74%)Long positions (won %)35 (94.29%)
    Profit trades (% of total)68 (91.89%)Loss trades (% of total)6 (8.11%)
    Largestprofit trade887.80loss trade-820.99
    Averageprofit trade284.17loss trade-627.28
    Maximumconsecutive wins (profit in money)19 (5563.67)consecutive losses (loss in money)1 (-820.99)
    Maximalconsecutive profit (count of wins)5563.67 (19)consecutive loss (count of losses)-820.99 (1)
    Averageconsecutive wins11consecutive losses1
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.12.04 09:30buy10.401842.350.001854.77
    22020.12.07 10:38close10.401822.340.001854.77-820.991179.01
    32021.01.06 02:00buy20.401950.680.001958.48
    42021.01.06 12:00t/p20.401958.480.001958.48312.001491.01
    52021.01.29 16:54sell30.401865.800.001855.99
    62021.01.29 17:39t/p30.401855.990.001855.99392.401883.41
    72021.02.09 17:45sell40.401841.990.001838.33
    82021.02.09 18:09t/p40.401838.330.001838.33146.402029.81
    92021.02.10 17:00sell50.401841.300.001827.41
    102021.02.11 19:09t/p50.401827.410.001827.41589.002618.80
    112021.02.16 17:09sell60.401804.040.001801.47
    122021.02.16 18:49t/p60.401801.470.001801.47102.802721.60
    132021.02.19 05:15buy70.401769.820.001786.35
    142021.02.19 16:09t/p70.401786.350.001786.35661.203382.80
    152021.03.03 16:51sell80.401712.530.001708.07
    162021.03.03 17:36t/p80.401708.070.001708.07178.403561.20
    172021.03.11 16:48buy90.401719.810.001727.96
    182021.03.11 20:09t/p90.401727.960.001727.96326.003887.20
    192021.03.17 13:48buy100.401728.250.001737.00
    202021.03.17 20:06t/p100.401737.000.001737.00350.004237.20
    212021.04.08 14:00buy110.401746.210.001756.35
    222021.04.08 16:39t/p110.401756.350.001756.35405.604642.80
    232021.04.19 15:15buy120.401775.810.001781.85
    242021.04.21 04:39t/p120.401781.850.001781.85200.424843.22
    252021.04.27 18:24buy130.401778.330.001781.34
    262021.04.28 12:24close130.401763.330.001781.34-620.594222.63
    272021.05.04 23:15sell140.401779.150.001777.35
    282021.05.05 03:24t/p140.401777.350.001777.3583.134305.76
    292021.05.10 17:45sell150.401839.580.001833.85
    302021.05.11 03:39t/p150.401833.850.001833.85240.334546.09
    312021.05.19 22:00buy160.401863.370.001881.95
    322021.05.20 19:49t/p160.401881.950.001881.95681.425227.52
    332021.06.18 08:45sell170.401784.490.001777.35
    342021.06.18 15:52t/p170.401777.350.001777.35285.605513.12
    352021.07.01 05:00buy180.401771.670.001788.92
    362021.07.02 15:39t/p180.401788.920.001788.92669.416182.52
    372021.07.06 19:07buy190.401793.990.001807.68
    382021.07.07 13:24t/p190.401807.680.001807.68527.016709.53
    392021.07.08 18:04buy200.401801.840.001814.59
    402021.07.13 15:39t/p200.401814.590.001814.59448.227157.76
    412021.07.13 17:21sell210.401811.750.001808.46
    422021.07.13 20:18t/p210.401808.460.001808.46131.607289.36
    432021.07.14 12:00buy220.401814.390.001822.31
    442021.07.14 15:06t/p220.401822.310.001822.31316.807606.16
    452021.08.17 17:15buy230.401782.590.001787.71
    462021.08.18 04:09t/p230.401787.710.001787.71184.217790.36
    472021.08.20 17:39sell240.401781.750.001777.75
    482021.08.23 02:18t/p240.401777.750.001777.75171.137961.50
    492021.08.26 13:45buy250.401787.140.001795.27
    502021.08.26 18:04t/p250.401795.270.001795.27325.208286.70
    512021.08.31 15:30sell260.401811.860.001809.11
    522021.08.31 16:04t/p260.401809.110.001809.11110.008396.70
    532021.10.21 09:45buy270.401786.640.001797.56
    542021.10.22 15:22t/p270.401797.560.001797.56416.218812.90
    552021.10.27 18:09sell280.401793.560.001789.11
    562021.10.28 16:30close280.401808.560.001789.11-566.608246.30
    572021.11.03 04:00sell290.401783.060.001779.26
    582021.11.03 08:15t/p290.401779.260.001779.26152.008398.30
    592021.11.30 17:48sell300.401794.770.001781.02
    602021.11.30 18:04t/p300.401781.020.001781.02550.008948.30
    612021.12.13 16:49sell310.401785.140.001782.99
    622021.12.14 10:24t/p310.401782.990.001782.9997.139045.43
    632021.12.15 04:45sell320.401771.980.001768.80
    642021.12.15 07:39t/p320.401768.800.001768.80127.209172.63
    652021.12.15 16:54sell330.401769.740.001766.01
    662021.12.15 17:39t/p330.401766.010.001766.01149.209321.83
    672021.12.20 17:01sell340.401793.800.001789.41
    682021.12.20 22:09t/p340.401789.410.001789.41175.609497.43
    692021.12.21 16:52buy350.401793.700.001796.75
    702021.12.22 18:04t/p350.401796.750.001796.75101.419598.84
    712022.01.18 18:19sell360.401813.030.001806.19
    722022.01.19 16:52close360.401828.030.001806.19-588.879009.97
    732022.02.09 11:30buy370.401827.760.001831.57
    742022.02.09 15:09t/p370.401831.570.001831.57152.409162.37
    752022.02.15 11:19buy380.401856.840.001866.94
    762022.02.16 19:10t/p380.401866.940.001866.94383.419545.78
    772022.02.18 17:33sell390.401895.770.001893.21
    782022.02.18 17:37t/p390.401893.210.001893.21102.409648.18
    792022.03.02 18:16sell400.401921.470.001907.56
    802022.03.03 13:34close400.401936.470.001907.56-566.609081.58
    812022.03.14 08:45sell410.401975.330.001973.05
    822022.03.14 09:54t/p410.401973.050.001973.0591.209172.78
    832022.04.22 19:22sell420.401936.790.001932.93
    842022.04.22 20:28t/p420.401932.930.001932.93154.409327.18
    852022.04.26 16:08sell430.401905.800.001905.21
    862022.04.26 16:57t/p430.401905.210.001905.2123.609350.78
    872022.06.10 16:01sell440.401839.900.001834.17
    882022.06.10 16:18t/p440.401834.170.001834.17229.209579.98
    892022.06.24 05:00sell450.401823.760.001819.89
    902022.06.24 16:00t/p450.401819.890.001819.89154.809734.78
    912022.07.20 16:52sell460.401708.520.001702.79
    922022.07.20 19:48t/p460.401702.790.001702.79229.209963.98
    932022.08.01 01:30buy470.401764.430.001772.35
    942022.08.01 12:57t/p470.401772.350.001772.35316.8010280.78
    952022.08.02 18:02sell480.401776.930.001767.92
    962022.08.02 21:02t/p480.401767.920.001767.92360.4010641.18
    972022.08.22 14:15buy490.401735.770.001742.61
    982022.08.23 11:42t/p490.401742.610.001742.61253.0110894.18
    992022.09.05 04:45buy500.401711.660.001722.28
    1002022.09.06 03:46t/p500.401722.280.001722.28404.2111298.39
    1012022.09.30 20:35buy510.401663.040.001667.29
    1022022.10.03 04:30t/p510.401667.290.001667.29149.4111447.80
    1032022.11.02 21:03sell520.401647.760.001626.40
    1042022.11.03 10:26t/p520.401626.400.001626.40887.8012335.60
    1052022.11.15 04:45buy530.401771.770.001782.60
    1062022.11.15 09:47t/p530.401782.600.001782.60433.2012768.80
    1072022.11.21 20:30buy540.401738.290.001753.47
    1082022.11.21 23:45buy550.401738.400.001742.33
    1092022.11.22 03:06t/p550.401742.330.001742.33136.6112905.40
    1102022.11.24 02:26t/p540.401753.470.001753.47504.2413409.64
    1112022.11.30 10:00buy560.401755.390.001761.90
    1122022.11.30 11:36t/p560.401761.900.001761.90260.4013670.04
    1132022.11.30 17:18buy570.401751.800.001763.12
    1142022.11.30 21:20t/p570.401763.120.001763.12452.8014122.84
    1152022.12.09 17:23buy580.401791.140.001800.19
    1162022.12.09 18:20t/p580.401800.190.001800.19362.0014484.84
    1172023.01.11 17:38buy590.401870.890.001874.90
    1182023.01.11 19:16t/p590.401874.900.001874.90160.4014645.24
    1192023.01.12 17:10sell600.401884.680.001867.96
    1202023.01.12 21:05close600.401899.680.001867.96-600.0014045.24
    1212023.01.20 09:00buy610.401926.820.001936.63
    1222023.01.20 10:08t/p610.401936.630.001936.63392.4014437.64
    1232023.02.07 16:32sell620.401869.860.001868.93
    1242023.02.07 16:45t/p620.401868.930.001868.9337.2014474.84
    1252023.02.09 17:00sell630.401879.160.001868.22
    1262023.02.09 18:03t/p630.401868.220.001868.22437.6014912.44
    1272023.03.01 04:30buy640.401828.980.001845.21
    1282023.03.02 20:35sell650.401835.870.001834.89
    1292023.03.02 20:43t/p650.401834.890.001834.8939.2014951.64
    1302023.03.03 10:41t/p640.401845.210.001845.21566.8315518.48
    1312023.04.25 09:30buy660.401995.320.002008.10
    1322023.04.26 16:27t/p660.402008.100.002008.10490.6116009.08
    1332023.04.26 19:17buy670.401988.950.001995.07
    1342023.04.27 05:12t/p670.401995.070.001995.07183.0216192.11
    1352023.05.15 17:34sell680.402016.660.002011.32
    1362023.05.16 09:04t/p680.402011.320.002011.32224.7316416.84
    1372023.05.26 17:09sell690.401951.200.001949.72
    1382023.05.26 17:19t/p690.401949.720.001949.7259.2016476.04
    1392023.06.07 17:32sell700.401958.950.001947.93
    1402023.06.07 18:50t/p700.401947.930.001947.93440.8016916.84
    1412023.07.04 17:45buy710.401928.470.001932.70
    1422023.07.05 16:17t/p710.401932.700.001932.70148.6117065.45
    1432023.07.13 18:04sell720.401959.610.001957.54
    1442023.07.13 18:51t/p720.401957.540.001957.5482.8017148.25
    1452023.07.19 18:12sell730.401974.940.001970.18
    1462023.07.20 17:35t/p730.401970.180.001970.18223.8017372.04
    1472023.07.25 15:30sell740.401958.580.001953.88
    1482023.07.25 17:00t/p740.401953.880.001953.88188.0017560.04
    +
    diff --git a/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.4. - 2000$.pdf b/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.4. - 2000$.pdf new file mode 100644 index 0000000000000000000000000000000000000000..106e21b207b33e5d9e21b8e4693e81bf3b413bf4 GIT binary patch literal 708166 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

    JhNp}N~>dE6A<{0X$!0JEnP_${7I{W z_Kv4pV_T;f{yAV=Q=PHlS3r9Y{TM|W3psJlm;WFG`KfR}K@C$tJIC^xtV_(k?QQzQ zIaXOCvS&FlqWaGlQeW5eC|Q&H@$n6i$lUor9d(YW z_G$g#8$meFy)Z0nLN&b8MI^kjE1%6u1McxK#Rh+R2zsz>@B>7R7~&98IPygRxf_~T1nEy5u}J(FL<5lhKNV`pZ~y=R literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.75. - 3000$.htm b/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.75. - 3000$.htm new file mode 100644 index 0000000..d64361d --- /dev/null +++ b/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.75. - 3000$.htm @@ -0,0 +1,227 @@ + + + + Strategy Tester: x-saherelm.ea + + + + + + + +

    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.23 18:45 (2020.01.01 - 2023.08.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=true; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00025; xShortMaxDrawdownPerTradePercent=0.45; xLongR2R=3; xLongLotsPerTradePercent=0.00025; xLongMaxDrawdownPerTradePercent=0.45; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=false; +enableXRLong=true; +enableXRShort=true; +xRShortR2R=1.5; xRShortLotsPerTradePercent=0.0002; xRShortMaxDrawdownPerTradePercent=0.15; xRLongR2R=1.5; xRLongLotsPerTradePercent=0.0002; xRLongMaxDrawdownPerTradePercent=0.15; xRMaximumCandlesPerTrade=96; xRSwingLength=48; xRSharpDetectionFactor=1350; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=true; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00025; xTPWShortMaxDrawdownPerTradePercent=0.3; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00025; xTPWLongMaxDrawdownPerTradePercent=0.3; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test64805Ticks modelled74347108Modelling qualityn/a
    Mismatched charts errors908
    Initial deposit3000.00SpreadCurrent (48)
    Total net profit23928.07Gross profit34457.02Gross loss-10528.94
    Profit factor3.27Expected payoff314.84
    Absolute drawdown2107.86Maximal drawdown2667.00 (15.33%)Relative drawdown73.95% (2533.11)
    Total trades76Short positions (won %)39 (87.18%)Long positions (won %)37 (83.78%)
    Profit trades (% of total)65 (85.53%)Loss trades (% of total)11 (14.47%)
    Largestprofit trade1664.62loss trade-1389.36
    Averageprofit trade530.11loss trade-957.18
    Maximumconsecutive wins (profit in money)19 (10431.88)consecutive losses (loss in money)1 (-1389.36)
    Maximalconsecutive profit (count of wins)10431.88 (19)consecutive loss (count of losses)-1389.36 (1)
    Averageconsecutive wins7consecutive losses1
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.12.04 09:30buy10.751842.350.001854.77
    22020.12.07 10:37close10.751824.340.001854.77-1389.361610.64
    32021.01.06 02:00buy20.751950.680.001958.48
    42021.01.06 12:00t/p20.751958.480.001958.48585.002195.64
    52021.01.29 16:54sell30.751865.800.001855.99
    62021.01.29 17:39t/p30.751855.990.001855.99735.752931.39
    72021.02.09 17:45sell40.751841.990.001838.33
    82021.02.09 18:09t/p40.751838.330.001838.33274.503205.89
    92021.02.10 17:00sell50.751841.300.001827.41
    102021.02.11 19:09t/p50.751827.410.001827.411104.374310.26
    112021.02.16 17:09sell60.751804.040.001801.47
    122021.02.16 18:49t/p60.751801.470.001801.47192.754503.01
    132021.02.19 05:15buy70.751769.820.001786.35
    142021.02.19 16:09t/p70.751786.350.001786.351239.755742.76
    152021.03.03 16:51sell80.751712.530.001708.07
    162021.03.03 17:36t/p80.751708.070.001708.07334.506077.26
    172021.03.11 16:48buy90.751719.810.001727.96
    182021.03.11 20:09t/p90.751727.960.001727.96611.256688.51
    192021.03.17 13:48buy100.751728.250.001737.00
    202021.03.17 20:06t/p100.751737.000.001737.00656.257344.76
    212021.04.08 14:00buy110.751746.210.001756.35
    222021.04.08 16:39t/p110.751756.350.001756.35760.508105.26
    232021.04.19 15:15buy120.751775.810.001781.85
    242021.04.20 12:39close120.751763.810.001781.85-938.617166.65
    252021.04.21 04:30buy130.751779.790.001788.58
    262021.04.21 16:39t/p130.751788.580.001788.58659.257825.90
    272021.04.27 18:24buy140.751778.330.001781.34
    282021.04.28 04:33close140.751766.330.001781.34-938.616887.29
    292021.05.04 23:15sell150.751779.150.001777.35
    302021.05.05 03:24t/p150.751777.350.001777.35155.877043.16
    312021.05.10 17:45sell160.751839.580.001833.85
    322021.05.11 03:39t/p160.751833.850.001833.85450.627493.78
    332021.05.19 22:00buy170.751863.370.001881.95
    342021.05.20 19:49t/p170.751881.950.001881.951277.678771.45
    352021.06.18 08:45sell180.751784.490.001777.35
    362021.06.18 15:52t/p180.751777.350.001777.35535.509306.95
    372021.07.01 05:00buy190.751771.670.001788.92
    382021.07.02 15:39t/p190.751788.920.001788.921255.1410562.09
    392021.07.06 19:07buy200.751793.990.001807.68
    402021.07.07 13:24t/p200.751807.680.001807.68988.1411550.23
    412021.07.08 18:04buy210.751801.840.001814.59
    422021.07.13 15:39t/p210.751814.590.001814.59840.4212390.65
    432021.07.13 17:21sell220.751811.750.001808.46
    442021.07.13 20:18t/p220.751808.460.001808.46246.7512637.40
    452021.07.14 12:00buy230.751814.390.001822.31
    462021.07.14 15:06t/p230.751822.310.001822.31594.0013231.40
    472021.08.17 17:15buy240.751782.590.001787.71
    482021.08.18 04:09t/p240.751787.710.001787.71345.3913576.79
    492021.08.20 17:39sell250.751781.750.001777.75
    502021.08.23 02:18t/p250.751777.750.001777.75320.8713897.67
    512021.08.26 13:45buy260.751787.140.001795.27
    522021.08.26 18:04t/p260.751795.270.001795.27609.7514507.42
    532021.08.31 15:30sell270.751811.860.001809.11
    542021.08.31 16:04t/p270.751809.110.001809.11206.2514713.67
    552021.10.21 09:45buy280.751786.640.001797.56
    562021.10.22 15:22t/p280.751797.560.001797.56780.3915494.06
    572021.10.27 18:09sell290.751793.560.001789.11
    582021.10.28 15:22close290.751805.560.001789.11-837.3814656.67
    592021.11.03 04:00sell300.751783.060.001779.26
    602021.11.03 08:15t/p300.751779.260.001779.26285.0014941.67
    612021.11.30 17:48sell310.751794.770.001781.02
    622021.11.30 18:04t/p310.751781.020.001781.021031.2515972.92
    632021.12.13 16:49sell320.751785.140.001782.99
    642021.12.14 10:24t/p320.751782.990.001782.99182.1216155.05
    652021.12.15 04:45sell330.751771.980.001768.80
    662021.12.15 07:39t/p330.751768.800.001768.80238.5016393.54
    672021.12.15 16:54sell340.751769.740.001766.01
    682021.12.15 17:39t/p340.751766.010.001766.01279.7516673.29
    692021.12.20 17:01sell350.751793.800.001789.41
    702021.12.20 22:09t/p350.751789.410.001789.41329.2517002.54
    712021.12.21 16:52buy360.751793.700.001796.75
    722021.12.22 18:04t/p360.751796.750.001796.75190.1417192.68
    732022.01.18 18:19sell370.751813.030.001806.19
    742022.01.19 15:31close370.751825.030.001806.19-879.1316313.56
    752022.02.09 11:30buy380.751827.760.001831.57
    762022.02.09 15:09t/p380.751831.570.001831.57285.7516599.31
    772022.02.15 11:19buy390.751856.840.001866.94
    782022.02.15 14:24close390.751844.830.001866.94-900.7515698.56
    792022.02.18 17:33sell400.751895.770.001893.21
    802022.02.18 17:37t/p400.751893.210.001893.21192.0015890.56
    812022.03.02 18:16sell410.751921.470.001907.56
    822022.03.02 22:09close410.751933.480.001907.56-900.7514989.81
    832022.03.14 08:45sell420.751975.330.001973.05
    842022.03.14 09:54t/p420.751973.050.001973.05171.0015160.81
    852022.04.22 19:22sell430.751936.790.001932.93
    862022.04.22 20:28t/p430.751932.930.001932.93289.5015450.31
    872022.04.26 16:08sell440.751905.800.001905.21
    882022.04.26 16:57t/p440.751905.210.001905.2144.2515494.56
    892022.06.10 16:01sell450.751839.900.001834.17
    902022.06.10 16:18t/p450.751834.170.001834.17429.7515924.31
    912022.06.24 05:00sell460.751823.760.001819.89
    922022.06.24 16:00t/p460.751819.890.001819.89290.2516214.56
    932022.07.20 16:52sell470.751708.520.001702.79
    942022.07.20 19:48t/p470.751702.790.001702.79429.7516644.31
    952022.08.01 01:30buy480.751764.430.001772.35
    962022.08.01 12:57t/p480.751772.350.001772.35594.0017238.31
    972022.08.02 18:02sell490.751776.930.001767.92
    982022.08.02 21:02t/p490.751767.920.001767.92675.7517914.06
    992022.08.22 14:15buy500.751735.770.001742.61
    1002022.08.23 11:42t/p500.751742.610.001742.61474.3918388.45
    1012022.09.05 04:45buy510.751711.660.001722.28
    1022022.09.06 03:46t/p510.751722.280.001722.28757.8919146.34
    1032022.09.30 20:35buy520.751663.040.001667.29
    1042022.10.03 04:30t/p520.751667.290.001667.29280.1419426.48
    1052022.11.02 21:03sell530.751647.760.001626.40
    1062022.11.03 10:26t/p530.751626.400.001626.401664.6221091.09
    1072022.11.15 04:45buy540.751771.770.001782.60
    1082022.11.15 09:47t/p540.751782.600.001782.60812.2521903.34
    1092022.11.21 20:30buy550.751738.290.001753.47
    1102022.11.21 23:45buy560.751738.400.001742.33
    1112022.11.22 03:06t/p560.751742.330.001742.33256.1422159.48
    1122022.11.24 02:26t/p550.751753.470.001753.47945.4523104.93
    1132022.11.30 10:00buy570.751755.390.001761.90
    1142022.11.30 11:36t/p570.751761.900.001761.90488.2523593.18
    1152022.11.30 17:18buy580.751751.800.001763.12
    1162022.11.30 21:20t/p580.751763.120.001763.12849.0024442.18
    1172022.12.09 17:23buy590.751791.140.001800.19
    1182022.12.09 18:20t/p590.751800.190.001800.19678.7525120.93
    1192023.01.11 17:38buy600.751870.890.001874.90
    1202023.01.11 19:16t/p600.751874.900.001874.90300.7525421.68
    1212023.01.12 17:10sell610.751884.680.001867.96
    1222023.01.12 19:28close610.751896.680.001867.96-900.0024521.68
    1232023.01.20 09:00buy620.751926.820.001936.63
    1242023.01.20 10:08t/p620.751936.630.001936.63735.7525257.43
    1252023.02.07 16:32sell630.751869.860.001868.93
    1262023.02.07 16:45t/p630.751868.930.001868.9369.7525327.18
    1272023.02.09 17:00sell640.751879.160.001868.22
    1282023.02.09 18:03t/p640.751868.220.001868.22820.5026147.68
    1292023.03.01 04:30buy650.751828.980.001845.21
    1302023.03.02 20:35sell660.751835.870.001834.89
    1312023.03.02 20:43t/p660.751834.890.001834.8973.5026221.18
    1322023.03.03 10:41t/p650.751845.210.001845.211062.8127283.99
    1332023.04.25 09:30buy670.751995.320.002008.10
    1342023.04.25 14:57close670.751977.310.002008.10-1350.7525933.24
    1352023.04.26 19:17buy680.751988.950.001995.07
    1362023.04.27 05:12t/p680.751995.070.001995.07343.1726276.41
    1372023.05.15 17:34sell690.752016.660.002011.32
    1382023.05.16 09:04t/p690.752011.320.002011.32421.3726697.79
    1392023.05.26 17:09sell700.751951.200.001949.72
    1402023.05.26 17:19t/p700.751949.720.001949.72111.0026808.79
    1412023.06.07 17:32sell710.751958.950.001947.93
    1422023.06.07 18:50t/p710.751947.930.001947.93826.5027635.29
    1432023.07.04 17:45buy720.751928.470.001932.70
    1442023.07.05 16:17t/p720.751932.700.001932.70278.6427913.93
    1452023.07.13 18:04sell730.751959.610.001957.54
    1462023.07.13 18:51t/p730.751957.540.001957.54155.2528069.18
    1472023.07.19 18:12sell740.751974.940.001970.18
    1482023.07.20 06:09close740.751986.950.001970.18-838.1327231.04
    1492023.07.25 15:30sell750.751958.580.001953.88
    1502023.07.25 17:00t/p750.751953.880.001953.88352.5027583.54
    1512023.08.14 06:15buy760.751912.540.001917.46
    1522023.08.16 11:45close760.751904.830.001917.46-655.4726928.07
    +
    diff --git a/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.75. - 3000$.pdf b/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full - 0.75. - 3000$.pdf new file mode 100644 index 0000000000000000000000000000000000000000..77789fed1498ea9d4ce1f86884c0aee92c5c7e79 GIT binary patch literal 724327 zcmagF1z1#3*ES4FgM=Vm5(3hV)JT_D04b!H#vRV1ZZIoWtH=*RbVRxmiJIjBLVHW=I5E zCN3Z+YDPtnmo*S*!p_UaL9NfIWo>T`a(AXyQm5wRVB-*?hIjDs2vK|R@#r&Ai#a#| zEwn656|7y@dAa%7xcT6>D9EZSzGI;VTH9Js%UGD%g5U!sJ~)BwEZ8|Y`Pkr6;F8r$ zEKQuO|J}rd!LH&2GIuqzfX}aHYi+^~SCiTfJ{tbXqhi(|dr1=)3u;D5K`st1ZVmx1 zZY~ZUZjLw192^YrANV*$koo^UL{t>R0&Wc4T<-sxZDvBviNP+eNX@PUaoU8n^x*rlz3E^yn~rGaoG zB`wTA=5Vp^EbOh|a{0J;ctu62on7Dn*!l>vcMQ{qrCB@YBr!m@&tb!yEpvRzFcF)UrG|p4fyUW=qxyq- zt~FSva?(m&uV^mc6>pI3mD-i>!Ij+&bm_NnmviC8by!L2%1x89PTgcp+*=B)rr~?2 z{j)9C{_Q_=!uypOg6p+1PqP%ZJ{B}yxog%g_RT#FjJS0BRvpv$qK*nswYETEJwa+- zeaTiMEg7_MH1&phpVzp)Xp)&oxFl;Ruo5s?%`RkMEQa@s$M?W_&jnw zg?*#(P4unM_3XI!Mi;8&AvSi%vB(Qgirk~augd{XYpX{`rLh+UVxC%C7C53;>r7W) z)SY^~)t-)9&}Z)+ZtsR^`0lJT*SgswTCX+BVPXOL zG~OssNKJ>GlyXhGuh|~YtQ;sQ(QF%QZqHJvpxp}NiwLbSnJ9fL?u@Ucnv_Ru;o*0+ z4_lDMCCJek+tWM0!>m5N*_0QTlvGP63Kg^m@@q3Cvlp7X_BaU__1=+~-p>ShHb{Zn zJq$`BrFPRr?FmKlLdn7{ zsGyY;#y={vZiGO*y8p6PmQ_bT&&r&BNadem+7?$eQ z60-(MCz=7)jH7Mx+==KNg?v6D@@FIaY1yGg4?-^lNW$%~vzILA-}{m#)i${R%e1r| z0wH)~cZyWcm{~07!SHVat<3cn-VEjQ?^_o9mKlPQ2v6!v0bU+&W85W0o@Y+K8L!Ej zqh$Q(yGkK2R4dxAwUv0O=H2cv(kfm+_Ogv8b@8L32$-w5^LtDCS{&c=eQ|H*USPClBQg%|sq!Dh7N-6ZxYivf5ojQB?V&;}hBR3lH6 zG6vgl@&*9#O8{qy_8Jx;WPW>Og=_NXC?&P9?4}E8hdUyTh+gvfE^0Tn6v8v35Uc8h zZLkWJ#cC2~`6wvn_xvQ!m>l3%j89<>A(4>;V?`Q!{MVbOV(%b#rdTg>xMoAjaq}*X()lZw0y9`o9(v1Of%( z;HD{Amp0L9XvA*$VNz}2(!7qFZwL?t0YOx1kDs&`y1_zC8r-=j97NS=<2TTBgW`1+ z1|~G1^4TbG0na8gC=kpa}&r8<{GHZxzc9vh$(?3ucIXC!FV z(_RUjgw54=fjJm%zl1!ssv-eAG}z?*J??4Yty+Ym;(0qKJ?V89^`8L^d?&4Iy*x~C z^B;Fa1cYfeW}`QN)>z(p-nP+`Fl4dsA__V%&e|2R>f6zSn|Dj&NC?Zx^J>!kAfMNn z3DHTS>UaVvBDTB>3hgeMBB-2LFP}gh1N`+fm?j9 zi^=}^A8Ze9+mClB0rnlVv;Ie&tYLPcli`cUa;4%)8MM=zfH)X~1s%bEN7h1HJV5OG zk5~kRVqS#cP4rVU9h_Un3eU@gOa)3 z52|>LlRN|$Gte(#F2MEASLB4ASj=jFP5Xfu(|?TDN$v8+SHmX@Y{=h5TCj* zDDw!E)oFWDe}7>XcpMr)eeMi}3K|%)ELLeJblMM;3J?l=@YTmc|I}dCJ<_{3wZ!&N ztR$^pzIY^cp}Y}_lKnxrIbATwXtd{5+5)I{O#67bk(mF{`9?!o#|0d2Gop~ayEU=z zLb!Yl9#k)jt*dm7mv0&tu@Iu8vN<-JxCq4Q&=j#ON3B?}El=Q1(GKMZEyYF2zUkPX z9kk0wvy6G@^ydh*!$ZoxWZ7V~ieTr9D%<4ldaxw@KbAy|M48VOWx*<-Pf!cZAEOLP zf1M@|NxK}dggi9w)2KlM`y4+%=u=B>gdc{EQY3C~{~@tKn`}b$4JQB_@uE#WXz;zhTK^{v^IWEDI@Z{2 zLF?}LX!>7RC9Nrw_1;1^p8G-PA8mLWu#RT-gOG^>?S=Mp1ZsR55?pwYJaGE0(>E?^ z`Ty4jq01=AD#bs;!&!6xWNlq4x3siR-`?Czo&WPs3dFhHQAZbU0oC77sfyhp;_wgp zC-Mh@B$x4I1EspC z%atvo?I@J&ft@?Znf`T?v(XuxYc>J~sdsIHI3U)Rkcad@#liW7br_4xF3S~i10A&J z%AX6%0wlB(1s64FY!!Qxel{N##aa#Dj7S`z^ycqhrNh6cJX#_)%5 zsFuoyN=d9?;;(CZQ!`2*IBFPK9CM|KaB1ypuA}Sy zv^?mLfOE+QO0M%k?w+2m=84ggj*#I41MbeEtg5YWi$UF0Q_l8k@MHvthqcyJ(_NNK z^IOV&pl@kYFpPP=yS25{3SMqT7-F&DwwsCg@ZuulqG-7hL<3KwNk_0hHOu`6aX#*% zr?;aWdxDtuk9yFMFX>fFXUc#bP>%29iA>knM}XY?tjZny$qVPk zg4+)&aufD@6BJea69rSpbKlk(j_>f&)dO4Zj+Nh(D!;j7A4Kn|8@9SHR+O}_@r5t4 z<$b>`fBg1XgB- z_(0C2Wh1+{z}$z)hQZ_y2^EG1D|p3NKPLJR#bJ+0m8yf+48fo2Z^U{$HNiqSM)^z4 zeCjWV2#N6g2VW~-br9>WY3OX&!%_-Pe4r+H?g(`F_-x7WXo>T^4g<6M$fIb80t9u? z^2c05Fg!V>J?g$9a7_je-{HSY1vz3N7J|wXWR#avX(#3TSqW_zB@d$EwWQz77uZiI ze{Xkq(cd2MLr*fa-s&}G;oqL}hnOWNpNc|6kbgxQ%vNx8rVKoBx-If3`JP1e8L)M9 zY1$v_zaeXZ;D5S2R>PA8UW<0vl z1pmP(ioYv3OnE8hU%Py8(2yK{*SH#6vLrfDgy|9YRrabsE2m< z;Jp2(T1kiqZgP)FTZP~~34(FoUkcFULPSH2Q4pr-|ANDRel|UzuBi?W#)sy754SJ? z%1<-H0(<_q7OcLt;D(MtFd5hYhL6?E!=n+r7zyvGHAg`BE0vi#8D5I8ay_J1CtA3v zDyk2>(s>S>YZs{WySEO~d3o?y)eOTjjriuWz}pIu_-DhZ7hB1F5RbdRCbFLlST>(T z^;PJ!<0M{a8S3>J8iHT_M+^80e%W`<$Scy)dVgl>Y^$`5gkX&NIDg^0#otQKX4ck2*o2_;3AR^Q>iWFi;VG*fTz4VcO0;Y>$3^UMm(vL@F+pXdKC1Az_VBX(i)DO!4!2FH1F%|>_Y=uYnPKwbzML>9r zss0Fccq#n4^RYniI`)NHv-I_zae&yN zqG{J>T3V{5@+K1zdR(^b`9%ksV_B(g9chN#_skI+e;!izBXdhyHgCy-1y5KqhwPd5 z-R&}Zi)46bN*V#^cVzqucLT+HQ-A$D+@1>dP&y;2)9o@{kQ=;=-*T&(NqvY|gh5kA zG}p6fS`Xg(!|ak5y|KgA`R{!RJ03o=U__HDrzdOpvHzw%rS{vimvAusuh0TVoD;eH z=yk5VQ!jGIhpeRK<&_R^R)?Xj3V%HVRlLI_|2AvSr)SjwW%M|buds<%3_jak@ zf0b%ig)?Vnt_2do^*~VnkVp7-Uc=eruK~v=K{NIo8392vw}#qFL+KXAr=v-vNv zZ>HdRsLP_|jecF4S$Sis1I{U-5-7nfz>6s(rS_FQry`UQdy{?9_k=8) z@LC-H#3Q*n>a1Uq+5LsxKK7dJZ@iwJCGCI|wHI@=c||pc98o^&FvA~$-a63hh=ko} zQ?U4z$-}>@lyIQJEiPmiDAqpmPR$U1F8u=-B?4(52>@JM|r|Ey>!zji8X%Qc@DO%sLE)AFg@q%pKFlVE-<`69c5P+(W17${SCeya2QVEkl@?C_A1V+Q~chRn2i zso$LW+_x;ObT8Teg6Pa{?I_rLD4!Z_}4 zD)-8NZ46Jqtg_Dxf{}(sAxN^5z{JZu?>e#FNwoVe+p+7jL4S8$dWk#rHl>wcVWO{1 z+L)1EgX=EQF_jlYYXMVa^_K;(ThI2cUniSI_d9b1d&-NVc&cNU==X(pum&cJ8tZzg zQz-arshadaGNWgWr=QEfcsp{FK9ya)Yshr9>iZhEgP&!l-PIgN1Ni(0<*)WW(ZWU{P)#W}1fIZS~oA>L+t&fO8{sVxH3{FuIy@YBvYT$d}*%i7H-wFwZnurnb z@5>9w;a2fE>PY!{Y&k5d?Nbu|<6PO;3=_7vXIrE^&6|P%Y5l@-&!0=OZ+>zGr8~~E zNDM#sT-v(Rb||fnqfHap`<*s4me6j>(Hz&}yNb-<>p9m83_2C-`Q`rg`DTkD=Xkp1 z5}3jD4&nlK6dw4dGzpxvi$1>xmnEVL2Cv`4-iF2PU+>(UU4A9`9W@$=-`1XU0isRg z&02WhmUC036N!U-Aa=H1I(h;CFl?RFi+(Dw$t!E0EXXLgO{LR*cL+x-8(?(jQVgd{ z0Knk<5QAN(tzae#{~drCUZ}+>W1R0P`}$m#dC6Xk(oItTx`k=q|B6a?^QJq32|=;? zlvTjJV%5JlV~u!6Dz{Fp1OWeYL*U=$!15V{3TV;K|FBQ;Z@=N+j>((?$J zlOLM4YH(08W18}4inWavw1M9+?!ifX(7UNucjL&OH+M(u;FcO9X0io?TA~;4))L;Y z=IEQvUT3vIZkE_#C+tbEh^#*m6${{eu8G?Op zR;+wal8j&{G$``jQnS)z^xqm~J#Q|qlBni1TY9NTz^iE?1Ag@}(OGLz;q7}Tvr{Km zhncrKr+cs#;u)k3K_|caas{9CKMVY~dP{!3H@1+gJ_S-^(i(z%s?S0uBQJS6(T~Qz zYLNSX3gSH((#2`Fr2@BgFD-3$FpYXJ%zoWkVVYW!C29hZq-7fSTJPo$xv0%yUp3cn zPo1Yg?Hs+DvoSfLr30R}?60}jXc90Nu#)YIR?pv{tdB5!?3l1)ijBhF}iX6>f2YPxIemHzR*$|eUuzfO?qavL6c2vsI?DIk`w9YX>ApEELu1%dc#oaMC2A0kQPXUG;Uh=F z>+{;T5`W<^Ryk_Q1QIU?`eSm#R2<5F8H|;bZWE?p-$uYD`d)Kv(Le|Ot2eS}pgXb% zF8bEmT=TURrY?84sz!0JkcWJ5pBH$^SdTed+L$k5s5eH*&T4%mTKiSRPi##GGP-2#4Y2R~YidBX~0FAv88FQIDm2cMN)Yuu9vYp#+oW)t+r z%I0|wPG(~tZ@nr+J~$bJ4^_jQ9ZcH0o3wGa zmTPX-E&dE2^w4Y6ZykkOp#W*{qEk%fqFKGgXq}V}lFKXqe!`p`^D0tRWif}Efj(XCXTM|e67-ZWMMmzYB%8UT zN)c|AK<}$t-O&*)Qv$9t!J&1hbkhn(14yV%ZOy>1D@7i;+$aZDv#H^+@-yQS7n-JT zpXENkYIGgDr1as0j?@?i^9f!|fVQ(x-5b%zFfs;uIG(SNTKU$@j^p-RM|_yGra~(p z@z}NCyPyR$f0X2ey~ZkQdA4@0Aky}$U%*0|9W|Gf=)RD8{e5B%3H$0Zcd5DBACcT7 zTTfDOVdfXJu#0ONSl0uC2}-cJE2#g>7xn#baH-e@14&{OGLH( znklhQZeTUrF2kC787hM({;M*Itwi#6zdnJz;{7_mYF=TOSWCwLI2glXB*v(mOs0urrHm8-fn8fH08?~3L9NT}%Y zxDCBe-}OsN)&pc_RQ<|RI`hzl&c^1F zY(B+^T#fh`w=!E5KF~rt@y#)+Xx*!qGm7tcuIihJR5C+$#yb zhf?Csw+sXcs`zt!oP!=NPaP?h+bKY3#Vr%2?bkUg2g%~p`5$RaM#u=7I$)v1Mu&NP zrS8Ei9c0I<(XZ<&R+8Ft$c*~rk~#*W(E}^y8#~o&$91p7>TmnGJdGwh9pC!>aQ`8< zUQMX#iebB8@&vV}b4Nj~=cP)eb>@WV|iuVDJyx7*P^90`aCobSp<(UX8QNrx-XggSTF9= zWHp;kBJP~N+HfewePt`97f|z<|H<1`Cs0*h5rb`nO%ae%*(r_p^5c_Dlp3i~0qk^1 zmPX*@DG@Ink=KH6zE^T0?h?MWT5yV0JJn}GC!AxI^O9VBeCw#at=IkTL$?uq5kdRU zmmN6`_g>kpT}$0S>v!(^ld@^IP4-gIb0W-b^H_Q~tuSA~RJCZRAsPan(X)v)T&JM# z#U88uMT1H2v1>_sVi0e_(Z`$fB4^#CK1o`K9~pkUAqK`rs1>n38QGQ!>2wGnv_m6! zmqeqU`^<|nI!am!jn61e>#0-Q?_G*A-fq3mR&Q%qgkFlezTW;W&JEBTTmD7qPQyqE?_^JX}Fg`!pqSR~b z`}jWh*uL#o_#2L1;BIa^9{N|2bl7PLZ-6@CY^>*rgK9*AWUWcm{s-^S=W_{e1b(S% zC%R_%f+SfBke9=^Q!rNp(uSdN)e#`G#!U zda)!%_)(B0N>i{)YXNtqzo=%%pwGmXgF2%*7rWwS6_J8+KsUWLB-%;}IJSim_9TR1 zKov1qO2CE)*WP2n+(H$LfQtnElreTMv&h)9$k}4D&$|ds_LcU>sPGDE&m6aJ6A7r8 z)D=bOrX>WEO!74tJ(M?YcYWM=jSC#uj#>KM39^t1bS%kilEszsj_!cWrSX>*`dTl) zH?5yYlsR;IVW>w=G%ARCw@cd=I)Oh^9CPC%i`mTS%8z6XrM#1odX{MmjT_|ope-&( zh>xf>W6*ZdGN{JrsUg>|lklc1r%L~I%=Z&tBPZY1>&d{CTn=X}aRF<_)u@A)A2`%G zAlL;|w@}BSH%iAjoCjzc_#J^i-XPwKyxlU)nUJyck7hh*r+=h z!8BLgNwV3Pp8|5j=yJux!Cd98oK7#aK^H%)TWqSAe|&1ub^k#(fOvNBhrk5$%H5nh zCIhLu8e*Daev#b3b=JzZFHYz82Kiff{tUhD^B%fR7u3~0?758c)@<9*^v2;%=j8AW zAr?r;nGRB9meHEfWR~IGd=y=5%a3Lr8xw;UOD?}K%f95Bf4HRgQk75WbzPG0)c#5m znk+=LdHsPZTxvgrN?stgtB}tP@BZy-h%>{_rvan)49byJ{L!axTXO99>4qTI0fBlS z2q%A*bk=S6uaKzUWKEkYk%tm6Owt`yxxno%{!5U3}>vtcgKkS}n`7%H*&T(fv8g8*}H`QMOal zOY=o`3pN-2&Npcx$;Ph{=!HMTR6$e)WE{E-_bimq^IfM?Fx$j_*K3(XmTMD>#cDU} z6Mqv|N=JU<@RW0DC2%jGwTFCbfG<~OPUmf1yh!p#DyA1V*!p$>WJ=W$E3aZ$$%87j z{g@Ocd?QWGPvt9GHv5ngd8h&Q15T%;--0k{_xT1su|EshkQ~J`_=GD)dRqFNrdrt; z7E_was~sHN-gDVFla~jfnEX!s0=$whe(amz-k8%9tXj9S9eu}NEkzSNc=dZwC&^-m zg3`Ro>!U__^o~&7Fn+kZwL)@KSm!qDwhe}ntX+2s>pH%DUJf)6xA`^XO&iOj6Dqp;qmzxaGzmTpcF|H>x_9JJtl zfHbuiZ`x4Wsw^NF-KQc&E%mjp!<|z-rkD8Z6c^wW0*)k)-F}3xrFbvV-+hPp^mS9henr)VP6aKu1u670LLAvA2?$d z+VM;Dgv&8U%2KC`Ey}@yV!8^eio$ygQd;5c{B~nq!~I8LieWl;sqo9JZubzkedG1! zxW1W;J8~Ysfw%fhpLV}4NA4DL`BU?Bl+UTk+@xSUt<*og1BBtPKPPPJ=%0Ppj8^%& zWT5-~;{L#9Rr>^si)h*FRdI(@QwlKy#5;x)ZU6@fs@g`ya}v#^4buG#pJtk_eMUXO z`dy@J4OE9!RbTqd(x)O=+wAiP-AmZajY|O>rl>{a+qk6NW$+zLSM@LPO`9coxQcrl z8de7StYPHbKp4mi_;Wd(tb(kVqA&^zAW=S6FEa7wBQD`-7fQDKK-omF z^Th`UwJUC83>9Ok{F5A0pESdH$Az3>HZXHP_6Tr6li2FaPJXzv!ODbuW+f=Wk@1<6 zSMvZ)S&DabX+RW%tkpNzAz14|f&g%ufLQoDN0xrEF5n8P2Q_9tr({S<It#jXgdVoe)zjHRAp$R)v^Y+AU*2FCxDHbRuwd)LC`by-rqDGY&Vu&Q?C$TD1xaGyZRw8RM z=d<->zOe@s`m1jCumGWWnVLn?uN4#fxkU9`sey6!i&=t?o;_u!fxN-js`VGEtkanZ zY<-PJbbn6AEaI9mkJOuhG5iL^Umfa+=6^nkn18A;b2^?@)BJu*BGGWY|7L(OLU7UA zuJ!t$ZI*DOrK!}OR(b3P(zN6F=OsnClC6Sa3ZF~rS6C5vx22xhVL$Ddb+ctSWj~y% zuUjohV6otEDlII(TvW#p7k;-K>77>*6>7$uwo@zvQt$kq7hSMQL zYkFqxlW@}Qh5vkhG2g*SLBu^BdmqUOHX*~qzU}O=7SDpmqzX0f6Agj1T0}{r70Yc| zRezd|kVsSfnYh8DZKTMYVXO@JY?g^$WEJ>&K_E9_&CHXT-)$tAz6}S6vmkJQ>Nay* zc93~gVt-V9KJQcFdW~l%=qvhjZq@}wOqMLJ$;GMlixpYhxJd52N4C9pOyEXsgG2t* zX(6U__~dg4w*_GQFl}6jV<7@Ls$FcKRm}ykeD&U+3$b}6qw;L~i?8HWcUMD`J&%Br zwUGN)PKA}@d*aj@ORi!0mdv1UmR#;@1J%xCS#^>)*UBNNCwRzS-zat)-m=%DVi$Jl z@#k7Bd`TplP*NP=i@NDvh=?8yi@VzQdeK69BaKAk?(^sN-Q+Oc_|2+B-Jb@}s!5$ujUC5~^RyzzTQo2QBVK9wD1&%;ZMr%*11e|vwC&TDWA+Qr&o z^(?ybpBm$vBm#CYqV%BWV=wbB3oY}JFs77~;j0`K6Ths{>8C$!9ZvASVs7uMD(~QT zsMJuE|K5UaulN*{(W&=mpv{h>dNHqCW>`;-UA z)hmVM4BR(-%9+D=IApQ?!KJJ2g{0y$4(UX^6x@|TB?hfH?#a*gwebcKj=s}X+z{ZX zUH$uNs4m$hp`VRB`Fw=6ZBaj3ZM3Iljd{DFY$KfA+cj6E@<37p^E*wjMlR#DTNUb3 z@2?Sg89Rh`hvEc9UK{;NL4;CcM#WC0A9_piHV>H0;d7HTg2<^$|mO6L8OQyx-;eETdu-9K98)P zb$5oGNvp5+EA))5&YVGbNek>oSyfFGJ3e&cgiYuNh4Xmy0W{8E#{$D0ZFwh#hOxc6 z*IT2#irTAnjkVc50YHuG#`U;90hz2)WyginXE{5WiTNb9%s+h@WyzxRbPCj8ovs7B zUY9Crk|D<};woVaCzlbvS&>|&Zgj3pfB!1Adxs3P_G~Q&{Z|~!qhM&@V<$=<+DnZW zf^Cv|Uucw75{9;?nNdbX(HIZ#!pDyd^ZuY4>4!9S=H8hEhTvJ z#c%#wHaRNKRf0|`YPA26={;WH(ya32J6$k`?+|}l_IR*)E73>*zqoWMiAF_n86&ig z=(2NW^!E9}v_3f427iXNqZxfdQ!kBNUB2xFn8Q_uIk-2ZjgU@}lJK0hILI~CqPGxd zzOa=R%hSUvGNx`F;JmLD^U^O&-Gc*o?#l{sLbB;r4){8+FM{3GU<*FGv;f> zeww(F~$$??^=r3P7GMqMv}H2uh5E4HR#cD)z33{tD=+J8nmWpX2@+FC*VI~QYvN;W zDEi@(6!qC(RhFzZxE|Fzu4n?^!a8+74%dD^TXH=4|YIEC0Bk!-+9wtcxIj)^p?E<-Jp1Bl;>cTL1?`tAc{4V_sFXuiRAdWnl#O z=)P}#pOiNhW+!cWpv@ZnY<0j!pPPO4yUv??8UWkCR09gwmV@<0@BaZzWt? z@BixB|L~y@q$tWjdGROE-KJ91b=Ir_T@N!R)+LK&@*5K1bGB#v^Z9gB@paz3^cJ7s z__!@8!!0op-fJ0Y!zmrPkMlY+-;o*W-O9a{gm;<9+`|u>FUPOFkh(FK4oZ?jcwRIP zw6{S{Xe>VDx^IMnNY>U$b_AY^_mQ}3O7Xr*AW%#v^o4)V&%AKucP(Y$cV{IwPcC$= z48FMq-|yYJ^RmeTkUVDMw&{})GpmSvm#e%pM8XC`K|dk`Tw*M z&ZHuikK^A^gg6G9J$)g*P?W^iKW^G`{SJ>HsF=4@yP(W|m(e;E+0IG5lW&$H-vDu< zco76q3L`^S%(fS11kp%-Y&hkr8cpQIq2ce6As|j=G3V;Iqrd&7!D|O< z>OC9TJEdnng*WUHNZrqiluxkxVOoaBPr_ajTY^HZ6t|URhlv^XwrWD!{ny)%AM2aS zg^a_0_VK*I3_fgshF9g(p1n=ikzjrbM(XqR_Dk06l!*O-Uy3p>CuvjP`~$j z1tVa9@?RtK98*B@aTs^Qh$wvs&V$>PA{SQob9Ea@jOmfvx@t77G*__!BQA@_iBbyw z)*=b7)k5L}a~xkbic1zdNi9*-H`1Up+PpI}z&RN}bf$UDfjdOx&1jrPn}+~8cUJ_l za}Ybq(ykxQr@!{>;J4?%vNu60K`wdmYn|=-_9` z`zl?}j9bY$WOO<%ek_iv?VMwx==L3A@eun6pzugiv~rI$gy2wNk>+48P7Y6+kZw!l zhyNh>^9+e-R$!_1OlFyPezi9Y5z5yzBqdXaJNW0;2q?+gOp%X;`BLQUEoOj`8sd`U za_)4>FACZ)!cMjj1}4JJ5>!h~%6>WOaNrL&$RQFh;#Ld%tBs+;Q~Q=nVnNmv|?6W1J`UyCE&;uY-ej zxo~BNeF6~{6ooO7b}s{5ViF{DZ7k^rQ@Xwd&3wzT*D$B9AozY^RV3IlL>-;!@f-~| zGJ4=GbL+u8$u3w3_^y!xg*@8iMeP5rh z43=U|fJ~6mL87$OBft=4G#R63+qm87oAcpc-v2I69ewG&iBGY;jo^w2c-p{3>e}_P z(d|QJl5v?4tr@r)|)Mhj!7$6e-FCB~&D7m0tn zTuGuTv-Z0db0Fpv$FmT7JDFGVO|9kSAtNJF!Nre^=H_^wm5L<1_5{Wml+3o!K7D;*~X7-SfHmk=PNdFtjW z5r9TO1Ra|VVF=D8=Q6f}&u`4Yb2IFJPbhtiseMT~jw&s`Q#O(tlsO)!$7w8Xb%{kW z#+|kORtA-k6w^_zZJlJGfm;`PJltNca0~=W*NCO*dIgz5N~e8q82XX z`ZQu>hk^!nvqQ~RP35ao^_|1+cWO0i?Vgz*GU?_-5ZjhZMC_K}&WZfP_p^62)Kj8) zF0DSq-l9Y}4{u-}J3oMO`b!dfqY6)*jV+@=_p2X7cmW?-klEL${h)QqI5(*FV*(>O z^MO9{LUl7bgC3rV^|IDK`N*C&me`dMHt|LSPU)Qe$2jd4Yn62e69flo&z(2qjK7gP z`}ce@+eZ`!)DociF(@6sFxY??bEtP(9wJd!WnRzE0;E1fCqDfMamk~zLO=uPpdnj5 zeM^_ErGHAoZAiJtBQO5Bk(?n`)^0hNjz>sA;H5GfX-x2|4@_mUy46=j8FbnFde{V5 zn&eLiVn;GrQNzP5k+XXS^l{}$Ut`&8T$WLAGvG3$oEw#@5^UI@sm&WjLfsgrRTlR& z#i>W%K({4~MRbRr=viqz$uj;f9B);zN*vEn=a{AfCDc52x1yX4(RfbUXz|u$w{R?i z!=J9^-9SL651@yEstM$yEUfxGwR7X}t7ldjd+dk;8)`V+d%d?}+ct^*o$30PH0TSz zoxW0+%rs9Z1-}BmQQ^>b#8Sb%t=M>bGE(xj#xLfX=T{X^&AK10u+tpZkdrZXb8Ox1 z3*8xamyh+GhVhy9=nw-DK+BtQ;bV7qLx9Uy+9=A4N=37}PRwtSAf}XUr9)C$oz`V1 zow@02I+CH~Q<+Tj7Zpt%F@)T7YdyT2|63qi~p$H@DbAj4%# zZujLI#i18TFvyz8-G&kP{(2?q_IL_*cYS)W7Pd6lLD6=5NdA1g<%ChDhMm}?6 z%MXhRBa%^0oL*ZBiL`+SKP%T;SwK$DT$|?{l581NPGs=XCdmYwA@+W6vIPNq*3GYk z6UNQb=N(DQnucdyZk`KF>+J8= zPfzf+UQWTUVV4_!vKDr%8l{KQl&4IV>yGrxMQ(U%eA}qPn$~-m6}BYKySN_w7^+P zQ|W%8o_ov8Kb;HOAa_k>ag-E-*Q=j705020ZhU zt&0H!xZPGf)Wi1$U}R<1+-o(ZczZtMaQ};MZ^b-~y>25eSCc8+xL*ayESzTgJ;9zU zdbqKIYRMEme2+(ypd&Fy+ir^SRZ@2H{4;{joD!AOTm&mk1U;q$D#3g238tp(7zy=4 zX{O6mzK68o6LiF9qxBLF?md6JyIetqZmN_qkX5R3woEnorG!Z+86%-tsA;7I zW2Y-qcu!(B+EgB6S^1m_OC6R}g+Xp|^(e)=H{oxn7CI8Mlg~yefFutWzg)>44#fu; zJzV(tjDbuNcwgX}|JC(DykXK;*)lyF*6vpH_I4dFKF^ECxA$*i0{$j3;EIy4?oY4CAjfE%PQ+N3r20wcEyt_MlD@w-Qn zt!!d=K&J4ECL}4Rg-2HvACQI&NxO4wFarOIe^eDCE$VQ+=~>8-%#}^E^va_x7+H_v zuYFul^+G$ha)lc0C05QxTW8Buv=br@|Np$74|JK^>D|We#p;QVI=p~;|Gx*g*6((< z4aZ^#dU)oE7dn!2(CP?!ybJ>W1Lk_uiw8I~=XfzPA`UOcNiZ@VmDzq&M*Ocb*^kPo z4$f?6Zj$8+5pxqbi#AQc@%`@s?my0gTyM(%Z>LN$g!;IY*Vz)hB3tN)&xN}gyAJEW z0L1O_5xjc9k2GZ9(Q9xw!-f7AfCsM)Ja|ofr5EUesuoH^to9!YJ%9>FAV$Cb(LT6m zO{zx^_9I3qzK}e49PX3{k9!$}cW&ki!8yuDvGCg>cdqfTHEdK1d#+3mC_fAwc;tk> zU{h;9ToDV#Ku)RuK>Lrlzg(FgnFTjS?U5#&8;?@e9#ww0fFlS$c*BYIQ)>cJs=*63 z(->OP);QzWoPb39k4vAXqWn;xh8-^)1+zfYT6)I1y)xC3I;0-A1>W%UCjW;nzB%6T zhcO$Bry8{riP>Sk!deUe_XKwy0q~%#3(y9afa3Mb>n%MQ60t4 z+*2h_ZY~FP;lk8R^|Mtu-ZF)IBIVf|7yLCYv+n`Iq^`F?8Ji}VYlJxy8)+j$X(PSl zU6J3~c9o3!jjU&lb_O|tQKRfEw-@vH`N&_>D7qBNd_Z*~Dy1Sy&ZmR!E(tW5>`n&I zEv}J5^gl&A+ohDen<&r)4X=gyHld?PODAsUP9IJFhF2rMhGneAMpe?4!@<%~BhC8QnT(#Uavt;GA#6>_~~ zHnm!qM+cR;KW3Qw5oz^X`lX8P&r+dQvyO0hf$VmOO(4_iRJ~K=y-`dr*W{KZgOs(s z^DQGdMd4=lP7$vyt$kdT?IQsbjq$DFZ#q16=4xNiOp9W2t{}S;;gX4puXxV5>-IxT zt@AT;$Q9yTHkw7`boM1jn01_mc_du+CWjq%UL(z#obX<-#VnFi%2S8n!Gl_+bgn*T zp&Z4PBz?|K7E6_$nu2TeQUC5562N-6XvT`hx0J;uAMVPX8MvYlqD4>fah_ zY0c=?)RDL^BMOHWgLw>R@$4=|89pLe(iVv2dyKvwD^$FMzkGmTqyFxtfB4n^!`NGg z#nCkH!nke-vS@I3_dxKlNN|@B+zIaP&f@Ow1h)_%xJ!Z)+}(l%$TvLC`+jzv>-^4N zJJYjU-FH{j-PKdIGb}pq1;tEimqXsF7PGut zptl7xJG;D#I5Tx81<C0n8 zmIJP=n(52Ia+aYN)aUDDYr$($T(-@n-0=M3p=L|oik7>i(%ziot-NcBzp`$DI=c;S z7t6izy2EMSz!S&GUZx@<#QK)_W(nks&+m)w7|1(UaHVyw7{G$eSO!tk*0vWC$nPaS zV+*b$t1R)k`0XpDpApkJhu`n^C)VGWe1{8I$R$$$*78OII8w_M?Y@A6-3zn!gY0IG z7e;#*@#Go@0DpRp7wt9-=oXIMci7BVX+Mo`I2B7SP9WRmG+k6)qD+M88j4m;#*?L12i;j;+s=W-|U3?)V*6D7G==}g<)o@D}v%8 zZ9qh7)n+}Kmm}dMR&xZQ5khcBse>2F%w|J512+g|`6yo>PffL%aKU-f^5Db%$8#Iw zFR8c(zLT^){G#=|)5*Q{yzr8DMbbPKzUbAk(TYolMebapNs}IU?m6LHA0+0gU~o6R z`*1lk_~0cU+}gzLhg%&=3Se*rh-=k5#)?Wjxy}^^xpX~oF1sr=y_nhOLfIr_<7^b( zYx@4)-5#3SDReGe!bNV%=YcCdkkQTF52av`J_x;FK7W$wQ5m)J3z?Xus)6Re30)v5 z&h*l|Saklb)Ip`2gm5@&s~ij35u&V?%|kofN0F_Z>ve|+DrUMaDmQUJjKXG@N|CVd zC}HLQz758=TZNn$XXL+mIL@^PF)avgze{ol!aDI095Y?-<@EHAQnc~L1JLm2ya zB*h$BGRWUje``Uw`EXiWe3bS~YI&mHO7_lSd51@@|D6`eCGlyTM(sXDawne243sO< zONV_=X^v!j+TdYPCDVKg1>ZM}w5wsQ;-P;yPP#huD75<3s0(#!jl*xTkftk!$(v$; z(k)U`%qQ0yR$(=t$W<7Fw5kuQpc~Ny;r9k;=5ZiHu@UkNT@fXVSNz$4$@h_i424F> z0bA&t#dCf~<`9AzB#L}(u!IY;>>55Q~i8c?&o%2`BJ&DxdFcj&-;kAzCYof7i{ycpCwwOa_foT*tK{ezj+FHq|6I(+YUr@e_u`2BPhCuOf2 z8DfO#ybf&9uDM=^MtMqg!}jB~gO*BIQQIE1U(ftkG(4t_?QhneTV)UNujFpYlgZ@g z;+)F|9DVY6f*-54Qfr_CVOffzww6-p%!%tT+3k-G#?V&sVX{It(<|wICg199&gJ&usbI@=xml_9^v^laik*t#6__tS<6^E|OMlgV1anv7( zS93I;Q-<_43o4^XpvKwgB>eIE>JdfpU77*GJ_HoP9(+e1(%Hy#wn; z-rtK|?2Pm(5c5efNM3Q5)`F#X^j@2=JqTH<;FGXDixk~$VG0Xy>e*WzHQ7g|0B zc8xOvkii)`moo;y?A^-fenkm(^Zo0b7PzuD`au_j`)-8HpU&hiDF3_k-BvP55B@0y z`?9pd>13%Z2UwypZZ`=uxWN`;(btlR;Z{RBEUe2B^qF_)tK?A8;_nH^xaCu(YWcG3K3k3fpcH>my$QA*t zzXz`53NXa;!bSdX8W<9cp%Vt%DVAy4Pbo_P2ZFJg@p=0d`Pn@WUq=F#W&%mp~wN4Qb5cKW-ddJ?q z<{9B8K5d*HSqMkK$63f0!pF&hD+=g}C6k=dzo=Rv09F;zUP1q|d^ER%SBxD?6d(!* zSXwyuR62WM%N5+Fe!5T;azo5n){t^U3J_rz6B5T~O|;n{F@)E@HM3F69{_4CO#z{b z160SVZj2cU`DlVU+W`)xh?iECbCQM~D4o=u>hT3;3f!x-UkHBTiSh^j#MsDzxpGPO z`bjsCer{{_@P+Yz7 zCHBXp28EnG??<~3=9J+YcP{5=aajTDLXt_R);rtj*MV=Ef13LTBV0|@7*+5hg&-6) zxuK$Zc76dVGTeel$7lX_fQJD4V}$-pV<#`IRbSAe>IHQ5?n|H<8hj3#$?y}Zidrt5 zb_^;!WesKoF1H-PlsQRpX;mkb3cB^!K$LMb`LlFHV1g`yrup~pzCg{v%^|5uV;+f5 z(Cv)r)cUp(GstU|=TE@QSr}SuNj-<#x@^7&{+U~Fz(i?j!1fv&v5`iR(JttSaimwiy$J@Ws=xbL_F|U3jz}}~; zwZaCWA|x9-EPfM~n#iE~gWtji&~FPH5AC191C?YI)|jE^_-4TngtTL_wr@F=Ih30= zM2Sx?Q3ZCL$zN9W4?tz?MFwO1LHPhVXi=n>+|`N`veTDg7JjLW^yRZA3}Au}kUmR* z**`Fz7=wMeC0wDLD1~zBgb4gi!1~)y-l_Vh6pp~rua?i2qw#@02#CZCF++98Orfc+ zh>F{T=1Nh7iiLTbFWz(}%_SFlb?&3x^PRw}F_xS9iEpxm5MM3!jYZ0}K{PtRN;ZL` zc_NzkwSre-oFdbyUtKvkWJCdaP>6+ev%A%}&&bPkJ9V@BMUK7pYpTO*GtBT0XEK39 zDxqB$_|!Ux`{y7z_i26(i?G5!Sf|rUMULfzp~Y`ytBcQ?jZ6d?KB?Jb zUS`*3{q!P1HLoZ``^W^shcEQD+$npN??$&>PfWy@{OpJ`#Kdj_B*b7XPgH~89+OMm z`TB$4yjh{E!`qO*{n=ytavRz5@(*#d#a6ib;ny$Wgp$9^-}pZ`E5m)Ir<-(E6b!Ua zK$JvF|4HWW{hOe13{keEkd(h#8xnYW6yb%gtf2$(gz^hdfO?@v|HcyxkJJ)y zaUbj_PXrYQpttCjJKS~1%EpLz4&_;W%HxI5<6N$j!x9~|(S)ZcjsTC?!xB=CfV|GQ zPcEvq$8~CdSv%7H)s(=Crry1x)?)uUn!_$2>gX2;3aL#vF`}2pz;pMgL%So8B zR7~1Zf0Sa4*|IR-k4zgst*y&4n1jK+keT5 zryY_XSa&ccVEq)E(I|xk77G$kq28j7_tY5%`9~wAiko-)}9$iw!ZC5>#jpUV!JoH zHZAp@{WKC(RD0r~oFtZn4D9|25K}Jmggskiof82=WwFKeJCC0$X~06qgHaq(!jN-k zM?$}KH~JRJPG)5~Im%vyjM}i@EGY@>_dfVH{?69U`CvN4j(}m=UQSlXX+kg)mLzJF zx+G2RZvkUji60*lw#Q#)SoV5G zEeRIa58m<%**aS*Q?s%QADCTh7DT{!DS?zoLtQOw-tFIk^6qh2ipppb-2o(*!d_C) z-0%qPxki&Qu->=F*O8z^U2Y2>`Q#b0{fuycZt!uX(A}E-t2p2r@dzcFcLbU!Dsr}= zpZ0OFtN11~p#(>S$WB6wJ$6350ZvR&Ca53`xe1I1vy3lMMD0^e z!16;w1@ntIV09L-K+7$iR(4Qa2c^_c*KLk3FHol8Xf@nZnIcuWYl@fn3tiqYN>rVT zvse)d3I zS^?CnbRPv0KRZJ#Ws$UkaSQpHST0GPx81v zMP9L9qCOJ-n8U{UBF4ZJb5Th8p1O{#z{;GbA@d=xRDtCvvQ4)|Fd#Qo9#coSDY*A`de2q#V`INSZm_Dk6NdL(9Q}~ znHgqJFMB-SR-l!!mLB_8{Z*XkLOH!UYv3L)UP6-7VHK?jxxV<)d?b7=Z!%1KFfe(r z@I`WvvoqBud$;OH@%CWo%c2EIJ%6W(a)`~#je@2Gy8*+)d?h0%`0YUtYXjy*DZ^!m zzEM$CW9^3Y#4|}(n{pdTiTOSdLTcA?eLx#~Q6TK)mo2dEyAkq>f8!+h|2mK5zs}Q~ zfoXlmgH0X3*en>1$&>#_XntRtGP=RK6fK@WE$H(%#nL6ey1edh`m2fSZ-l*U9Oe$E z1+ars`8=@=M!KeFMX`e#<#5f5WjAsVsgW#oeFEV|lL&;)Odh1ek$7fh-~B*4(193X zI)*@$KBZ#^m8PvzoZa!_OD|VQng!Yo><5gz-P}y<}9Uv>l`xE|eXh&J87RG#<}2X(>vAz1E+ zQSb_;O+4HQ)7JkFa2qY_I}|bNk&`wBa@jt=!FCPyHjt;XU=)>73)TAAujqsJ-plJ_ zu{G9#7|(0MQoTmnT!*`d zm9ZiBhhMn=D=I0&qLKJPgM>G8Rygfz>+cn-4~f$Kn+yrXg$f6zf6l%d{C&))`kRG! z^PKDF_h(S|@4Jc#{-e7Z{N-_-qYZt*oStC9>&SvghB6 z+m_rvzIV;f>PKr$JBE}Zan{nl27eE4%$*i|-}<`d9vJ-cdz{QvUoD`U&nEkO)8(7Z zdCJ!u_k6c?!giGF*XiL;+DLR9YH9`Jsoic!w7VEI#{|<6*knCAa4eGP@$~2D;p!GA zi?rQ?=%GLB{JPO+{ncs9@&30S(w5;>-XlBPZ+@pb9BYp}y4FW0E>mF}cP(vQpPxED zW?$4?H@3e0v|6q6dCg>SFfPvW=D@dhtp53_>vrzO@eRVrU-iC{o7jmOk<2v=wNx+R z)A`m8$CUwx(}8EJJ3V5f*yZwAHYbBTztwD`w}r>tub)$YTtxW^dFRKm5yp`k=(yNv zpB%c0`~V6t;-ur)a(&(oTzNn0*DBAR&a!}ZpWe1uzs_xMW_!vnYr}F|!TQOTt^Lhw z41;~X;%H^=q2+0BbnO|&B#dNeM@RVN)6LSSzdkLMKbw9NgzsV>Jzf0uBuo2V`&Q}p z>gV2;!}vu@?r+$xfKJfi)!ICKX0!!gx28eseSXhfbK=2VrWa3F*u_j+U+vhc4ZiTK zf%3gUdYB#A+_q-Pk#1dVgspO! zQmAE%g=XF%{zU6Qj5 z`d$9^Y!-2j!D$k`mcq2H{a-ek^v9S|EnHIcSsaoZHWZO3?J)nHp&pkvXy)k3Hb8cs zH`31fvt$d`dwLt<)nyk7v^UbXuKMA<1JfrqSZHtFw`BiMy}ZZ$pL;QWL0d?$^#Y}z z;GY2l&r1k8as?X`uV$VQ^zX=40TW`2ae8nUCFfk#^>hO8my*y^G@DWf$20 z$_fN3D|F3MHY!GG(M-)FJ8U+UT${^AX)#RAquPNJjGE<_wqG{$e7=$5i|IyyB1c{n z`SLxKesGwh{c5aHq=ZLYi zO_s)Sy!`N%DPG-R%3tE>!1X>|iw>Y%0@F4hcq(l_=I4A{!1({4j}XAKLfz4Afj+{U zr+8JPfuAh{8Uvbuo&b60?IisK*f-55B+lBa3vA2LhN7=AnY&j8r|k@StZ(@q-eEcJvpj`E#|z3#)`-_KW*B2V{!zCAZ* z_}=d(t& zd}GX04(aVQa2Z+biK2;LD~UwVqs%jG&F2}kMu}Ux-Bl2v&*TTnX7($zX7s4%$?C%$ z*@VLIDTsFi@8s}cRNchzppWF~h}3>miHM*;?oWDxJg4za?K66IOOfWrcW3)W&#(yk7;j8%td! z0Cp7d)IsvncPkd+_+bLen^QFH`!%zZiQ{3DAynYmo&Dt*#iB$4W+`< z65qJB*<`cahI!QHmZ$o=dY!930nSs_q0LalqIT!cjaTyM4r~TI(VnEJckaE6g7(To|o8K+WPrUJqvkuA-HW zU5v!8GpuC0%No*7t7Uz0^4%iLtzkvh;p#t3x=`Tk0O!<(SiUCXMd$*ZGJ#4LSI#ga~C651r?7+mZk1x}%2_Lf0@XTH_M zFT-b2uNt+3;!jm!ACtU|G8&VP=O$V2^^KIn?7=iAOxeFNScN&4%3apMU_?1`ys@8) zKOa1^fL|<`6bN6X1F^oB4<-)w)bza;E8A%x>g6#(!E<;u*+DlCEg=F9+Jmhjx91G8 zi&(Y2Jn0Wn@ul9qJmElZ<3ow>HZnShFM9O2E{hZu#8GEb-=dP-KL%8()4cnD;r-Z+ zQ#;P0EfT9_l<&p+Wr#R8M$2g9%^&6nL?N4*2&sC_I~^VYGpBee2=k-P&yMQ6M?jv9-3+B zO5fh=V3n~k71rKKel}L}v&5XUGq-{|-6pQ>y-`t^AK7&FOIo?hDFR*5ixe=3fb$6Tyghz_?YcV}d8)(mt;KE}%v~ zM<1O{jKNFcN+FH*&Q~*&;-Wg}S!h+VN-0K`j$k?X*dJs0dl*w-W{hGax)|A?>Tn8_ zLMqgUb+t|(gf_Scwq(yb-_cS0EB|Y97N6fj&D6>Htk+xBas^4=;2q#fPpVg}xd*Yboa<<-h(#whJDN9?Fh0O$; zJ4g*n@Jqx&;0S&;R3&7`nq}I;UvqL^5RJ6Szt%l_R z>JIt~$lay@?(A-F{JHhyN)cs-CLpgz3T{(Op%-mm09hdq@54AgVR%?AV~ug7D0$SO zuf|#g%y(7^(^hbHVlvfNz)qKF9G_|DhcHJ3aD&iEMTB)MnV7Gf_noU$I=V;10J*mE z;ed`Pd&Op_zyVQJkkoP9^V5Dc>-Opz_#t7lJ>FBdMoM$AF23_WlZZ zl}UGBFPMPFpOO-0Ag8q6^kbMB48+=??-F8Uh-BNF3Z;bJn(jyyi#9_q!*-bT9l07s zwI{E_Z1oN~QG##6iC7NSM#pvF)J0^0OyuEInCL>>6i^H%PK)N;i6n*XJA9u$F3*S< zFHf*vzW~0&@LNNrqQ&5E+TX^WLE%m`bPBXF)>2>>_Q1u-!8xD6+e5f}#_n1eQ}BXv z16^14)0U6{kQ|#wP8P}G0)eR<4pb65r;nz2`YymI(7QOuv#rz++g*>?jq6g6C@*o& zs=4kpcPHccyI*X`>CsG?xyi)p8aV*CC6KZ+jBflcNk`|{*vwe+lKPv0T~1e3=L&eA zKm|$r4leDu4^gOIamlKme2VK&(M$RS)%p1)eNy(F9IjmCpF5us$CDrFnbN13tm^Qx zZP6NG4;)q3+qQ$Fqqv&|mV+hXPo^3K#7f3IG0Tw-YYgVWVosCk;B_5c_SiTUn-Lm! z>{ZckzplG%ntt_N!wzdPVTqAo28hmR6xzV5qEJ75&&?c^Dm_PK;bZ2A5bb*b75{#H zhU!6391c4|ZSm(!>irjD8ssy?}s7+;bwV56YRz10AY|8h<2!TN+Uk`k= zJ-#wbQ5Jy;?k>}agHX0Fg@VfFb~xaggzAlD9&Q7#@UEFfHX~(0lwN6nKS4Er2aDFk z5!=hcofp35M?~{8>1S{teU|;gjoKdb@?bw}8 zoO!1^<#?4N`S@8+ut{^l-5?_hUPE-0^FGs<4IT88>Fw_UKWKJRT~+tFI)0lPO8j3c zTb>cL;0Hg|{RBAH%~Gy|D)oXij!zGM;dF=8h-onE`Z*9^e?{kE4|2YJ1T_C((f3{A zv@IfxnEQnYobNnB#=@{6j%6Ecf()Ku)jV!UD)3x~BwwTe6bc$>JX`QER=6nhB+k%6 zJLdbmWNAKH>8^)Ok5ZO>0U*obLLf;#Cr!9rtWPofC;bBft~(DyR(8@oM#5v;sGGYm z;e>$Hku2nXa>Cn1HC8rw#xJ$;lkeqWNu*^@SeHuTfjZz8r*VL72Fc44L8EzgJq{(U zAzkb(tX{o+urhxc6TlzQwA7db%7H9p*>?d-kM5m;U|olkxZDKXpY>?hu)pi+2&yEA zq2Z1~y^k3#U3ikY-619#JN!7FMNTG38@}LuC)N80fqaSz5%G*Fj*2E#G(rr z`B5{kWyA3hhAPTwnYR_Ly7^XbE@Ik2I!mX(zXZWE;GKTmBgN;4vhrSM1R1^@F8%J@ ztk4i&G+C>Q5Q{~B>>_j%3eSi7OL6cl7PUmA$KuJ!93}~nDJpapE2DCk!ADSz{kBQq zcgt}F7KdX@VFfrKkrgEbf$gAIxTcJMHn|gC8MO#OxIz9=*>2i0UGyoAbM$&!iU&6x z(eFg&vNB=#)dch6LMU}mCmR!+BqCf`lJ+B%(HKt@!N2imq&7Jg%zrTc{V&GrzyDyQ zP7q`I!A^gE_2H4eMG{^H6#@Q0Ty4GM?F3)3q;eg>WEl&6Kti4(eoB{+{t$SGLEaGR zywy;IKBk%kX;-=+S)swbmn~q2;1!g@qACN6{w+l)e@B3v6`$(ybL+Dya|C7K?Wv@Tol=uyfA;e~OK zqA`mfLdqHgiXbpi;6FB6({Kr1v7RyFxWyJC2nL!EGF}k>1y!aMo|{?>H=M}kvF|4$ zx=7!v+415qynZkd69$g^8*=fzKGL-mlVg(#ks;o6*<90?^@34{wdBmO7CQn=uqs^i zlOgf;$H$&dP0WuD{oE<-6`c}NhLOSHOot{|;!?fFZ~w4rHs)m!s|8T!ml8Wkqbk@5 zp{OA+?4<3{_gIPv;4-;hWGkB4(0ZdrV0##7e9T1)#%5?B=t7_yWQJo9nPe_;L5&sN zh&%TF4?Gh99*G$i3P{Dw!%`C>8KLIJH{mHBIaV#-9b6Piy%I9HeivYU;PC6ji(HBQ zTBgrkx=H<%gI#{{MRC+v=WmU3TVgc}Z1&?6zp^orHZ`0oZ|5lPowb&O>$o^>5;$wDenyF-VY}HB(JDAe z+ncW|O=^M}*PuTk$~K^aQa|Tq#S_BaXHhY`_(x%p{yEy-x-n@|dB~8|(m;B@r2~2L z_mFf%`xi_@SpQ%e0!PDT-DS!%rO=oML1+z}wL{VP(L^-+bEnI6`!xUCm^;odno&YO2ZLH9}6O=+JLl0|k=G>r=C}c`O1}Hinsjf4jqvC@B=+K$Tz* z2Jjn((u+5@iWV(F*o^00RpZP+GocF2nb|yCdUv8WZHozgWOnq; zNWn2mOg8E<$5bZ9Ln4~58Rf)Na2Mi}%o!rIrtcumaGsZdR%W@-KVE7pm*o|u$f8pd z3?r4^ny$W5V8Jvj8Y{Se$Yi!yAC{QWU@{BH5lWK0pH(o2I}jgX_Gda|j}q;Ka*oP% zh*PT7eYTf1bEajjlwV077iO6fq<)iyEqOOV_uSrCF&SnNfKs4{$Lx1JYNJCZ7(j#m zd-mrd^&7?eMsn@$HF6!5s!Bw-Xm0JgIAxw0IMnwU%vxO&w9{RD5x#Bff!32F zux{hBBTC97Z6SnA?$bCP09Rj@0L^YNCa?q)=EjMd%6ecc!6pZK>?-<1HNzuRgd}P2 zDr%a|25Q?U2b$D6Rw@NNQ0j+F#Km*Zz&%NgFmoB0B^u)ei07H7w7I0mi1I@@qsT{c z-2{XBP%t&sjPM}Q>%d|?#UiAcPfFL29Ot+1 zb?S5MNO=`io=Jf77LzuV4t-b~(Qn?uRTMP=@f+xctU&$OuZN+s@2&8-q09hN(V$a4 zedp4KN(yv=`i%pzI^{$|5)gqfAptS|c_W>9WhXL{a!_gy3il*2$$SWiUzw50(}AQ* z`LvIe<7J%OaVE8Opc;seNc~DpPR;)ZQe$4+@r_e(hDEg%Ix@EG zgbfoX*a?}}Pp#{7d`QV3vy%hD5b<~*Iya@Kb%KO~8w`^yUdiCeAB`}`?odQC8}G=Jn11C2m}HitB9gr1Z-53T@ywB3xwEQR^2SOI*|8-p=Q^OSAOstyot zIKzzT{=w+Ts8T={r750BQ6whaqc1EGGb{cBtE$0{0b)P;&5(eU&-jkTq4R(zo0=CTomyZWb*K8900!p z01e{@M}}$$t!?I%-F8aj(UU7TGC#I`o?ep56Nh-1dPwGvm+s-}F|_Pk=;oC`=JSEI zuvP-mGcrjNScW%nsgxeCI_tSv8#&-8L#clxZn^_z~kwjsrhRG=tXL?UA0kPNt zsw%JE>IZuk*&9L{$Tzv*+EH-r!G*&yQ2Yu0VN2EqGj{)+{Eu(dbC^xkN0Tsp?CYN2##6Ac`sDS;nfcPE3=jfW)ZFa_Y2V%P>e zwl9-B=zMxpu?65(KRl5xm$HqA0C@zGh81$WYR?AfPI>$F=f(y(r^(j@m$J^pSnPR0 zbIXC>o`$00TcF2}>A%bt^J%molDnlL%+79A3HX zi6iL1LmPiUXDTMre8}{plp2mybeP;*pKBw0r4PiI4i? zMadm926^Byknw$wBmW|GT|o7a%)dr%qhFEm=x9rSy6=75=F!2;#g&aY3iPHRymmkN z94ja_67jrnb8T8_tO-$xk8P@#!I7cfo$J?y78TGxUcA!KbMUvMg2k1ihSB^XLrpHz zkK6_~PtNSI(uYEgt2jdV@RrfXaZ8Lm7(yTBycOk0DkDHstHBN@CS5Q2LQs;p5W)XO zQw2f)ji#cY>`~M&q$m;mnq2dTAzlEO(lBKnDCfIWtu?k{P*h-)iju@Q&4BLn^f7V$@#6%TlLVhB-6r-4n>s>~yGTlixqacJ|@GG?%uK-#`Nn$;` z$mm85AI><_OjL{xEqehIrU?ic=CVP;Ru2YPUf*95_smJE-#NeRw+4B|KEvSkPEz8I zu;i`3>kE+b#H3?&*1uqg;7rI1fuJh~lu`YcK;G{Ehd^G!lK&70TKsGO1APm0<-n7AE0v<@@GmPMJthfJZ+no1sKvW(2_%Lf z@#rAZbPUIbk|pg1%2HPB%eew!RO+#KL8LQ;rjTBG(7%k*woe;?mIe&k9y+X`$PdT+HVbT!qN#i?gn$?s8yoVz!yv)$u^&L0(RHaaiGmh+XxzY z{E)ef1bV+YVIC&vTWT3tAf%EB5Iu+5eC}#yqMmtwgxO+bC-ci8%k=_8kB%!#P5qc0 z?ezEvV_vx3BhHF0sfL?;I*Jo97We~A9k;gQJWB>4tK&P*#s{?+Sqz#gh|+}+;4ihEHat)YGWxvOO;NT@a~G_WmO~f{W$da8(9|#(UcuIsNlHK+d-PSeq-UX` zd-hqW6JxXlE;7jgMCIaZ91u^-`l(d9*QCe311S1bq%D`nYOjq|> zj5!JbY{L4&Caml}{T+JB4jlp0a{_tKrcYOY-4}*l|1Ziwc>d4c1j5D1_5Xcqx&Cq_ zH6ON5ZEe{e;@-Y*fMFgRml+x8sMt{ClbbF3!l$#p-(@`#8P!!JP0AZ8Gt*1b4k4zp z(i8_-Lu&6|i$7efrHAB_g&u1j_1~|3%Y7F5(ts5dso|9J@wI~N@Z=0eMu^|xRol85PH&kpMFDJ<+XH&oV3i~`L=lDIX9bD{OA7l!4T#d5Py=w~2 z4IxZQ(c5pp+)G_k%q854+o0;D`!Qzwdo?)J8=Z`>t8($TkYC*3cIwsWXF3)nHd~vC zQNM`|NAZ5H0SN;G1rgxgiHfM7;81n+sf7h0vY2lM`-gFBLKEw`Cf&94s{12$EVW$CZz1>F)nR$-cUGb6Na+%pAlu zA+AH_B|2Dxwrbww@pNGrq*&Ue^3FS_WNttsHb}H6ZpcPOVc+?#CdXV&&LFc~{y4eq zP0Slm2f@22i61N3MqOH+{@!U>1;{jwE<)MVyExw_x}aB5V=J4*bNeZu@YiOPQau)H zouX2Wpy$)w-R@A?D%U+$F^td(Eh~%#Ey7#lve?_2lr- z<-GucT%iuBXe^;tfpF_fhgk!yZ-g*^a?US4e#=6l^-J>~IKv+t*E4%&fBWhjYn!ud zevJ*;mA7CE=5<&2(RbJ_U0t5wiLV4}E37e0z zSBV-f;DUR!@=%)Lq?lWPXAmGpYS~3?)~^IpE&xAvji8MF#e(*^CJ$u*PO1)<-l&Zw z@)MI%pQA1~b%z$*qmdWhj1HEKWQnw3RFd4nlWMe8j^5$@rvv5|u`djK1>wysk$|9H zaKqaSS#U|#>a<24`_6G}Gh7IR`EAKcaBotBSEGL3R8`vQv|3*H03hq%kxDM(^=sJ$ z8L8SyzF;Uk!46?GbK_2?R}<(ctQO55StPMVL{pzQ{m_OQ!f1YL(IIIVwMg=T22FS3 z)PhNA!O>M(H=sAA!AsRn+;DVJcnLdFgk z5+g4%BQF^z_%4^24U3IA55C}Oi}=c;ukAenqA@MskxX4yo0{OSliQaPU$K)S7-y3@ zYx&W{CR9|Sd)(9-R4l>&oKSluUJ?#>`a3Ex6rW!Kx2yp7wj8v7RkxJcB=@rzmK~jb z1}3d>UO!?Q$>v;F^RT?${Y*|Uu}Qq`-hXe*E8DKH;rSm)cuO8e#q3?BE zIN$Lw77m4~{p6?*n05Zn;#4C@eZZu56Rj~MhJ%41?Tm$yRYLr+AL}Q)deP6Od@Npj zEkWuEREjgZ3QKwq3@%>@B;|j-x+3w?gE*`*MIPZ7h8PsqP;+Tq9nt2=XV^>=~al zz85h*$662>Lj9BdT}t$(TqO&;H&t!jyc>_Rw@QxT9*Jgj*6FduDxa|Pe*v%Fe2W=HaR?za=fQ3vT%0U5t}Y6vJB&%srWkIZlExYQC?x(7*u45+&5ObMpMjo z*&X~XHmQUJC3e4ngj(V4*vtl=h?;h*Cz4MePf<{Cv4jy3lW3MYfAvHts)%{UkH|Cm zs|VlgXMZ+PXzOk~D zGD^;gCQ3|cLu3i23e%}7#T3~c%v)+|6*?OE$V1E7Xd)vzm zrF2DORx2dvL`81>?(_8(`>s*Hk zXx=Dw5FlQxe=a;EXG>V@O>EN^ zNDb{m(}nGf8N%op0m-7xium6@T)-16)wO# z-l`ZQnj3k(EczKMR>Nm;ojPa=W#DzMysDK;u?{iLx%+3;wS7}k6xv2Z2A^QN7^{r; z5O}Le53Rir|!xiTEC@0E?p**e!{IG@^%K95Xs!}VbKeBAD_2;K?3`QQt4 zO6fxAz>*jK3YMvm{!Zqz3p4j`d!4ieHUg>Dd$Y{g=$VV3aTO)`B5=0j)>`@7%6o?+ zUCN~)JhBt?XunivKY^p%CF?jN1>F^6LfUw|5F*nz+&U6^{qNv(aOKRkP(j^ zTTex34Of21J4!l4TUe(>Mh_6$??hDknSUKqt$#+zA1TSsXOm#XY#d9EHI{vrP#}kJ zNzT7LaGj&+O8lO(YEm?j>9r@)p~X^9_j0L@Q&a)TSkH1PvBF#CX?ml>+1!A@W!Ljc z@2#GILQ7=8;w+HErZEm;Zz}l%yNuM?ermlDqQDA3lQrg>=l+QMJ53USaK6aQdoP2} z17#^~At$MrzODW<|Dg;jay?+uDnb++q8dLrk~TR|k!K{7`as{7lcSUD{Wrr||7pW6 z?lhNPcfvLNq>(vwf%?fBEbp0*vQ72490juHZe8jX zg|cO@f+W;>bJRk!;<52)3`mpf!lw~}!`zgc>iIY#1J9*PnT=Yrq+ET?V$%M0ADvd? z!e{=*S)fo8lTE}#P`n=2?t{ogeH_GbF8f0t22BvXdc*sR`%S>G43wVEdQdu_m@}5d zBWizA=9ZdfJv=F@cc`b{!I93OBE*q;HeRQOJqpbH923IBi7WRf+LiV18)_IYbs~ik zP3Ws$eZ4+ZRP_3Gj7>^O+MZ(!1~bF58h>>f$u;k`Jr=CkA>*`otbSadA(Z$LcB;Zm zy^A@M;2~3sP93`f6Q#w@K$$( zWeotIP<&n}_*ukM@Eb~I7l&uxQXxx9942gv(5(VR(8Vw_b_u2pVPMT3V z{YxF0yi-YWC^~drvDnVQ%oJKl(1acoYB0fwJ(z$e1{-5lurV=UTE(CVf*AiEfT(cl zpV$)!A+Bq!y`N`)ulw7**7f-Al{hE&{ypzKd++`q&-~?|`8EI7 zC;xE&^`HM0AN<^3`t#rSTYtk}`|;oM2Y&R&{@`Ev)&JbD``pj}{eS7-{=I+nKltiz z_y@l2hyLf^_cQ;^-}rmx|LB|l;BOxOkI#M6*Z$PceapZ6Yk%f{|F3`7&;D1x{Ga{C zKl3gB(g)LD{}cb`@BOK-|B>(Ne&vTh`xAfd-}uM>-cSFsU-DBw{rmsSFY5oz|Lq(9 zzF+z$zy7!W(@+1|f8e{%_&@xs-|!c{=^q?^{x^NY*FN(jKl{u6 z`mg$b{_IcxyC3{7fAc^5HQ)G)zxe0B?eG4}zv#dF`tSL%Z~Dc*`TM@(cm1+o_nH6f zPyHQ#*Pr}#-}5W}iS>W{JAd~t`K6El_TT@9zwNJn=b!tjAO9B{dfNRKmODIboZBj*T43E|MZ{!_kR5AKk=jgOb^1f7S2%Ti@{e|KR`h$DUK2{w>q_o*(_4A3Z+!>=%Cf zN1yoM!;ilD6Cm;Cnv$k*_^I_^uz4 zFMiAZ`RV=hyT0!eAAH-7eC<0v_q8v4?W6L4{f^;Lw$y+4sZV|4gYW%~zwLK?^!;Be zfBxR}u^xZ^_Ah@)|Mu~DYQ1;kK4{axSs zc=^<)WZcQYul~}PzxdIM{crr_+hz4c@EfYje(MkXZoQy71o=hsbIP55Sf6(2r_*Ws zC!?-T3%{l>?^TtX_kNA^b*(S^@&cDVy`a?`MRi&7YgDfKwB2$RseiKK>a_T4_A%o9 znx6fd5jM_-YVCF7^eS8xC2!!Q4y&;8CXeCbg-0KhuzP4!%RxR^<`hW;q;sIM85RHo0HNT{g|bv zhIt-8!>Q^`y#cDDj=&$bGgIg6QU}lX*|0sUqYpp9FwZVpuYdUvYr{1AdFbzZn$2Fi z{%j#l9&-qK%!Nr0<00lThc}NoBzer?>=VW&k2wTA=E~H8@lZ~5`NVZTIjN&J`Y{h% z>M>zHY4(_AKMxb?*>#<#^0CQdjzNzp?DW%R`}1U_C-S8q-#n(?=*KKQ^OytNW|PMp zgC4V!n7YIk=7U+#-R;rG#W&>MopVS$<$R;G7`VQVvif=b4RQa@H^fUh-;j~&e51hl zm-o@Tn)WRA@6Xe?KEF1jOq!_r^IW2X;_^1@iOPoU!|d~UV1g@dnyAL$MAeg#_R@nN zip^Bx+e|gyFjEl|8HTfoOieS@7@VnkmijLsVQln z-n{$u*k)5C1Q2?rHhGSu{bS61s66L@WAY+l2*9Uk6@cX@(#QF&M5AYFlSikrk2eBm z^1y66d4UefqrTVAPkNT14Clyy@@9EUP|kx(-B5x&;Cq@}^AvT>EQuJ-u3692W<5Es z`DHk#nfiDxZ}VwdREZwur61;v9yaP8Y7-wmOvUFZ^L*jiD;a{>&RY8nn5`QW^(@LB z&Y6Q=>rxV(HKw;|N`K4!v&I19Z*Iy#=3ovou*&s#j&<}*ZStr~P8jzvYq)7@ZP;dG z4^!&Nc!zU^U~clcbI|7w;_I*D^?^l%Hji|{h&q1#|u!wL3 zuM-QH&+;UBXR{N{-+Bf^12gd^CsJ80DPo#fFwz2ACX#`D~|GzH8{Fkmj5 zmY;_Gc=joJrl!HAcbXv&OkiHX{IpnL9_nG^>|yrwFx{RNImgJ07X-pAzPx#zYeRL* zBLj=SrgITWujN0hHrVx1zhR7pJ$*1!?p=WB7Cn-dp&hy0Dsx>xU2ZAs;?$)IH3)9;V{6^EqF5^_&kly)_sdk1RNz&vSyF z>GB6_^tZlELVBn7kLm$ZoUJK1UW38$$b#efJSXUxn&i6hQGK2hHZM4a!L_}GhnE4@$jYVjc}~zXwaKFnH$fhl6WqA4c6#Q2 z9yZP%W={{(?a9r}=h$v*3VpXXuXFt*+=bJT1;@*Ig3@dG&uV+C>*#N}f20qP25(Kl z@fHk@M;06}=XpZU)Fw|-aJ-!Dt9xmRj=Ps&cs#N2csb7$cB&?Y>}Kz`pcmL++r2bJ z$lXgYM4niPyqsqXJ5{4ZNkQ^*o-ewWrYO0435LlN3zL`gjA5s0lqe}sUe0qy_tNCa zyO*FVpIF4Yo*lKFs!^h(I>veq>2<2Oyw7@CwfXL0URxjrbx!iBBTzoo%;ZzGe41#N z^ToSoj;Go^3^7ml5)7Fq7Ba8rSkz8+`MWix=w99?C%fDGJ>f8d4J#jVb*HG&K^wWd zpjq6!f`idhU0vB~O{h^)=)A(T)-}b>T^9_VCl)-f_;kE^ifNP-Kd&&aDMNSlG%GuL ziy<$=+KCmsHyq{OM8z~Z+{euudRCa&x~2k0*99va6ASD&2nqF6S5Jp&q`v9?JZyuR zt&vNMf@u?r?l@aXG*J8J!5fPVe^qdG%$3*-eq8t7lYc6bzqd zmSJq*Wn6lYX_OQ{Z!o(ltJR=UFn*p%iXnOCX^Ug0)Zf*WnMOGQw1m8Hr%lC<&KSnP zSR*-xWW{i0Z?<9@9q!{^e<-)W^;&uP|6s&7d>z?Bkus$p{-Juv?eot27G6%rnU=Bo7CTyxD2D zThJ&cW|p)S?zA|xD=$=O6pWc?l2=Fo09Ovi%%D+D%q-Cj+^Oe|sB?6d@q5=sK7y+K9g{iu^4suYlJl*{K5dtH`F6 zayq@+kGZZwM%n-yW4ku&uQM_$V81M{09w^f)v8fa%nWpNH?_sgQTT6Rc|{L%MUejM zz>bn)Wmu?9k}$n`Ca#U`amJ#^i03x;OD@uIOQ|aDlh#*#zs$ z3(G5job8l?y8Oi!4=Sj+&lLvRe7yEc=L*P9mFu~>(@LXY%)GL^0yxRe1toX;1&xwo zX27*Og`OHT3dYPU%PR($D`sz&Vj3mI%m7ArF8_vhWNe`C2UlXj5__KWQx}LN8olys zH~T>VTRWE;s5A=hs9RZH0o&p`mx^Q>X}S61^+(L&fqCm(bp3gq!jMy$6ZU*U2aUYd z)oe^Yj}0-HR{$~JxzJnnY_z};uwRx}0CwEDoaFv&PK2c0ZAM-J^QlX|RT`a2z@bLQ2L|kj z(b)iUNM@DDeuMw^dx*%MoQE+W=WqAeAznx1)GL4ef2C>fJbKFmPg@N2MC+zuz z4jP#&%*N#NnDlV2fHyF>+gA2hBFihm-y*?%@qAw|u{U5otkn6~3t@Y1vrlJ+S3iuX zdl*k5dwTVZvIejDkF2-sdw=&c?L`Bb3-x!%?>rt1{GJzFKXhTwZ~uYc{=;99mpuRa zAN<zVJK$g-=#5AirF+UrECBg4+{ZfUYw4H(@WYysDtB`~v6P(w zO}D#*0f^~LjdmXT)>iPl(duxe0SFdAa+p#abxKKfYx@ZKp1!S zM@fjG6gy$8c>!l-M^T^6(gC2YyC7xQfksJX5dg0HHqNk*a)ujA2LQRYQ?=QV-R;Mm zRpQ@aE zYPc?+RutdI=3_TM`8-k{2;2s!5%z7MVt?u>=$JN3QGn*Ob6sj-f!nzSp7p>>Fl`)! zO(l~)N-7Gu^gRA04nIe?dahQHa%v_6=DIGxhvWamUtL>L=@KOm9E?~>9%qq!0_NG0 zY)L1fQxqSPVzk5?r6_Q?sUM4KwE#t-uezkL?S7G zl(E2)%B;{h+zg(&-;%Jvqo~%^omRswxC2lqIA%#O)9W(m)uovw<hw1~%UY zJN8l7vFk_*ASF={snlT_E$I&0kveX$`8L|IkJ64pHnQOcm3BQ>t4KNZ?g8FD*!%lX zo>PE*8_FJ8KKgzC$Q~cazxP`0zCoq8?zNBJ#;SZ;?RQta4iq|g!&~nXf0aK_&mQpy zBqfmK228!2EASL;>y2L1ZukDxuK`|=*t^JIC6apfh)66Y04Bb7S$_3Ck=Pm02k@|rOw5`;%VIub=n zDtO~cWg8vYpLzmbmnnLd62NOK>|9sRhxnurxA=z@4Z-yWNDq4c_M3w~>>*(Mge*gyksk5)V69t4K+86L>jq--b^1 zhHgbfVktleDL{~&?7@L&2c+rEvR?4#^t$NJgII_){S4Z@QkQW88lz$=XVHh8i( z=r3SNtgEf8e1S;8y2;s+4BxoFxP)7nT$T_6w-Zu$?YK+(*?P{9#cU8MSnvjslIkY# zqUYX)2`iDJ1#i}YSJqBJq;jrC$8D%mf+gXd7EgF}rRry1h-8pkf+ayM*X0Q-k+gOa5s9S$@RFb21x=Yq z$7Y9{_u;{-ux)<58g7QYpZDeNVYh_z>Y(IP$KYd+59D*N)tZ-=fA8Phn-7`^efThy zO85*b;~nNGx*_=L2CJv2o;~suSxNvemFitQaes=ZE|k6PUrsP}SUYf8!b+rQ!JD-- zmJw_DPPyLDWe5JfWB zG9nUN6@WKd^)6=0M9L|6kGNaM#R)5s)UyXfVoi>FctKh3a;8kAoQ;Abkk!50u&@#- z>bO~}V_8N#`y>}MWg_V$l`z~O+I4}#N~EacW(|*J>lTOV1_oja){EE@)lS2)XtH=o$JbA?5Pb3$(p6u?Pff+ z^Uj!|4X+%cc%{6xn~8K@rm%Chij-3~8R0b{LmOW?MEOd24=@u6pHHlAf|jJCB*96Z ztImT95yDI|oLIu^3f#z61>hBYcCJ=S%Bh=-u<>MY+Zv)s23baC5|#qM8x;qaFC{+7 z_{sY%2{xV#N@rX>&Pt?c-Gnu9mi=9)m}GGIQYKPP-DHH86@#KH4I*g>9~O99}eYlF*|5|NCbOmN&7(ZyP=ool&!*!|ceOZl`~ z?H(UIY})!zKCPx}&Zqo)|DL^R?qMpCS}xpR8(=vY{ugq3Nk{UvSND%G1P+=vKdiIDV zv6KK_2|KvFDYK-Ug7*k}ECv@UtVD_yyjkC8*~EShu^8GKMh*sDMnqz(0`NXsJ6EeEB^A73kHz3Zg_R{m z3*M~tvTVCN4>y-LWtNoWxM7dQ;6jC!NKwbldM^vT0V0)iwOUe^5y2IWuaj=Go;&q{xJHqDJp$)Jc!hj{~1}!^@&rdA~ zSPrMgnRdGgwOrUPFth=dLm04}S&lNn3W=WU(qJrb1Cf&ICa_ g*VFks30GYdom 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⁣yoxjhD)kYpWQJhPT6T%TcG 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≫6bt~p0y6pd6l+O?^4Dp7{)pdb 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 literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full.gif b/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full.gif new file mode 100644 index 0000000000000000000000000000000000000000..b8382b5fa0995ec36ea3c57da9a6d2bafe6f10c5 GIT binary patch literal 7566 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 T-@Ot`JjE26B0(_#08spYRa22t literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full.htm b/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full.htm new file mode 100644 index 0000000..c78b557 --- /dev/null +++ b/Packed/XAUUSD-15M/Reports/StrategyTester X (XXX and XTPW) Full.htm @@ -0,0 +1,227 @@ + + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.01 23:45 (2020.01.01 - 2023.08.02)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=true; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=false; +enableXRLong=true; +enableXRShort=true; +xRShortR2R=2; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.01; xRLongR2R=2; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.01; xRMaximumCandlesPerTrade=252; xROscillatorLength=7; xRFastLength=20; xRSlowLength=50; xRRangeMarketLength=50; xRSwingLength=7; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=true; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63353Ticks modelled72601176Modelling qualityn/a
    Mismatched charts errors808
    Initial deposit1000.00SpreadCurrent (51)
    Total net profit410.10Gross profit504.55Gross loss-94.45
    Profit factor5.34Expected payoff5.40
    Absolute drawdown18.44Maximal drawdown26.23 (2.16%)Relative drawdown2.39% (24.08)
    Total trades76Short positions (won %)40 (90.00%)Long positions (won %)36 (94.44%)
    Profit trades (% of total)70 (92.11%)Loss trades (% of total)6 (7.89%)
    Largestprofit trade21.98loss trade-20.44
    Averageprofit trade7.21loss trade-15.74
    Maximumconsecutive wins (profit in money)19 (139.44)consecutive losses (loss in money)1 (-20.44)
    Maximalconsecutive profit (count of wins)139.44 (19)consecutive loss (count of losses)-20.44 (1)
    Averageconsecutive wins10consecutive losses1
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.12.04 09:30buy10.011842.380.001854.80
    22020.12.04 17:39sell20.011836.610.001825.20
    32020.12.07 10:37t/p20.011825.200.001825.2011.621011.62
    42020.12.07 10:38close10.011822.380.001854.80-20.44991.17
    52021.01.06 02:00buy30.011950.710.001958.51
    62021.01.06 12:00t/p30.011958.510.001958.517.80998.97
    72021.01.29 16:54sell40.011865.800.001855.99
    82021.01.29 17:39t/p40.011855.990.001855.999.811008.78
    92021.02.09 17:45sell50.011841.990.001838.33
    102021.02.09 18:09t/p50.011838.330.001838.333.661012.44
    112021.02.10 17:00sell60.011841.300.001827.41
    122021.02.11 19:09t/p60.011827.410.001827.4114.511026.95
    132021.02.16 17:09sell70.011804.040.001801.47
    142021.02.16 18:49t/p70.011801.470.001801.472.571029.52
    152021.02.19 05:15buy80.011769.850.001786.38
    162021.02.19 16:09t/p80.011786.380.001786.3816.531046.05
    172021.03.03 16:51sell90.011712.530.001708.07
    182021.03.03 17:36t/p90.011708.070.001708.074.461050.51
    192021.03.11 16:48buy100.011719.840.001727.97
    202021.03.11 20:09t/p100.011727.970.001727.978.131058.64
    212021.03.17 13:48buy110.011728.280.001737.00
    222021.03.17 20:06t/p110.011737.000.001737.008.721067.36
    232021.04.08 14:00buy120.011746.240.001756.38
    242021.04.08 16:39t/p120.011756.380.001756.3810.141077.50
    252021.04.19 15:15buy130.011775.840.001781.87
    262021.04.21 04:30buy140.011779.820.001788.61
    272021.04.21 04:39t/p130.011781.870.001781.875.151082.65
    282021.04.21 16:39t/p140.011788.610.001788.618.791091.44
    292021.04.27 18:24buy150.011778.360.001784.35
    302021.04.28 12:24close150.011763.360.001784.35-15.441076.00
    312021.05.04 23:15sell160.011779.150.001777.35
    322021.05.05 03:24t/p160.011777.350.001777.352.011078.00
    332021.05.10 17:45sell170.011839.580.001833.85
    342021.05.11 03:39t/p170.011833.850.001833.855.941083.94
    352021.05.19 22:00buy180.011863.400.001881.95
    362021.05.20 19:49t/p180.011881.950.001881.9517.221101.16
    372021.06.18 08:45sell190.011784.490.001777.35
    382021.06.18 15:52t/p190.011777.350.001777.357.141108.30
    392021.07.01 05:00buy200.011771.700.001788.95
    402021.07.02 15:39t/p200.011788.950.001788.9516.811125.11
    412021.07.06 19:07buy210.011794.020.001807.68
    422021.07.07 13:24t/p210.011807.680.001807.6813.221138.33
    432021.07.08 18:04buy220.011801.870.001814.59
    442021.07.13 15:39t/p220.011814.590.001814.5911.391149.72
    452021.07.13 17:21sell230.011811.750.001808.46
    462021.07.13 20:34t/p230.011808.460.001808.463.291153.01
    472021.07.14 12:00buy240.011814.420.001822.34
    482021.07.14 15:06t/p240.011822.340.001822.347.921160.93
    492021.08.17 17:15buy250.011782.620.001787.73
    502021.08.18 04:09t/p250.011787.730.001787.734.671165.60
    512021.08.20 17:39sell260.011781.750.001777.75
    522021.08.23 02:18t/p260.011777.750.001777.754.211169.80
    532021.08.26 13:45buy270.011787.170.001795.30
    542021.08.26 18:04t/p270.011795.300.001795.308.131177.93
    552021.08.31 15:30sell280.011811.860.001809.11
    562021.08.31 16:04t/p280.011809.110.001809.112.751180.68
    572021.10.21 09:45buy290.011786.670.001797.59
    582021.10.22 15:22t/p290.011797.590.001797.5910.481191.16
    592021.10.27 18:09sell300.011793.560.001789.11
    602021.10.28 16:30close300.011808.560.001789.11-14.381176.78
    612021.11.03 04:00sell310.011783.060.001779.26
    622021.11.03 08:15t/p310.011779.260.001779.263.801180.58
    632021.11.30 17:48sell320.011794.770.001781.02
    642021.11.30 18:04t/p320.011781.020.001781.0213.751194.33
    652021.12.13 16:49sell330.011785.140.001782.99
    662021.12.14 10:24t/p330.011782.990.001782.992.361196.68
    672021.12.15 04:45sell340.011771.980.001768.80
    682021.12.15 07:39t/p340.011768.800.001768.803.181199.86
    692021.12.15 16:54sell350.011769.740.001766.01
    702021.12.15 17:39t/p350.011766.010.001766.013.731203.59
    712021.12.20 17:01sell360.011793.800.001789.41
    722021.12.20 22:09t/p360.011789.410.001789.414.391207.98
    732021.12.21 16:52buy370.011793.730.001796.76
    742021.12.22 18:04t/p370.011796.760.001796.762.591210.57
    752022.01.18 18:19sell380.011813.030.001806.19
    762022.01.19 16:52close380.011828.030.001806.19-14.791195.78
    772022.02.09 11:30buy390.011827.790.001831.60
    782022.02.09 15:09t/p390.011831.600.001831.603.811199.59
    792022.02.15 11:19buy400.011856.870.001866.96
    802022.02.16 19:19t/p400.011866.960.001866.969.651209.24
    812022.02.18 17:33sell410.011895.770.001893.21
    822022.02.18 17:37t/p410.011893.210.001893.212.561211.80
    832022.03.02 18:16sell420.011921.470.001907.56
    842022.03.03 13:34close420.011936.480.001907.56-14.391197.40
    852022.03.14 08:45sell430.011975.330.001973.05
    862022.03.14 09:54t/p430.011973.050.001973.052.281199.68
    872022.04.22 19:22sell440.011936.790.001932.93
    882022.04.22 20:28t/p440.011932.930.001932.933.861203.54
    892022.04.26 16:08sell450.011905.800.001905.21
    902022.04.26 16:57t/p450.011905.210.001905.210.591204.13
    912022.06.10 16:01sell460.011839.900.001834.17
    922022.06.10 16:18t/p460.011834.170.001834.175.731209.86
    932022.06.24 05:00sell470.011823.760.001819.89
    942022.06.24 16:00t/p470.011819.890.001819.893.871213.73
    952022.07.20 16:52sell480.011708.520.001702.79
    962022.07.20 19:48t/p480.011702.790.001702.795.731219.46
    972022.08.01 01:30buy490.011764.460.001772.38
    982022.08.01 12:57t/p490.011772.380.001772.387.921227.38
    992022.08.02 18:02sell500.011776.930.001767.92
    1002022.08.02 21:02t/p500.011767.920.001767.929.011236.39
    1012022.08.22 14:15buy510.011735.800.001742.64
    1022022.08.23 11:42t/p510.011742.640.001742.646.401242.79
    1032022.09.05 04:45buy520.011711.690.001722.31
    1042022.09.06 03:46t/p520.011722.310.001722.3110.181252.97
    1052022.09.30 20:35buy530.011663.070.001667.31
    1062022.10.03 04:30t/p530.011667.310.001667.313.801256.77
    1072022.11.02 21:03sell540.011647.760.001626.40
    1082022.11.03 10:26t/p540.011626.400.001626.4021.981278.75
    1092022.11.15 04:45buy550.011771.800.001782.63
    1102022.11.15 09:47t/p550.011782.630.001782.6310.831289.58
    1112022.11.21 20:30buy560.011738.320.001753.50
    1122022.11.21 23:45buy570.011738.430.001742.36
    1132022.11.22 03:06t/p570.011742.360.001742.363.491293.06
    1142022.11.24 02:26t/p560.011753.500.001753.5012.971306.03
    1152022.11.30 10:00buy580.011755.420.001761.93
    1162022.11.30 11:36t/p580.011761.930.001761.936.511312.54
    1172022.11.30 17:18buy590.011751.830.001763.12
    1182022.11.30 21:20t/p590.011763.120.001763.1211.291323.83
    1192022.12.09 17:23buy600.011791.170.001800.19
    1202022.12.09 18:20t/p600.011800.190.001800.199.021332.85
    1212023.01.11 17:38buy610.011870.920.001874.91
    1222023.01.11 19:21t/p610.011874.910.001874.913.991336.84
    1232023.01.12 17:10sell620.011884.680.001867.96
    1242023.01.12 21:05close620.011899.680.001867.96-15.001321.84
    1252023.01.20 09:00buy630.011926.850.001936.66
    1262023.01.20 10:08t/p630.011936.660.001936.669.811331.65
    1272023.02.07 16:32sell640.011869.860.001868.93
    1282023.02.07 16:45t/p640.011868.930.001868.930.931332.58
    1292023.02.09 17:00sell650.011879.160.001868.22
    1302023.02.09 18:03t/p650.011868.220.001868.2210.941343.52
    1312023.03.01 04:30buy660.011829.010.001845.24
    1322023.03.02 20:35sell670.011835.870.001834.86
    1332023.03.02 20:43t/p670.011834.860.001834.861.011344.53
    1342023.03.03 10:41t/p660.011845.240.001845.2414.461358.99
    1352023.04.25 09:30buy680.011995.350.002008.13
    1362023.04.26 16:27t/p680.012008.130.002008.1312.341371.33
    1372023.04.26 19:17buy690.011988.980.001995.09
    1382023.04.27 05:12t/p690.011995.090.001995.094.781376.11
    1392023.05.15 17:34sell700.012016.660.002011.32
    1402023.05.16 09:04t/p700.012011.320.002011.325.551381.66
    1412023.05.26 17:09sell710.011951.200.001949.72
    1422023.05.26 17:19t/p710.011949.720.001949.721.481383.14
    1432023.06.07 17:32sell720.011958.950.001947.93
    1442023.06.07 18:50t/p720.011947.930.001947.9311.021394.16
    1452023.07.04 17:45buy730.011928.500.001932.73
    1462023.07.05 16:17t/p730.011932.730.001932.733.791397.95
    1472023.07.13 18:04sell740.011959.610.001957.54
    1482023.07.13 18:51t/p740.011957.540.001957.542.071400.02
    1492023.07.19 18:12sell750.011974.940.001970.18
    1502023.07.20 17:35t/p750.011970.180.001970.185.381405.40
    1512023.07.25 15:30sell760.011958.580.001953.88
    1522023.07.25 17:00t/p760.011953.880.001953.884.701410.10
    +
    diff --git a/Packed/XAUUSD-15M/Reports/X/Long/StrategyTester.gif b/Packed/XAUUSD-15M/Reports/X/Long/StrategyTester.gif new file mode 100644 index 0000000000000000000000000000000000000000..bb981a8263391a6e4e9fb4a1a2942573ba1780df GIT binary patch literal 7287 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 literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/X/Long/StrategyTester.htm b/Packed/XAUUSD-15M/Reports/X/Long/StrategyTester.htm new file mode 100644 index 0000000..692fc34 --- /dev/null +++ b/Packed/XAUUSD-15M/Reports/X/Long/StrategyTester.htm @@ -0,0 +1,111 @@ + + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.01 23:45 (2020.01.01 - 2023.08.02)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=false; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=false; +xRShortR2R=2; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.01; xRLongR2R=2; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.01; xRMaximumCandlesPerTrade=252; xROscillatorLength=7; xRFastLength=20; xRSlowLength=50; xRRangeMarketLength=50; xRSwingLength=7; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=false; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63353Ticks modelled72601176Modelling qualityn/a
    Mismatched charts errors808
    Initial deposit1000.00SpreadCurrent (60)
    Total net profit167.90Gross profit188.39Gross loss-20.49
    Profit factor9.20Expected payoff8.00
    Absolute drawdown30.19Maximal drawdown35.74 (3.55%)Relative drawdown3.55% (35.74)
    Total trades21Short positions (won %)0 (0.00%)Long positions (won %)21 (95.24%)
    Profit trades (% of total)20 (95.24%)Loss trades (% of total)1 (4.76%)
    Largestprofit trade16.76loss trade-20.49
    Averageprofit trade9.42loss trade-20.49
    Maximumconsecutive wins (profit in money)20 (188.39)consecutive losses (loss in money)1 (-20.49)
    Maximalconsecutive profit (count of wins)188.39 (20)consecutive loss (count of losses)-20.49 (1)
    Averageconsecutive wins20consecutive losses1
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.12.04 09:30buy10.011842.470.001854.89
    22020.12.07 10:38close10.011822.470.001854.89-20.49979.51
    32021.01.06 02:00buy20.011950.800.001958.60
    42021.01.06 12:00t/p20.011958.600.001958.607.80987.31
    52021.02.19 05:15buy30.011769.940.001786.47
    62021.02.19 16:09t/p30.011786.470.001786.4716.531003.84
    72021.04.08 14:00buy40.011746.330.001756.47
    82021.04.08 16:39t/p40.011756.470.001756.4710.141013.98
    92021.04.21 04:30buy50.011779.910.001788.70
    102021.04.21 16:39t/p50.011788.700.001788.708.791022.77
    112021.07.01 05:00buy60.011771.790.001789.04
    122021.07.02 15:39t/p60.011789.040.001789.0416.761039.54
    132021.07.14 12:00buy70.011814.510.001822.43
    142021.07.14 15:07t/p70.011822.430.001822.437.921047.46
    152021.08.26 13:45buy80.011787.260.001795.39
    162021.08.26 18:04t/p80.011795.390.001795.398.131055.59
    172021.10.21 09:45buy90.011786.760.001797.68
    182021.10.22 15:22t/p90.011797.680.001797.6810.431066.02
    192022.02.09 11:30buy100.011827.880.001831.69
    202022.02.09 15:09t/p100.011831.690.001831.693.811069.83
    212022.08.01 01:30buy110.011764.550.001772.47
    222022.08.01 12:57t/p110.011772.470.001772.477.921077.75
    232022.08.22 14:15buy120.011735.890.001742.73
    242022.08.23 11:42t/p120.011742.730.001742.736.351084.10
    252022.09.05 04:45buy130.011711.780.001722.40
    262022.09.06 03:47t/p130.011722.400.001722.4010.131094.24
    272022.11.15 04:45buy140.011771.890.001782.72
    282022.11.15 09:47t/p140.011782.720.001782.7210.831105.07
    292022.11.21 20:30buy150.011738.410.001753.59
    302022.11.21 23:45buy160.011738.520.001742.45
    312022.11.22 03:07t/p160.011742.450.001742.453.441108.51
    322022.11.24 02:26t/p150.011753.590.001753.5912.751121.26
    332022.11.30 10:00buy170.011755.510.001762.02
    342022.11.30 12:00t/p170.011762.020.001762.026.511127.77
    352023.01.20 09:00buy180.011926.940.001936.75
    362023.01.20 10:08t/p180.011936.750.001936.759.811137.58
    372023.03.01 04:30buy190.011829.100.001845.33
    382023.03.03 10:42t/p190.011845.330.001845.3314.281151.87
    392023.04.25 09:30buy200.011995.440.002008.22
    402023.04.26 16:28t/p200.012008.220.002008.2212.291164.16
    412023.07.04 17:45buy210.011928.590.001932.82
    422023.07.05 16:17t/p210.011932.820.001932.823.741167.90
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 1.gif b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 1.gif new file mode 100644 index 0000000000000000000000000000000000000000..e16f6e592c066ab71f60a8d94efeece4da808e10 GIT binary patch literal 8518 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 + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.01 23:45 (2020.01.01 - 2023.08.02)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=false; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=true; +enableXRLong=true; +enableXRShort=true; +xRShortR2R=2; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.01; xRLongR2R=2; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.01; xRMaximumCandlesPerTrade=252; xROscillatorLength=7; xRFastLength=20; xRSlowLength=50; xRRangeMarketLength=50; xRSwingLength=7; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=false; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63353Ticks modelled72601176Modelling qualityn/a
    Mismatched charts errors808
    Initial deposit1000.00SpreadCurrent (51)
    Total net profit95.44Gross profit261.37Gross loss-165.93
    Profit factor1.58Expected payoff1.34
    Absolute drawdown5.38Maximal drawdown31.55 (2.87%)Relative drawdown2.87% (31.55)
    Total trades71Short positions (won %)0 (0.00%)Long positions (won %)71 (57.75%)
    Profit trades (% of total)41 (57.75%)Loss trades (% of total)30 (42.25%)
    Largestprofit trade17.60loss trade-10.50
    Averageprofit trade6.37loss trade-5.53
    Maximumconsecutive wins (profit in money)4 (33.04)consecutive losses (loss in money)3 (-6.71)
    Maximalconsecutive profit (count of wins)33.04 (4)consecutive loss (count of losses)-16.35 (2)
    Averageconsecutive wins2consecutive losses2
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.12.03 23:30buy10.011841.350.001845.81
    22020.12.04 15:31t/p10.011845.810.001845.814.021004.02
    32020.12.08 18:30buy20.011870.260.001886.04
    42020.12.09 03:19close20.011867.580.001886.04-3.121000.90
    52020.12.30 03:45buy30.011883.200.001893.66
    62020.12.30 10:00close30.011878.490.001893.66-4.71996.19
    72020.12.30 18:00buy40.011885.770.001895.53
    82020.12.31 02:15t/p40.011895.530.001895.538.431004.62
    92020.12.31 13:45buy50.011894.790.001901.55
    102021.01.04 01:00t/p50.011901.550.001901.555.881010.49
    112021.01.05 11:30buy60.011944.620.001954.40
    122021.01.06 03:09t/p60.011954.400.001954.409.341019.83
    132021.04.05 17:30buy70.011729.330.001742.53
    142021.04.05 22:00close70.011725.680.001742.53-3.651016.18
    152021.04.26 21:00buy80.011779.920.001781.68
    162021.04.26 23:39t/p80.011781.680.001781.681.761017.94
    172021.05.11 09:00buy90.011837.320.001840.12
    182021.05.11 09:51close90.011834.840.001840.12-2.481015.46
    192021.05.18 23:45buy100.011870.120.001872.90
    202021.05.19 05:00close100.011867.630.001872.90-2.931012.53
    212021.05.20 08:15buy110.011876.000.001876.98
    222021.05.20 08:30t/p110.011876.980.001876.980.981013.51
    232021.05.21 11:30buy120.011876.440.001882.56
    242021.05.21 15:21t/p120.011882.560.001882.566.121019.63
    252021.05.24 19:15buy130.011883.920.001887.18
    262021.05.25 01:15close130.011880.910.001887.18-3.451016.18
    272021.05.25 10:45buy140.011884.070.001898.65
    282021.05.25 21:06t/p140.011898.650.001898.6514.581030.76
    292021.06.28 20:30buy150.011780.420.001785.26
    302021.06.28 21:15close150.011778.020.001785.26-2.401028.36
    312021.07.02 02:00buy160.011776.540.001777.70
    322021.07.02 03:39t/p160.011777.700.001777.701.161029.52
    332021.07.06 04:15buy170.011792.850.001796.01
    342021.07.06 04:53t/p170.011796.010.001796.013.161032.68
    352021.07.09 17:45buy180.011806.300.001814.82
    362021.07.12 07:16close180.011801.870.001814.82-4.871027.80
    372021.07.13 17:45buy190.011811.780.001825.18
    382021.07.13 21:07close190.011806.200.001825.18-5.581022.22
    392021.08.11 05:30buy200.011732.160.001747.52
    402021.08.11 18:06t/p200.011747.520.001747.5215.361037.58
    412021.08.12 23:00buy210.011753.700.001757.12
    422021.08.13 09:09t/p210.011757.120.001757.122.981040.56
    432021.08.18 04:30buy220.011789.060.001796.30
    442021.08.18 12:30close220.011787.880.001796.30-1.181039.38
    452021.09.01 22:30buy230.011815.240.001820.60
    462021.09.02 02:45close230.011813.220.001820.60-3.351036.04
    472021.09.02 03:15buy240.011815.340.001819.70
    482021.09.02 05:30close240.011813.160.001819.70-2.181033.86
    492021.09.03 05:15buy250.011813.400.001819.26
    502021.09.03 15:34t/p250.011819.260.001819.265.861039.72
    512021.09.27 03:45buy260.011753.840.001763.88
    522021.09.27 12:49close260.011749.120.001763.88-4.721035.00
    532021.10.22 02:15buy270.011785.940.001793.12
    542021.10.22 09:52t/p270.011793.120.001793.127.181042.18
    552021.11.16 04:45buy280.011867.770.001877.31
    562021.11.16 09:45close280.011863.300.001877.31-4.471037.71
    572021.12.07 04:30buy290.011780.920.001785.14
    582021.12.07 05:45close290.011778.500.001785.14-2.421035.29
    592021.12.07 20:30buy300.011784.340.001788.42
    602021.12.08 04:07t/p300.011788.420.001788.423.641038.92
    612021.12.28 08:15buy310.011813.060.001819.28
    622021.12.28 15:36t/p310.011819.280.001819.286.221045.14
    632022.01.10 21:30buy320.011801.130.001805.89
    642022.01.11 04:24t/p320.011805.890.001805.894.321049.46
    652022.01.19 11:15buy330.011816.040.001824.86
    662022.01.19 15:33t/p330.011824.860.001824.868.821058.28
    672022.01.24 23:15buy340.011843.290.001853.65
    682022.01.25 12:36close340.011836.700.001853.65-7.031051.25
    692022.01.31 11:30buy350.011791.190.001798.83
    702022.01.31 16:39t/p350.011798.830.001798.837.641058.89
    712022.02.16 09:30buy360.011856.020.001860.76
    722022.02.16 15:00close360.011852.740.001860.76-3.281055.61
    732022.02.28 16:15buy370.011914.370.001926.79
    742022.02.28 18:09close370.011904.370.001926.79-10.001045.61
    752022.03.03 22:15buy380.011937.320.001946.64
    762022.03.04 02:36t/p380.011946.640.001946.648.881054.49
    772022.03.04 13:00buy390.011947.540.001961.66
    782022.03.04 18:09t/p390.011961.660.001961.6614.121068.61
    792022.03.11 21:30buy400.011986.860.001999.16
    802022.03.14 00:22close400.011976.800.001999.16-10.501058.10
    812022.03.24 13:30buy410.011946.410.001957.33
    822022.03.24 14:03t/p410.011957.330.001957.3310.921069.02
    832022.04.05 16:15buy420.011935.180.001956.54
    842022.04.05 18:24close420.011925.180.001956.54-10.001059.02
    852022.04.13 08:30buy430.011969.770.001973.31
    862022.04.13 08:48t/p430.011973.310.001973.313.541062.56
    872022.05.20 09:45buy440.011848.250.001859.53
    882022.05.20 16:31close440.011840.590.001859.53-7.661054.90
    892022.05.23 01:15buy450.011845.220.001848.46
    902022.05.23 02:07t/p450.011848.460.001848.463.241058.14
    912022.05.30 06:45buy460.011859.710.001862.85
    922022.05.30 08:42t/p460.011862.850.001862.853.141061.28
    932022.06.08 15:15buy470.011851.230.001858.73
    942022.06.08 18:07t/p470.011858.730.001858.737.501068.78
    952022.07.05 02:15buy480.011809.920.001814.70
    962022.07.05 10:30close480.011806.730.001814.70-3.191065.59
    972022.10.27 08:45buy490.011669.880.001683.00
    982022.10.27 09:45close490.011661.850.001683.00-8.031057.56
    992022.11.02 04:00buy500.011650.370.001653.27
    1002022.11.02 10:00t/p500.011653.270.001653.272.901060.46
    1012022.11.16 12:15buy510.011783.530.001796.87
    1022022.11.16 16:43close510.011773.530.001796.87-10.001050.46
    1032022.11.30 05:45buy520.011754.060.001759.10
    1042022.11.30 10:53t/p520.011759.100.001759.105.041055.50
    1052022.12.08 15:15buy530.011787.270.001794.47
    1062022.12.08 17:28t/p530.011794.470.001794.477.201062.70
    1072022.12.21 16:45buy540.011818.210.001822.71
    1082022.12.21 17:36t/p540.011822.710.001822.714.501067.20
    1092023.01.09 18:45buy550.011876.890.001885.73
    1102023.01.10 02:26close550.011868.360.001885.73-8.971058.23
    1112023.01.11 06:30buy560.011877.530.001882.75
    1122023.01.11 07:37t/p560.011882.750.001882.755.221063.45
    1132023.02.09 05:00buy570.011879.440.001889.90
    1142023.02.09 16:00t/p570.011889.900.001889.9010.461073.91
    1152023.02.16 21:30buy580.011843.430.001847.45
    1162023.02.17 01:15close580.011835.010.001847.45-8.861065.05
    1172023.02.22 05:15buy590.011837.090.001840.59
    1182023.02.22 10:03t/p590.011840.590.001840.593.501068.55
    1192023.03.17 04:45buy600.011929.050.001946.65
    1202023.03.17 15:02t/p600.011946.650.001946.6517.601086.15
    1212023.03.28 17:00buy610.011963.600.001968.68
    1222023.03.28 17:57t/p610.011968.680.001968.685.081091.23
    1232023.03.30 10:45buy620.011969.470.001976.33
    1242023.03.30 19:01t/p620.011976.330.001976.336.861098.09
    1252023.04.26 13:30buy630.012000.050.002005.35
    1262023.04.26 15:30close630.011993.710.002005.35-6.341091.75
    1272023.04.27 06:00buy640.011999.070.002014.41
    1282023.04.27 15:35close640.011989.060.002014.41-10.011081.74
    1292023.05.09 08:15buy650.012026.970.002032.23
    1302023.05.09 14:30t/p650.012032.230.002032.235.261087.00
    1312023.05.15 19:45buy660.012020.210.002031.69
    1322023.05.15 22:00close660.012014.590.002031.69-5.621081.38
    1332023.06.09 17:30buy670.011967.540.001988.74
    1342023.06.09 18:30close670.011962.630.001988.74-4.911076.47
    1352023.06.13 03:15buy680.011960.910.001966.27
    1362023.06.13 15:30t/p680.011966.270.001966.275.361081.83
    1372023.07.12 03:45buy690.011936.010.001941.67
    1382023.07.12 15:30t/p690.011941.670.001941.675.661087.49
    1392023.07.19 23:00buy700.011978.690.001982.47
    1402023.07.20 04:30t/p700.011982.470.001982.472.451089.94
    1412023.07.31 15:00buy710.011959.430.001964.93
    1422023.07.31 15:31t/p710.011964.930.001964.935.501095.44
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 10.gif b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 10.gif new file mode 100644 index 0000000000000000000000000000000000000000..605ff8a8174d6898d692dd715d111857b9f310d0 GIT binary patch literal 7435 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 + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.04 23:45 (2020.01.01 - 2023.08.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=true; +enableXRLong=true; +enableXRShort=false; +xRShortR2R=1.5; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.015; xRLongR2R=2; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.01; xRMaximumCandlesPerTrade=252; xRSwingLength=48; xRSharpDetectionFactor=1350; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=false; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63629Ticks modelled72967510Modelling qualityn/a
    Mismatched charts errors826
    Initial deposit1000.00SpreadCurrent (60)
    Total net profit100.29Gross profit131.18Gross loss-30.88
    Profit factor4.25Expected payoff14.33
    Absolute drawdown5.87Maximal drawdown29.76 (2.81%)Relative drawdown2.81% (29.76)
    Total trades7Short positions (won %)0 (0.00%)Long positions (won %)7 (57.14%)
    Profit trades (% of total)4 (57.14%)Loss trades (% of total)3 (42.86%)
    Largestprofit trade53.90loss trade-10.88
    Averageprofit trade32.79loss trade-10.29
    Maximumconsecutive wins (profit in money)2 (24.79)consecutive losses (loss in money)2 (-20.88)
    Maximalconsecutive profit (count of wins)53.90 (1)consecutive loss (count of losses)-20.88 (2)
    Averageconsecutive wins1consecutive losses2
    +Graph
    + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.12.01 19:30buy10.011812.670.001867.81
    22020.12.07 18:09t/p10.011867.810.001867.8152.491052.49
    32021.02.23 04:07buy20.011813.000.001850.54
    42021.02.23 16:34close20.011803.000.001850.54-10.001042.49
    52021.07.29 04:30buy30.011816.220.001862.70
    62021.08.02 15:16close30.011806.220.001862.70-10.881031.60
    72021.11.05 18:45buy40.011814.410.001872.29
    82021.11.16 10:54t/p40.011872.290.001872.2953.901085.50
    92022.02.04 15:30buy50.011813.380.001827.74
    102022.02.04 15:37close50.011803.380.001827.74-10.001075.50
    112022.02.07 11:01buy60.011813.370.001825.93
    122022.02.07 16:19buy70.011815.990.001829.55
    132022.02.08 17:22t/p60.011825.930.001825.9312.121087.62
    142022.02.09 15:04t/p70.011829.550.001829.5512.681100.29
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 11.gif b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 11.gif new file mode 100644 index 0000000000000000000000000000000000000000..bd320fc7c1715320bf61e45a3849654b2f790e09 GIT binary patch literal 9361 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 + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.07 23:45 (2020.01.01 - 2023.08.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=true; +enableXRLong=true; +enableXRShort=false; +xRShortR2R=1.5; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.01; xRLongR2R=1.5; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.01; xRMaximumCandlesPerTrade=252; xRSwingLength=48; xRSharpDetectionFactor=1350; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=false; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63721Ticks modelled73052669Modelling qualityn/a
    Mismatched charts errors959
    Initial deposit1000.00SpreadCurrent (60)
    Total net profit66.06Gross profit313.93Gross loss-247.87
    Profit factor1.27Expected payoff1.44
    Absolute drawdown11.93Maximal drawdown111.45 (9.77%)Relative drawdown9.77% (111.45)
    Total trades46Short positions (won %)0 (0.00%)Long positions (won %)46 (43.48%)
    Profit trades (% of total)20 (43.48%)Loss trades (% of total)26 (56.52%)
    Largestprofit trade42.10loss trade-11.77
    Averageprofit trade15.70loss trade-9.53
    Maximumconsecutive wins (profit in money)4 (58.47)consecutive losses (loss in money)9 (-88.41)
    Maximalconsecutive profit (count of wins)61.47 (3)consecutive loss (count of losses)-88.41 (9)
    Averageconsecutive wins3consecutive losses4
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.12.01 19:30buy10.011812.670.001854.03
    22020.12.02 02:30buy20.011813.300.001827.99
    32020.12.02 08:45buy30.011813.220.001821.29
    42020.12.02 10:36t/p30.011821.290.001821.298.071008.07
    52020.12.02 12:22t/p20.011827.990.001827.9914.691022.76
    62020.12.07 16:54t/p10.011854.030.001854.0338.711061.47
    72021.02.05 19:15buy40.011814.870.001846.31
    82021.02.08 01:15buy50.011817.920.001853.94
    92021.02.08 07:30buy60.011815.770.001825.97
    102021.02.08 10:54close50.011807.920.001853.94-10.001051.47
    112021.02.08 11:45buy70.011813.190.001820.66
    122021.02.08 13:36t/p70.011820.660.001820.667.471058.94
    132021.02.08 14:53t/p60.011825.970.001825.9710.201069.14
    142021.02.09 11:24t/p40.011846.310.001846.3130.561099.69
    152021.02.23 04:00buy80.011813.660.001842.81
    162021.02.23 05:45buy90.011813.350.001827.83
    172021.02.23 12:03close80.011803.660.001842.81-10.001089.69
    182021.02.23 16:34close90.011803.350.001827.83-10.001079.69
    192021.05.06 18:00buy100.011815.960.001857.50
    202021.05.12 23:21close100.011815.950.001857.50-1.781077.91
    212021.07.08 14:00buy110.011817.800.001849.44
    222021.07.08 16:54close110.011807.800.001849.44-10.001067.91
    232021.07.13 15:30buy120.011813.610.001824.61
    242021.07.13 15:33close120.011803.610.001824.61-10.001057.91
    252021.07.13 18:15buy130.011812.880.001833.64
    262021.07.14 06:30buy140.011813.470.001826.19
    272021.07.14 08:30buy150.011813.850.001827.14
    282021.07.14 10:45buy160.011813.970.001827.44
    292021.07.14 15:09t/p140.011826.190.001826.1912.721070.63
    302021.07.14 15:37t/p150.011827.140.001827.1413.291083.92
    312021.07.14 15:37t/p160.011827.440.001827.4413.471097.39
    322021.07.15 10:09t/p130.011833.640.001833.6418.991116.38
    332021.07.29 04:30buy170.011816.220.001851.08
    342021.08.02 15:16close170.011806.220.001851.08-10.881105.50
    352021.08.27 19:15buy180.011814.970.001860.75
    362021.08.31 04:30buy190.011814.070.001822.88
    372021.08.31 14:15buy200.011814.320.001820.52
    382021.08.31 16:07close180.011804.970.001860.75-10.881094.61
    392021.08.31 16:09close200.011804.320.001820.52-10.001084.61
    402021.08.31 16:09close190.011804.070.001822.88-10.001074.61
    412021.08.31 20:00buy210.011814.380.001832.73
    422021.09.01 04:30buy220.011813.000.001829.28
    432021.09.03 14:00close210.011813.360.001832.73-3.231071.38
    442021.09.03 17:37t/p220.011829.280.001829.2814.511085.89
    452021.11.05 18:45buy230.011814.420.001857.85
    462021.11.10 16:24t/p230.011857.850.001857.8542.101128.00
    472021.12.27 18:00buy240.011813.070.001827.70
    482021.12.28 08:00buy250.011813.290.001822.58
    492021.12.28 17:00buy260.011814.240.001821.44
    502021.12.29 02:08close260.011804.240.001821.44-10.441117.55
    512021.12.29 10:07close250.011803.290.001822.58-10.441107.11
    522021.12.29 10:09close240.011803.070.001827.70-10.881096.23
    532021.12.30 19:00buy270.011813.910.001839.94
    542022.01.03 16:54close270.011803.910.001839.94-10.881085.34
    552022.01.04 17:45buy280.011817.100.001844.31
    562022.01.04 19:30buy290.011814.680.001838.26
    572022.01.06 03:09close280.011807.100.001844.31-11.771073.57
    582022.01.06 07:37close290.011804.680.001838.26-11.771061.80
    592022.01.11 18:30buy300.011815.760.001836.12
    602022.01.14 19:18close300.011815.750.001836.12-2.221059.58
    612022.02.04 12:30buy310.011814.110.001827.76
    622022.02.04 15:30buy320.011813.380.001824.15
    632022.02.04 15:37close310.011804.110.001827.76-10.001049.58
    642022.02.04 15:37close320.011803.380.001824.15-10.001039.58
    652022.02.07 02:45buy330.011812.890.001843.42
    662022.02.07 11:00buy340.011813.460.001823.02
    672022.02.07 14:00buy350.011814.020.001821.27
    682022.02.07 16:15buy360.011816.190.001826.66
    692022.02.07 21:07t/p350.011821.270.001821.277.251046.83
    702022.02.07 21:39t/p340.011823.020.001823.029.561056.39
    712022.02.08 17:24t/p360.011826.660.001826.6610.031066.42
    722022.02.11 20:34t/p330.011843.420.001843.4227.881094.30
    732022.12.13 16:30buy370.011818.980.001875.20
    742022.12.13 17:50close370.011808.980.001875.20-10.001084.30
    752022.12.13 18:45buy380.011813.360.001859.13
    762022.12.14 21:01close380.011803.350.001859.13-10.451073.84
    772022.12.20 17:15buy390.011820.930.001871.35
    782022.12.21 09:30buy400.011815.440.001820.23
    792022.12.21 14:00buy410.011814.150.001817.00
    802022.12.21 15:13t/p410.011817.000.001817.002.851076.69
    812022.12.21 17:08t/p400.011820.230.001820.234.791081.48
    822022.12.22 15:38close390.011810.930.001871.35-11.771069.72
    832022.12.27 17:30buy420.011821.790.001850.43
    842022.12.27 19:58close420.011811.790.001850.43-10.001059.72
    852022.12.27 20:15buy430.011815.080.001833.65
    862022.12.28 03:30buy440.011814.740.001832.80
    872022.12.28 10:15close430.011805.080.001833.65-10.441049.27
    882022.12.28 10:15close440.011804.730.001832.80-10.011039.26
    892022.12.29 17:00buy450.011814.400.001828.85
    902022.12.29 18:45buy460.011814.770.001829.77
    912023.01.03 01:05t/p450.011828.850.001828.8513.121052.39
    922023.01.03 01:07t/p460.011829.770.001829.7713.671066.06
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 2.gif b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 2.gif new file mode 100644 index 0000000000000000000000000000000000000000..4ec49d5e72004ab6488cc3d49dc2f16e4e9a2fd5 GIT binary patch literal 8102 zcmch(1yh^P+cq4m1gAxc7pPHOiUlq1l=5qFD-hh>9fAk<;E>=>&;rG+IDz18DGsH$ z<>CIn-{IZeYi8#>WRKmQow*d16+}eM-s21dwgCVP1_J;9#>dAoEn^_)X$u(K@>psC zgP>@@>X0S1ErkNt7?|9>{l$I}P=-(3LkF~NY)u<(e; zC`fcnY+QUoA~Y#EB{eNQBQq;ICpQn4Ur<<7TvA$A4o6f}R#n&3*3~yOHZ`}jBHP+K zI=i~R_4M|A?;jW(8Xg%P8=si`F;#^%J2$_uh+0}kudJ@EZ)|S;{PlbL&(7}N{=wnV z@yXxQe`n_xmnU^t`Pg?4uzSG6J|%QRS_AJX(@H9IQ%0SHMRJ@nX-iIxithn^8B_cr zgjp))KbquUN>Q)1V5ynOzg1$n%(~}jQp$$D2p8|Jj5L;OYSZ%IHNS8Aq@|+x_H|m* z`%gW&l?AMH(g1BNoT8c{Q1Hf72reP6OT5sRY3wIqqbeYS=t_NMCkz%mKBuJ;@dRt? zq3RZ16^8FiV6&=YUopY+`?lWg@%>D~IqX1rW> z0I3qt5sN>R-Vpd|7~%xS+hJyLQrCqocS&;IsIRNDq+&9YB^iVT4x}lNbRfhcTawC}NRhITU;# z0T@Pyk_ejy%aVemmwu%HHr`rVk{(F+nP8om_Fzj~O?^)RWB0rvlVa{M0uTTS%Yh+z z9)HLrnrwRV<{3Y-!6J`#!Jb&Se}fBu;BDX#IG-~2mpC3RS%uAd2V3jMKA7(0<+LbU z7q5CO8yVZEyCJM2W!TxvpBxZWGADd(wf1O|TxPcI-Hs{C9@tB-s(R%tXlo1MrhixC z>6%?$Q~?{csSqcg#vzl7yRb$qFVNY>=2B1FdbINgv$Z&~X4@bgT*n+drekvKyaFC# zYAS+Gci(zhGxCf@Z-1IY}EK8EJY5ZV3RbWy7xS*==@_VBY9R>hN z!DmBzO<6|W5Utn&If{3oZ*_DYu$=W5K97A~#iv~ z7b^f*e9tnIMLhFLSguFwoO^Ku{e~HbjtEXWZD0EApafGJv(@>{o-ogPR6 zxRa|jX>-5snxHnG@(DF&yAcqcYZ8@@<*CI~ns;5RoL!!9T&;|~e`(#F9Yhzk_7 zeZ@?OF9&$SnArnl*YKVCn}Q}~jv%BSvI}!tqf8$Re(Fmeo^O{#^r1((RQ;vbW#Q%` zN~W@tEjH4;H!)uc*!#`LIZ~>>V5b`_Gwbs)LQal#PeVzD&6otshEQ|K6e1H6pAgQ# z`SnQ_8-#m?*S#2r30vmzmF(1#gTJPDR{Z{eH)lhhS}0>l-4Bcx?SsZkTd+u!bsezC zlMC_VC45Q`|A&YJq*Jb68kS{b7+GT^wCMUL0aF4$rhWv1+J5cPT4ghw3BC$yQ{#?m{(ZYJDH~>cW^V|5W-z(kkx=P|cECGyRKz z0U4I`;FybmxV6jf%D=Y%1>(gXt8ZF-Yssk8+SrYbr;G0%ivW>Qk|0ZO0d7@aANqwuJptUcO2 zl6cL^V+I+oB#Rv$P~#4YMSh)(V1J;yf99K z+x?zzZy|X1k~Fru<13qBFtFlj=>{kd$t|_j7d@l+31QW)1Knc`Db`Apg zvf*ns1liA~5FIJSXMVnXH7GJ!pHN6dRa;NMDQ~#v@mlLA^PXGm3G`QK_K^!8d!8O zYtp*K4feMaERop8=hWR;a4Ehc`A>8zT%)OwD1JwtqkS5B;Z{P%wX33iGZWY1UdDHC zt?rdQn?QPABCNirnV~-iQxJqJI_!O^yqT*y8hQ`@(u=x^8V&D|OZrK)_4L~n6ei6d z9U^fccR@GEp5W4uftmPfDV(#!?dTG$oSec7{<=~!r^w%x2bfH=;Itzlr70b*D?z8wb3I11h&RNbbL zil|KrYVSZ2ZYPM>)!HUO4&UKdR(_X`kwJ2yVMUG8GxN zbN$Ok-)&DoMBlh4xM@K;|45UyPr3BEsZ!>V-^qgpa2)^2L&SFtjc!b@nLA zeHW_NOsY(b_DwLu)9?5^`TV-}O%-onTRUzya!4FH{qbGNNjR`VODs@;MH-v$_VBNOtm~C9 z&rOzJ_ZeKXYwsnN_d+cbRe4a?ffeRvK^FT2;?%L_fjL6`dAJNU5&zARa2@#^vpJM_ zb&>_UBj*X)YZ-Dq@xk0xYr_uRoVsf(Uw9r>uHG)K-~JxR_c^6szZ+J>L@3t={;~UZ z1!{Q309|Pf#ZCCDM;g$%{cL zNO3q+eJ9X>EnJHx&}b*f#5&xZEm(*q$ktjy8v=B=^3l5raTSR|okvERM#)@;xg(?e zht2U(QQ_oK!6J}wIEA+o@N;IUzIP-y1Q?2h*kwlIi9{#sMvKryXDCHySx2itqVwR< z`4EXH5n!}PIJ<7-#~nzbcZ8WzIQ%N0+B+r=7}m%Z)~pl;8xC*V2@krADuBm+8;(`I zfJ%v=i&E6c>SvU&$mc-mzGLN3Dur5`Mvn z*MWdP)~?IC2?wZz)+zJNLf4rOjQ=uOEf&LYL$JQUf&02~xz_RXY;jX42##_ro=q%% zbnGB1jvyo7B%PMA&6X+4_I-KM8`|VLp=8#! zwl&0pP|uW&oA=Km#4Sg5o05o{Xdcchd;36R`=>N#CXG*`&XWbXlYp88-)v%%;Au zqS1Z_bQ2~1vYX(YmC^kfs7N4`EJLCT#S190bJYWS&=POKGh*5@8wxP#bmh+{<_$HJ zX`+-fdV&RLoHOFuvT{cVp1%8%k}RD>ka3Aj%yiDg(#o>-;S&)6X8WYg(c}Q$<(Ri+ z8`$I+Mdz3xa?GOBh?UcS3`e4Na;ArYS${n$lyhT)vm#HjtFB_cqM*GaIhKgrHk-VT z=)5lF94kcLypQQ0-55+pE?!b@;}WnM5n4--^G7ddO*HSAAaZIqW|A%c+$M6yCjUA* zzlR{;JA!yy8Hg1_xI2=_IiCg0F4+E?Kg?SYwoy>jlN(MI>)Z%A#Ss;F9+- zC0k`BKWIzqMDiO%N^N4wru9l4M$4RhOTXNdxUlEGZYTaaT2x+Ft^z6wt|&0BD9@-X zPv0oVr-R3|!)e+x0JiW*03wCCENB#-o}Ce9c$Z6r^ef<_ zC5XL};+wp(isEWeS*35q^Pz&q_O#?>M4J*Kx}r>Vw4%16w0E?$mAz^}rK%#ks>ipg zq@t=RJH2JE3U?PlwTY-3sg&KTv|=yMCoFffEnla@R7$Fpd#TiHf~pSE5&fpsQ9U(s zH-%lkh|^K{9*Fp8wEQVy?Z5Wg4E@?(=h^}~Leyw2E_V>9*w(A=6_!S~-x}cF2y7 zHdszu+gQhUqR!Hs8ck};#At3}a{2^W&kwX+jG}2Xc2+bWyXMf=n!>3gaEp-Nkxb z;pw*)Z(#fu_qVkHglSD2t+))m-iUOiU2!uO5%ibr1l6(vWV!bk@SjyjFS>1rzP*H_ zz3;Z8Tdc2rtgpYaPYK<@w^Hh_hxw3rt@ydjDI9^k^rd9FYk890$8F!qrq(CF()U`t zUE8lut+QXlzFpJ5S)F*`;=-cfTDs*oV|B-OdiyL@wlb2ZJ>*qQTK0XGRsH{Q4p?#a zD~}H<-u20L_Bq)1YgY|^K4`R1ErylqCjmy{=>es!}^tk$%KX2 zal=q?zZl~0o%nUCW+eoh!vSi8Hui&gaf6-=qcG0V0`bu@!%_IbpojlxMdzTN@Q6#N zclrS^bG$bi8o??)q;xkZ*Exz%8>;CX>s}enR~s*}AFm=F_gX>5a->n07yY&w9;zCj zHXMSlG)eQGhBHS??{|*CT1LT zT3$Jf;aI^W0%rNS=7z=RI2>jK;%5}qXL*d~G`OY}jAl0tLq!h>#Tn=53Fj^trVJ;1 zK2H$pkN_m|<|~jRMga>{SM!YQA)INF;KPCu+Bs{9MId}Z%K>a);2gTK5H8*n#k|OO zKNmtWADTDkMKVe2fI&s5&xNm|!tPNqhp121lhN_+fLIF>mI~+9-0Wx+=x|AC0tMw- zPLfzwt)Ba2v{W8|lCWNkov^&DXvke1!t(8k0HBi9m)pCRYx9=#C#Ja3b8Qpo?}z9@ z^_8+b@0!(~Y~B!NeRONryt~AzaO+ALIU1aoImHM8tFNx9`z_pm%bJ>9c4(NsU)@;^ z+3Z3acX|fc6_jV>-q4UECzfNx8VV-nuH%>c@>cGRmI0G%7_NELv3Ysl_|_OXSiMdKL(+Gy zU1x8k24e!!MAKfu)E7z@f6WX>7%Qq@KHhd z+o!e7H+sn|S&{}q>-uGhx}@KBZ@W+FznMyIf8yS@eE4m3^xKwc`|;1yac$eVd)q=I zwQ+&>@>X@BOqQvtUZOp}*gUhd+|78_R)59$lLV00Kq2wexV4Ty;dR-qm3|p4N6yH@R2Bv~mSI zs9Za~N!TgvmKbMd3jnmdDc#DPWgiV`2&AG9F0e+#?eWgG93S9 z4BC;+-;pvod!l=)sh^=(7_Z24_EGap%jt|IXhkgX0Be05w7#x(?5<&Q&e{DJ`f&Ei zmSB%kq&{A*W0K`~?Bb9NcHj@5h0()P<=O zW;e=Y3oLbF&2zAGbs5ii6(n&Lo_NN*e$@}V8m+m;OkNL8BAK|HFD0*2k56EU=N3U1 z5&0K-Qs;5sZuZO1?hcLuOm4#bl#$&(bIKn4He|MVH1qAg`rFln(>0OieZ|B*0&_$6aI03CeRf#%8*@MY z;$iZ|{c7#a#)~sHCKwwAs9$~8zm6%5!UQw3U`gv*dqXne$V^Bfo5(PmsIs1oPjnWd zZDeWpnt+ZSq@r)@8Q?T?$IYd)iD`G=P5H#K>9&(N(rKtj+H%J*RgjK8?AAzd^JthzI++9o)@tUfp@IQD z*th^ZRvPQ6?BEC#HMPDH>6UC%_^U4^z@D!PaWuUAaV2~uLrG7SH8`VBOGabg>D8>D zo^7ip@!3qi-{mh?%MQn81F8$P@ ze_lbwxmarD&o~!<76nJ%WdY|KHvf&?gPyM7*!})7p zEQzqfN&-|0zyK;Z|9H*+-pXw^5S^AWwPs$Tnj;wxYTlc#GC0mQ1hQZXLr8vcpG+;e zwdfWqc07=XBTqK_W9fNF=>ZW`uYg={wLZ4Me-%mn6Z&Tn%9pT9T z;y`)6*TJ=#HdlRgtNu@L{)hVu?FZG{RgQ#ln&1Qi;F1`ImWDYLhh5iH+zP9a$?s5o z#)QR3FJn4{lpARlmiM0$0ff@_iY3}JOX)?-1p@LS_NHw(--28vR6Q=ce-Q>r-Wdia z#$LgJ&}d*ZFe!@02AE9NyJHf{$n@m5xz;n0*I}PQG=&^`dl8%OS}mR%XMRmk24{g` z$|LDj@DUh$LU1%V*L70aD$nzwuZ-OX8}OEm=FG>cAe2}3#`D|-QRAHqUj?aK^%aj7kcqrBO7uMpmr z+|E(fDs;_JRU66n5|%YbQ}QP9jpzX+4;#% zC`#wFvu@w38FTFD&$A`$G}M4|wjZsV5Je&bcpUI0yX( zM~c|RT2`pz<$#3#-OIrdNe;)le%HJDp~)CSzTuZqw|w9CB0@im)qG`jNutxVcO7|U zVkj^vY?UkUL(J(;VB*8riog_`SmmjENfSdO7t0F=fjJCF^-y45A&7%(Vb0c}I@MVF zx;f2Es!eyMFtZCdoA$oi8SVIu#4Fc2h`*JKTa3|b&G&es)y2c>RM_9^WuNDIq7JAS7rw!^SAoeXcp>`$}vI()f9yd*!#vo-Qwul_AsRuDb`#NBqb z?pE0)=D(^fy_sjw=1zGm7nX1w&nbrU0?RlH&SKghkiqvAF7fvE#q{gIA(2s+1ox_9 z#$(8k_?}Cm|3UE!3~*SQ&=nfaS;B&`hK%F(;Bc0x;X9|${Z!^RPUReU#icjG2IEQ* zn0v*>y{p{r^2sKX(~?ah>Gd+|Nisow5r+xEn6B}bs2Zo-2aD)2!@cB~?T{ye)a0^w zseM>vkjS?RZ zF14BD?VG|M`4ui)**5GBi^|FYmSaPdHPulm0rWLe{2@^b2%>2&FSs_ zISPUEEu3H2+E4xG(nSv88aZyCK8~m2=v$X-dVz9mn3_d-4srQt3#Os2TL{7Per=zd z=*onqk}PlAkFqZFCE)Wi&d+=QIW5m=%#~Ge57_8Ng^=&$o{Ke0U>YY|C073E#oIq1l)3n52TU;o+GZfb=W@7jl&Q2%y@lG+$`(@%QZ9eZOwVO=JdhTC17D8uu(1R z_t@w|c2nd@SGd1lrLOwQ^UmpCHLh9v1lP%z6qgQ`!EItj8bB2P-}moa|Eg}_Ye#kr zkXL)DK3yH4Zp^HH}i8d)JLtMF$+6daO`0r{O;LfUE@BRx#Fd`mB=%RKq?iKsz{IpB)UD>nI2ap*Y&bui zy + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2021.01.29 23:45 (2020.01.01 - 2021.01.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=true; +enableXRLong=true; +enableXRShort=false; +xRShortR2R=2; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.01; xRLongR2R=2; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.01; xRMaximumCandlesPerTrade=252; xRSwingLength=11; xRSharpDetectionFactor=650; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=false; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test4192Ticks modelled3544155Modelling quality24.42%
    Mismatched charts errors0
    Initial deposit1000.00SpreadCurrent (51)
    Total net profit59.63Gross profit79.64Gross loss-20.01
    Profit factor3.98Expected payoff7.45
    Absolute drawdown24.68Maximal drawdown42.62 (4.07%)Relative drawdown4.07% (42.62)
    Total trades8Short positions (won %)0 (0.00%)Long positions (won %)8 (75.00%)
    Profit trades (% of total)6 (75.00%)Loss trades (% of total)2 (25.00%)
    Largestprofit trade19.99loss trade-10.01
    Averageprofit trade13.27loss trade-10.00
    Maximumconsecutive wins (profit in money)3 (49.04)consecutive losses (loss in money)1 (-10.01)
    Maximalconsecutive profit (count of wins)49.04 (3)consecutive loss (count of losses)-10.01 (1)
    Averageconsecutive wins3consecutive losses1
    +Graph
    + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.11.27 02:45buy10.011813.240.001823.26
    22020.11.27 07:31close10.011803.230.001823.26-10.01989.99
    32020.12.01 16:15buy20.011814.300.001836.06
    42020.12.01 19:15buy30.011813.970.001831.39
    52020.12.02 01:00buy40.011812.820.001812.82
    62020.12.02 02:09t/p40.011812.820.001812.820.00989.99
    72020.12.02 08:30buy50.011814.560.001828.18
    82020.12.02 10:45buy60.011824.380.001851.10
    92020.12.02 12:22t/p50.011828.180.001828.1813.621003.61
    102020.12.02 12:39t/p30.011831.390.001831.3916.981020.59
    112020.12.02 15:54close60.011814.380.001851.10-10.001010.59
    122020.12.02 16:15buy70.011819.680.001832.70
    132020.12.03 05:19t/p70.011832.700.001832.7011.691022.28
    142020.12.03 05:37t/p20.011836.060.001836.0619.991042.27
    152021.01.18 02:45buy80.011819.330.001836.69
    162021.01.18 07:37t/p80.011836.690.001836.6917.361059.63
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 3.gif b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 3.gif new file mode 100644 index 0000000000000000000000000000000000000000..da54e45c9c422c1baac6b2bab123317a313c7e0a GIT binary patch literal 8185 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 VY>WPB9`z?Z%OT423 + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2021.01.29 23:45 (2020.01.01 - 2021.01.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=true; +enableXRLong=true; +enableXRShort=false; +xRShortR2R=2; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.01; xRLongR2R=2; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.01; xRMaximumCandlesPerTrade=252; xRSwingLength=11; xRSharpDetectionFactor=650; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=false; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test4192Ticks modelled3544155Modelling quality24.42%
    Mismatched charts errors0
    Initial deposit1000.00SpreadCurrent (51)
    Total net profit57.80Gross profit67.80Gross loss-10.00
    Profit factor6.78Expected payoff9.63
    Absolute drawdown20.25Maximal drawdown42.62 (4.01%)Relative drawdown4.01% (42.62)
    Total trades6Short positions (won %)0 (0.00%)Long positions (won %)6 (83.33%)
    Profit trades (% of total)5 (83.33%)Loss trades (% of total)1 (16.67%)
    Largestprofit trade19.99loss trade-10.00
    Averageprofit trade13.56loss trade-10.00
    Maximumconsecutive wins (profit in money)3 (36.12)consecutive losses (loss in money)1 (-10.00)
    Maximalconsecutive profit (count of wins)36.12 (3)consecutive loss (count of losses)-10.00 (1)
    Averageconsecutive wins3consecutive losses1
    +Graph
    + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.12.01 16:15buy10.011814.300.001836.06
    22020.12.01 19:15buy20.011813.970.001831.39
    32020.12.02 01:00buy30.011812.820.001818.34
    42020.12.02 08:30buy40.011814.560.001828.18
    52020.12.02 10:34t/p30.011818.340.001818.345.521005.52
    62020.12.02 10:45buy50.011824.380.001851.10
    72020.12.02 12:22t/p40.011828.180.001828.1813.621019.14
    82020.12.02 12:39t/p20.011831.390.001831.3916.981036.12
    92020.12.02 15:54close50.011814.380.001851.10-10.001026.12
    102020.12.02 16:15buy60.011819.680.001832.70
    112020.12.03 05:19t/p60.011832.700.001832.7011.691037.81
    122020.12.03 05:37t/p10.011836.060.001836.0619.991057.80
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 4.gif b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 4.gif new file mode 100644 index 0000000000000000000000000000000000000000..5d8f0b330da5d7886488d32e94010c23f849cbe9 GIT binary patch literal 7696 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 literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 4.htm b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 4.htm new file mode 100644 index 0000000..0d2ba8e --- /dev/null +++ b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 4.htm @@ -0,0 +1,85 @@ + + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2021.01.29 23:45 (2020.01.01 - 2021.01.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=true; +enableXRLong=true; +enableXRShort=false; +xRShortR2R=2; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.015; xRLongR2R=2; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.015; xRMaximumCandlesPerTrade=252; xRSwingLength=11; xRSharpDetectionFactor=650; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=false; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test4192Ticks modelled3544155Modelling quality24.42%
    Mismatched charts errors0
    Initial deposit1000.00SpreadCurrent (51)
    Total net profit67.80Gross profit67.80Gross loss-0.00
    Profit factorExpected payoff13.56
    Absolute drawdown20.25Maximal drawdown26.20 (2.60%)Relative drawdown2.60% (26.20)
    Total trades5Short positions (won %)0 (0.00%)Long positions (won %)5 (100.00%)
    Profit trades (% of total)5 (100.00%)Loss trades (% of total)0 (0.00%)
    Largestprofit trade19.99loss trade-0.00
    Averageprofit trade13.56loss trade-0.00
    Maximumconsecutive wins (profit in money)5 (67.80)consecutive losses (loss in money)0 (-0.00)
    Maximalconsecutive profit (count of wins)67.80 (5)consecutive loss (count of losses)-0.00 (0)
    Averageconsecutive wins5consecutive losses0
    +Graph
    + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.12.01 16:15buy10.011814.300.001836.06
    22020.12.01 19:15buy20.011813.970.001831.39
    32020.12.02 01:00buy30.011812.820.001818.34
    42020.12.02 08:30buy40.011814.560.001828.18
    52020.12.02 10:34t/p30.011818.340.001818.345.521005.52
    62020.12.02 12:22t/p40.011828.180.001828.1813.621019.14
    72020.12.02 12:39t/p20.011831.390.001831.3916.981036.12
    82020.12.02 16:15buy50.011819.680.001832.70
    92020.12.03 05:19t/p50.011832.700.001832.7011.691047.81
    102020.12.03 05:37t/p10.011836.060.001836.0619.991067.80
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 5.gif b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 5.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2053e225af7c9b505a49b6fa6eaf128e653104e GIT binary patch literal 8130 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 KO&1IRNdF($_lb}I literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 5.htm b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 5.htm new file mode 100644 index 0000000..42889ef --- /dev/null +++ b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 5.htm @@ -0,0 +1,103 @@ + + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2021.03.30 23:45 (2020.01.01 - 2021.03.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=true; +enableXRLong=true; +enableXRShort=false; +xRShortR2R=2; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.015; xRLongR2R=2; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.015; xRMaximumCandlesPerTrade=252; xRSwingLength=11; xRSharpDetectionFactor=650; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=false; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test8040Ticks modelled9476561Modelling quality24.70%
    Mismatched charts errors0
    Initial deposit1000.00SpreadCurrent (50)
    Total net profit63.48Gross profit123.48Gross loss-60.00
    Profit factor2.06Expected payoff4.53
    Absolute drawdown20.22Maximal drawdown67.32 (5.95%)Relative drawdown5.95% (67.32)
    Total trades14Short positions (won %)0 (0.00%)Long positions (won %)14 (71.43%)
    Profit trades (% of total)10 (71.43%)Loss trades (% of total)4 (28.57%)
    Largestprofit trade19.99loss trade-15.00
    Averageprofit trade12.35loss trade-15.00
    Maximumconsecutive wins (profit in money)10 (123.48)consecutive losses (loss in money)4 (-60.00)
    Maximalconsecutive profit (count of wins)123.48 (10)consecutive loss (count of losses)-60.00 (4)
    Averageconsecutive wins10consecutive losses4
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.12.01 16:15buy10.011814.290.001836.05
    22020.12.01 19:15buy20.011813.960.001831.38
    32020.12.02 01:00buy30.011812.810.001818.35
    42020.12.02 08:30buy40.011814.550.001828.17
    52020.12.02 10:34t/p30.011818.350.001818.355.541005.54
    62020.12.02 12:22t/p40.011828.170.001828.1713.621019.16
    72020.12.02 12:39t/p20.011831.380.001831.3816.981036.14
    82020.12.02 16:15buy50.011819.670.001832.69
    92020.12.03 05:19t/p50.011832.690.001832.6911.691047.83
    102020.12.03 05:37t/p10.011836.050.001836.0519.991067.82
    112021.02.05 22:30buy60.011812.580.001817.60
    122021.02.08 01:07t/p60.011817.600.001817.604.581072.40
    132021.02.08 01:15buy70.011817.820.001833.66
    142021.02.08 05:15buy80.011811.700.001817.36
    152021.02.08 09:21buy90.011816.730.001827.67
    162021.02.08 09:30t/p80.011817.360.001817.365.661078.06
    172021.02.08 13:22buy100.011817.990.001836.63
    182021.02.08 15:37t/p90.011827.670.001827.6710.941089.00
    192021.02.08 16:09t/p70.011833.660.001833.6615.841104.84
    202021.02.08 17:24t/p100.011836.630.001836.6318.641123.48
    212021.02.23 02:00buy110.011810.780.001816.74
    222021.02.23 04:00buy120.011813.560.001827.54
    232021.02.23 08:00buy130.011813.000.001818.80
    242021.02.23 16:38close120.011798.560.001827.54-15.001108.48
    252021.02.23 16:38close130.011798.000.001818.80-15.001093.48
    262021.02.23 16:48close110.011795.780.001816.74-15.001078.48
    272021.02.24 04:19buy140.011811.640.001823.28
    282021.02.24 15:47close140.011796.640.001823.28-15.001063.48
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 6.gif b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 6.gif new file mode 100644 index 0000000000000000000000000000000000000000..ca3bdd778f57c61152da0a37afb059f0b3c16e93 GIT binary patch literal 6488 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 literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 6.htm b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 6.htm new file mode 100644 index 0000000..e7f7192 --- /dev/null +++ b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 6.htm @@ -0,0 +1,89 @@ + + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2022.01.03 01:00 - 2023.08.04 23:45 (2022.01.01 - 2023.08.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=true; +enableXRLong=true; +enableXRShort=false; +xRShortR2R=1.5; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.015; xRLongR2R=1.5; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.015; xRMaximumCandlesPerTrade=252; xRSwingLength=7; xRSharpDetectionFactor=650; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=false; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test38648Ticks modelled45067506Modelling qualityn/a
    Mismatched charts errors826
    Initial deposit1000.00SpreadCurrent (60)
    Total net profit30.68Gross profit30.68Gross loss-0.00
    Profit factorExpected payoff4.38
    Absolute drawdown1.72Maximal drawdown11.16 (1.10%)Relative drawdown1.10% (11.16)
    Total trades7Short positions (won %)0 (0.00%)Long positions (won %)7 (100.00%)
    Profit trades (% of total)7 (100.00%)Loss trades (% of total)0 (0.00%)
    Largestprofit trade14.90loss trade-0.00
    Averageprofit trade4.38loss trade-0.00
    Maximumconsecutive wins (profit in money)7 (30.68)consecutive losses (loss in money)0 (-0.00)
    Maximalconsecutive profit (count of wins)30.68 (7)consecutive loss (count of losses)-0.00 (0)
    Averageconsecutive wins7consecutive losses0
    +Graph
    + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12022.01.11 02:39buy10.011803.570.001808.31
    22022.01.11 07:54t/p10.011808.310.001808.314.741004.74
    32022.01.11 16:48buy20.011803.580.001805.67
    42022.01.11 16:52t/p20.011805.670.001805.672.091006.83
    52022.02.01 10:19buy30.011803.580.001806.07
    62022.02.01 11:09t/p30.011806.070.001806.072.491009.32
    72022.02.01 16:03buy40.011803.580.001805.05
    82022.02.01 16:09t/p40.011805.050.001805.051.471010.79
    92022.02.02 14:02buy50.011803.480.001805.27
    102022.02.02 15:21t/p50.011805.270.001805.271.791012.58
    112022.12.20 11:15buy60.011803.390.001818.29
    122022.12.20 17:10t/p60.011818.290.001818.2914.901027.48
    132022.12.27 02:30buy70.011802.870.001806.07
    142022.12.27 04:45t/p70.011806.070.001806.073.201030.68
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 7.gif b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 7.gif new file mode 100644 index 0000000000000000000000000000000000000000..9e04b0ac63150042e5cff8a639eca261add7f046 GIT binary patch literal 8765 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
    + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.04 23:45 (2020.01.01 - 2023.08.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=true; +enableXRLong=true; +enableXRShort=false; +xRShortR2R=1.5; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.015; xRLongR2R=2; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.01; xRMaximumCandlesPerTrade=252; xRSwingLength=48; xRSharpDetectionFactor=650; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=false; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63629Ticks modelled72967510Modelling qualityn/a
    Mismatched charts errors826
    Initial deposit1000.00SpreadCurrent (60)
    Total net profit125.81Gross profit290.45Gross loss-164.65
    Profit factor1.76Expected payoff3.70
    Absolute drawdown11.93Maximal drawdown74.32 (6.57%)Relative drawdown6.57% (74.32)
    Total trades34Short positions (won %)0 (0.00%)Long positions (won %)34 (44.12%)
    Profit trades (% of total)15 (44.12%)Loss trades (% of total)19 (55.88%)
    Largestprofit trade53.92loss trade-11.77
    Averageprofit trade19.36loss trade-8.67
    Maximumconsecutive wins (profit in money)6 (82.82)consecutive losses (loss in money)6 (-46.65)
    Maximalconsecutive profit (count of wins)105.06 (5)consecutive loss (count of losses)-46.65 (6)
    Averageconsecutive wins4consecutive losses5
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.12.01 19:30buy10.011812.670.001867.81
    22020.12.02 02:30buy20.011813.300.001832.88
    32020.12.02 08:45buy30.011813.220.001823.98
    42020.12.02 10:39t/p30.011823.980.001823.9810.761010.76
    52020.12.03 05:19t/p20.011832.880.001832.8818.251029.01
    62020.12.07 18:09t/p10.011867.810.001867.8152.491081.50
    72021.02.08 07:30buy40.011816.010.001829.61
    82021.02.08 11:45buy50.011813.190.001823.15
    92021.02.08 14:46t/p50.011823.150.001823.159.961091.46
    102021.02.08 15:49t/p40.011829.610.001829.6113.601105.06
    112021.02.23 04:00buy60.011813.660.001852.52
    122021.02.23 05:45buy70.011813.350.001832.65
    132021.02.23 12:03close60.011803.660.001852.52-10.001095.06
    142021.02.23 16:34close70.011803.350.001832.65-10.001085.06
    152021.05.06 18:00buy80.011815.960.001871.34
    162021.05.12 23:21close80.011815.950.001871.34-1.781083.28
    172021.07.08 14:00buy90.011817.800.001859.98
    182021.07.08 16:54close90.011807.800.001859.98-10.001073.28
    192021.07.13 15:30buy100.011813.610.001828.27
    202021.07.13 15:33close100.011803.610.001828.27-10.001063.28
    212021.07.13 18:15buy110.011812.880.001840.56
    222021.07.14 06:30buy120.011813.470.001830.43
    232021.07.14 08:33buy130.011814.130.001831.85
    242021.07.14 10:45buy140.011813.970.001831.93
    252021.07.15 09:06t/p120.011830.430.001830.4315.631078.91
    262021.07.15 09:09t/p130.011831.850.001831.8516.391095.31
    272021.07.15 09:09t/p140.011831.930.001831.9316.631111.94
    282021.07.16 17:52close110.011812.870.001840.56-2.221109.72
    292021.07.29 04:30buy150.011816.220.001862.70
    302021.08.02 15:16close150.011806.220.001862.70-10.881098.83
    312021.08.27 19:15buy160.011814.970.001876.01
    322021.08.31 04:30buy170.011814.070.001825.81
    332021.08.31 14:15buy180.011814.320.001822.58
    342021.08.31 16:07close160.011804.970.001876.01-10.881087.95
    352021.08.31 16:09close180.011804.320.001822.58-10.001077.95
    362021.08.31 16:09close170.011804.070.001825.81-10.001067.95
    372021.09.01 06:00buy190.011814.440.001834.00
    382021.09.07 11:09close190.011814.430.001834.00-2.661065.28
    392021.11.05 18:45buy200.011814.420.001872.32
    402021.11.16 10:54t/p200.011872.320.001872.3253.921119.20
    412021.12.27 18:00buy210.011813.070.001832.57
    422021.12.28 08:00buy220.011813.290.001825.67
    432021.12.28 17:00buy230.011814.240.001823.84
    442021.12.29 02:08close230.011804.240.001823.84-10.441108.76
    452021.12.29 10:07close220.011803.290.001825.67-10.441098.32
    462021.12.29 10:09close210.011803.070.001832.57-10.881087.43
    472022.01.11 18:30buy240.011815.760.001842.90
    482022.01.14 19:18close240.011815.750.001842.90-2.221085.21
    492022.02.04 15:30buy250.011813.380.001827.74
    502022.02.04 15:37close250.011803.380.001827.74-10.001075.21
    512022.02.07 02:49buy260.011813.160.001853.86
    522022.02.07 11:00buy270.011813.460.001826.20
    532022.02.07 14:00buy280.011814.020.001823.68
    542022.02.07 16:15buy290.011816.190.001830.15
    552022.02.08 15:54t/p280.011823.680.001823.689.221084.43
    562022.02.08 17:22t/p270.011826.200.001826.2012.301096.73
    572022.02.09 15:06t/p290.011830.150.001830.1513.081109.80
    582022.02.11 20:49t/p260.011853.860.001853.8638.051147.85
    592022.12.20 17:22buy300.011818.080.001879.60
    602022.12.21 09:31buy310.011815.890.001822.27
    612022.12.21 14:00buy320.011814.150.001817.95
    622022.12.21 15:20t/p320.011817.950.001817.953.801151.65
    632022.12.21 17:36t/p310.011822.270.001822.276.381158.03
    642022.12.22 15:53close300.011808.080.001879.60-11.771146.26
    652022.12.27 20:15buy330.011815.080.001839.84
    662022.12.28 03:30buy340.011814.740.001838.82
    672022.12.28 10:15close330.011805.080.001839.84-10.441135.82
    682022.12.28 10:15close340.011804.730.001838.82-10.011125.81
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 8.gif b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 8.gif new file mode 100644 index 0000000000000000000000000000000000000000..de9b6fbcfd723a3d36b93b68473f01c0b48885bd GIT binary patch literal 7827 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 literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 8.htm b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 8.htm new file mode 100644 index 0000000..1daf914 --- /dev/null +++ b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 8.htm @@ -0,0 +1,97 @@ + + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.04 23:45 (2020.01.01 - 2023.08.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=true; +enableXRLong=true; +enableXRShort=false; +xRShortR2R=1.5; xRShortLotsPerTradePercent=0.0001; xRShortMaxDrawdownPerTradePercent=0.15; xRLongR2R=2; xRLongLotsPerTradePercent=0.0001; xRLongMaxDrawdownPerTradePercent=0.1; xRMaximumCandlesPerTrade=252; xRSwingLength=48; xRSharpDetectionFactor=1350; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=false; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63629Ticks modelled72967510Modelling qualityn/a
    Mismatched charts errors826
    Initial deposit1000.00SpreadCurrent (60)
    Total net profit1586.83Gross profit2026.73Gross loss-439.91
    Profit factor4.61Expected payoff144.26
    Absolute drawdown96.42Maximal drawdown616.71 (32.38%)Relative drawdown32.38% (616.71)
    Total trades11Short positions (won %)0 (0.00%)Long positions (won %)11 (54.55%)
    Profit trades (% of total)6 (54.55%)Loss trades (% of total)5 (45.45%)
    Largestprofit trade538.99loss trade-108.85
    Averageprofit trade337.79loss trade-87.98
    Maximumconsecutive wins (profit in money)2 (1072.41)consecutive losses (loss in money)3 (-317.69)
    Maximalconsecutive profit (count of wins)1072.41 (2)consecutive loss (count of losses)-317.69 (3)
    Averageconsecutive wins2consecutive losses2
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.12.01 19:30buy10.101812.670.001867.81
    22020.12.02 10:36buy20.101821.850.001841.33
    32020.12.03 09:52t/p20.101841.330.001841.33181.531181.53
    42020.12.07 18:09t/p10.101867.810.001867.81524.861706.39
    52021.02.23 04:07buy30.101813.000.001850.54
    62021.02.23 16:34close30.101803.000.001850.54-100.001606.39
    72021.07.29 04:30buy40.101816.220.001862.70
    82021.07.29 09:52buy50.101818.920.001868.58
    92021.08.02 04:39close50.101808.920.001868.58-108.851497.55
    102021.08.02 15:16close40.101806.220.001862.70-108.851388.70
    112021.11.05 18:45buy60.101814.410.001872.29
    122021.11.08 03:07buy70.101819.710.001876.59
    132021.11.16 10:54t/p60.101872.290.001872.29538.991927.69
    142021.11.16 15:18t/p70.101876.590.001876.59533.422461.11
    152022.02.04 15:30buy80.101813.380.001827.74
    162022.02.04 15:37close80.101803.380.001827.74-100.002361.11
    172022.02.07 11:01buy90.101813.370.001825.93
    182022.02.07 16:19buy100.101815.990.001829.55
    192022.02.07 20:25buy110.101821.630.001843.73
    202022.02.08 17:22t/p90.101825.930.001825.93121.182482.29
    212022.02.09 15:04t/p100.101829.550.001829.55126.752609.04
    222022.02.10 15:33close110.101821.620.001843.73-22.222586.83
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 9.gif b/Packed/XAUUSD-15M/Reports/XR/Long/StrategyTester 9.gif new file mode 100644 index 0000000000000000000000000000000000000000..13f7a09c0d00560c3ba60cbdb17cb6646f996064 GIT binary patch literal 8847 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 + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.04 23:45 (2020.01.01 - 2023.08.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=true; +enableXRLong=true; +enableXRShort=false; +xRShortR2R=1.5; xRShortLotsPerTradePercent=0.0001; xRShortMaxDrawdownPerTradePercent=0.15; xRLongR2R=2; xRLongLotsPerTradePercent=0.0001; xRLongMaxDrawdownPerTradePercent=0.1; xRMaximumCandlesPerTrade=252; xRSwingLength=48; xRSharpDetectionFactor=1350; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=false; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63629Ticks modelled72967510Modelling qualityn/a
    Mismatched charts errors826
    Initial deposit1000.00SpreadCurrent (60)
    Total net profit868.35Gross profit2155.53Gross loss-1287.18
    Profit factor1.67Expected payoff36.18
    Absolute drawdown96.42Maximal drawdown851.58 (44.06%)Relative drawdown44.06% (851.58)
    Total trades24Short positions (won %)0 (0.00%)Long positions (won %)24 (37.50%)
    Profit trades (% of total)9 (37.50%)Loss trades (% of total)15 (62.50%)
    Largestprofit trade539.19loss trade-117.69
    Averageprofit trade239.50loss trade-85.81
    Maximumconsecutive wins (profit in money)3 (842.39)consecutive losses (loss in money)5 (-489.58)
    Maximalconsecutive profit (count of wins)842.39 (3)consecutive loss (count of losses)-489.58 (5)
    Averageconsecutive wins2consecutive losses4
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.12.01 19:30buy10.101812.670.001867.81
    22020.12.02 10:36buy20.101821.850.001841.33
    32020.12.03 09:52t/p20.101841.330.001841.33181.531181.53
    42020.12.07 18:09t/p10.101867.810.001867.81524.861706.39
    52021.02.08 07:30buy30.101815.770.001829.37
    62021.02.08 15:49t/p30.101829.370.001829.37136.001842.39
    72021.02.23 04:00buy40.101813.660.001852.52
    82021.02.23 08:07buy50.101813.980.001826.90
    92021.02.23 11:54close50.101803.980.001826.90-100.001742.39
    102021.02.23 12:03close40.101803.660.001852.52-100.001642.39
    112021.05.06 18:04buy60.101815.740.001870.68
    122021.05.12 23:21close60.101815.730.001870.68-17.791624.60
    132021.07.13 15:30buy70.101813.610.001828.27
    142021.07.13 15:33close70.101803.610.001828.27-100.001524.60
    152021.07.14 10:45buy80.101813.970.001831.93
    162021.07.14 13:37buy90.101817.470.001838.05
    172021.07.15 09:09t/p80.101831.930.001831.93166.331690.93
    182021.07.19 07:30close90.101813.820.001838.05-58.621632.32
    192021.07.29 04:30buy100.101816.220.001862.70
    202021.07.29 09:51buy110.101818.660.001868.32
    212021.08.02 04:39close110.101808.660.001868.32-108.851523.47
    222021.08.02 15:16close100.101806.220.001862.70-108.851414.62
    232021.08.27 19:21buy120.101814.650.001875.05
    242021.08.27 22:54buy130.101819.260.001887.44
    252021.08.30 18:39close130.101809.260.001887.44-104.421310.20
    262021.08.31 16:09close120.101804.650.001875.05-108.851201.36
    272021.11.05 18:45buy140.101814.420.001872.32
    282021.11.08 07:54buy150.101821.600.001845.16
    292021.11.10 15:39t/p150.101845.160.001845.16226.751428.11
    302021.11.16 10:54t/p140.101872.320.001872.32539.191967.30
    312022.01.11 18:43buy160.101816.350.001843.49
    322022.01.14 19:15close160.101816.340.001843.49-22.221945.09
    332022.02.04 15:30buy170.101813.380.001827.74
    342022.02.04 15:37close170.101803.380.001827.74-100.001845.09
    352022.02.07 11:00buy180.101813.460.001826.20
    362022.02.07 14:00buy190.101814.020.001823.68
    372022.02.07 21:36buy200.101823.260.001848.06
    382022.02.08 15:54t/p190.101823.680.001823.6892.181937.26
    392022.02.08 17:22t/p180.101826.200.001826.20122.982060.24
    402022.02.10 15:31close200.101823.250.001848.06-22.222038.03
    412022.12.20 17:22buy210.101818.080.001879.60
    422022.12.21 10:00buy220.101816.930.001825.99
    432022.12.22 15:53close210.101808.080.001879.60-117.691920.33
    442022.12.22 15:58close220.101806.930.001825.99-113.271807.07
    452022.12.27 20:15buy230.101815.080.001839.84
    462022.12.28 10:15close230.101805.080.001839.84-104.421702.64
    472022.12.28 10:15buy240.101805.660.001824.00
    482022.12.30 16:07t/p240.101824.000.001824.00165.711868.35
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 1.gif b/Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 1.gif new file mode 100644 index 0000000000000000000000000000000000000000..848a4a0f71e145677d4343e71108f31e91d6c459 GIT binary patch literal 9417 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 literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 1.htm b/Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 1.htm new file mode 100644 index 0000000..e95644f --- /dev/null +++ b/Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 1.htm @@ -0,0 +1,283 @@ + + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.04 23:45 (2020.01.01 - 2023.08.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=true; +enableXRLong=false; +enableXRShort=true; +xRShortR2R=2; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.01; xRLongR2R=2; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.01; xRMaximumCandlesPerTrade=252; xRSwingLength=48; xRSharpDetectionFactor=1350; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=false; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63629Ticks modelled72967534Modelling qualityn/a
    Mismatched charts errors826
    Initial deposit1000.00SpreadCurrent (51)
    Total net profit138.50Gross profit694.79Gross loss-556.29
    Profit factor1.25Expected payoff1.33
    Absolute drawdown75.42Maximal drawdown148.46 (13.84%)Relative drawdown13.84% (148.46)
    Total trades104Short positions (won %)104 (44.23%)Long positions (won %)0 (0.00%)
    Profit trades (% of total)46 (44.23%)Loss trades (% of total)58 (55.77%)
    Largestprofit trade50.75loss trade-11.05
    Averageprofit trade15.10loss trade-9.59
    Maximumconsecutive wins (profit in money)10 (194.09)consecutive losses (loss in money)11 (-108.64)
    Maximalconsecutive profit (count of wins)194.09 (10)consecutive loss (count of losses)-108.64 (11)
    Averageconsecutive wins4consecutive losses5
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.11.27 06:45sell10.011807.850.001793.49
    22020.11.27 12:30sell20.011808.700.001798.70
    32020.11.27 15:07t/p20.011798.700.001798.7010.001010.00
    42020.11.27 15:09t/p10.011793.490.001793.4914.361024.36
    52020.12.01 17:30sell30.011806.320.001788.90
    62020.12.01 20:15close30.011816.330.001788.90-10.011014.35
    72020.12.02 05:15sell40.011809.570.001794.49
    82020.12.02 10:34close40.011819.570.001794.49-10.001004.35
    92021.02.04 16:00sell50.011808.190.001770.49
    102021.02.05 21:00sell60.011810.160.001800.30
    112021.02.05 23:00sell70.011810.890.001802.49
    122021.02.08 01:09close50.011818.190.001770.49-9.59994.76
    132021.02.08 04:45sell80.011810.250.001793.39
    142021.02.08 11:00sell90.011809.020.001789.70
    152021.02.08 13:31close90.011819.020.001789.70-10.00984.76
    162021.02.08 13:34close60.011820.170.001800.30-9.80974.96
    172021.02.08 13:34close80.011820.250.001793.39-10.00964.96
    182021.02.08 13:36close70.011820.890.001802.49-9.79955.16
    192021.02.16 15:15sell100.011811.040.001780.54
    202021.02.16 18:30sell110.011803.470.001759.29
    212021.02.17 15:24t/p100.011780.540.001780.5430.71985.87
    222021.02.22 16:37close110.011803.480.001759.291.23987.10
    232021.02.22 19:30sell120.011809.990.001805.03
    242021.02.23 09:45sell130.011809.820.001797.80
    252021.02.23 11:54t/p120.011805.030.001805.035.17992.26
    262021.02.23 14:45sell140.011810.320.001799.30
    272021.02.23 16:37t/p140.011799.300.001799.3011.021003.28
    282021.02.23 16:45t/p130.011797.800.001797.8012.021015.30
    292021.02.24 05:00sell150.011810.060.001802.60
    302021.02.24 15:21t/p150.011802.600.001802.607.461022.76
    312021.05.13 13:15sell160.011810.390.001785.51
    322021.05.13 15:39close160.011820.390.001785.51-10.001012.76
    332021.06.17 10:30sell170.011809.210.001747.49
    342021.07.06 10:54close170.011809.220.001747.493.491016.26
    352021.07.06 16:15sell180.011806.750.001790.71
    362021.07.06 19:24t/p180.011790.710.001790.7116.041032.30
    372021.07.08 17:00sell190.011808.270.001788.55
    382021.07.09 21:45sell200.011811.020.001808.80
    392021.07.09 22:54t/p200.011808.800.001808.802.221034.52
    402021.07.13 06:15sell210.011811.020.001808.06
    412021.07.13 08:37t/p210.011808.060.001808.062.961037.48
    422021.07.13 10:15sell220.011811.280.001808.84
    432021.07.13 11:00close190.011810.250.001788.55-1.361036.12
    442021.07.13 11:06t/p220.011808.840.001808.842.441038.56
    452021.07.13 16:15sell230.011809.710.001795.17
    462021.07.13 20:15sell240.011808.830.001792.53
    472021.07.14 15:04close240.011818.830.001792.53-9.791028.76
    482021.07.14 15:04close230.011819.710.001795.17-9.791018.97
    492021.07.16 22:30sell250.011810.350.001778.15
    502021.07.19 09:15sell260.011806.190.001784.27
    512021.07.19 18:15sell270.011807.210.001790.91
    522021.07.19 23:30sell280.011811.470.001803.69
    532021.07.20 04:09close260.011816.190.001784.27-9.791009.17
    542021.07.20 04:31close270.011817.210.001790.91-9.79999.38
    552021.07.20 15:36close250.011820.350.001778.15-9.59989.79
    562021.07.20 15:37close280.011821.470.001803.69-9.79980.00
    572021.07.20 18:15sell290.011810.140.001780.96
    582021.07.20 20:30sell300.011810.840.001783.06
    592021.07.21 10:30sell310.011808.770.001799.15
    602021.07.21 15:09t/p310.011799.150.001799.159.62989.62
    612021.07.26 10:22close290.011810.150.001780.961.23990.84
    622021.07.26 10:24close300.011810.850.001783.061.23992.07
    632021.07.30 21:45sell320.011810.450.001768.95
    642021.08.02 04:45sell330.011809.440.001774.22
    652021.08.02 06:30sell340.011811.380.001786.42
    662021.08.02 09:15sell350.011810.310.001797.51
    672021.08.02 20:09close330.011819.440.001774.22-10.00982.07
    682021.08.03 04:30sell360.011809.740.001790.54
    692021.08.04 15:06close360.011819.740.001790.54-9.79972.28
    702021.08.04 15:07close350.011820.310.001797.51-9.59962.69
    712021.08.04 15:07close320.011820.450.001768.95-9.38953.31
    722021.08.04 15:09close340.011821.380.001786.42-9.59943.72
    732021.08.04 18:30sell370.011806.630.001756.91
    742021.08.04 21:45sell380.011810.860.001769.60
    752021.08.05 01:00sell390.011811.890.001772.69
    762021.08.05 03:15sell400.011810.920.001769.78
    772021.08.06 16:07t/p390.011772.690.001772.6939.41983.13
    782021.08.06 16:39t/p400.011769.780.001769.7841.351024.47
    792021.08.06 16:39t/p380.011769.600.001769.6042.081066.56
    802021.08.09 01:22t/p370.011756.910.001756.9150.751117.31
    812021.08.30 18:30sell410.011811.210.001797.55
    822021.08.31 16:15sell420.011803.320.001771.96
    832021.08.31 16:37close420.011813.320.001771.96-10.001107.31
    842021.08.31 18:15sell430.011805.950.001779.85
    852021.08.31 20:09close430.011815.950.001779.85-10.001097.31
    862021.09.01 11:15sell440.011809.570.001794.93
    872021.09.01 15:52close440.011819.570.001794.93-10.001087.31
    882021.09.01 18:15sell450.011810.930.001793.05
    892021.09.02 07:30sell460.011811.430.001801.71
    902021.09.02 12:30close410.011815.680.001797.55-3.441083.87
    912021.09.02 17:30sell470.011807.760.001789.30
    922021.09.03 04:45sell480.011811.190.001806.13
    932021.09.03 15:18close470.011817.760.001789.30-9.791074.07
    942021.09.03 15:34close450.011820.930.001793.05-9.181064.90
    952021.09.03 15:34close480.011821.190.001806.13-10.001054.90
    962021.09.03 15:34close460.011821.430.001801.71-9.791045.10
    972021.09.07 13:15sell490.011810.900.001778.58
    982021.09.07 16:15sell500.011810.490.001777.53
    992021.09.16 12:54t/p490.011778.580.001778.5834.591079.69
    1002021.09.16 13:00t/p500.011777.530.001777.5335.231114.92
    1012021.10.22 18:30sell510.011800.480.001774.18
    1022021.10.28 05:24close510.011800.490.001774.181.231116.14
    1032021.11.22 19:45sell520.011810.200.001736.88
    1042021.11.23 04:15sell530.011807.780.001740.54
    1052021.11.26 09:54close530.011807.790.001740.541.021117.17
    1062021.11.26 12:03close520.011810.210.001736.881.231118.39
    1072021.11.26 14:30sell540.011809.150.001796.79
    1082021.11.26 16:54t/p540.011796.790.001796.7912.361130.75
    1092021.12.17 16:00sell550.011806.620.001791.74
    1102021.12.20 21:49t/p550.011791.740.001791.7415.091145.84
    1112021.12.27 19:15sell560.011809.010.001800.49
    1122021.12.27 23:30sell570.011811.240.001807.18
    1132021.12.28 02:30sell580.011811.150.001806.91
    1142021.12.28 15:24close560.011819.010.001800.49-9.791136.04
    1152021.12.28 18:15sell590.011809.840.001789.48
    1162021.12.28 20:00sell600.011810.260.001790.74
    1172021.12.28 20:51t/p570.011807.180.001807.184.271140.31
    1182021.12.28 20:51t/p580.011806.910.001806.914.241144.55
    1192021.12.29 15:09t/p600.011790.740.001790.7419.731164.28
    1202021.12.31 09:07close590.011819.840.001789.48-8.971155.31
    1212022.01.03 16:00sell610.011806.970.001765.87
    1222022.01.04 17:39close610.011816.970.001765.87-9.791145.51
    1232022.01.05 22:30sell620.011810.000.001771.12
    1242022.01.11 08:16close620.011810.010.001771.121.231146.74
    1252022.01.18 12:00sell630.011810.270.001785.65
    1262022.01.18 15:30sell640.011806.890.001775.51
    1272022.01.18 15:37close640.011816.890.001775.51-10.001136.74
    1282022.01.18 16:04close630.011820.270.001785.65-10.001126.74
    1292022.01.19 05:15sell650.011810.740.001792.48
    1302022.01.19 07:00sell660.011811.540.001803.30
    1312022.01.19 15:19close650.011820.740.001792.48-10.001116.74
    1322022.01.19 15:19close660.011821.540.001803.30-10.001106.74
    1332022.01.27 09:00sell670.011810.600.001765.34
    1342022.01.27 13:15sell680.011810.700.001788.24
    1352022.01.28 12:52t/p680.011788.240.001788.2422.671129.41
    1362022.02.02 17:24close670.011810.610.001765.340.811130.22
    1372022.02.04 13:45sell690.011810.330.001802.37
    1382022.02.04 15:39t/p690.011802.370.001802.377.961138.18
    1392022.02.04 16:00sell700.011795.320.001756.60
    1402022.02.04 16:39close700.011805.320.001756.60-10.001128.18
    1412022.02.07 03:45sell710.011809.750.001799.03
    1422022.02.07 10:30sell720.011811.100.001803.08
    1432022.02.07 12:30sell730.011811.530.001804.37
    1442022.02.07 19:37close710.011819.750.001799.03-10.001118.18
    1452022.02.07 20:22close720.011821.100.001803.08-10.001108.18
    1462022.02.07 20:24close730.011821.530.001804.37-10.001098.18
    1472022.05.13 16:15sell740.011802.800.001751.28
    1482022.05.13 17:02close740.011812.800.001751.28-10.001088.18
    1492022.05.13 19:00sell750.011808.990.001769.85
    1502022.05.16 02:00sell760.011810.840.001791.70
    1512022.05.16 06:45sell770.011809.830.001794.67
    1522022.05.16 10:43t/p770.011794.670.001794.6715.161103.34
    1532022.05.16 10:51t/p760.011791.700.001791.7019.141122.48
    1542022.05.16 21:55close750.011819.020.001769.85-9.821112.66
    1552022.05.18 06:30sell780.011808.180.001778.32
    1562022.05.18 10:00sell790.011809.610.001789.63
    1572022.05.18 12:33close780.011818.190.001778.32-10.011102.65
    1582022.05.18 12:37close790.011819.610.001789.63-10.001092.65
    1592022.05.18 15:15sell800.011808.580.001785.34
    1602022.05.18 18:32close800.011818.580.001785.34-10.001082.65
    1612022.06.14 19:00sell810.011810.290.001768.19
    1622022.06.14 21:30sell820.011810.070.001767.53
    1632022.06.15 09:22close820.011820.070.001767.53-9.791072.85
    1642022.06.15 09:28close810.011820.290.001768.19-9.791063.06
    1652022.06.30 13:45sell830.011810.240.001787.18
    1662022.06.30 15:39close830.011820.240.001787.18-10.001053.06
    1672022.06.30 18:00sell840.011808.930.001776.99
    1682022.06.30 20:00sell850.011809.760.001779.48
    1692022.07.04 05:45sell860.011809.120.001799.24
    1702022.07.04 07:45sell870.011811.720.001807.04
    1712022.07.04 11:39t/p870.011807.040.001807.044.681057.74
    1722022.07.05 05:30sell880.011810.210.001806.77
    1732022.07.05 10:24t/p880.011806.770.001806.773.441061.18
    1742022.07.05 14:18t/p860.011799.240.001799.2410.091071.26
    1752022.07.05 17:03t/p850.011779.480.001779.4830.901102.16
    1762022.07.05 17:05t/p840.011776.990.001776.9932.561134.72
    1772022.12.13 19:45sell890.011809.040.001778.50
    1782022.12.13 21:30sell900.011809.730.001780.57
    1792022.12.14 04:00sell910.011810.570.001783.09
    1802022.12.14 06:15sell920.011809.880.001798.28
    1812022.12.14 21:02t/p920.011798.280.001798.2811.601146.32
    1822022.12.14 22:45sell930.011808.630.001797.87
    1832022.12.15 03:53t/p930.011797.870.001797.8711.381157.70
    1842022.12.15 10:12t/p910.011783.090.001783.0928.101185.80
    1852022.12.15 10:20t/p900.011780.570.001780.5729.981215.78
    1862022.12.15 10:31t/p890.011778.500.001778.5031.361247.15
    1872022.12.22 16:15sell940.011807.890.001783.23
    1882022.12.27 17:20close940.011817.890.001783.23-9.381237.76
    1892022.12.28 02:30sell950.011810.310.001764.09
    1902022.12.28 04:30sell960.011810.330.001764.15
    1912022.12.28 08:00sell970.011810.300.001787.62
    1922022.12.29 20:25close970.011820.300.001787.62-9.381228.38
    1932022.12.29 20:25close950.011820.310.001764.09-9.381219.00
    1942022.12.29 20:25close960.011820.330.001764.15-9.381209.62
    1952023.02.24 18:15sell980.011809.460.001776.14
    1962023.02.24 20:00sell990.011809.720.001776.92
    1972023.02.24 23:15sell1000.011811.200.001785.56
    1982023.02.27 05:30sell1010.011810.190.001799.31
    1992023.02.27 17:03close980.011819.460.001776.14-9.791199.83
    2002023.02.27 17:03close990.011819.720.001776.92-9.791190.03
    2012023.02.27 17:18close1010.011820.190.001799.31-10.001180.03
    2022023.02.28 10:00sell1020.011810.360.001792.60
    2032023.02.28 12:00sell1030.011810.170.001792.03
    2042023.02.28 17:00close1030.011821.220.001792.03-11.051168.98
    2052023.02.28 17:00close1020.011821.220.001792.60-10.861158.12
    2062023.02.28 17:00close1000.011821.220.001785.56-9.611148.51
    2072023.03.08 05:15sell1040.011809.930.001763.01
    2082023.03.08 16:48close1040.011819.940.001763.01-10.011138.50
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 2.gif b/Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 2.gif new file mode 100644 index 0000000000000000000000000000000000000000..fa9c0ff3ec48758fb1b48ffd85126fe24558d227 GIT binary patch literal 8153 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 jJMN1QcI!Iis1D#T_a!dTdd%CfgXlu{ + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.07 01:15 (2020.01.01 - 2023.08.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=true; +enableXRLong=false; +enableXRShort=true; +xRShortR2R=2; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.01; xRLongR2R=2; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.01; xRMaximumCandlesPerTrade=252; xRSwingLength=48; xRSharpDetectionFactor=1350; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=false; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63631Ticks modelled72968765Modelling qualityn/a
    Mismatched charts errors826
    Initial deposit1000.00SpreadCurrent (60)
    Total net profit43.39Gross profit91.75Gross loss-48.35
    Profit factor1.90Expected payoff3.94
    Absolute drawdown1.08Maximal drawdown32.09 (3.09%)Relative drawdown3.09% (32.09)
    Total trades11Short positions (won %)11 (54.55%)Long positions (won %)0 (0.00%)
    Profit trades (% of total)6 (54.55%)Loss trades (% of total)5 (45.45%)
    Largestprofit trade40.11loss trade-10.00
    Averageprofit trade15.29loss trade-9.67
    Maximumconsecutive wins (profit in money)3 (33.04)consecutive losses (loss in money)2 (-19.59)
    Maximalconsecutive profit (count of wins)49.09 (2)consecutive loss (count of losses)-19.59 (2)
    Averageconsecutive wins2consecutive losses2
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.11.27 12:34sell10.011808.470.001798.47
    22020.11.27 15:09t/p10.011798.470.001798.4710.001010.00
    32021.02.23 09:54sell20.011808.360.001796.34
    42021.02.23 14:54sell30.011809.080.001798.06
    52021.02.23 16:45t/p30.011798.060.001798.0611.021021.02
    62021.02.23 16:48t/p20.011796.340.001796.3412.021033.04
    72021.07.13 16:15sell40.011808.460.001793.92
    82021.07.13 20:16sell50.011808.250.001791.95
    92021.07.14 15:01close50.011818.250.001791.95-9.791023.25
    102021.07.14 15:02close40.011818.460.001793.92-9.791013.45
    112021.07.21 10:34sell60.011808.650.001799.03
    122021.07.21 15:09t/p60.011799.030.001799.039.621023.07
    132021.08.03 04:39sell70.011811.070.001794.53
    142021.08.04 15:09close70.011821.070.001794.53-9.791013.28
    152021.08.05 01:39sell80.011811.540.001771.64
    162021.08.05 15:30sell90.011809.510.001800.53
    172021.08.05 16:45t/p90.011800.530.001800.538.981022.26
    182021.08.06 16:08t/p80.011771.640.001771.6440.111062.36
    192021.10.22 18:39sell100.011786.660.001760.36
    202021.10.22 19:39close100.011796.660.001760.36-10.001052.36
    212021.12.28 18:19sell110.011809.950.001789.81
    222021.12.31 09:09close110.011819.950.001789.81-8.971043.39
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 3.gif b/Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 3.gif new file mode 100644 index 0000000000000000000000000000000000000000..32e8d5e0df8dc8fbc8f4d4bc06402050fee11773 GIT binary patch literal 7795 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 literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 3.htm b/Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 3.htm new file mode 100644 index 0000000..6203c5b --- /dev/null +++ b/Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 3.htm @@ -0,0 +1,95 @@ + + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.07 01:45 (2020.01.01 - 2023.08.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=true; +enableXRLong=false; +enableXRShort=true; +xRShortR2R=2; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.01; xRLongR2R=2; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.01; xRMaximumCandlesPerTrade=252; xRSwingLength=48; xRSharpDetectionFactor=1350; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=false; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63633Ticks modelled72969323Modelling qualityn/a
    Mismatched charts errors826
    Initial deposit1000.00SpreadCurrent (60)
    Total net profit44.66Gross profit83.01Gross loss-38.35
    Profit factor2.16Expected payoff4.47
    Absolute drawdown12.08Maximal drawdown40.24 (3.91%)Relative drawdown3.91% (40.24)
    Total trades10Short positions (won %)10 (60.00%)Long positions (won %)0 (0.00%)
    Profit trades (% of total)6 (60.00%)Loss trades (% of total)4 (40.00%)
    Largestprofit trade40.11loss trade-9.79
    Averageprofit trade13.84loss trade-9.59
    Maximumconsecutive wins (profit in money)3 (21.88)consecutive losses (loss in money)3 (-29.38)
    Maximalconsecutive profit (count of wins)40.11 (1)consecutive loss (count of losses)-29.38 (3)
    Averageconsecutive wins2consecutive losses2
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.11.27 12:34sell10.011808.470.001798.47
    22020.11.27 15:09t/p10.011798.470.001798.4710.001010.00
    32021.02.23 14:54sell20.011809.080.001798.06
    42021.02.23 16:45t/p20.011798.060.001798.0611.021021.02
    52021.07.13 16:15sell30.011808.460.001793.92
    62021.07.13 20:16sell40.011808.250.001791.95
    72021.07.14 15:01close40.011818.250.001791.95-9.791011.23
    82021.07.14 15:02close30.011818.460.001793.92-9.791001.43
    92021.08.03 04:39sell50.011811.070.001794.53
    102021.08.04 15:09close50.011821.070.001794.53-9.79991.64
    112021.08.05 01:39sell60.011811.540.001771.64
    122021.08.06 16:08t/p60.011771.640.001771.6440.111031.74
    132021.12.28 18:19sell70.011809.950.001789.81
    142021.12.31 09:09close70.011819.950.001789.81-8.971022.77
    152022.12.14 19:11sell80.011808.980.001804.16
    162022.12.14 21:01t/p80.011804.160.001804.164.821027.59
    172022.12.14 22:47sell90.011808.170.001797.41
    182022.12.15 04:13t/p90.011797.410.001797.4111.381038.97
    192023.02.27 14:00sell100.011811.310.001805.83
    202023.02.28 10:18t/p100.011805.830.001805.835.691044.66
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 4.gif b/Packed/XAUUSD-15M/Reports/XR/Short/StrategyTester 4.gif new file mode 100644 index 0000000000000000000000000000000000000000..e10972474a04c80cc35b0522edeb58c30aa8e557 GIT binary patch literal 9432 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 QA+o + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.07 17:45 (2020.01.01 - 2023.08.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    Bars in test63697Ticks modelled73031931Modelling qualityn/a
    Mismatched charts errors826
    Initial deposit1000.00SpreadCurrent (51)
    Total net profit64.59Gross profit429.97Gross loss-365.38
    Profit factor1.18Expected payoff1.09
    Absolute drawdown64.19Maximal drawdown151.17 (13.91%)Relative drawdown13.91% (151.17)
    Total trades59Short positions (won %)59 (37.29%)Long positions (won %)0 (0.00%)
    Profit trades (% of total)22 (37.29%)Loss trades (% of total)37 (62.71%)
    Largestprofit trade50.75loss trade-11.05
    Averageprofit trade19.54loss trade-9.88
    Maximumconsecutive wins (profit in money)4 (173.59)consecutive losses (loss in money)8 (-80.50)
    Maximalconsecutive profit (count of wins)173.59 (4)consecutive loss (count of losses)-80.50 (8)
    Averageconsecutive wins2consecutive losses4
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.11.27 06:45sell10.011807.850.001793.49
    22020.11.27 15:09t/p10.011793.490.001793.4914.361014.36
    32021.02.04 16:00sell20.011808.190.001770.49
    42021.02.08 01:09close20.011818.190.001770.49-9.591004.77
    52021.02.16 15:15sell30.011811.040.001780.54
    62021.02.16 18:30sell40.011803.470.001759.29
    72021.02.17 15:24t/p30.011780.540.001780.5430.711035.48
    82021.02.22 16:37close40.011803.480.001759.291.231036.70
    92021.05.13 13:15sell50.011810.390.001785.51
    102021.05.13 15:39close50.011820.390.001785.51-10.001026.70
    112021.06.17 10:30sell60.011809.210.001747.49
    122021.07.06 10:54close60.011809.220.001747.493.491030.20
    132021.07.16 22:30sell70.011810.350.001778.15
    142021.07.19 09:15sell80.011806.190.001784.27
    152021.07.19 18:15sell90.011807.210.001790.91
    162021.07.19 23:30sell100.011811.470.001803.69
    172021.07.20 04:09close80.011816.190.001784.27-9.791020.40
    182021.07.20 04:31close90.011817.210.001790.91-9.791010.61
    192021.07.20 15:36close70.011820.350.001778.15-9.591001.02
    202021.07.20 15:37close100.011821.470.001803.69-9.79991.23
    212021.07.20 18:15sell110.011810.140.001780.96
    222021.07.20 20:30sell120.011810.840.001783.06
    232021.07.21 10:30sell130.011808.770.001799.15
    242021.07.21 15:09t/p130.011799.150.001799.159.621000.85
    252021.07.26 10:22close110.011810.150.001780.961.231002.08
    262021.07.26 10:24close120.011810.850.001783.061.231003.30
    272021.07.30 21:45sell140.011810.450.001768.95
    282021.08.02 04:45sell150.011809.440.001774.22
    292021.08.02 06:30sell160.011811.380.001786.42
    302021.08.02 09:15sell170.011810.310.001797.51
    312021.08.02 20:09close150.011819.440.001774.22-10.00993.30
    322021.08.03 04:30sell180.011809.740.001790.54
    332021.08.04 15:06close180.011819.740.001790.54-9.79983.51
    342021.08.04 15:07close170.011820.310.001797.51-9.59973.92
    352021.08.04 15:07close140.011820.450.001768.95-9.38964.54
    362021.08.04 15:09close160.011821.380.001786.42-9.59954.95
    372021.08.04 18:30sell190.011806.630.001756.91
    382021.08.04 21:45sell200.011810.860.001769.60
    392021.08.05 01:00sell210.011811.890.001772.69
    402021.08.05 03:15sell220.011810.920.001769.78
    412021.08.06 16:07t/p210.011772.690.001772.6939.41994.36
    422021.08.06 16:39t/p220.011769.780.001769.7841.351035.70
    432021.08.06 16:39t/p200.011769.600.001769.6042.081077.79
    442021.08.09 01:22t/p190.011756.910.001756.9150.751128.54
    452021.09.01 11:15sell230.011809.570.001794.93
    462021.09.01 15:52close230.011819.570.001794.93-10.001118.54
    472021.09.01 18:15sell240.011810.930.001793.05
    482021.09.02 07:30sell250.011811.430.001801.71
    492021.09.02 17:30sell260.011807.760.001789.30
    502021.09.03 04:45sell270.011811.190.001806.13
    512021.09.03 15:18close260.011817.760.001789.30-9.791108.74
    522021.09.03 15:34close240.011820.930.001793.05-9.181099.57
    532021.09.03 15:34close270.011821.190.001806.13-10.001089.57
    542021.09.03 15:34close250.011821.430.001801.71-9.791079.77
    552021.09.07 13:15sell280.011810.900.001778.58
    562021.09.07 16:15sell290.011810.490.001777.53
    572021.09.16 12:54t/p280.011778.580.001778.5834.591114.36
    582021.09.16 13:00t/p290.011777.530.001777.5335.231149.59
    592021.11.22 19:45sell300.011810.200.001736.88
    602021.11.23 04:15sell310.011807.780.001740.54
    612021.11.26 09:54close310.011807.790.001740.541.021150.61
    622021.11.26 12:03close300.011810.210.001736.881.231151.84
    632022.01.03 16:00sell320.011806.970.001765.87
    642022.01.04 17:39close320.011816.970.001765.87-9.791142.04
    652022.01.05 22:30sell330.011810.000.001771.12
    662022.01.11 08:16close330.011810.010.001771.121.231143.27
    672022.01.18 12:00sell340.011810.270.001785.65
    682022.01.18 15:30sell350.011806.890.001775.51
    692022.01.18 15:37close350.011816.890.001775.51-10.001133.27
    702022.01.18 16:04close340.011820.270.001785.65-10.001123.27
    712022.01.19 05:15sell360.011810.740.001792.48
    722022.01.19 07:00sell370.011811.540.001803.30
    732022.01.19 15:19close360.011820.740.001792.48-10.001113.27
    742022.01.19 15:19close370.011821.540.001803.30-10.001103.27
    752022.01.27 09:00sell380.011810.600.001765.34
    762022.01.27 13:15sell390.011810.700.001788.24
    772022.01.28 12:52t/p390.011788.240.001788.2422.671125.93
    782022.02.02 17:24close380.011810.610.001765.340.811126.75
    792022.05.13 16:15sell400.011802.800.001751.28
    802022.05.13 17:02close400.011812.800.001751.28-10.001116.75
    812022.05.13 19:00sell410.011808.990.001769.85
    822022.05.16 02:00sell420.011810.840.001791.70
    832022.05.16 06:45sell430.011809.830.001794.67
    842022.05.16 10:43t/p430.011794.670.001794.6715.161131.91
    852022.05.16 10:51t/p420.011791.700.001791.7019.141151.05
    862022.05.16 21:55close410.011819.020.001769.85-9.821141.23
    872022.05.18 06:30sell440.011808.180.001778.32
    882022.05.18 10:00sell450.011809.610.001789.63
    892022.05.18 12:33close440.011818.190.001778.32-10.011131.22
    902022.05.18 12:37close450.011819.610.001789.63-10.001121.22
    912022.05.18 15:15sell460.011808.580.001785.34
    922022.05.18 18:32close460.011818.580.001785.34-10.001111.22
    932022.06.14 19:00sell470.011810.290.001768.19
    942022.06.14 21:30sell480.011810.070.001767.53
    952022.06.15 09:22close480.011820.070.001767.53-9.791101.42
    962022.06.15 09:28close470.011820.290.001768.19-9.791091.63
    972022.06.30 13:45sell490.011810.240.001787.18
    982022.06.30 15:39close490.011820.240.001787.18-10.001081.63
    992022.06.30 18:00sell500.011808.930.001776.99
    1002022.06.30 20:00sell510.011809.760.001779.48
    1012022.07.05 17:03t/p510.011779.480.001779.4830.901112.53
    1022022.07.05 17:05t/p500.011776.990.001776.9932.561145.08
    1032022.12.22 16:15sell520.011807.890.001783.23
    1042022.12.27 17:20close520.011817.890.001783.23-9.381135.70
    1052023.02.24 18:15sell530.011809.460.001776.14
    1062023.02.24 20:00sell540.011809.720.001776.92
    1072023.02.24 23:15sell550.011811.200.001785.56
    1082023.02.27 05:30sell560.011810.190.001799.31
    1092023.02.27 17:03close530.011819.460.001776.14-9.791125.91
    1102023.02.27 17:03close540.011819.720.001776.92-9.791116.11
    1112023.02.27 17:18close560.011820.190.001799.31-10.001106.11
    1122023.02.28 10:00sell570.011810.360.001792.60
    1132023.02.28 12:00sell580.011810.170.001792.03
    1142023.02.28 17:00close580.011821.220.001792.03-11.051095.06
    1152023.02.28 17:00close570.011821.220.001792.60-10.861084.20
    1162023.02.28 17:00close550.011821.220.001785.56-9.611074.60
    1172023.03.08 05:15sell590.011809.930.001763.01
    1182023.03.08 16:48close590.011819.940.001763.01-10.011064.59
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XR/StrategyTester 1 - Full.gif b/Packed/XAUUSD-15M/Reports/XR/StrategyTester 1 - Full.gif new file mode 100644 index 0000000000000000000000000000000000000000..b08e5bc55f9cde1b711727b3c781fdb87057d8c4 GIT binary patch literal 9202 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 literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/XR/StrategyTester 1 - Full.htm b/Packed/XAUUSD-15M/Reports/XR/StrategyTester 1 - Full.htm new file mode 100644 index 0000000..67b4780 --- /dev/null +++ b/Packed/XAUUSD-15M/Reports/XR/StrategyTester 1 - Full.htm @@ -0,0 +1,297 @@ + + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.08 10:00 (2020.01.01 - 2023.08.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=true; +enableXRLong=true; +enableXRShort=true; +xRShortR2R=1.5; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.008; xRLongR2R=1.5; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.008; xRMaximumCandlesPerTrade=96; xRSwingLength=48; xRSharpDetectionFactor=1350; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=false; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63758Ticks modelled73078285Modelling qualityn/a
    Mismatched charts errors901
    Initial deposit1000.00SpreadCurrent (57)
    Total net profit210.35Gross profit662.75Gross loss-452.40
    Profit factor1.46Expected payoff1.90
    Absolute drawdown4.01Maximal drawdown124.53 (9.39%)Relative drawdown9.39% (124.53)
    Total trades111Short positions (won %)65 (38.46%)Long positions (won %)46 (34.78%)
    Profit trades (% of total)41 (36.94%)Loss trades (% of total)70 (63.06%)
    Largestprofit trade46.50loss trade-8.45
    Averageprofit trade16.16loss trade-6.46
    Maximumconsecutive wins (profit in money)5 (72.43)consecutive losses (loss in money)10 (-52.73)
    Maximalconsecutive profit (count of wins)99.30 (4)consecutive loss (count of losses)-55.38 (7)
    Averageconsecutive wins3consecutive losses5
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.11.27 06:45sell10.011807.850.001797.08
    22020.11.27 15:09t/p10.011797.080.001797.0810.771010.77
    32020.12.01 19:30buy20.011812.640.001854.00
    42020.12.02 02:30buy30.011813.270.001827.96
    52020.12.02 08:45buy40.011813.190.001821.26
    62020.12.02 10:36t/p40.011821.260.001821.268.071018.84
    72020.12.02 12:22t/p30.011827.960.001827.9614.691033.53
    82020.12.07 16:52t/p20.011854.000.001854.0038.711072.24
    92021.02.04 16:00sell50.011808.190.001779.92
    102021.02.05 17:24close50.011808.200.001779.920.201072.43
    112021.02.05 19:15buy60.011814.840.001846.28
    122021.02.08 01:15buy70.011817.890.001853.91
    132021.02.08 04:24close70.011809.890.001853.91-8.001064.43
    142021.02.08 07:30buy80.011815.740.001825.94
    152021.02.08 10:54close80.011807.740.001825.94-8.001056.43
    162021.02.08 11:45buy90.011813.160.001820.63
    172021.02.08 13:36t/p90.011820.630.001820.637.471063.90
    182021.02.09 11:24t/p60.011846.280.001846.2830.561094.46
    192021.02.16 15:15sell100.011811.040.001788.17
    202021.02.16 18:30sell110.011803.470.001770.34
    212021.02.17 01:09t/p100.011788.170.001788.1723.081117.53
    222021.02.17 18:09t/p110.011770.340.001770.3433.341150.87
    232021.02.23 04:00buy120.011813.630.001842.78
    242021.02.23 05:45buy130.011813.320.001827.80
    252021.02.23 11:24close120.011805.630.001842.78-8.001142.87
    262021.02.23 11:24close130.011805.320.001827.80-8.001134.87
    272021.05.06 18:00buy140.011815.930.001857.47
    282021.05.12 23:21close140.011815.910.001857.47-1.791133.08
    292021.05.13 13:15sell150.011810.390.001791.73
    302021.05.13 15:36close150.011818.390.001791.73-8.001125.08
    312021.06.17 10:30sell160.011809.210.001762.92
    322021.06.18 22:54t/p160.011762.920.001762.9246.501171.58
    332021.07.08 14:00buy170.011817.770.001849.41
    342021.07.08 16:39close170.011809.770.001849.41-8.001163.58
    352021.07.13 15:30buy180.011813.580.001824.58
    362021.07.13 15:31close180.011805.570.001824.58-8.011155.57
    372021.07.13 18:15buy190.011812.850.001833.61
    382021.07.14 03:09close190.011804.840.001833.61-8.451147.11
    392021.07.14 06:30buy200.011813.440.001826.16
    402021.07.14 08:30buy210.011813.820.001827.11
    412021.07.14 10:45buy220.011813.940.001827.41
    422021.07.14 15:09t/p200.011826.160.001826.1612.721159.83
    432021.07.14 15:37t/p210.011827.110.001827.1113.291173.12
    442021.07.14 15:37t/p220.011827.410.001827.4113.471186.59
    452021.07.16 22:30sell230.011810.350.001786.20
    462021.07.19 09:15sell240.011806.190.001789.75
    472021.07.19 16:18close240.011814.190.001789.75-8.001178.59
    482021.07.19 18:15sell250.011807.210.001794.99
    492021.07.19 23:30sell260.011811.470.001805.64
    502021.07.19 23:30close230.011812.040.001786.20-1.481177.11
    512021.07.20 03:00sell270.011811.350.001805.34
    522021.07.20 04:06close250.011815.210.001794.99-7.791169.32
    532021.07.20 05:08close270.011819.350.001805.34-8.001161.32
    542021.07.20 05:18close260.011819.470.001805.64-7.791153.52
    552021.07.20 18:15sell280.011810.140.001788.26
    562021.07.20 20:30sell290.011810.840.001790.01
    572021.07.21 10:30sell300.011808.770.001801.56
    582021.07.21 14:03t/p300.011801.560.001801.567.211160.73
    592021.07.23 10:54close280.011810.150.001788.261.021161.75
    602021.07.23 14:34t/p290.011790.010.001790.0121.861183.61
    612021.07.29 04:30buy310.011816.190.001851.05
    622021.07.30 19:51close310.011816.180.001851.05-0.451183.16
    632021.07.30 21:45sell320.011810.450.001779.33
    642021.08.02 04:45sell330.011809.440.001783.03
    652021.08.02 06:30sell340.011811.380.001792.66
    662021.08.02 09:15sell350.011810.310.001800.71
    672021.08.02 19:36close330.011817.440.001783.03-8.001175.16
    682021.08.02 19:39close350.011818.310.001800.71-8.001167.16
    692021.08.02 19:52close320.011818.450.001779.33-7.791159.37
    702021.08.02 20:07close340.011819.380.001792.66-8.001151.37
    712021.08.03 04:30sell360.011809.740.001795.34
    722021.08.03 06:15sell370.011810.010.001796.02
    732021.08.03 08:15sell380.011810.150.001796.37
    742021.08.03 12:00sell390.011810.640.001805.50
    752021.08.04 05:30close360.011813.440.001795.34-3.491147.87
    762021.08.04 07:15close370.011812.810.001796.02-2.591145.28
    772021.08.04 09:15close380.011813.010.001796.37-2.651142.63
    782021.08.04 13:00close390.011815.210.001805.50-4.361138.26
    792021.08.04 18:30sell400.011806.630.001769.34
    802021.08.04 21:45sell410.011810.860.001779.92
    812021.08.05 01:00sell420.011811.890.001782.49
    822021.08.05 03:15sell430.011810.920.001780.07
    832021.08.05 10:54close400.011814.630.001769.34-7.381130.88
    842021.08.05 11:30sell440.011809.830.001802.96
    852021.08.05 16:39t/p440.011802.960.001802.966.871137.75
    862021.08.06 15:39t/p420.011782.490.001782.4929.611167.36
    872021.08.06 15:39t/p430.011780.070.001780.0731.061198.41
    882021.08.06 15:39t/p410.011779.920.001779.9231.761230.18
    892021.08.27 19:15buy450.011814.940.001860.72
    902021.08.30 20:15close450.011810.010.001860.72-5.371224.80
    912021.08.31 04:30buy460.011814.040.001822.85
    922021.08.31 14:15buy470.011814.290.001820.49
    932021.08.31 16:06close470.011806.290.001820.49-8.001216.80
    942021.08.31 16:06close460.011806.040.001822.85-8.001208.80
    952021.08.31 20:00buy480.011814.350.001832.70
    962021.09.01 04:30buy490.011812.970.001829.25
    972021.09.01 11:15sell500.011809.570.001798.59
    982021.09.01 15:39close500.011817.570.001798.59-8.001200.80
    992021.09.01 18:15sell510.011810.930.001797.52
    1002021.09.01 21:00close480.011812.490.001832.70-2.301198.50
    1012021.09.02 06:04close490.011812.960.001829.25-1.341197.17
    1022021.09.02 07:30sell520.011811.430.001804.14
    1032021.09.02 17:30sell530.011807.760.001793.92
    1042021.09.02 21:07close510.011810.940.001797.520.611197.77
    1052021.09.03 04:45sell540.011811.190.001807.40
    1062021.09.03 07:45sell550.011811.510.001806.85
    1072021.09.03 08:30close520.011811.860.001804.14-0.221197.55
    1082021.09.03 15:06close530.011815.760.001793.92-7.791189.76
    1092021.09.03 15:34close540.011819.190.001807.40-8.001181.76
    1102021.09.03 15:34close550.011819.510.001806.85-8.001173.76
    1112021.09.07 13:15sell560.011810.900.001786.66
    1122021.09.07 16:15sell570.011810.490.001785.77
    1132021.09.08 16:54t/p560.011786.660.001786.6624.451198.20
    1142021.09.08 16:54t/p570.011785.770.001785.7724.931223.13
    1152021.11.05 18:45buy580.011814.390.001857.82
    1162021.11.10 16:24t/p580.011857.820.001857.8242.101265.23
    1172021.11.22 19:45sell590.011810.200.001755.21
    1182021.11.23 04:15sell600.011807.780.001757.35
    1192021.11.26 09:54close600.011807.790.001757.351.021266.25
    1202021.11.26 11:55close590.011810.210.001755.211.231267.48
    1212021.12.27 18:00buy610.011813.040.001827.67
    1222021.12.28 08:00buy620.011813.260.001822.55
    1232021.12.28 17:00buy630.011814.210.001821.41
    1242021.12.28 19:00close610.011810.530.001827.67-2.951264.53
    1252021.12.28 20:52close630.011806.210.001821.41-8.001256.53
    1262021.12.28 20:54close620.011805.250.001822.55-8.011248.52
    1272021.12.30 19:00buy640.011813.880.001839.91
    1282022.01.03 15:09close640.011813.860.001839.91-0.901247.61
    1292022.01.03 16:00sell650.011806.970.001776.15
    1302022.01.04 17:00close650.011811.780.001776.15-4.601243.01
    1312022.01.04 17:45buy660.011817.070.001844.28
    1322022.01.04 19:30buy670.011814.650.001838.23
    1332022.01.05 21:09close660.011817.050.001844.28-0.461242.55
    1342022.01.05 21:09close670.011814.640.001838.23-0.451242.09
    1352022.01.05 22:30sell680.011810.000.001780.84
    1362022.01.11 08:09close680.011810.010.001780.841.231243.32
    1372022.01.11 18:30buy690.011815.730.001836.09
    1382022.01.13 17:51close690.011815.720.001836.09-1.781241.54
    1392022.01.18 12:00sell700.011810.270.001791.81
    1402022.01.18 15:30sell710.011806.890.001783.36
    1412022.01.18 15:34close710.011814.890.001783.36-8.001233.54
    1422022.01.18 15:37close700.011818.270.001791.81-8.001225.54
    1432022.01.19 05:15sell720.011810.740.001797.05
    1442022.01.19 07:00sell730.011811.540.001805.36
    1452022.01.19 12:35close720.011818.740.001797.05-8.001217.54
    1462022.01.19 12:39close730.011819.540.001805.36-8.001209.54
    1472022.01.27 09:00sell740.011810.600.001776.66
    1482022.01.27 13:15sell750.011810.700.001793.86
    1492022.01.27 18:24t/p750.011793.860.001793.8616.841226.38
    1502022.02.02 17:24close740.011810.610.001776.660.811227.19
    1512022.02.04 12:30buy760.011814.080.001827.73
    1522022.02.04 15:30buy770.011813.350.001824.12
    1532022.02.04 15:36close760.011806.080.001827.73-8.001219.19
    1542022.02.04 15:36close770.011805.350.001824.12-8.001211.19
    1552022.02.07 02:45buy780.011812.860.001843.39
    1562022.02.07 11:00buy790.011813.430.001822.99
    1572022.02.07 14:00buy800.011813.990.001821.24
    1582022.02.07 16:15buy810.011816.160.001826.63
    1592022.02.07 21:06t/p800.011821.240.001821.247.251218.44
    1602022.02.07 21:39t/p790.011822.990.001822.999.561228.00
    1612022.02.08 17:24t/p810.011826.630.001826.6310.031238.03
    1622022.02.11 20:34t/p780.011843.390.001843.3927.881265.91
    1632022.05.13 16:15sell820.011802.800.001764.16
    1642022.05.13 17:01close820.011810.800.001764.16-8.001257.91
    1652022.05.13 19:00sell830.011808.990.001779.64
    1662022.05.16 02:00sell840.011810.840.001796.49
    1672022.05.16 04:08close830.011817.000.001779.64-7.801250.10
    1682022.05.16 06:45sell850.011809.830.001798.46
    1692022.05.16 10:42t/p850.011798.460.001798.4611.371261.47
    1702022.05.16 10:43t/p840.011796.490.001796.4914.351275.82
    1712022.05.18 06:30sell860.011808.180.001785.79
    1722022.05.18 10:00sell870.011809.610.001794.63
    1732022.05.18 10:31close860.011816.190.001785.79-8.011267.81
    1742022.05.18 12:32close870.011817.620.001794.63-8.011259.80
    1752022.05.18 15:15sell880.011808.580.001791.15
    1762022.05.18 18:08close880.011816.580.001791.15-8.001251.80
    1772022.06.14 19:00sell890.011810.290.001778.72
    1782022.06.14 21:30sell900.011810.070.001778.17
    1792022.06.15 05:31close900.011818.070.001778.17-7.791244.01
    1802022.06.15 05:31close890.011818.290.001778.72-7.791236.22
    1812022.06.30 13:45sell910.011810.240.001792.95
    1822022.06.30 15:37close910.011818.240.001792.95-8.001228.22
    1832022.06.30 18:00sell920.011808.930.001784.98
    1842022.06.30 20:00sell930.011809.760.001787.05
    1852022.07.01 14:39t/p930.011787.050.001787.0522.921251.13
    1862022.07.01 15:25t/p920.011784.980.001784.9824.161275.29
    1872022.12.13 16:30buy940.011818.950.001875.17
    1882022.12.13 17:48close940.011810.950.001875.17-8.001267.29
    1892022.12.13 18:45buy950.011813.330.001859.10
    1902022.12.13 19:25close950.011805.330.001859.10-8.001259.29
    1912022.12.20 17:15buy960.011820.900.001871.32
    1922022.12.21 07:23close960.011812.900.001871.32-8.441250.85
    1932022.12.21 09:30buy970.011815.410.001820.20
    1942022.12.21 14:00buy980.011814.120.001816.97
    1952022.12.21 15:13t/p980.011816.970.001816.972.851253.70
    1962022.12.21 17:07t/p970.011820.200.001820.204.791258.49
    1972022.12.22 16:15sell990.011807.890.001789.40
    1982022.12.22 20:02t/p990.011789.400.001789.4018.491276.98
    1992022.12.27 17:30buy1000.011821.760.001850.40
    2002022.12.27 19:56close1000.011813.760.001850.40-8.001268.98
    2012022.12.27 20:15buy1010.011815.050.001833.62
    2022022.12.28 03:30buy1020.011814.710.001832.77
    2032022.12.28 10:08close1010.011807.040.001833.62-8.451260.52
    2042022.12.28 10:08close1020.011806.710.001832.77-8.001252.52
    2052022.12.29 17:00buy1030.011814.370.001828.82
    2062022.12.29 18:45buy1040.011814.740.001829.74
    2072022.12.30 18:38close1030.011814.350.001828.82-0.461252.06
    2082023.01.03 01:07t/p1040.011829.740.001829.7413.671265.74
    2092023.02.24 18:15sell1050.011809.460.001784.47
    2102023.02.24 20:00sell1060.011809.720.001785.12
    2112023.02.24 23:15sell1070.011811.200.001791.97
    2122023.02.27 05:30sell1080.011810.190.001802.03
    2132023.02.27 16:23close1050.011817.460.001784.47-7.791257.94
    2142023.02.27 16:23close1060.011817.720.001785.12-7.791250.15
    2152023.02.27 16:55close1080.011818.190.001802.03-8.001242.15
    2162023.02.27 16:57close1070.011819.200.001791.97-7.791234.35
    2172023.02.28 10:00sell1090.011810.360.001797.04
    2182023.02.28 12:00sell1100.011810.170.001796.57
    2192023.02.28 16:47close1100.011818.170.001796.57-8.001226.35
    2202023.02.28 16:47close1090.011818.360.001797.04-8.001218.35
    2212023.03.08 05:15sell1110.011809.930.001774.74
    2222023.03.08 16:32close1110.011817.930.001774.74-8.001210.35
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XR/StrategyTester 2 - 0.2 - Full.gif b/Packed/XAUUSD-15M/Reports/XR/StrategyTester 2 - 0.2 - Full.gif new file mode 100644 index 0000000000000000000000000000000000000000..0ce41b5c72ff72558f92d3cd9672e5c36a82f653 GIT binary patch literal 9133 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

    f1guMPF+oBI)KHiZgIZC@?AK0{y} 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πlZn<+5{x-JS|K$zLNgLn(ThdktD{Nsg}O)I@_HcJ&lguipgL-4!DV2(gT z)0CBD&V|o>xs?a>_*^L)w#wp*mp_@?Hr$b=ITM)?-ee8N4doo+G^Sw>(5NMcm2z>zrSOcYouT8 zwvo>qfSvE#o>=DpSK$9)$o#(jpIW2$;P;OgmBWEV=aaAE83s4n%qu+gQHPX$ytUN15-D|YvK_4<-bF1rjSG=!4 zvO8LC7QSDei7mGgade6Op}(d@Q_#3KxCSsbT(Fuf3;oV(n#p8%sHNBVGj`vy)7a#M zg|4nwDgR4(wsA?}S^dVteXmyI#dQy{!s}*x-$bO@X`fi@=z~Kj$V=c)%V~VomonJr ztA*coyFY14oMCJxp;JbX4(4EvV398KOU9`dAPb+n=WP4_!ddIpzfvULz{-Qxx=#MI z@-X||u@NiMPPp`LXzh;iBO=32b}gsKNu2t^DaxQ#EU!E|nPi>KQ@8u^>*I+2#kB;zR!f;l1S$*pO72<^0hjSx4gDtYOEbJajc3fE&8PH2^}@>a?O=_VWk;;F=9Yl zouR2|qia1=_V7{%qGAJ>{RQLiJQl*>h1A!n#OKO`B!VkQ5JQuI`Yg=)ohd4iCuO$MU*pn`{sLy?jk0_&(I}GoCb(A()p&WkS z`9t6<@~zh@6)C28OEv?tudP9#Z`&LtonKtbu=Hb z^{F*>8F+*f7ft^};K@Fpz?H(5?4i2DlL1AXYFOLLe<9*NBXYX*>y7Pf z@XQur;dYPDt^}9uhc}zrt>8r=Gx}Pb>~lwQzoo{N(=8mq&S0s}(t)4o;#o77LHZ4z zzue3ip2 zJ^6(!!DXD&1C{|*5DUQ8et~qmvKxTAH@&js11esTaGV9WPAcOkeE0t3_XFTB-UDO8 zV#i^DeL)2B& zzR?F$bHUuEC}g+5o^=QnV4%AVD4Yu!?}uy+2`zc^Gc?O6YanR!_xPN>=Qi5mIC-rKG&$dcf zj}3?s4_UrN&_ED2b&gVpsMiO6%dS(tsSR6601DP2Nk00l5k-vFDHBbHJ*;E>zy(wz zfGBL@!fE}3X+mA83P{MOJ(xlPd+vTVJ&}WOwGov-pmTWBrpGU5)}_cO*AS+q(WrY2 zpl*E>2H+wD^(pB_V*pWXs$Mtd9zq89;me^2{TRx`m|FvnM)#Q7I&>aUR6`GfED^nd zhKNHWP;}&ZuC9>~O=-HYGiyx}R{N{`*vdQ&y6J#N0a3OgabGUTEqdK?e$dCZ09OXT zfSmAhVAyB(SOjaFcRiRrfZPx2*Ff+R0S#SM34iiUGf+7^cse196=K#K8&V&ePM>I4 zAG&lF<3*onZ3sqVV-4t%BF&THt;r3!d_UMGc|ct%RgkE<_dy|{7RLQNN Vl%L!w9jYmvwkh3Epg#a0^?wQgSv>#% literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/XR/StrategyTester 2 - 0.2 - Full.htm b/Packed/XAUUSD-15M/Reports/XR/StrategyTester 2 - 0.2 - Full.htm new file mode 100644 index 0000000..73d7435 --- /dev/null +++ b/Packed/XAUUSD-15M/Reports/XR/StrategyTester 2 - 0.2 - Full.htm @@ -0,0 +1,301 @@ + + + + Strategy Tester: x-saherelm.ea + + + + + + + +

    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.08 11:00 (2020.01.01 - 2023.08.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +enableXLong=true; +enableXShort=true; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=true; +enableXRLong=true; +enableXRShort=true; +xRShortR2R=1.5; xRShortLotsPerTradePercent=0.0002; xRShortMaxDrawdownPerTradePercent=0.15; xRLongR2R=1.5; xRLongLotsPerTradePercent=0.0002; xRLongMaxDrawdownPerTradePercent=0.15; xRMaximumCandlesPerTrade=96; xRSwingLength=48; xRSharpDetectionFactor=1350; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=false; +enableXTPWLong=true; +enableXTPWShort=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63762Ticks modelled73083601Modelling qualityn/a
    Mismatched charts errors902
    Initial deposit1000.00SpreadCurrent (50)
    Total net profit3076.78Gross profit11645.54Gross loss-8568.76
    Profit factor1.36Expected payoff27.23
    Absolute drawdown78.80Maximal drawdown2946.14 (44.93%)Relative drawdown44.93% (2946.14)
    Total trades113Short positions (won %)66 (46.97%)Long positions (won %)47 (25.53%)
    Profit trades (% of total)43 (38.05%)Loss trades (% of total)70 (61.95%)
    Largestprofit trade929.92loss trade-159.05
    Averageprofit trade270.83loss trade-122.41
    Maximumconsecutive wins (profit in money)6 (2894.35)consecutive losses (loss in money)9 (-793.75)
    Maximalconsecutive profit (count of wins)2894.35 (6)consecutive loss (count of losses)-1042.16 (7)
    Averageconsecutive wins2consecutive losses4
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.11.27 06:45sell10.201807.850.001797.08
    22020.11.27 15:09t/p10.201797.080.001797.08215.401215.40
    32020.11.27 15:09sell20.201796.570.001788.89
    42020.11.27 15:36t/p20.201788.890.001788.89153.601369.00
    52020.12.01 19:30buy30.201812.570.001853.93
    62020.12.02 10:39buy40.201824.800.001839.41
    72020.12.02 14:45close40.201817.290.001839.41-150.201218.80
    82020.12.07 16:52t/p30.201853.930.001853.93774.121992.92
    92021.02.04 16:00sell50.201808.190.001779.92
    102021.02.05 17:24close50.201808.200.001779.923.921996.85
    112021.02.05 19:15buy60.201814.770.001846.21
    122021.02.08 14:48buy70.201823.880.001843.17
    132021.02.09 09:54t/p70.201843.170.001843.17376.952373.80
    142021.02.09 11:24t/p60.201846.210.001846.21611.112984.91
    152021.02.16 15:15sell80.201811.040.001788.17
    162021.02.16 18:30sell90.201803.470.001770.34
    172021.02.17 01:09t/p80.201788.170.001788.17461.523446.43
    182021.02.17 18:09t/p90.201770.340.001770.34666.724113.15
    192021.02.23 04:00buy100.201813.560.001842.71
    202021.02.23 05:45buy110.201813.250.001827.73
    212021.02.23 11:24close100.201806.060.001842.71-150.003963.15
    222021.02.23 11:24close110.201805.750.001827.73-150.003813.15
    232021.02.23 11:24buy120.201806.240.001820.63
    242021.02.23 16:38close120.201798.740.001820.63-150.003663.15
    252021.05.06 18:00buy130.201815.860.001857.40
    262021.05.12 23:21close130.201815.850.001857.40-35.583627.57
    272021.05.13 13:15sell140.201810.390.001791.73
    282021.05.13 15:08close140.201817.890.001791.73-150.003477.57
    292021.05.13 15:08sell150.201817.380.001809.21
    302021.05.13 17:52close150.201824.880.001809.21-150.003327.57
    312021.06.17 10:30sell160.201809.210.001762.92
    322021.06.18 22:54t/p160.201762.920.001762.92929.924257.49
    332021.07.08 14:00buy170.201817.700.001849.34
    342021.07.08 16:39close170.201810.200.001849.34-150.004107.49
    352021.07.13 15:30buy180.201813.510.001824.51
    362021.07.13 15:30close180.201806.000.001824.51-150.203957.29
    372021.07.13 18:15buy190.201812.780.001833.54
    382021.07.13 21:09close190.201805.280.001833.54-150.003807.29
    392021.07.14 06:30buy200.201813.370.001826.09
    402021.07.14 08:30buy210.201813.750.001827.04
    412021.07.14 15:06buy220.201822.680.001840.68
    422021.07.14 15:09t/p200.201826.090.001826.09254.404061.69
    432021.07.14 15:37t/p210.201827.040.001827.04265.804327.49
    442021.07.15 16:00close220.201822.670.001840.68-26.744300.75
    452021.07.16 22:30sell230.201810.350.001786.20
    462021.07.19 09:15sell240.201806.190.001789.75
    472021.07.19 14:54sell250.201800.540.001777.82
    482021.07.19 15:52close250.201808.040.001777.82-150.004150.75
    492021.07.19 16:09close240.201813.690.001789.75-150.004000.75
    502021.07.19 18:15sell260.201807.210.001794.99
    512021.07.19 23:30close230.201811.970.001786.20-28.283972.47
    522021.07.20 04:04close260.201814.710.001794.99-145.883826.60
    532021.07.20 04:04sell270.201814.220.001812.51
    542021.07.20 11:09t/p270.201812.510.001812.5134.203860.80
    552021.07.20 18:15sell280.201810.140.001788.26
    562021.07.20 20:30sell290.201810.840.001790.01
    572021.07.21 13:54sell300.201801.740.001784.64
    582021.07.22 15:36close300.201801.750.001784.6412.173872.96
    592021.07.23 10:54close280.201810.150.001788.2620.413893.37
    602021.07.23 14:34t/p290.201790.010.001790.01437.214330.58
    612021.07.29 04:30buy310.201816.120.001850.98
    622021.07.30 19:52close310.201816.110.001850.98-9.054321.54
    632021.07.30 21:45sell320.201810.450.001779.33
    642021.08.02 04:45sell330.201809.440.001783.03
    652021.08.02 19:24close330.201816.940.001783.03-150.004171.54
    662021.08.02 19:39close320.201817.950.001779.33-145.884025.66
    672021.08.02 19:39sell340.201817.460.001799.73
    682021.08.03 04:30sell350.201809.740.001795.34
    692021.08.04 05:30close350.201813.370.001795.34-68.483957.18
    702021.08.04 05:30sell360.201812.880.001810.08
    712021.08.04 14:36close340.201817.470.001799.738.043965.22
    722021.08.04 15:07close360.201820.380.001810.08-150.003815.22
    732021.08.04 18:30sell370.201806.630.001769.34
    742021.08.05 10:52close370.201814.130.001769.34-137.633677.59
    752021.08.05 10:52sell380.201813.640.001805.63
    762021.08.05 15:30sell390.201810.170.001803.44
    772021.08.05 16:37t/p380.201805.630.001805.63160.203837.79
    782021.08.05 16:39t/p390.201803.440.001803.44134.603972.39
    792021.08.27 19:15buy400.201814.870.001860.65
    802021.08.30 20:15close400.201810.010.001860.65-106.053866.34
    812021.08.31 04:30buy410.201813.970.001822.78
    822021.08.31 14:15buy420.201814.220.001820.42
    832021.08.31 16:06close420.201806.720.001820.42-150.003716.34
    842021.08.31 16:06close410.201806.470.001822.78-150.003566.34
    852021.08.31 16:06buy430.201806.960.001825.02
    862021.08.31 20:00buy440.201814.280.001832.63
    872021.09.01 21:00close440.201812.490.001832.63-44.653521.70
    882021.09.01 21:00sell450.201812.480.001801.41
    892021.09.02 07:30sell460.201811.430.001804.14
    902021.09.02 17:09close430.201806.950.001825.02-35.583486.11
    912021.09.03 04:07close450.201812.490.001801.4116.293502.40
    922021.09.03 04:39sell470.201810.530.001806.77
    932021.09.03 08:30close460.201811.790.001804.14-3.083499.32
    942021.09.03 15:34close470.201818.030.001806.77-150.003349.32
    952021.09.03 15:34sell480.201817.540.001806.17
    962021.09.03 15:37close480.201825.040.001806.17-150.003199.32
    972021.09.07 13:15sell490.201810.900.001786.66
    982021.09.07 17:01sell500.201808.280.001782.29
    992021.09.08 16:54t/p490.201786.660.001786.66488.923688.25
    1002021.09.14 15:30t/p500.201782.290.001782.29548.654236.90
    1012021.11.05 18:45buy510.201814.320.001857.75
    1022021.11.10 16:24t/p510.201857.750.001857.75842.065078.96
    1032021.11.22 19:45sell520.201810.200.001755.21
    1042021.11.23 04:15sell530.201807.780.001757.35
    1052021.11.23 08:48sell540.201803.200.001790.24
    1062021.11.23 15:07t/p540.201790.240.001790.24259.205338.16
    1072021.11.26 09:54close530.201807.790.001757.3520.415358.57
    1082021.11.26 12:03close520.201810.210.001755.2124.535383.10
    1092021.12.27 18:00buy550.201812.970.001827.60
    1102021.12.28 08:00buy560.201813.190.001822.48
    1112021.12.28 13:01buy570.201818.480.001832.73
    1122021.12.28 16:09close570.201810.980.001832.73-150.005233.10
    1132021.12.28 19:00close550.201810.530.001827.60-57.655175.46
    1142021.12.28 19:00buy580.201811.040.001813.04
    1152021.12.28 20:54close560.201805.680.001822.48-150.205025.26
    1162021.12.29 10:07close580.201803.540.001813.04-158.854866.41
    1172021.12.30 19:00buy590.201813.810.001839.84
    1182022.01.03 15:09close590.201813.790.001839.84-18.094848.32
    1192022.01.03 16:00sell600.201806.970.001776.15
    1202022.01.04 17:00close600.201811.710.001776.15-90.684757.64
    1212022.01.04 17:45buy610.201817.000.001844.21
    1222022.01.04 19:30buy620.201814.580.001838.16
    1232022.01.05 15:30buy630.201823.000.001835.98
    1242022.01.05 21:09close610.201816.980.001844.21-9.254748.40
    1252022.01.05 21:09close630.201815.500.001835.98-150.004598.40
    1262022.01.05 21:09close620.201814.570.001838.16-9.054589.35
    1272022.01.05 22:30sell640.201810.000.001780.84
    1282022.01.11 08:16close640.201810.010.001780.8424.534613.88
    1292022.01.11 18:30buy650.201815.660.001836.02
    1302022.01.13 17:51close650.201815.650.001836.02-35.584578.30
    1312022.01.18 12:00sell660.201810.270.001791.81
    1322022.01.18 15:30sell670.201806.890.001783.36
    1332022.01.18 15:34close670.201814.390.001783.36-150.004428.30
    1342022.01.18 15:37close660.201817.770.001791.81-150.004278.30
    1352022.01.19 05:15sell680.201810.740.001797.05
    1362022.01.19 07:00sell690.201811.540.001805.36
    1372022.01.19 12:34close680.201818.240.001797.05-150.004128.30
    1382022.01.19 12:37close690.201819.040.001805.36-150.003978.30
    1392022.01.19 12:37sell700.201818.550.001805.80
    1402022.01.19 16:37close700.201826.050.001805.80-150.003828.30
    1412022.01.27 09:00sell710.201810.600.001776.66
    1422022.01.27 13:15sell720.201810.700.001793.86
    1432022.01.27 15:49sell730.201801.610.001779.70
    1442022.01.27 16:39close730.201809.110.001779.70-150.003678.30
    1452022.01.27 18:24t/p720.201793.860.001793.86336.804015.10
    1462022.02.02 17:24close710.201810.610.001776.6616.294031.39
    1472022.02.04 12:30buy740.201814.010.001827.66
    1482022.02.04 15:30buy750.201813.280.001824.05
    1492022.02.04 15:36close740.201806.510.001827.66-150.003881.39
    1502022.02.04 15:36close750.201805.780.001824.05-150.003731.39
    1512022.02.07 02:45buy760.201812.790.001843.32
    1522022.02.07 11:00buy770.201813.360.001822.92
    1532022.02.07 21:24buy780.201822.380.001840.10
    1542022.02.07 21:37t/p770.201822.920.001822.92191.203922.59
    1552022.02.10 15:33close780.201822.370.001840.10-44.433878.16
    1562022.02.11 20:34t/p760.201843.320.001843.32557.524435.68
    1572022.05.13 16:15sell790.201802.800.001764.16
    1582022.05.13 17:01close790.201810.310.001764.16-150.204285.48
    1592022.05.13 19:00sell800.201808.990.001779.64
    1602022.05.16 02:00sell810.201810.840.001796.49
    1612022.05.16 03:58close800.201816.500.001779.64-146.084139.40
    1622022.05.16 05:01sell820.201812.910.001807.12
    1632022.05.16 08:05t/p820.201807.120.001807.12115.804255.20
    1642022.05.16 08:05sell830.201806.620.001791.70
    1652022.05.16 10:43t/p810.201796.490.001796.49287.004542.20
    1662022.05.16 10:51t/p830.201791.700.001791.70298.404840.60
    1672022.05.18 06:30sell840.201808.180.001785.79
    1682022.05.18 10:00sell850.201809.610.001794.63
    1692022.05.18 10:28close840.201815.680.001785.79-150.004690.60
    1702022.05.18 11:12close850.201817.120.001794.63-150.204540.40
    1712022.05.18 15:15sell860.201808.580.001791.15
    1722022.05.18 16:43close860.201816.080.001791.15-150.004390.40
    1732022.06.14 19:00sell870.201810.290.001778.72
    1742022.06.14 21:30sell880.201810.070.001778.17
    1752022.06.15 04:38close880.201817.580.001778.17-146.084244.32
    1762022.06.15 05:20close870.201817.790.001778.72-145.884098.45
    1772022.06.15 05:20sell890.201817.300.001812.70
    1782022.06.15 12:40close890.201824.800.001812.70-150.003948.45
    1792022.06.30 13:45sell900.201810.240.001792.95
    1802022.06.30 15:37close900.201817.740.001792.95-150.003798.45
    1812022.06.30 18:00sell910.201808.930.001784.98
    1822022.06.30 20:06sell920.201809.330.001786.62
    1832022.07.01 08:31sell930.201800.240.001786.49
    1842022.07.01 14:39t/p920.201786.620.001786.62458.324256.77
    1852022.07.01 14:39t/p930.201786.490.001786.49275.004531.77
    1862022.07.01 15:24t/p910.201784.980.001784.98483.125014.89
    1872022.12.13 16:30buy940.201818.880.001875.10
    1882022.12.13 17:47close940.201811.380.001875.10-150.004864.89
    1892022.12.13 18:45buy950.201813.260.001859.03
    1902022.12.13 19:25close950.201805.760.001859.03-150.004714.89
    1912022.12.20 17:15buy960.201820.830.001871.25
    1922022.12.21 06:43close960.201813.330.001871.25-158.854556.04
    1932022.12.21 09:30buy970.201815.340.001820.13
    1942022.12.21 14:00buy980.201814.050.001816.90
    1952022.12.21 15:13t/p980.201816.900.001816.9057.004613.04
    1962022.12.21 17:07t/p970.201820.130.001820.1395.804708.84
    1972022.12.22 16:15sell990.201807.890.001789.40
    1982022.12.22 20:02t/p990.201789.400.001789.40369.805078.64
    1992022.12.27 17:30buy1000.201821.690.001850.33
    2002022.12.27 19:56close1000.201814.190.001850.33-150.004928.64
    2012022.12.27 20:15buy1010.201814.980.001833.55
    2022022.12.28 03:30buy1020.201814.640.001832.70
    2032022.12.28 09:03close1010.201807.470.001833.55-159.054769.60
    2042022.12.28 09:16buy1030.201809.440.001810.49
    2052022.12.28 10:00t/p1030.201810.490.001810.4921.004790.60
    2062022.12.28 10:08close1020.201807.130.001832.70-150.204640.40
    2072022.12.29 17:00buy1040.201814.300.001828.75
    2082022.12.29 18:45buy1050.201814.670.001829.67
    2092022.12.30 09:01buy1060.201821.980.001831.55
    2102022.12.30 12:31close1060.201814.470.001831.55-150.204490.20
    2112022.12.30 18:38close1040.201814.280.001828.75-9.254480.95
    2122023.01.03 01:07t/p1050.201829.670.001829.67273.464754.41
    2132023.02.24 18:15sell1070.201809.460.001784.47
    2142023.02.24 20:00sell1080.201809.720.001785.12
    2152023.02.27 16:00close1070.201816.960.001784.47-145.884608.54
    2162023.02.27 16:08sell1090.201814.370.001811.82
    2172023.02.27 16:22close1080.201817.220.001785.12-145.884462.66
    2182023.02.28 09:22t/p1090.201811.820.001811.8255.124517.78
    2192023.02.28 10:00sell1100.201810.360.001797.04
    2202023.02.28 12:00sell1110.201810.170.001796.57
    2212023.02.28 16:46close1110.201817.670.001796.57-150.004367.78
    2222023.02.28 16:47close1100.201817.860.001797.04-150.004217.78
    2232023.02.28 16:47sell1120.201817.370.001816.92
    2242023.02.28 16:51t/p1120.201816.920.001816.929.004226.78
    2252023.03.08 05:15sell1130.201809.930.001774.74
    2262023.03.08 16:32close1130.201817.430.001774.74-150.004076.78
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XTPW/Full/StrategyTester 1.gif b/Packed/XAUUSD-15M/Reports/XTPW/Full/StrategyTester 1.gif new file mode 100644 index 0000000000000000000000000000000000000000..dabf25d4cfc60174ad3603702df31da6b9706319 GIT binary patch literal 7717 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 U{!{LbI&i4*UfEAm1ppNO4>l~Z)c^nh literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/XTPW/Full/StrategyTester 1.htm b/Packed/XAUUSD-15M/Reports/XTPW/Full/StrategyTester 1.htm new file mode 100644 index 0000000..e6ae90d --- /dev/null +++ b/Packed/XAUUSD-15M/Reports/XTPW/Full/StrategyTester 1.htm @@ -0,0 +1,169 @@ + + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.01 23:45 (2020.01.01 - 2023.08.02)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=false; +xRShortR2R=2; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.01; xRLongR2R=2; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.01; xRMaximumCandlesPerTrade=252; xROscillatorLength=7; xRFastLength=20; xRSlowLength=50; xRRangeMarketLength=50; xRSwingLength=7; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63353Ticks modelled72601176Modelling qualityn/a
    Mismatched charts errors808
    Initial deposit1000.00SpreadCurrent (57)
    Total net profit209.11Gross profit297.85Gross loss-88.73
    Profit factor3.36Expected payoff4.18
    Absolute drawdown5.97Maximal drawdown30.04 (2.64%)Relative drawdown2.64% (30.04)
    Total trades50Short positions (won %)35 (85.71%)Long positions (won %)15 (93.33%)
    Profit trades (% of total)44 (88.00%)Loss trades (% of total)6 (12.00%)
    Largestprofit trade22.02loss trade-15.49
    Averageprofit trade6.77loss trade-14.79
    Maximumconsecutive wins (profit in money)10 (74.81)consecutive losses (loss in money)1 (-15.49)
    Maximalconsecutive profit (count of wins)74.81 (10)consecutive loss (count of losses)-15.49 (1)
    Averageconsecutive wins6consecutive losses1
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.12.04 17:39sell10.011836.610.001825.20
    22020.12.07 10:37t/p10.011825.200.001825.2011.631011.63
    32021.01.29 16:54sell20.011865.800.001855.99
    42021.01.29 19:22t/p20.011855.990.001855.999.811021.44
    52021.02.09 17:45sell30.011841.990.001838.33
    62021.02.09 18:09t/p30.011838.330.001838.333.661025.10
    72021.02.10 17:00sell40.011841.300.001827.41
    82021.02.11 19:09t/p40.011827.410.001827.4114.551039.65
    92021.02.16 17:09sell50.011804.040.001801.47
    102021.02.16 18:49t/p50.011801.470.001801.472.571042.22
    112021.03.03 16:51sell60.011712.530.001708.07
    122021.03.03 17:36t/p60.011708.070.001708.074.461046.68
    132021.03.11 16:48buy70.011719.900.001728.00
    142021.03.11 20:09t/p70.011728.000.001728.008.101054.78
    152021.03.17 13:48buy80.011728.340.001737.00
    162021.03.17 20:06t/p80.011737.000.001737.008.661063.44
    172021.04.19 15:15buy90.011775.900.001781.90
    182021.04.21 04:39t/p90.011781.900.001781.905.031068.46
    192021.04.27 18:24buy100.011778.420.001784.35
    202021.04.28 12:24close100.011763.420.001784.35-15.491052.98
    212021.05.10 17:45sell110.011839.580.001833.85
    222021.05.11 03:39t/p110.011833.850.001833.855.951058.93
    232021.05.19 22:00buy120.011863.460.001881.95
    242021.05.20 19:49t/p120.011881.950.001881.9517.031075.96
    252021.07.06 19:07buy130.011794.080.001807.68
    262021.07.07 13:24t/p130.011807.680.001807.6813.111089.07
    272021.07.08 18:04buy140.011801.930.001814.59
    282021.07.13 15:39t/p140.011814.590.001814.5911.201100.27
    292021.07.13 17:21sell150.011811.750.001808.46
    302021.07.13 20:37t/p150.011808.460.001808.463.291103.56
    312021.08.17 17:15buy160.011782.680.001787.76
    322021.08.18 04:09t/p160.011787.760.001787.764.591108.16
    332021.08.20 17:39sell170.011781.750.001777.75
    342021.08.23 03:16t/p170.011777.750.001777.754.221112.38
    352021.08.31 15:30sell180.011811.860.001809.11
    362021.08.31 16:04t/p180.011809.110.001809.112.751115.13
    372021.10.27 18:09sell190.011793.560.001789.11
    382021.10.28 16:30close190.011808.560.001789.11-14.341100.78
    392021.11.03 04:00sell200.011783.060.001779.26
    402021.11.03 08:15t/p200.011779.260.001779.263.801104.58
    412021.11.30 17:48sell210.011794.770.001781.02
    422021.11.30 18:04t/p210.011781.020.001781.0213.751118.33
    432021.12.13 16:49sell220.011785.140.001782.99
    442021.12.14 10:24t/p220.011782.990.001782.992.371120.70
    452021.12.15 16:54sell230.011769.740.001766.01
    462021.12.15 17:39t/p230.011766.010.001766.013.731124.43
    472021.12.20 17:01sell240.011793.800.001789.41
    482021.12.20 22:09t/p240.011789.410.001789.414.391128.82
    492021.12.21 16:52buy250.011793.790.001799.79
    502021.12.22 20:09t/p250.011799.790.001799.795.511134.34
    512022.01.18 18:19sell260.011813.030.001806.19
    522022.01.19 16:51close260.011828.030.001806.19-14.781119.55
    532022.02.15 11:19buy270.011856.930.001866.99
    542022.02.16 19:19t/p270.011866.990.001866.999.571129.13
    552022.02.18 17:33sell280.011895.770.001893.21
    562022.02.18 17:37t/p280.011893.210.001893.212.561131.69
    572022.03.02 18:16sell290.011921.470.001907.56
    582022.03.03 13:34close290.011936.470.001907.56-14.341117.35
    592022.04.22 19:22sell300.011936.790.001932.93
    602022.04.22 20:28t/p300.011932.930.001932.933.861121.21
    612022.04.26 16:08sell310.011905.800.001905.21
    622022.04.26 16:57t/p310.011905.210.001905.210.591121.80
    632022.06.10 16:01sell320.011839.900.001834.17
    642022.06.10 16:18t/p320.011834.170.001834.175.731127.53
    652022.07.20 16:52sell330.011708.520.001702.79
    662022.07.20 19:48t/p330.011702.790.001702.795.731133.26
    672022.08.02 18:02sell340.011776.930.001767.92
    682022.08.02 21:02t/p340.011767.920.001767.929.011142.27
    692022.09.30 20:35buy350.011663.130.001667.34
    702022.10.03 04:30t/p350.011667.340.001667.343.721145.99
    712022.11.02 21:03sell360.011647.760.001626.40
    722022.11.03 10:26t/p360.011626.400.001626.4022.021168.01
    732022.11.30 17:18buy370.011751.890.001763.12
    742022.11.30 21:20t/p370.011763.120.001763.1211.231179.24
    752022.12.09 17:23buy380.011791.230.001800.19
    762022.12.09 18:20t/p380.011800.190.001800.198.961188.20
    772023.01.11 17:38buy390.011870.980.001874.94
    782023.01.11 19:21t/p390.011874.940.001874.943.961192.16
    792023.01.12 17:10sell400.011884.680.001867.96
    802023.01.12 21:03close400.011899.680.001867.96-15.001177.16
    812023.02.07 16:32sell410.011869.860.001868.93
    822023.02.07 16:45t/p410.011868.930.001868.930.931178.09
    832023.02.09 17:00sell420.011879.160.001868.22
    842023.02.09 18:03t/p420.011868.220.001868.2210.941189.03
    852023.03.02 20:35sell430.011835.870.001834.80
    862023.03.03 21:27close430.011850.870.001834.80-14.781174.25
    872023.04.26 19:17buy440.011989.040.001995.12
    882023.04.27 05:13t/p440.011995.120.001995.124.621178.87
    892023.05.15 17:34sell450.012016.660.002011.32
    902023.05.16 09:04t/p450.012011.320.002011.325.561184.43
    912023.05.26 17:09sell460.011951.200.001949.72
    922023.05.26 17:19t/p460.011949.720.001949.721.481185.91
    932023.06.07 17:32sell470.011958.950.001947.93
    942023.06.07 18:51t/p470.011947.930.001947.9311.021196.93
    952023.07.13 18:04sell480.011959.610.001957.54
    962023.07.13 18:51t/p480.011957.540.001957.542.071199.00
    972023.07.19 18:12sell490.011974.940.001970.18
    982023.07.20 17:35t/p490.011970.180.001970.185.421204.41
    992023.07.25 15:30sell500.011958.580.001953.88
    1002023.07.25 17:00t/p500.011953.880.001953.884.701209.11
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XTPW/Long/StrategyTester Long 13.gif b/Packed/XAUUSD-15M/Reports/XTPW/Long/StrategyTester Long 13.gif new file mode 100644 index 0000000000000000000000000000000000000000..36be70dfeb3e67e84aafd8cf408b5b95cb88f39b GIT binary patch literal 7329 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 literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/XTPW/Long/StrategyTester Long 13.htm b/Packed/XAUUSD-15M/Reports/XTPW/Long/StrategyTester Long 13.htm new file mode 100644 index 0000000..bb47461 --- /dev/null +++ b/Packed/XAUUSD-15M/Reports/XTPW/Long/StrategyTester Long 13.htm @@ -0,0 +1,103 @@ + + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.02 06:00 (2020.01.01 - 2023.08.31)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=true; +allowShortTrades=false; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=false; +xRShortR2R=2; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.01; xRLongR2R=2; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.01; xRMaximumCandlesPerTrade=252; xROscillatorLength=7; xRFastLength=20; xRSlowLength=50; xRRangeMarketLength=50; xRSwingLength=7; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63374Ticks modelled72620713Modelling qualityn/a
    Mismatched charts errors809
    Initial deposit1000.00SpreadCurrent (57)
    Total net profit91.72Gross profit107.20Gross loss-15.49
    Profit factor6.92Expected payoff5.40
    Absolute drawdown0.80Maximal drawdown21.17 (2.03%)Relative drawdown2.03% (21.17)
    Total trades17Short positions (won %)0 (0.00%)Long positions (won %)17 (94.12%)
    Profit trades (% of total)16 (94.12%)Loss trades (% of total)1 (5.88%)
    Largestprofit trade17.03loss trade-15.49
    Averageprofit trade6.70loss trade-15.49
    Maximumconsecutive wins (profit in money)13 (89.63)consecutive losses (loss in money)1 (-15.49)
    Maximalconsecutive profit (count of wins)89.63 (13)consecutive loss (count of losses)-15.49 (1)
    Averageconsecutive wins8consecutive losses1
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12021.03.11 16:48buy10.011719.900.001725.30
    22021.03.11 17:07t/p10.011725.300.001725.305.401005.40
    32021.03.17 13:48buy20.011728.340.001737.00
    42021.03.17 20:06t/p20.011737.000.001737.008.661014.06
    52021.04.19 15:15buy30.011775.900.001779.90
    62021.04.20 19:24t/p30.011779.900.001779.903.511017.57
    72021.04.27 18:24buy40.011778.420.001784.35
    82021.04.28 12:24close40.011763.420.001784.35-15.491002.09
    92021.05.19 22:00buy50.011863.460.001881.95
    102021.05.20 19:49t/p50.011881.950.001881.9517.031019.12
    112021.07.06 19:07buy60.011794.080.001807.68
    122021.07.07 13:24t/p60.011807.680.001807.6813.111032.23
    132021.07.08 18:04buy70.011801.930.001814.59
    142021.07.13 15:39t/p70.011814.590.001814.5911.201043.43
    152021.08.17 17:15buy80.011782.680.001786.06
    162021.08.17 17:24t/p80.011786.060.001786.063.381046.81
    172021.12.21 16:52buy90.011793.790.001799.79
    182021.12.22 20:09t/p90.011799.790.001799.795.511052.33
    192022.02.15 11:19buy100.011856.930.001863.63
    202022.02.16 16:39t/p100.011863.630.001863.636.211058.54
    212022.04.26 17:36buy110.011901.340.001904.58
    222022.04.26 17:38t/p110.011904.580.001904.583.241061.78
    232022.09.30 20:35buy120.011663.130.001665.93
    242022.10.03 04:23t/p120.011665.930.001665.932.311064.09
    252022.11.30 17:18buy130.011751.890.001763.12
    262022.11.30 21:20t/p130.011763.120.001763.1211.231075.32
    272022.12.09 17:23buy140.011791.230.001800.19
    282022.12.09 18:20t/p140.011800.190.001800.198.961084.28
    292023.01.11 17:38buy150.011870.980.001873.62
    302023.01.11 18:51t/p150.011873.620.001873.622.641086.92
    312023.04.26 19:17buy160.011989.040.001993.09
    322023.04.27 04:34t/p160.011993.090.001993.092.591089.52
    332023.07.13 19:00buy170.011955.090.001957.29
    342023.07.13 19:18t/p170.011957.290.001957.292.201091.72
    +
    diff --git a/Packed/XAUUSD-15M/Reports/XTPW/Short/StrategyTester 13.gif b/Packed/XAUUSD-15M/Reports/XTPW/Short/StrategyTester 13.gif new file mode 100644 index 0000000000000000000000000000000000000000..8e75c527d0ac1523fb04af79e4730a0d4bf87ed4 GIT binary patch literal 7848 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 literal 0 HcmV?d00001 diff --git a/Packed/XAUUSD-15M/Reports/XTPW/Short/StrategyTester 13.htm b/Packed/XAUUSD-15M/Reports/XTPW/Short/StrategyTester 13.htm new file mode 100644 index 0000000..b78cc40 --- /dev/null +++ b/Packed/XAUUSD-15M/Reports/XTPW/Short/StrategyTester 13.htm @@ -0,0 +1,139 @@ + + + + Strategy Tester: x-saherelm.ea + + + + + + + +
    +
    Strategy Tester Report
    +
    x-saherelm.ea
    +
    Alpari-Demo (Build 1382)

    + + + + + + + + + + + + + + + + + + + + + + +
    SymbolXAUUSD (Gold (Spot))
    Period15 Minutes (M15) 2020.11.25 18:30 - 2023.08.01 23:45 (2020.01.01 - 2023.08.02)
    ModelEvery tick (the most precise method based on all available least timeframes)
    ParameterssignalPrefix="XST_EA"; bullishSignalLabel="X_BUY"; bullishSignalColor=Aqua; bearishSignalLabel="X_SELL"; bearishSignalColor=Magenta; signalEntryColor=Aquamarine; signalSLColor=Red; signalTPColor=Green; candleGapBetweenSignals=7; allowTrade=true; +allowLongTrades=false; +allowShortTrades=true; +alertEvents=true; +alertPositions=true; +longPositionAlerts=true; +shortPositionAlerts=true; +terminalAlert=false; +pushAlert=false; +lotsPerTradePercent=0.00001; maxOpenTrades=4; maxDrawdownPercentPerPTrade=0.1; minBalancePercent=0.5; maxEquityPercent=0.1; xStarter="- X Signal Provider -"; enableXSignalling=false; +xShortR2R=3; xShortLotsPerTradePercent=0.00001; xShortMaxDrawdownPerTradePercent=0.02; xLongR2R=3; xLongLotsPerTradePercent=0.00001; xLongMaxDrawdownPerTradePercent=0.02; xSharpDetectorFactor=700; xMaximumCandlesPerTrade=206; xOscillatorLength=7; xPSarStep=0.02; xPSarMaximum=0.2; xRangeMarketLength=5; xSwingLength=7; xRStarter="- XR Signal Provider -"; enableXRSignalling=false; +xRShortR2R=2; xRShortLotsPerTradePercent=0.00001; xRShortMaxDrawdownPerTradePercent=0.01; xRLongR2R=2; xRLongLotsPerTradePercent=0.00001; xRLongMaxDrawdownPerTradePercent=0.01; xRMaximumCandlesPerTrade=252; xROscillatorLength=7; xRFastLength=20; xRSlowLength=50; xRRangeMarketLength=50; xRSwingLength=7; xTPWStarter="- XTPW Signal Provider -"; enableXTPWSignalling=true; +xTPWShortR2R=2; xTPWShortLotsPerTradePercent=0.00001; xTPWShortMaxDrawdownPerTradePercent=0.015; xTPWLongR2R=2; xTPWLongLotsPerTradePercent=0.00001; xTPWLongMaxDrawdownPerTradePercent=0.015; xTPWMaximumCandlesPerTrade=206; xTPWPSarStep=0.02; xTPWPSarMaximum=0.2; xTPWSwingLength=7; xTPWSharpDetectionFactor=650;
    Bars in test63353Ticks modelled72601176Modelling qualityn/a
    Mismatched charts errors808
    Initial deposit1000.00SpreadCurrent (59)
    Total net profit109.29Gross profit182.54Gross loss-73.25
    Profit factor2.49Expected payoff3.12
    Absolute drawdown5.99Maximal drawdown31.30 (2.90%)Relative drawdown2.90% (31.30)
    Total trades35Short positions (won %)35 (85.71%)Long positions (won %)0 (0.00%)
    Profit trades (% of total)30 (85.71%)Loss trades (% of total)5 (14.29%)
    Largestprofit trade22.02loss trade-15.00
    Averageprofit trade6.08loss trade-14.65
    Maximumconsecutive wins (profit in money)10 (62.88)consecutive losses (loss in money)1 (-15.00)
    Maximalconsecutive profit (count of wins)62.88 (10)consecutive loss (count of losses)-15.00 (1)
    Averageconsecutive wins5consecutive losses1
    +Graph
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #TimeTypeOrderSizePriceS / LT / PProfitBalance
    12020.12.04 17:39sell10.011836.610.001825.20
    22020.12.07 10:37t/p10.011825.200.001825.2011.631011.63
    32021.01.29 16:54sell20.011865.800.001855.99
    42021.01.29 19:22t/p20.011855.990.001855.999.811021.44
    52021.02.09 17:45sell30.011841.990.001838.33
    62021.02.09 18:09t/p30.011838.330.001838.333.661025.10
    72021.02.10 17:00sell40.011841.300.001827.41
    82021.02.11 19:09t/p40.011827.410.001827.4114.551039.65
    92021.02.16 17:09sell50.011804.040.001801.47
    102021.02.16 18:49t/p50.011801.470.001801.472.571042.22
    112021.03.03 16:51sell60.011712.530.001708.07
    122021.03.03 17:36t/p60.011708.070.001708.074.461046.68
    132021.05.10 17:45sell70.011839.580.001833.85
    142021.05.11 03:39t/p70.011833.850.001833.855.951052.63
    152021.07.13 17:21sell80.011811.750.001808.46
    162021.07.13 20:37t/p80.011808.460.001808.463.291055.92
    172021.08.20 17:39sell90.011781.750.001777.75
    182021.08.23 03:16t/p90.011777.750.001777.754.221060.13
    192021.08.31 15:30sell100.011811.860.001809.11
    202021.08.31 16:04t/p100.011809.110.001809.112.751062.88
    212021.10.27 18:09sell110.011793.560.001789.11
    222021.10.28 16:30close110.011808.560.001789.11-14.341048.54
    232021.11.03 04:00sell120.011783.060.001779.26
    242021.11.03 08:16t/p120.011779.260.001779.263.801052.34
    252021.11.30 17:48sell130.011794.770.001781.02
    262021.11.30 18:04t/p130.011781.020.001781.0213.751066.09
    272021.12.13 16:49sell140.011785.140.001782.99
    282021.12.14 10:24t/p140.011782.990.001782.992.371068.46
    292021.12.15 16:54sell150.011769.740.001766.01
    302021.12.15 17:39t/p150.011766.010.001766.013.731072.19
    312021.12.20 17:01sell160.011793.800.001789.41
    322021.12.20 22:09t/p160.011789.410.001789.414.391076.58
    332022.01.18 18:19sell170.011813.030.001806.19
    342022.01.19 16:51close170.011828.030.001806.19-14.781061.80
    352022.02.18 17:33sell180.011895.770.001893.21
    362022.02.18 17:37t/p180.011893.210.001893.212.561064.36
    372022.03.02 18:16sell190.011921.470.001907.56
    382022.03.03 13:34close190.011936.470.001907.56-14.341050.02
    392022.04.22 19:22sell200.011936.790.001932.93
    402022.04.22 20:28t/p200.011932.930.001932.933.861053.88
    412022.04.26 16:08sell210.011905.800.001905.21
    422022.04.26 16:57t/p210.011905.210.001905.210.591054.47
    432022.06.10 16:01sell220.011839.900.001834.17
    442022.06.10 16:18t/p220.011834.170.001834.175.731060.20
    452022.07.20 16:52sell230.011708.520.001702.79
    462022.07.20 19:48t/p230.011702.790.001702.795.731065.93
    472022.08.02 18:02sell240.011776.930.001767.92
    482022.08.02 21:02t/p240.011767.920.001767.929.011074.94
    492022.11.02 21:03sell250.011647.760.001626.40
    502022.11.03 10:26t/p250.011626.400.001626.4022.021096.95
    512023.01.12 17:10sell260.011884.680.001867.96
    522023.01.12 21:03close260.011899.680.001867.96-15.001081.95
    532023.02.07 16:32sell270.011869.860.001868.93
    542023.02.07 16:45t/p270.011868.930.001868.930.931082.88
    552023.02.09 17:00sell280.011879.160.001868.22
    562023.02.09 18:03t/p280.011868.220.001868.2210.941093.82
    572023.03.02 20:35sell290.011835.870.001834.78
    582023.03.03 21:27close290.011850.870.001834.78-14.781079.04
    592023.05.15 17:34sell300.012016.660.002011.32
    602023.05.16 09:05t/p300.012011.320.002011.325.561084.60
    612023.05.26 17:09sell310.011951.200.001949.72
    622023.05.26 17:19t/p310.011949.720.001949.721.481086.08
    632023.06.07 17:32sell320.011958.950.001947.93
    642023.06.07 18:51t/p320.011947.930.001947.9311.021097.10
    652023.07.13 18:04sell330.011959.610.001957.54
    662023.07.13 18:51t/p330.011957.540.001957.542.071099.17
    672023.07.19 18:12sell340.011974.940.001970.18
    682023.07.20 17:35t/p340.011970.180.001970.185.421104.59
    692023.07.25 15:30sell350.011958.580.001953.88
    702023.07.25 17:00t/p350.011953.880.001953.884.701109.29
    +
    diff --git a/README.md b/README.md new file mode 100644 index 0000000..1372b4c --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# xMQL4 + +this is a workspace which contains all requirements for implementing new indicators and oscillators on MetaTrader 4 Platform using MQL4 to satisfied SaherElm IT Center Trading Strategies. + +## Maintainer + +Hadi Khazaee asl + +[https://www.saherelm.ir](https://www.saherelm.ir) + +[hadi_khazaee_asl@yahoo.com](mailto:hadi_khazaee_asl@yahoo.com) diff --git a/xEAs/x-saherelm.ea.mq4 b/xEAs/x-saherelm.ea.mq4 new file mode 100644 index 0000000..d8a63ca --- /dev/null +++ b/xEAs/x-saherelm.ea.mq4 @@ -0,0 +1,1038 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center XST Strategy Expert Advisor +// --------------------------------------------- +// saherelm implementation of strategy expert advisor ... +// in this EA, we try to combine multiple tools, to ashive best +// results ... +// +// ShortName: XST +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +989121694056 +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XST Strategy Expert Advisor" +#property strict + +// +// START Inputs ... +// +// +// Signal Prefixe ... +input string signalPrefix = "XST_EA"; // Signal Prefix + +// +// Signal Draw Specifications ... +input string bullishSignalLabel = "X_BUY"; // Bullish Signal Label +input color bullishSignalColor = clrAqua; // Bullish Signal Color + +// +input string bearishSignalLabel = "X_SELL"; // Bearish Signal Label +input color bearishSignalColor = clrFuchsia; // Bearish Signal Color + +// +input color signalEntryColor = clrAquamarine; // Signal Entry Ptice Color +input color signalSLColor = clrRed; // Signal SL Color +input color signalTPColor = clrGreen; // Signal TP Color + +// +input int candleGapBetweenSignals = 7; // How many Candle waits to new Signal from last one + +// +// Trade ... +input bool allowTrade = true; // Allow Trade Based on given Signals +input bool allowLongTrades = true; // Allow Long Trades +input bool allowShortTrades = true; // Allow Short Trades + +// +// Alerts ... +input bool alertEvents = true; // Alert Events +input bool alertPositions = true; // Alert Positions +input bool longPositionAlerts = true; // Alert Long Positions +input bool shortPositionAlerts = true; // Alert Short Positions + +// +// Alert Types ... +input bool terminalAlert = false; // Terminal Alert +input bool pushAlert = false; // Push Notification Alerts + +// +// Balance and Finanical Specifications ... +input double lotsPerTradePercent = 0.00001; // Lots Per Trade Percent +input int maxOpenTrades = 4; // Maximum Open Trade +input double maxDrawdownPercentPerPTrade = 0.1; // Maximum DrawDown Per Trade +input double minBalancePercent = 0.5; // Minimum Balance for Trading +input double maxEquityPercent = 0.1; // Maximum Trade Equity + +// +// START Global Definitions: Variables, Properties and etc ... +// +int lastSignalledBar = 0; + +// +// Includes our shared library ... +#include "../Libraries/x-saherelm.lib.mq4" + +// +// Includes our shared library ... +#include "../Libraries/x-saherelm.signal.lib.mq4" + +// +int maxMarketLength = 0; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Validate Inputs ... + bool inputsNotValiid = + // + // EA ... + maxOpenTrades <= 0 + || maxEquityPercent < 0 + || minBalancePercent < 0 + || lotsPerTradePercent < 0 + || maxDrawdownPercentPerPTrade < 0 + ; + + // + if (inputsNotValiid) { + return INIT_PARAMETERS_INCORRECT; + } + + // + totalSignals = 0; + totalLongSignals = 0; + totalShortSignals = 0; + + // + initialBalance = 0; + + // + // START Define Array Series ... + // + // + // END Define Array Series ... + // + + // + // here we specify logging enabled or not ... + enableLogging = true; + + // + // this is a Tag which attached to our Logger ... + logTag = "XST"; + + // + ClearSignalConditions(); + + // + maxMarketLength = MathMax(0, GetDailyCandleCount()); + + // + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) { +} + +// +// Ticker Event Handler ... +void OnTick() { + // + isNewDay = IsNewDay(); + if (isNewDay) { + // + LogMessage( + StringConcatenate( + "New Day ..." + ) + ); + } + + // + // Process Signals to Open Positions ... + ProcessSignals(); + + // + // Checking State for Signal Handling ... + CheckState(); + + // + // Process Open Positions for Trailing Stop Loss or Close ... + ProcessOpenPositions(); +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Check State for Signal Handling ... +void CheckState() { + // + // Here we Must to Check Market State for enable or disable + // Signal Handlers and also make dection to close all long/short + // trades ... +} + +// +// Calculate Signals and Process Based on Exists Signals ... +void ProcessSignals() { + // + XSignalRequest request = {}; + request.type = X_SIGNAL_NONE; + request.hasSignal = false; + + // + // Prevent Multiple Calculating on Same Bars ... + isNewBar = IsNewBar(); + if (isNewBar) { + countedBars++; + } + + // + if (countedBars < maxMarketLength) { + return; + } + + // + bool allowDoTrade = true; + + // + // Check Balance ... + if (initialBalance > 0) { + // + // Retrieve Account Balance ... + double balance = AccountInfoDouble(ACCOUNT_BALANCE); + double minimumBalanceForTrade = + balance > initialBalance + ? + minBalancePercent * balance + : + minBalancePercent * initialBalance; + + // + // Retrieve Account Equity ... + double equity = AccountInfoDouble(ACCOUNT_EQUITY); + double maxAllowedEquity = balance - (balance * maxEquityPercent); + + // + // Retrieve Free Marigin ... + double freeMargin = AccountFreeMargin(); + double maximumMariginRisk = balance - (balance * maxEquityPercent); + + // + if ( + // + // Do not Open Positions if equity not passed ... + equity < maxAllowedEquity || + // + // Do not Open Positions if free margin not passed ... + freeMargin <= maximumMariginRisk || + // + // Do not open positions if balance less than minimum ... + balance <= minimumBalanceForTrade + ) { + // + static bool tradingPauseAlerted; + + // + allowDoTrade = false; + + // + if (!tradingPauseAlerted) { + // + string message = StringConcatenate( + "Trading Pause => ", + "Balance: ", balance, + ", Equity: ", equity, + ", FreeMargin: ", freeMargin + ); + + // + LogMessage(message); + SendAlert(message); + + // + tradingPauseAlerted = true; + } + } + } + + // + // Retrieve Signal Exists ... + request = GenerateSignal(0); + + // + // Prevent doing anything else, if there is no signals ... + if ( + !allowDoTrade || + !request.hasSignal || + request.type == X_SIGNAL_NONE + ) { + return; + } + + // + bool hasLongSignal = request.type == X_SIGNAL_LONG; + + // + // Check last Signalled Bar with Counted Bars ... + // Prevent Multiple Signalling on Same Bar ... + bool isInLastSignalledBars = false; + for (int i=0; i < candleGapBetweenSignals; i++) { + // + isInLastSignalledBars = + isInLastSignalledBars + || lastSignalledBar == countedBars - i + ; + } + if (isInLastSignalledBars) { + // + // Clear Signal Conditions ... + if (hasLongSignal) { + ClearLongSignalConditions(); + } else { + ClearShortSignalConditions(); + } + + // + return; + } + + // + // increase last signalled bar ... + lastSignalledBar = countedBars; + + // + // Calculate Can Trade or not ... + allowDoTrade = allowTrade + && ( + hasLongSignal ? + allowLongTrades : + allowShortTrades + ); + + // + // Chack Maximum Open Positions ... + int openTrades = CountOpenTrades(); + if (maxOpenTrades > 0) { + // + if (openTrades >= maxOpenTrades) { + // + allowDoTrade = false; + + // + if (!allowDoTrade) { + // + string message = StringConcatenate( + "Trading Pause => ", + "Max Open Trades (", + maxOpenTrades, + ") reached ..." + ); + + // + LogMessage(message); + SendAlert(message); + } + } + } + + // + // Check Trading is Enable or not ... + // nothing to do if trading is disabled ... + if (!allowDoTrade) { + // + // Clear Signal Conditions ... + if (hasLongSignal) { + ClearLongSignalConditions(); + } else { + ClearShortSignalConditions(); + } + + // + string message = StringConcatenate( + "Trading Not Allowed ..." + ); + + // + LogMessage(message); + SendAlert(message); + return; + } + + // + // Retrieve Signal Lots Per Trade ... + double lPTradePercent = GetSignalLottage( + request.signal, + lotsPerTradePercent + ); + + // + bool isPositionOpened = TradeSignal( + request.signal, + lPTradePercent, + // + bullishSignalLabel, + bullishSignalColor, + bearishSignalLabel, + bearishSignalColor + ); + + // + totalSignals++; + if (hasLongSignal) { + // + totalLongSignals++; + ClearLongSignalConditions(); + } else { + // + totalShortSignals++; + ClearShortSignalConditions(); + } + + // + if (isPositionOpened) { + // + bool canAlert = + alertPositions + && ( + hasLongSignal ? + longPositionAlerts + : + shortPositionAlerts + ); + + // + if (canAlert) { + // + // Alert Message ... + string message = StringConcatenate( + "Trade on Signal ID: ", request.signal.id, + ", ProvidedBy: ", GetSignalProviderIdentifier(request.signal.provider), + ", Entry: ", request.signal.entry, + ", TP: ", request.signal.tp + ); + + // + // Terminal Alert ... + if (terminalAlert) { + Alert(message); + } + + // + // Push Alert ... + if (pushAlert) { + SendNotification(message); + } + } + } +} + +// +// Process All Open Positions ... +void ProcessOpenPositions() { + // + // XSignalling ... + if (enableXSignalling) { + // + // Close All XXX Provided Signals on it's Specific Condition ... + if (xCloseLongTrades) { + // + CloseAllProviderLongTrades(X_XXX_PROVIDER); + + // + xCloseLongTrades = false; + } + + // + if (xCloseShortTrades) { + // + CloseAllProviderShortTrades(X_XTPW_PROVIDER); + + // + xCloseShortTrades = false; + } + + // + // Close Maximum DrawDown Passed Trades ... + + // + // Longs ... + bool hasClosedLongInDrawDownLongTrade = CloseAllMaximumDrawDownPassedTrades( + xLongMaxDrawdownPerTradePercent, + X_SIGNAL_LONG, + X_XXX_PROVIDER + ); + + // + // Shorts ... + bool hasClosedShortInDrawDownLongTrade = CloseAllMaximumDrawDownPassedTrades( + xShortMaxDrawdownPerTradePercent, + X_SIGNAL_SHORT, + X_XXX_PROVIDER + ); + + // + // Close All Long Time Trades based on Provider provided Length ... + bool hasClosedLongTimeTrade = CloseAllLongTimeTrades( + xMaximumCandlesPerTrade, + X_XXX_PROVIDER + ); + + // + if ( + hasClosedLongTimeTrade + || hasClosedLongInDrawDownLongTrade + || hasClosedShortInDrawDownLongTrade + ) { + xFailedSignals++; + } + } + + // + // XR Signalling ... + if (enableXRSignalling) { + // + if (xRCloseLongTrades) { + // + CloseAllProviderLongTrades(X_XR_PROVIDER); + + // + xRCloseLongTrades = false; + } + + // + if (xRCloseShortTrades) { + // + CloseAllProviderShortTrades(X_XR_PROVIDER); + + // + xRCloseShortTrades = false; + } + + // + // Close Maximum DrawDown Passed Trades ... + + // + // Longs ... + bool hasClosedLongInDrawDownLongTrade = CloseAllMaximumDrawDownPassedTrades( + xRLongMaxDrawdownPerTradePercent, + X_SIGNAL_LONG, + X_XR_PROVIDER + ); + + // + // Shorts ... + bool hasClosedShortInDrawDownLongTrade = CloseAllMaximumDrawDownPassedTrades( + xRShortMaxDrawdownPerTradePercent, + X_SIGNAL_SHORT, + X_XR_PROVIDER + ); + + // + // Close All Long Time Trades based on Provider provided Length ... + bool hasClosedLongTimeTrade = CloseAllLongTimeTrades( + xRMaximumCandlesPerTrade, + X_XR_PROVIDER + ); + + // + if ( + hasClosedLongTimeTrade + || hasClosedLongInDrawDownLongTrade + || hasClosedShortInDrawDownLongTrade + ) { + xRFailedSignals++; + } + } + + // + // XTPW Signalling ... + if (enableXTPWSignalling) { + // + if (xTPWCloseLongTrades) { + // + CloseAllProviderLongTrades(X_XTPW_PROVIDER); + + // + xTPWCloseLongTrades = false; + } + + // + if (xTPWCloseShortTrades) { + // + CloseAllProviderShortTrades(X_XTPW_PROVIDER); + + // + xTPWCloseShortTrades = false; + } + + // + // Close Maximum DrawDown Passed Trades ... + + // + // Longs ... + bool hasClosedLongInDrawDownLongTrade = CloseAllMaximumDrawDownPassedTrades( + xTPWLongMaxDrawdownPerTradePercent, + X_SIGNAL_LONG, + X_XTPW_PROVIDER + ); + + // + // Shorts ... + bool hasClosedShortInDrawDownLongTrade = CloseAllMaximumDrawDownPassedTrades( + xTPWShortMaxDrawdownPerTradePercent, + X_SIGNAL_SHORT, + X_XTPW_PROVIDER + ); + + // + // Close All Long Time Trades based on Provider provided Length ... + bool hasClosedLongTimeTrade = CloseAllLongTimeTrades( + xTPWMaximumCandlesPerTrade, + X_XTPW_PROVIDER + ); + + // + if ( + hasClosedLongTimeTrade + || hasClosedLongInDrawDownLongTrade + || hasClosedShortInDrawDownLongTrade + ) { + xTPWFailedSignals++; + } + } + + // + // Close Maximum DrawDown Passed Trades ... + // this is the Maximum Controller ... + // + double maxOfXPercent = enableXSignalling ? + MathMax( + xLongMaxDrawdownPerTradePercent, + xShortMaxDrawdownPerTradePercent + ) : 0 + ; + + // + double maxOfXRPercent = enableXRSignalling ? + MathMax( + xRLongMaxDrawdownPerTradePercent, + xRShortMaxDrawdownPerTradePercent + ) : 0 + ; + + // + double maxOfXTPWPercent = enableXTPWSignalling ? + MathMax( + xTPWLongMaxDrawdownPerTradePercent, + xTPWShortMaxDrawdownPerTradePercent + ) : 0 + ; + + // + double maxDrawDownPercent = MathMax( + maxOfXPercent, + maxOfXRPercent + ); + maxDrawDownPercent = MathMax( + maxDrawDownPercent, + maxOfXTPWPercent + ); + maxDrawDownPercent = MathMax( + maxDrawDownPercent, + maxDrawdownPercentPerPTrade + ); + + // + // we Calculate Max DrawDown Percent Per Trade ... + // then try to Close based on them ... + bool hasClosedInDrawDownLongTrade = CloseAllMaximumDrawDownPassedTrades( + maxDrawDownPercent + ); +} + +// +// Send Special Type of Alerts ... +void SendAlert(string message) { + // + if (!alertEvents) { + return; + } + + // + // Terminal Alert ... + if (terminalAlert) { + Alert(message); + } + + // + // Push Alert ... + if (pushAlert) { + SendNotification(message); + } +} +// +// END Functions ... +// + +// +// +// Calculate Signal ... +// in this function we calculate a signal exists in +// specific bar or not ... +XSignalRequest GenerateSignal( + const int bar_index // Bar Index ... +) { + // + // create temp result ... + XSignalRequest result = {}; + result.hasSignal = false; + result.type = X_SIGNAL_NONE; + result.provider = X_UNKNOWN_PROVIDER; + + // + bool hasSignal = false; + bool hasLongSignal = false; + bool hasShortSignal = false; + + // + XSignal signal = {}; + + // + // Define Template Signal Requests for Managing Multiple Signals ... + // + // X ... + XSignalRequest xLongSignalRequest = {}; + XSignalRequest xShortSignalRequest = {}; + // + // XR ... + XSignalRequest xrLongSignalRequest = {}; + XSignalRequest xrShortSignalRequest = {}; + // + // XTPW ... + XSignalRequest xTPWLongSignalRequest = {}; + XSignalRequest xTPWShortSignalRequest = {}; + + // + // START XR Signal Handler ... + // + // + if (enableXRSignalling) { + // + CheckXRSignalHandler( + bar_index + ); + + // + // Long Trades ... + if (allowTrade && allowLongTrades) { + // + if (xRWaitForLongSignals) { + // + CheckXRLongSignalConditions( + bar_index + ); + + // + xrLongSignalRequest = GenerateXRSignal( + X_SIGNAL_LONG, + signalPrefix, + bar_index + ); + + // + if (xrLongSignalRequest.hasSignal) { + // + // Here we can Check and Filter Signals Based On State ... + bool isReady = IsReadyForXRSignals( + xrLongSignalRequest.signal + ); + + // + if (isReady && xRWaitForLongSignals) { + // + hasLongSignal = true; + signal = xrLongSignalRequest.signal; + } else { + ClearXRLongSignalConditions(); + } + } + } else { + ClearXRLongSignalConditions(); + } + } + + // + // Short Trades ... + if (allowTrade && allowShortTrades) { + // + if (xRWaitForShortSignals) { + // + CheckXRShortSignalConditions( + bar_index + ); + + // + xrShortSignalRequest = GenerateXRSignal( + X_SIGNAL_SHORT, + signalPrefix, + bar_index + ); + + // + if (xrShortSignalRequest.hasSignal) { + // + // Here we can Check and Filter Signals Based On State ... + bool isReady = IsReadyForXRSignals( + xrShortSignalRequest.signal + ); + + // + if (isReady && xRWaitForShortSignals) { + // + hasShortSignal = true; + signal = xrShortSignalRequest.signal; + } else { + ClearXRShortSignalConditions(); + } + } + } else { + ClearXRShortSignalConditions(); + } + } + } + // + // END XR Signal Handler ... + // + + // + // START XTPW Signal Handler ... + // + if (enableXTPWSignalling) { + // + CheckXTPWSignalHandler( + bar_index + ); + + // + // Long Trades ... + if (allowTrade && allowLongTrades) { + // + if (xTPWWaitForLongSignals) { + // + CheckXTPWLongSignalConditions( + bar_index + ); + + // + xTPWLongSignalRequest = GenerateXTPWSignal( + X_SIGNAL_LONG, + signalPrefix, + bar_index + ); + + // + if (xTPWLongSignalRequest.hasSignal) { + // + // Here we can Check and Filter Signals Based On State ... + bool isReady = IsReadyForXTPWSignals( + xTPWLongSignalRequest.signal + ); + + // + if (isReady && xTPWWaitForLongSignals) { + // + hasLongSignal = true; + signal = xTPWLongSignalRequest.signal; + } else { + ClearXTPWLongSignalConditions(); + } + } + } else { + ClearXTPWLongSignalConditions(); + } + } + + // + // Short Trades ... + if (allowTrade && allowShortTrades) { + // + if (xTPWWaitForShortSignals) { + // + CheckXTPWShortSignalConditions( + bar_index + ); + + // + xTPWShortSignalRequest = GenerateXTPWSignal( + X_SIGNAL_SHORT, + signalPrefix, + bar_index + ); + + // + if (xTPWShortSignalRequest.hasSignal) { + // + // Here we can Check and Filter Signals Based On State ... + bool isReady = IsReadyForXTPWSignals( + xTPWShortSignalRequest.signal + ); + + // + if (isReady && xTPWWaitForShortSignals) { + // + hasShortSignal = true; + signal = xTPWShortSignalRequest.signal; + } else { + ClearXTPWShortSignalConditions(); + } + } + } else { + ClearXTPWShortSignalConditions(); + } + } + } + // + // END XTPW Signal Handler ... + // + + // + // START X Signal Handler ... + // + // + if (enableXSignalling) { + // + CheckXSignalHandler( + bar_index + ); + + // + // Long Trades ... + if (allowTrade && allowLongTrades) { + // + if (xWaitForLongSignals) { + // + CheckXLongSignalConditions( + bar_index + ); + + // + xLongSignalRequest = GenerateXSignal( + X_SIGNAL_LONG, + signalPrefix, + bar_index + ); + + // + if (xLongSignalRequest.hasSignal) { + // + // Here we can Check and Filter Signals Based On State ... + bool isReady = IsReadyForXSignals( + xLongSignalRequest.signal + ); + + // + if (isReady && xWaitForLongSignals) { + // + hasLongSignal = true; + signal = xLongSignalRequest.signal; + } else { + ClearXLongSignalConditions(); + } + } + } else { + ClearXLongSignalConditions(); + } + } + + // + // Short Trades ... + if (allowTrade && allowShortTrades) { + // + if (xWaitForShortSignals) { + // + CheckXShortSignalConditions( + bar_index + ); + + // + xShortSignalRequest = GenerateXSignal( + X_SIGNAL_SHORT, + signalPrefix, + bar_index + ); + + // + if (xShortSignalRequest.hasSignal) { + // + // Here we can Check and Filter Signals Based On State ... + bool isReady = IsReadyForXSignals( + xShortSignalRequest.signal + ); + + // + if (isReady && xWaitForShortSignals) { + // + hasShortSignal = true; + signal = xShortSignalRequest.signal; + } else { + ClearXShortSignalConditions(); + } + } + } else { + ClearXShortSignalConditions(); + } + } + } + // + // END XR Signal Handler ... + // + + // + hasSignal = hasLongSignal || hasShortSignal; + + // + if (!hasSignal) { + // + signal.type = X_SIGNAL_NONE; + result.type = X_SIGNAL_NONE; + } + + // + // Normalize TP, SL and Entry Price ... + signal.tp = NormalizeDouble(signal.tp, _Digits); + signal.sl = NormalizeDouble(signal.sl, _Digits); + signal.entry = NormalizeDouble(signal.entry, _Digits); + + // + result.signal = signal; + result.type = signal.type; + result.hasSignal = hasSignal; + result.provider = signal.provider; + + // + // Return Result ... + return result; +} diff --git a/xIndicators/x-saherelm.adx.mq4 b/xIndicators/x-saherelm.adx.mq4 new file mode 100644 index 0000000..3271a4e --- /dev/null +++ b/xIndicators/x-saherelm.adx.mq4 @@ -0,0 +1,220 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center ADX Oscillator +// --------------------------------------------- +// saherelm implementation of above oscillator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm ADX Oscillator" +#property strict + +// +// START Inputs ... +// +input int length = 7; // Averaging Length +input ENUM_APPLIED_PRICE appliedPrice = PRICE_WEIGHTED; // Averaging Applied Price +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +// +#property indicator_separate_window + +// +#property indicator_minimum 0 +#property indicator_maximum 100 + +// +#property indicator_buffers 3 + +// +#property indicator_level1 0.0 +#property indicator_level2 50.0 +#property indicator_level3 70.0 +#property indicator_level4 100.0 +#property indicator_levelcolor clrSilver +#property indicator_levelstyle STYLE_DOT + +// +// ADX ... +#property indicator_width1 1 +#property indicator_color1 clrLightBlue +#property indicator_type1 DRAW_LINE +#property indicator_style1 STYLE_SOLID + +// +// Positive Direction ... +#property indicator_width2 1 +#property indicator_color2 clrLime +#property indicator_type2 DRAW_LINE +#property indicator_style2 STYLE_DOT + +// +// Negative Direction ... +#property indicator_width3 1 +#property indicator_color3 clrRed +#property indicator_type3 DRAW_LINE +#property indicator_style3 STYLE_DOT + +// +// Declare Buffers ... +#define adxBufferIndex 0 +#define positiveBufferIndex 1 +#define negativeBufferIndex 2 + +double adxBuffer[]; +double positiveBuffer[]; +double negativeBuffer[]; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + + // + // Validating Input Parameters ... + if (length < 0) { + return INIT_PARAMETERS_INCORRECT; + } + + // + IndicatorBuffers(3); + + // + SetIndexBuffer(positiveBufferIndex, positiveBuffer); + SetIndexLabel(positiveBufferIndex, "DI+"); + + // + SetIndexBuffer(negativeBufferIndex, negativeBuffer); + SetIndexLabel(negativeBufferIndex, "DI-"); + + // + SetIndexBuffer(adxBufferIndex, adxBuffer); + SetIndexLabel(adxBufferIndex, "ADX"); + + // + // initialization done ... + return INIT_SUCCEEDED; +} + +// +// Do Calculation ... +int OnCalculate( + const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, length); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate Long TP ... + CalculateBuffers(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +void CalculateBuffers( + const int bar_index +) { + // + // Calculate Buffers ... + + // + // Retrieves the current ADX value ... + double adx = iADX( + _Symbol, + _Period, + length, + appliedPrice, + MODE_MAIN, + bar_index + ); + adxBuffer[bar_index] = adx; + + // + // Retrieves the current DI+ value ... + double plusDi = iADX( + _Symbol, + _Period, + length, + appliedPrice, + MODE_PLUSDI, + bar_index + ); + positiveBuffer[bar_index] = plusDi; + + // + // Retrieves the current DI- value ... + double minusDi = iADX( + _Symbol, + _Period, + length, + appliedPrice, + MODE_MINUSDI, + bar_index + ); + negativeBuffer[bar_index] = minusDi; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.ma.mq4 b/xIndicators/x-saherelm.ma.mq4 new file mode 100644 index 0000000..e3a5737 --- /dev/null +++ b/xIndicators/x-saherelm.ma.mq4 @@ -0,0 +1,173 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MA Indicator +// --------------------------------------------- +// saherelm implementation of above indicator ... +// this indicator uses two ma line: +// - fast ma; +// - slow ma; +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm MA Indicator" +#property strict + +// +// START Inputs ... +// +// +// Fast MA ... +input int maLength = 20; // MA Length +input int maShift = 0; // MA Shift +input ENUM_MA_METHOD maMethod = MODE_EMA; // MA Method +input ENUM_APPLIED_PRICE maAppliedPrice = PRICE_CLOSE; // MA Applied Price + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_chart_window + +// +#property indicator_buffers 1 + +// +#property indicator_plots 1 + +// +// Start Define Indicator Buffer Styles ... +// +// +// Fast Ma Buffer ... +#property indicator_label1 "Ma" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrYellow +#property indicator_style1 STYLE_DOT +#property indicator_width1 2 + +// +// End Define Indicator Buffer Styles ... +// + +// +// Buffers ... +#define maBufferIndex 0 + +double maBuffer[]; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + if (maLength <= 0) { + return INIT_PARAMETERS_INCORRECT; + } + + // + // Start Set Index Buffers ... + // + // + // Ma ... + SetIndexBuffer(maBufferIndex, maBuffer); + SetIndexDrawBegin(maBufferIndex, maLength + 1); + // + // End Set Index Buffers ... + // + + // + return INIT_SUCCEEDED; +} + +// +// Calculating what we want ... +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, maLength); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate Ma ... + CalculateMa(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculating Ma ... +void CalculateMa( + const int &bar_index +) { + // + // Calculating Fast Ma ... + double ma = iMA( + _Symbol, + _Period, + maLength, + maShift, + maMethod, + maAppliedPrice, + bar_index + ); + + // + maBuffer[bar_index] = ma; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.momentum.mq4 b/xIndicators/x-saherelm.momentum.mq4 new file mode 100644 index 0000000..ea6e419 --- /dev/null +++ b/xIndicators/x-saherelm.momentum.mq4 @@ -0,0 +1,160 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center Momentum Oscillator +// --------------------------------------------- +// saherelm implementation of above oscillator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm Momentum Oscillator" +#property strict + +// +// START Inputs ... +// +input int length = 7; // Market Length +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +// +#property indicator_separate_window + +// +#property indicator_buffers 1 + +// +#property indicator_level1 0.0 +#property indicator_level2 100.0 +#property indicator_levelcolor clrSilver +#property indicator_levelstyle STYLE_DOT + +// +// MOMENTUM ... +#property indicator_width1 1 +#property indicator_color1 clrLightBlue +#property indicator_type1 DRAW_LINE +#property indicator_style1 STYLE_SOLID + +// +// Declare Buffers ... +#define momentumBufferIndex 0 + +double momentumBuffer[]; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + + // + // Validating Input Parameters ... + if (length < 0) { + return INIT_PARAMETERS_INCORRECT; + } + + // + IndicatorBuffers(1); + + // + SetIndexBuffer(momentumBufferIndex, momentumBuffer); + SetIndexLabel(momentumBufferIndex, "Momentum"); + SetIndexDrawBegin(momentumBufferIndex, length); + + // + // initialization done ... + return INIT_SUCCEEDED; +} + +// +// Do Calculation ... +int OnCalculate( + const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, length); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate Long TP ... + CalculateBuffers( + i, + close + ); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +void CalculateBuffers( + const int bar_index, + const double &close[] +) { + // + // Calculate Buffers ... + double momentum = close[bar_index] * 100 / close[bar_index + length]; + + // + momentumBuffer[bar_index] = momentum; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.osc.mq4 b/xIndicators/x-saherelm.osc.mq4 new file mode 100644 index 0000000..829f32c --- /dev/null +++ b/xIndicators/x-saherelm.osc.mq4 @@ -0,0 +1,257 @@ +///////////////////////////////////////////////////////////////// +// +// SaherElm IT Center OSC Indicator +// ------------------------------------------------------------- +// this indicator provides OSC ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +//////////////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm OSC Indicator" +#property strict + +// +// START Inputs ... +// +// +// FastOSC ... +// Short Cycle (Fast OSC) ... +input int fastOSCLength = 10; // FastOSC Length +input double fastOSCMultiplier = 1.0; // FastOSC Multiplier + +// +// SlowOSC ... +// Medium Cycle (Slow OSC) ... +input int slowOSCLength = 30; // SlowOSC Length +input double slowOSCMultiplier = 3.0; // SlowOSC Multiplier +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +// +// Includes our shared library ... +#include "../Libraries/x-saherelm.lib.mq4" + +// +#property indicator_separate_window + +// +// we have 2 buffer in this indicator ... +#property indicator_buffers 2 + +// +// also we have 2 line for draw on this indicator ... +#property indicator_plots 2 + +// +// Fast OSC ... +#property indicator_width1 1 +#property indicator_color1 clrAqua +#property indicator_type1 DRAW_LINE +#property indicator_style1 STYLE_SOLID + +// +// Slow OSC ... +#property indicator_width2 1 +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrFuchsia +#property indicator_style2 STYLE_SOLID + +// +// set color of horizontal levels ... +#property indicator_levelcolor clrGray + +// +// set style of horizontal levels ... +#property indicator_levelstyle STYLE_DOT + +// +// Declare Buffers ... +#define fastOSCBufferIndex 0 +#define slowOSCBufferIndex 1 + +// +double fastOSCBuffer[]; +double slowOSCBuffer[]; + +// +// Used Indicators List ... +string rmaIndicatorName = "x-saherelm.rma"; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + + // + // Validating Input Parameters ... + if ( + fastOSCLength < 0 || + slowOSCLength < 0 || + slowOSCLength <= fastOSCLength + ) { + return INIT_PARAMETERS_INCORRECT; + } + + // + // here we specify logging enabled or not ... + enableLogging = true; + + // + // this is a Tag which attached to our Logger ... + logTag = "XS_OSC"; + + // + // set descriptions of horizontal levels ... + SetLevelValue(0, 0.0); + IndicatorSetString(INDICATOR_LEVELTEXT,0,""); + + // + // set descriptions of horizontal levels ... + SetLevelValue(1, 0.5); + IndicatorSetString(INDICATOR_LEVELTEXT,1,""); + + // + // set descriptions of horizontal levels ... + SetLevelValue(2, 1); + IndicatorSetString(INDICATOR_LEVELTEXT,2,""); + + // + // Fast OSC Buffer ... + SetIndexBuffer(fastOSCBufferIndex, fastOSCBuffer); + SetIndexLabel(fastOSCBufferIndex, "Fast OSC"); + SetIndexDrawBegin(fastOSCBufferIndex, fastOSCLength - 1); + + // + // Slow OSC Buffer ... + SetIndexBuffer(slowOSCBufferIndex, slowOSCBuffer); + SetIndexLabel(slowOSCBufferIndex, "Slow OSC"); + SetIndexDrawBegin(slowOSCBufferIndex, slowOSCLength - 1); + + // + return(INIT_SUCCEEDED); +} + +// +// Do Calculation ... +int OnCalculate( + const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(fastOSCLength, slowOSCLength); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + CalculateOscillators(close, i); + } + + // + return rates_total; +} + +// +// De Initialization ... +void OnDeinit(const int reason) { +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +void CalculateOscillators( + const double &close[], + const int &bar_index +) { + // + // FastOSC ... + // Short Cycle Calculations ... + int scl = fastOSCLength / 2; + int scl2 = scl / 2; + double maScl = iCustom(_Symbol, _Period, rmaIndicatorName, scl, 0, bar_index); + double scmAtr = iATR(_Symbol, _Period, scl, bar_index); + double scmOff = fastOSCMultiplier * scmAtr; + double maScl2 = iCustom(_Symbol, _Period, rmaIndicatorName, scl2, 0, bar_index); + double sctParam = maScl2 != 0 ? maScl2 : close[bar_index + 1]; + double sct = sctParam + scmOff; + double scb = sctParam - scmOff; + + // + // SlowOSC ... + // Medium Cycle Calculations ... + int mcl = slowOSCLength / 2; + int mcl2 = mcl / 2; + double maMcl = iCustom(_Symbol, _Period, rmaIndicatorName, mcl, 0, bar_index); + double mcmAtr = iATR(_Symbol, _Period, mcl, bar_index); + double mcmOff = slowOSCMultiplier * mcmAtr; + double maMcl2 = iCustom(_Symbol, _Period, rmaIndicatorName, mcl2, 0, bar_index); + double mctParam = maMcl2 != 0 ? maMcl2 : close[bar_index + 1]; + double mct = mctParam + mcmOff; + double mcb = mctParam - mcmOff; + + // + double scMM = (sct + scb) / 2; + + // + double fastOCS = (close[bar_index] - mcb) / (mct - mcb); + fastOSCBuffer[bar_index] = fastOCS; + + // + double slowOCS = (scMM - mcb) / (mct - mcb); + slowOSCBuffer[bar_index] = slowOCS; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.psar.mq4 b/xIndicators/x-saherelm.psar.mq4 new file mode 100644 index 0000000..a263cdb --- /dev/null +++ b/xIndicators/x-saherelm.psar.mq4 @@ -0,0 +1,215 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center PSAR Oscillator +// --------------------------------------------- +// saherelm implementation of above oscillator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm PSAR Oscillator" +#property strict + +// +// START Inputs ... +// +input int shift = 0; // Shift +input double step = 0.02; // Step +input double maximum = 0.2; // Maximum +input bool drawAsDots = false; // Draw As Dots +// +input int priceSmoothing = 0; // Price Smoothing +input ENUM_APPLIED_PRICE priceLow = PRICE_CLOSE; // Psar low price +input ENUM_APPLIED_PRICE priceHigh = PRICE_OPEN; // Psar high price +input ENUM_MA_METHOD priceSmoothingMethod = MODE_SMA; // Price Smoothing Method +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_chart_window + +// +#property indicator_buffers 3 + +// +#property indicator_color1 clrLimeGreen +#property indicator_width1 1 +#property indicator_type1 DRAW_LINE +#property indicator_style1 STYLE_DOT + +// +#property indicator_color2 clrAqua +#property indicator_width2 1 +#property indicator_type2 DRAW_LINE +#property indicator_style2 STYLE_DOT + +// +#property indicator_color3 clrFuchsia +#property indicator_width3 1 +#property indicator_type3 DRAW_LINE +#property indicator_style3 STYLE_DOT + +// +// +// Declare Buffers ... +// +#define sarBufferIndex 0 +#define upBufferIndex 1 +#define downBufferIndex 2 + +// +double sarBuffer[]; +double upBuffer[]; +double downBuffer[]; + +// +// Includes Logger library ... +#include "../Libraries/x-saherelm.lib.mq4" +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + + // + SetIndexBuffer(sarBufferIndex, sarBuffer); + SetIndexLabel(sarBufferIndex, "SAR"); + + // + SetIndexBuffer(upBufferIndex, upBuffer); + SetIndexLabel(upBufferIndex, "Up"); + + // + SetIndexBuffer(downBufferIndex, downBuffer); + SetIndexLabel(downBufferIndex, "Down"); + + // + // here we specify logging enabled or not ... + enableLogging = true; + + // + // this is a Tag which attached to our Logger ... + logTag = "XS_PSAR"; + + // + // initialization done ... + return INIT_SUCCEEDED; +} + +// +// Do Calculation ... +int OnCalculate( + const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + // int maxLength = MathMax(0, length); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < 0) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate Long TP ... + CalculateBuffers(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +void CalculateBuffers( + const int bar_index +) { + // + // Calculate isarValue ... + double sarValue = iSAR( + NULL, + _Period, + step, + maximum, + bar_index + ); + + // + double pHigh = iMA( + NULL, + _Period, + priceSmoothing, + 0, + priceSmoothingMethod, + priceHigh, + bar_index + ); + + // + double pLow = iMA( + _Symbol, + _Period, + priceSmoothing, + 0, + priceSmoothingMethod, + priceLow, + bar_index + ); + + // + upBuffer[bar_index] = pHigh; + sarBuffer[bar_index] = sarValue; + downBuffer[bar_index] = pLow; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.rma.mq4 b/xIndicators/x-saherelm.rma.mq4 new file mode 100644 index 0000000..0fc70fd --- /dev/null +++ b/xIndicators/x-saherelm.rma.mq4 @@ -0,0 +1,141 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center RMA Indicator +// --------------------------------------------- +// saherelm implementation of above oscillator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm RMA Indicator" +#property strict + +// +// START Inputs ... +// +// +// Set the RMA Length ... +input int RMALength = 10; // Length +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_chart_window + +// +// we have 2 buffer in this indicator ... +#property indicator_buffers 1 + +// +// also we have 1 line for draw on this indicator ... +#property indicator_plots 1 + +// +// here we declare plot SlowOCS to system ... +#property indicator_label1 "RMA" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrFuchsia +#property indicator_style1 STYLE_SOLID +#property indicator_width1 1 + +// +// Declare Buffers ... +#define RMABufferIndex 0 + +// +double RMABuffer[]; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + SetIndexBuffer(RMABufferIndex, RMABuffer); + + // + // initialization done ... + return(INIT_SUCCEEDED); +} + +// +// Do Calculation ... +int OnCalculate( + const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + int maxLength = MathMax(0, RMALength); + + // + // wait to pass bars until we have rights ... + if (rates_total <= maxLength) { + // + // return not calculated ... + return 0; + } + + // + // find loop count for bars manipulation ... + int count = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // Print("Count: ", count, ", Bars: ", Bars); + + // + // this is the main loop of calculations, for each bar index ... + for (int i = count - 1; i >= 0; i--) { + // + // Start Calculation with Formula 1 ... + // + double shortSMA = iMA(_Symbol, _Period, RMALength, 0, MODE_SMA, PRICE_CLOSE, i); + double mediumSMA = iMA(_Symbol, _Period, RMALength * 2, 0, MODE_SMA, PRICE_CLOSE, i); + double longSMA = iMA(_Symbol, _Period, RMALength * 3, 0, MODE_SMA, PRICE_CLOSE, i); + + // + double rma1 = longSMA - mediumSMA + shortSMA; + rma1 = NormalizeDouble(rma1, _Digits); + // + // End Calculation with Formula 1 ... + // + + // + RMABuffer[i] = rma1; + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.rsi.mq4 b/xIndicators/x-saherelm.rsi.mq4 new file mode 100644 index 0000000..448f732 --- /dev/null +++ b/xIndicators/x-saherelm.rsi.mq4 @@ -0,0 +1,234 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center RSI Oscillator +// --------------------------------------------- +// saherelm implementation of above oscillator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm RSI Oscillator" +#property strict + +// +// START Inputs ... +// +input int rsiPeriod=14; // RSI Period +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +// +#property indicator_separate_window + +// +#property indicator_minimum 0 +#property indicator_maximum 100 + +// +#property indicator_buffers 1 +#property indicator_color1 DodgerBlue + +// +#property indicator_level1 30.0 +#property indicator_level2 50.0 +#property indicator_level3 70.0 +#property indicator_levelcolor clrSilver +#property indicator_levelstyle STYLE_DOT + +// +// Declare Buffers ... +#define rsiBufferIndex 0 +#define positiveBufferIndex 1 +#define negativeBufferIndex 2 + +double rsiBuffer[]; +double positiveBuffer[]; +double negativeBuffer[]; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + + // + string short_name; + + // + IndicatorBuffers(3); + + // + SetIndexBuffer(positiveBufferIndex, positiveBuffer); + SetIndexBuffer(negativeBufferIndex, negativeBuffer); + + // + SetIndexStyle(rsiBufferIndex, DRAW_LINE); + SetIndexBuffer(rsiBufferIndex, rsiBuffer); + + // + // name for DataWindow and indicator subwindow label + short_name="RSI("+string(rsiPeriod)+")"; + IndicatorShortName(short_name); + SetIndexLabel(rsiBufferIndex, short_name); + + // + // check for input + if (rsiPeriod < 2) { + // + Print("Incorrect value for input variable InpRSIPeriod = ", rsiPeriod); + + // + // Failed Initialization ... + return INIT_PARAMETERS_INCORRECT; + } + + // + // set where to start draw ... + SetIndexDrawBegin(0, rsiPeriod); + + // + // initialization done ... + return INIT_SUCCEEDED; +} + +// +// Do Calculation ... +int OnCalculate( + const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + int i,pos; + double diff; + + // + // Prevent from run calculations if there is no fulfilled conditions ... + if (Bars <= rsiPeriod || rsiPeriod < 2) { + // + // return nothing calculated result ... + return 0; + } + + // + // counting from 0 to rates_total, this is most important ... + ArraySetAsSeries(rsiBuffer, false); + ArraySetAsSeries(positiveBuffer, false); + ArraySetAsSeries(negativeBuffer, false); + + // + ArraySetAsSeries(close, false); + + // + // preliminary calculations ... + pos = prev_calculated - 1; + if (pos <= rsiPeriod) { + // + // first RSIPeriod values of the indicator are not calculated + rsiBuffer[0] = 0.0; + positiveBuffer[0] = 0.0; + negativeBuffer[0] = 0.0; + + // + double sump=0.0; + double sumn=0.0; + for (i = 1; i <= rsiPeriod; i++) { + // + rsiBuffer[i]=0.0; + positiveBuffer[i]=0.0; + negativeBuffer[i]=0.0; + + // + diff = close[i] - close[i - 1]; + if(diff > 0) { + sump += diff; + } else { + sumn -= diff; + } + } + + // + // calculate first visible value ... + positiveBuffer[rsiPeriod] = sump / rsiPeriod; + negativeBuffer[rsiPeriod] = sumn / rsiPeriod; + if (negativeBuffer[rsiPeriod] != 0.0) { + // + rsiBuffer[rsiPeriod] = 100.0 - ( + 100.0 / ( + 1.0 + positiveBuffer[rsiPeriod] / negativeBuffer[rsiPeriod] + ) + ); + } else { + // + if (positiveBuffer[rsiPeriod] != 0.0) { + rsiBuffer[rsiPeriod] = 100.0; + } else { + rsiBuffer[rsiPeriod] = 50.0; + } + } + + // + // prepare the position value for main calculation ... + pos = rsiPeriod + 1; + } + + // + // the main loop of calculations ... + for (i = pos; i < rates_total && !IsStopped(); i++) { + // + diff = close[i] - close[i-1]; + + // + positiveBuffer[i] = (positiveBuffer[i-1] * (rsiPeriod - 1) + (diff > 0.0 ? diff : 0.0)) / rsiPeriod; + negativeBuffer[i] = (negativeBuffer[i-1] * (rsiPeriod - 1) + (diff < 0.0 ? -diff : 0.0)) / rsiPeriod; + + // + if (negativeBuffer[i] != 0.0) { + rsiBuffer[i] = 100.0 - 100.0 / (1 + positiveBuffer[i] / negativeBuffer[i]); + } else { + // + if (positiveBuffer[i] != 0.0) { + rsiBuffer[i] = 100.0; + } else { + rsiBuffer[i] = 50.0; + } + } + } + + // + return(rates_total); +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.shpd.mq4 b/xIndicators/x-saherelm.shpd.mq4 new file mode 100644 index 0000000..7c02a84 --- /dev/null +++ b/xIndicators/x-saherelm.shpd.mq4 @@ -0,0 +1,402 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center XSHPD Indicator +// --------------------------------------------- +// saherelm implementation of above indicator ... +// this indicator uses two ma line: +// - fast ma; +// - slow ma; +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XSHPD Indicator" +#property strict + +// +// START Inputs ... +// +input int marketLength = 7; // Market Length ... +input double sharpDetectMultiplier = 70; // Sharp Detect Multiplier + +// +input bool drawLabels = true; // Draw Labels on Founded Sharps + +// +input string sharpBullishLabel = "SH_BULL"; // Sharp Bullish Label +input color sharpBullishColor = clrAqua; // Sharp Bullish color + +// +input string sharpBearishLabel = "SH_BEAR"; // Sharp Bearish Label +input color sharpBearishColor = clrFuchsia; // Sharp Bearish color +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_chart_window + +#property indicator_buffers 4 +#property indicator_plots 4 + +// +// Declare Buffers ... +#define marketHighestHighBufferIndex 0 +#define marketLowestLowBufferIndex 1 +#define sharpBullishBufferIndex 2 +#define sharpBearishBufferIndex 3 + +// +double marketHighestHighBuffer[]; +double marketLowestLowBuffer[]; +double sharpBullishBuffer[]; +double sharpBearishBuffer[]; + +// +#include "../Libraries/x-saherelm.lib.mq4" +#include "../Libraries/x-saherelm.draw.lib.mq4" +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + if ( + marketLength <= 0 + ) { + return INIT_PARAMETERS_INCORRECT; + } + + // + enableLogging = true; + + // + logTag = "X_SHPD"; + + // + // Highest High ... + SetIndexLabel(marketHighestHighBufferIndex, ""); + SetIndexBuffer(marketHighestHighBufferIndex, marketHighestHighBuffer); + SetIndexStyle( + marketHighestHighBufferIndex, + DRAW_LINE, // DRAW_NONE, + STYLE_DOT, + 1, // 0, + clrAqua // clrNONE + ); + + // + // Lowest Low ... + SetIndexLabel(marketLowestLowBufferIndex, ""); + SetIndexBuffer(marketLowestLowBufferIndex, marketLowestLowBuffer); + SetIndexStyle( + marketLowestLowBufferIndex, + DRAW_NONE, + STYLE_DOT, + 0, + clrNONE + ); + + // + // Sharp Bullish Buffer ... + SetIndexLabel(sharpBullishBufferIndex, ""); + SetIndexBuffer(sharpBullishBufferIndex, sharpBullishBuffer); + SetIndexStyle( + sharpBullishBufferIndex, + DRAW_NONE, + STYLE_DOT, + 0, + clrNONE + ); + + // + // Sharp Bearish Buffer ... + SetIndexLabel(sharpBearishBufferIndex, ""); + SetIndexBuffer(sharpBearishBufferIndex, sharpBearishBuffer); + SetIndexStyle( + sharpBearishBufferIndex, + DRAW_NONE, + STYLE_DOT, + 0, + clrNONE + ); + + // + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) { + // + RemoveDraws(logTag); +} + +// +// Calculating what we want ... +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, marketLength); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate Sharp ... + CalculateSharp(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculating Sharp ... +void CalculateSharp( + const int &bar_index +) { + // + int index = 0; + + // + double high = iHigh( + _Symbol, + _Period, + bar_index + 1 + ); + + // + double low = iLow( + _Symbol, + _Period, + bar_index + 1 + ); + + // + double open = iOpen( + _Symbol, + _Period, + bar_index + 1 + ); + + // + double close = iClose( + _Symbol, + _Period, + bar_index + 1 + ); + + // + marketHighestHighBuffer[bar_index] = GetMarketHighestHigh( + bar_index, + marketLength + ); + + // + marketLowestLowBuffer[bar_index] = GetMarketLowestLow( + bar_index, + marketLength + ); + + // + double maHHs[]; + ArrayResize( + maHHs, + marketLength + ); + + // + double maLLs[]; + ArrayResize( + maLLs, + marketLength + ); + + // + index = 0; + for (int i = bar_index; i < bar_index + marketLength; i++) { + // + maLLs[index] = marketLowestLowBuffer[i]; + maHHs[index] = marketHighestHighBuffer[i]; + + // + index++; + } + + // + int maxHighIdx = ArrayMaximum(maHHs); + double maxHigh = maHHs[maxHighIdx]; + + // + int minHighIdx = ArrayMinimum(maHHs); + double minHigh = maHHs[minHighIdx]; + + // + double highDiffRate = (maxHigh - minHigh) / 100; + + // + int maxLowIdx = ArrayMaximum(maLLs); + double maxLow = maLLs[maxLowIdx]; + + // + int minLowIdx = ArrayMinimum(maLLs); + double minLow = maLLs[minLowIdx]; + + // + double lowDiffRate = (maxLow - minLow) / 100; + + // + bool isSharpBullishDetected = + high == maxHigh + && low > minLow + && marketHighestHighBuffer[bar_index] == maxHigh + && maxHigh - minHigh > highDiffRate * sharpDetectMultiplier + ; + sharpBullishBuffer[bar_index] = isSharpBullishDetected ? 1 : 0; + + // + bool isSharpBearishDetected = + low == minLow + && high < maxHigh + && marketLowestLowBuffer[bar_index] == minLow + && maxLow - minLow > lowDiffRate * sharpDetectMultiplier + ; + sharpBearishBuffer[bar_index] = isSharpBearishDetected ? 1 : 0; + + // + if ( + drawLabels + && ( + isSharpBearishDetected + || isSharpBullishDetected + ) + ) { + // + datetime time = iTime( + _Symbol, + _Period, + bar_index + ); + + // + string lbl = StringConcatenate( + logTag, + isSharpBullishDetected ? "Bullish_" : "Bearish_", + bar_index + ); + + // + double price = + isSharpBullishDetected + ? + marketLowestLowBuffer[bar_index] - (10 * _Point) + : + marketHighestHighBuffer[bar_index] + (10 * _Point) + ; + + // + uchar arrowCode = + isSharpBullishDetected + ? + SYMBOL_ARROWUP + : + SYMBOL_ARROWDOWN + ; + + // + ENUM_ARROW_ANCHOR anchor = + isSharpBullishDetected + ? + ANCHOR_BOTTOM + : + ANCHOR_TOP + ; + + // + color clr = + isSharpBullishDetected + ? + sharpBullishColor + : + sharpBearishColor + ; + + // + string lblText = + isSharpBullishDetected + ? + sharpBullishLabel + : + sharpBearishLabel + ; + + // + DrawText( + 0, + lbl, + 0, + time, + price, + lblText, + "Tahoma", + 5, + clr + ); + } +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.sl.mq4 b/xIndicators/x-saherelm.sl.mq4 new file mode 100644 index 0000000..9ab0e00 --- /dev/null +++ b/xIndicators/x-saherelm.sl.mq4 @@ -0,0 +1,154 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center StopLoss Indicator +// --------------------------------------------- +// saherelm implementation of above indicator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm StopLoss Indicator" +#property strict + +// +// START Inputs ... +// +input int swingLoopback = 7; // Swing Loopback +input double thrshold = 10; // Threshold +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +// +// Specify this is an Chart Indicator ... +#property indicator_chart_window + +// +// we have 2 buffer in this indicator ... +#property indicator_buffers 2 + +// +// also we have 2 line for draw on this indicator ... +#property indicator_plots 2 + +// +// here we declare plot Long Stop Loss to system ... +#property indicator_label1 "Long Stop Loss" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrFuchsia +#property indicator_style1 STYLE_SOLID +#property indicator_width1 1 + +// +// here we declare plot Short Stop Loss to system ... +#property indicator_label2 "Short Stop Loss" +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrAqua +#property indicator_style2 STYLE_SOLID +#property indicator_width2 1 + +// +// here we declare indicator buffers ... +// +double longStopLossBuffer[]; +double shortStopLossBuffer[]; + +// +#define longStopLossIndex 0 +#define shortStopLossIndex 1 +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + SetIndexBuffer(longStopLossIndex, longStopLossBuffer); + SetIndexBuffer(shortStopLossIndex, shortStopLossBuffer); + + // + return(INIT_SUCCEEDED); +} + +// +// Calculating what we want ... +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + int limit; + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < swingLoopback) { + return 0; + } + + // + // found which candles calculated before ... + limit = rates_total - prev_calculated; + if (prev_calculated > 0) { + limit++; + } + + // + // Do Calculation ... + for (int i = limit - 1; i >= 0; i--) { + // + int lastMarketHighestIndex = iHighest(_Symbol, _Period, MODE_HIGH, swingLoopback, i); + double lastMarketHighest = high[lastMarketHighestIndex]; + + // + int lastMarketLowestIndex = iLowest(_Symbol, _Period, MODE_LOW, swingLoopback, i); + double lastMarketLowest = low[lastMarketLowestIndex]; + + // + double longStopLoss = lastMarketLowest - (thrshold * _Point); + longStopLoss = NormalizeDouble(longStopLoss, _Digits); + + // + double shortStopLoss = lastMarketHighest + (thrshold * _Point); + shortStopLoss = NormalizeDouble(shortStopLoss, _Digits); + + // + longStopLossBuffer[i] = longStopLoss; + shortStopLossBuffer[i] = shortStopLoss; + } + + // + // return value of prev_calculated for next call + return(rates_total); +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.tp.mq4 b/xIndicators/x-saherelm.tp.mq4 new file mode 100644 index 0000000..89bfeba --- /dev/null +++ b/xIndicators/x-saherelm.tp.mq4 @@ -0,0 +1,221 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center TP Indicator +// --------------------------------------------- +// saherelm implementation of above oscillator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm TP Indicator" +#property strict + +// +// START Inputs ... +// +// +// Set the R2R Length ... +input int swingLoopback = 7; // Swing Loopback +input double slThrshold = 10; // SL Threshold +input double riskToRewardRatio = 1.5; // Risk to Reward Ratio +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_chart_window + +// +// define indicator buffers ... +#property indicator_buffers 2 +#property indicator_plots 2 + +// +// here we declare plot to system ... +#property indicator_label1 "Long TP" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrLime +#property indicator_style1 STYLE_SOLID +#property indicator_width1 1 + +// +// here we declare plot to system ... +#property indicator_label2 "Short TP" +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrRed +#property indicator_style2 STYLE_SOLID +#property indicator_width2 1 + +// +// Declare Buffers ... +#define longTPBufferIndex 0 +#define shortTPBufferIndex 1 + +// +double longTPBuffer[]; +double shortTPBuffer[]; + +// +string slIndicatorName = "x-saherelm.sl"; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + SetIndexBuffer(longTPBufferIndex, longTPBuffer); + SetIndexDrawBegin(longTPBufferIndex, swingLoopback); + + // + SetIndexBuffer(shortTPBufferIndex, shortTPBuffer); + SetIndexDrawBegin(shortTPBufferIndex, swingLoopback); + + // + // initialization done ... + return(INIT_SUCCEEDED); +} + +// +// Do Calculation ... +int OnCalculate( + const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, swingLoopback); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate Long TP ... + CalculateLongTP( + open, + i + ); + + // + // Calculate Short TP ... + CalculateShortTP( + open, + i + ); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculate Long TPs based on SL and Open Price ... +void CalculateLongTP( + const double &open[], + const int &bar_index +) { + // + // read long sl ... + double longSL = iCustom( + _Symbol, + _Period, + slIndicatorName, + swingLoopback, + slThrshold, + 0, // Long SL Buffer Index ... + bar_index + ); + + // + double longRisk = open[bar_index] - longSL; + double longReward = longRisk * riskToRewardRatio; + + // + double longTP = open[bar_index] + longReward; + longTP = NormalizeDouble(longTP, _Digits); + + // + longTPBuffer[bar_index] = longTP; +} + +// +// Calculate Short TPs based on SL and Open Price ... +void CalculateShortTP( + const double &open[], + const int &bar_index +) { + // + // read short sl ... + double shortSL = iCustom( + _Symbol, + _Period, + slIndicatorName, + swingLoopback, + slThrshold, + 1, // Short SL Buffer Index ... + bar_index + ); + + // + double shortRisk = shortSL - open[bar_index]; + double shortReward = shortRisk * riskToRewardRatio; + + // + double shortTP = open[bar_index] - shortReward; + shortTP = NormalizeDouble(shortTP, _Digits); + + // + shortTPBuffer[bar_index] = shortTP; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.trend.mq4 b/xIndicators/x-saherelm.trend.mq4 new file mode 100644 index 0000000..17873e7 --- /dev/null +++ b/xIndicators/x-saherelm.trend.mq4 @@ -0,0 +1,250 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center ADX Oscillator +// --------------------------------------------- +// saherelm implementation of above oscillator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm ADX Oscillator" +#property strict + +// +// START Inputs ... +// +input int length = 7; // Averaging Length +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +// +#property indicator_chart_window + +// +// #property indicator_buffers 3 + +// +// Declare Buffers ... +// +datetime startTime; +double lHigh; +double lLow; + +// +datetime highTimes[]; + +// +datetime lowTimes[]; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + + // + // Validating Input Parameters ... + if (length < 0) { + return INIT_PARAMETERS_INCORRECT; + } + + // + // initialization done ... + return INIT_SUCCEEDED; +} + +// +// Do Calculation ... +int OnCalculate( + const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, length); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate Long TP ... + CalculateBuffers(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +void CalculateBuffers( + const int bar_index +) { + // + // Calculate Buffers ... + // + int startBarIndex = iBarShift( + _Symbol, + _Period, + startTime + ); + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + if (startTime == 0) { + // + startTime = barTime; + return; + } + + // + if ( + startTime > 0 + && startBarIndex - bar_index == length + ) { + // + int hhIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + length, + bar_index + ); + datetime hhTime = iTime( + _Symbol, + _Period, + hhIdx + ); + double hh = iHigh( + _Symbol, + _Period, + hhIdx + ); + + // + int hhSize = ArraySize(highTimes); + datetime tempTimes[]; + ArrayResize( + tempTimes, + hhSize + ); + ArrayCopy( + tempTimes, + highTimes + ); + ArrayResize( + highTimes, + hhSize + 1 + ); + highTimes[0] = hhTime; + ArrayCopy( + highTimes, + tempTimes, + 1 + ); + + // + int llIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + length, + bar_index + ); + datetime llTime = iTime( + _Symbol, + _Period, + llIdx + ); + double ll = iLow( + _Symbol, + _Period, + llIdx + ); + + // + int llSize = ArraySize(lowTimes); + ArrayFree(tempTimes); + ArrayResize( + tempTimes, + llSize + ); + ArrayCopy( + tempTimes, + lowTimes + ); + ArrayResize( + lowTimes, + llSize + 1 + ); + lowTimes[0] = llTime; + ArrayCopy( + lowTimes, + tempTimes, + 1 + ); + + // + startTime = 0; + ArrayFree(tempTimes); + } +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.volume.mq4 b/xIndicators/x-saherelm.volume.mq4 new file mode 100644 index 0000000..eb4aa73 --- /dev/null +++ b/xIndicators/x-saherelm.volume.mq4 @@ -0,0 +1,270 @@ +///////////////////////////////////////////////////////////////// +// +// SaherElm IT Center Volume Indicator +// ------------------------------------------------------------- +// this indicator provides Volume ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +//////////////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm Volume Indicator" +#property strict + +// +// START Inputs ... +// +input int length = 11; // Length +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +// +// Includes our shared library ... +#include "../Libraries/x-saherelm.lib.mq4" + +// +#property indicator_separate_window + +// +// we have 2 buffer in this indicator ... +#property indicator_buffers 3 + +// +// also we have 2 line for draw on this indicator ... +#property indicator_plots 3 + +// +// Buy Volume ... +#property indicator_width1 1 +#property indicator_color1 clrGreen +#property indicator_type1 DRAW_HISTOGRAM +#property indicator_style1 STYLE_DOT + +// +// Sell Volume ... +#property indicator_width2 1 +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrRed +#property indicator_style2 STYLE_DOT + +// +// Diff ... +#property indicator_width3 1 +#property indicator_type3 DRAW_HISTOGRAM +#property indicator_color3 clrYellow +#property indicator_style3 STYLE_SOLID + +// +//#property indicator_minimum 0 +//#property indicator_maximum 1 + +// +// set color of horizontal levels ... +#property indicator_levelcolor clrGray + +// +// set style of horizontal levels ... +#property indicator_levelstyle STYLE_DOT + +// +// Declare Buffers ... +#define buyVolumeBufferIndex 0 +#define sellVolumeBufferIndex 1 +#define diffBufferIndex 2 + +// +double buyVolumeBuffer[]; +double sellVolumeBuffer[]; +double diffBuffer[]; + +// +// here we specify logging enabled or not ... +bool enableLogging = true; + +// +// this is a Tag which attached to our Logger ... +string logTag = "XS_VOLUME"; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + + // + // Validating Input Parameters ... + if (length < 0) { + return INIT_PARAMETERS_INCORRECT; + } + + // + // set descriptions of horizontal levels ... + SetLevelValue(0, 0.0); + IndicatorSetString(INDICATOR_LEVELTEXT,0,""); + + // + // Buy Volume Buffer ... + SetIndexBuffer(buyVolumeBufferIndex, buyVolumeBuffer); + SetIndexLabel(buyVolumeBufferIndex, "Buy Volume"); + + // + // Sell Volume Buffer ... + SetIndexBuffer(sellVolumeBufferIndex, sellVolumeBuffer); + SetIndexLabel(sellVolumeBufferIndex, "Sell Volume"); + + // + // Diff Buffer ... + SetIndexBuffer(diffBufferIndex, diffBuffer); + SetIndexLabel(diffBufferIndex, "Diff"); + + // + return(INIT_SUCCEEDED); +} + +// +// Do Calculation ... +int OnCalculate( + const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, length); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + CalculateBuffers( + open, + close, + high, + low, + i + ); + } + + // + return rates_total; +} + +// +// De Initialization ... +void OnDeinit(const int reason) { +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +void CalculateBuffers( + const double &open[], + const double &close[], + const double &high[], + const double &low[], + const int &bar_index +) { + // + long volume = iVolume( + _Symbol, + _Period, + bar_index + ); + + // + double buyVolume = 0.0; + double sellVolume = 0.0; + + // + // Up ... + if (close[bar_index] > open[bar_index]) { + // + double cuenta = (high[bar_index] - low[bar_index]) * 10000; + double cuenta1 = volume - cuenta; + + // + buyVolume = ((volume - cuenta) / 2) + cuenta; + + // + buyVolumeBuffer[bar_index] = buyVolume; + sellVolumeBuffer[bar_index] = volume - buyVolume; + } else + // + // Down ... + if (close[bar_index] < open[bar_index]) { + // + double cuenta1 = (high[bar_index] - low[bar_index]) * 10000; + double cuenta = volume - cuenta1; + + // + sellVolume = ((volume - cuenta1) / 2) + cuenta1; + + // + sellVolumeBuffer[bar_index] = sellVolume; + buyVolumeBuffer[bar_index] = volume - sellVolume; + } else + // + // Neutral ... + if (close[bar_index] == open[bar_index]) { + // + double cuenta = (volume / 2) * 1.0; + + // + sellVolumeBuffer[bar_index] = cuenta; + buyVolumeBuffer[bar_index] = volume - cuenta; + } + + // + diffBuffer[bar_index] = MathAbs(buyVolumeBuffer[bar_index]) - MathAbs(sellVolumeBuffer[bar_index]); +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.x.hl.mq4 b/xIndicators/x-saherelm.x.hl.mq4 new file mode 100644 index 0000000..f08a975 --- /dev/null +++ b/xIndicators/x-saherelm.x.hl.mq4 @@ -0,0 +1,412 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center X Indicator +// --------------------------------------------- +// saherelm implementation of above indicator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm X Indicator" +#property strict + +// +// START Inputs ... +// +// +input int marketLength = 7; // Market Length + +// +input int shortCycleMultiplier = 2; // Market Short Cycle Multiplier +input int mediumCycleMultiplier = 6; // Market Medium Cycle Multiplier +input int longCycleMultiplier = 36; // Market Medium Cycle Multiplier + +// +input ENUM_MA_METHOD maMethod = MODE_SMA; // Ma Method +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_chart_window + +// +#property indicator_buffers 6 + +// +#property indicator_plots 6 + +// +// Start Define Indicator Buffer Styles ... +// +// +// Short Cycle Highest High Buffer ... +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrGreen +#property indicator_style1 STYLE_DOT +#property indicator_width1 1 + +// +// Short Cycle Lowest Low Buffer ... +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrRed +#property indicator_style2 STYLE_DOT +#property indicator_width2 1 + +// +// Medium Cycle Highest High Buffer ... +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrAqua +#property indicator_style3 STYLE_DOT +#property indicator_width3 1 + +// +// Medium Cycle Lowest Low Buffer ... +#property indicator_type4 DRAW_LINE +#property indicator_color4 clrFuchsia +#property indicator_style4 STYLE_DOT +#property indicator_width4 1 + +// +// Long Cycle Highest High Buffer ... +#property indicator_type5 DRAW_LINE +#property indicator_color5 C'62,82,6' +#property indicator_style5 STYLE_DOT +#property indicator_width5 1 + +// +// Long Cycle Lowest Low Buffer ... +#property indicator_type6 DRAW_LINE +#property indicator_color6 C'255,81,0' +#property indicator_style6 STYLE_DOT +#property indicator_width6 1 +// +// End Define Indicator Buffer Styles ... +// + +// +// Buffers ... +// +// HH Buffers ... +#define scHHBufferIndex 0 +#define scLLBufferIndex 1 +#define mcHHBufferIndex 2 +#define mcLLBufferIndex 3 +#define lcHHBufferIndex 4 +#define lcLLBufferIndex 5 + +double scHHBuffer[]; +double scLLBuffer[]; +double mcHHBuffer[]; +double mcLLBuffer[]; +double lcHHBuffer[]; +double lcLLBuffer[]; + +// +// Variables ... +int shortCycleLength; +int mediumCycleLength; +int longCycleLength; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + if ( + marketLength <= 0 || + shortCycleMultiplier <= 0 || + mediumCycleMultiplier <= 0 || + shortCycleMultiplier > mediumCycleMultiplier + ) { + return INIT_PARAMETERS_INCORRECT; + } + + // + // Start Set Index Buffers ... + // + shortCycleLength = shortCycleMultiplier * marketLength; + mediumCycleLength = mediumCycleMultiplier * marketLength; + longCycleLength = longCycleMultiplier * marketLength; + + // + // Highest High and Lowest Low Buffers ... + // + // Short Cycle Highest High ... + string scHHLbl = StringConcatenate( + "SC HH(", shortCycleLength, ")" + ); + SetIndexBuffer(scHHBufferIndex, scHHBuffer); + SetIndexLabel(scHHBufferIndex, scHHLbl); + + // + // Short Cycle Lowest Low ... + string scLLLbl = StringConcatenate( + "SC LL(", shortCycleLength, ")" + ); + SetIndexBuffer(scLLBufferIndex, scLLBuffer); + SetIndexLabel(scLLBufferIndex, scLLLbl); + + // + // Medium Cycle Highest High ... + string mcHHLbl = StringConcatenate( + "MC HH(", mediumCycleLength, ")" + ); + SetIndexBuffer(mcHHBufferIndex, mcHHBuffer); + SetIndexLabel(mcHHBufferIndex, mcHHLbl); + + // + // Medium Cycle Lowest Low ... + string mcLLLbl = StringConcatenate( + "MC LL(", mediumCycleLength, ")" + ); + SetIndexBuffer(mcLLBufferIndex, mcLLBuffer); + SetIndexLabel(mcLLBufferIndex, mcLLLbl); + + // + // Long Cycle Highest High ... + string lcHHLbl = StringConcatenate( + "LC HH(", longCycleLength, ")" + ); + SetIndexBuffer(lcHHBufferIndex, lcHHBuffer); + SetIndexLabel(lcHHBufferIndex, lcHHLbl); + + // + // Long Cycle Lowest Low ... + string lcLLLbl = StringConcatenate( + "LC LL(", longCycleLength, ")" + ); + SetIndexBuffer(lcLLBufferIndex, lcLLBuffer); + SetIndexLabel(lcLLBufferIndex, lcLLLbl); + // + // End Set Index Buffers ... + // + + // + return INIT_SUCCEEDED; +} + +// +// Calculating what we want ... +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, marketLength); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculat Ma's ... + // + CalculateShortCycle(i); + + // + CalculateMediumCycle(i); + + // + CalculateLongCycle(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculating Short Cycle ... +void CalculateShortCycle( + const int &bar_index +) { + // + // Short Cycle Highest High ... + // + int scHHIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + shortCycleLength, + bar_index + ); + + // + double scHH = iHigh( + _Symbol, + _Period, + scHHIdx + ); + + // + scHHBuffer[bar_index] = scHH; + + // + // Short Cycle Lowest Low ... + // + int scLLIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + shortCycleLength, + bar_index + ); + + // + double scLL = iLow( + _Symbol, + _Period, + scLLIdx + ); + + // + scLLBuffer[bar_index] = scLL; +} + +// +// Calculating Medium Cycle ... +void CalculateMediumCycle( + const int &bar_index +) { + // + // Medium Cycle Highest High ... + // + int mcHHIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + mediumCycleLength, + bar_index + ); + + // + double mcHH = iHigh( + _Symbol, + _Period, + mcHHIdx + ); + + // + mcHHBuffer[bar_index] = mcHH; + + // + // Medium Cycle Lowest Low ... + // + int mcLLIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + mediumCycleLength, + bar_index + ); + + // + double mcLL = iLow( + _Symbol, + _Period, + mcLLIdx + ); + + // + mcLLBuffer[bar_index] = mcLL; +} + +// +// Calculating Long Cycle ... +void CalculateLongCycle( + const int &bar_index +) { + // + // Long Cycle Highest High ... + // + int lcHHIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + longCycleLength, + bar_index + ); + + // + double lcHH = iHigh( + _Symbol, + _Period, + lcHHIdx + ); + + // + lcHHBuffer[bar_index] = lcHH; + + // + // Long Cycle Lowest Low ... + // + int lcLLIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + longCycleLength, + bar_index + ); + + // + double lcLL = iLow( + _Symbol, + _Period, + lcLLIdx + ); + + // + lcLLBuffer[bar_index] = lcLL; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.x.trend.power.mq4 b/xIndicators/x-saherelm.x.trend.power.mq4 new file mode 100644 index 0000000..dc70f81 --- /dev/null +++ b/xIndicators/x-saherelm.x.trend.power.mq4 @@ -0,0 +1,265 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center Trend Power Indicator +// --------------------------------------------- +// saherelm implementation of above indicator ... +// this indicator uses two ma line: +// - fast ma; +// - slow ma; +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm MA Indicator" +#property strict + +// +// START Inputs ... +// +input int marketLength = 7; // Market Length +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_separate_window + +// +#property indicator_plots 3 +#property indicator_buffers 3 +#property indicator_minimum 0 +#property indicator_maximum 100 + +// +#property indicator_levelcolor clrGray +#property indicator_levelstyle STYLE_DOT + +// +// Start Define Indicator Buffer Styles ... +// +#property indicator_type1 DRAW_HISTOGRAM +#property indicator_color1 clrLime +#property indicator_style1 STYLE_DOT +#property indicator_width1 1 + +// +#property indicator_type2 DRAW_HISTOGRAM +#property indicator_color2 clrRed +#property indicator_style2 STYLE_DOT +#property indicator_width2 1 + +// +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrYellow +#property indicator_style3 STYLE_DOT +#property indicator_width3 1 +// +// End Define Indicator Buffer Styles ... +// + +// +// Buffers ... +#define powerUpBufferIndex 0 +#define powerDownBufferIndex 1 +#define signalBufferIndex 2 +#define diBufferIndex 3 + +double powerUpBuffer[]; +double powerDownBuffer[]; +double signalBuffer[]; +double diBuffer[]; + +// +#include "../Libraries/x-saherelm.lib.mq4" +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + if (marketLength <= 0) { + return INIT_PARAMETERS_INCORRECT; + } + + // + SetLevelValue(0, 0.0); + IndicatorSetString(INDICATOR_LEVELTEXT,0,""); + + // + SetLevelValue(1, 50); + IndicatorSetString(INDICATOR_LEVELTEXT,1,""); + + // + SetLevelValue(2, 100); + IndicatorSetString(INDICATOR_LEVELTEXT,2,""); + + // + string pUpLbl = StringConcatenate( + "P Up (", marketLength, ")" + ); + SetIndexLabel(powerUpBufferIndex, pUpLbl); + SetIndexBuffer(powerUpBufferIndex, powerUpBuffer); + SetIndexDrawBegin(powerUpBufferIndex, marketLength + 1); + + // + string pDownLbl = StringConcatenate( + "P Down (", marketLength, ")" + ); + SetIndexLabel(powerDownBufferIndex, pDownLbl); + SetIndexBuffer(powerDownBufferIndex, powerDownBuffer); + SetIndexDrawBegin(powerDownBufferIndex, marketLength + 1); + + // + string pSignalLbl = StringConcatenate( + "P Signal (", marketLength, ")" + ); + SetIndexLabel(signalBufferIndex, pSignalLbl); + SetIndexBuffer(signalBufferIndex, signalBuffer); + SetIndexDrawBegin(signalBufferIndex, marketLength + 1); + + // + // here we specify logging enabled or not ... + enableLogging = true; + + // + // this is a Tag which attached to our Logger ... + logTag = "X_TPW_OSC"; + + // + return INIT_SUCCEEDED; +} + +// +// Calculating what we want ... +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, marketLength); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate Buffers ... + CalculateBuffers(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculating Ma ... +void CalculateBuffers( + const int &bar_index +) { + // + double powerUp = 0; + double powerDown = 0; + + // + int dailyCount = GetDailyCandleCount(); + double dailyHH = GetMarketHighestHigh( + bar_index, + dailyCount + ); + double dailyLL = GetMarketLowestLow( + bar_index, + dailyCount + ); + double dailyDiff = dailyHH - dailyLL; + double rate = dailyDiff / 100; + + // + for (int i = bar_index; i < bar_index + marketLength; i++) { + // + XOHCL c = GetCandleModel(i); + + // + double cRange = + MathAbs(c.open - c.close) + // MathAbs(c.high - c.low) + ; + bool isBullish = c.open < c.close; + + // + if (isBullish) { + powerUp += cRange; + } else { + powerDown += cRange; + } + } + + // + powerUp = powerUp / rate; + powerDown = powerDown / rate; + + // + double ema = GetMA( + bar_index, + marketLength, + 0, + MODE_EMA, + PRICE_WEIGHTED + ); + + // + double signal = (ema / 100) * rate; + double signalAddition = MathMin(powerUp, powerDown); + + // + powerUpBuffer[bar_index] = powerUp; + powerDownBuffer[bar_index] = powerDown; + signalBuffer[bar_index] = signal + signalAddition; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.x.trend.power.v2.mq4 b/xIndicators/x-saherelm.x.trend.power.v2.mq4 new file mode 100644 index 0000000..de50c39 --- /dev/null +++ b/xIndicators/x-saherelm.x.trend.power.v2.mq4 @@ -0,0 +1,291 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center Trend Power Indicator +// --------------------------------------------- +// saherelm implementation of above indicator ... +// this indicator uses two ma line: +// - fast ma; +// - slow ma; +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm MA Indicator" +#property strict + +// +// START Inputs ... +// +input int marketLength = 7; // Market Length +input int shift = 0; // Shift +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_separate_window + +// +#property indicator_plots 3 +#property indicator_buffers 3 +// #property indicator_minimum 0 +// #property indicator_maximum 200 + +// +#property indicator_levelcolor clrGray +#property indicator_levelstyle STYLE_DOT + +// +// Start Define Indicator Buffer Styles ... +// +#property indicator_type1 DRAW_HISTOGRAM +#property indicator_color1 clrLime +#property indicator_style1 STYLE_DOT +#property indicator_width1 1 + +// +#property indicator_type2 DRAW_HISTOGRAM +#property indicator_color2 clrRed +#property indicator_style2 STYLE_DOT +#property indicator_width2 1 + +// +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrYellow +#property indicator_style3 STYLE_DOT +#property indicator_width3 1 + +// +// #property indicator_type4 DRAW_LINE +// #property indicator_color4 clrAqua +// #property indicator_style4 STYLE_DASHDOT +// #property indicator_width4 1 +// +// End Define Indicator Buffer Styles ... +// + +// +// Buffers ... +#define powerUpBufferIndex 0 +#define powerDownBufferIndex 1 +#define signalBufferIndex 2 +// #define diBufferIndex 3 + +double powerUpBuffer[]; +double powerDownBuffer[]; +double signalBuffer[]; +// double diBuffer[]; + +// +#include "../Libraries/x-saherelm.lib.mq4" +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + if (marketLength <= 0) { + return INIT_PARAMETERS_INCORRECT; + } + + // // + // SetLevelValue(0, 0.0); + // IndicatorSetString(INDICATOR_LEVELTEXT,0,""); + + // // + // SetLevelValue(1, 50); + // IndicatorSetString(INDICATOR_LEVELTEXT,1,""); + + // // + // SetLevelValue(2, 100); + // IndicatorSetString(INDICATOR_LEVELTEXT,2,""); + + // + string pUpLbl = StringConcatenate( + "P Up (", marketLength, ")" + ); + SetIndexLabel(powerUpBufferIndex, pUpLbl); + SetIndexBuffer(powerUpBufferIndex, powerUpBuffer); + SetIndexDrawBegin(powerUpBufferIndex, marketLength + 1); + + // + string pDownLbl = StringConcatenate( + "P Down (", marketLength, ")" + ); + SetIndexLabel(powerDownBufferIndex, pDownLbl); + SetIndexBuffer(powerDownBufferIndex, powerDownBuffer); + SetIndexDrawBegin(powerDownBufferIndex, marketLength + 1); + + // + string pSignalLbl = StringConcatenate( + "P Signal (", marketLength, ")" + ); + SetIndexLabel(signalBufferIndex, pSignalLbl); + SetIndexBuffer(signalBufferIndex, signalBuffer); + SetIndexDrawBegin(signalBufferIndex, marketLength + 1); + + // // + // string pDiLbl = StringConcatenate( + // "P DI (", marketLength, ")" + // ); + // SetIndexLabel(diBufferIndex, pDiLbl); + // SetIndexBuffer(diBufferIndex, diBuffer); + // SetIndexDrawBegin(diBufferIndex, marketLength + 1); + + // + // here we specify logging enabled or not ... + enableLogging = true; + + // + // this is a Tag which attached to our Logger ... + logTag = "X_TPW_OSC"; + + // + return INIT_SUCCEEDED; +} + +// +// Calculating what we want ... +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, marketLength); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate Buffers ... + CalculateBuffers(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculating Ma ... +void CalculateBuffers( + const int &bar_index +) { + // + double powerUp = 0; + double powerDown = 0; + + // + int dailyCount = GetDailyCandleCount(); + double dailyHH = GetMarketHighestHigh( + bar_index, + dailyCount + ); + double dailyLL = GetMarketLowestLow( + bar_index, + dailyCount + ); + double dailyDiff = dailyHH - dailyLL; + double rate = dailyDiff / 100; + + // + for (int i = bar_index + shift; i < bar_index + marketLength + shift; i++) { + // + XOHCL c = GetCandleModel(i); + + // + double cRange = + MathAbs(c.open - c.close) + // MathAbs(c.high - c.low) + ; + bool isBullish = c.open < c.close; + + // + if (isBullish) { + powerUp += cRange; + } else { + powerDown += cRange; + } + } + + // + powerUp = powerUp / rate; + powerDown = powerDown / rate; + + + // + double ema = GetMA( + bar_index, + (marketLength * 2), + 0, + MODE_EMA, + PRICE_WEIGHTED + ); + + // + powerUpBuffer[bar_index] = powerUp; + + // + powerDownBuffer[bar_index] = -1 * powerDown; + + // + double emaRate = MathAbs(powerUp - MathAbs(powerDown)) / 100; + double signal = (ema / 100) * emaRate; + + // + bool isPowerUp = powerUp > MathAbs(powerDown); + double signalAddition = isPowerUp ? (-1 * powerDown) : powerUp; + signalBuffer[bar_index] = signal + signalAddition; + // + // double pDiff = powerUpBuffer[bar_index] - powerDownBuffer[bar_index]; + // double cDiValue = pDiff + signalBuffer[bar_index]; + // diBuffer[bar_index] = cDiValue; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.x.xma.mq4 b/xIndicators/x-saherelm.x.xma.mq4 new file mode 100644 index 0000000..68b4f32 --- /dev/null +++ b/xIndicators/x-saherelm.x.xma.mq4 @@ -0,0 +1,355 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center X Indicator +// --------------------------------------------- +// saherelm implementation of above indicator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm X Indicator" +#property strict + +// +// START Inputs ... +// +// +input int marketLength = 7; // Market Length + +// +input int shortCycleMultiplier = 2; // Market Short Cycle Multiplier +input int mediumCycleMultiplier = 6; // Market Medium Cycle Multiplier +input int longCycleMultiplier = 36; // Market Medium Cycle Multiplier + +// +input ENUM_MA_METHOD maMethod = MODE_SMA; // Ma Method +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_chart_window + +// +#property indicator_buffers 6 + +// +#property indicator_plots 6 + +// +// Start Define Indicator Buffer Styles ... +// +// +// Short Cycle Fast Buffer ... +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrGreen +#property indicator_style1 STYLE_DOT +#property indicator_width1 1 + +// +// Short Cycle Slow Buffer ... +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrRed +#property indicator_style2 STYLE_DOT +#property indicator_width2 1 + +// +// Medium Cycle Fast Buffer ... +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrAqua +#property indicator_style3 STYLE_DOT +#property indicator_width3 1 + +// +// Medium Cycle Slow Buffer ... +#property indicator_type4 DRAW_LINE +#property indicator_color4 clrFuchsia +#property indicator_style4 STYLE_DOT +#property indicator_width4 1 + +// +// Long Cycle Fast Buffer ... +#property indicator_type5 DRAW_LINE +#property indicator_color5 C'62,82,6' +#property indicator_style5 STYLE_DOT +#property indicator_width5 1 + +// +// Long Cycle Slow Buffer ... +#property indicator_type6 DRAW_LINE +#property indicator_color6 C'255,81,0' +#property indicator_style6 STYLE_DOT +#property indicator_width6 1 +// +// End Define Indicator Buffer Styles ... +// + +// +// Buffers ... +// +// Ma Buffers ... +#define scFastBufferIndex 0 +#define scSlowBufferIndex 1 +#define mcFastBufferIndex 2 +#define mcSlowBufferIndex 3 +#define lcFastBufferIndex 4 +#define lcSlowBufferIndex 5 + +double scFastBuffer[]; +double scSlowBuffer[]; +double mcFastBuffer[]; +double mcSlowBuffer[]; +double lcFastBuffer[]; +double lcSlowBuffer[]; + +// +// Variables ... +int shortCycleLength; +int mediumCycleLength; +int longCycleLength; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + if ( + marketLength <= 0 || + shortCycleMultiplier <= 0 || + mediumCycleMultiplier <= 0 || + shortCycleMultiplier > mediumCycleMultiplier + ) { + return INIT_PARAMETERS_INCORRECT; + } + + // + // Start Set Index Buffers ... + // + shortCycleLength = shortCycleMultiplier * marketLength; + mediumCycleLength = mediumCycleMultiplier * marketLength; + longCycleLength = longCycleMultiplier * marketLength; + + // + // Ma Buffers ... + // + // Short Cycle ... + string scFLbl = StringConcatenate( + "SC F(", shortCycleLength, ")" + ); + SetIndexBuffer(scFastBufferIndex, scFastBuffer); + SetIndexLabel(scFastBufferIndex, scFLbl); + + // + string scSLbl = StringConcatenate( + "SC S(", shortCycleLength, ")" + ); + SetIndexBuffer(scSlowBufferIndex, scSlowBuffer); + SetIndexLabel(scSlowBufferIndex, scSLbl); + + // + // Medium Cycle ... + string mcFLbl = StringConcatenate( + "MC F(", mediumCycleLength, ")" + ); + SetIndexBuffer(mcFastBufferIndex, mcFastBuffer); + SetIndexLabel(mcFastBufferIndex, mcFLbl); + + // + string mcSLbl = StringConcatenate( + "MC S(", mediumCycleLength, ")" + ); + SetIndexBuffer(mcSlowBufferIndex, mcSlowBuffer); + SetIndexLabel(mcSlowBufferIndex, mcSLbl); + + // + // Long Cycle ... + string lcFLbl = StringConcatenate( + "LC F(", longCycleLength, ")" + ); + SetIndexBuffer(lcFastBufferIndex, lcFastBuffer); + SetIndexLabel(lcFastBufferIndex, lcFLbl); + + // + string lcSLbl = StringConcatenate( + "LC S(", longCycleLength, ")" + ); + SetIndexBuffer(lcSlowBufferIndex, lcSlowBuffer); + SetIndexLabel(lcSlowBufferIndex, lcSLbl); + // + // End Set Index Buffers ... + // + + // + return INIT_SUCCEEDED; +} + +// +// Calculating what we want ... +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, marketLength); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculat Ma's ... + // + CalculateShortCycle(i); + + // + CalculateMediumCycle(i); + + // + CalculateLongCycle(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculating Short Cycle ... +void CalculateShortCycle( + const int &bar_index +) { + // + double scFast = iMA( + _Symbol, + _Period, + shortCycleLength, + 0, + maMethod, + PRICE_OPEN, + bar_index + ); + scFastBuffer[bar_index] = scFast; + + // + double scSlow = iMA( + _Symbol, + _Period, + shortCycleLength, + 0, + maMethod, + PRICE_CLOSE, + bar_index + ); + scSlowBuffer[bar_index] = scSlow; +} + +// +// Calculating Medium Cycle ... +void CalculateMediumCycle( + const int &bar_index +) { + // + double mcFast = iMA( + _Symbol, + _Period, + mediumCycleLength, + 0, + maMethod, + PRICE_OPEN, + bar_index + ); + mcFastBuffer[bar_index] = mcFast; + + // + double mcSlow = iMA( + _Symbol, + _Period, + mediumCycleLength, + 0, + maMethod, + PRICE_CLOSE, + bar_index + ); + mcSlowBuffer[bar_index] = mcSlow; +} + +// +// Calculating Long Cycle ... +void CalculateLongCycle( + const int &bar_index +) { + // + double lcFast = iMA( + _Symbol, + _Period, + longCycleLength, + 0, + maMethod, + PRICE_OPEN, + bar_index + ); + lcFastBuffer[bar_index] = lcFast; + + // + double lcSlow = iMA( + _Symbol, + _Period, + longCycleLength, + 0, + maMethod, + PRICE_CLOSE, + bar_index + ); + lcSlowBuffer[bar_index] = lcSlow; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.xbnd.mq4 b/xIndicators/x-saherelm.xbnd.mq4 new file mode 100644 index 0000000..5cea8fd --- /dev/null +++ b/xIndicators/x-saherelm.xbnd.mq4 @@ -0,0 +1,425 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center XBand Indicator +// --------------------------------------------- +// saherelm implementation of xBand Indicator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XBND Indicator" +#property strict + +// +#include "../Libraries/x-saherelm.lib.mq4" +#include "../Libraries/x-saherelm.draw.lib.mq4" + +// +// START Inputs ... +// +input int marketLength = 5; // Averaging Length +input int ignoreLastCross = 4; // Ignore Last Cross +input int shift = 0; // Averaging Shift +input ENUM_MA_METHOD method = MODE_SMA; // Averaging Mode +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +// +#property indicator_chart_window + +// +#property indicator_buffers 4 + +// +// Declare Buffers ... +// +// High ... +#property indicator_width1 1 +#property indicator_color1 clrAqua +#property indicator_type1 DRAW_LINE +#property indicator_style1 STYLE_DASHDOT + +// +// Open ... +#property indicator_width2 1 +#property indicator_color2 clrGreen +#property indicator_type2 DRAW_LINE +#property indicator_style2 STYLE_DASH + +// +// Close ... +#property indicator_width3 1 +#property indicator_color3 clrRed +#property indicator_type3 DRAW_LINE +#property indicator_style3 STYLE_DASH + +// +// Low ... +#property indicator_width4 1 +#property indicator_color4 clrFuchsia +#property indicator_type4 DRAW_LINE +#property indicator_style4 STYLE_DASHDOT + +// +#define highBufferIndex 0 +#define openBufferIndex 1 +#define closeBufferIndex 2 +#define lowBufferIndex 3 + +// +double highBuffer[]; +double openBuffer[]; +double closeBuffer[]; +double lowBuffer[]; + +// +datetime lastCrossTime; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + + // + // Validating Input Parameters ... + if ( + marketLength < 2 + || ignoreLastCross < 0 + ) { + return INIT_PARAMETERS_INCORRECT; + } + + // + // here we specify logging enabled or not ... + enableLogging = true; + + // + // this is a Tag which attached to our Logger ... + logTag = "XBND"; + + // + // High ... + string highLabel = StringConcatenate( + "High(", marketLength, ")" + ); + SetIndexBuffer(highBufferIndex, highBuffer); + SetIndexLabel(highBufferIndex, highLabel); + + // + // Open ... + string openLabel = StringConcatenate( + "Open(", marketLength, ")" + ); + SetIndexBuffer(openBufferIndex, openBuffer); + SetIndexLabel(openBufferIndex, openLabel); + + // + // Close ... + string closeLabel = StringConcatenate( + "Close(", marketLength, ")" + ); + SetIndexBuffer(closeBufferIndex, closeBuffer); + SetIndexLabel(closeBufferIndex, closeLabel); + + // + // Low ... + string lowLabel = StringConcatenate( + "Low(", marketLength, ")" + ); + SetIndexBuffer(lowBufferIndex, lowBuffer); + SetIndexLabel(lowBufferIndex, lowLabel); + + // + // initialization done ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) { + RemoveDraws(logTag); +} + +// +// Do Calculation ... +int OnCalculate( + const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, marketLength); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate Buffers ... + CalculateBuffers(i); + + // + // Calculate Market Changes ... + CalculateInfo(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +void CalculateBuffers( + const int bar_index +) { + // + // High ... + double high = iMA( + _Symbol, + _Period, + marketLength, + shift, + method, + PRICE_HIGH, + bar_index + ); + + // + highBuffer[bar_index] = high; + + // + // Open ... + double open = iMA( + _Symbol, + _Period, + marketLength, + shift, + method, + PRICE_OPEN, + bar_index + ); + + // + openBuffer[bar_index] = open; + + // + // Close ... + double close = iMA( + _Symbol, + _Period, + marketLength, + shift, + method, + PRICE_CLOSE, + bar_index + ); + + // + closeBuffer[bar_index] = close; + + // + // Low ... + double low = iMA( + _Symbol, + _Period, + marketLength, + shift, + method, + PRICE_LOW, + bar_index + ); + + // + lowBuffer[bar_index] = low; +} + +// +void CalculateInfo( + const int bar_index +) { + // + XOHCL pCandle = GetCandleModel(bar_index); + + // + bool isTrendingUp = + pCandle.low > highBuffer[bar_index] + && pCandle.high > highBuffer[bar_index]; + + // + bool isTrendingDown = + pCandle.high < lowBuffer[bar_index] + && pCandle.low < lowBuffer[bar_index]; + + // + bool isOpenCrossOverClose = + true + // && + // ( + // pCandle.high > highBuffer[bar_index + 1] + // || pCandle.low < lowBuffer[bar_index + 1] + // ) + && openBuffer[bar_index + 1] > closeBuffer[bar_index + 1] + && !(openBuffer[bar_index + 2] >= closeBuffer[bar_index + 2]) + ; + + // + bool isOpenCrossUnderClose = + true + // && + // ( + // pCandle.high > highBuffer[bar_index + 1] + // || pCandle.low < lowBuffer[bar_index + 1] + // ) + && openBuffer[bar_index + 1] < closeBuffer[bar_index + 1] + && !(openBuffer[bar_index + 2] <= closeBuffer[bar_index + 2]) + ; + + // + isTrendingUp = isOpenCrossUnderClose; + isTrendingDown = isOpenCrossOverClose; + + // + datetime time = iTime( + _Symbol, + _Period, + bar_index + ); + + // + if ( + isTrendingUp + || isTrendingDown + ) { + // + if (lastCrossTime == 0) { + lastCrossTime = time; + } else { + // + int lastCrossBarIndex = iBarShift( + _Symbol, + _Period, + lastCrossTime + ); + + // + int diff = lastCrossBarIndex - bar_index; + if (diff <= ignoreLastCross) { + return; + } else { + lastCrossTime = time; + } + } + } + + // + string lbl = StringConcatenate( + logTag, + "_Arrow_", + isTrendingUp ? "UP" : "Down", + "_", time + ); + + // + color clr = isTrendingUp ? + clrAqua : + clrFuchsia; + + // + ENUM_ARROW_ANCHOR anchor = isTrendingUp ? + ANCHOR_BOTTOM : + ANCHOR_TOP; + + // + uchar arrowCode = isTrendingUp ? + SYMBOL_ARROWUP : + SYMBOL_ARROWDOWN; + + // + double price = isTrendingUp ? + pCandle.low - 20 * _Point : + pCandle.high + 20 * _Point; + + // + if (isTrendingUp) { + // + // this means Market Going Up ... + + } + + // + if (isTrendingDown) { + // + // this means Market Going Downm ... + } + + // + if ( + isTrendingUp + || isTrendingDown + ) { + // + bool isDrawn = DrawArrow( + 0, + lbl, + 0, + time, + price, + arrowCode, + anchor, + clr + ); + } +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.xhh.mq4 b/xIndicators/x-saherelm.xhh.mq4 new file mode 100644 index 0000000..dfbc2cd --- /dev/null +++ b/xIndicators/x-saherelm.xhh.mq4 @@ -0,0 +1,410 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center XHH Indicator +// --------------------------------------------- +// saherelm implementation of above indicator ... +// this indicator uses two ma line: +// - fast ma; +// - slow ma; +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XHH Indicator" +#property strict + +// +// START Inputs ... +// +// +input int marketLength = 7; // Market Length + +// +input int shortCycleMultiplier = 4; // Market Short Cycle Multiplier +input int mediumCycleMultiplier = 14; // Market Medium Cycle Multiplier +input int longCycleMultiplier = 27; // Market Medium Cycle Multiplier +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_chart_window + +// +#property indicator_buffers 6 + +// +#property indicator_plots 6 + +// +// Start Define Indicator Buffer Styles ... +// +// +// Short Cycle Highest High Buffer ... +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrGreen +#property indicator_style1 STYLE_DOT +#property indicator_width1 1 + +// +// Short Cycle Lowest Low Buffer ... +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrRed +#property indicator_style2 STYLE_DOT +#property indicator_width2 1 + +// +// Medium Cycle Highest High Buffer ... +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrAqua +#property indicator_style3 STYLE_DOT +#property indicator_width3 1 + +// +// Medium Cycle Lowest Low Buffer ... +#property indicator_type4 DRAW_LINE +#property indicator_color4 clrFuchsia +#property indicator_style4 STYLE_DOT +#property indicator_width4 1 + +// +// Long Cycle Highest High Buffer ... +#property indicator_type5 DRAW_LINE +#property indicator_color5 C'62,82,6' +#property indicator_style5 STYLE_DOT +#property indicator_width5 1 + +// +// Long Cycle Lowest Low Buffer ... +#property indicator_type6 DRAW_LINE +#property indicator_color6 C'255,81,0' +#property indicator_style6 STYLE_DOT +#property indicator_width6 1 +// +// End Define Indicator Buffer Styles ... +// + +// +// Buffers ... +#define shortCycleHighestHighBufferIndex 0 +#define shortCycleLowestLowBufferIndex 1 +#define mediumCycleHighestHighBufferIndex 2 +#define mediumCycleLowestLowBufferIndex 3 +#define longCycleHighestHighBufferIndex 4 +#define longCycleLowestLowBufferIndex 5 + +double shortCycleHighestHighBuffer[]; +double shortCycleLowestLowBuffer[]; +double mediumCycleHighestHighBuffer[]; +double mediumCycleLowestLowBuffer[]; +double longCycleHighestHighBuffer[]; +double longCycleLowestLowBuffer[]; + +// +// Variables ... +int shortCycleLength; +int mediumCycleLength; +int longCycleLength; + +// +double highestHighTimes[]; +double lowestLowTimes[]; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + if ( + marketLength <= 0 || + shortCycleMultiplier <= 0 || + mediumCycleMultiplier <= 0 || + shortCycleMultiplier > mediumCycleMultiplier + ) { + return INIT_PARAMETERS_INCORRECT; + } + + // + // Start Set Index Buffers ... + // + shortCycleLength = shortCycleMultiplier * marketLength; + mediumCycleLength = mediumCycleMultiplier * marketLength; + longCycleLength = longCycleMultiplier * marketLength; + + // + // Short Cycle Highest High ... + string scHHLbl = StringConcatenate( + "SC HH(", shortCycleLength, ")" + ); + SetIndexBuffer(shortCycleHighestHighBufferIndex, shortCycleHighestHighBuffer); + SetIndexLabel(shortCycleHighestHighBufferIndex, scHHLbl); + + // + // Short Cycle Lowest Low ... + string scLLLbl = StringConcatenate( + "SC LL(", shortCycleLength, ")" + ); + SetIndexBuffer(shortCycleLowestLowBufferIndex, shortCycleLowestLowBuffer); + SetIndexLabel(shortCycleLowestLowBufferIndex, scLLLbl); + + // + // Medium Cycle Highest High ... + string mcHHLbl = StringConcatenate( + "MC HH(", mediumCycleLength, ")" + ); + SetIndexBuffer(mediumCycleHighestHighBufferIndex, mediumCycleHighestHighBuffer); + SetIndexLabel(mediumCycleHighestHighBufferIndex, mcHHLbl); + + // + // Medium Cycle Lowest Low ... + string mcLLLbl = StringConcatenate( + "MC LL(", mediumCycleLength, ")" + ); + SetIndexBuffer(mediumCycleLowestLowBufferIndex, mediumCycleLowestLowBuffer); + SetIndexLabel(mediumCycleLowestLowBufferIndex, mcLLLbl); + + // + // Long Cycle Highest High ... + string lcHHLbl = StringConcatenate( + "LC HH(", longCycleLength, ")" + ); + SetIndexBuffer(longCycleHighestHighBufferIndex, longCycleHighestHighBuffer); + SetIndexLabel(longCycleHighestHighBufferIndex, lcHHLbl); + + // + // Long Cycle Lowest Low ... + string lcLLLbl = StringConcatenate( + "LC LL(", longCycleLength, ")" + ); + SetIndexBuffer(longCycleLowestLowBufferIndex, longCycleLowestLowBuffer); + SetIndexLabel(longCycleLowestLowBufferIndex, lcLLLbl); + // + // End Set Index Buffers ... + // + + // + return INIT_SUCCEEDED; +} + +// +// Calculating what we want ... +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, marketLength); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + CalculateShortCycle(i); + + // + CalculateMediumCycle(i); + + // + CalculateLongCycle(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculating Short Cycle ... +void CalculateShortCycle( + const int &bar_index +) { + // + // Short Cycle Highest High ... + // + int scHHIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + shortCycleLength, + bar_index + ); + + // + double scHH = iHigh( + _Symbol, + _Period, + scHHIdx + ); + + // + shortCycleHighestHighBuffer[bar_index] = scHH; + + // + // Short Cycle Lowest Low ... + // + int scLLIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + shortCycleLength, + bar_index + ); + + // + double scLL = iLow( + _Symbol, + _Period, + scLLIdx + ); + + // + shortCycleLowestLowBuffer[bar_index] = scLL; +} + +// +// Calculating Medium Cycle ... +void CalculateMediumCycle( + const int &bar_index +) { + // + // Medium Cycle Highest High ... + // + int mcHHIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + mediumCycleLength, + bar_index + ); + + // + double mcHH = iHigh( + _Symbol, + _Period, + mcHHIdx + ); + + // + mediumCycleHighestHighBuffer[bar_index] = mcHH; + + // + // Medium Cycle Lowest Low ... + // + int mcLLIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + mediumCycleLength, + bar_index + ); + + // + double mcLL = iLow( + _Symbol, + _Period, + mcLLIdx + ); + + // + mediumCycleLowestLowBuffer[bar_index] = mcLL; +} + +// +// Calculating Long Cycle ... +void CalculateLongCycle( + const int &bar_index +) { + // + // Long Cycle Highest High ... + // + int lcHHIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + longCycleLength, + bar_index + ); + + // + double lcHH = iHigh( + _Symbol, + _Period, + lcHHIdx + ); + + // + longCycleHighestHighBuffer[bar_index] = lcHH; + + // + // Long Cycle Lowest Low ... + // + int lcLLIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + longCycleLength, + bar_index + ); + + // + double lcLL = iLow( + _Symbol, + _Period, + lcLLIdx + ); + + // + longCycleLowestLowBuffer[bar_index] = lcLL; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.xma.1.mq4 b/xIndicators/x-saherelm.xma.1.mq4 new file mode 100644 index 0000000..4c96e36 --- /dev/null +++ b/xIndicators/x-saherelm.xma.1.mq4 @@ -0,0 +1,337 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center XMA Indicator +// --------------------------------------------- +// saherelm implementation of above oscillator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XMA Indicator" +#property strict + +// +// START Inputs ... +// +// +// Set the R2R Length ... +input int swingLoopback = 7; // Swing Loopback +input int xmaFlowMultiplier = 3; // XMA Flow Multiplier +input int xmaMarkMultiplier = 5; // XMA Mark Multiplier +input int xmaFastMultiplier = 7; // XMA Fast Multiplier +input int xmaSlowMultiplier = 14; // XMA Slow Multiplier +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_chart_window + +// +// define indicator buffers ... +#property indicator_buffers 6 +#property indicator_plots 6 + +// +// XMA High ... +#property indicator_label1 "XMA High" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrLime +#property indicator_style1 STYLE_SOLID +#property indicator_width1 1 + +// +// XMA Low ... +#property indicator_label2 "XMA Low" +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrOrange +#property indicator_style2 STYLE_SOLID +#property indicator_width2 1 + +// +// XMA Mark ... +#property indicator_label3 "XMA Mark" +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrCornflowerBlue +#property indicator_style3 STYLE_DASH +#property indicator_width3 1 + +// +// XMA Mid ... +#property indicator_label4 "XMA Mid" +#property indicator_type4 DRAW_LINE +#property indicator_color4 clrBisque +#property indicator_style4 STYLE_DASHDOT +#property indicator_width4 1 + +// +// XMA Fast ... +#property indicator_label5 "XMA Fast" +#property indicator_type5 DRAW_LINE +#property indicator_color5 clrGreen +#property indicator_style5 STYLE_DOT +#property indicator_width5 1 + +// +// XMA Slow ... +#property indicator_label6 "XMA Slow" +#property indicator_type6 DRAW_LINE +#property indicator_color6 clrRed +#property indicator_style6 STYLE_DOT +#property indicator_width6 1 + +// +// Declare Buffers ... +#define xmaHighBufferIndex 0 +#define xmaLowBufferIndex 1 +#define xmaMarkBufferIndex 2 +#define xmaMidBufferIndex 3 +#define xmaFastBufferIndex 4 +#define xmaSlowBufferIndex 5 + +// +double xmaHighBuffer[]; +double xmaLowBuffer[]; +double xmaMarkBuffer[]; +double xmaMidBuffer[]; +double xmaFastBuffer[]; +double xmaSlowBuffer[]; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + + + // + // Validating Input Parameters ... + if (swingLoopback <= 0) { + return INIT_PARAMETERS_INCORRECT; + } + + // + // XMA High ... + SetIndexBuffer(xmaHighBufferIndex, xmaHighBuffer); + SetIndexDrawBegin(xmaHighBufferIndex, swingLoopback * xmaFlowMultiplier); + + // + // XMA Low ... + SetIndexBuffer(xmaLowBufferIndex, xmaLowBuffer); + SetIndexDrawBegin(xmaLowBufferIndex, swingLoopback * xmaFlowMultiplier); + + // + // XMA Mark ... + SetIndexBuffer(xmaMarkBufferIndex, xmaMarkBuffer); + SetIndexDrawBegin(xmaMarkBufferIndex, swingLoopback * xmaMarkMultiplier); + + // + // XMA Mid ... + SetIndexBuffer(xmaMidBufferIndex, xmaMidBuffer); + SetIndexDrawBegin(xmaMidBufferIndex, swingLoopback); + + // + // XMA Fast ... + SetIndexBuffer(xmaFastBufferIndex, xmaFastBuffer); + SetIndexDrawBegin(xmaFastBufferIndex, swingLoopback * xmaFastMultiplier); + + // + // XMA Slow ... + SetIndexBuffer(xmaSlowBufferIndex, xmaSlowBuffer); + SetIndexDrawBegin(xmaSlowBufferIndex, swingLoopback * xmaSlowMultiplier); + + // + // initialization done ... + return(INIT_SUCCEEDED); +} + +// +// Do Calculation ... +int OnCalculate( + const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, swingLoopback); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate XMA Flow ... + CalculateXMAFlow(i); + + // + // Calculate XMA Mark ... + CalculateXMAMark(i); + + // + // Calculate XMA Mid ... + CalculateXMAMid(i); + + // + // Calculate XMA Fast/Slow ... + CalculateXMAFastSlow(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculate XMA Flow ... +void CalculateXMAFlow(const int &bar_index) { + // + int xmaFlowLength = swingLoopback * xmaFlowMultiplier; + + // + // Calculating XMa High ... + double xmaHigh = iMA( + _Symbol, + _Period, + xmaFlowLength, + 0, + MODE_SMA, + PRICE_HIGH, + bar_index + ); + xmaHighBuffer[bar_index] = xmaHigh; + + // + // Calculating XMa Low ... + double xmaLow = iMA( + _Symbol, + _Period, + xmaFlowLength, + 0, + MODE_SMA, + PRICE_LOW, + bar_index + ); + xmaLowBuffer[bar_index] = xmaLow; +} + +// +// Calculate XMA Mark ... +void CalculateXMAMark(const int &bar_index) { + // + int xmaMarkLength = swingLoopback * xmaMarkMultiplier; + + // + // Calculating XMa Mark ... + double xmaMark = iMA( + _Symbol, + _Period, + xmaMarkLength, + 0, + MODE_SMA, + PRICE_HIGH, + bar_index + ); + xmaMarkBuffer[bar_index] = xmaMark; +} + +// +// Calculate XMA Mid ... +void CalculateXMAMid(const int &bar_index) { + // + // Calculating XMa Mid ... + double xmaMid = iMA( + _Symbol, + _Period, + swingLoopback, + 0, + MODE_EMA, + PRICE_HIGH, + bar_index + ); + xmaMidBuffer[bar_index] = xmaMid; +} + +// +// Calculate XMA Fast/Slow ... +void CalculateXMAFastSlow(const int &bar_index) { + // + int xmaFastLength = swingLoopback * xmaFastMultiplier; + int xmaSlowLength = swingLoopback * xmaSlowMultiplier; + + // + // Calculating XMa Fast ... + double xmaFast = iMA( + _Symbol, + _Period, + xmaFastLength, + 0, + MODE_SMA, + PRICE_CLOSE, + bar_index + ); + xmaFastBuffer[bar_index] = xmaFast; + + // + // Calculating XMa Slow ... + double xmaSlow = iMA( + _Symbol, + _Period, + xmaSlowLength, + 0, + MODE_SMA, + PRICE_CLOSE, + bar_index + ); + xmaSlowBuffer[bar_index] = xmaSlow; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.xma.mq4 b/xIndicators/x-saherelm.xma.mq4 new file mode 100644 index 0000000..4a599f9 --- /dev/null +++ b/xIndicators/x-saherelm.xma.mq4 @@ -0,0 +1,695 @@ + /////////////////////////////////////////////////////// +// +// SaherElm IT Center XMA Indicator +// --------------------------------------------- +// saherelm implementation of above oscillator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XMA Indicator" +#property strict + +// +// START Inputs ... +// +// +// Market Specifications ... +input int marketLength = 7; // Market Length +input double step = 0.02; // SAR Step +input double maximum = 0.2; // SAR Maximum +// +// Cycle Definitions ... +input int shortCycleFastMultiplier = 1; // Short Cycle Fast Multiplier +input int shortCycleSlowMultiplier = 4; // Short Cycle Slow Multiplier +input int mediumCycleFastMultiplier = 7; // Medium Cycle Fast Multiplier +input int mediumCycleSlowMultiplier = 14; // Medium Cycle Slow Multiplier +input int longCycleFastMultiplier = 70; // Long Cycle Fast Multiplier +input int longCycleSlowMultiplier = 140; // Long Cycle Slow Multiplier +// +// Show Inputs ... +input bool showPSar = true; // Show Parabolic Sar +input bool showMarketMiddle = true; // Show Market Middle +input bool showShortCycle = true; // Show Short Cycle +input bool showShortCycleCrossLines = true; // Show Short Cycle Vertical Lines +input bool showMediumCycle = true; // Show Medium Cycle +input bool showMediumCycleCrossLines = true; // Show Medium Cycle Vertical Lines +input bool showLongCycle = true; // Show Long Cycle +input bool showLongCycleCrossLines = true; // Show Long Cycle Vertical Lines +// +// Color Inputs ... +input color pSarColor = clrCornflowerBlue; // Parabolic Sar Color +input color shortCycleFastColor = clrGreen; // Short Cycle Fast Color +input color shortCycleSlowColor = clrRed; // Short Cycle Slow Color +input color mediumCycleFastColor = clrAqua; // Medium Cycle Fast Color +input color mediumCycleSlowColor = clrFuchsia; // Medium Cycle Slow Color +input color longCycleFastColor = clrGoldenrod; // Medium Cycle Fast Color +input color longCycleSlowColor = clrBrown; // Medium Cycle Slow Color +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_chart_window + +// +// define indicator buffers ... +#property indicator_buffers 8 +#property indicator_plots 8 + +// +// Declare Buffers ... +#define scFastBufferIndex 0 +#define scSlowBufferIndex 1 +#define mcFastBufferIndex 2 +#define mcSlowBufferIndex 3 +#define lcFastBufferIndex 4 +#define lcSlowBufferIndex 5 +#define midBufferIndex 6 +#define pSarBufferIndex 7 + +// +double scFastBuffer[]; +double scSlowBuffer[]; +double mcFastBuffer[]; +double mcSlowBuffer[]; +double lcFastBuffer[]; +double lcSlowBuffer[]; +double midBuffer[]; +double pSarBuffer[]; + +// +int shortCycleFastLength; +int shortCycleSlowLength; +int mediumCycleFastLength; +int mediumCycleSlowLength; +int longCycleFastLength; +int longCycleSlowLength; + +// +// Includes our shared library ... +#include "../Libraries/x-saherelm.lib.mq4" +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + + // + // Validating Input Parameters ... + if ( + // + // Validate Market Length ... + marketLength <= 0 + // + // Validate Short Cycle ... + || shortCycleFastMultiplier <= 0 + || shortCycleSlowMultiplier <= 0 + || shortCycleFastMultiplier >= shortCycleSlowMultiplier + // + // Validate Medium Cycle ... + || mediumCycleFastMultiplier <= 0 + || mediumCycleSlowMultiplier <= 0 + || mediumCycleFastMultiplier >= mediumCycleSlowMultiplier + // + // Validate Long Cycle ... + || longCycleFastMultiplier <= 0 + || longCycleSlowMultiplier <= 0 + || longCycleFastMultiplier >= longCycleSlowMultiplier + // + // Validate Series of Multipliers ... + || shortCycleFastMultiplier >= mediumCycleFastMultiplier + || mediumCycleFastMultiplier >= longCycleFastMultiplier + ) { + return INIT_PARAMETERS_INCORRECT; + } + + // + // here we specify logging enabled or not ... + enableLogging = true; + + // + // this is a Tag which attached to our Logger ... + logTag = "XST_XMA"; + + // + // Calculate Cycle Length based on given Multipliers ... + shortCycleFastLength = marketLength * shortCycleFastMultiplier; + shortCycleSlowLength = marketLength * shortCycleSlowMultiplier; + mediumCycleFastLength = marketLength * mediumCycleFastMultiplier; + mediumCycleSlowLength = marketLength * mediumCycleSlowMultiplier; + longCycleFastLength = marketLength * longCycleFastMultiplier; + longCycleSlowLength = marketLength * longCycleSlowMultiplier; + + // + // Short Cycle Fast ... + SetIndexLabel(scFastBufferIndex, "SCFast"); + SetIndexBuffer(scFastBufferIndex, scFastBuffer); + SetIndexDrawBegin(scFastBufferIndex, shortCycleFastLength); + SetIndexStyle( + scFastBufferIndex, + DRAW_LINE, + STYLE_DOT, + 1, + showShortCycle ? + shortCycleFastColor : + clrNONE + ); + + // + // Short Cycle Slow ... + SetIndexLabel(scSlowBufferIndex, "SCSLow"); + SetIndexBuffer(scSlowBufferIndex, scSlowBuffer); + SetIndexDrawBegin(scSlowBufferIndex, shortCycleSlowLength); + SetIndexStyle( + scSlowBufferIndex, + DRAW_LINE, + STYLE_DOT, + 1, + showShortCycle ? + shortCycleSlowColor : + clrNONE + ); + + // + // Medium Cycle Fast ... + SetIndexLabel(mcFastBufferIndex, "MCFast"); + SetIndexBuffer(mcFastBufferIndex, mcFastBuffer); + SetIndexDrawBegin(mcFastBufferIndex, mediumCycleFastLength); + SetIndexStyle( + mcFastBufferIndex, + DRAW_LINE, + STYLE_DOT, + 1, + showMediumCycle ? + mediumCycleFastColor : + clrNONE + ); + + // + // Medium Cycle Slow ... + SetIndexLabel(mcSlowBufferIndex, "MCSlow"); + SetIndexBuffer(mcSlowBufferIndex, mcSlowBuffer); + SetIndexDrawBegin(mcSlowBufferIndex, mediumCycleSlowLength); + SetIndexStyle( + mcSlowBufferIndex, + DRAW_LINE, + STYLE_DOT, + 1, + showMediumCycle ? + mediumCycleSlowColor : + clrNONE + ); + + // + // Long Cycle Fast ... + SetIndexLabel(lcFastBufferIndex, "LCFast"); + SetIndexBuffer(lcFastBufferIndex, lcFastBuffer); + SetIndexDrawBegin(lcFastBufferIndex, longCycleFastLength); + SetIndexStyle( + lcFastBufferIndex, + DRAW_LINE, + STYLE_DOT, + 1, + showLongCycle ? + longCycleFastColor : + clrNONE + ); + + // + // Long Cycle Slow ... + SetIndexLabel(lcSlowBufferIndex, "LCSlow"); + SetIndexBuffer(lcSlowBufferIndex, lcSlowBuffer); + SetIndexDrawBegin(lcSlowBufferIndex, longCycleSlowLength); + SetIndexStyle( + lcSlowBufferIndex, + DRAW_LINE, + STYLE_DOT, + 1, + showLongCycle ? + longCycleSlowColor : + clrNONE + ); + + // + // Market Middleage ... + SetIndexBuffer(midBufferIndex, midBuffer); + SetIndexDrawBegin(midBufferIndex, marketLength); + SetIndexLabel(midBufferIndex, "Market Mid"); + + // + // Parabolic Sar ... + SetIndexBuffer(pSarBufferIndex, pSarBuffer); + SetIndexLabel(pSarBufferIndex, "P Sar"); + SetIndexStyle( + pSarBufferIndex, + DRAW_LINE, + STYLE_DOT, + 1, + showPSar ? + pSarColor : + clrNONE + ); + + // + // Market Middle ... + SetIndexBuffer(midBufferIndex, midBuffer); + SetIndexLabel(midBufferIndex, "Mid"); + SetIndexStyle( + midBufferIndex, + DRAW_LINE, + STYLE_DOT, + 1, + showMarketMiddle ? + clrAntiqueWhite : + clrNONE + ); + + // + // initialization done ... + return(INIT_SUCCEEDED); +} + +// +// DeInitialization ... +void OnDeinit(const int reason) { + // + RemoveDraws(logTag); +} + +// +// Do Calculation ... +int OnCalculate( + const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(marketLength, longCycleSlowLength); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate Short Cycle ... + CalculateShortCycle(i); + + // + // Calculate Medium Cycle ... + CalculateMediumCycle(i); + + // + // Calculate Long Cycle ... + CalculateLongCycle(i); + + // + // Calculate Market Middleage ... + CalculateMarketMiddleage(i); + + // + // Calculate Cross Points ... + CalculateCrossPoints(i); + + // + // Calculate Parabolic Sar ... + CalculateParabolicSar(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculate Short Cycle ... +void CalculateShortCycle( + const int bar_index +) { + // + // Fast ... + double shortCycleFast = iMA( + _Symbol, + _Period, + shortCycleFastLength, + 0, + MODE_SMA, + PRICE_WEIGHTED, + bar_index + ); + scFastBuffer[bar_index] = shortCycleFast; + + // + // Slow ... + double shortCycleSlow = iMA( + _Symbol, + _Period, + shortCycleSlowLength, + 0, + MODE_SMA, + PRICE_WEIGHTED, + bar_index + ); + scSlowBuffer[bar_index] = shortCycleSlow; +} + +// +// Calculate Medium Cycle ... +void CalculateMediumCycle( + const int bar_index +) { + // + // Fast ... + double mediumCycleFast = iMA( + _Symbol, + _Period, + mediumCycleFastLength, + 0, + MODE_SMA, + PRICE_MEDIAN, + bar_index + ); + mcFastBuffer[bar_index] = mediumCycleFast; + + // + // Slow ... + double mediumCycleSlow = iMA( + _Symbol, + _Period, + mediumCycleSlowLength, + 0, + MODE_SMA, + PRICE_MEDIAN, + bar_index + ); + mcSlowBuffer[bar_index] = mediumCycleSlow; +} + +// +// Calculate Long Cycle ... +void CalculateLongCycle( + const int bar_index +) { + // + // Fast ... + double longCycleFast = iMA( + _Symbol, + _Period, + longCycleFastLength, + 0, + MODE_SMA, + PRICE_CLOSE, + bar_index + ); + lcFastBuffer[bar_index] = longCycleFast; + + // + // Slow ... + double longCycleSlow = iMA( + _Symbol, + _Period, + longCycleSlowLength, + 0, + MODE_SMA, + PRICE_CLOSE, + bar_index + ); + lcSlowBuffer[bar_index] = longCycleSlow; +} + +// +// Calculate Market Middleage ... +void CalculateMarketMiddleage( + const int bar_index +) { + // + // Mid ... + double marketMiddleage = iMA( + _Symbol, + _Period, + (int)(marketLength * 1.5), + 0, + MODE_EMA, + PRICE_MEDIAN, + bar_index + ); + midBuffer[bar_index] = marketMiddleage; +} + +// +// Calculate Cross Points and Draw Section Line on theme ... +void CalculateCrossPoints( + const int bar_index +) { + // + // START Draw Cross Lines ... + // + // + // Short Cycle ... + bool isSCFastCrossOverSlow = scFastBuffer[bar_index] > scSlowBuffer[bar_index] + && !(scFastBuffer[bar_index + 1] > scSlowBuffer[bar_index + 1]); + + // + bool isSCFastCrossUnderSlow = scFastBuffer[bar_index] < scSlowBuffer[bar_index] + && !(scFastBuffer[bar_index + 1] < scSlowBuffer[bar_index + 1]); + + // + // Medium Cycle ... + bool isMCFastCrossOverSlow = mcFastBuffer[bar_index] > mcSlowBuffer[bar_index] + && !(mcFastBuffer[bar_index + 1] > mcSlowBuffer[bar_index + 1]); + + // + bool isMCFastCrossUnderSlow = mcFastBuffer[bar_index] < mcSlowBuffer[bar_index] + && !(mcFastBuffer[bar_index + 1] < mcSlowBuffer[bar_index + 1]); + + // + // Long Cycle ... + bool isLCFastCrossOverSlow = lcFastBuffer[bar_index] > lcSlowBuffer[bar_index] + && !(lcFastBuffer[bar_index + 1] > lcSlowBuffer[bar_index + 1]); + + // + bool isLCFastCrossUnderSlow = lcFastBuffer[bar_index] < lcSlowBuffer[bar_index] + && !(lcFastBuffer[bar_index + 1] < lcSlowBuffer[bar_index + 1]); + + // + // START Drawing CrossPoints ... + // + // + datetime currentTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + if (showShortCycleCrossLines) { + // + // Draw Line ... + if (isSCFastCrossOverSlow) { + // + string lbl = StringConcatenate( + logTag, + "_SC_F_OV_S_", + currentTime + ); + + // + DrawVerticalLine( + 0, + lbl, + 0, + currentTime, + showShortCycleCrossLines ? + shortCycleFastColor : + clrNONE + ); + } + + // + // Draw Line ... + if (isSCFastCrossUnderSlow) { + // + string lbl = StringConcatenate( + logTag, + "_SC_F_UN_S_", + currentTime + ); + + // + DrawVerticalLine( + 0, + lbl, + 0, + currentTime, + showShortCycleCrossLines ? + shortCycleSlowColor : + clrNONE + ); + } + } + + // + if (showMediumCycleCrossLines) { + // + // Draw Line ... + if (isMCFastCrossOverSlow) { + // + string lbl = StringConcatenate( + logTag, + "_MC_F_OV_S_", + currentTime + ); + + // + DrawVerticalLine( + 0, + lbl, + 0, + currentTime, + showMediumCycleCrossLines ? + mediumCycleFastColor : + clrNONE + ); + } + + // + // Draw Line ... + if (isMCFastCrossUnderSlow) { + // + string lbl = StringConcatenate( + logTag, + "_MC_F_UN_S_", + currentTime + ); + + // + DrawVerticalLine( + 0, + lbl, + 0, + currentTime, + showMediumCycleCrossLines ? + mediumCycleSlowColor : + clrNONE + ); + } + } + + // + if (showLongCycleCrossLines) { + // + // Draw Line ... + if (isLCFastCrossOverSlow) { + // + string lbl = StringConcatenate( + logTag, + "_LC_F_OV_S_", + currentTime + ); + + // + DrawVerticalLine( + 0, + lbl, + 0, + currentTime, + showLongCycleCrossLines ? + longCycleFastColor : + clrNONE + ); + } + + // + // Draw Line ... + if (isLCFastCrossUnderSlow) { + // + string lbl = StringConcatenate( + logTag, + "_LC_F_UN_S_", + currentTime + ); + + // + DrawVerticalLine( + 0, + lbl, + 0, + currentTime, + showLongCycleCrossLines ? + longCycleSlowColor : + clrNONE + ); + } + } + // + // END Drawing CrossPoints ... + // +} + +void CalculateParabolicSar( + const int bar_index +) { + // + double sarValue = iSAR( + NULL, + _Period, + step, + maximum, + bar_index + ); + + // + pSarBuffer[bar_index] = sarValue; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.xmarket.mq4 b/xIndicators/x-saherelm.xmarket.mq4 new file mode 100644 index 0000000..71b2e2c --- /dev/null +++ b/xIndicators/x-saherelm.xmarket.mq4 @@ -0,0 +1,394 @@ + /////////////////////////////////////////////////////// +// +// SaherElm IT Center XMKT Indicator +// --------------------------------------------- +// retrieve market base info ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XMKT Indicator" +#property strict + +// +// START Inputs ... +// +// +// Market Specifications ... +input int marketLength = 7; // Market Length +// +input bool showHighestHigh = true; // Show Market Highest High +input bool showHighestLow = true; // Show Market Highest Low +input bool showHighestOpen = true; // Show Market Highest Open +input bool showHighestClose = true; // Show Market Highest Close +input bool showLowestHigh = true; // Show Market Lowest High +input bool showLowestLow = true; // Show Market Lowest Low +input bool showLowestOpen = true; // Show Market Lowest Open +input bool showLowestClose = true; // Show Market Lowest Close +// +input color highestHighColor = clrDeepPink; // Market Highest High Color +input color highestLowColor = clrDarkOrange; // Market Highest Low Color +input color highestOpenColor = clrDodgerBlue; // Market Highest Open Color +input color highestCloseColor = clrOrchid; // Market Highest Close Color +input color lowestHighColor = clrHotPink; // Market Lowest High Color +input color lowestLowColor = clrOrange; // Market Lowest Low Color +input color lowestOpenColor = clrPowderBlue; // Market Lowest Open Color +input color lowestCloseColor = clrMediumOrchid; // Market Lowest Close Color +// +input ENUM_LINE_STYLE highestHighStyle = STYLE_DOT; // Market Highest High Line Style +input ENUM_LINE_STYLE highestLowStyle = STYLE_DOT; // Market Highest Low Line Style +input ENUM_LINE_STYLE highestOpenStyle = STYLE_DOT; // Market Highest Open Line Style +input ENUM_LINE_STYLE highestCloseStyle = STYLE_DOT; // Market Highest Close Line Style +input ENUM_LINE_STYLE lowestHighStyle = STYLE_DOT; // Market Lowest High Line Style +input ENUM_LINE_STYLE lowestLowStyle = STYLE_DOT; // Market Lowest Low Line Style +input ENUM_LINE_STYLE lowestOpenStyle = STYLE_DOT; // Market Lowest Open Line Style +input ENUM_LINE_STYLE lowestCloseStyle = STYLE_DOT; // Market Lowest Close Line Style +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_chart_window + +// +// define indicator buffers ... +#property indicator_buffers 8 +#property indicator_plots 8 + +// +// Declare Buffers ... +#define marketHighestHighBufferIndex 0 +#define marketHighestLowBufferIndex 1 +#define marketHighestOpenBufferIndex 2 +#define marketHighestCloseBufferIndex 3 +#define marketLowestHighBufferIndex 4 +#define marketLowestLowBufferIndex 5 +#define marketLowestOpenBufferIndex 6 +#define marketLowestCloseBufferIndex 7 + +// +double marketHighestHighBuffer[]; +double marketHighestLowBuffer[]; +double marketHighestOpenBuffer[]; +double marketHighestCloseBuffer[]; +double marketLowestHighBuffer[]; +double marketLowestLowBuffer[]; +double marketLowestOpenBuffer[]; +double marketLowestCloseBuffer[]; + +// +// Includes our shared library ... +#include "../Libraries/x-saherelm.lib.mq4" +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + + // + // Validating Input Parameters ... + if (marketLength <= 0) { + return INIT_PARAMETERS_INCORRECT; + } + + // + // here we specify logging enabled or not ... + enableLogging = true; + + // + // this is a Tag which attached to our Logger ... + logTag = "XST_XMKT"; + + // + // Highest High ... + string highestHighLbl = StringConcatenate("HH(", marketLength,")"); + SetIndexLabel(marketHighestHighBufferIndex, highestHighLbl); + SetIndexBuffer(marketHighestHighBufferIndex, marketHighestHighBuffer); + SetIndexStyle( + marketHighestHighBufferIndex, + showHighestHigh ? + DRAW_LINE : + DRAW_NONE, + highestHighStyle, + 1, + showHighestHigh ? + highestHighColor : + clrNONE + ); + + // + // Highest Low ... + string highestLowLbl = StringConcatenate("HL(", marketLength,")"); + SetIndexLabel(marketHighestLowBufferIndex, highestLowLbl); + SetIndexBuffer(marketHighestLowBufferIndex, marketHighestLowBuffer); + SetIndexStyle( + marketHighestLowBufferIndex, + showHighestLow ? + DRAW_LINE : + DRAW_NONE, + highestLowStyle, + 1, + showHighestLow ? + highestLowColor : + clrNONE + ); + + // + // Highest Open ... + string highestOpenLbl = StringConcatenate("HO(", marketLength,")"); + SetIndexLabel(marketHighestOpenBufferIndex, highestOpenLbl); + SetIndexBuffer(marketHighestOpenBufferIndex, marketHighestOpenBuffer); + SetIndexStyle( + marketHighestOpenBufferIndex, + showHighestOpen ? + DRAW_LINE : + DRAW_NONE, + highestOpenStyle, + 1, + showHighestOpen ? + highestOpenColor : + clrNONE + ); + + // + // Highest Close ... + string highestCloseLbl = StringConcatenate("HC(", marketLength,")"); + SetIndexLabel(marketHighestCloseBufferIndex, highestCloseLbl); + SetIndexBuffer(marketHighestCloseBufferIndex, marketHighestCloseBuffer); + SetIndexStyle( + marketHighestCloseBufferIndex, + showHighestClose ? + DRAW_LINE : + DRAW_NONE, + highestCloseStyle, + 1, + showHighestClose ? + highestCloseColor : + clrNONE + ); + + // + // Lowest High ... + string lowestHighLbl = StringConcatenate("LH(", marketLength,")"); + SetIndexLabel(marketLowestHighBufferIndex, lowestHighLbl); + SetIndexBuffer(marketLowestHighBufferIndex, marketLowestHighBuffer); + SetIndexStyle( + marketLowestHighBufferIndex, + showLowestHigh ? + DRAW_LINE : + DRAW_NONE, + lowestHighStyle, + 1, + showLowestHigh ? + lowestHighColor : + clrNONE + ); + + // + // Lowest Low ... + string lowestLowLbl = StringConcatenate("LL(", marketLength,")"); + SetIndexLabel(marketLowestLowBufferIndex, lowestLowLbl); + SetIndexBuffer(marketLowestLowBufferIndex, marketLowestLowBuffer); + SetIndexStyle( + marketLowestLowBufferIndex, + showLowestLow ? + DRAW_LINE : + DRAW_NONE, + lowestLowStyle, + 1, + showLowestLow ? + lowestLowColor : + clrNONE + ); + + // + // Lowest Open ... + string lowestOpenLbl = StringConcatenate("LO(", marketLength,")"); + SetIndexLabel(marketLowestOpenBufferIndex, lowestOpenLbl); + SetIndexBuffer(marketLowestOpenBufferIndex, marketLowestOpenBuffer); + SetIndexStyle( + marketLowestOpenBufferIndex, + showLowestOpen ? + DRAW_LINE : + DRAW_NONE, + lowestOpenStyle, + 1, + showLowestOpen ? + lowestOpenColor : + clrNONE + ); + + // + // Lowest Close ... + string lowestCloseLbl = StringConcatenate("LC(", marketLength,")"); + SetIndexLabel(marketLowestCloseBufferIndex, lowestCloseLbl); + SetIndexBuffer(marketLowestCloseBufferIndex, marketLowestCloseBuffer); + SetIndexStyle( + marketLowestCloseBufferIndex, + showLowestClose ? + DRAW_LINE : + DRAW_NONE, + lowestCloseStyle, + 1, + showLowestClose ? + lowestCloseColor : + clrNONE + ); + + // + // initialization done ... + return(INIT_SUCCEEDED); +} + +// +// DeInitialization ... +void OnDeinit(const int reason) { + // + RemoveDraws(logTag); +} + +// +// Do Calculation ... +int OnCalculate( + const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(marketLength, 3); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate Short Cycle ... + CalculateBuffers(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculate Short Cycle ... +void CalculateBuffers( + const int bar_index +) { + // + // Highest High ... + double highestHighValue = GetMarketHighestHigh( + bar_index, + marketLength + ); + marketHighestHighBuffer[bar_index] = highestHighValue; + + // + // Highest Low ... + double highestLowValue = GetMarketHighestLow( + bar_index, + marketLength + ); + marketHighestLowBuffer[bar_index] = highestLowValue; + + // + // Highest Open ... + double highestOpenValue = GetMarketHighestOpen( + bar_index, + marketLength + ); + marketHighestOpenBuffer[bar_index] = highestOpenValue; + + // + // Highest Close ... + double highestCloseValue = GetMarketHighestClose( + bar_index, + marketLength + ); + marketHighestCloseBuffer[bar_index] = highestCloseValue; + + // + // Lowest High ... + double lowestHighValue = GetMarketLowestHigh( + bar_index, + marketLength + ); + marketLowestHighBuffer[bar_index] = lowestHighValue; + + // + // Lowest Low ... + double lowestLowValue = GetMarketLowestLow( + bar_index, + marketLength + ); + marketLowestLowBuffer[bar_index] = lowestLowValue; + + // + // Lowest Open ... + double lowestOpenValue = GetMarketLowestOpen( + bar_index, + marketLength + ); + marketLowestOpenBuffer[bar_index] = lowestOpenValue; + + // + // Lowest Close ... + double lowestCloseValue = GetMarketLowestClose( + bar_index, + marketLength + ); + marketLowestCloseBuffer[bar_index] = lowestCloseValue; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.xmma.mq4 b/xIndicators/x-saherelm.xmma.mq4 new file mode 100644 index 0000000..835aae4 --- /dev/null +++ b/xIndicators/x-saherelm.xmma.mq4 @@ -0,0 +1,408 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center XMMA Indicator +// --------------------------------------------- +// this is an indicator which going to analyse +// Market based on Price Movements and provide +// some informations to act based on current market +// state ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm Market Analyser (XMMA) Indicator" +#property strict + +// +// START Inputs ... +// +input int marketLength = 7; // Market Length +input int fastShift = 1; // Fast Shift +input int slowShift = 3; // Slow Shift +input int longMarketFastMultiplier = 100; // Long Market Fast Multiplier +input int longMarketSlowMultiplier = 200; // Long Market Slow Multiplier +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_chart_window + +// +// define indicator buffers ... +#property indicator_buffers 7 +#property indicator_plots 7 + +// +// Fast ... +#property indicator_label1 "Fast" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrGreen +#property indicator_style1 STYLE_DOT +#property indicator_width1 1 + +// +// Slow ... +#property indicator_label2 "SLow" +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrRed +#property indicator_style2 STYLE_DOT +#property indicator_width2 1 + +// +// Mid ... +#property indicator_label3 "Mid" +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrBisque +#property indicator_style3 STYLE_DASH +#property indicator_width3 1 + +// +// Long SL ... +#property indicator_label4 "Long SL" +#property indicator_type4 DRAW_LINE +#property indicator_color4 clrAqua +#property indicator_style4 STYLE_DASH +#property indicator_width4 1 + +// +// Short SL ... +#property indicator_label5 "Short SL" +#property indicator_type5 DRAW_LINE +#property indicator_color5 clrFuchsia +#property indicator_style5 STYLE_DASH +#property indicator_width5 1 + +// +// Long Market Fast ... +#property indicator_label6 "Long Fast" +#property indicator_type6 DRAW_LINE +#property indicator_color6 clrAqua +#property indicator_style6 STYLE_DOT +#property indicator_width6 1 +// +// Long Market Slow ... +#property indicator_label7 "Long Market Slow" +#property indicator_type7 DRAW_LINE +#property indicator_color7 clrFuchsia +#property indicator_style7 STYLE_DOT +#property indicator_width7 1 + +// +// Declare Buffers ... +#define fastBufferIndex 0 +#define slowBufferIndex 1 +#define midBufferIndex 2 +#define longSLBufferIndex 3 +#define shortSLBufferIndex 4 +#define longMarketFastBufferIndex 5 +#define longMarketSlowBufferIndex 6 + +// +double fastBuffer[]; +double slowBuffer[]; +double midBuffer[]; +double longSLBuffer[]; +double shortSLBuffer[]; +double longMarketFastBuffer[]; +double longMarketSlowBuffer[]; + +// +int lastCrossOverIndex = 0; +double lastCrossOver = 0.0; + +// +int lastCrossUnderIndex = 0; +double lastCrossUnder = 0.0; + +// +double lastLongSL = 0.0; +int lastLongSLIndex = 0; + +// +double lastShortSL = 0.0; +int lastShortSLIndex = 0; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + + // + // Validating Input Parameters ... + if ( + fastShift < 0 || + slowShift < 0 || + marketLength <= 0 || + slowShift < fastShift + ) { + return INIT_PARAMETERS_INCORRECT; + } + + // + // Fast ... + SetIndexBuffer(fastBufferIndex, fastBuffer); + + // + // Slow ... + SetIndexBuffer(slowBufferIndex, slowBuffer); + + // + // Mid ... + SetIndexBuffer(midBufferIndex, midBuffer); + + // + // Long SL ... + SetIndexBuffer(longSLBufferIndex, longSLBuffer); + + // + // Short SL ... + SetIndexBuffer(shortSLBufferIndex, shortSLBuffer); + + // + // Long Market Fast ... + SetIndexBuffer(longMarketFastBufferIndex, longMarketFastBuffer); + + // + // Long Market Slow ... + SetIndexBuffer(longMarketSlowBufferIndex, longMarketSlowBuffer); + + // + // initialization done ... + return(INIT_SUCCEEDED); +} + +// +// Do Calculation ... +int OnCalculate( + const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, marketLength); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate Flow ... + CalculateFlow(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculate Flow ... +void CalculateFlow( + const int &bar_index +) { + // + int fastLength = marketLength + fastShift; + int slowLength = marketLength + fastShift + slowShift; + + // + // Calculating Fast ... + double fast = iMA( + _Symbol, + _Period, + fastLength, + 0, + MODE_EMA, + PRICE_WEIGHTED, + bar_index + ); + fastBuffer[bar_index] = fast; + + // + // Calculating Slow ... + double slow = iMA( + _Symbol, + _Period, + slowLength, + 0, + MODE_EMA, + PRICE_WEIGHTED, + bar_index + ); + slowBuffer[bar_index] = slow; + + // + // Calculating XMa Mid ... + double xmaMid = iMA( + _Symbol, + _Period, + marketLength, + 0, + MODE_EMA, + PRICE_HIGH, + bar_index + ); + midBuffer[bar_index] = xmaMid; + + // + // Calculating XMa Long Market Fast ... + double xmaLongMarketFast = iMA( + _Symbol, + _Period, + marketLength * longMarketFastMultiplier, + 0, + MODE_SMA, + PRICE_CLOSE, + bar_index + ); + longMarketFastBuffer[bar_index] = xmaLongMarketFast; + + // + // Calculating XMa Long Market Slow ... + double xmaLongMarketSlow = iMA( + _Symbol, + _Period, + marketLength * longMarketSlowMultiplier, + 0, + MODE_SMA, + PRICE_CLOSE, + bar_index + ); + longMarketSlowBuffer[bar_index] = xmaLongMarketSlow; + + // + // Find Cross Points ... + // + bool isCrossOver = fastBuffer[bar_index] > slowBuffer[bar_index] + && !( + fastBuffer[bar_index + 1] > slowBuffer[bar_index + 1] + ); + + // + bool isCrossUnder = fastBuffer[bar_index] < slowBuffer[bar_index] + && !( + fastBuffer[bar_index + 1] < slowBuffer[bar_index + 1] + ); + + // + // Find Trending ... + // + bool isTrendUp = fastBuffer[bar_index] > slowBuffer[bar_index] + && fastBuffer[bar_index] > fastBuffer[bar_index + 1] + && slowBuffer[bar_index] > slowBuffer[bar_index + 1]; + + // + bool isTrendDown = fastBuffer[bar_index] < slowBuffer[bar_index] + && fastBuffer[bar_index] < fastBuffer[bar_index + 1] + && slowBuffer[bar_index] < slowBuffer[bar_index + 1]; + + // + // Do Some Calculations ... + if (isCrossOver) { + // + lastCrossOverIndex = bar_index; + lastCrossOver = fastBuffer[bar_index]; + } else if (isCrossUnder) { + // + lastCrossUnderIndex = bar_index; + lastCrossUnder = fastBuffer[bar_index]; + } + + // + // Calculate SLs ... + // + // Long SL ... + if (lastCrossOver > 0) { + // + lastLongSLIndex = iLowest( + _Symbol, + _Period, + MODE_LOW, + marketLength, + lastCrossOverIndex + ); + + // + lastLongSL = iLow( + _Symbol, + _Period, + lastLongSLIndex + ); + } + + // + // Short SL ... + if (lastCrossUnder > 0) { + // + lastShortSLIndex = iHighest( + _Symbol, + _Period, + MODE_HIGH, + marketLength, + lastCrossUnderIndex + ); + + // + lastShortSL = iHigh( + _Symbol, + _Period, + lastShortSLIndex + ); + } + + // + longSLBuffer[bar_index] = lastLongSL; + shortSLBuffer[bar_index] = lastShortSL; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.xmma.signalling.mq4 b/xIndicators/x-saherelm.xmma.signalling.mq4 new file mode 100644 index 0000000..2d4a0d8 --- /dev/null +++ b/xIndicators/x-saherelm.xmma.signalling.mq4 @@ -0,0 +1,249 @@ +///////////////////////////////////////////////////////////////// +// +// SaherElm IT Center XMMA Signalling Indicator +// ------------------------------------------------------------- +// this indicator provides signals for XMMA Based Strategy ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +//////////////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XMMA Signalling Indicator" +#property strict + +// +// START Inputs ... +// +// +// Signal Show/Hide ... +input bool showSignals = true; // Show Signals +input bool showLongSignals = true; // Show Long Signals +input bool showShortSignals = true; // Show Short Signals + +// +// Signal Prefixe ... +input string signalPrefix = "XS_SG_OSC"; // Signal Prefix +input double signalArrowPositionThresholdFactor = 100; // Signal Arrow Dist of Price + +// +// Signal Colors ... +input string bullishSignalLabel = "X_BUY"; // Bullish Signal Label +input color bullishSignalColor = clrAqua; // Bullish Signal Color + +// +input string bearishSignalLabel = "X_SELL"; // Bearish Signal Label +input color bearishSignalColor = clrFuchsia; // Bearish Signal Color + +// +// here we specify alerting signals ... +input bool alertSignals = false; // Alert Signals +input bool pushNotificationSignals = false; // Push Notification Alert Signals + +// +// Indicator Inputs ... +input int marketLength = 7; // Market Length +input int fastShift = 1; // Fast Shift +input int slowShift = 3; // Slow Shift +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +// +#property indicator_chart_window + +// +// Includes our shared library ... +#include "../Libraries/x-saherelm.lib.mq4" + +// +// Includes our shared library ... +#include "../Libraries/x-saherelm.xmma.signal.lib.mq4" + +// +// Last Signalled Bar ... +int lastSignalledBar = 0; + +// +// here we specify logging enabled or not ... +bool enableLogging = true; + +// +// this is a Tag which attached to our Logger ... +string logTag = "XS_SG_OSC"; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + + // + // Validating Input Parameters ... + if ( + fastShift < 0 || + slowShift < 0 || + marketLength <= 0 || + slowShift < fastShift + ) { + return INIT_PARAMETERS_INCORRECT; + } + + // + return INIT_SUCCEEDED; +} + +// +// Do Calculation ... +int OnCalculate( + const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, marketLength); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + CalculateSignals(i); + } + + // + return rates_total; +} + +// +// De Initialization ... +void OnDeinit(const int reason) { + // + RemoveDraws(signalPrefix); +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Here we are Calculate Signals based on Oscillators and fill up +// related buffers ... +void CalculateSignals(const int &bar_index) { + // + // Retrieve Signal Exists ... + XSignalRequest request = CalculateSignal( + bar_index, + marketLength, + fastShift, + slowShift + ); + + // + if (!request.hasSignal) { + return; + } + + // + // Prevent Multiple Alerting at same Candle ... + if (lastSignalledBar == bar_index) { + return; + } + + // + lastSignalledBar = bar_index; + + // + bool hasLongSignal = request.type == X_LONG; + bool hasShortSignal = request.type == X_SHORT; + + // + // Signal Tag ... + string signalTAG = GenerateSignalTAG( + request.signal, + signalPrefix, + bullishSignalLabel, + bearishSignalLabel + ); + + // + // Handle Alerts ... + if (alertSignals && bar_index == 0) { + // + // General Alert ... + Alert(signalTAG); + + // + // Push Notifications ... + if (pushNotificationSignals) { + SendNotification(signalTAG); + } + } + + // + // Handle Can Show Signals ... + bool canShowSignals = showSignals && + (hasLongSignal ? showLongSignals : hasShortSignal ? showShortSignals : false); + if (canShowSignals) { + // + // Here i must to Draw Signal Shapes ... + DrawSignal( + request.signal, + 0, + 0, + signalArrowPositionThresholdFactor, + signalPrefix, // Signal Tag ... + bullishSignalLabel, // Long Signal Label ... + bullishSignalColor, + bearishSignalLabel, // Short Signal Label ... + bearishSignalColor + ); + } +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.xmtrend.mq4 b/xIndicators/x-saherelm.xmtrend.mq4 new file mode 100644 index 0000000..aa89e7b --- /dev/null +++ b/xIndicators/x-saherelm.xmtrend.mq4 @@ -0,0 +1,221 @@ + /////////////////////////////////////////////////////// +// +// SaherElm IT Center XMTR Indicator +// --------------------------------------------- +// retrieve market base info ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XMKT Indicator" +#property strict + +// +// START Inputs ... +// +// +// Market Specifications ... +input int marketLength = 20; // Market Length +input int atrMultiplier = 1; // ATR Multiplier +input int atrLength = 5; // ATR Period +input ENUM_APPLIED_PRICE source = PRICE_CLOSE; // Source +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_chart_window + +// +// define indicator buffers ... +#property indicator_buffers 3 +#property indicator_plots 3 + +// +// Declare Buffers ... +#define trendBufferIndex 0 +#define upTrendBufferIndex 1 +#define downTrendBufferIndex 2 + +// +double trendBuffer[]; +double upTrendBuffer[]; +double downTrendBuffer[]; + +// +// Includes our shared library ... +#include "../Libraries/x-saherelm.lib.mq4" +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + + // + // Validating Input Parameters ... + if (marketLength <= 0) { + return INIT_PARAMETERS_INCORRECT; + } + + // + // here we specify logging enabled or not ... + enableLogging = true; + + // + // this is a Tag which attached to our Logger ... + logTag = "XMTR"; + + // + // TREND ... + SetIndexLabel(trendBufferIndex, "Trend"); + SetIndexBuffer(trendBufferIndex, trendBuffer); + SetIndexStyle( + trendBufferIndex, + DRAW_LINE, + STYLE_DOT, + 1, + clrNONE + ); + + // + // UP Trend ... + SetIndexLabel(upTrendBufferIndex, "Up Trend"); + SetIndexBuffer(upTrendBufferIndex, upTrendBuffer); + SetIndexStyle( + upTrendBufferIndex, + DRAW_LINE, + STYLE_DOT, + 1, + clrNONE + ); + + // + // DOWN Trend ... + SetIndexLabel(downTrendBufferIndex, "Down Trend"); + SetIndexBuffer(downTrendBufferIndex, downTrendBuffer); + SetIndexStyle( + downTrendBufferIndex, + DRAW_LINE, + STYLE_DOT, + 1, + clrNONE + ); + + // + // initialization done ... + return(INIT_SUCCEEDED); +} + +// +// DeInitialization ... +void OnDeinit(const int reason) { + // + RemoveDraws(logTag); +} + +// +// Do Calculation ... +int OnCalculate( + const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(marketLength, 3); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate Short Cycle ... + CalculateBuffers( + i, + low + ); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculate Short Cycle ... +void CalculateBuffers( + const int bar_index, + const double &low[] +) { + // + double atr = GetMarketTRSMA( + bar_index, + atrLength + ); + + // + double smoothedAtr = (atr * atrMultiplier); + double upTrend = low[bar_index] - smoothedAtr; + double downTrend = low[bar_index] + smoothedAtr; + + // + double cciValue = GetMarketCCI( + bar_index, + marketLength, + source + ); + + // + // TODO: Complete this ... +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.xrange.mq4 b/xIndicators/x-saherelm.xrange.mq4 new file mode 100644 index 0000000..1359f57 --- /dev/null +++ b/xIndicators/x-saherelm.xrange.mq4 @@ -0,0 +1,294 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center XRange Indicator +// --------------------------------------------- +// saherelm implementation of above indicator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XRange Indicator" +#property strict + +// +// START Inputs ... +// +input int marketLength = 14; +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_chart_window + +// +#property indicator_buffers 3 + +// +#property indicator_plots 3 + +// +// Start Define Indicator Buffer Styles ... +// +// +// Highest High Buffer ... +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrGreen +#property indicator_style1 STYLE_DOT +#property indicator_width1 1 + +// +// Lowest Low Buffer ... +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrRed +#property indicator_style2 STYLE_DOT +#property indicator_width2 1 + +// +// Middle Buffer ... +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrYellow +#property indicator_style3 STYLE_DASH +#property indicator_width3 1 +// +// End Define Indicator Buffer Styles ... +// + +// +// Buffers ... +// +#define highestHighBufferIndex 0 +#define lowestLowBufferIndex 1 +#define middleBufferIndex 2 + +// +double highestHighBuffer[]; +double lowestLowBuffer[]; +double middleBuffer[]; + +// +datetime startTime; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + if ( + marketLength <= 0 + ) { + return INIT_PARAMETERS_INCORRECT; + } + + // + string hhLbl = StringConcatenate( + "XR HH(", marketLength, ")" + ); + SetIndexBuffer(highestHighBufferIndex, highestHighBuffer); + SetIndexLabel(highestHighBufferIndex, hhLbl); + + // + string llLbl = StringConcatenate( + "XR LL(", marketLength, ")" + ); + SetIndexBuffer(lowestLowBufferIndex, lowestLowBuffer); + SetIndexLabel(lowestLowBufferIndex, llLbl); + + // + string midLbl = StringConcatenate( + "XR Mid(", marketLength, ")" + ); + SetIndexBuffer(middleBufferIndex, middleBuffer); + SetIndexLabel(middleBufferIndex, midLbl); + + // + return INIT_SUCCEEDED; +} + +// +// Calculating what we want ... +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, marketLength); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculations ... + CalculateBuffers(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculations ... +void CalculateBuffers( + const int &bar_index +) { + // + // Retrieve Bar Time ... + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + if (startTime == 0) { + // + startTime = barTime; + SetIndicatorBuffersNone(bar_index); + return; + } + + // + int startBarIndex = iBarShift( + _Symbol, + _Period, + startTime + ); + + // + int startDistance = startBarIndex - bar_index; + if (startDistance < marketLength) { + // + SetIndicatorBuffersNone(bar_index); + return; + } + + // + // Highest High ... + int hhIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + marketLength, + bar_index + ); + double hh = iHigh( + _Symbol, + _Period, + hhIdx + ); + highestHighBuffer[bar_index] = hh; + + // + // Lowest Low ... + int llIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + marketLength, + bar_index + ); + double ll = iLow( + _Symbol, + _Period, + llIdx + ); + lowestLowBuffer[bar_index] = ll; + + // + // Middle Buffer ... + double mid = (hh + ll) / 2; + middleBuffer[bar_index] = mid; + + // + // Reset Start Time ... + startTime = 0; +} + +// +void SetIndicatorBuffersNone( + const int bar_index +) { + // + int lastBarIndex = bar_index + 1; + + // + double lastHighestHigh; + double lastLowestLow; + + // + // Highest High ... + if (ArraySize(highestHighBuffer) > lastBarIndex) { + lastHighestHigh = highestHighBuffer[lastBarIndex]; + } else { + lastHighestHigh = 0; + } + + // + // Lowest Low ... + if (ArraySize(lowestLowBuffer) > lastBarIndex) { + lastLowestLow = lowestLowBuffer[lastBarIndex]; + } else { + lastLowestLow = 0; + } + + // + highestHighBuffer[bar_index] = lastHighestHigh; + lowestLowBuffer[bar_index] = lastLowestLow; + + // + double mid = (lastHighestHigh + lastLowestLow) / 2; + middleBuffer[bar_index] = mid; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.xtpow.mq4 b/xIndicators/x-saherelm.xtpow.mq4 new file mode 100644 index 0000000..46ff59e --- /dev/null +++ b/xIndicators/x-saherelm.xtpow.mq4 @@ -0,0 +1,275 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center Trend Power Indicator +// --------------------------------------------- +// saherelm implementation of above indicator ... +// this indicator uses two ma line: +// - fast ma; +// - slow ma; +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm MA Indicator" +#property strict + +// +// START Inputs ... +// +input int marketLength = 7; // Market Length +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +#property indicator_separate_window + +// +#property indicator_plots 3 +#property indicator_buffers 3 +#property indicator_minimum 0 +#property indicator_maximum 100 + +// +#property indicator_levelcolor clrGray +#property indicator_levelstyle STYLE_DOT + +// +// Start Define Indicator Buffer Styles ... +// +#property indicator_type1 DRAW_HISTOGRAM +#property indicator_color1 clrLime +#property indicator_style1 STYLE_DOT +#property indicator_width1 1 + +// +#property indicator_type2 DRAW_HISTOGRAM +#property indicator_color2 clrRed +#property indicator_style2 STYLE_DOT +#property indicator_width2 1 + +// +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrYellow +#property indicator_style3 STYLE_DOT +#property indicator_width3 1 +// +// End Define Indicator Buffer Styles ... +// + +// +// Buffers ... +#define powerUpBufferIndex 0 +#define powerDownBufferIndex 1 +#define signalBufferIndex 2 + +double powerUpBuffer[]; +double powerDownBuffer[]; +double signalBuffer[]; + +// +#include "../Libraries/x-saherelm.lib.mq4" +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + if (marketLength <= 0) { + return INIT_PARAMETERS_INCORRECT; + } + + // + SetLevelValue(0, 0.0); + IndicatorSetString(INDICATOR_LEVELTEXT,0,""); + + // + SetLevelValue(1, 20.0); + IndicatorSetString(INDICATOR_LEVELTEXT,1,""); + + // + SetLevelValue(2, 50); + IndicatorSetString(INDICATOR_LEVELTEXT,2,""); + + // + SetLevelValue(3, 100); + IndicatorSetString(INDICATOR_LEVELTEXT,3,""); + + // + string pUpLbl = StringConcatenate( + "P Up (", marketLength, ")" + ); + SetIndexLabel(powerUpBufferIndex, pUpLbl); + SetIndexBuffer(powerUpBufferIndex, powerUpBuffer); + SetIndexDrawBegin(powerUpBufferIndex, marketLength + 1); + + // + string pDownLbl = StringConcatenate( + "P Down (", marketLength, ")" + ); + SetIndexLabel(powerDownBufferIndex, pDownLbl); + SetIndexBuffer(powerDownBufferIndex, powerDownBuffer); + SetIndexDrawBegin(powerDownBufferIndex, marketLength + 1); + + // + string pSignalLbl = StringConcatenate( + "P Signal (", marketLength, ")" + ); + SetIndexLabel(signalBufferIndex, pSignalLbl); + SetIndexBuffer(signalBufferIndex, signalBuffer); + SetIndexDrawBegin(signalBufferIndex, marketLength + 1); + + // + // here we specify logging enabled or not ... + enableLogging = true; + + // + // this is a Tag which attached to our Logger ... + logTag = "X_TPW_OSC"; + + // + return INIT_SUCCEEDED; +} + +// +// Calculating what we want ... +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + // because in some cases we may have more than one input for + // calculation and we must prevent any calculation + // untill we pass the biggest input length, here we get max Input length + // and then wait until pass it ... + int maxLength = MathMax(0, marketLength); + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // found which candles calculated before ... + limit = (prev_calculated == 0) ? rates_total - maxLength - 1 : rates_total - prev_calculated + 1; + + // + // this is the main loop of calculations, for each bar index ... + for (int i = limit - 1; i >= 0; i--) { + // + // Start Calculation here ... + // i is bar_index ... + + // + // Calculate Buffers ... + CalculateBuffers(i); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +// +// Calculating Ma ... +void CalculateBuffers( + const int &bar_index +) { + // + double powerUp = 0; + double powerDown = 0; + + // + int dailyCount = GetDailyCandleCount(); + double dailyHH = GetMarketHighestHigh( + bar_index, + dailyCount + ); + double dailyLL = GetMarketLowestLow( + bar_index, + dailyCount + ); + double dailyDiff = dailyHH - dailyLL; + double rate = dailyDiff / 100; + + // + for (int i = bar_index; i < bar_index + marketLength; i++) { + // + XOHCL c = GetCandleModel(i); + + // + double cRange = + MathAbs(c.open - c.close) + // MathAbs(c.high - c.low) + ; + bool isBullish = c.open < c.close; + + // + if (isBullish) { + powerUp += cRange; + } else { + powerDown += cRange; + } + } + + // + powerUp = powerUp / rate; + powerDown = powerDown / rate; + + // + int doubleMarketLength = (marketLength * 2); + double ema = GetMA( + bar_index, + doubleMarketLength, + 0, + MODE_EMA, + PRICE_WEIGHTED + ); + + // + double emaRate = GetMarketHighestHigh(bar_index, doubleMarketLength) - GetMarketLowestLow(bar_index, doubleMarketLength) / 100; + + // + double signal = (ema / 100) * rate; + double signalAddition = MathMin(powerUp, powerDown); + + // + powerUpBuffer[bar_index] = powerUp; + powerDownBuffer[bar_index] = powerDown; + signalBuffer[bar_index] = signal + signalAddition; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xIndicators/x-saherelm.zigzag.mq4 b/xIndicators/x-saherelm.zigzag.mq4 new file mode 100644 index 0000000..fbb073c --- /dev/null +++ b/xIndicators/x-saherelm.zigzag.mq4 @@ -0,0 +1,476 @@ +///////////////////////////////////////////////////////////////// +// +// SaherElm IT Center ZigZag Indicator +// ------------------------------------------------------------- +// this indicator provides signals for Main strategy ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +//////////////////////////////////////////////////////////////// +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm ZigZag Indicator" +#property strict + +// +// START Inputs ... +// +input int depth = 12; // Depth +input int deviation = 5; // Deviation +input int backStep = 3; // BackStep +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +// +// Includes our shared library ... +#include "../Libraries/x-saherelm.lib.mq4" + +// +// here we specify logging enabled or not ... +bool enableLogging = true; + +// +// this is a Tag which attached to our Logger ... +string logTag = "XS_ZG"; + +// +#property indicator_chart_window + +// +#property indicator_buffers 1 + +// +#property indicator_width1 1 +#property indicator_color1 clrAqua +// #property indicator_type1 DRAW_SECTION +// #property indicator_style1 STYLE_SOLID + +// // +// #property indicator_width2 1 +// #property indicator_color2 clrNONE +// #property indicator_type2 DRAW_NONE +// #property indicator_style2 STYLE_SOLID + +// // +// #property indicator_width3 1 +// #property indicator_color3 clrNONE +// #property indicator_type3 DRAW_NONE +// #property indicator_style3 STYLE_SOLID + +// +// Buffers ... +// +#define zigzagBufferIndex 0 +#define highBufferIndex 1 +#define lowBufferIndex 2 +// #define ziggyBufferIndex 3 + +// +double zigzagBuffer[]; +double highBuffer[]; +double lowBuffer[]; +// double ziggyBuffer[]; + +// +// recounting's depth of extremums ... +int level=3; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// Start Event Handlers ... +// +// +// Initialization ... +int OnInit() { + // + // Initialize what we want ... + + // + // Validating Input Parameters ... + if ( + depth <= 0 || + backStep < 0 || + deviation < 0 || + backStep >= depth + ) { + return INIT_PARAMETERS_INCORRECT; + } + + // + // Set Index Buffers of ZigZag ... + IndicatorBuffers(3); + + // + // ZigZag Buffer ... + SetIndexBuffer(zigzagBufferIndex, zigzagBuffer); + SetIndexStyle(zigzagBufferIndex, DRAW_SECTION); + SetIndexLabel(zigzagBufferIndex, "ZigZag"); + + // + // High Buffer ... + SetIndexBuffer(highBufferIndex, highBuffer); + SetIndexLabel(highBufferIndex, ""); + + // + // Low Buffer ... + SetIndexBuffer(lowBufferIndex, lowBuffer); + SetIndexLabel(lowBufferIndex, ""); + + // + // Ziggy Buffer ... + // SetIndexBuffer(ziggyBufferIndex, ziggyBuffer); + // SetIndexLabel(ziggyBufferIndex, ""); + + // + return(INIT_SUCCEEDED); +} + +// +// Do Calculation ... +int OnCalculate( + const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[] +) { + // + // this counts Available Bars ... + int limit; + + // + int maxLength = MathMax(depth, backStep); + + int i; + int counterZ; + int back; + int pos; + + // + int lastlowpos = 0; + int lasthighpos = 0; + int whatlookfor = 0; + + // + double extremum; + + // + double curlow = 0.0; + double curhigh = 0.0; + double lasthigh = 0.0; + double lastlow = 0.0; + + // + // input variable, we return 0 means nothing passed ... + if (rates_total < maxLength) { + return 0; + } + + // + // first calculations ... + if (prev_calculated == 0) { + limit = InitializeBuffers(); + } else { + // + // find first extremum in the depth ExtLevel or 100 last bars ... + i = counterZ = 0; + while(counterZ < level && i < 100) { + // + if(zigzagBuffer[i] != 0.0) { + counterZ++; + } + + // + i++; + } + + // + // no extremum found - recounting all from begin ... + if(counterZ == 0) { + limit = InitializeBuffers(); + } else { + // + // set start position to found extremum position ... + limit = i-1; + + // + //--- what kind of extremum? + if(lowBuffer[i] != 0.0) { + // + // low extremum ... + curlow = lowBuffer[i]; + + // + // will look for the next high extremum ... + whatlookfor=1; + } else { + // + // high extremum ... + curhigh = highBuffer[i]; + + // + // will look for the next low extremum ... + whatlookfor=-1; + } + + // + // clear the rest data ... + for(i = limit - 1; i >= 0; i--) { + // + lowBuffer[i]=0.0; + highBuffer[i]=0.0; + zigzagBuffer[i]=0.0; + } + } + } + + // + // Main Calculation Loop ... + for (i = limit; i >= 0; i--) { + // + // find lowest low in depth of bars ... + extremum = low[ + iLowest( + _Symbol, + _Period, + MODE_LOW, + depth, + i + ) + ]; + + // + // this lowest has been found previously ... + if (extremum == lastlow) { + extremum = 0.0; + } else { + // + // new last low ... + lastlow=extremum; + + // + // discard extremum if current low is too high ... + if(low[i] - extremum > deviation * _Point) { + extremum=0.0; + } else { + // + // clear previous extremums in backstep bars ... + for(back = 1; back <= backStep; back++) { + // + pos = i + back; + + // + if(lowBuffer[pos] != 0 && lowBuffer[pos] > extremum) { + lowBuffer[pos] = 0.0; + } + } + } + } + + // + // found extremum is current low ... + if (low[i] == extremum) { + lowBuffer[i] = extremum; + } else { + lowBuffer[i] = 0.0; + } + + // + // find highest high in depth of bars ... + extremum = high[ + iHighest( + _Symbol, + _Period, + MODE_HIGH, + depth, + i + ) + ]; + + // + // this highest has been found previously ... + if (extremum == lasthigh) { + extremum = 0.0; + } else { + // + // new last high ... + lasthigh=extremum; + + // + // discard extremum if current high is too low ... + if (extremum - high[i] > deviation * Point) { + extremum = 0.0; + } else { + // + // clear previous extremums in backstep bars ... + for(back = 1; back <= backStep; back++) { + // + pos = i + back; + + // + if (highBuffer[pos] != 0 && highBuffer[pos] < extremum) { + highBuffer[pos] = 0.0; + } + } + } + } + + // + // found extremum is current high ... + if (high[i] == extremum) { + highBuffer[i] = extremum; + } else { + highBuffer[i] = 0.0; + } + } + + // + // final cutting ... + if( whatlookfor == 0) { + // + lastlow = 0.0; + lasthigh = 0.0; + } else { + // + lastlow = curlow; + lasthigh = curhigh; + } + + // + for(i = limit; i >= 0; i--) { + switch(whatlookfor) { + // + // look for peak or lawn ... + case 0: + // + if (lastlow == 0.0 && lasthigh == 0.0) { + if(highBuffer[i]!=0.0) { + // + lasthigh = High[i]; + lasthighpos = i; + whatlookfor = -1; + + // + zigzagBuffer[i] = lasthigh; + } + + // + if(lowBuffer[i] != 0.0) { + // + lastlow = Low[i]; + lastlowpos = i; + whatlookfor = 1; + + // + zigzagBuffer[i] = lastlow; + } + } + break; + + // + // look for peak ... + case 1: + // + if ( + lowBuffer[i] != 0.0 && + lowBuffer[i] < lastlow && + highBuffer[i] == 0.0 + ) { + // + zigzagBuffer[lastlowpos] = 0.0; + lastlowpos = i; + lastlow = lowBuffer[i]; + zigzagBuffer[i] = lastlow; + } + + // + if(highBuffer[i] != 0.0 && lowBuffer[i] == 0.0) { + // + lasthigh = highBuffer[i]; + lasthighpos = i; + zigzagBuffer[i] = lasthigh; + + // + whatlookfor=-1; + } + break; + + // + // look for lawn ... + case -1: + // + if( + highBuffer[i] != 0.0 && + highBuffer[i] > lasthigh && + lowBuffer[i] == 0.0 + ) { + // + zigzagBuffer[lasthighpos] = 0.0; + lasthighpos = i; + lasthigh = highBuffer[i]; + zigzagBuffer[i] = lasthigh; + } + + // + if( + lowBuffer[i] !=0.0 && + highBuffer[i] == 0.0 + ) { + // + lastlow = lowBuffer[i]; + lastlowpos = i; + zigzagBuffer[i] = lastlow; + whatlookfor=1; + } + break; + } + } + + // + // Done ... + return rates_total; +} + +// +// De Initialization ... +void OnDeinit(const int reason) { + // + // RemoveDraws(signalPrefix); + ChartRedraw(0); +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// +int InitializeBuffers() { + // + ArrayInitialize(lowBuffer,0.0); + ArrayInitialize(highBuffer, 0.0); + ArrayInitialize(zigzagBuffer, 0.0); + + // + //--- first counting position + return(Bars - depth); +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xLibraries/x-saherelm.draw.lib.mq4 b/xLibraries/x-saherelm.draw.lib.mq4 new file mode 100644 index 0000000..776cde4 --- /dev/null +++ b/xLibraries/x-saherelm.draw.lib.mq4 @@ -0,0 +1,2010 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 Draw Global Library +// --------------------------------------------- +// saherelm useful tools and definitions ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Includes our shared library ... +#include "../Libraries/x-saherelm.log.lib.mq4" + +// +// Draw Highest High ... +bool DrawHighestHigh( + const int bar_index, + const int marketLen, + const string tag, + const int drawUntilBarIndex = 0, + const long chartID = 0, + const int subWindow = 0, + const color clr = clrAqua, + const ENUM_LINE_STYLE style = STYLE_DOT, + const int width = 1, + const bool back = false, + const bool selection = false, + const bool hidden = false, + const long zOrder = 0 +) { + // + bool result = false; + + // + // Calculate Highest High ... + int hhIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + marketLen, + bar_index + ); + + // + datetime hhTime = iTime( + _Symbol, + _Period, + hhIdx + ); + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + datetime drawUntilTime = + drawUntilBarIndex != bar_index ? + iTime( + _Symbol, + _Period, + drawUntilBarIndex + ) : + barTime + ; + + // + double hh = iHigh( + _Symbol, + _Period, + hhIdx + ); + + // + int rnd = rand(); + + // + // Define Label ... + string lbl = StringConcatenate( + tag, + "_HH(", marketLen ,")_", + hh, + "_", rnd + ); + + // + result = ObjectDelete( + chartID, + lbl + ); + + // + // Draw a Trend Line ... + result = DrawTrendLine( + chartID, + lbl, + subWindow, + hhTime, + hh, + drawUntilTime, + hh, + clr, + style, + width, + back, + selection, + hidden, + zOrder + ); + + // + return result; +} + +// +// Draw Lowest Low ... +bool DrawLowestLow( + const int bar_index, + const int marketLen, + const string tag, + const int drawUntilBarIndex = 0, + const long chartID = 0, + const int subWindow = 0, + const color clr = clrFuchsia, + const ENUM_LINE_STYLE style = STYLE_DOT, + const int width = 1, + const bool back = false, + const bool selection = false, + const bool hidden = false, + const long zOrder = 0 +) { + // + bool result = false; + + // + // Calculate Highest High ... + int llIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + marketLen, + bar_index + ); + + // + datetime llTime = iTime( + _Symbol, + _Period, + llIdx + ); + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + datetime drawUntilTime = + drawUntilBarIndex != bar_index ? + iTime( + _Symbol, + _Period, + drawUntilBarIndex + ) : + barTime + ; + + // + double ll = iLow( + _Symbol, + _Period, + llIdx + ); + + // + int rnd = rand(); + + // + // Define Label ... + string lbl = StringConcatenate( + tag, + "_LL(", marketLen ,")_", + ll, + "_", rnd + ); + + // + result = ObjectDelete( + chartID, + lbl + ); + + // + // Draw a Trend Line ... + result = DrawTrendLine( + chartID, + lbl, + subWindow, + llTime, + ll, + drawUntilTime, + ll, + clr, + style, + width, + back, + selection, + hidden, + zOrder + ); + + // + return result; +} + +// +// Draw Market Middle ... +bool DrawMarketMiddle( + const int bar_index, + const int marketLen, + const string tag, + const int drawUntilBarIndex = 0, + const long chartID = 0, + const int subWindow = 0, + const color clr = clrYellow, + const ENUM_LINE_STYLE style = STYLE_DOT, + const int width = 1, + const bool back = false, + const bool selection = false, + const bool hidden = false, + const long zOrder = 0 +) { + // + bool result = false; + + // + // Calculate Highest High ... + int llIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + marketLen, + bar_index + ); + + // + datetime llTime = iTime( + _Symbol, + _Period, + llIdx + ); + + // + double ll = iLow( + _Symbol, + _Period, + llIdx + ); + + // + // Calculate Highest High ... + int hhIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + marketLen, + bar_index + ); + + // + datetime hhTime = iTime( + _Symbol, + _Period, + hhIdx + ); + + // + double hh = iHigh( + _Symbol, + _Period, + hhIdx + ); + + // + double middle = ll + ((hh - ll) / 2); + datetime middleTime = hhIdx < llIdx + ? hhTime + : llTime + ; + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + datetime drawUntilTime = + drawUntilBarIndex != bar_index ? + iTime( + _Symbol, + _Period, + drawUntilBarIndex + ) : + barTime + ; + + // + int rnd = rand(); + + // + // Define Label ... + string lbl = StringConcatenate( + tag, + "_MID(", marketLen ,")_", + middle, + "_", rnd + ); + + // + result = ObjectDelete( + chartID, + lbl + ); + + // + // Draw a Trend Line ... + result = DrawTrendLine( + chartID, + lbl, + subWindow, + middleTime, + middle, + drawUntilTime, + middle, + clr, + style, + width, + back, + selection, + hidden, + zOrder + ); + + // + return result; +} + +// +// Start Arrow Functions ... +// +// +// Draw an Arrow Object on Chart ... +bool DrawArrow( + const long chartID = 0, // chart's ID + const string name = "Arrow", // arrow name + const int subWindow = 0, // subwindow index + datetime time = 0, // anchor point time + double price = 0, // anchor point price + const uchar arrowCode = OBJ_ARROW_UP, // arrow code + const ENUM_ARROW_ANCHOR anchor = ANCHOR_BOTTOM, // anchor point position + const color clr = clrAqua, // arrow color + const ENUM_LINE_STYLE style = STYLE_SOLID, // border line style + const int width = 3, // arrow size + const bool back = false, // in the background + const bool selection = false, // highlight to move + const bool hidden = false, // hidden in the object list + const long zOrder = 0 // Order Object ... +) { + // + // set anchor point coordinates if they are not set ... + ChangeArrowEmptyPoint(time, price); + + // + // reset the error value ... + ResetLastError(); + + // + // create an arrow ... + if(!ObjectCreate(chartID, name, OBJ_ARROW, subWindow, time, price)) { + // + string message = StringConcatenate(__FUNCTION__, + ": failed to create an arrow! Error code = ", + GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // set the arrow code ... + ObjectSetInteger(chartID, name, OBJPROP_ARROWCODE, arrowCode); + + // + // set anchor type ... + ObjectSetInteger(chartID, name, OBJPROP_ANCHOR, anchor); + + // + // set the arrow color ... + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // set the border line style ... + ObjectSetInteger(chartID, name, OBJPROP_STYLE, style); + + // + // set the arrow's size ... + ObjectSetInteger(chartID, name, OBJPROP_WIDTH, width); + + // + // display in the foreground (false) or background (true) ... + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // enable (true) or disable (false) the mode of moving the arrow by mouse + // when creating a graphical object using ObjectCreate function, the object cannot be + // highlighted and moved by default. Inside this method, selection parameter + // is false by default, if you want making it possible to highlight and move the object + // change it to true ... + ObjectSetInteger(chartID,name, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID,name, OBJPROP_SELECTED, selection); + + // + // hide (true) or display (false) graphical object name in the object list ... + ObjectSetInteger(chartID, name, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, name, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return(true); +} + +// +// Move the anchor point of Arrow ... +bool MoveArrow( + const long chartID = 0, // chart's ID + const string name = "Arrow", // object name + datetime time = 0, // anchor point time coordinate + double price = 0 // anchor point price coordinate +) { + // + // if point position is not set, move it to the current bar having Bid price ... + if(!time) { + time = TimeCurrent(); + } + + // + if(!price) { + price = SymbolInfoDouble(_Symbol, SYMBOL_BID); + } + + // + // reset the error value + ResetLastError(); + + // + // move the anchor point ... + if(!ObjectMove(chartID, name, 0, time, price)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to move the anchor point! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Delete an arrow ... +bool DeleteArrow( + const long chartID = 0, // chart's ID + const string name = "Arrow" // arrow name +) { + // + // reset the error value ... + ResetLastError(); + + // + // delete an arrow ... + if(!ObjectDelete(chartID, name)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to delete an arrow! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Change the arrow code ... +bool ArrowCodeChange( + const long chartID = 0, // chart's ID + const string name = "Arrow", // object name + const uchar code = 252 // arrow code +) { + // + // reset the error value ... + ResetLastError(); + + // + // change the arrow code ... + if(!ObjectSetInteger(chartID, name, OBJPROP_ARROWCODE, code)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to change the arrow code! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Change anchor type ... +bool ArrowAnchorChange( + const long chartID = 0, // chart's ID + const string name="Arrow", // object name + const ENUM_ARROW_ANCHOR anchor = ANCHOR_TOP // anchor type +) { + // + // reset the error value ... + ResetLastError(); + + // + // change anchor type ... + if(!ObjectSetInteger(chartID, name, OBJPROP_ANCHOR, anchor)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to change anchor type! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Check anchor point values and set default values +// for empty ones ... +void ChangeArrowEmptyPoint( + datetime &time, + double &price +) { + // + // if the point's time is not set, it will be on the current bar ... + if(!time) { + time = TimeCurrent(); + } + + // + // if the point's price is not set, it will have Bid value ... + if(!price) { + price = SymbolInfoDouble(_Symbol, SYMBOL_BID); + } +} +// +// End Arrow Functions ... +// + +// +// Start Horizontal Line Functions ... +// +// +// Create, Draw the horizontal line ... +bool DrawHorizontalLine( + const long chartID = 0, // chart's ID + const string name = "HLine", // line name + const int subWindow = 0, // subwindow index + double price = 0, // line price + const color clr = clrRed, // line color + const ENUM_LINE_STYLE style = STYLE_SOLID, // line style + const int width = 1, // line width + const bool back = false, // in the background + const bool selection = false, // highlight to move + const bool hidden = false, // hidden in the object list + const long zOrder = 0 // priority for mouse click +) { + // + // if the price is not set, set it at the current Bid price level ... + if(!price) { + price=SymbolInfoDouble(Symbol(),SYMBOL_BID); + } + + // + // reset the error value ... + ResetLastError(); + + // + // create a horizontal line ... + if(!ObjectCreate(chartID, name, OBJ_HLINE, subWindow, 0, price)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to create a horizontal line! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // set line color ... + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // set line display style ... + ObjectSetInteger(chartID, name, OBJPROP_STYLE, style); + + // + // set line width ... + ObjectSetInteger(chartID, name, OBJPROP_WIDTH, width); + + // + // display in the foreground (false) or background (true) ... + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // enable (true) or disable (false) the mode of moving the line by mouse + // when creating a graphical object using ObjectCreate function, the object cannot be + // highlighted and moved by default. Inside this method, selection parameter + // is true by default making it possible to highlight and move the object + ObjectSetInteger(chartID, name, OBJPROP_SELECTABLE, selection); + ObjectSetInteger(chartID, name, OBJPROP_SELECTED, selection); + + // + // hide (true) or display (false) graphical object name in the object list ... + ObjectSetInteger(chartID, name, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, name, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return(true); +} + +// +// Move horizontal line ... +bool MoveHorizontalLine( + const long chartID = 0, // chart's ID + const string name = "HLine", // line name + double price = 0 // line price +) { + // + // if the line price is not set, move it to the current Bid price level ... + if(!price) { + price = SymbolInfoDouble(Symbol(),SYMBOL_BID); + } + + // + // reset the error value ... + ResetLastError(); + + // + // move a horizontal line ... + if(!ObjectMove(chartID, name, 0, 0, price)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to move the horizontal line! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Delete a horizontal line ... +bool DeleteHorizontalLine( + const long chartID = 0, // chart's ID + const string name = "HLine" // line name +) { + // + // reset the error value ... + ResetLastError(); + + // + // delete a horizontal line ... + if(!ObjectDelete(chartID, name)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to delete a horizontal line! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} +// +// End Horizontal Line Functions ... +// + +// +// Start Vertical Line Functions ... +// +// +// Create the vertical line ... +bool DrawVerticalLine( + const long chartID = 0, // chart's ID + const string name = "VLine", // line name + const int sub_window = 0, // subwindow index + datetime time = 0, // line time + const color clr=clrRed, // line color + const ENUM_LINE_STYLE style = STYLE_SOLID, // line style + const int width = 1, // line width + const bool back = false, // in the background + const bool selection = false, // highlight to move + const bool hidden = false, // hidden in the object list + const long zOrder = 0 // priority for mouse click +) { + // + // if the line time is not set, draw it via the last bar ... + if (!time) { + time = TimeCurrent(); + } + + // + // reset the error value + ResetLastError(); + + // + // create a vertical line ... + if (!ObjectCreate(chartID, name, OBJ_VLINE, sub_window, time, 0)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to create a vertical line! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return false; + } + + // + // set line color ... + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // set line display style ... + ObjectSetInteger(chartID, name, OBJPROP_STYLE, style); + + // + // set line width ... + ObjectSetInteger(chartID, name, OBJPROP_WIDTH, width); + + // + // display in the foreground (false) or background (true) ... + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // enable (true) or disable (false) the mode of moving the line by mouse + // when creating a graphical object using ObjectCreate function, the object cannot be + // highlighted and moved by default. Inside this method, selection parameter + // is true by default making it possible to highlight and move the object ... + ObjectSetInteger(chartID, name, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID, name, OBJPROP_SELECTED, selection); + + // + // hide (true) or display (false) graphical object name in the object list ... + ObjectSetInteger(chartID, name, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart + ObjectSetInteger(chartID, name, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return true; +} + +// +// Move the vertical line ... +bool MoveVerticalLine( + const long chartID = 0, // chart's ID + const string name = "VLine", // line name + datetime time = 0 // line time +) { + // + // if line time is not set, move the line to the last bar ... + if (!time) { + time = TimeCurrent(); + } + + // + // reset the error value ... + ResetLastError(); + + // + // move the vertical line ... + if(!ObjectMove(chartID, name, 0, time, 0)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to move the vertical line! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Delete the vertical line ... +bool DeleteVerticalLine( + const long chartID = 0, // chart's ID + const string name = "VLine" // line name +) { + // + // reset the error value ... + ResetLastError(); + + // + // delete the vertical line ... + if (!ObjectDelete(chartID, name)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to delete the vertical line! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return false; + } + + // + // successful execution ... + return true; +} +// +// End Vertical Line Functions ... +// + +// +// Start RectangleLabel Functions ... +// +// +// Create Rectangle Label Object ... +bool DrawRectangleLabel( + const long chartID = 0, // chart's ID + const string name = "RectLabel", // label name + const int subWindow = 0, // subwindow index + const int x = 0, // X coordinate + const int y = 0, // Y coordinate + const int width = 50, // width + const int height = 18, // height + const color back_clr = C'236,233,216', // background color + const ENUM_BORDER_TYPE border = BORDER_SUNKEN, // border type + const ENUM_BASE_CORNER corner = CORNER_LEFT_UPPER, // chart corner for anchoring + const color clr = clrRed, // flat border color (Flat) + const ENUM_LINE_STYLE style = STYLE_SOLID, // flat border style + const int lineWidth = 1, // flat border width + const bool back = false, // in the background + const bool selection = false, // highlight to move + const bool hidden = false, // hidden in the object list + const long zOrder = 0 // priority for mouse click +) { + // + // reset the error value ... + ResetLastError(); + + // + //--- create a rectangle label + if(!ObjectCreate(chartID, name, OBJ_RECTANGLE_LABEL, subWindow, 0, 0)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to create a rectangle label! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // set label coordinates ... + ObjectSetInteger(chartID, name, OBJPROP_XDISTANCE, x); + ObjectSetInteger(chartID, name, OBJPROP_YDISTANCE, y); + + // + // set label size ... + ObjectSetInteger(chartID, name, OBJPROP_XSIZE, width); + ObjectSetInteger(chartID, name, OBJPROP_YSIZE, height); + + // + // set background color ... + ObjectSetInteger(chartID, name, OBJPROP_BGCOLOR, back_clr); + + // + // set border type ... + ObjectSetInteger(chartID, name, OBJPROP_BORDER_TYPE, border); + + // + // set the chart's corner, relative to which point coordinates are defined ... + ObjectSetInteger(chartID, name, OBJPROP_CORNER, corner); + + // + // set flat border color (in Flat mode) ... + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // set flat border line style ... + ObjectSetInteger(chartID, name, OBJPROP_STYLE, style); + + // + // set flat border width ... + ObjectSetInteger(chartID, name, OBJPROP_WIDTH, lineWidth); + + // + // display in the foreground (false) or background (true) ... + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // enable (true) or disable (false) the mode of moving the label by mouse ... + ObjectSetInteger(chartID, name, OBJPROP_SELECTABLE, selection); + ObjectSetInteger(chartID, name, OBJPROP_SELECTED, selection); + + // + // hide (true) or display (false) graphical object name in the object list ... + ObjectSetInteger(chartID, name, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, name, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return(true); +} + +// +// Move Rectangle Label .. +bool MoveRectangleLabel( + const long chartID = 0, // chart's ID + const string name = "RectLabel", // label name + const int x = 0, // X coordinate + const int y=0 // Y coordinate +) { + // + // reset the error value ... + ResetLastError(); + + // + // move the rectangle label ... + if(!ObjectSetInteger(chartID, name, OBJPROP_XDISTANCE, x)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to move X coordinate of the label! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + if(!ObjectSetInteger(chartID, name, OBJPROP_YDISTANCE, y)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to move Y coordinate of the label! Error code = ",GetLastError() + ); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Delete the rectangle label ... +bool DeleteRectangleLabel( + const long chartID = 0, // chart's ID + const string name = "RectLabel" // label name +) { + // + // reset the error value ... + ResetLastError(); + + // + // delete the label ... + if(!ObjectDelete(chartID, name)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to delete a rectangle label! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Change Rectangle Label Size ... +bool ChangeSizeRectangleLabel( + const long chartID = 0, // chart's ID + const string name = "RectLabel", // label name + const int width = 50, // label width + const int height = 18 // label height +) { + // + // reset the error value ... + ResetLastError(); + + // + // change label size ... + if(!ObjectSetInteger(chartID, name, OBJPROP_XSIZE, width)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to change the label's width! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + if(!ObjectSetInteger(chartID, name, OBJPROP_YSIZE, height)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to change the label's height! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Change rectangle label border type ... +bool RectLabelChangeBorderType( + const long chartID = 0, // chart's ID + const string name = "RectLabel", // label name + const ENUM_BORDER_TYPE border = BORDER_SUNKEN // border type +) { + // + // reset the error value ... + ResetLastError(); + + // + // change border type ... + if(!ObjectSetInteger(chartID, name, OBJPROP_BORDER_TYPE, border)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to change the border type! Error code = ",GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} +// +// End RectangleLabel Functions ... +// + +// +// Start TrendLine Funcions ... +// +// Create a trend line by the given coordinates ... +bool DrawTrendLine( + const long chartID = 0, // chart's ID + const string name = "TrendLine", // line name + const int subWindow = 0, // subwindow index + datetime time1 = 0, // first point time + double price1 = 0, // first point price + datetime time2 = 0, // second point time + double price2 = 0, // second point price + const color clr = clrYellow, // line color + const ENUM_LINE_STYLE style = STYLE_SOLID, // line style + const int width = 1, // line width + const bool back = false, // in the background + const bool selection = false, // highlight to move + const bool rayRight = false, // line's continuation to the right + const bool hidden = false, // hidden in the object list + const long zOrder = 0 // priority for mouse click +) { + // + // set anchor points' coordinates if they are not set ... + ChangeTrendLineEmptyPoints( + time1, + price1, + time2, + price2 + ); + + // + // reset the error value ... + ResetLastError(); + + // + // create a trend line by the given coordinates ... + if(!ObjectCreate(chartID, name, OBJ_TREND, subWindow, time1, price1, time2, price2)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to create a trend line! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // set line color ... + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // set line display style ... + ObjectSetInteger(chartID, name, OBJPROP_STYLE, style); + + // + // set line width ... + ObjectSetInteger(chartID, name, OBJPROP_WIDTH, width); + + // + // display in the foreground (false) or background (true) ... + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // enable (true) or disable (false) the mode of moving the line by mouse + // when creating a graphical object using ObjectCreate function, the object cannot be + // highlighted and moved by default. Inside this method, selection parameter + // is true by default making it possible to highlight and move the object ... + ObjectSetInteger(chartID, name, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID, name, OBJPROP_SELECTED, selection); + + // + // enable (true) or disable (false) the mode of continuation of the line's display to the right ... + ObjectSetInteger(chartID, name, OBJPROP_RAY_RIGHT, rayRight); + + // + // hide (true) or display (false) graphical object name in the object list ... + ObjectSetInteger(chartID, name, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, name, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return(true); +} + +// +// Move trend line anchor point ... | +bool ChangeTrendLinePoint( + const long chartID = 0, // chart's ID + const string name = "TrendLine", // line name + const int pointindex = 0, // anchor point index + datetime time = 0, // anchor point time coordinate + double price = 0 // anchor point price coordinate +) { + // + // if point position is not set, move it to the current bar having Bid price ... + if (!time) { + time = TimeCurrent(); + } + + // + if (!price) { + price = SymbolInfoDouble(Symbol(),SYMBOL_BID); + } + + // + // reset the error value ... + ResetLastError(); + + // + // move trend line's anchor point ... + if(!ObjectMove(chartID, name, pointindex, time, price)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to move the anchor point! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// The function deletes the trend line from the chart ... +bool DeleteTrendLine( + const long chartID = 0, // chart's ID + const string name = "TrendLine" // line name +) { + // + // reset the error value ... + ResetLastError(); + + // + // delete a trend line ... + if(!ObjectDelete(chartID, name)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to delete a trend line! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Check the values of trend line's anchor points and set default ... +// values for empty ones ... +void ChangeTrendLineEmptyPoints( + datetime &time1, + double &price1, + datetime &time2, + double &price2 +) { + // + // if the first point's time is not set, it will be on the current bar ... + if (!time1) { + time1 = TimeCurrent(); + } + + // + // if the first point's price is not set, it will have Bid value ... + if (!price1) { + price1 = SymbolInfoDouble(Symbol(), SYMBOL_BID); + } + + // + // if the second point's time is not set, it is located 9 bars left from the second one ... + if (!time2) { + // + // array for receiving the open time of the last 10 bars ... + datetime temp[10]; + CopyTime(Symbol(), Period(), time1, 10, temp); + + // + // set the second point 9 bars left from the first one ... + time2 = temp[0]; + } + + // + // if the second point's price is not set, it is equal to the first point's one ... + if (!price2) { + price2 = price1; + } +} +// +// End TrendLine Functions ... +// + +// +// Start Text Functions ... +// +// Create and Draw a Text Object ... +bool DrawText( + const long chartID = 0, // chart's ID + const string name = "Text", // object name + const int subWindow = 0, // subwindow index + datetime time = 0, // anchor point time + double price = 0, // anchor point price + const string text = "Text", // the text itself + const string font = "Arial", // font + const int fontSize = 10, // font size + const color clr = clrRed, // color + const double angle = 0.0, // text slope + const ENUM_ANCHOR_POINT anchor = ANCHOR_CENTER, // anchor type + const bool back = false, // in the background + const bool selection = false, // highlight to move + const bool hidden = true, // hidden in the object list + const long zOrder = 0 // priority for mouse click +) { + // + // set anchor point coordinates if they are not set ... + ChangeTextEmptyPoint(time,price); + + // + // reset the error value ... + ResetLastError(); + + // + //--- create Text object + if(!ObjectCreate(chartID, name, OBJ_TEXT, subWindow, time, price)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to create \"Text\" object! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // set the text ... + ObjectSetString(chartID, name , OBJPROP_TEXT, text); + + // + // set text font ... + ObjectSetString(chartID, name, OBJPROP_FONT, font); + + // + // set font size ... + ObjectSetInteger(chartID, name, OBJPROP_FONTSIZE, fontSize); + + // + // set the slope angle of the text ... + ObjectSetDouble(chartID, name, OBJPROP_ANGLE, angle); + + // + // set anchor type ... + ObjectSetInteger(chartID, name, OBJPROP_ANCHOR, anchor); + + // + // set color ... + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // display in the foreground (false) or background (true) ... + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // enable (true) or disable (false) the mode of moving the object by mouse ... + ObjectSetInteger(chartID, name, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID ,name, OBJPROP_SELECTED, selection); + + // + // hide (true) or display (false) graphical object name in the object list ... + ObjectSetInteger(chartID, name, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, name, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return(true); +} + +// +// Move the anchor point ... +bool MoveText( + const long chartID = 0, // chart's ID + const string name = "Text", // object name + datetime time = 0, // anchor point time coordinate + double price = 0 // anchor point price coordinate +) { + // + //--- if point position is not set, move it to the current bar having Bid price + if (!time) { + time = TimeCurrent(); + } + + // + if (!price) { + price = SymbolInfoDouble(_Symbol, SYMBOL_BID); + } + + // + // reset the error value ... + ResetLastError(); + + // + // move the anchor point .. + if(!ObjectMove(chartID, name, 0, time, price)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to move the anchor point! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Change the object text ... +bool ChangeText( + const long chartID = 0, // chart's ID + const string name = "Text", // object name + const string text = "Text" // text +) { + // + // reset the error value ... + ResetLastError(); + + // + // change object text ... + if(!ObjectSetString(chartID, name, OBJPROP_TEXT, text)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to change the text! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Delete Text object ... +bool DeleteText( + const long chartID = 0, // chart's ID + const string name = "Text" // object name +) { + // + // reset the error value ... + ResetLastError(); + + // + // delete the object ... + if(!ObjectDelete(chartID, name)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to delete \"Text\" object! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution + return(true); +} + +// +// Check anchor point values and set default values +// for empty ones ... +void ChangeTextEmptyPoint( + datetime &time, + double &price +) { + // + // if the point's time is not set, it will be on the current bar ... + if(!time) { + time = TimeCurrent(); + } + + // + // if the point's price is not set, it will have Bid value ... + if(!price) { + price = SymbolInfoDouble(_Symbol, SYMBOL_BID); + } + } +// +// End Text Functions ... +// + +// +// Start Fibonacchi Functions ... +// +// +// Create Fibonacci Retracement by the given coordinates ... +bool DrawFibonacci( + const long chartID = 0, // chart's ID + const string name="Fibonacci", // object name + const int subWindow = 0, // subwindow index + datetime time1 = 0, // first point time + double price1 = 0, // first point price + datetime time2 = 0, // second point time + double price2 = 0, // second point price + const color clr = clrRed, // object color + const ENUM_LINE_STYLE style = STYLE_SOLID, // object line style + const int width = 1, // object line width + const bool back = false, // in the background + const bool selection = true, // highlight to move + const bool rayRight = false, // object's continuation to the right + const bool hidden = true, // hidden in the object list + const long zOrder = 0 // priority for mouse click +) { + // + // set anchor points' coordinates if they are not set ... + ChangeFibonacciEmptyPoints(time1, price1, time2, price2); + + // + // reset the error value ... + ResetLastError(); + + // + // Create Fibonacci Retracement by the given coordinates ... + if (!ObjectCreate(chartID, name, OBJ_FIBO, subWindow, time1, price1, time2, price2)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to create \"Fibonacci Retracement\"! Error code = " , GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // set color ... + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // set line style ... + ObjectSetInteger(chartID, name, OBJPROP_STYLE, style); + + // + // set line width ... + ObjectSetInteger(chartID, name, OBJPROP_WIDTH, width); + + // + // display in the foreground (false) or background (true) ... + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // enable (true) or disable (false) the mode of highlighting the channel for moving + // when creating a graphical object using ObjectCreate function, the object cannot be + // highlighted and moved by default. Inside this method, selection parameter + // is true by default making it possible to highlight and move the object ... + ObjectSetInteger(chartID, name, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID, name, OBJPROP_SELECTED, selection); + + // + // enable (true) or disable (false) the mode of continuation of the object's display to the right ... + ObjectSetInteger(chartID, name, OBJPROP_RAY_RIGHT, rayRight); + + // + // hide (true) or display (false) graphical object name in the object list ... + ObjectSetInteger(chartID, name, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, name, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return(true); +} + +// +// Create Fibonacci Retracement by the given coordinates ... +bool DrawCustomFibonacci( + // + int levels, // number of level lines + double &values[], // values of level lines + color &colors[], // color of level lines + ENUM_LINE_STYLE &styles[], // style of level lines + int &widths[], // width of level lines + string &descriptions[], // level Descriptions + // + const long chartID = 0, // chart's ID + const string name = "Fibonacci", // object name + const int subWindow = 0, // subwindow index + datetime time1 = 0, // first point time + double price1 = 0, // first point price + datetime time2 = 0, // second point time + double price2 = 0, // second point price + const color clr = clrAqua, // object color + const ENUM_LINE_STYLE style = STYLE_DOT, // object line style + const int width = 1, // object line width + const bool back = false, // in the background + const bool selection = true, // highlight to move + const bool rayRight = false, // object's continuation to the right + const bool hidden = true, // hidden in the object list + const long zOrder = 0 // priority for mouse click +) { + // + // set anchor points' coordinates if they are not set ... + ChangeFibonacciEmptyPoints(time1, price1, time2, price2); + + // + // reset the error value ... + ResetLastError(); + + // + // Create Fibonacci Retracement by the given coordinates ... + if (!ObjectCreate(chartID, name, OBJ_FIBO, subWindow, time1, price1, time2, price2)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to create \"Fibonacci Retracement\"! Error code = " , GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // set color ... + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // set line style ... + ObjectSetInteger(chartID, name, OBJPROP_STYLE, style); + + // + // set line width ... + ObjectSetInteger(chartID, name, OBJPROP_WIDTH, width); + + // + // display in the foreground (false) or background (true) ... + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // enable (true) or disable (false) the mode of highlighting the channel for moving + // when creating a graphical object using ObjectCreate function, the object cannot be + // highlighted and moved by default. Inside this method, selection parameter + // is true by default making it possible to highlight and move the object ... + ObjectSetInteger(chartID, name, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID, name, OBJPROP_SELECTED, selection); + + // + // enable (true) or disable (false) the mode of continuation of the object's display to the right ... + ObjectSetInteger(chartID, name, OBJPROP_RAY_RIGHT, rayRight); + + // + // hide (true) or display (false) graphical object name in the object list ... + ObjectSetInteger(chartID, name, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, name, OBJPROP_ZORDER, zOrder); + + // + // Change Levels Of Fibonacci ... + bool result = FibonacciLevelsSet( + levels, + values, + colors, + styles, + widths, + descriptions, + chartID, + name + ); + + // + // successful execution ... + return result; +} + +// +// Set number of levels and their parameters ... +bool FibonacciLevelsSet( + int levels, // number of level lines + double &values[], // values of level lines + color &colors[], // color of level lines + ENUM_LINE_STYLE &styles[], // style of level lines + int &widths[], // width of level lines + string &descriptions[], // level Descriptions + const long chartID = 0, // chart's ID + const string name = "Fibonacci" // object name +) { + // + // check array sizes ... + if( + levels!=ArraySize(colors) || + levels!=ArraySize(styles) || + levels!=ArraySize(widths) || + levels!=ArraySize(widths) + ) { + // + string message = StringConcatenate( + __FUNCTION__, + ": array length does not correspond to the number of levels, error!" + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // set the number of levels ... + ObjectSetInteger(chartID, name, OBJPROP_LEVELS, levels); + + // + // set the properties of levels in the loop ... + for(int i = 0; i < levels; i++) { + // + // level value ... + ObjectSetDouble(chartID, name, OBJPROP_LEVELVALUE, i, values[i]); + + // + // level color ... + ObjectSetInteger(chartID, name, OBJPROP_LEVELCOLOR, i, colors[i]); + + // + // level style ... + ObjectSetInteger(chartID, name, OBJPROP_LEVELSTYLE, i, styles[i]); + + // + // level width ... + ObjectSetInteger(chartID, name, OBJPROP_LEVELWIDTH, i, widths[i]); + + // + // level description ... + // ObjectSetString(chartID, name, OBJPROP_LEVELTEXT, i, DoubleToString(100 * values[i], 1)); + ObjectSetString(chartID, name, OBJPROP_LEVELTEXT, i, descriptions[i]); + } + + // + // successful execution ... + return(true); +} + +// +// Move Fibonacci Retracement anchor point ... +bool FibonacciPointChange( + const long chartID = 0, // chart's ID + const string name = "Fibonacci", // object name + const int pointIndex = 0, // anchor point index + datetime time = 0, // anchor point time coordinate + double price = 0 // anchor point price coordinate +) { + // + // if point position is not set, move it to the current bar having Bid price ... + if (!time) { + time = TimeCurrent(); + } + + // + if (!price) { + price = SymbolInfoDouble(_Symbol, SYMBOL_BID); + } + + // + // reset the error value ... + ResetLastError(); + + // + // move the anchor point ... + if(!ObjectMove(chartID, name, pointIndex, time, price)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to move the anchor point! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Delete Fibonacci Retracement ... +bool DeleteFibonachi( + const long chartID = 0, // chart's ID + const string name = "Fibonacci" // object name +) { + // + // reset the error value ... + ResetLastError(); + + // + // delete the object ... + if(!ObjectDelete(chartID, name)) { + // + string message = StringConcatenate( + __FUNCTION__, + ": failed to delete \"Fibonacci Retracement\"! Error code = ", GetLastError() + ); + + // + LogMessage(message); + + // + return(false); + } + + // + // successful execution ... + return(true); +} + +// +// Check the values of Fibonacci Retracement anchor points and set +// default values for empty ones ... +void ChangeFibonacciEmptyPoints( + datetime &time1, + double &price1, + datetime &time2, + double &price2 +) { + // + // if the second point's time is not set, it will be on the current bar ... + if (!time2) { + time2 = TimeCurrent(); + } + + // + // if the second point's price is not set, it will have Bid value ... + if (!price2) { + price2 = SymbolInfoDouble(_Symbol, SYMBOL_BID); + } + + // + // if the first point's time is not set, it is located 9 bars left from the second one ... + if (!time1) { + // + // array for receiving the open time of the last 10 bars ... + datetime temp[10]; + CopyTime(Symbol(),Period(),time2,10,temp); + + // + // set the first point 9 bars left from the second one ... + time1 = temp[0]; + } + + // + // if the first point's price is not set, move it 200 points below the second one ... + if (!price1) { + price1 = price2 - 200 * SymbolInfoDouble(_Symbol, SYMBOL_POINT); + } +} +// +// End Fibonacci Functions ... +// + + +// +// Start General Functions ... +// +// +// Remove all Drawn Objects ... +void RemoveDraws(const string &tag) { + // + for(int iObj=ObjectsTotal()-1; iObj >= 0; iObj--) { + // + string on = ObjectName(iObj); + if (StringFind(on, tag) == 0) { + ObjectDelete(on); + } + } +} +// +// End General Functions ... +// \ No newline at end of file diff --git a/xLibraries/x-saherelm.indicator.lib.mq4 b/xLibraries/x-saherelm.indicator.lib.mq4 new file mode 100644 index 0000000..0e4b162 --- /dev/null +++ b/xLibraries/x-saherelm.indicator.lib.mq4 @@ -0,0 +1,450 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 Indicator Global Library +// --------------------------------------------------- +// saherelm useful tools and definitions ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Includes library ... +#include "../Libraries/x-saherelm.lib.mq4" + +// +// Includes Models library ... +#include "../Libraries/x-saherelm.models.lib.mq4" + +// +// START Global Requirement Functions ... +// +// +// Reading specified Buffer From ADX Indicator ... +double ReadXMABuffer( + const int bar_index, + const int buffer_index, + // + const int marketLen, + // + const double stp, + const double mxm, + // + const int shortCycleMult, + const int mediumCycleMult, + const int longCycleMult +) { + // + string xmaIndicatorName = "x-saherelm.x.xma"; + + // + double result = iCustom( + _Symbol, + _Period, + xmaIndicatorName, + // + // Inputs ... + marketLen, + stp, + mxm, + shortCycleMult, + mediumCycleMult, + longCycleMult, + MODE_SMA, + // + buffer_index, + bar_index + ); + + // + return result; +} + +// +// Reading specified Buffer from XHL Indicator ... +double ReadXHLBuffer( + const int bar_index, + const int buffer_index, + // + const int marketLen, + // + const int shortCycleMult, + const int mediumCycleMult, + const int longCycleMult +) { + // + string xhlIndicatorName = "x-saherelm.x.hl"; + + // + double result = iCustom( + _Symbol, + _Period, + xhlIndicatorName, + // + // Inputs ... + marketLen, + shortCycleMult, + mediumCycleMult, + longCycleMult, + MODE_SMA, + // + buffer_index, + bar_index + ); + + // + return result; +} + +// +// Reading ADX Values ... +double ReadADX( + const int bar_index, + const int marketLen, + const int mult +) { + // + double result; + + // + int period = marketLen * mult; + + // + result = iADX( + _Symbol, + _Period, + period, + PRICE_CLOSE, + MODE_MAIN, + bar_index + ); + + // + return result; +} + +// +// Reading Pivot States ... +XPvtState GetPVTState( + const int bar_index, + const int marketLen +) { + // + XPvtState result = {}; + + // + double hh = GetMarketHighestHigh( + bar_index, + marketLen + ); + + // + double ho = GetMarketHighestOpen( + bar_index, + marketLen + ); + + // + double hc = GetMarketHighestClose( + bar_index, + marketLen + ); + + // + double hl = GetMarketHighestLow( + bar_index, + marketLen + ); + + // + double ll = GetMarketLowestLow( + bar_index, + marketLen + ); + + // + double lo = GetMarketLowestOpen( + bar_index, + marketLen + ); + + // + double lc = GetMarketLowestClose( + bar_index, + marketLen + ); + + // + double lh = GetMarketLowestHigh( + bar_index, + marketLen + ); + + // + // Filling Result ... + // + result.hh = hh; + result.ho = ho; + result.hc = hc; + result.hl = hl; + + // + result.ll = ll; + result.lo = lo; + result.lc = lc; + result.lh = lh; + + // + return result; +} + +// +// Calculate XRange from Market ... +static XRState lastXRState; +XRState GetXRange( + const int bar_index, + const int rangeMarketLength +) { + // + XRState result = {}; + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + int marketBarIndex = bar_index + rangeMarketLength; + + // + // Highest High ... + // + int hhIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + marketBarIndex, + bar_index + ); + + // + double hh = iHigh( + _Symbol, + _Period, + hhIdx + ); + + // + // Lowest Low ... + // + int llIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + marketBarIndex, + bar_index + ); + + // + double ll = iLow( + _Symbol, + _Period, + llIdx + ); + + // + if (lastXRState.start == 0) { + // + lastXRState.start = barTime; + lastXRState.length = rangeMarketLength; + + // + lastXRState.hh = hh; + lastXRState.ll = ll; + + // + // Middle ... + double mid = (hh + ll) / 2; + lastXRState.mid = mid; + } else { + // + int startBarIndex = iBarShift( + _Symbol, + _Period, + lastXRState.start + ); + + // + if (startBarIndex - bar_index >= rangeMarketLength) { + // + lastXRState.start = barTime; + lastXRState.length = rangeMarketLength; + + // + lastXRState.hh = hh; + lastXRState.ll = ll; + + // + // Middle ... + double mid = (hh + ll) / 2; + lastXRState.mid = mid; + } + } + + // + result = lastXRState; + + // + return result; +} + +// +// Reading XTPowState from Indicatoe ... +XTPOWState GetXTPowState( + const int bar_index, + const int marketLen +) { + // + XTPOWState result = {}; + + // + // + double powerUp = 0; + double powerDown = 0; + double signal = 0; + + // + string indicatorName = "x-saherelm.xtpow"; + + // + int pUpIndex = 0; + int pDownIndex = 1; + int signalIndex = 2; + + // + powerUp = iCustom( + _Symbol, + _Period, + indicatorName, + // + marketLen, + // + pUpIndex, + bar_index + ); + + // + powerDown = iCustom( + _Symbol, + _Period, + indicatorName, + // + marketLen, + // + pDownIndex, + bar_index + ); + + // + signal = iCustom( + _Symbol, + _Period, + indicatorName, + // + marketLen, + // + signalIndex, + bar_index + ); + + // + result.signal = signal; + result.powerUp = powerUp; + result.powerDown = powerDown; + + // + return result; +} + +// +// Reading XRState From Indicator ... +XRState ReadXRange( + const int bar_index, + const int marketLen +) { + // + XRState result = {}; + + // + // Define Buffer Indexes ... + int hhBufferIndex = 0; + int llBufferIndex = 1; + int midBufferIndex = 2; + + // + string indicatorName = "x-saherelm.xrange"; + + // + // Read Values From XRange Indicator ... + + // + double hh = iCustom( + _Symbol, + _Period, + indicatorName, + // + // Inputs ... + marketLen, + // + hhBufferIndex, // Buffer Index ... + bar_index + ); + + // + double ll = iCustom( + _Symbol, + _Period, + indicatorName, + // + // Inputs ... + marketLen, + // + llBufferIndex, // Buffer Index ... + bar_index + ); + + // + double mid = iCustom( + _Symbol, + _Period, + indicatorName, + // + // Inputs ... + marketLen, + // + midBufferIndex, // Buffer Index ... + bar_index + ); + + // + // Filling Result ... + result.hh = hh; + result.ll = ll; + result.mid = mid; + + // + return result; +} +// +// END Indicator Reading Data ... +// diff --git a/xLibraries/x-saherelm.lib.mq4 b/xLibraries/x-saherelm.lib.mq4 new file mode 100644 index 0000000..cc0e23e --- /dev/null +++ b/xLibraries/x-saherelm.lib.mq4 @@ -0,0 +1,1662 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 Global Library +// --------------------------------------------- +// saherelm useful tools and definitions ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Includes Logger library ... +#include "../Libraries/x-saherelm.log.lib.mq4" + +// +// Includes Drawing library ... +#include "../Libraries/x-saherelm.draw.lib.mq4" + +// +static datetime lastBarTime; + +// +struct XOHCL { + double high; + double open; + double close; + double low; +}; + +// +struct XRange { + // + datetime time; + + // + double highestHigh; + double lowestLow; + + // + int levels; + int marketLength; + + // + double rate; +}; + +// +struct XPrice { + // + double askPrice; + double bidPrice; + double priceGap; + + // + double longEntry; + double longExit; + + // + double shortEntry; + double shortExit; +}; + +// +// START Functions ... +// + +// +// Determines current working is New Bar or not ... +bool IsNewBar() { + // + // Reading Last Bar Date ... + datetime curbar = (datetime)SeriesInfoInteger( + _Symbol, + _Period, + SERIES_LASTBAR_DATE + ); + + // + if(lastBarTime != curbar) { + // + lastBarTime = curbar; + return true; + } + + // + return false; +} + +// +// Determines we are in new Day or not ... +bool IsNewDay() { + // + bool result = false; + + // + // Reading Last Bar Date ... + datetime curbar = (datetime)SeriesInfoInteger( + _Symbol, + _Period, + SERIES_LASTBAR_DATE + ); + + // + if (lastBarTime == 0) { + lastBarTime = curbar; + } + + // + if (curbar == lastBarTime) { + return result; + } + + // + // Retrieve Day and Month and Year for Last Bar Time ... + int lastBarDay = TimeDay(lastBarTime); + int lastBarMonth = TimeMonth(lastBarTime); + int lastBarYear = TimeYear(lastBarTime); + + // + // Retrieve Day and Month and Year for Current Bar Time ... + int curBarDay = TimeDay(curbar); + int curBarMonth = TimeMonth(curbar); + int curBarYear = TimeYear(curbar); + + // + result = curBarDay > lastBarDay + || curBarMonth > lastBarMonth + || curBarYear > lastBarYear; + + // + return result; +} + +// +// Retrieve Number of Candles in a Day ... +int GetDailyCandleCount() { + // + int seconds = PeriodSeconds(_Period); + + // + int daySeconds = 24 * 60 * 60; + + // + int result = daySeconds / seconds; + + // + return result; +} + +// +// XRange Detector ... +XRange GetMarketRange( + const int bar_index, + const int marketLen, + const int levels +) { + // + XRange result = {}; + + // + result.levels = levels; + result.marketLength = marketLen; + + // + datetime time = iTime( + _Symbol, + _Period, + bar_index + ); + result.time = time; + + // + double highestHigh = GetMarketHighestHigh( + bar_index, + marketLen + ); + result.highestHigh = highestHigh; + + // + double lowestLow = GetMarketLowestLow( + bar_index, + marketLen + ); + result.lowestLow = lowestLow; + + // + double diff = highestHigh - lowestLow; + double rate = diff / levels; + + // + result.rate = rate; + + // + return result; +} + +// +// Retrieve RMA on Specific Candle ... +double GetRMA( + int bar_index, + int length +) { + // + double shortSMA = iMA(_Symbol, _Period, length, 0, MODE_SMA, PRICE_CLOSE, bar_index); + double mediumSMA = iMA(_Symbol, _Period, length * 2, 0, MODE_SMA, PRICE_CLOSE, bar_index); + double longSMA = iMA(_Symbol, _Period, length * 3, 0, MODE_SMA, PRICE_CLOSE, bar_index); + + // + double result = longSMA - mediumSMA + shortSMA; + + // + return result; +} + +// +// Retrieve Moving Average ... +double GetMA( + const int bar_index, + const int maLength, + const int maShift, + const ENUM_MA_METHOD maMethod, + const ENUM_APPLIED_PRICE appliedPrice +) { + // + double result = iMA( + _Symbol, + _Period, + maLength, + maShift, + maMethod, + appliedPrice, + bar_index + ); + + // + return result; +} + +// +// Calculate Fib Level ... +double GetFibonacciLevel( + double upPrice, + double downPrice, + double level, + int direction +) { + // + double ling = upPrice - downPrice; + double pLevel = (ling / 100) * (level * 100); + + // + double result = direction > 0 ? + upPrice - pLevel : + downPrice + pLevel; + result = NormalizeDouble(result, _Digits); + + // + return result; +} + +// +// Retrieve True Range ... +double GetTR( + const int bar_index +) { + // + double result = 0; + + // + double high = iHigh( + _Symbol, + _Period, + bar_index + ); + + // + double low = iLow( + _Symbol, + _Period, + bar_index + ); + + // + double prevClose = iClose( + _Symbol, + _Period, + bar_index + 1 + ); + + // + double highLowDif = high - low; + double hpCDif = MathAbs(high - prevClose); + double lpCDiff = MathAbs(low - prevClose); + + // + result = MathMax(highLowDif, hpCDif); + result = MathMax(result, lpCDiff); + + // + return result; +} + +// +// Calculate True Range Simple Moving Average ... +double GetMarketTRSMA( + const int bar_index, + const int marketLen +) { + // + double result = 0; + + // + // Create Barket Length Trs ... + double trs[]; + ArrayResize( + trs, + marketLen + ); + int index = 0; + double trSum = 0; + for (int i = bar_index; i < bar_index + marketLen; i++) { + // + double tr = GetTR(i); + trs[index] = tr; + + // + trSum += tr; + + // + index++; + } + + // + result = trSum / marketLen; + + // + return result; +} + +// +// Retrieve Commodity Channel ... +double GetMarketCCI( + const int bar_index, + const int marketLen, + const ENUM_APPLIED_PRICE appliedPrice = PRICE_CLOSE +) { + // + double result = 0; + + // + result = iCCI( + _Symbol, + _Period, + marketLen, + appliedPrice, + bar_index + ); + + // + return result; +} + +// +// this function check crossing up two Buffers ... +bool IsCrossedOver( + double &arr1[], + double &arr2[], + int index1, + int index2 = -1 +) { + // + // Normalize Index 2 Value ... + if (index2 < 0) { + index2 = index1 + 1; + } + + // + bool result = (arr1[index1] > arr2[index1]) && !(arr1[index2] > arr2[index2]); + + // + return result; +} + +// +// this function check crossing down two Buffers ... +bool IsCrossedUnder( + double &arr1[], + double &arr2[], + int index1, + int index2 = -1 +) { + // + // Normalize Index 2 Value ... + if (index2 < 0) { + index2 = index1 + 1; + } + + // + bool result = (arr1[index1] < arr2[index1]) && !(arr1[index2] < arr2[index2]); + + // + return result; +} + +// +// Convert points to Actual Point ... +double PointsToDouble(int points) { + // + double result = points * _Point; + return result; +} + +// +// Converts Pips to Points ... +int PipsToPoints(int pips) { + // + int result = pips * ((_Digits == 3 || _Digits == 5) ? 10 : 1); + return result; +} + +// +// Converts Pips to Double ... +double PipsToDouble(int pips) { + // + double result = PointsToDouble(PipsToPoints(pips)); + return result; +} + +// +// Converts Double Value to Pips ... +int PriceToPips(double value) { + // + if (value <= 0) { + return 0; + } + + // + double pipValue = _Point * MathPow(10, _Digits); + int result = (int)(value / pipValue); + + // + return result; +} + +// +// Converts Pips to Double ... +double PipsToPrice(int pips) { + // + if (pips <= 0) { + return 0; + } + + // + double pipValue = _Point * MathPow(10, _Digits); + double result = pipValue * pips; + + // + return result; +} + +// +// Generate ATR StopLoss Value ... +double CalculateATRSL( + int period, + double multiplier +) { + // + if (period <= 0 || multiplier <= 0) { + return 0; + } + + // + double atrValue = iATR( + _Symbol, + _Period, + period, + 0 + ); + + // + double result = atrValue * multiplier; + + // + return result; +} + +// +// Detect Candle Type ... +// Bullish => means close > open ... +bool IsBullishCandle( + const int bar_index +) { + // + // Temp Result ... + bool result = false; + + // + if (bar_index < 0) { + return result; + } + + // + double open = iOpen( + _Symbol, + _Period, + bar_index + ); + + // + double close = iClose( + _Symbol, + _Period, + bar_index + ); + + // + result = IsBullishCandle( + open, + close + ); + + // + return result; +} + +bool IsBullishCandle( + const double open, + const double close +) { + // + // Temp Result ... + bool result = false; + + // + result = open < close; + + // + return result; +} + +// +// Detect Candle Type ... +// Bearish => means close < open ... +bool IsBearishCandle( + const int bar_index +) { + // + // Temp Result ... + bool result = false; + + // + if (bar_index < 0) { + return result; + } + + // + double open = iOpen( + _Symbol, + _Period, + bar_index + ); + + // + double close = iClose( + _Symbol, + _Period, + bar_index + ); + + // + result = IsBearishCandle( + open, + close + ); + + // + return result; +} + +bool IsBearishCandle( + const double open, + const double close +) { + // + // Temp Result ... + bool result = false; + + // + result = open > close; + + // + return result; +} + +// +// Retrieve a Candle Info ... +XOHCL GetCandleModel( + const int bar_index +) { + // + XOHCL result = {}; + + // + double high = iHigh( + _Symbol, + _Period, + bar_index + ); + result.high = high; + + // + double open = iOpen( + _Symbol, + _Period, + bar_index + ); + result.open = open; + + // + double close = iClose( + _Symbol, + _Period, + bar_index + ); + result.close = close; + + // + double low = iLow( + _Symbol, + _Period, + bar_index + ); + result.low = low; + + // + return result; +} + +// +// Retrieve Market Current Prices for Signals ... +XPrice GetPrice() { + // + XPrice result = {}; + + // + RefreshRates(); + + // + double askPrice = SymbolInfoDouble( + _Symbol, + SYMBOL_ASK + ); + + // + double bidPrice = SymbolInfoDouble( + _Symbol, + SYMBOL_BID + ); + + // + double priceGap = MathAbs(bidPrice - askPrice); + + // + result.askPrice = askPrice; + result.bidPrice = bidPrice; + result.priceGap = priceGap; + + // + result.longEntry = askPrice; + result.longExit = bidPrice; + + // + result.shortEntry = bidPrice; + result.shortExit = askPrice; + + // + return result; +} + +// +// Detect Market Has Sharp Bullish or not ... +bool IsSharpBullishDetected( + const int bar_index, // Bar Index ... + const int marketLen, // Market Length ... + // + const double shpDetectMultipliers // Sharp Detect Multiplier +) { + // + bool result = false; + + // + double open = iOpen( + _Symbol, + _Period, + bar_index + ); + + // + double close = iClose( + _Symbol, + _Period, + bar_index + ); + + // + double high = iHigh( + _Symbol, + _Period, + bar_index + ); + + // + double low = iLow( + _Symbol, + _Period, + bar_index + ); + + // + double minValue = 0; + double maxValue = 0; + int positionedLength = bar_index + marketLen; + + // + for (int i = bar_index; i < positionedLength; i++) { + // + double cHigh = iHigh( + _Symbol, + _Period, + i + ); + + // + double cLow = iLow( + _Symbol, + _Period, + i + ); + + // + minValue += MathMin(cLow, cHigh); + maxValue += MathMax(cLow, cHigh); + } + + // + double minAvg = minValue / positionedLength; + double maxAvg = maxValue / positionedLength; + + // + double shpValue = shpDetectMultipliers * _Point; + + // + result = (low - minAvg) > shpValue; + + // + int index = bar_index; + while ( + index < positionedLength + || !result + ) { + // + low = iLow( + _Symbol, + _Period, + index + ); + + // + result = result + || (low - minAvg) > shpValue; + + // + index++; + }; + + // + return result; +} + +// +// Detect Market Has Sharp Bullish or not ... +bool IsSharpBearishDetected( + const int bar_index, // Bar Index ... + const int marketLen, // Market Length ... + // + const double shpDetectMultipliers // Sharp Detect Multiplier +) { + // + bool result = false; + + // + double open = iOpen( + _Symbol, + _Period, + bar_index + ); + + // + double close = iClose( + _Symbol, + _Period, + bar_index + ); + + // + double high = iHigh( + _Symbol, + _Period, + bar_index + ); + + // + double low = iLow( + _Symbol, + _Period, + bar_index + ); + + // + double minValue = 0; + double maxValue = 0; + int positionedLength = bar_index + marketLen; + + // + for (int i = bar_index; i < positionedLength; i++) { + // + double cHigh = iHigh( + _Symbol, + _Period, + i + ); + + // + double cLow = iLow( + _Symbol, + _Period, + i + ); + + // + minValue += MathMin(cLow, cHigh); + maxValue += MathMax(cLow, cHigh); + } + + // + double minAvg = minValue / positionedLength; + double maxAvg = maxValue / positionedLength; + + // + double shpValue = shpDetectMultipliers * _Point; + + // + result = (high - maxAvg) > shpValue; + + // + int index = bar_index; + while ( + index < positionedLength + || !result + ) { + // + high = iHigh( + _Symbol, + _Period, + index + ); + + // + result = result + || (high - maxAvg) > shpValue; + + // + index++; + }; + + // + return result; +} + +// +// Retrieve Highest High Value based on Given Market ... +double GetMarketHighestHigh( + // + const int bar_index, // Bar Index ... + const int marketLen // Market Length ... +) { + // + // Empty Result ... + double result = 0.0; + + // + // Retrieve Desired Bar Index ... + int foundedBarIndex = iHighest( + _Symbol, + _Period, + MODE_HIGH, + marketLen, + bar_index + ); + + // + // Retrieve Price ... + result = iHigh( + _Symbol, + _Period, + foundedBarIndex + ); + + // + return result; +} + +// +// Retrieve Highest Low Value based on Given Market ... +double GetMarketHighestLow( + // + const int bar_index, // Bar Index ... + const int marketLen // Market Length ... +) { + // + // Empty Result ... + double result = 0.0; + + // + // Retrieve Desired Bar Index ... + int foundedBarIndex = iHighest( + _Symbol, + _Period, + MODE_LOW, + marketLen, + bar_index + ); + + // + // Retrieve Price ... + result = iLow( + _Symbol, + _Period, + foundedBarIndex + ); + + // + return result; +} + +// +// Retrieve Highest Open Value based on Given Market ... +double GetMarketHighestOpen( + // + const int bar_index, // Bar Index ... + const int marketLen // Market Length ... +) { + // + // Empty Result ... + double result = 0.0; + + // + // Retrieve Desired Bar Index ... + int foundedBarIndex = iHighest( + _Symbol, + _Period, + MODE_OPEN, + marketLen, + bar_index + ); + + // + // Retrieve Price ... + result = iOpen( + _Symbol, + _Period, + foundedBarIndex + ); + + // + return result; +} + +// +// Retrieve Highest Close Value based on Given Market ... +double GetMarketHighestClose( + // + const int bar_index, // Bar Index ... + const int marketLen // Market Length ... +) { + // + // Empty Result ... + double result = 0.0; + + // + // Retrieve Desired Bar Index ... + int foundedBarIndex = iHighest( + _Symbol, + _Period, + MODE_CLOSE, + marketLen, + bar_index + ); + + // + // Retrieve Price ... + result = iClose( + _Symbol, + _Period, + foundedBarIndex + ); + + // + return result; +} + +// +// Retrieve Lowest Low Value based on Given Market ... +double GetMarketLowestLow( + // + const int bar_index, // Bar Index ... + const int marketLen // Market Length ... +) { + // + // Empty Result ... + double result = 0.0; + + // + // Retrieve Desired Bar Index ... + int foundedBarIndex = iLowest( + _Symbol, + _Period, + MODE_LOW, + marketLen, + bar_index + ); + + // + // Retrieve Price ... + result = iLow( + _Symbol, + _Period, + foundedBarIndex + ); + + // + return result; +} + +// +// Retrieve Lowest High Value based on Given Market ... +double GetMarketLowestHigh( + // + const int bar_index, // Bar Index ... + const int marketLen // Market Length ... +) { + // + // Empty Result ... + double result = 0.0; + + // + // Retrieve Desired Bar Index ... + int foundedBarIndex = iLowest( + _Symbol, + _Period, + MODE_HIGH, + marketLen, + bar_index + ); + + // + // Retrieve Price ... + result = iHigh( + _Symbol, + _Period, + foundedBarIndex + ); + + // + return result; +} + +// +// Retrieve Lowest Open Value based on Given Market ... +double GetMarketLowestOpen( + // + const int bar_index, // Bar Index ... + const int marketLen // Market Length ... +) { + // + // Empty Result ... + double result = 0.0; + + // + // Retrieve Desired Bar Index ... + int foundedBarIndex = iLowest( + _Symbol, + _Period, + MODE_OPEN, + marketLen, + bar_index + ); + + // + // Retrieve Price ... + result = iOpen( + _Symbol, + _Period, + foundedBarIndex + ); + + // + return result; +} + +// +// Retrieve Lowest Close Value based on Given Market ... +double GetMarketLowestClose( + // + const int bar_index, // Bar Index ... + const int marketLen // Market Length ... +) { + // + // Empty Result ... + double result = 0.0; + + // + // Retrieve Desired Bar Index ... + int foundedBarIndex = iLowest( + _Symbol, + _Period, + MODE_CLOSE, + marketLen, + bar_index + ); + + // + // Retrieve Price ... + result = iClose( + _Symbol, + _Period, + foundedBarIndex + ); + + // + return result; +} + +// +// Find last Candle which it's Low Price is +// less than given price ... +double GetLowLessCandlePrice( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int index = bar_index + 1; + double result = iLow( + _Symbol, + _Period, + index + ); + + // + while (result >= price) { + // + index++; + + // + result = iLow( + _Symbol, + _Period, + index + ); + } + + // + return result; +} +int GetLowLessCandleIndex( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int result = bar_index + 1; + double cP = iLow( + _Symbol, + _Period, + result + ); + + // + while (cP >= price) { + // + result++; + + // + cP = iLow( + _Symbol, + _Period, + result + ); + } + + // + return result; +} + +// +// Find last Candle which it's Low Price is +// great than given price ... +double GetLowGreatCandlePrice( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int index = bar_index + 1; + double result = iLow( + _Symbol, + _Period, + index + ); + + // + while (result >= price) { + // + index++; + + // + result = iLow( + _Symbol, + _Period, + index + ); + } + + // + return result; +} +int GetLowGreatCandleIndex( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int result = bar_index + 1; + double cP = iLow( + _Symbol, + _Period, + result + ); + + // + while (cP >= price) { + // + result++; + + // + cP = iLow( + _Symbol, + _Period, + result + ); + } + + // + return result; +} + +// +// Find last Candle which it's High Price is +// less than given price ... +double GetHighLessCandlePrice( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int index = bar_index + 1; + double result = iHigh( + _Symbol, + _Period, + index + ); + + // + while (result >= price) { + // + index++; + + // + result = iLow( + _Symbol, + _Period, + index + ); + } + + // + return result; +} +int GetHighLessCandleIndex( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int result = bar_index + 1; + double cP = iHigh( + _Symbol, + _Period, + result + ); + + // + while (cP >= price) { + // + result++; + + // + cP = iLow( + _Symbol, + _Period, + result + ); + } + + // + return result; +} + +// +// Find last Candle which it's High Price is +// great than given price ... +double GetHighGreatCandlePrice( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int index = bar_index + 1; + double result = iHigh( + _Symbol, + _Period, + index + ); + + // + while (result <= price) { + // + index++; + + // + result = iLow( + _Symbol, + _Period, + index + ); + } + + // + return result; +} +int GetHighGreatCandleIndex( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int result = bar_index + 1; + double cP = iHigh( + _Symbol, + _Period, + result + ); + + // + while (cP <= price) { + // + result++; + + // + cP = iLow( + _Symbol, + _Period, + result + ); + } + + // + return result; +} + +// +// Find last Candle which it's Open Price is +// less than given price ... +double GetOpenLessCandlePrice( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int index = bar_index + 1; + double result = iOpen( + _Symbol, + _Period, + index + ); + + // + while (result >= price) { + // + index++; + + // + result = iLow( + _Symbol, + _Period, + index + ); + } + + // + return result; +} +int GetOpenLessCandleIndex( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int result = bar_index + 1; + double cP = iOpen( + _Symbol, + _Period, + result + ); + + // + while (cP >= price) { + // + result++; + + // + cP = iLow( + _Symbol, + _Period, + result + ); + } + + // + return result; +} + +// +// Find last Candle which it's Open Price is +// less than given price ... +double GetOpenGreatCandlePrice( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int index = bar_index + 1; + double result = iOpen( + _Symbol, + _Period, + index + ); + + // + while (result <= price) { + // + index++; + + // + result = iLow( + _Symbol, + _Period, + index + ); + } + + // + return result; +} +int GetOpenGreatCandleIndex( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int result = bar_index + 1; + double cP = iOpen( + _Symbol, + _Period, + result + ); + + // + while (cP <= price) { + // + result++; + + // + cP = iLow( + _Symbol, + _Period, + result + ); + } + + // + return result; +} + +// +// Find last Candle which it's Close Price is +// less than given price ... +double GetCloseLessCandlePrice( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int index = bar_index + 1; + double result = iClose( + _Symbol, + _Period, + index + ); + + // + while (result >= price) { + // + index++; + + // + result = iLow( + _Symbol, + _Period, + index + ); + } + + // + return result; +} +int GetCloseLessCandleIndex( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int result = bar_index + 1; + double cP = iClose( + _Symbol, + _Period, + result + ); + + // + while (cP >= price) { + // + result++; + + // + cP = iLow( + _Symbol, + _Period, + result + ); + } + + // + return result; +} + +// +// Find last Candle which it's Close Price is +// great than given price ... +double GetCloseGreatCandlePrice( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int index = bar_index + 1; + double result = iClose( + _Symbol, + _Period, + index + ); + + // + while (result <= price) { + // + index++; + + // + result = iLow( + _Symbol, + _Period, + index + ); + } + + // + return result; +} +int GetCloseGreatCandleIndex( + // + const int bar_index, // Bar Index ... + const double price // Position Open Price ... +) { + // + int result = bar_index + 1; + double cP = iClose( + _Symbol, + _Period, + result + ); + + // + while (cP <= price) { + // + result++; + + // + cP = iLow( + _Symbol, + _Period, + result + ); + } + + // + return result; +} + +// +// Get Slope of a Line by it's two Point ... +double GetSlope( + double x1, + double y1, + double x2, + double y2 +) { + // + double result = (y2 - y1)/MathAbs(x2 - x1); + return result; +} +// +// END Functions ... +// \ No newline at end of file diff --git a/xLibraries/x-saherelm.log.lib.mq4 b/xLibraries/x-saherelm.log.lib.mq4 new file mode 100644 index 0000000..066b3f7 --- /dev/null +++ b/xLibraries/x-saherelm.log.lib.mq4 @@ -0,0 +1,91 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 Draw Global Library +// --------------------------------------------- +// saherelm useful tools and definitions ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Log Tag ... +static string logTag = ""; + +// +// Enable or Disable Logging ... +static bool enableLogging = false; + +// +// Start Log Messages ... +// + +// +// Logging a Message, specified for this EA ... +// using provided LogTag ... +void LogMessage(string message) { + // + if (!enableLogging) { + return; + } + + // + Print(logTag, " > ", message); +} + +// +// this used for logging series ... +void LogSeries( + double &series[], // which series to Log ... + int length = 0, // number of items to Log, 0 means all ... + int skip = 0 // number of items which skip before logging ... +) { + // + string msg = ""; + + // + int seriesSize = ArraySize(series); + if ( + skip < 0 + || length < 0 + || seriesSize == 0 + || skip > seriesSize + || skip + length > seriesSize + ) { + return; + } + + // + length = length == 0 ? + seriesSize : + length; + int start = skip > 1 ? + skip - 1 : + skip == 1 ? + 1 : + 0; + + // + // Loop through series items ... + for (int i = start; i < start + length; i++) { + // + msg += StringConcatenate( + "i[", i, "]: ", series[i], ", " + ); + } + + // + LogMessage(msg); +} +// +// End Log Messages ... +// + diff --git a/xLibraries/x-saherelm.models.lib.mq4 b/xLibraries/x-saherelm.models.lib.mq4 new file mode 100644 index 0000000..fa9903f --- /dev/null +++ b/xLibraries/x-saherelm.models.lib.mq4 @@ -0,0 +1,154 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 Models Global Library +// --------------------------------------------- +// saherelm useful tools and definitions ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// START STATIC Variables ... +// +// +static int totalSignals = 0; +static int totalLongSignals = 0; +static int totalShortSignals = 0; + +// +static double initialBalance = 0; + +// +static int countedBars = 0; +static bool isNewBar = false; +static bool isNewDay = false; +// +// END STATIC Variables ... +// + +// +// Start Models ... +// +// +// Signal Providers ... +enum ENUM_X_SIGNAL_PROVIDER { + X_UNKNOWN_PROVIDER, + X_XXX_PROVIDER, + X_XR_PROVIDER, + X_XTPW_PROVIDER +}; + +// +// these are different signal types ... +enum ENUM_X_SIGNAL_TYPE { + X_SIGNAL_NONE, + X_SIGNAL_LONG, + X_SIGNAL_SHORT, +}; + +// +// Model Market Highs and Lows ... +struct XPvtState { + // + double hh; + double ho; + double hc; + double hl; + + // + double ll; + double lo; + double lc; + double lh; +}; + +// +// we Model each signals as this type ... +struct XSignal { + // + // Signal Symbol ... + string symbol; + + // + // Signal Type ... + ENUM_X_SIGNAL_TYPE type; + + // + // Signal ID ... + int id; + + // + // Signal Ticket Number, when Opening Trade ... + int ticket; + + // + // Signal Provider ... + ENUM_X_SIGNAL_PROVIDER provider; + + // + // Target Point ... + double tp; + + // + // Stop Loss ... + double sl; + + // + // Signal Entry Price ... + double entry; + + // + // Signalling Time ... + datetime time; + + // + // Signal Comments ... + string comment; + + // + // Signal TAG ... + string tag; +}; + +// +// this is Signal Request Response model ... +struct XSignalRequest { + bool hasSignal; + XSignal signal; + ENUM_X_SIGNAL_TYPE type; + ENUM_X_SIGNAL_PROVIDER provider; +}; + +// +struct XRState { + // + datetime start; + int length; + + // + double hh; + double ll; + double mid; +}; + +// +struct XTPOWState { + // + double powerUp; + double powerDown; + + // + double signal; +}; +// +// End Models ... +// diff --git a/xLibraries/x-saherelm.signal.lib.mq4 b/xLibraries/x-saherelm.signal.lib.mq4 new file mode 100644 index 0000000..097ce74 --- /dev/null +++ b/xLibraries/x-saherelm.signal.lib.mq4 @@ -0,0 +1,1756 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 Signal Draw Global Library +// --------------------------------------------------- +// saherelm useful tools and definitions ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Includes library ... +#include "../Libraries/x-saherelm.lib.mq4" + +// +// Includes Indicator library ... +#include "../Libraries/x-saherelm.indicator.lib.mq4" + +// +// Includes Models library ... +#include "../Libraries/x-saherelm.models.lib.mq4" + +// +// Includes Drawing library ... +#include "../Libraries/x-saherelm.draw.lib.mq4" + +// +#include "../Libraries/x-saherelm.x.signal.lib.mq4" +#include "../Libraries/x-saherelm.xr.signal.lib.mq4" +#include "../Libraries/x-saherelm.xtpw.signal.lib.mq4" + +// +// START Global Requirement Functions ... +// +// +// END Global Requirement Functions ... +// + +// +// START Signal Related Functions ... +// +// +// Retrieve Signal Bar Index ... +int GetSignalBarIndex(XSignal &signal) { + // + // Temp Result ... + int result = -1; + + // + // Retriev Signal Bar Index ... + result = iBarShift( + _Symbol, + _Period, + signal.time + ); + + // + return result; +} + +// +string GetSignalProviderIdentifier( + ENUM_X_SIGNAL_PROVIDER provider +) { + // + string result = ""; + + // + switch (provider) { + // + case X_XXX_PROVIDER: + result = "XXX"; + break; + + // + case X_XR_PROVIDER: + result = "XR"; + break; + + // + case X_XTPW_PROVIDER: + result = "XTPW"; + break; + + // + default: + result = ""; + break; + } + + // + return result; +} + +// +ENUM_X_SIGNAL_PROVIDER GetSignalProvider(string identifier) { + // + ENUM_X_SIGNAL_PROVIDER result = X_UNKNOWN_PROVIDER; + + // + if ( + StringFind( + identifier, + GetSignalProviderIdentifier(X_XXX_PROVIDER) + ) > -1 + ) { + result = X_XXX_PROVIDER; + } else if ( + StringFind( + identifier, + GetSignalProviderIdentifier(X_XR_PROVIDER) + ) > -1 + ) { + result = X_XR_PROVIDER; + } else if ( + StringFind( + identifier, + GetSignalProviderIdentifier(X_XTPW_PROVIDER) + ) > -1 + ) { + result = X_XTPW_PROVIDER; + } + + // + return result; +} + +// +// Retrieve Signal Lots Per Trade ... +double GetSignalLottage( + const XSignal &signal, + const double defLotsPerTrade +) { + // + double result = defLotsPerTrade; + + // + bool isLong = signal.type == X_SIGNAL_LONG; + + // + switch (signal.provider) { + // + case X_XR_PROVIDER: + // + result = isLong ? + xRLongLotsPerTradePercent : + xRShortLotsPerTradePercent + ; + break; + + // + case X_XXX_PROVIDER: + // + result = isLong ? + xLongLotsPerTradePercent : + xShortLotsPerTradePercent + ; + break; + + // + case X_XTPW_PROVIDER: + // + result = isLong ? + xTPWLongLotsPerTradePercent : + xTPWShortLotsPerTradePercent + ; + break; + } + + // + return result; +} + +// +// Draw Specific Range On Chart ... +void DrawRange( + const XRange &range, + const long chartID = 0, + const int subWindowID = 0, + const string tag = "", + const color clr = clrYellow +) { + // + // Loop through Levels Count ... + for (int i = 0; i <= range.levels; i++) { + // + datetime time1 = iTime( + _Symbol, + _Period, + 1 + ); + + // + datetime time2 = iTime( + _Symbol, + _Period, + 0 + ); + + // + double price = range.lowestLow + (i * range.rate); + + // + string lbl = StringConcatenate( + tag, + "_XRL_", + price + ); + + // + DrawTrendLine( + chartID, + lbl, + subWindowID, + time1, + price, + time2, + price, + clr, + STYLE_DOT + ); + } +} + +// +// Draw Signal Shapes on Chart ... +bool DrawSignal( + const XSignal &signal, + long chartID = 0, + int subWindowID = 0, + const double positionThresholdFactor = 10, + string longSignalLabel = "X-Long", + color longSignalColor = clrAqua, + string shortSignalLabel = "X-Short", + color shortSignalColor = clrFuchsia +) { + // + // Generate isLongSignal Var ... + bool isLongSignal = signal.type == X_SIGNAL_LONG; + + // + // Signal Bar Index ... + int bar_index = iBarShift( + _Symbol, + _Period, + signal.time + ); + + // + // START Draw Signal Arrow ... + // + // + // Arrow Shape Name ... + string arrowName = StringConcatenate(signal.tag, "_Arrow_", signal.id); + + // + // Arrow Price ... + double arrowPrice = 0; + if (isLongSignal) { + // + arrowPrice = iLow( + _Symbol, + _Period, + bar_index + 1 + ); + + // + arrowPrice = arrowPrice - (positionThresholdFactor * _Point); + } else { + // + arrowPrice = iHigh( + _Symbol, + _Period, + bar_index + 1 + ); + + // + arrowPrice = arrowPrice + (positionThresholdFactor * _Point); + } + + // + // Arrow Code ... + uchar arrowCode = isLongSignal ? SYMBOL_ARROWUP : SYMBOL_ARROWDOWN; + + // + // Arrow Anchor Point ... + ENUM_ARROW_ANCHOR arrowAnchorPoint = isLongSignal ? ANCHOR_BOTTOM : ANCHOR_TOP; + + // + // Arrow Color ... + color arrowColor = isLongSignal ? longSignalColor : shortSignalColor; + + // + // Draw Signal Arrow Shape ... + bool result = DrawArrow( + chartID, + arrowName, + subWindowID, + signal.time, + arrowPrice, + arrowCode, + arrowAnchorPoint, + arrowColor + ); + // + // END Draw Signal Arrow ... + // + + // + // START Draw Signal SL/TP ... + // + string slLineName = StringConcatenate(signal.tag, "_SL_", signal.id); + string tpLineName = StringConcatenate(signal.tag, "_TP_", signal.id); + string entryLineName = StringConcatenate(signal.tag, "_ENTRY_", signal.id); + + // + color slColor = shortSignalColor; // isLongSignal ? shortSignalColor : longSignalColor; + color tpColor = longSignalColor; // isLongSignal ? shortSignalColor : longSignalColor; + color entryColor = clrGreen; + + // + datetime time1 = iTime( + _Symbol, + _Period, + bar_index + 1 + ); + + // + // Draw Enrty Price ... + result = DrawTrendLine( + chartID, + entryLineName, + subWindowID, + time1, + signal.entry, + signal.time, + signal.entry, + entryColor, + STYLE_SOLID, + 2 + ); + + // + // Draw Signal SL ... + if (signal.sl > 0) { + // + result = DrawTrendLine( + chartID, + slLineName, + subWindowID, + time1, + signal.sl, + signal.time, + signal.sl, + slColor, + STYLE_SOLID, + 2 + ); + } + + // + // Draw Signal TP ... + if (signal.tp > 0) { + // + result = DrawTrendLine( + chartID, + tpLineName, + subWindowID, + time1, + signal.tp, + signal.time, + signal.tp, + tpColor, + STYLE_SOLID, + 2 + ); + } + // + // END Draw Signal SL/TP ... + // + + // + // Start Draw Signal Label ... + // + // + string labelName = StringConcatenate(signal.tag, "_Label_", signal.id); + + // + double labelPrice = isLongSignal ? arrowPrice - (positionThresholdFactor * _Point) : arrowPrice + (positionThresholdFactor * _Point); + + // + string labelText = isLongSignal ? longSignalLabel : shortSignalLabel; + labelText = StringConcatenate( + labelText, + "_", + GetSignalProviderIdentifier(signal.provider) + ); + + // + result = DrawText( + chartID, + labelName, + subWindowID, + signal.time, + labelPrice, + labelText, + "Arial", + 8, + arrowColor, + 0, + ANCHOR_CENTER + ); + // + // End Draw Signal Label ... + // + + // + return result; +} + +// +// Trade on Specific Signal ... +bool TradeSignal( + XSignal &signal, + // + double volumePercent, + // + // Long ... + const string longSignalLabel, + const color longSignalColor, + // + // Short ... + const string shortSignalLabel, + const color shortSignalColor +) { + // + // Temp Result ... + bool result = false; + + // + if (initialBalance == 0) { + initialBalance = AccountInfoDouble(ACCOUNT_BALANCE); + } + + // + double balance = AccountInfoDouble(ACCOUNT_BALANCE); + int openPositions = CountOpenTrades(); + double volume = (volumePercent * initialBalance); + + // + if ( + signal.type != X_SIGNAL_LONG && + signal.type != X_SIGNAL_SHORT + ) { + return result; + } + + // + bool hasLongSignal = signal.type == X_SIGNAL_LONG; + + // + // Check TP and Entry Price ... + if ( + ( + hasLongSignal + && signal.entry > signal.tp + ) || + ( + !hasLongSignal + && signal.entry < signal.tp + ) + ) { + return result; + } + + // + // Order Operation ... + int operation = hasLongSignal ? + OP_BUY : + OP_SELL; + + // + // Detect Trade Color ... + color clr = hasLongSignal ? + longSignalColor : + shortSignalColor; + + // + // Generate Signal Comment ... + string label = hasLongSignal ? + longSignalLabel : + shortSignalLabel; + + // + // Generate Signal Comment ... + string comment = StringConcatenate( + signal.tag, + "_", signal.id, + "_", GetSignalProviderIdentifier(signal.provider), + "_", label + ); + + // + // Placing Order ... + int orderTicket = OrderSend( + _Symbol, + operation, + volume, + signal.entry, + 3, + signal.sl, + signal.tp, + comment, + signal.id, + 0, + clr + ); + + // + // Draw Signal Shape if Order Opened Successfully ... + if (orderTicket >= 0) { + // + signal.ticket = orderTicket; + + // + // Here i must to Draw Signal Shapes ... + bool isDrawn = DrawSignal( + signal, + 0, + 0, + 50, + longSignalLabel, // Long Signal Label ... + longSignalColor, + shortSignalLabel, // Short Signal Label ... + shortSignalColor + ); + + // + LogMessage( + StringConcatenate( + "Order [", orderTicket ,"]: Provided by: ", GetSignalProviderIdentifier(signal.provider) + ) + ); + + // + // TODO: here we have to check if there are another + // open positions which their entry price is bigger + // than current signal entry price, for long trades and + // their tp is high than current tp, ... + // close in profit trades or modify orders tp to current ... + // // + // if (CountOpenTrades() > 0) { + // // + // // Here we have to + // ModifyOpenTradesBasedOnCurrentTrade(signal); + // } + + // + result = true; + } + + // + return result; +} +// +// END Signal Related Functions ... +// + +// +// START Orders Functions ... +// +// +// Convert To XSignal Model ... +XSignal OrderToSignal() { + // + // Temp Result ... + XSignal result = {}; + result.type = X_SIGNAL_NONE; + + // + // Here we can get some usefull info based on selected order ... + double swap = OrderSwap(); + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + double stopLoss = OrderStopLoss(); + double openPrice = OrderOpenPrice(); + datetime openTime = OrderOpenTime(); + int magicNumber = OrderMagicNumber(); + double takeProfit = OrderTakeProfit(); + string comment = OrderComment(); + + // + ENUM_X_SIGNAL_PROVIDER provider = GetSignalProvider(comment); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // Conver Position to Signal ... + result.sl = stopLoss; + result.tp = takeProfit; + result.time = openTime; + result.symbol = _Symbol; + result.id = magicNumber; + result.comment = comment; + result.entry = openPrice; + result.provider = provider; + result.type = isLongOrder ? X_SIGNAL_LONG : X_SIGNAL_SHORT; + + // + return result; +} + +// +// START Count Orders ... +// +// +// Count Open Positions ... +int CountOpenTrades() { + // + int result = 0; + + // + // Loop through Orders ... + for (int i = 0; i < OrdersTotal(); i++) { + // + // Select indexed Order ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order ... + if (OrderSymbol() == _Symbol) { + result++; + } + } + } + + // + // Return Result ... + return result; +} + +// +// Count Open Long Positions ... +int CountOpenLongTrades() { + // + int result = 0; + + // + // Loop through Orders ... + for (int i = 0; i < OrdersTotal(); i++) { + // + // Select indexed Order ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order ... + if ( + OrderSymbol() == _Symbol + && OrderType() == OP_BUY + ) { + result++; + } + } + } + + // + // Return Result ... + return result; +} + +// +// Count Open Short Positions ... +int CountOpenShortTrades() { + // + int result = 0; + + // + // Loop through Orders ... + for (int i = 0; i < OrdersTotal(); i++) { + // + // Select indexed Order ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order ... + if ( + OrderSymbol() == _Symbol + && OrderType() == OP_SELL + ) { + result++; + } + } + } + + // + // Return Result ... + return result; +} +// +// END Count Orders ... +// + +// +// START Close Orders ... +// +// +// Close All Open Trades ... +bool CloseAllTrades() { + // + // Loop through all Positions ... + bool result = false; + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of All Trade Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + + // + return result; +} + +// +bool CloseAllProviderTrades( + ENUM_X_SIGNAL_PROVIDER provider +) { + // + bool result = false; + + // + // Loop through Signals ... + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + XSignal signal = OrderToSignal(); + + // + if (signal.provider == provider) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of All Provider Long Trades Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +bool CloseAllProviderLongTrades( + ENUM_X_SIGNAL_PROVIDER provider +) { + // + bool result = false; + + // + // Loop through Signals ... + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + XSignal signal = OrderToSignal(); + + // + if ( + signal.provider == provider + && signal.type == X_SIGNAL_LONG + ) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of All Provider Long Trades Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +bool CloseAllProviderShortTrades( + ENUM_X_SIGNAL_PROVIDER provider +) { + // + bool result = false; + + // + // Loop through Signals ... + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + XSignal signal = OrderToSignal(); + + // + if ( + signal.provider == provider + && signal.type == X_SIGNAL_SHORT + ) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of All Provider Long Trades Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +// Close All Open Long Trades ... +bool CloseAllLongTrades() { + // + // Loop through all Positions ... + bool result = false; + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + if (isLongOrder) { + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of All Long Trade Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +// Close All Open Short Trades ... +bool CloseAllShortTrades() { + // + // Loop through all Positions ... + bool result = false; + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + if (!isLongOrder) { + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of All Short Trade Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +// Close All In Profit Trades ... +bool CloseAllInProfitTrades() { + // + // Loop through all Positions ... + bool result = false; + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + if ( + profit > 0 + && profit > 50 * _Point + ) { + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of InProfit Trade Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +// Close All In DrawDown Trades ... +bool CloseAllInDrawDownTrades() { + // + // Loop through all Positions ... + bool result = false; + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + if (profit < 0) { + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of InDrawDown Trade Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +// Close Biggest In DrawDown Trades ... +bool CloseBiggestDrawDownTrade() { + // + // Loop through all Positions ... + bool result = false; + double drawDown = 0; + + // + // Find Biggest In DrawDown ... + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + if ( + profit < 0 + && MathAbs(profit) > drawDown + ) { + drawDown = profit; + } + } + } + } + + // + // Close Biggest In DrawDown ... + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + if ( + profit < 0 + && MathAbs(profit) >= drawDown + ) { + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of Max InDrawDown Trade Closing issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +// Close All Long Time Trades ... +bool CloseAllLongTimeTrades( + const int passedCandles, + const ENUM_X_SIGNAL_PROVIDER provider = X_UNKNOWN_PROVIDER +) { + // + bool result = false; + + // + if (passedCandles <= 0) { + return result; + } + + // + int currentBarIndex = iBarShift( + _Symbol, + _Period, + TimeCurrent() + ); + + // + int openTrades = CountOpenTrades(); + + // + // Loop through all Positions ... + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + datetime openTime = OrderOpenTime(); + int openBarIndex = iBarShift( + _Symbol, + _Period, + openTime + ); + string comment = OrderComment(); + + // + ENUM_X_SIGNAL_PROVIDER orderProvider = GetSignalProvider(comment); + bool isProviderVerified = + provider == X_UNKNOWN_PROVIDER ? + true : + orderProvider != X_UNKNOWN_PROVIDER + && orderProvider == provider + ; + + // + if ( + profit < 0 + && isProviderVerified + && openBarIndex - currentBarIndex >= passedCandles + // || ( + // profit > 0.5 + // && openBarIndex - currentBarIndex >= passedCandles - (passedCandles / 3) + // ) + ) { + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of Long Time issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + // else if ( + // openTrades > 0 + // && openBarIndex - currentBarIndex >= passedCandles - (passedCandles / 2) + // ) { + // result = CloseAllInProfitTrades() + // && CloseBiggestDrawDownTrade(); + // } + } + } + } + + // + return result; +} + +// +// Close all trades which passed Maximum Drawdown ... +bool CloseAllMaximumDrawDownPassedTrades( + const double maxDrDownPercentPerPTrade, + const ENUM_X_SIGNAL_TYPE type = X_SIGNAL_NONE, + const ENUM_X_SIGNAL_PROVIDER provider = X_UNKNOWN_PROVIDER +) { + // + if ( + initialBalance <= 0 + || maxDrDownPercentPerPTrade <= 0 + ) { + return false; + } + + // + // Retrieve Account Balance ... + double balance = AccountInfoDouble(ACCOUNT_BALANCE); + double maxAllowedDrawDown = -1 * (initialBalance * maxDrDownPercentPerPTrade); + + // + // Loop through all Positions ... + bool result = false; + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + string comment = OrderComment(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + bool isTypeVerified = + type == X_SIGNAL_NONE ? + true : + ( isLongOrder + && type == X_SIGNAL_LONG + ) || ( + !isLongOrder + && type == X_SIGNAL_SHORT + ) + ; + + // + ENUM_X_SIGNAL_PROVIDER orderProvider = GetSignalProvider(comment); + bool isProviderVerified = + provider == X_UNKNOWN_PROVIDER ? + true : + orderProvider != X_UNKNOWN_PROVIDER + && orderProvider == provider + ; + + // + if ( + profit < 0 + && isTypeVerified + && isProviderVerified + && MathAbs(profit) >= MathAbs(maxAllowedDrawDown) + ) { + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of Maximum DarwDown issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } + } + } + } + + // + return result; +} + +// +// Close All Trades Which Opens before Specified Length ... +bool CloseAllTradesWhichOpenInPastMarketLength( + const int marketLen +) { + // + bool result = false; + + // + if (marketLen <= 0) { + return result; + } + + // + int currentBarIndex = iBarShift( + _Symbol, + _Period, + TimeCurrent() + ); + + // + int openTrades = CountOpenTrades(); + + // + // Loop through all Positions ... + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + datetime openTime = OrderOpenTime(); + int openBarIndex = iBarShift( + _Symbol, + _Period, + openTime + ); + + // + if (openBarIndex <= currentBarIndex + marketLen) { + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // Since because of equity ... + // we have to ckose allpositions ... + bool isOrderClosed = OrderClose( + ticket, + lots, + closePrice, + clrYellow + ); + + // + if (isOrderClosed) { + // + LogMessage( + StringConcatenate( + "Order [", ticket, "] Closed because of Market Reverse issue ..." + ) + ); + } + + // + result = + result + || isOrderClosed; + } else if (openTrades > 0) { + // + // Close all InProfit Trdes and Biggest InDrawDown Trades ... + // result = CloseAllInProfitTrades(); + // && CloseBiggestDrawDownTrade(); + } + } + } + } + + // + return result; +} +// +// END Close Orders ... +// + +// +// START Modify Orders ... +// +// +void ModifyAllPriceLesserOpenTrades( + const XSignal &signal +) { + // + // Loop through all Open Trades ... + for (int i = OrdersTotal(); i >= 0; i--) { + // + // Check Order Selected or not ... + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + // + // Check Order Symbol is same as Current Symbol ... + if (OrderSymbol() == _Symbol) { + // + double lots = OrderLots(); + int ticket = OrderTicket(); + double profit = OrderProfit(); + double stopLoss = OrderStopLoss(); + double openPrice = OrderOpenPrice(); + datetime openTime = OrderOpenTime(); + double takeProfit = OrderTakeProfit(); + + // + // find order type ... + bool isLongOrder = OrderType() == OP_BUY; + + // + // find close price ... + double closePrice = isLongOrder ? + SymbolInfoDouble(_Symbol, SYMBOL_BID) : + SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + // + // When new Signal Comming with price less than + // currently open trade and tp less than currently + // open trade, this means a market change happens ... + // here we can Close InProfit Trades or Modify Trades TP ... + if ( + ( + openPrice < signal.entry + || MathAbs(openPrice - signal.entry) < 300 * _Point + ) + && takeProfit > signal.tp + ) { + bool result = OrderModify( + ticket, + openPrice, + signal.sl, + signal.tp, + clrYellow + ); + } + } + } + } +} + +// +void ModifyOpenTradesBasedOnCurrentTrade( + const XSignal &signal +) { + // + ModifyAllPriceLesserOpenTrades(signal); +} +// +// END Modify Orders ... +// +// +// END Orders Functions ... +// + +// +// START Signal Conditions ... +// +// +// Clear Signal Conditions ... +void ClearSignalConditions() { + // + ClearLongSignalConditions(); + ClearShortSignalConditions(); +} + +// +// Clear all Conditions Waiter for Long Signals ... +void ClearLongSignalConditions() { + // + ClearXLongSignalConditions(); + ClearXRLongSignalConditions(); + ClearXTPWLongSignalConditions(); +} + +// +// Clear all Conditions Waiter for Short Signals ... +void ClearShortSignalConditions() { + // + ClearXShortSignalConditions(); + ClearXRShortSignalConditions(); + ClearXTPWShortSignalConditions(); +} +// +// END Signal Conditions ... +// diff --git a/xLibraries/x-saherelm.x.signal.lib.mq4 b/xLibraries/x-saherelm.x.signal.lib.mq4 new file mode 100644 index 0000000..834ddb1 --- /dev/null +++ b/xLibraries/x-saherelm.x.signal.lib.mq4 @@ -0,0 +1,1063 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 X Signal Global Library +// --------------------------------------------------- +// saherelm useful tools and definitions ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Includes library ... +#include "../Libraries/x-saherelm.lib.mq4" + +// +// Includes Indicator library ... +#include "../Libraries/x-saherelm.indicator.lib.mq4" + +// +// Includes Models library ... +#include "../Libraries/x-saherelm.models.lib.mq4" + +// +// START Inputs ... +// +// +input string xStarter = "- X Signal Provider -"; // ---> X Signal Provider <--- + +// +input bool enableXSignalling = true; // X Signalling Enable + +// +input bool enableXLong = true; // X Signalling Enable Long +input bool enableXShort = true; // X Signalling Enable Short + +// +input double xShortR2R = 3; // X Short Risk To Reward Ratio +input double xShortLotsPerTradePercent = 0.0002; // X Lots Percent per Short Trades +input double xShortMaxDrawdownPerTradePercent = 0.4; // X Max Allowed DrawDown Percent per Short Trade + +// +input double xLongR2R = 3; // X Long Risk To Reward Ratio +input double xLongLotsPerTradePercent = 0.0002; // X Lots Percent per Short Trades +input double xLongMaxDrawdownPerTradePercent = 0.4; // X Max Allowed DrawDown Percent per Long Trade + +// +input double xSharpDetectorFactor = 700; // X Sharp Detection Factor + +// +input int xMaximumCandlesPerTrade = 206; // X Maximum Candles which a Trade can open + +// +input int xOscillatorLength = 7; // X Oscillator Length + +// +input double xPSarStep = 0.02; // X Parabolic Sar Step +input double xPSarMaximum = 0.2; // X Parabolic Sar Maximum + +// +input int xRangeMarketLength = 5; // X Range Detector Length + +// +input int xSwingLength = 7; // X Signal Swing Length +// +// END Inputs ... +// + +// +// START Global Requirement Functions ... +// +// +// X Based Signal Conditions ... +struct XSignalConditions { + datetime startTime; + datetime signalTime; + datetime entryTime; +}; + +// +struct XMarketState { + double psar; + double fast; + double slow; + double open; + double verifier; + double oscillator; + double oscillatorVerifier; +}; + +// +static XSignalConditions xLongConds; +static bool xCloseLongTrades = false; +static bool xWaitForLongSignals = true; + +// +static XSignalConditions xShortConds; +static bool xCloseShortTrades = false; +static bool xWaitForShortSignals = true; + +// +// Count Number of Closed Maximum DrawDown Trades ... +static int xFailedSignals = 0; + +// +datetime lastVerifierTouched; +// +// END Global Requirement Functions ... +// + +// +// START Functions ... +// +// +// Check and Fill Long and Short Signal Handlers ... +void CheckXSignalHandler( + const int bar_index +) { + // + // Check Market For Enable/Disable Signal Handlers ... + // Checking Market for Long Signals ... + // + if ( + !enableXSignalling + || !(enableXLong || enableXShort) + ) { + return; + } + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + XOHCL candle = GetCandleModel(bar_index); + XOHCL pCandle = GetCandleModel(bar_index + 1); + XTPOWState tPowState = GetXTPowState( + bar_index + 1, + xSwingLength + ); + + // + XMarketState state = GetXMarketState( + bar_index + 1 + ); + + // + // Check Verifier Last Touched ... + bool isVerifierTouched = pCandle.high > state.verifier + && pCandle.low < state.verifier; + + // + // Disable Signals if a signal Failed ... + if (xFailedSignals) { + // + // TODO: Complete this ... + } + + // + // Enable Or Disable Signalling ... + if (isVerifierTouched) { + // + lastVerifierTouched = barTime; + + // + if (xWaitForLongSignals) { + xWaitForLongSignals = false; + } + + // + if (xWaitForShortSignals) { + xWaitForShortSignals = false; + } + } else { + // + int lastVerifierTouchedBarIndex = iBarShift( + _Symbol, + _Period, + lastVerifierTouched + ); + + // + int distance = MathAbs(lastVerifierTouchedBarIndex - bar_index); + + // + if ( + !xWaitForLongSignals + && distance > (xSwingLength * 2) + ) { + xWaitForLongSignals = true; + } + + // + if ( + !xWaitForShortSignals + && ( + distance > (xSwingLength * 2) + || ( + tPowState.powerDown > tPowState.powerUp + && tPowState.powerDown < 49 + ) + ) + ) { + xWaitForShortSignals = true; + } + } + + // + // Close All Long Open Trades ... + if ( + tPowState.powerDown > 55 + && tPowState.powerDown > tPowState.powerUp + ) { + // xCloseLongTrades = true; + } +} + +// +// Check and Fill Long Signal Conditions ... +void CheckXLongSignalConditions( + const int bar_index +) { + // + if ( + !enableXLong + || !enableXSignalling + || !xWaitForLongSignals + ) { + return; + } + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + bool isCrossOver = false; + bool isCrossUnder = false; + + // + XMarketState cState = GetXMarketState(1); + XMarketState pState = GetXMarketState(2); + + // + isCrossUnder = + cState.fast < cState.slow + && !(pState.fast < pState.slow) + ; + + // + isCrossOver = + cState.fast > cState.slow + && !(pState.fast > pState.slow) + ; + + // + if ( + isCrossUnder + && xLongConds.startTime == 0 + ) { + // + xLongConds.startTime = barTime; + return; + } + + // + if ( + isCrossOver + && xLongConds.startTime > 0 + && xLongConds.signalTime == 0 + ) { + // + xLongConds.signalTime = barTime; + xLongConds.entryTime = barTime; + return; + } +} + +// +// Check and Fill Short Signal Conditions ... +void CheckXShortSignalConditions( + const int bar_index +) { + // + if ( + !enableXShort + || !enableXSignalling + || !xWaitForShortSignals + ) { + return; + } + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + bool isCrossOver = false; + bool isCrossUnder = false; + + // + XMarketState cState = GetXMarketState(1); + XMarketState pState = GetXMarketState(2); + + // + isCrossUnder = + cState.fast < cState.slow + && !(pState.fast < pState.slow) + ; + + // + isCrossOver = + cState.fast > cState.slow + && !(pState.fast > pState.slow) + ; + + // + if ( + isCrossOver + && xShortConds.startTime == 0 + ) { + // + xShortConds.startTime = barTime; + return; + } + + // + if ( + isCrossUnder + && xShortConds.startTime > 0 + && xShortConds.signalTime == 0 + ) { + // + xShortConds.signalTime = barTime; + xShortConds.entryTime = barTime; + return; + } +} + +// +// Convert Long Signal Conditions to XSignal ... +XSignalRequest GenerateXSignal( + const ENUM_X_SIGNAL_TYPE type, // Signal Type ... + const string signalTag , // Signal Tag ... + const int bar_index +) { + // + XSignalRequest result = {}; + + // + result.hasSignal = false; + result.type = X_SIGNAL_NONE; + result.provider = X_UNKNOWN_PROVIDER; + + // + if ( + !enableXSignalling + || !(enableXLong || enableXShort) + ) { + return result; + } + + // + bool requestLong = type == X_SIGNAL_LONG; + + // + if (requestLong) { + // + if ( + !ValidateXLongConditions() + ) { + return result; + } + } else { + // + if ( + !ValidateXShortConditions() + ) { + return result; + } + } + + // + // Price Calculations ... + // + RefreshRates(); + + // + double askPrice = SymbolInfoDouble( + _Symbol, + SYMBOL_ASK + ); + + // + double bidPrice = SymbolInfoDouble( + _Symbol, + SYMBOL_BID + ); + + // + double entryPrice = requestLong ? + askPrice : + bidPrice; + + // + double exitPrice = requestLong ? + bidPrice : + askPrice; + + // + double priceGap = MathAbs(entryPrice - exitPrice); + + // + double ll = + // + GetMarketLowestLow( + bar_index, + xSwingLength + ) + ; + + // + double hh = + // + GetMarketHighestHigh( + bar_index, + xSwingLength + ) + ; + + // + double openPrice = iOpen( + _Symbol, + _Period, + bar_index + ); + + // + double closePrice = iClose( + _Symbol, + _Period, + bar_index + ); + + // + double risk = requestLong ? + MathMin(openPrice, closePrice) - ll : + hh - MathMax(openPrice, closePrice) + ; + + // + double reward = + requestLong ? + risk * xLongR2R : + risk * xShortR2R + ; + + // + double sl = requestLong ? + 0 : + 0; + double tp = requestLong ? + entryPrice + reward : + entryPrice - reward + ; + + // + XRState range = GetXRange( + bar_index, + xRangeMarketLength + ); + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + result.signal.tp = tp; + result.signal.sl = sl; + result.signal.type = type; + result.signal.time = barTime; + result.signal.tag = signalTag; + result.signal.symbol = _Symbol; + result.signal.entry = entryPrice; + result.signal.id = totalSignals + 1; + result.signal.provider = X_XXX_PROVIDER; + + // + result.hasSignal = true; + result.type = type; + result.provider = X_XXX_PROVIDER; + + // + return result; +} + +// +// Validate Signal Conditions ... +bool ValidateXLongConditions() { + // + if ( + !enableXLong + || !enableXSignalling + ) { + return false; + } + + // + bool isConditionsFilled = + xLongConds.startTime > 0 + && xLongConds.signalTime > 0 + && xLongConds.entryTime > 0 + ; + + // + bool isBLFilled = false; + if (isConditionsFilled) { + // + int startBarIndex = iBarShift( + _Symbol, + _Period, + xLongConds.startTime + ); + + // + int signalBarIndex = iBarShift( + _Symbol, + _Period, + xLongConds.signalTime + ); + + // + int entryBarIndex = iBarShift( + _Symbol, + _Period, + xLongConds.entryTime + ); + + // + isBLFilled = + // + xLongConds.signalTime > xLongConds.startTime + && xLongConds.entryTime >= xLongConds.signalTime + // && MathAbs(signalBarIndex - startBarIndex) >= 1 + ; + } + + // + bool result = + isBLFilled + && isConditionsFilled + && xWaitForLongSignals + ; + + // + // Since maybe Conditions Filled but + // Slope is Negative, for Handling Next Signals and + // Prevent from infinity loop, here we Clear Signal Conditions ... + if ( + !result + && isConditionsFilled + ) { + ClearXLongSignalConditions(); + } + + // + return result; +} + +// +// Validate Signal Conditions ... +bool ValidateXShortConditions() { + // + if ( + !enableXShort + || !enableXSignalling + ) { + return false; + } + + // + bool isConditionsFilled = + xShortConds.startTime > 0 + && xShortConds.signalTime > 0 + && xShortConds.entryTime > 0 + ; + + // + bool isBLFilled = false; + if (isConditionsFilled) { + // + int startBarIndex = iBarShift( + _Symbol, + _Period, + xShortConds.startTime + ); + + // + int signalBarIndex = iBarShift( + _Symbol, + _Period, + xShortConds.signalTime + ); + + // + int entryBarIndex = iBarShift( + _Symbol, + _Period, + xShortConds.entryTime + ); + + // + isBLFilled = + // + xShortConds.signalTime > xShortConds.startTime + && xShortConds.entryTime >= xShortConds.signalTime + ; + } + + // + bool result = + isBLFilled + && isConditionsFilled + && xWaitForShortSignals + ; + + // + // Since maybe Conditions Filled but + // Slope is Negative, for Handling Next Signals and + // Prevent from infinity loop, here we Clear Signal Conditions ... + if ( + !result + && isConditionsFilled + ) { + ClearXShortSignalConditions(); + } + + // + return result; +} + +// +// Clear Long Signal Conditions for New One ... +void ClearXLongSignalConditions() { + // + xLongConds.startTime = 0; + xLongConds.entryTime = 0; + xLongConds.signalTime = 0; +} + +// +// Clear Short Signal Conditions for New One ... +void ClearXShortSignalConditions() { + // + xShortConds.startTime = 0; + xShortConds.entryTime = 0; + xShortConds.signalTime = 0; +} + +// +// Check State for Long Signals ... +bool IsReadyForXSignals( + const XSignal &signal +) { + // + bool result = false; + + // + if ( + !enableXSignalling + || !(enableXLong || enableXShort) + ) { + return result; + } + + // + int signalBarIndex = iBarShift( + _Symbol, + _Period, + signal.time + ); + + // + // XOHCL candle = GetCandleModel(0); + XOHCL candle = GetCandleModel(signalBarIndex); + XOHCL pCandle = GetCandleModel(signalBarIndex + 1); + + // + // Retrieve Range ... + XRState range = GetXRange( + signalBarIndex, + xRangeMarketLength + ); + + // + // Retrive XMarket States ... + XMarketState xState0 = GetXMarketState(signalBarIndex); + XMarketState xState1 = GetXMarketState(signalBarIndex + 1); + XMarketState xState2 = GetXMarketState(signalBarIndex + 2); + XMarketState xStateLast = GetXMarketState(signalBarIndex + xSwingLength); + + // + // Retrieve Trend Powers ... + XTPOWState xTPow0 = GetXTPowState( + signalBarIndex, + xSwingLength + ); + XTPOWState xTPow1 = GetXTPowState( + signalBarIndex + 1, + xSwingLength + ); + + // + double hh = GetMarketHighestHigh( + signalBarIndex, + xSwingLength + ); + double ll = GetMarketLowestLow( + signalBarIndex, + xSwingLength + ); + double diffChange = (hh - ll); + bool isBigSharpOccured = + diffChange > (xSharpDetectorFactor * _Point) + ; + + // + bool isPSarVerified = false; + bool isTPowVerified = false; + bool isStateVerified = false; + bool isPriceVerified = false; + + // + // Verify Long Signals ... + if (signal.type == X_SIGNAL_LONG) { + // + // Get Price Verification for Long ... + isPriceVerified = + // + // Starter ... + true + // + && !isBigSharpOccured + // + && signal.entry < hh + // + // && signal.entry < range.hh + // && signal.entry > range.mid + // // + // && candle.high > xState0.verifier + // && signal.entry > xState0.verifier + // + // && pCandle.low != ll + && pCandle.high != hh + ; + + // + int above20TPowers = 0; + double signalSlope = 0; + int tPowUnverifyConditions = 0; + int tPowUnverifyConditionsIdx = 0; + for (int i = signalBarIndex; i < signalBarIndex + xSwingLength; i++) { + // + XTPOWState iTPowState = GetXTPowState( + i, + xSwingLength + ); + + // + // Calculate Signal Slope ... + if (i == signalBarIndex) { + // + signalSlope = iTPowState.signal; + } else if (i == signalBarIndex + 1) { + // + signalSlope = GetSlope( + 1, + iTPowState.signal, + 2, + signalSlope + ); + } + + // + if ( + iTPowState.powerUp > iTPowState.powerDown + && MathMax(iTPowState.powerUp, iTPowState.powerDown) > 20 + ) { + above20TPowers++; + } + + // + if (tPowUnverifyConditionsIdx < 3) { + // + if ( + iTPowState.powerUp < iTPowState.powerDown + || iTPowState.signal > MathMax(iTPowState.powerUp, iTPowState.powerDown) + ) { + tPowUnverifyConditions++; + } + + // + tPowUnverifyConditionsIdx++; + } + } + + // + isTPowVerified = + above20TPowers > 1 + && tPowUnverifyConditions == 0 + ; + + // + isPSarVerified = + xState0.psar < signal.entry + && xState0.psar < candle.low; + + // + isStateVerified = + // + // Start ... + true + // + // && xState0.open < xState0.slow + ; + + // + result = + // + // Starter ... + true + // + && isPSarVerified + // + && isTPowVerified + // + && isStateVerified + // + && isPriceVerified + ; + } else + // + // Verify Short Signals ... + if (signal.type == X_SIGNAL_SHORT) { + // + isPSarVerified = + xState0.psar > signal.entry + && xState0.psar > candle.high + ; + + // + // Get Price Verification for Short ... + isPriceVerified = + // + // Starter ... + true + // + && !isBigSharpOccured + // + && signal.entry > ll + && pCandle.low != ll + ; + + // + int above20TPowers = 0; + double signalSlope = 0; + int tPowUnverifyConditions = 0; + int tPowUnverifyConditionsIdx = 0; + for (int i = signalBarIndex; i < signalBarIndex + xSwingLength; i++) { + // + XTPOWState iTPowState = GetXTPowState( + i, + xSwingLength + ); + + // + // Calculate Signal Slope ... + if (i == signalBarIndex) { + // + signalSlope = iTPowState.signal; + } else if (i == signalBarIndex + 1) { + // + signalSlope = GetSlope( + 1, + iTPowState.signal, + 2, + signalSlope + ); + } + + // + if ( + iTPowState.powerUp > iTPowState.powerDown + && MathMax(iTPowState.powerUp, iTPowState.powerDown) > 20 + ) { + above20TPowers++; + } + + // + if (tPowUnverifyConditionsIdx < 3) { + // + if ( + iTPowState.powerUp > iTPowState.powerDown + || iTPowState.signal < MathMax(iTPowState.powerUp, iTPowState.powerDown) + ) { + tPowUnverifyConditions++; + } + + // + tPowUnverifyConditionsIdx++; + } + } + + // + isTPowVerified = + above20TPowers < 1 + && tPowUnverifyConditions == 0 + && MathAbs(xTPow0.powerUp - xTPow0.powerDown) > 50 * _Point + ; + + // + isStateVerified = + // + // Start ... + true + // + // && (xStateLast.verifier - xState0.verifier) >= 0 + // + && xState0.verifier > signal.entry + // + && MathAbs(signal.entry - xState0.verifier) < (xSharpDetectorFactor * _Point) + ; + + // + result = + // + // Starter Condition ... + true + // + && isPSarVerified + // + && isTPowVerified + // + && isStateVerified + // + && isPriceVerified + ; + } + + // + return result; +} +// +// END Functions ... +// + +// +// START Data Provider ... +// +XMarketState GetXMarketState( + const int bar_index +) { + // + XMarketState result = {}; + + // + double fast = GetMA( + bar_index, + xSwingLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double open = GetMA( + bar_index, + xSwingLength, + 0, + MODE_SMA, + PRICE_OPEN + ); + + // + double slow = GetMA( + bar_index, + xSwingLength * 2, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double oscillator = GetMA( + bar_index, + xSwingLength, + 0, + MODE_EMA, + PRICE_CLOSE + ); + + // + double oscillatorVerifier = GetMA( + bar_index, + xSwingLength, + 0, + MODE_EMA, + PRICE_WEIGHTED + ); + + // + int dailyCount = GetDailyCandleCount(); + double verifier = GetMA( + bar_index, + dailyCount, + 0, + MODE_EMA, + PRICE_MEDIAN + ); + + // + double psar = iSAR( + _Symbol, + _Period, + xPSarStep, + xPSarMaximum, + bar_index + ); + + // + result.psar = psar; + result.fast = fast; + result.open = open; + result.slow = slow; + result.verifier = verifier; + result.oscillator = oscillator; + result.oscillatorVerifier = oscillatorVerifier; + + // + return result; +} +// +// END Data Provider ... +// diff --git a/xLibraries/x-saherelm.xr.signal.lib.mq4 b/xLibraries/x-saherelm.xr.signal.lib.mq4 new file mode 100644 index 0000000..d4ae238 --- /dev/null +++ b/xLibraries/x-saherelm.xr.signal.lib.mq4 @@ -0,0 +1,1142 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 X Signal Global Library +// --------------------------------------------------- +// saherelm useful tools and definitions ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Includes library ... +#include "../Libraries/x-saherelm.lib.mq4" + +// +// Includes Indicator library ... +#include "../Libraries/x-saherelm.indicator.lib.mq4" + +// +// Includes Models library ... +#include "../Libraries/x-saherelm.models.lib.mq4" + +// +// START Inputs ... +// +// +input string xRStarter = "- XR Signal Provider -"; // --> XR Signal Provider <-- + +// +input bool enableXRSignalling = true; // XR Signalling Enable + +// +input bool enableXRLong = true; // XR Signalling Enable Long +input bool enableXRShort = true; // XR Signalling Enable Short + +// +input double xRShortR2R = 1.5; // XR Short Risk To Reward Ratio +input double xRShortLotsPerTradePercent = 0.0002; // XR Lots Percent per Short Trades +input double xRShortMaxDrawdownPerTradePercent = 0.15; // XR Max Allowed DrawDown Percent per Short Trade + +// +input double xRLongR2R = 1.5; // XR Long Risk To Reward Ratio +input double xRLongLotsPerTradePercent = 0.0002; // XR Lots Percent per Short Trades +input double xRLongMaxDrawdownPerTradePercent = 0.15; // XR Max Allowed DrawDown Percent per Long Trade + +// +input int xRMaximumCandlesPerTrade = 96; // XR Maximum Candles which a Trade can open + +// +input int xRSwingLength = 48; // XR Swing Length +// +// END Inputs ... +// + +// +input double xRSharpDetectionFactor = 1350; // XR Sharp Detection Factor + +// +// START Global Requirement Functions ... +// +// +// XR Market State ... +struct XRMarketState { + // + double fast; + double slow; + double open; + + // + double range; + double rangeFast; + double rangeSlow; + double rangeOpen; + + // + double verifier; +}; + +// +// XR Based Signal Conditions ... +struct XRSignalConditions { + datetime startTime; + datetime signalTime; + datetime entryTime; +}; + +// +static XRSignalConditions xRLongConds; +static bool xRCloseLongTrades = false; +static bool xRWaitForLongSignals = true; + +// +static XRSignalConditions xRShortConds; +static bool xRCloseShortTrades = false; +static bool xRWaitForShortSignals = true; + +// +// Count Number of Closed Maximum DrawDown Trades ... +static int xRFailedSignals = 0; + +// +double xRMaximumDrawDown = 0; + +// +int fastLength = 0; +int slowLength = 0; + +// +int verifierLength = 0; + +// +int rangeFastLength = 0; +int rangeSlowLength = 0; +// +// END Global Requirement Functions ... +// + +// +// START Functions ... +// +// +// Check and Fill Long and Short Signal Handlers ... +void CheckXRSignalHandler( + const int bar_index +) { + // + // Check Market For Enable/Disable Signal Handlers ... + // Checking Market for Long Signals ... + + // + if ( + !enableXRSignalling + || !(enableXRLong || enableXRShort) + ) { + return; + } +} + +// +// Check and Fill Long Signal Conditions ... +void CheckXRLongSignalConditions( + const int bar_index +) { + // + if ( + !enableXRLong + || !enableXRSignalling + ) { + return; + } + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + // Read Prices ... + XPrice prices = GetPrice(); + + // + // Read XPVTState ... + XPvtState pvt0 = GetPVTState( + bar_index, + xRSwingLength + ); + + // + // Double Length Pivots ... + XPvtState dblPvt0 = GetPVTState( + bar_index, + (xRSwingLength * 2) + ); + + // + // Reading Required Candles ... + XOHCL candle0 = GetCandleModel(bar_index); + XOHCL candle1 = GetCandleModel(bar_index + 1); + XOHCL candle2 = GetCandleModel(bar_index + 2); + XOHCL candle3 = GetCandleModel(bar_index + 3); + + // + // Reding Required XRMarketStates ... + XRMarketState state0 = GetXRMarketState(bar_index); + XRMarketState state1 = GetXRMarketState(bar_index + 1); + XRMarketState state2 = GetXRMarketState(bar_index + 2); + XRMarketState state3 = GetXRMarketState(bar_index + 3); + + // + // Reading required XRangeStates ... + XRState range0 = ReadXRange( + bar_index + xRSwingLength, + xRSwingLength + ); + XRState range1 = ReadXRange( + bar_index + xRSwingLength + 1, + xRSwingLength + ); + XRState range2 = ReadXRange( + bar_index + xRSwingLength + 2, + xRSwingLength + ); + + // + XRState cRange0 = ReadXRange( + bar_index, + xRSwingLength + ); + + // + // Validate Farest Range Values ... + if ( + range2.hh == 0 + || + range2.ll == 0 + || + range2.mid == 0 + ) { + return; + } + + // + // Reading Required XTPowStates ... + XTPOWState tPow0 = GetXTPowState( + bar_index, + xRSwingLength + ); + XTPOWState tPow1 = GetXTPowState( + bar_index + 1, + xRSwingLength + ); + XTPOWState tPow2 = GetXTPowState( + bar_index + 2, + xRSwingLength + ); + + // + // if state verifier below range middle + // this means market is bullish ... + // + // if state verifier above range middle + // this means market is bearish ... + // + + // + bool isMarketBullish = + state0.verifier < range0.mid + && state1.verifier < range1.mid; + bool isMarketBearish = + state0.verifier > range0.mid + && state1.verifier > range1.mid; + bool isMarketGoingBullish = + state0.verifier > range0.mid + && !(state1.verifier > range1.mid); + bool isMarketGoingBearish = + state0.verifier < range0.mid + && !(state1.verifier < range1.mid); + + // + // Check Highest High Conditions ... + bool isHHVerified = + !( + pvt0.hh == dblPvt0.hh + ) + ; + + // + int sharpDetectionLength = 7; + double sharpDetectionValue = xRSharpDetectionFactor * _Point; + + // + int sharpHHIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + sharpDetectionLength, + bar_index + ); + double sharpHH = iHigh( + _Symbol, + _Period, + sharpHHIdx + ); + + // + int sharpLLIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + sharpDetectionLength, + bar_index + ); + double sharpLL = iLow( + _Symbol, + _Period, + sharpLLIdx + ); + + // + double sharpDiff = sharpHH - sharpLL; + bool isSharpOccered = + sharpDiff > sharpDetectionValue; + + // + XRMarketState lastState = GetXRMarketState( + bar_index + sharpDetectionLength + ); + + // + double stateFSDiff = (state0.fast - state0.slow) - (lastState.fast - lastState.slow); + + // + // Start Calculating Long Conditions ... + bool longCondition1 = + // + // Starter ... + true + // + && isMarketBullish + // + && + ( + candle2.high < range2.mid + || ( + candle2.high > range2.mid + && candle2.low < range2.mid + ) + ) + && candle1.low > range1.mid + ; + + // + if ( + // + ( + longCondition1 + ) + // + && xRLongConds.startTime == 0 + && xRLongConds.entryTime == 0 + && xRLongConds.signalTime == 0 + ) { + // + xRLongConds.startTime = barTime; + xRLongConds.entryTime = barTime; + xRLongConds.signalTime = barTime; + + // + return; + } +} + +// +// Check and Fill Short Signal Conditions ... +void CheckXRShortSignalConditions( + const int bar_index +) { + // + if ( + !enableXRShort + || !enableXRSignalling + ) { + return; + } + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + // Read Prices ... + XPrice prices = GetPrice(); + + // + // Read XPVTState ... + XPvtState pvt0 = GetPVTState( + bar_index, + xRSwingLength + ); + + // + // Double Length Pivots ... + XPvtState dblPvt0 = GetPVTState( + bar_index, + (xRSwingLength * 2) + ); + + // + // Reading Required Candles ... + XOHCL candle0 = GetCandleModel(bar_index); + XOHCL candle1 = GetCandleModel(bar_index + 1); + XOHCL candle2 = GetCandleModel(bar_index + 2); + XOHCL candle3 = GetCandleModel(bar_index + 3); + + // + // Reding Required XRMarketStates ... + XRMarketState state0 = GetXRMarketState(bar_index); + XRMarketState state1 = GetXRMarketState(bar_index + 1); + XRMarketState state2 = GetXRMarketState(bar_index + 2); + XRMarketState state3 = GetXRMarketState(bar_index + 3); + + // + // Reading required XRangeStates ... + XRState range0 = ReadXRange( + bar_index + xRSwingLength, + xRSwingLength + ); + XRState range1 = ReadXRange( + bar_index + xRSwingLength + 1, + xRSwingLength + ); + XRState range2 = ReadXRange( + bar_index + xRSwingLength + 2, + xRSwingLength + ); + + // + XRState cRange0 = ReadXRange( + bar_index, + xRSwingLength + ); + + // + // Validate Farest Range Values ... + if ( + range2.hh == 0 + || + range2.ll == 0 + || + range2.mid == 0 + ) { + return; + } + + // + // Reading Required XTPowStates ... + XTPOWState tPow0 = GetXTPowState( + bar_index, + xRSwingLength + ); + XTPOWState tPow1 = GetXTPowState( + bar_index + 1, + xRSwingLength + ); + XTPOWState tPow2 = GetXTPowState( + bar_index + 2, + xRSwingLength + ); + + // + // if state verifier below range middle + // this means market is bullish ... + // + // if state verifier above range middle + // this means market is bearish ... + // + + // + bool isMarketBullish = + state0.verifier < range0.mid + && state1.verifier < range1.mid; + bool isMarketBearish = + state0.verifier > range0.mid + && state1.verifier > range1.mid; + bool isMarketGoingBullish = + state0.verifier > range0.mid + && !(state1.verifier > range1.mid); + bool isMarketGoingBearish = + state0.verifier < range0.mid + && !(state1.verifier < range1.mid); + + // + // Check Highest High Conditions ... + bool isHHVerified = + !( + pvt0.hh == dblPvt0.hh + ) + ; + + // + int sharpDetectionLength = 7; + double sharpDetectionValue = xRSharpDetectionFactor * _Point; + + // + int sharpHHIdx = iHighest( + _Symbol, + _Period, + MODE_HIGH, + sharpDetectionLength, + bar_index + ); + double sharpHH = iHigh( + _Symbol, + _Period, + sharpHHIdx + ); + + // + int sharpLLIdx = iLowest( + _Symbol, + _Period, + MODE_LOW, + sharpDetectionLength, + bar_index + ); + double sharpLL = iLow( + _Symbol, + _Period, + sharpLLIdx + ); + + // + double sharpDiff = sharpHH - sharpLL; + bool isSharpOccered = + sharpDiff > sharpDetectionValue; + + // + XRMarketState lastState = GetXRMarketState( + bar_index + sharpDetectionLength + ); + + // + double stateFSDiff = (state0.fast - state0.slow) - (lastState.fast - lastState.slow); + + // + // Start Calculating Long Conditions ... + bool shortCondition1 = + // + // Starter ... + true + // + && isMarketBearish + // + && + ( + candle2.low > range2.mid + || ( + candle2.high > range2.mid + && candle2.low < range2.mid + ) + ) + && candle1.high < range1.mid + ; + + // + if ( + // + ( + shortCondition1 + ) + // + && xRShortConds.startTime == 0 + && xRShortConds.entryTime == 0 + && xRShortConds.signalTime == 0 + ) { + // + xRShortConds.startTime = barTime; + xRShortConds.entryTime = barTime; + xRShortConds.signalTime = barTime; + + // + return; + } +} + +// +// Convert Long Signal Conditions to XSignal ... +XSignalRequest GenerateXRSignal( + const ENUM_X_SIGNAL_TYPE type, // Signal Type ... + const string signalTag , // Signal Tag ... + const int bar_index +) { + // + XSignalRequest result = {}; + + // + result.hasSignal = false; + result.type = X_SIGNAL_NONE; + result.provider = X_UNKNOWN_PROVIDER; + + // + if ( + !enableXRSignalling + || !(enableXRLong || enableXRShort) + ) { + return result; + } + + // + bool requestLong = type == X_SIGNAL_LONG; + + // + if (requestLong) { + // + if ( + !ValidateXRLongConditions() + ) { + return result; + } + } else { + // + if ( + !ValidateXRShortConditions() + ) { + return result; + } + } + + // + // Price Calculations ... + XPvtState pvts = GetPVTState( + bar_index, + xRSwingLength + ); + XPrice prices = GetPrice(); + + // + double entryPrice = requestLong ? + prices.longEntry : + prices.shortEntry + ; + + // + double openPrice = iOpen( + _Symbol, + _Period, + bar_index + ); + + // + double closePrice = iClose( + _Symbol, + _Period, + bar_index + ); + + // + double risk = requestLong ? + MathMin(openPrice, closePrice) - pvts.ll : + pvts.hh - MathMax(openPrice, closePrice); + if (risk <= 0) { + // + risk = requestLong ? + MathAbs(pvts.hh - entryPrice) : + MathAbs(pvts.ll - entryPrice) + ; + } + + // + double reward = + requestLong ? + risk * xRLongR2R : + risk * xRShortR2R + ; + + // + double sl = requestLong ? + 0 : + 0; + + // + double tp = requestLong ? + entryPrice + reward : + entryPrice - reward + ; + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + result.signal.tp = tp; + result.signal.sl = sl; + result.signal.type = type; + result.signal.time = barTime; + result.signal.tag = signalTag; + result.signal.symbol = _Symbol; + result.signal.entry = entryPrice; + result.signal.id = totalSignals + 1; + result.signal.provider = X_XR_PROVIDER; + + // + result.hasSignal = true; + result.type = type; + result.provider = X_XR_PROVIDER; + + // + return result; +} + +// +// Validate Long Signal Conditions ... +bool ValidateXRLongConditions() { + // + if ( + !enableXRLong + || !enableXRSignalling + ) { + return false; + } + + // + bool isConditionsFilled = + xRLongConds.startTime > 0 + && xRLongConds.signalTime > 0 + && xRLongConds.entryTime > 0 + ; + + // + bool isBLFilled = false; + if (isConditionsFilled) { + // + isBLFilled = + // + xRLongConds.signalTime >= xRLongConds.startTime + && xRLongConds.entryTime >= xRLongConds.signalTime + ; + } + + // + bool result = + isBLFilled + && isConditionsFilled + && xRWaitForLongSignals + ; + + // + // Since maybe Conditions Filled but + // Slope is Negative, for Handling Next Signals and + // Prevent from infinity loop, here we Clear Signal Conditions ... + if ( + !result + && isConditionsFilled + ) { + ClearXRLongSignalConditions(); + } + + // + return result; +} + +// +// Validate Short Signal Conditions ... +bool ValidateXRShortConditions() { + // + if ( + !enableXRShort + || !enableXRSignalling + ) { + return false; + } + + // + bool isConditionsFilled = + xRShortConds.startTime > 0 + && xRShortConds.signalTime > 0 + && xRShortConds.entryTime > 0 + ; + + // + bool isBLFilled = false; + if (isConditionsFilled) { + // + isBLFilled = + // + xRShortConds.signalTime >= xRShortConds.startTime + && xRShortConds.entryTime >= xRShortConds.signalTime + ; + } + + // + bool result = + isBLFilled + && isConditionsFilled + && xRWaitForShortSignals + ; + + // + // Since maybe Conditions Filled but + // Slope is Negative, for Handling Next Signals and + // Prevent from infinity loop, here we Clear Signal Conditions ... + if ( + !result + && isConditionsFilled + ) { + ClearXRShortSignalConditions(); + } + + // + return result; +} + +// +// Clear Long Signal Conditions for New One ... +void ClearXRLongSignalConditions() { + // + xRLongConds.startTime = 0; + xRLongConds.signalTime = 0; + xRLongConds.entryTime = 0; +} + +// +// Clear Short Signal Conditions for New One ... +void ClearXRShortSignalConditions() { + // + xRShortConds.startTime = 0; + xRShortConds.signalTime = 0; + xRShortConds.entryTime = 0; +} + +// +// Check State for Long Signals ... +bool IsReadyForXRSignals( + const XSignal &signal +) { + // + bool result = false; + + // + if ( + !enableXRSignalling + || !(enableXRLong || enableXRShort) + ) { + return result; + } + + // + // Find Signal Bar Index ... + int signalBarIndex = iBarShift( + _Symbol, + _Period, + signal.time + ); + + // + // Read Prices ... + XPrice prices = GetPrice(); + + // + // Read XPVTState ... + XPvtState pvt0 = GetPVTState( + signalBarIndex, + xRSwingLength + ); + + // + // Reading Required Candles ... + XOHCL candle0 = GetCandleModel(signalBarIndex); + XOHCL candle1 = GetCandleModel(signalBarIndex + 1); + XOHCL candle2 = GetCandleModel(signalBarIndex + 2); + XOHCL candle3 = GetCandleModel(signalBarIndex + 3); + + // + // Reding Required XRMarketStates ... + XRMarketState state0 = GetXRMarketState(signalBarIndex); + XRMarketState state1 = GetXRMarketState(signalBarIndex + 1); + XRMarketState state2 = GetXRMarketState(signalBarIndex + 2); + XRMarketState state3 = GetXRMarketState(signalBarIndex + 3); + + // + // Reading required XRangeStates ... + XRState range0 = ReadXRange( + signalBarIndex + xRSwingLength, + xRSwingLength + ); + XRState range1 = ReadXRange( + signalBarIndex + xRSwingLength + 1, + xRSwingLength + ); + XRState range2 = ReadXRange( + signalBarIndex + xRSwingLength + 2, + xRSwingLength + ); + + // + // Reading Required XTPowStates ... + XTPOWState tPow0 = GetXTPowState( + signalBarIndex, + xRSwingLength + ); + XTPOWState tPow1 = GetXTPowState( + signalBarIndex + 1, + xRSwingLength + ); + XTPOWState tPow2 = GetXTPowState( + signalBarIndex + 2, + xRSwingLength + ); + + // + double hhllDiff = MathAbs(pvt0.hh - pvt0.ll); + double sharpDetectionValue = xRSharpDetectionFactor * _Point; + bool isSharpOccured = hhllDiff > sharpDetectionValue; + + // + // Calculate State Min Max Diff ... + // + double state0Min = MathMin(state0.fast, state0.slow); + state0Min = MathMin(state0Min, state0.open); + state0Min = MathMin(state0Min, state0.rangeFast); + state0Min = MathMin(state0Min, state0.rangeSlow); + state0Min = MathMin(state0Min, state0.rangeOpen); + state0Min = MathMin(state0Min, state0.verifier); + + // + double state0Max = MathMax(state0.fast, state0.slow); + state0Max = MathMax(state0Max, state0.open); + state0Max = MathMax(state0Max, state0.rangeFast); + state0Max = MathMax(state0Max, state0.rangeSlow); + state0Max = MathMax(state0Max, state0.rangeOpen); + state0Max = MathMax(state0Max, state0.verifier); + + // + double state0MinMaxDiff = (state0Max - state0Min); + + // + bool isTPowValid = false; + bool isStateValid = false; + bool isRangeValid = false; + + // + // Verify Long Signals ... + if (signal.type == X_SIGNAL_LONG) { + // + // Retrieve TPow Verifications ... + isTPowValid = + // + // Starter ... + true + ; + + // + // Retrieve XMarket Verifications ... + isStateValid = + // + // Starter ... + true + // + // && !(state0MinMaxDiff > sharpDetectionValue) + ; + + // + // Retrieve XRange Verifications ... + isRangeValid = + // + // Starter ... + true + ; + + // + result = + // + // Starter ... + true + // + && isTPowValid + && isStateValid + && isRangeValid + ; + } else + // + // Verify Short Signals ... + if (signal.type == X_SIGNAL_SHORT) { + // + // Retrieve TPow Verifications ... + isTPowValid = + // + // Starter ... + true + ; + + // + // Retrieve XMarket Verifications ... + isStateValid = + // + // Starter ... + true + ; + + // + // Retrieve XRange Verifications ... + isRangeValid = + // + // Starter ... + true + ; + + // + result = + // + // Starter ... + true + // + && isTPowValid + && isStateValid + && isRangeValid + ; + } + + // + return result; +} +// +// END Functions ... +// + +// +// START Data Providers ... +// +// +XRMarketState GetXRMarketState( + const int bar_index +) { + // + XRMarketState result = {}; + + // + // Calculate Market Lengths ... + + // + if (fastLength == 0) { + fastLength = xRSwingLength; + } + + // + if (slowLength == 0) { + slowLength = xRSwingLength * 2; + } + + // + if (verifierLength == 0) { + verifierLength = (GetDailyCandleCount() * 2); + } + + // + if (rangeFastLength == 0) { + rangeFastLength = (int)(verifierLength / 2); + } + + // + if (rangeSlowLength == 0) { + rangeSlowLength = verifierLength; + } + + // + // Reading Values ... + + // + double fast = GetMA( + bar_index, + fastLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double slow = GetMA( + bar_index, + slowLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double open = GetMA( + bar_index, + fastLength, + 0, + MODE_SMA, + PRICE_OPEN + ); + + // + double rangeFast = GetMA( + bar_index, + rangeFastLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double rangeSlow = GetMA( + bar_index, + rangeSlowLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double rangeOpen = GetMA( + bar_index, + rangeFastLength, + 0, + MODE_SMA, + PRICE_OPEN + ); + + // + double verifier = GetMA( + bar_index, + verifierLength, + 0, + MODE_EMA, + PRICE_MEDIAN + ); + + // + // Filling Result ... + result.fast = fast; + result.slow = slow; + result.open = open; + result.verifier = verifier; + result.rangeFast = rangeFast; + result.rangeSlow = rangeSlow; + result.rangeOpen = rangeOpen; + + // + return result; +} +// +// END Data Providers ... +// \ No newline at end of file diff --git a/xLibraries/x-saherelm.xtpw.signal.lib.mq4 b/xLibraries/x-saherelm.xtpw.signal.lib.mq4 new file mode 100644 index 0000000..4bf02ce --- /dev/null +++ b/xLibraries/x-saherelm.xtpw.signal.lib.mq4 @@ -0,0 +1,1332 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL4 XTPW Signal Global Library +// --------------------------------------------------- +// XSaherElm EA Signal Provider based on +// XTPow Indicator... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Includes library ... +#include "../Libraries/x-saherelm.lib.mq4" + +// +// Includes Indicator library ... +#include "../Libraries/x-saherelm.indicator.lib.mq4" + +// +// Includes Models library ... +#include "../Libraries/x-saherelm.models.lib.mq4" + +// +// START Inputs ... +// +// +input string xTPWStarter = "- XTPW Signal Provider -"; // ---> XTPW Signal Provider <--- + +// +input bool enableXTPWSignalling = true; // XTPW Signalling Enable + +// +input bool enableXTPWLong = true; // XTPW Signalling Enable Long +input bool enableXTPWShort = true; // XTPW Signalling Enable Short + +// +input double xTPWShortR2R = 2; // XTPW Short Risk To Reward Ratio +input double xTPWShortLotsPerTradePercent = 0.0002; // XTPW Lots Percent per Short Trades +input double xTPWShortMaxDrawdownPerTradePercent = 0.3; // XTPW Max Allowed DrawDown Percent per Short Trade + +// +input double xTPWLongR2R = 2; // XTPW Long Risk To Reward Ratio +input double xTPWLongLotsPerTradePercent = 0.0002; // XTPW Lots Percent per Short Trades +input double xTPWLongMaxDrawdownPerTradePercent = 0.3; // XTPW Max Allowed DrawDown Percent per Long Trade + +// +input int xTPWMaximumCandlesPerTrade = 206; // XTPW Maximum Candles which a Trade can open + +// +input double xTPWPSarStep = 0.02; // XTPW Parabolic Sar Step +input double xTPWPSarMaximum = 0.2; // XTPW Parabolic Sar Maximum + +// +input int xTPWSwingLength = 7; // XTPW Signal Swing Length +// +// END Inputs ... +// + +// +input double xTPWSharpDetectionFactor = 650; // XTPW Sharp Detection Factor + +// +// START Global Requirement Functions ... +// +// +// XTPW Based Signal Conditions ... +struct XTPWSignalConditions { + datetime startTime; + datetime signalTime; + datetime entryTime; +}; + +// +struct XTPWMarketState { + // + double psar; + + // + double scFast; + double scSlow; + double scWeight; + + // + double mcFast; + double mcSlow; + double mcWeight; + + // + double lcFast; + double lcSlow; + double lcWeight; +}; + +// +struct XLHS { + // + double scHH; + double scLL; + + // + double mcHH; + double mcLL; + + // + double lcHH; + double lcLL; +}; + +// +static XTPWSignalConditions xTPWLongConds; +static bool xTPWCloseLongTrades = false; +static bool xTPWWaitForLongSignals = true; + +// +static XTPWSignalConditions xTPWShortConds; +static bool xTPWCloseShortTrades = false; +static bool xTPWWaitForShortSignals = true; + +// +// Count Number of Closed Maximum DrawDown Trades ... +static int xTPWFailedSignals = 0; + +// +double tPowerVerifier = 20; +double tPowerMaxVerifier = 55; + +// +int scFastLength = 0; +int scSlowLength = 0; + +// +int mcFastLength = 0; +int mcSlowLength = 0; + +// +int lcFastLength = 0; +int lcSlowLength = 0; + +// +datetime lastTurnOffLongTradesTime; +datetime lastTurnOffShortTradesTime; +// +// END Global Requirement Functions ... +// + +// +// START Functions ... +// +// +// Check and Fill Long and Short Signal Handlers ... +void CheckXTPWSignalHandler( + const int bar_index +) { + // + // Check Market For Enable/Disable Signal Handlers ... + // Checking Market for Long Signals ... + + // + if ( + !enableXTPWSignalling + || !(enableXTPWLong || enableXTPWShort) + ) { + return; + } + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + XOHCL candle0 = GetCandleModel(bar_index); + XOHCL candle1 = GetCandleModel(bar_index + 1); + XOHCL candle2 = GetCandleModel(bar_index + 1); + + // + XTPOWState tPow0 = GetXTPowState( + bar_index, + xTPWSwingLength + ); + XTPOWState tPow1 = GetXTPowState( + bar_index + 1, + xTPWSwingLength + ); + XTPOWState tPow2 = GetXTPowState( + bar_index + 2, + xTPWSwingLength + ); + + // + XTPWMarketState state0 = GetXTPWMarketState( + bar_index + ); + XTPWMarketState state1 = GetXTPWMarketState( + bar_index + 1 + ); + XTPWMarketState state2 = GetXTPWMarketState( + bar_index + 2 + ); + + // // + // // Disable Long Conditions ... + // if ( + // xTPWWaitForLongSignals + // && + // ( + // isRangeCrossOverRangeWeight + // || + // isRangeCrossUnderRangeWeight + // || + // isTPowUpperAboveMaxVerifier + // ) + // ) { + // // + // xTPWWaitForLongSignals = false; + // lastTurnOffLongTradesTime = barTime; + // } + + // // + // // Enable Long Conditions ... + // if ( + // !xTPWWaitForLongSignals + // && lastTurnOffLongTradesTime > 0 + // && ( + // // isFastCrossOverSlow + // // || + // // isFastCrossUnderSlow + // isRangeCrossOverRangeWeight + // || + // isRangeCrossUnderRangeWeight + // || + // isTPowUpperBelowMaxVerifier + // ) + // ) { + // // + // // Find Last Turn Off Bar Index ... + // int lastTurnOffLongTradesBarIndex = iBarShift( + // _Symbol, + // _Period, + // lastTurnOffLongTradesTime + // ); + + // // + // // the Distance must be bigger than market length ... + // if (MathAbs(lastTurnOffLongTradesBarIndex - bar_index) > xTPWSwingLength) { + // // + // xTPWWaitForLongSignals = true; + // lastTurnOffLongTradesTime = 0; + // } + // } +} + +// +// Check and Fill Long Signal Conditions ... +void CheckXTPWLongSignalConditions( + const int bar_index +) { + // + if ( + !enableXTPWLong + || !enableXTPWSignalling + || !xTPWWaitForLongSignals + ) { + return; + } + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + // Retrieve TPow States ... + XTPOWState tPow0 = GetXTPowState( + bar_index, + xTPWSwingLength + ); + XTPOWState tPow1 = GetXTPowState( + bar_index + 1, + xTPWSwingLength + ); + XTPOWState tPow2 = GetXTPowState( + bar_index + 2, + xTPWSwingLength + ); + + // + // Retrieve TPowMarket State ... + XTPWMarketState state0 = GetXTPWMarketState( + bar_index + ); + XTPWMarketState state1 = GetXTPWMarketState( + bar_index + 1 + ); + XTPWMarketState state2 = GetXTPWMarketState( + bar_index + 2 + ); + + // + // Retrieve XPrice Model ... + XPrice prices = GetPrice(); + + // + // Retrieve Candles ... + XOHCL candle0 = GetCandleModel(bar_index); + XOHCL candle1 = GetCandleModel(bar_index + 1); + XOHCL candle2 = GetCandleModel(bar_index + 2); + + // + XLHS lhs = GetXTPWLHS(bar_index); + + // + bool isHHSame = + lhs.scHH == lhs.mcHH + && lhs.mcHH == lhs.lcHH + ; + + // + bool isLLSame = + lhs.scLL == lhs.mcLL + && lhs.mcLL == lhs.lcLL + ; + + // + bool startCondition = false; + bool signalCondition = false; + bool entryCondition = false; + + // + bool longCondition1 = + // + true + // + && !isHHSame + // + && !( + lhs.scLL == lhs.mcLL + ) + // + && !( + lhs.scHH == lhs.mcHH + ) + // + && !( + prices.longEntry + && candle0.high < state0.scFast + && candle0.high < state0.scSlow + && candle0.high < state0.mcFast + && candle0.high < state0.mcSlow + && candle0.high < state0.lcFast + && candle0.high < state0.lcSlow + ) + // + && tPow0.powerDown > tPowerMaxVerifier + && tPow1.powerDown > tPowerMaxVerifier + && tPow0.powerDown < MathMax(tPow1.powerUp, tPow1.powerDown) + && MathMax(tPow1.powerUp, tPow1.powerDown) > tPowerMaxVerifier + ; + + // + // Start Conditions ... + startCondition = ( + longCondition1 + ) + ; + + // + if ( + startCondition + && xTPWLongConds.startTime == 0 + && xTPWLongConds.signalTime == 0 + && xTPWLongConds.entryTime == 0 + ) { + // + xTPWLongConds.startTime = barTime; + xTPWLongConds.signalTime = barTime; + xTPWLongConds.entryTime = barTime; + + // + return; + } +} + +// +// Check and Fill Short Signal Conditions ... +void CheckXTPWShortSignalConditions( + const int bar_index +) { + // + if ( + !enableXTPWShort + || !enableXTPWSignalling + || !xTPWWaitForShortSignals + ) { + return; + } + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + // Retrieve TPower State ... + XTPOWState tPow0 = GetXTPowState( + bar_index, + xTPWSwingLength + ); + XTPOWState tPow1 = GetXTPowState( + bar_index + 1, + xTPWSwingLength + ); + XTPOWState tPow2 = GetXTPowState( + bar_index + 2, + xTPWSwingLength + ); + + // + // Retrieve TPWMarket State ... + XTPWMarketState state0 = GetXTPWMarketState( + bar_index + ); + XTPWMarketState state1 = GetXTPWMarketState( + bar_index + 1 + ); + XTPWMarketState state2 = GetXTPWMarketState( + bar_index + 2 + ); + + // + // Retrieve Candles ... + XOHCL candle0 = GetCandleModel(bar_index); + XOHCL candle1 = GetCandleModel(bar_index + 1); + XOHCL candle2 = GetCandleModel(bar_index + 2); + + // + XPrice prices = GetPrice(); + XLHS lhs = GetXTPWLHS(bar_index); + + // + double sharpDetectionValue = + xTPWSharpDetectionFactor * _Point; + + // + bool isHHSame = + lhs.scHH == lhs.mcHH + && lhs.mcHH == lhs.lcHH + ; + + // + bool isLLSame = + lhs.scLL == lhs.mcLL + && lhs.mcLL == lhs.lcLL + ; + + // + bool startCondition = false; + bool signalCondition = false; + bool entryCondition = false; + + // + bool shortCondition1 = + // + true + // + && tPow1.powerDown > tPowerMaxVerifier + && tPow2.powerDown < tPowerMaxVerifier + ; + + // + startCondition = ( + shortCondition1 + ) + ; + + // + if ( + startCondition + && xTPWShortConds.startTime == 0 + && xTPWShortConds.signalTime == 0 + && xTPWShortConds.entryTime == 0 + ) { + // + xTPWShortConds.startTime = barTime; + xTPWShortConds.signalTime = barTime; + xTPWShortConds.entryTime = barTime; + + // + return; + } +} + +// +// Convert Long Signal Conditions to XSignal ... +XSignalRequest GenerateXTPWSignal( + const ENUM_X_SIGNAL_TYPE type, // Signal Type ... + const string signalTag , // Signal Tag ... + const int bar_index +) { + // + XSignalRequest result = {}; + + // + result.hasSignal = false; + result.type = X_SIGNAL_NONE; + result.provider = X_UNKNOWN_PROVIDER; + + // + if ( + !enableXTPWSignalling + || !(enableXTPWLong || enableXTPWShort) + ) { + return result; + } + + // + bool requestLong = type == X_SIGNAL_LONG; + + // + // Check Condition Validations ... + if (requestLong) { + // + // Check Long Condtion is Valid, if Long Requested ... + if ( + !ValidateXTPWLongConditions() + ) { + return result; + } + } else { + // + // Check Short Condtion is Valid, if Short Requested ... + if ( + !ValidateXTPWShortConditions() + ) { + return result; + } + } + + // + double ll = + // + GetMarketLowestLow( + bar_index, + xTPWSwingLength + ) + ; + + // + double hh = + // + GetMarketHighestHigh( + bar_index, + xTPWSwingLength + ) + ; + + // + double openPrice = iOpen( + _Symbol, + _Period, + bar_index + ); + + // + double closePrice = iClose( + _Symbol, + _Period, + bar_index + ); + + // + // Price Calculations ... + XPrice prices = GetPrice(); + + // + // Read State ... + XTPWMarketState state0 = GetXTPWMarketState(bar_index); + + // + XOHCL candle0 = GetCandleModel(bar_index); + XOHCL candle1 = GetCandleModel(bar_index + 1); + XOHCL candle2 = GetCandleModel(bar_index + 2); + XOHCL candle3 = GetCandleModel(bar_index + 2); + + // + double risk = requestLong ? + // + MathMin(openPrice, closePrice) - ll : + hh - MathMax(openPrice, closePrice) + ; + + // + double longR2R = xTPWLongR2R; + double shortR2R = xTPWShortR2R; + + // + double sharpDetectorValue = xTPWSharpDetectionFactor * _Point; + + // + if ( + risk > 0 + && requestLong + ) { + return result; + } + + // + // Define Entry Price ... + double entryPrice = requestLong + ? + prices.longEntry + : + prices.shortEntry + ; + + // + // Fix TP Detects for Short Signals ... + if (!requestLong) { + risk = 0; + } + + // + double reward = requestLong ? + risk * longR2R : + risk * shortR2R + ; + + // + if (risk == 0) { + // + // Calculate Reward ... + reward = requestLong + ? + MathAbs(hh - entryPrice) + : + MathAbs(hh - entryPrice) + ; + + // + // Detect Sharp Change Occured or not ... + bool isSharpOccured = reward > sharpDetectorValue + || MathAbs(reward - sharpDetectorValue) < (50 * _Point); + + // + // Change Rewards on Special Conditions ... + if ( + ( + requestLong + && isSharpOccured + && ( + state0.lcFast < state0.lcSlow + || ( + state0.mcFast > state0.mcSlow + && state0.mcWeight < state0.mcSlow + ) + ) + ) + ) { + reward = reward / 2; + } + + // + if (reward < 50 * _Point) { + reward = (50 * _Point) + prices.priceGap; + } + + // // + // if (!requestLong) { + // reward = reward * shortR2R; + // } + } + + // + double sl = requestLong ? + 0 : + 0; + double tp = requestLong ? + entryPrice + reward : + entryPrice - reward + ; + + // + datetime barTime = iTime( + _Symbol, + _Period, + bar_index + ); + + // + result.signal.tp = tp; + result.signal.sl = sl; + result.signal.type = type; + result.signal.time = barTime; + result.signal.tag = signalTag; + result.signal.symbol = _Symbol; + result.signal.entry = entryPrice; + result.signal.id = totalSignals + 1; + result.signal.provider = X_XTPW_PROVIDER; + + // + result.hasSignal = true; + result.type = type; + result.provider = X_XTPW_PROVIDER; + + // + return result; +} + +// +// Validate Signal Conditions ... +bool ValidateXTPWLongConditions() { + // + if ( + !enableXTPWLong + || !enableXTPWSignalling + ) { + return false; + } + + // + bool isConditionsFilled = + xTPWLongConds.startTime > 0 + && xTPWLongConds.signalTime > 0 + && xTPWLongConds.entryTime > 0 + ; + + // + bool isBLFilled = false; + if (isConditionsFilled) { + // // + // int startBarIndex = iBarShift( + // _Symbol, + // _Period, + // xTPWLongConds.startTime + // ); + + // // + // int signalBarIndex = iBarShift( + // _Symbol, + // _Period, + // xTPWLongConds.signalTime + // ); + + // // + // int entryBarIndex = iBarShift( + // _Symbol, + // _Period, + // xTPWLongConds.entryTime + // ); + + // // + // int startSignalDiff = (signalBarIndex - startBarIndex); + // int entrySignalDiff = (entryBarIndex - signalBarIndex); + // int maxDiff = MathMax(startSignalDiff, entrySignalDiff); + + // + isBLFilled = + // + // Starter ... + true + // + && xTPWLongConds.signalTime >= xTPWLongConds.startTime + && xTPWLongConds.entryTime >= xTPWLongConds.signalTime + // + // && maxDiff < (xTPWSwingLength * 2) + ; + } + + // + bool result = + isBLFilled + && isConditionsFilled + && xTPWWaitForLongSignals + ; + + // + // Since maybe Conditions Filled but + // Slope is Negative, for Handling Next Signals and + // Prevent from infinity loop, here we Clear Signal Conditions ... + if ( + !result + && isConditionsFilled + ) { + ClearXTPWLongSignalConditions(); + } + + // + return result; +} + +// +// Validate Signal Conditions ... +bool ValidateXTPWShortConditions() { + // + if ( + !enableXTPWShort + || !enableXTPWSignalling + ) { + return false; + } + + // + bool isConditionsFilled = + xTPWShortConds.startTime > 0 + && xTPWShortConds.signalTime > 0 + && xTPWShortConds.entryTime > 0 + ; + + // + bool isBLFilled = false; + if (isConditionsFilled) { + // // + // int startBarIndex = iBarShift( + // _Symbol, + // _Period, + // xTPWShortConds.startTime + // ); + + // // + // int signalBarIndex = iBarShift( + // _Symbol, + // _Period, + // xTPWShortConds.signalTime + // ); + + // // + // int entryBarIndex = iBarShift( + // _Symbol, + // _Period, + // xTPWShortConds.entryTime + // ); + + // + isBLFilled = + // + // Starter ... + true + // + && xTPWShortConds.signalTime >= xTPWShortConds.startTime + && xTPWShortConds.entryTime >= xTPWShortConds.signalTime + ; + } + + // + bool result = + isBLFilled + && isConditionsFilled + && xTPWWaitForShortSignals + ; + + // + // Since maybe Conditions Filled but + // Slope is Negative, for Handling Next Signals and + // Prevent from infinity loop, here we Clear Signal Conditions ... + if ( + !result + && isConditionsFilled + ) { + ClearXTPWShortSignalConditions(); + } + + // + return result; +} + +// +// Clear Long Signal Conditions for New One ... +void ClearXTPWLongSignalConditions() { + // + xTPWLongConds.startTime = 0; + xTPWLongConds.entryTime = 0; + xTPWLongConds.signalTime = 0; +} + +// +// Clear Short Signal Conditions for New One ... +void ClearXTPWShortSignalConditions() { + // + xTPWShortConds.startTime = 0; + xTPWShortConds.entryTime = 0; + xTPWShortConds.signalTime = 0; +} + +// +// Check State for Long Signals ... +bool IsReadyForXTPWSignals( + const XSignal &signal +) { + // + bool result = false; + + // + if ( + !enableXTPWSignalling + || !(enableXTPWLong || enableXTPWShort) + ) { + return result; + } + + // + int signalBarIndex = iBarShift( + _Symbol, + _Period, + signal.time + ); + + // + // XOHCL candle = GetCandleModel(0); + XOHCL candle0 = GetCandleModel(signalBarIndex); + XOHCL candle1 = GetCandleModel(signalBarIndex + 1); + + // + // Retrieve TPow State ... + XTPOWState tPow0 = GetXTPowState( + signalBarIndex, + xTPWSwingLength + ); + XTPOWState tPow1 = GetXTPowState( + signalBarIndex + 1, + xTPWSwingLength + ); + + // + // Retrive XMarket States ... + XTPWMarketState state0 = GetXTPWMarketState(signalBarIndex); + XTPWMarketState state1 = GetXTPWMarketState(signalBarIndex + 1); + XTPWMarketState state2 = GetXTPWMarketState(signalBarIndex + 2); + + // + bool isPSarVerified = false; + bool isTPowVerified = false; + bool isStateVerified = false; + bool isPriceVerified = false; + + // + // Calculate Sharp Detection Value ... + double sharpDetectionValue = + xTPWSharpDetectionFactor * _Point; + + // + // Find State0 Min ... + double state0Min = MathMin(state0.scFast, state0.scSlow); + state0Min = MathMin(state0Min, state0.mcFast); + state0Min = MathMin(state0Min, state0.mcSlow); + state0Min = MathMin(state0Min, state0.lcFast); + state0Min = MathMin(state0Min, state0.lcSlow); + + // + // Find State0 Min ... + double state0Max = MathMax(state0.scFast, state0.scSlow); + state0Max = MathMax(state0Max, state0.mcFast); + state0Max = MathMax(state0Max, state0.mcSlow); + state0Max = MathMax(state0Max, state0.lcFast); + state0Max = MathMax(state0Max, state0.lcSlow); + + // + // Find Distance Between State0 Min and Max ... + double state0MinMaxDistance = MathAbs(state0Max - state0Min); + + // + // Verify Long Signals ... + if (signal.type == X_SIGNAL_LONG) { + // + // Get Price Verification for Long ... + isPriceVerified = + // + // Starter ... + true + // + ; + + // + isTPowVerified = + // + // Starter ... + true + // + && tPow0.powerDown > tPowerMaxVerifier + && tPow1.powerDown > tPowerMaxVerifier + && tPow0.powerDown < MathMax(tPow1.powerUp, tPow1.powerDown) + && MathMax(tPow1.powerUp, tPow1.powerDown) > tPowerMaxVerifier + ; + + // + isPSarVerified = + // + // Starter ... + true + // + ; + + // + isStateVerified = + // + // Start ... + true + // + && state0.mcFast > state0.mcSlow + && state1.mcFast > state1.mcSlow + // + && !( + state0.lcFast > state0.mcSlow + && state0.lcFast < state0.mcFast + ) + // + && MathAbs(state1.mcFast - state1.mcSlow) > (50 * _Point) + ; + + // + result = + // + // Starter ... + true + // + && isPSarVerified + // + && isTPowVerified + // + && isStateVerified + // + && isPriceVerified + ; + } else + // + // Verify Short Signals ... + if (signal.type == X_SIGNAL_SHORT) { + // + isPSarVerified = + // + // Starter ... + true + ; + + // + // Get Price Verification for Short ... + isPriceVerified = + // + // Starter ... + true + ; + + // + isTPowVerified = + // + // Starter ... + true + // + && tPow0.signal > MathMax(tPow0.powerUp, tPow0.powerDown) + ; + + // + isStateVerified = + // + // Start ... + true + // + && ( + // + state0.scFast < state0.scSlow + && state0.mcFast < state0.mcSlow + && state0.lcFast < state0.lcSlow + ? + signal.entry > state0.scFast + : + // + // Find Minimum and Maximum Distance of State ... + state0MinMaxDistance > sharpDetectionValue + ? + signal.entry > state0Min + : + true + ) + // + && MathAbs(state0.mcFast - state0.mcSlow) > 50 * _Point + ; + + // + result = + // + // Starter Condition ... + true + // + && isPSarVerified + // + && isTPowVerified + // + && isStateVerified + // + && isPriceVerified + ; + } + + // + return result; +} +// +// END Functions ... +// + +// +// START Data Provider ... +// +// +// Retrieve Market State ... +XTPWMarketState GetXTPWMarketState( + const int bar_index +) { + // + XTPWMarketState result = {}; + + // + int dayCount = GetDailyCandleCount(); + int halfDayCount = (int)(dayCount / 2); + + // + if (scFastLength == 0) { + scFastLength = xTPWSwingLength; + } + + // + if (scSlowLength == 0) { + scSlowLength = xTPWSwingLength * 2; + } + + // + if (mcFastLength == 0) { + mcFastLength = halfDayCount; + } + + // + if (mcSlowLength == 0) { + mcSlowLength = dayCount; + } + + // + if (lcFastLength == 0) { + lcFastLength = halfDayCount * 3; + } + + // + if (lcSlowLength == 0) { + lcSlowLength = dayCount * 3; + } + + // + double scFast = GetMA( + bar_index, + scFastLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double scSlow = GetMA( + bar_index, + scSlowLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double scWeight = GetMA( + bar_index, + scSlowLength, + 0, + MODE_EMA, + PRICE_MEDIAN + ); + + // + double mcFast = GetMA( + bar_index, + mcFastLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double mcSlow = GetMA( + bar_index, + mcSlowLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double mcWeight = GetMA( + bar_index, + mcSlowLength, + 0, + MODE_EMA, + PRICE_MEDIAN + ); + + // + double lcFast = GetMA( + bar_index, + lcFastLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double lcSlow = GetMA( + bar_index, + lcSlowLength, + 0, + MODE_SMA, + PRICE_CLOSE + ); + + // + double lcWeight = GetMA( + bar_index, + lcSlowLength, + 0, + MODE_EMA, + PRICE_MEDIAN + ); + + // + double psar = iSAR( + _Symbol, + _Period, + xTPWPSarStep, + xTPWPSarMaximum, + bar_index + ); + + // + result.psar = psar; + result.scFast = scFast; + result.scSlow = scSlow; + result.mcFast = mcFast; + result.mcSlow = mcSlow; + result.lcFast = lcFast; + result.lcSlow = lcSlow; + result.scWeight = scWeight; + result.mcWeight = mcWeight; + result.lcWeight = lcWeight; + + // + return result; +} + +// +// Retrieve Highest Highs and Lowest Lows in Cycles ... +XLHS GetXTPWLHS( + const int bar_index +) { + // + XLHS result = {}; + + // + // Retrieve LL and HH (s) ... + + // + // SC HH ... + double scHH = GetMarketHighestHigh( + bar_index, + scFastLength + ); + + // + // SC LL ... + double scLL = GetMarketHighestHigh( + bar_index, + scFastLength + ); + + // + // MC HH ... + double mcHH = GetMarketHighestHigh( + bar_index, + mcFastLength + ); + + // + // MC LL ... + double mcLL = GetMarketHighestHigh( + bar_index, + mcFastLength + ); + + // + // LC HH ... + double lcHH = GetMarketHighestHigh( + bar_index, + lcFastLength + ); + + // + // LC LL ... + double lcLL = GetMarketHighestHigh( + bar_index, + lcFastLength + ); + + // + result.scHH = scHH; + result.scLL = scLL; + result.mcHH = mcHH; + result.mcLL = mcLL; + result.lcHH = lcHH; + result.lcLL = lcLL; + + // + return result; +} +// +// END Data Provider ... +// diff --git a/xSamples/ATR.mq4 b/xSamples/ATR.mq4 new file mode 100644 index 0000000..026565c --- /dev/null +++ b/xSamples/ATR.mq4 @@ -0,0 +1,104 @@ +//+------------------------------------------------------------------+ +//| ATR.mq4 | +//| Copyright 2005-2014, MetaQuotes Software Corp. | +//| http://www.mql4.com | +//+------------------------------------------------------------------+ +#property copyright "2005-2014, MetaQuotes Software Corp." +#property link "http://www.mql4.com" +#property description "Average True Range" +#property strict + +//--- indicator settings +#property indicator_separate_window +#property indicator_buffers 1 +#property indicator_color1 DodgerBlue +//--- input parameter +input int InpAtrPeriod=14; // ATR Period +//--- buffers +double ExtATRBuffer[]; +double ExtTRBuffer[]; +//+------------------------------------------------------------------+ +//| Custom indicator initialization function | +//+------------------------------------------------------------------+ +int OnInit(void) + { + string short_name; +//--- 1 additional buffer used for counting. + IndicatorBuffers(2); + IndicatorDigits(Digits); +//--- indicator line + SetIndexStyle(0,DRAW_LINE); + SetIndexBuffer(0,ExtATRBuffer); + SetIndexBuffer(1,ExtTRBuffer); +//--- name for DataWindow and indicator subwindow label + short_name="ATR("+IntegerToString(InpAtrPeriod)+")"; + IndicatorShortName(short_name); + SetIndexLabel(0,short_name); +//--- check for input parameter + if(InpAtrPeriod<=0) + { + Print("Wrong input parameter ATR Period=",InpAtrPeriod); + return(INIT_FAILED); + } +//--- + SetIndexDrawBegin(0,InpAtrPeriod); +//--- + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Average True Range | +//+------------------------------------------------------------------+ +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[]) + { + int i,limit; +//--- check for bars count and input parameter + if(rates_total<=InpAtrPeriod || InpAtrPeriod<=0) + return(0); +//--- counting from 0 to rates_total + ArraySetAsSeries(ExtATRBuffer,false); + ArraySetAsSeries(ExtTRBuffer,false); + ArraySetAsSeries(open,false); + ArraySetAsSeries(high,false); + ArraySetAsSeries(low,false); + ArraySetAsSeries(close,false); +//--- preliminary calculations + if(prev_calculated==0) + { + ExtTRBuffer[0]=0.0; + ExtATRBuffer[0]=0.0; + //--- filling out the array of True Range values for each period + for(i=1; i + +//--- indicator settings +#property indicator_separate_window +#property indicator_buffers 3 +#property indicator_color1 Black +#property indicator_color2 Green +#property indicator_color3 Red +//--- indicator buffers +double ExtACBuffer[]; +double ExtUpBuffer[]; +double ExtDnBuffer[]; +double ExtMacdBuffer[]; +double ExtSignalBuffer[]; +//--- +#define PERIOD_FAST 5 +#define PERIOD_SLOW 34 +//--- bars minimum for calculation +#define DATA_LIMIT 38 +//+------------------------------------------------------------------+ +//| Custom indicator initialization function | +//+------------------------------------------------------------------+ +void OnInit(void) + { + IndicatorShortName("AC"); +//--- 2 additional buffers are used for counting. + IndicatorBuffers(5); +//--- drawing settings + SetIndexStyle(0,DRAW_NONE); + SetIndexStyle(1,DRAW_HISTOGRAM); + SetIndexStyle(2,DRAW_HISTOGRAM); + IndicatorDigits(Digits+2); + SetIndexDrawBegin(0,DATA_LIMIT); + SetIndexDrawBegin(1,DATA_LIMIT); + SetIndexDrawBegin(2,DATA_LIMIT); +//--- all indicator buffers mapping + SetIndexBuffer(0,ExtACBuffer); + SetIndexBuffer(1,ExtUpBuffer); + SetIndexBuffer(2,ExtDnBuffer); + SetIndexBuffer(3,ExtMacdBuffer); + SetIndexBuffer(4,ExtSignalBuffer); +//--- name for DataWindow and indicator subwindow label + SetIndexLabel(1,NULL); + SetIndexLabel(2,NULL); + } +//+------------------------------------------------------------------+ +//| Accelerator/Decelerator Oscillator | +//+------------------------------------------------------------------+ +int OnCalculate (const int rates_total, + const int prev_calculated, + const datetime& time[], + const double& open[], + const double& high[], + const double& low[], + const double& close[], + const long& tick_volume[], + const long& volume[], + const int& spread[]) + { + int i,limit; + double prev=0.0,current; +//--- check for rates total + if(rates_total<=DATA_LIMIT) + return(0); +//--- last counted bar will be recounted + limit=rates_total-prev_calculated; + if(prev_calculated>0) + { + limit++; + prev=ExtMacdBuffer[limit]-ExtSignalBuffer[limit]; + } +//--- macd counted in the 1-st additional buffer + for(i=0; i=0;) + { + current=ExtMacdBuffer[i]-ExtSignalBuffer[i]; + if(current>prev) + up=true; + if(current=0) + { + ExtADbuffer[i]=(close[i]-low[i])-(high[i]-close[i]); + if(ExtADbuffer[i]!=0.0) + { + double diff=high[i]-low[i]; + if(diff<0.000000001) + ExtADbuffer[i]=0.0; + else + { + ExtADbuffer[i]/=diff; + ExtADbuffer[i]*=(double)tick_volume[i]; + } + } + if(i0) + { + limit++; + prev=ExtAOBuffer[limit]; + } +//--- macd + for(i=0; i=0; i--) + { + current=ExtAOBuffer[i]; + if(current>prev) + up=true; + if(current + +#property indicator_chart_window +#property indicator_buffers 3 +#property indicator_color1 LightSeaGreen +#property indicator_color2 LightSeaGreen +#property indicator_color3 LightSeaGreen +//--- indicator parameters +input int InpBandsPeriod=20; // Bands Period +input int InpBandsShift=0; // Bands Shift +input double InpBandsDeviations=2.0; // Bands Deviations +//--- buffers +double ExtMovingBuffer[]; +double ExtUpperBuffer[]; +double ExtLowerBuffer[]; +double ExtStdDevBuffer[]; +//+------------------------------------------------------------------+ +//| Custom indicator initialization function | +//+------------------------------------------------------------------+ +int OnInit(void) + { +//--- 1 additional buffer used for counting. + IndicatorBuffers(4); + IndicatorDigits(Digits); +//--- middle line + SetIndexStyle(0,DRAW_LINE); + SetIndexBuffer(0,ExtMovingBuffer); + SetIndexShift(0,InpBandsShift); + SetIndexLabel(0,"Bands SMA"); +//--- upper band + SetIndexStyle(1,DRAW_LINE); + SetIndexBuffer(1,ExtUpperBuffer); + SetIndexShift(1,InpBandsShift); + SetIndexLabel(1,"Bands Upper"); +//--- lower band + SetIndexStyle(2,DRAW_LINE); + SetIndexBuffer(2,ExtLowerBuffer); + SetIndexShift(2,InpBandsShift); + SetIndexLabel(2,"Bands Lower"); +//--- work buffer + SetIndexBuffer(3,ExtStdDevBuffer); +//--- check for input parameter + if(InpBandsPeriod<=0) + { + Print("Wrong input parameter Bands Period=",InpBandsPeriod); + return(INIT_FAILED); + } +//--- + SetIndexDrawBegin(0,InpBandsPeriod+InpBandsShift); + SetIndexDrawBegin(1,InpBandsPeriod+InpBandsShift); + SetIndexDrawBegin(2,InpBandsPeriod+InpBandsShift); +//--- initialization done + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Bollinger Bands | +//+------------------------------------------------------------------+ +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[]) + { + int i,pos; +//--- + if(rates_total<=InpBandsPeriod || InpBandsPeriod<=0) + return(0); +//--- counting from 0 to rates_total + ArraySetAsSeries(ExtMovingBuffer,false); + ArraySetAsSeries(ExtUpperBuffer,false); + ArraySetAsSeries(ExtLowerBuffer,false); + ArraySetAsSeries(ExtStdDevBuffer,false); + ArraySetAsSeries(close,false); +//--- initial zero + if(prev_calculated<1) + { + for(i=0; i1) + pos=prev_calculated-1; + else + pos=0; +//--- main cycle + for(i=pos; i=period) + { + //--- calcualte StdDev + for(int i=0; i0) + limit++; + for(int i=0; i0) + limit++; + for(int i=0; i + +#property indicator_separate_window +#property indicator_buffers 1 +#property indicator_color1 LightSeaGreen +#property indicator_level1 -100.0 +#property indicator_level2 100.0 +#property indicator_levelcolor clrSilver +#property indicator_levelstyle STYLE_DOT +//--- input parameter +input int InpCCIPeriod=14; // CCI Period +//--- buffers +double ExtCCIBuffer[]; +double ExtPriceBuffer[]; +double ExtMovBuffer[]; +//+------------------------------------------------------------------+ +//| Custom indicator initialization function | +//+------------------------------------------------------------------+ +int OnInit(void) + { + string short_name; +//--- 2 additional buffers are used for counting. + IndicatorBuffers(3); + SetIndexBuffer(1,ExtPriceBuffer); + SetIndexBuffer(2,ExtMovBuffer); +//--- indicator line + SetIndexStyle(0,DRAW_LINE); + SetIndexBuffer(0,ExtCCIBuffer); +//--- check for input parameter + if(InpCCIPeriod<=1) + { + Print("Wrong input parameter CCI Period=",InpCCIPeriod); + return(INIT_FAILED); + } +//--- + SetIndexDrawBegin(0,InpCCIPeriod); +//--- name for DataWindow and indicator subwindow label + short_name="CCI("+IntegerToString(InpCCIPeriod)+")"; + IndicatorShortName(short_name); + SetIndexLabel(0,short_name); +//--- initialization done + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Commodity Channel Index | +//+------------------------------------------------------------------+ +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[]) + { + int i,k,pos; + double dSum,dMul; +//--- + if(rates_total<=InpCCIPeriod || InpCCIPeriod<=1) + return(0); +//--- counting from 0 to rates_total + ArraySetAsSeries(ExtCCIBuffer,false); + ArraySetAsSeries(ExtPriceBuffer,false); + ArraySetAsSeries(ExtMovBuffer,false); + ArraySetAsSeries(high,false); + ArraySetAsSeries(low,false); + ArraySetAsSeries(close,false); +//--- initial zero + if(prev_calculated<1) + { + for(i=0; i'Properties...'):" +#property description " - on 'Color' Tab select 'Black' for 'Line Graph'" +#property description " - on 'Common' Tab disable 'Chart on Foreground' checkbox and select 'Line Chart' radiobutton" +#property strict + +#property indicator_chart_window +#property indicator_buffers 4 +#property indicator_color1 Red +#property indicator_color2 White +#property indicator_color3 Red +#property indicator_color4 White +#property indicator_width1 1 +#property indicator_width2 1 +#property indicator_width3 3 +#property indicator_width4 3 + +//--- +input color ExtColor1 = Red; // Shadow of bear candlestick +input color ExtColor2 = White; // Shadow of bull candlestick +input color ExtColor3 = Red; // Bear candlestick body +input color ExtColor4 = White; // Bull candlestick body +//--- buffers +double ExtLowHighBuffer[]; +double ExtHighLowBuffer[]; +double ExtOpenBuffer[]; +double ExtCloseBuffer[]; +//+------------------------------------------------------------------+ +//| Custom indicator initialization function | +//|------------------------------------------------------------------| +void OnInit(void) + { + IndicatorShortName("Heiken Ashi"); + IndicatorDigits(Digits); +//--- indicator lines + SetIndexStyle(0,DRAW_HISTOGRAM,0,1,ExtColor1); + SetIndexBuffer(0,ExtLowHighBuffer); + SetIndexStyle(1,DRAW_HISTOGRAM,0,1,ExtColor2); + SetIndexBuffer(1,ExtHighLowBuffer); + SetIndexStyle(2,DRAW_HISTOGRAM,0,3,ExtColor3); + SetIndexBuffer(2,ExtOpenBuffer); + SetIndexStyle(3,DRAW_HISTOGRAM,0,3,ExtColor4); + SetIndexBuffer(3,ExtCloseBuffer); +//--- + SetIndexLabel(0,"Low/High"); + SetIndexLabel(1,"High/Low"); + SetIndexLabel(2,"Open"); + SetIndexLabel(3,"Close"); + SetIndexDrawBegin(0,10); + SetIndexDrawBegin(1,10); + SetIndexDrawBegin(2,10); + SetIndexDrawBegin(3,10); +//--- indicator buffers mapping + SetIndexBuffer(0,ExtLowHighBuffer); + SetIndexBuffer(1,ExtHighLowBuffer); + SetIndexBuffer(2,ExtOpenBuffer); + SetIndexBuffer(3,ExtCloseBuffer); +//--- initialization done + } +//+------------------------------------------------------------------+ +//| Heiken Ashi | +//+------------------------------------------------------------------+ +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[]) + { + int i,pos; + double haOpen,haHigh,haLow,haClose; +//--- + if(rates_total<=10) + return(0); +//--- counting from 0 to rates_total + ArraySetAsSeries(ExtLowHighBuffer,false); + ArraySetAsSeries(ExtHighLowBuffer,false); + ArraySetAsSeries(ExtOpenBuffer,false); + ArraySetAsSeries(ExtCloseBuffer,false); + ArraySetAsSeries(open,false); + ArraySetAsSeries(high,false); + ArraySetAsSeries(low,false); + ArraySetAsSeries(close,false); +//--- preliminary calculation + if(prev_calculated>1) + pos=prev_calculated-1; + else + { + //--- set first candle + if(open[0]InpTenkan) + pos=prev_calculated-1; + for(i=pos; ilow[k]) + low_value=low[k]; + k++; + } + ExtTenkanBuffer[i]=(high_value+low_value)/2; + } +//--- Kijun Sen + pos=InpKijun-1; + if(prev_calculated>InpKijun) + pos=prev_calculated-1; + for(i=pos; ilow[k]) + low_value=low[k]; + k++; + } + ExtKijunBuffer[i]=(high_value+low_value)/2; + } +//--- Senkou Span A + pos=ExtBegin-1; + if(prev_calculated>ExtBegin) + pos=prev_calculated-1; + for(i=pos; iInpSenkou) + pos=prev_calculated-1; + for(i=pos; ilow[k]) + low_value=low[k]; + k++; + } + ExtSpanB_Buffer[i]=(high_value+low_value)/2; + ExtSpanB2_Buffer[i]=ExtSpanB_Buffer[i]; + } +//--- Chikou Span + pos=0; + if(prev_calculated>1) + pos=prev_calculated-1; + for(i=pos; i + +//--- indicator settings +#property indicator_separate_window +#property indicator_buffers 2 +#property indicator_color1 Silver +#property indicator_color2 Red +#property indicator_width1 2 +//--- indicator parameters +input int InpFastEMA=12; // Fast EMA Period +input int InpSlowEMA=26; // Slow EMA Period +input int InpSignalSMA=9; // Signal SMA Period +//--- indicator buffers +double ExtMacdBuffer[]; +double ExtSignalBuffer[]; +//--- right input parameters flag +bool ExtParameters=false; + +//+------------------------------------------------------------------+ +//| Custom indicator initialization function | +//+------------------------------------------------------------------+ +int OnInit(void) + { + IndicatorDigits(Digits+1); +//--- drawing settings + SetIndexStyle(0,DRAW_HISTOGRAM); + SetIndexStyle(1,DRAW_LINE); + SetIndexDrawBegin(1,InpSignalSMA); +//--- indicator buffers mapping + SetIndexBuffer(0,ExtMacdBuffer); + SetIndexBuffer(1,ExtSignalBuffer); +//--- name for DataWindow and indicator subwindow label + IndicatorShortName("MACD("+IntegerToString(InpFastEMA)+","+IntegerToString(InpSlowEMA)+","+IntegerToString(InpSignalSMA)+")"); + SetIndexLabel(0,"MACD"); + SetIndexLabel(1,"Signal"); +//--- check for input parameters + if(InpFastEMA<=1 || InpSlowEMA<=1 || InpSignalSMA<=1 || InpFastEMA>=InpSlowEMA) + { + Print("Wrong input parameters"); + ExtParameters=false; + return(INIT_FAILED); + } + else + ExtParameters=true; +//--- initialization done + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Moving Averages Convergence/Divergence | +//+------------------------------------------------------------------+ +int OnCalculate (const int rates_total, + const int prev_calculated, + const datetime& time[], + const double& open[], + const double& high[], + const double& low[], + const double& close[], + const long& tick_volume[], + const long& volume[], + const int& spread[]) + { + int i,limit; +//--- + if(rates_total<=InpSignalSMA || !ExtParameters) + return(0); +//--- last counted bar will be recounted + limit=rates_total-prev_calculated; + if(prev_calculated>0) + limit++; +//--- macd counted in the 1-st buffer + for(i=0; i + +//--- indicator settings +#property indicator_separate_window +#property indicator_buffers 1 +#property indicator_color1 Silver +#property indicator_width1 2 +//--- indicator parameters +input int InpFastEMA=12; // Fast EMA Period +input int InpSlowEMA=26; // Slow EMA Period +input int InpSignalSMA=9; // Signal SMA Period +//--- indicator buffers +double ExtOsmaBuffer[]; +double ExtMacdBuffer[]; +double ExtSignalBuffer[]; +//--- right input parameters flag +bool ExtParameters=false; +//+------------------------------------------------------------------+ +//| Custom indicator initialization function | +//+------------------------------------------------------------------+ +int OnInit(void) + { +//--- 2 additional buffers are used for counting. + IndicatorBuffers(3); +//--- drawing settings + SetIndexStyle(0,DRAW_HISTOGRAM); + SetIndexDrawBegin(0,InpSignalSMA); + IndicatorDigits(Digits+2); +//--- 3 indicator buffers mapping + SetIndexBuffer(0,ExtOsmaBuffer); + SetIndexBuffer(1,ExtMacdBuffer); + SetIndexBuffer(2,ExtSignalBuffer); +//--- name for DataWindow and indicator subwindow label + IndicatorShortName("OsMA("+IntegerToString(InpFastEMA)+","+IntegerToString(InpSlowEMA)+","+IntegerToString(InpSignalSMA)+")"); +//--- check for input parameters + if(InpFastEMA<=1 || InpSlowEMA<=1 || InpSignalSMA<=1 || InpFastEMA>=InpSlowEMA) + { + Print("Wrong input parameters"); + ExtParameters=false; + return(INIT_FAILED); + } + else + ExtParameters=true; +//--- initialization done + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Moving Average of Oscillator | +//+------------------------------------------------------------------+ +int OnCalculate (const int rates_total, + const int prev_calculated, + const datetime& time[], + const double& open[], + const double& high[], + const double& low[], + const double& close[], + const long& tick_volume[], + const long& volume[], + const int& spread[]) + { + int i,limit; +//--- + if(rates_total<=InpSignalSMA || !ExtParameters) + return(0); +//--- last counted bar will be recounted + limit=rates_total-prev_calculated; + if(prev_calculated>0) + limit++; +//--- macd counted in the 1-st buffer + for(i=0; ilow[i]) + last_low=low[i]; + if(last_highhigh[i-1] && low[i]>low[i-1]) + break; + if(high[i]ExtSARBuffer[i-1]) + { + SaveLastReverse(i,false,step,last_low,high[i],ep,sar); + step=ExtSarStep; + dir_long=true; + ep=high[i]; + last_high=high[i]; + ExtSARBuffer[i++]=last_low; + continue; + } + //--- + sar=ExtSARBuffer[i-1]+step*(ep-ExtSARBuffer[i-1]); + //--- LONG? + if(dir_long) + { + if(eplow[i-1]) + sar=low[i-1]; + if(sar>low[i-2]) + sar=low[i-2]; + if(sar>low[i]) + { + SaveLastReverse(i,true,step,low[i],last_high,ep,sar); + step=ExtSarStep; dir_long=false; ep=low[i]; + last_low=low[i]; + ExtSARBuffer[i++]=last_high; + continue; + } + if(eplow[i]) + { + if((step+ExtSarStep)<=ExtSarMaximum) + step+=ExtSarStep; + } + if(low[i]low[i]) + ep=last_low=low[i]; + } + ExtSARBuffer[i++]=sar; + } +//---- OnCalculate done. Return new prev_calculated. + return(rates_total); + } +//+------------------------------------------------------------------+ +//| save last values to continue further calculations | +//+------------------------------------------------------------------+ +void SaveLastReverse(int reverse,bool dir,double step,double last_low,double last_high,double ep,double sar) + { + ExtLastReverse=reverse; + if(ExtLastReverse<2) + ExtLastReverse=2; + ExtDirectionLong=dir; + ExtLastStep=step; + ExtLastLow=last_low; + ExtLastHigh=last_high; + ExtLastEP=ep; + ExtLastSAR=sar; + } +//+------------------------------------------------------------------+ diff --git a/xSamples/ParabolicSar.mq4 b/xSamples/ParabolicSar.mq4 new file mode 100644 index 0000000..261808a --- /dev/null +++ b/xSamples/ParabolicSar.mq4 @@ -0,0 +1,333 @@ +//------------------------------------------------------------------ +#property copyright "www.forex-station.com" +#property link "www.forex-station.com" +//------------------------------------------------------------------ +#property indicator_chart_window +#property indicator_buffers 4 +#property indicator_color1 clrLimeGreen +#property indicator_color2 clrOrange +#property indicator_color3 clrLimeGreen +#property indicator_color4 clrOrange +#property indicator_width3 3 +#property indicator_width4 3 +#property strict + +// +// +// +// +// + +extern ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT; // Time frame to use +extern double AccStep = 0.02; // Accumulation step +extern double AccLimit = 0.2; // Accumulation limit +extern ENUM_APPLIED_PRICE PriceHigh = PRICE_CLOSE; // Psar high price +extern ENUM_APPLIED_PRICE PriceLow = PRICE_CLOSE; // Psar low price +extern int PriceSmoothing = 0; // Psar smoothing +extern ENUM_MA_METHOD PriceSmoothingMethod = MODE_SMA; // Psar ma smoothing method +extern bool alertsOn = true; // Alerts on? +extern bool alertsOnCurrent = false; // Alerts on current open bar? +extern bool alertsMessage = true; // Alerts message? +extern bool alertsSound = false; // Alerts sound? +extern bool alertsEmail = false; // Alerts email? +extern bool alertsNotify = false; // Alerts notification by phone? +extern bool DrawAsDots = true; // Draw as dots or solid line +extern int Shift = 0; // Shift + +double sarUp[]; +double sarDn[]; +double saraUp[]; +double saraDn[]; +int timeFrame; +string indicatorFileName; +bool returnBars; + +//------------------------------------------------------------------ +// +//------------------------------------------------------------------ +// +// +// +// +// + +int init() +{ + int type = DRAW_LINE; if (DrawAsDots) type = DRAW_ARROW; + SetIndexBuffer(0,sarUp); SetIndexStyle(0,type); SetIndexArrow(0,159); + SetIndexBuffer(1,sarDn); SetIndexStyle(1,type); SetIndexArrow(1,159); + SetIndexBuffer(2,saraUp); SetIndexStyle(2,DRAW_ARROW); SetIndexArrow(2,159); + SetIndexBuffer(3,saraDn); SetIndexStyle(3,DRAW_ARROW); SetIndexArrow(3,159); + + // + // + // + // + // + + indicatorFileName = WindowExpertName(); + returnBars = (TimeFrame==-99); + TimeFrame = MathMax(TimeFrame,_Period); + PriceSmoothing = MathMax(PriceSmoothing,1); + for (int i=0; i<4; i++) SetIndexShift(i,Shift*timeFrame/Period()); + + // + // + // + // + // + + return(0); +} +int deinit() { return(0); } + +//------------------------------------------------------------------ +// +//------------------------------------------------------------------ +// +// +// +// +// + +int start() +{ + int i,counted_bars=IndicatorCounted(); + if(counted_bars < 0) return(-1); + if(counted_bars>0) counted_bars--; + int limit = MathMin(Bars-counted_bars,Bars-1); + if (returnBars) { sarUp[0] = limit+1; return(0); } + + // + // + // + // + // + + if (TimeFrame == Period()) + { + for(i = limit; i >= 0; i--) + { + double sarClose; + double sarOpen; + double sarPosition; + double sarChange; + double pHigh = iMA(NULL,0,PriceSmoothing,0,PriceSmoothingMethod,PriceHigh,i); + double pLow = iMA(NULL,0,PriceSmoothing,0,PriceSmoothingMethod,PriceLow ,i); + iParabolic(fmax(pHigh,pLow),fmin(pHigh,pLow),AccStep,AccLimit,sarClose,sarOpen,sarPosition,sarChange,i); + sarUp[i] = EMPTY_VALUE; + sarDn[i] = EMPTY_VALUE; + saraUp[i] = EMPTY_VALUE; + saraDn[i] = EMPTY_VALUE; + if (sarPosition==1) + sarUp[i] = sarClose; + else sarDn[i] = sarClose; + if (sarChange!=0) + if (sarChange==1) + saraUp[i] = sarClose; + else saraDn[i] = sarClose; + } + manageAlerts(); + return(0); + } + + // + // + // + // + // + + limit = (int)fmax(limit,fmin(Bars-1,iCustom(NULL,TimeFrame,indicatorFileName,-99,0,0)*TimeFrame/Period())); + for(i=limit; i>=0; i--) + { + int y = iBarShift(NULL,TimeFrame,Time[i]); + int x = iBarShift(NULL,TimeFrame,Time[i+1]); + sarUp[i] = iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,AccStep,AccLimit,PriceHigh,PriceLow,PriceSmoothing,PriceSmoothingMethod,alertsOn,alertsOnCurrent,alertsMessage,alertsSound,alertsEmail,0,0,y); + sarDn[i] = iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,AccStep,AccLimit,PriceHigh,PriceLow,PriceSmoothing,PriceSmoothingMethod,alertsOn,alertsOnCurrent,alertsMessage,alertsSound,alertsEmail,0,1,y); + saraUp[i] = EMPTY_VALUE; + saraDn[i] = EMPTY_VALUE; + if (x!=y) + { + saraUp[i] = iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,AccStep,AccLimit,PriceHigh,PriceLow,PriceSmoothing,PriceSmoothingMethod,alertsOn,alertsOnCurrent,alertsMessage,alertsSound,alertsEmail,0,2,y); + saraDn[i] = iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,AccStep,AccLimit,PriceHigh,PriceLow,PriceSmoothing,PriceSmoothingMethod,alertsOn,alertsOnCurrent,alertsMessage,alertsSound,alertsEmail,0,3,y); + } + } + return(0); + +} + +//------------------------------------------------------------------ +// +//------------------------------------------------------------------ +// +// +// +// +// + +double work[][7]; +#define _high 0 +#define _low 1 +#define _ohigh 2 +#define _olow 3 +#define _open 4 +#define _position 5 +#define _af 6 + + +void iParabolic(double high, double low, double step, double limit, double& pClose, double& pOpen, double& pPosition, double& pChange, int i) +{ + if (ArrayRange(work,0)!=Bars) ArrayResize(work,Bars); i = Bars-i-1; + + // + // + // + // + // + + pChange = 0; + work[i][_ohigh] = high; + work[i][_olow] = low; + if (i<1) + { + work[i][_high] = high; + work[i][_low] = low; + work[i][_open] = high; + work[i][_position] = -1; + return; + } + work[i][_open] = work[i-1][_open]; + work[i][_af] = work[i-1][_af]; + work[i][_position] = work[i-1][_position]; + work[i][_high] = fmax(work[i-1][_high],high); + work[i][_low] = fmin(work[i-1][_low] ,low ); + + // + // + // + // + // + + if (work[i][_position] == 1) + if (low<=work[i][_open]) + { + work[i][_position] = -1; + pChange = -1; + pClose = work[i][_high]; + work[i][_high] = high; + work[i][_low] = low; + work[i][_af] = step; + work[i][_open] = pClose + work[i][_af]*(work[i][_low]-pClose); + if (work[i][_open]work[i-1][_high] && work[i][_af]work[i ][_olow]) work[i][_open] = work[i ][_olow]; + if (work[i][_open]>work[i-1][_olow]) work[i][_open] = work[i-1][_olow]; + } + else + if (high>=work[i][_open]) + { + work[i][_position] = 1; + pChange = 1; + pClose = work[i][_low]; + work[i][_low] = low; + work[i][_high] = high; + work[i][_af] = step; + work[i][_open] = pClose + work[i][_af]*(work[i][_high]-pClose); + if (work[i][_open]>work[i ][_olow]) work[i][_open] = work[i ][_olow]; + if (work[i][_open]>work[i-1][_olow]) work[i][_open] = work[i-1][_olow]; + } + else + { + pClose = work[i][_open]; + if (work[i][_low]=0; i--) + if (tf==iTfTable[i]) return(sTfTable[i]); + return(""); +} \ No newline at end of file diff --git a/xSamples/RSI.mq4 b/xSamples/RSI.mq4 new file mode 100644 index 0000000..f5aee97 --- /dev/null +++ b/xSamples/RSI.mq4 @@ -0,0 +1,133 @@ +//+------------------------------------------------------------------+ +//| RSI.mq4 | +//| Copyright 2005-2014, MetaQuotes Software Corp. | +//| http://www.mql4.com | +//+------------------------------------------------------------------+ +#property copyright "2005-2014, MetaQuotes Software Corp." +#property link "http://www.mql4.com" +#property description "Relative Strength Index" +#property strict + +#property indicator_separate_window +#property indicator_minimum 0 +#property indicator_maximum 100 +#property indicator_buffers 1 +#property indicator_color1 DodgerBlue +#property indicator_level1 30.0 +#property indicator_level2 70.0 +#property indicator_levelcolor clrSilver +#property indicator_levelstyle STYLE_DOT +//--- input parameters +input int InpRSIPeriod=14; // RSI Period +//--- buffers +double ExtRSIBuffer[]; +double ExtPosBuffer[]; +double ExtNegBuffer[]; +//+------------------------------------------------------------------+ +//| Custom indicator initialization function | +//+------------------------------------------------------------------+ +int OnInit(void) + { + string short_name; +//--- 2 additional buffers are used for counting. + IndicatorBuffers(3); + SetIndexBuffer(1,ExtPosBuffer); + SetIndexBuffer(2,ExtNegBuffer); +//--- indicator line + SetIndexStyle(0,DRAW_LINE); + SetIndexBuffer(0,ExtRSIBuffer); +//--- name for DataWindow and indicator subwindow label + short_name="RSI("+string(InpRSIPeriod)+")"; + IndicatorShortName(short_name); + SetIndexLabel(0,short_name); +//--- check for input + if(InpRSIPeriod<2) + { + Print("Incorrect value for input variable InpRSIPeriod = ",InpRSIPeriod); + return(INIT_FAILED); + } +//--- + SetIndexDrawBegin(0,InpRSIPeriod); +//--- initialization done + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Relative Strength Index | +//+------------------------------------------------------------------+ +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[]) + { + int i,pos; + double diff; +//--- + if(Bars<=InpRSIPeriod || InpRSIPeriod<2) + return(0); +//--- counting from 0 to rates_total + ArraySetAsSeries(ExtRSIBuffer,false); + ArraySetAsSeries(ExtPosBuffer,false); + ArraySetAsSeries(ExtNegBuffer,false); + ArraySetAsSeries(close,false); +//--- preliminary calculations + pos=prev_calculated-1; + if(pos<=InpRSIPeriod) + { + //--- first RSIPeriod values of the indicator are not calculated + ExtRSIBuffer[0]=0.0; + ExtPosBuffer[0]=0.0; + ExtNegBuffer[0]=0.0; + double sump=0.0; + double sumn=0.0; + for(i=1; i<=InpRSIPeriod; i++) + { + ExtRSIBuffer[i]=0.0; + ExtPosBuffer[i]=0.0; + ExtNegBuffer[i]=0.0; + diff=close[i]-close[i-1]; + if(diff>0) + sump+=diff; + else + sumn-=diff; + } + //--- calculate first visible value + ExtPosBuffer[InpRSIPeriod]=sump/InpRSIPeriod; + ExtNegBuffer[InpRSIPeriod]=sumn/InpRSIPeriod; + if(ExtNegBuffer[InpRSIPeriod]!=0.0) + ExtRSIBuffer[InpRSIPeriod]=100.0-(100.0/(1.0+ExtPosBuffer[InpRSIPeriod]/ExtNegBuffer[InpRSIPeriod])); + else + { + if(ExtPosBuffer[InpRSIPeriod]!=0.0) + ExtRSIBuffer[InpRSIPeriod]=100.0; + else + ExtRSIBuffer[InpRSIPeriod]=50.0; + } + //--- prepare the position value for main calculation + pos=InpRSIPeriod+1; + } +//--- the main loop of calculations + for(i=pos; i0.0?diff:0.0))/InpRSIPeriod; + ExtNegBuffer[i]=(ExtNegBuffer[i-1]*(InpRSIPeriod-1)+(diff<0.0?-diff:0.0))/InpRSIPeriod; + if(ExtNegBuffer[i]!=0.0) + ExtRSIBuffer[i]=100.0-100.0/(1+ExtPosBuffer[i]/ExtNegBuffer[i]); + else + { + if(ExtPosBuffer[i]!=0.0) + ExtRSIBuffer[i]=100.0; + else + ExtRSIBuffer[i]=50.0; + } + } +//--- + return(rates_total); + } +//+------------------------------------------------------------------+ diff --git a/xSamples/Stochastic.mq4 b/xSamples/Stochastic.mq4 new file mode 100644 index 0000000..858296e --- /dev/null +++ b/xSamples/Stochastic.mq4 @@ -0,0 +1,157 @@ +//+------------------------------------------------------------------+ +//| Stochastic.mq4 | +//| Copyright 2005-2014, MetaQuotes Software Corp. | +//| http://www.mql4.com | +//+------------------------------------------------------------------+ +#property copyright "2005-2014, MetaQuotes Software Corp." +#property link "http://www.mql4.com" +#property description "Stochastic Oscillator" +#property strict + +#property indicator_separate_window +#property indicator_minimum 0 +#property indicator_maximum 100 +#property indicator_buffers 2 +#property indicator_color1 LightSeaGreen +#property indicator_color2 Red +#property indicator_level1 20.0 +#property indicator_level2 80.0 +#property indicator_levelcolor clrSilver +#property indicator_levelstyle STYLE_DOT +//--- input parameters +input int InpKPeriod=5; // K Period +input int InpDPeriod=3; // D Period +input int InpSlowing=3; // Slowing +//--- buffers +double ExtMainBuffer[]; +double ExtSignalBuffer[]; +double ExtHighesBuffer[]; +double ExtLowesBuffer[]; +//--- +int draw_begin1=0; +int draw_begin2=0; +//+------------------------------------------------------------------+ +//| Custom indicator initialization function | +//+------------------------------------------------------------------+ +int OnInit(void) + { + string short_name; +//--- 2 additional buffers are used for counting. + IndicatorBuffers(4); + SetIndexBuffer(2, ExtHighesBuffer); + SetIndexBuffer(3, ExtLowesBuffer); +//--- indicator lines + SetIndexStyle(0,DRAW_LINE); + SetIndexBuffer(0, ExtMainBuffer); + SetIndexStyle(1,DRAW_LINE); + SetIndexBuffer(1, ExtSignalBuffer); +//--- name for DataWindow and indicator subwindow label + short_name="Sto("+IntegerToString(InpKPeriod)+","+IntegerToString(InpDPeriod)+","+IntegerToString(InpSlowing)+")"; + IndicatorShortName(short_name); + SetIndexLabel(0,short_name); + SetIndexLabel(1,"Signal"); +//--- + draw_begin1=InpKPeriod+InpSlowing; + draw_begin2=draw_begin1+InpDPeriod; + SetIndexDrawBegin(0,draw_begin1); + SetIndexDrawBegin(1,draw_begin2); +//--- initialization done + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Stochastic oscillator | +//+------------------------------------------------------------------+ +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[]) + { + int i,k,pos; +//--- check for bars count + if(rates_total<=InpKPeriod+InpDPeriod+InpSlowing) + return(0); +//--- counting from 0 to rates_total + ArraySetAsSeries(ExtMainBuffer,false); + ArraySetAsSeries(ExtSignalBuffer,false); + ArraySetAsSeries(ExtHighesBuffer,false); + ArraySetAsSeries(ExtLowesBuffer,false); + ArraySetAsSeries(low,false); + ArraySetAsSeries(high,false); + ArraySetAsSeries(close,false); +//--- + pos=InpKPeriod-1; + if(pos+1low[k]) + dmin=low[k]; + if(dmax=InpDepth) + { + Print("Backstep cannot be greater or equal to Depth"); + return(INIT_FAILED); + } +//--- 2 additional buffers + IndicatorBuffers(3); +//---- drawing settings + SetIndexStyle(0,DRAW_SECTION); +//---- indicator buffers + SetIndexBuffer(0,ExtZigzagBuffer); + SetIndexBuffer(1,ExtHighBuffer); + SetIndexBuffer(2,ExtLowBuffer); + SetIndexEmptyValue(0,0.0); +//---- indicator short name + IndicatorShortName("ZigZag("+string(InpDepth)+","+string(InpDeviation)+","+string(InpBackstep)+")"); +//---- initialization done + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long& tick_volume[], + const long& volume[], + const int& spread[]) + { + int i,limit,counterZ,whatlookfor=0; + int back,pos,lasthighpos=0,lastlowpos=0; + double extremum; + double curlow=0.0,curhigh=0.0,lasthigh=0.0,lastlow=0.0; +//--- check for history and inputs + if(rates_total=InpDepth) + return(0); +//--- first calculations + if(prev_calculated==0) + limit=InitializeAll(); + else + { + //--- find first extremum in the depth ExtLevel or 100 last bars + i=counterZ=0; + while(counterZ=0; i--) + { + ExtZigzagBuffer[i]=0.0; + ExtLowBuffer[i]=0.0; + ExtHighBuffer[i]=0.0; + } + } + } + +//--- main loop + for(i=limit; i>=0; i--) + { + //--- find lowest low in depth of bars + extremum=low[iLowest(NULL,0,MODE_LOW,InpDepth,i)]; + //--- this lowest has been found previously + if(extremum==lastlow) + extremum=0.0; + else + { + //--- new last low + lastlow=extremum; + //--- discard extremum if current low is too high + if(low[i]-extremum>InpDeviation*Point) + extremum=0.0; + else + { + //--- clear previous extremums in backstep bars + for(back=1; back<=InpBackstep; back++) + { + pos=i+back; + if(ExtLowBuffer[pos]!=0 && ExtLowBuffer[pos]>extremum) + ExtLowBuffer[pos]=0.0; + } + } + } + //--- found extremum is current low + if(low[i]==extremum) + ExtLowBuffer[i]=extremum; + else + ExtLowBuffer[i]=0.0; + //--- find highest high in depth of bars + extremum=high[iHighest(NULL,0,MODE_HIGH,InpDepth,i)]; + //--- this highest has been found previously + if(extremum==lasthigh) + extremum=0.0; + else + { + //--- new last high + lasthigh=extremum; + //--- discard extremum if current high is too low + if(extremum-high[i]>InpDeviation*Point) + extremum=0.0; + else + { + //--- clear previous extremums in backstep bars + for(back=1; back<=InpBackstep; back++) + { + pos=i+back; + if(ExtHighBuffer[pos]!=0 && ExtHighBuffer[pos]=0; i--) + { + switch(whatlookfor) + { + case 0: // look for peak or lawn + if(lastlow==0.0 && lasthigh==0.0) + { + if(ExtHighBuffer[i]!=0.0) + { + lasthigh=High[i]; + lasthighpos=i; + whatlookfor=-1; + ExtZigzagBuffer[i]=lasthigh; + } + if(ExtLowBuffer[i]!=0.0) + { + lastlow=Low[i]; + lastlowpos=i; + whatlookfor=1; + ExtZigzagBuffer[i]=lastlow; + } + } + break; + case 1: // look for peak + if(ExtLowBuffer[i]!=0.0 && ExtLowBuffer[i]lasthigh && ExtLowBuffer[i]==0.0) + { + ExtZigzagBuffer[lasthighpos]=0.0; + lasthighpos=i; + lasthigh=ExtHighBuffer[i]; + ExtZigzagBuffer[i]=lasthigh; + } + if(ExtLowBuffer[i]!=0.0 && ExtHighBuffer[i]==0.0) + { + lastlow=ExtLowBuffer[i]; + lastlowpos=i; + ExtZigzagBuffer[i]=lastlow; + whatlookfor=1; + } + break; + } + } + +//--- done + return(rates_total); + } +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +int InitializeAll() + { + ArrayInitialize(ExtZigzagBuffer,0.0); + ArrayInitialize(ExtHighBuffer,0.0); + ArrayInitialize(ExtLowBuffer,0.0); +//--- first counting position + return(Bars-InpDepth); + } +//+------------------------------------------------------------------+ \ No newline at end of file diff --git a/xSamples/iExposure.mq4 b/xSamples/iExposure.mq4 new file mode 100644 index 0000000..33de30a --- /dev/null +++ b/xSamples/iExposure.mq4 @@ -0,0 +1,249 @@ +//+------------------------------------------------------------------+ +//| iExposure.mq4 | +//| Copyright 2007-2014, MetaQuotes Software Corp. | +//| http://www.mql4.com | +//+------------------------------------------------------------------+ +#property copyright "2007-2014, MetaQuotes Software Corp." +#property link "http://www.mql4.com" +#property strict + +#property indicator_separate_window +#property indicator_buffers 1 +#property indicator_minimum 0.0 +#property indicator_maximum 0.1 + +#define SYMBOLS_MAX 1024 +#define DEALS 0 +#define BUY_LOTS 1 +#define BUY_PRICE 2 +#define SELL_LOTS 3 +#define SELL_PRICE 4 +#define NET_LOTS 5 +#define PROFIT 6 + +input color InpColor=LightSeaGreen; // Text color + +string ExtName="Exposure"; +string ExtSymbols[SYMBOLS_MAX]; +int ExtSymbolsTotal=0; +double ExtSymbolsSummaries[SYMBOLS_MAX][7]; +int ExtLines=-1; +string ExtCols[8]={"Symbol", + "Deals", + "Buy lots", + "Buy price", + "Sell lots", + "Sell price", + "Net lots", + "Profit"}; +int ExtShifts[8]={ 10, 80, 130, 180, 260, 310, 390, 460 }; +int ExtVertShift=14; +double ExtMapBuffer[]; +//+------------------------------------------------------------------+ +//| Custom indicator initialization function | +//+------------------------------------------------------------------+ +void OnInit() + { + IndicatorShortName(ExtName); + SetIndexBuffer(0,ExtMapBuffer); + SetIndexStyle(0,DRAW_NONE); + IndicatorDigits(0); + SetIndexEmptyValue(0,0.0); + } +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { + int windex=WindowFind(ExtName); + if(windex>0) + ObjectsDeleteAll(windex); + } +//+------------------------------------------------------------------+ +//| Custom indicator iteration function | +//+------------------------------------------------------------------+ +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long& tick_volume[], + const long& volume[], + const int& spread[]) + { + string name; + int i,col,line,windex=WindowFind(ExtName); +//---- + if(windex<0) + return(rates_total); +//---- header line + if(ExtLines<0) + { + for(col=0; col<8; col++) + { + name="Head_"+string(col); + if(ObjectCreate(name,OBJ_LABEL,windex,0,0)) + { + ObjectSet(name,OBJPROP_XDISTANCE,ExtShifts[col]); + ObjectSet(name,OBJPROP_YDISTANCE,ExtVertShift); + ObjectSetText(name,ExtCols[col],9,"Arial",InpColor); + } + } + ExtLines=0; + } +//---- + ArrayInitialize(ExtSymbolsSummaries,0.0); + int total=Analyze(); + if(total>0) + { + line=0; + for(i=0; iExtLines) + { + int y_dist=ExtVertShift*(line+1)+1; + for(col=0; col<8; col++) + { + name="Line_"+string(line)+"_"+string(col); + if(ObjectCreate(name,OBJ_LABEL,windex,0,0)) + { + ObjectSet(name,OBJPROP_XDISTANCE,ExtShifts[col]); + ObjectSet(name,OBJPROP_YDISTANCE,y_dist); + } + } + ExtLines++; + } + //---- set line + int digits=(int)MarketInfo(ExtSymbols[i],MODE_DIGITS); + double buy_lots=ExtSymbolsSummaries[i][BUY_LOTS]; + double sell_lots=ExtSymbolsSummaries[i][SELL_LOTS]; + double buy_price=0.0; + double sell_price=0.0; + if(buy_lots!=0) buy_price=ExtSymbolsSummaries[i][BUY_PRICE]/buy_lots; + if(sell_lots!=0) sell_price=ExtSymbolsSummaries[i][SELL_PRICE]/sell_lots; + name="Line_"+string(line)+"_0"; + ObjectSetText(name,ExtSymbols[i],9,"Arial",InpColor); + name="Line_"+string(line)+"_1"; + ObjectSetText(name,DoubleToStr(ExtSymbolsSummaries[i][DEALS],0),9,"Arial",InpColor); + name="Line_"+string(line)+"_2"; + ObjectSetText(name,DoubleToStr(buy_lots,2),9,"Arial",InpColor); + name="Line_"+string(line)+"_3"; + ObjectSetText(name,DoubleToStr(buy_price,digits),9,"Arial",InpColor); + name="Line_"+string(line)+"_4"; + ObjectSetText(name,DoubleToStr(sell_lots,2),9,"Arial",InpColor); + name="Line_"+string(line)+"_5"; + ObjectSetText(name,DoubleToStr(sell_price,digits),9,"Arial",InpColor); + name="Line_"+string(line)+"_6"; + ObjectSetText(name,DoubleToStr(buy_lots-sell_lots,2),9,"Arial",InpColor); + name="Line_"+string(line)+"_7"; + ObjectSetText(name,DoubleToStr(ExtSymbolsSummaries[i][PROFIT],2),9,"Arial",InpColor); + } + } +//---- remove lines + if(totaltotal; line--) + { + name="Line_"+string(line)+"_0"; + ObjectSetText(name,""); + name="Line_"+string(line)+"_1"; + ObjectSetText(name,""); + name="Line_"+string(line)+"_2"; + ObjectSetText(name,""); + name="Line_"+string(line)+"_3"; + ObjectSetText(name,""); + name="Line_"+string(line)+"_4"; + ObjectSetText(name,""); + name="Line_"+string(line)+"_5"; + ObjectSetText(name,""); + name="Line_"+string(line)+"_6"; + ObjectSetText(name,""); + name="Line_"+string(line)+"_7"; + ObjectSetText(name,""); + } + } +//---- to avoid minimum==maximum + ExtMapBuffer[Bars-1]=-1; +//---- + return(rates_total); + } +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +int Analyze() + { + double profit; + int i,index,type,total=OrdersTotal(); +//---- + for(i=0; i=SYMBOLS_MAX) continue; + //---- + ExtSymbolsSummaries[index][DEALS]++; + profit=OrderProfit()+OrderCommission()+OrderSwap(); + ExtSymbolsSummaries[index][PROFIT]+=profit; + if(type==OP_BUY) + { + ExtSymbolsSummaries[index][BUY_LOTS]+=OrderLots(); + ExtSymbolsSummaries[index][BUY_PRICE]+=OrderOpenPrice()*OrderLots(); + } + else + { + ExtSymbolsSummaries[index][SELL_LOTS]+=OrderLots(); + ExtSymbolsSummaries[index][SELL_PRICE]+=OrderOpenPrice()*OrderLots(); + } + } +//---- + total=0; + for(i=0; i0) total++; + } +//---- + return(total); + } +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +int SymbolsIndex(string SymbolName) + { + bool found=false; + int i; +//---- + for(i=0; i=SYMBOLS_MAX) + return(-1); +//---- + i=ExtSymbolsTotal; + ExtSymbolsTotal++; + ExtSymbols[i]=SymbolName; + ExtSymbolsSummaries[i][DEALS]=0; + ExtSymbolsSummaries[i][BUY_LOTS]=0; + ExtSymbolsSummaries[i][BUY_PRICE]=0; + ExtSymbolsSummaries[i][SELL_LOTS]=0; + ExtSymbolsSummaries[i][SELL_PRICE]=0; + ExtSymbolsSummaries[i][NET_LOTS]=0; + ExtSymbolsSummaries[i][PROFIT]=0; +//---- + return(i); + } +//+------------------------------------------------------------------+ \ No newline at end of file