From 83c000fdd6076e45b1e2a908e34b501c16c8ce40 Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Sat, 1 Jun 2024 19:37:54 +0330 Subject: [PATCH] add new backup ... --- .../Old/Classes/x-saherelm.http.class.mq5 | 385 ++ .../x-saherelm.x121.provider.class.mq5 | 62 + .../Classes/x-saherelm.x121.xmcycle.class.mq5 | 3086 +++++++++ .../Old/Classes/x-saherelm.xaccount.class.mq5 | 398 ++ .../Classes/x-saherelm.xdata-collector.ex5 | Bin 0 -> 5410 bytes .../Classes/x-saherelm.xdata-collector.mq5 | 444 ++ .../BKPS/Old/Classes/x-saherelm.xea.class.mq5 | 2142 ++++++ .../Old/Classes/x-saherelm.xhelper.class.mq5 | 123 + .../Old/Classes/x-saherelm.xmd5.class.ex5 | Bin 0 -> 5058 bytes .../Old/Classes/x-saherelm.xmd5.class.mq5 | 441 ++ .../Classes/x-saherelm.xprovider.class.mq5 | 319 + .../Old/Classes/x-saherelm.xtrade.class.ex5 | Bin 0 -> 8766 bytes .../Old/Classes/x-saherelm.xtrade.class.mq5 | 3499 ++++++++++ MQLTestWorkspace/BKPS/Old/Documents/.gitkeep | 0 .../Old/Documents/JsModules/x-color.tools.js | 506 ++ .../Old/Documents/JsModules/x-file.tools.js | 830 +++ .../Old/Documents/JsModules/x-shell.tools.js | 219 + .../JsModules/x-type-detector.tools.js | 268 + .../Old/Documents/JsModules/x-value.tools.js | 1528 +++++ .../Documents/Temp/multi.asset.configs.yml | 1 + .../Old/Documents/Templates/arrays.price.mq5 | 22 + .../BKPS/Old/Experts/Advisors/ExpertMACD.ex5 | Bin 0 -> 141724 bytes .../BKPS/Old/Experts/Advisors/ExpertMACD.mq5 | 168 + .../BKPS/Old/Experts/Advisors/ExpertMAMA.ex5 | Bin 0 -> 149930 bytes .../BKPS/Old/Experts/Advisors/ExpertMAMA.mq5 | 175 + .../Old/Experts/Advisors/ExpertMAPSAR.ex5 | Bin 0 -> 147206 bytes .../Old/Experts/Advisors/ExpertMAPSAR.mq5 | 171 + .../Advisors/ExpertMAPSARSizeOptimized.ex5 | Bin 0 -> 151292 bytes .../Advisors/ExpertMAPSARSizeOptimized.mq5 | 176 + .../Examples/ChartInChart/ChartInChart.ex5 | Bin 0 -> 17810 bytes .../Examples/ChartInChart/ChartInChart.mq5 | Bin 0 -> 30544 bytes .../Experts/Examples/Controls/Controls.ex5 | Bin 0 -> 181718 bytes .../Experts/Examples/Controls/Controls.mq5 | 45 + .../Examples/Controls/ControlsDialog.mqh | 427 ++ .../Correlation Matrix 3D.ex5 | Bin 0 -> 71590 bytes .../Correlation Matrix 3D.mq5 | Bin 0 -> 77280 bytes .../Correlation Matrix 3D.mqproj | Bin 0 -> 8302 bytes .../Old/Experts/Examples/MACD/MACD Sample.ex5 | Bin 0 -> 47500 bytes .../Old/Experts/Examples/MACD/MACD Sample.mq5 | 451 ++ .../Examples/Math 3D Morpher/Functions.mqh | 372 ++ .../Math 3D Morpher/Math 3D Morpher.ex5 | Bin 0 -> 67722 bytes .../Math 3D Morpher/Math 3D Morpher.mq5 | Bin 0 -> 35776 bytes .../Math 3D Morpher/Math 3D Morpher.mqproj | Bin 0 -> 16042 bytes .../Math 3D Morpher/Textures/checker.bmp | Bin 0 -> 196662 bytes .../Experts/Examples/Math 3D/Functions.mqh | Bin 0 -> 16008 bytes .../Old/Experts/Examples/Math 3D/Math 3D.ex5 | Bin 0 -> 39596 bytes .../Old/Experts/Examples/Math 3D/Math 3D.ico | Bin 0 -> 16958 bytes .../Old/Experts/Examples/Math 3D/Math 3D.mq5 | Bin 0 -> 6986 bytes .../Experts/Examples/Math 3D/Math 3D.mqproj | Bin 0 -> 6042 bytes .../Examples/Math 3D/Sets/Chomolungma.set | Bin 0 -> 684 bytes .../Examples/Math 3D/Sets/ClimberDream.set | Bin 0 -> 696 bytes .../Examples/Math 3D/Sets/DoubleScrew.set | Bin 0 -> 684 bytes .../Experts/Examples/Math 3D/Sets/Granite.set | Bin 0 -> 684 bytes .../Examples/Math 3D/Sets/Hedgehog.set | Bin 0 -> 692 bytes .../Experts/Examples/Math 3D/Sets/Hill.set | Bin 0 -> 688 bytes .../Examples/Math 3D/Sets/Josephine.set | Bin 0 -> 688 bytes .../Math 3D/Sets/MultyExtremalScrew.set | Bin 0 -> 684 bytes .../Experts/Examples/Math 3D/Sets/Screw.set | Bin 0 -> 684 bytes .../Experts/Examples/Math 3D/Sets/Sink.set | Bin 0 -> 686 bytes .../Experts/Examples/Math 3D/Sets/Skin.set | Bin 0 -> 686 bytes .../Examples/Math 3D/Sets/Trapfall.set | Bin 0 -> 686 bytes .../Moving Average/Moving Average.ex5 | Bin 0 -> 36868 bytes .../Moving Average/Moving Average.mq5 | 233 + .../BlackCrows WhiteSoldiers CCI.ex5 | Bin 0 -> 49100 bytes .../BlackCrows WhiteSoldiers CCI.mq5 | 657 ++ .../BlackCrows WhiteSoldiers MFI.ex5 | Bin 0 -> 47844 bytes .../BlackCrows WhiteSoldiers MFI.mq5 | 657 ++ .../BlackCrows WhiteSoldiers RSI.ex5 | Bin 0 -> 48884 bytes .../BlackCrows WhiteSoldiers RSI.mq5 | 657 ++ .../BlackCrows WhiteSoldiers Stoch.ex5 | Bin 0 -> 49340 bytes .../BlackCrows WhiteSoldiers Stoch.mq5 | 661 ++ .../BullishBearish Engulfing CCI.ex5 | Bin 0 -> 48826 bytes .../BullishBearish Engulfing CCI.mq5 | 682 ++ .../BullishBearish Engulfing MFI.ex5 | Bin 0 -> 49420 bytes .../BullishBearish Engulfing MFI.mq5 | 682 ++ .../BullishBearish Engulfing RSI.ex5 | Bin 0 -> 49134 bytes .../BullishBearish Engulfing RSI.mq5 | 682 ++ .../BullishBearish Engulfing Stoch.ex5 | Bin 0 -> 49882 bytes .../BullishBearish Engulfing Stoch.mq5 | 688 ++ .../Free Robots/BullishBearish Harami CCI.ex5 | Bin 0 -> 49884 bytes .../Free Robots/BullishBearish Harami CCI.mq5 | 682 ++ .../Free Robots/BullishBearish Harami MFI.ex5 | Bin 0 -> 48860 bytes .../Free Robots/BullishBearish Harami MFI.mq5 | 682 ++ .../Free Robots/BullishBearish Harami RSI.ex5 | Bin 0 -> 49266 bytes .../Free Robots/BullishBearish Harami RSI.mq5 | 682 ++ .../BullishBearish Harami Stoch.ex5 | Bin 0 -> 50270 bytes .../BullishBearish Harami Stoch.mq5 | 685 ++ .../BullishBearish MeetingLines CCI.ex5 | Bin 0 -> 48156 bytes .../BullishBearish MeetingLines CCI.mq5 | 654 ++ .../BullishBearish MeetingLines MFI.ex5 | Bin 0 -> 48032 bytes .../BullishBearish MeetingLines MFI.mq5 | 652 ++ .../BullishBearish MeetingLines RSI.ex5 | Bin 0 -> 48182 bytes .../BullishBearish MeetingLines RSI.mq5 | 653 ++ .../BullishBearish MeetingLines Stoch.ex5 | Bin 0 -> 49926 bytes .../BullishBearish MeetingLines Stoch.mq5 | 662 ++ .../DarkCloud PiercingLine CCI.ex5 | Bin 0 -> 49246 bytes .../DarkCloud PiercingLine CCI.mq5 | 682 ++ .../DarkCloud PiercingLine MFI.ex5 | Bin 0 -> 48418 bytes .../DarkCloud PiercingLine MFI.mq5 | 681 ++ .../DarkCloud PiercingLine RSI.ex5 | Bin 0 -> 49870 bytes .../DarkCloud PiercingLine RSI.mq5 | 683 ++ .../DarkCloud PiercingLine Stoch.ex5 | Bin 0 -> 49408 bytes .../DarkCloud PiercingLine Stoch.mq5 | 687 ++ .../Free Robots/HangingMan Hammer CCI.ex5 | Bin 0 -> 49422 bytes .../Free Robots/HangingMan Hammer CCI.mq5 | 679 ++ .../Free Robots/HangingMan Hammer MFI.ex5 | Bin 0 -> 48336 bytes .../Free Robots/HangingMan Hammer MFI.mq5 | 679 ++ .../Free Robots/HangingMan Hammer RSI.ex5 | Bin 0 -> 49388 bytes .../Free Robots/HangingMan Hammer RSI.mq5 | 677 ++ .../Free Robots/HangingMan Hammer Stoch.ex5 | Bin 0 -> 50556 bytes .../Free Robots/HangingMan Hammer Stoch.mq5 | 683 ++ .../MorningEvening StarDoji CCI.ex5 | Bin 0 -> 49326 bytes .../MorningEvening StarDoji CCI.mq5 | 685 ++ .../MorningEvening StarDoji MFI.ex5 | Bin 0 -> 48968 bytes .../MorningEvening StarDoji MFI.mq5 | 686 ++ .../MorningEvening StarDoji RSI.ex5 | Bin 0 -> 49952 bytes .../MorningEvening StarDoji RSI.mq5 | 686 ++ .../MorningEvening StarDoji Stoch.ex5 | Bin 0 -> 49764 bytes .../MorningEvening StarDoji Stoch.mq5 | 691 ++ .../BKPS/Old/Experts/x-saherelm.xbe.ea.mq5 | 3365 ++++++++++ .../BKPS/Old/Experts/x-sample.ea.ex5 | Bin 0 -> 58040 bytes .../BKPS/Old/Experts/x-sample.ea.mq5 | 398 ++ .../Helpers/x-saherelm.x121.xche.helper.mq5 | 492 ++ .../Helpers/x-saherelm.x121.xich.helper.mq5 | 717 ++ .../Helpers/x-saherelm.x121.xmc.helper.mq5 | 481 ++ .../Helpers/x-saherelm.x121.xosc.helper.mq5 | 1319 ++++ .../Helpers/x-saherelm.x121.xstr.helper.mq5 | 408 ++ .../Old/Indicators/x-saherelm.x121.xche.mq5 | 631 ++ .../Old/Indicators/x-saherelm.x121.xich.mq5 | 836 +++ .../Old/Indicators/x-saherelm.x121.xmc.mq5 | 469 ++ .../Old/Indicators/x-saherelm.x121.xosc.mq5 | 721 ++ .../Old/Indicators/x-saherelm.x121.xstr.mq5 | 580 ++ .../Old/Indicators/x-saherelm.x121.xzg.mq5 | 757 +++ .../Old/Libraries/x-saherelm.alert.lib.mq5 | 187 + .../Old/Libraries/x-saherelm.common.lib.ex5 | Bin 0 -> 4744 bytes .../Old/Libraries/x-saherelm.common.lib.mq5 | 5774 +++++++++++++++++ .../Old/Libraries/x-saherelm.draw.lib.ex5 | Bin 0 -> 6512 bytes .../Old/Libraries/x-saherelm.draw.lib.mq5 | 2443 +++++++ .../Old/Libraries/x-saherelm.http.lib.mq5 | 177 + .../BKPS/Old/Libraries/x-saherelm.log.lib.mq5 | 1084 ++++ .../Old/Libraries/x-saherelm.xtrade.lib.ex5 | Bin 0 -> 11090 bytes .../Old/Libraries/x-saherelm.xtrade.lib.mq5 | 3820 +++++++++++ 142 files changed, 60067 insertions(+) create mode 100644 MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.http.class.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.x121.provider.class.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.x121.xmcycle.class.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xaccount.class.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xdata-collector.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xdata-collector.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xea.class.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xhelper.class.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xmd5.class.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xmd5.class.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xprovider.class.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xtrade.class.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xtrade.class.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Documents/.gitkeep create mode 100644 MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-color.tools.js create mode 100644 MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-file.tools.js create mode 100644 MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-shell.tools.js create mode 100644 MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-type-detector.tools.js create mode 100644 MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-value.tools.js create mode 100644 MQLTestWorkspace/BKPS/Old/Documents/Temp/multi.asset.configs.yml create mode 100644 MQLTestWorkspace/BKPS/Old/Documents/Templates/arrays.price.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMACD.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMACD.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAMA.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAMA.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAPSAR.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAPSAR.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAPSARSizeOptimized.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAPSARSizeOptimized.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/ChartInChart/ChartInChart.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/ChartInChart/ChartInChart.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Controls/Controls.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Controls/Controls.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Controls/ControlsDialog.mqh create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Correlation Matrix 3D/Correlation Matrix 3D.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Correlation Matrix 3D/Correlation Matrix 3D.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Correlation Matrix 3D/Correlation Matrix 3D.mqproj create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/MACD/MACD Sample.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/MACD/MACD Sample.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D Morpher/Functions.mqh create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D Morpher/Math 3D Morpher.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D Morpher/Math 3D Morpher.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D Morpher/Math 3D Morpher.mqproj create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D Morpher/Textures/checker.bmp create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Functions.mqh create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Math 3D.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Math 3D.ico create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Math 3D.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Math 3D.mqproj create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Chomolungma.set create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/ClimberDream.set create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/DoubleScrew.set create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Granite.set create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Hedgehog.set create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Hill.set create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Josephine.set create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/MultyExtremalScrew.set create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Screw.set create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Sink.set create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Skin.set create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Trapfall.set create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Moving Average/Moving Average.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Examples/Moving Average/Moving Average.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BlackCrows WhiteSoldiers CCI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BlackCrows WhiteSoldiers CCI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BlackCrows WhiteSoldiers MFI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BlackCrows WhiteSoldiers MFI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BlackCrows WhiteSoldiers RSI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BlackCrows WhiteSoldiers RSI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BlackCrows WhiteSoldiers Stoch.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BlackCrows WhiteSoldiers Stoch.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing CCI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing CCI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing MFI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing MFI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing RSI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing RSI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing Stoch.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing Stoch.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami CCI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami CCI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami MFI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami MFI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami RSI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami RSI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami Stoch.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami Stoch.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines CCI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines CCI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines MFI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines MFI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines RSI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines RSI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines Stoch.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines Stoch.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine CCI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine CCI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine MFI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine MFI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine RSI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine RSI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine Stoch.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine Stoch.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer CCI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer CCI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer MFI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer MFI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer RSI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer RSI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer Stoch.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer Stoch.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji CCI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji CCI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji MFI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji MFI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji RSI.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji RSI.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji Stoch.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji Stoch.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/x-saherelm.xbe.ea.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/x-sample.ea.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Experts/x-sample.ea.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xche.helper.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xich.helper.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xmc.helper.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xosc.helper.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xstr.helper.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xche.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xich.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xmc.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xosc.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xstr.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xzg.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.alert.lib.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.common.lib.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.common.lib.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.draw.lib.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.draw.lib.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.http.lib.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.log.lib.mq5 create mode 100644 MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.xtrade.lib.ex5 create mode 100644 MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.xtrade.lib.mq5 diff --git a/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.http.class.mq5 b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.http.class.mq5 new file mode 100644 index 0000000..e28342d --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.http.class.mq5 @@ -0,0 +1,385 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Class Library +// ---------------------------------------------- +// Name: XSCHttp +// Description: provides all HTTP requirements ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// START Definitions ... +// + +// +enum X_HTTP_METHOD +{ + X_HTTP_GET, + X_HTTP_POST +}; + +// +// Convert enum to String ... +string ToString(X_HTTP_METHOD method) +{ + // + string result = ""; + + // + switch (method) + { + // + case X_HTTP_GET: + result = "GET"; + break; + + // + case X_HTTP_POST: + result = "POST"; + break; + } + + // + return result; +} + +// +// END Definitions ... +// + +// +// START Import and Inclused requirements ... +// + +// +// Includes ... +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// END Import and Inclused requirements ... +// + +// +// START Overrides ... +// + +// +// END Overrides ... +// + +// +// a Class for Manage Account ... +class XSCHttp +{ + // + // Public ... +public: + // + // Constructor ... + void XSCHttp() + { + XSCHttp("", 10000); + } + void XSCHttp( + string path, // Base Folder to Store Data + int timeout // base timeout for Requests + ) + { + // + Path(path); + Timeout(timeout); + } + + // + // Deconstructor ... + void ~XSCHttp() + { + } + + // + // START Getter(s)/Setter(s) ... + // + + // + // Path ... + void Path(string value) + { + mPath = value; + } + + string Path() + { + return mPath; + } + + // + // Timeout ... + void Timeout(int value) + { + mTimeout = value; + } + + // + int Timeout() + { + return mTimeout; + } + + // + // Error ... + int Error() + { + return mError; + } + + // + // Response ... + string Response() + { + return mResponse; + } + + // + // END Getter(s)/Setter(s) ... + // + + // + // START Provided Functions ... + // + + // + // Send Global Request ... + int SendRequest( + X_HTTP_METHOD method, // Httm Request Method + const string url, // Server Address + const string headers, // Headers providing + const char &payload[], // the Data which needs to Send + char &response[], // Response of request + string responseHeaders, // Response Headers + int timeout = 500 // Timeout for response default is 500 + ) + { + // + int result = -1; + + // + string strMethod = ToString(method); + if (StringLen(strMethod) == 0) + { + return result; + } + + // + // Reset State ... + ResetState(); + + // + result = WebRequest( + strMethod, + url, + headers, + timeout, + payload, + response, + responseHeaders); + + // + if (result < 0) + { + mError = GetLastError(); + } + else + { + mResponse = CharArrayToString(response); + } + + // + return result; + } + + // + // Get Request ... + int GetRequest( + const string url, // Server Address + const string headers, // Headers providing + const char &payload[], // the Data which needs to Send + char &response[], // Response of request + string responseHeaders, // Response Headers + int timeout = 500 // Timeout for response default is 500 + ) + { + // + int result = SendRequest( + X_HTTP_GET, + url, + headers, + payload, + response, + responseHeaders, + timeout); + + // + return result; + } + + // + // Post Request ... + int PostRequest( + const string url, // Server Address + const string headers, // Headers providing + const char &payload[], // the Data which needs to Send + char &response[], // Response of request + string responseHeaders, // Response Headers + int timeout = 500 // Timeout for response default is 500 + ) + { + // + int result = SendRequest( + X_HTTP_POST, + url, + headers, + payload, + response, + responseHeaders, + timeout); + + // + return result; + } + + // + // Handle Download Specific URL Content to Specific Path and File Name ... + bool Download( + string url, // the URL address which going to download + string fileName // Specify Destination file name to Store Response + ) + { + // + bool result = false; + + // + string filePath = GetFilePath(fileName); + string cookie = NULL; + string referer = NULL; + int timeout = Timeout(); + + // + char payload[]; + string headers; + char response[]; + string responseHeaders; + + // + // Send Request ... + int requestResult = GetRequest( + url, + headers, + payload, + response, + responseHeaders, + timeout); + + // + // Define File Handler ... + int mFileHandler = FileOpen( + filePath, + FILE_WRITE | FILE_BIN); + if (mFileHandler == INVALID_HANDLE) + { + // + mError = GetLastError(); + return result; + } + + // + // Write Response to File ... + uint writed = FileWriteArray( + mFileHandler, + response, + 0, + ArraySize(response)); + FileFlush(mFileHandler); + FileClose(mFileHandler); + + // + result = writed > 0; + + // + return result; + } + + // + // END Provided Functions ... + // + + // + // Protected ... +protected: + // + // Destintion Folder Path ... + string mPath; + + // + // WEB Request Timeout Value ... + int mTimeout; + + // + // WEB Request's Response ... + string mResponse; + + // + // Error Value ... + int mError; + + // + // Private ... +private: + // + // Reset Errors State ... + void ResetState() + { + // + // Reset Errors ... + mError = -1; + mResponse = ""; + ResetLastError(); + } + + // + // Generate Full File Path ... + string GetFilePath(string fileName) + { + // + string result = ""; + + // + result = + // + Path() + "\\" + fileName + // + ; + + // + return result; + } +}; + +// +// START Usefull Functions ... +// + +// +// END Usefull Functions ... +// diff --git a/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.x121.provider.class.mq5 b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.x121.provider.class.mq5 new file mode 100644 index 0000000..70d67e2 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.x121.provider.class.mq5 @@ -0,0 +1,62 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Class Library +// ---------------------------------------------- +// Name: XSC121Provider +// Description: a Market Analyser and Signal Provider +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// TODO: +// - [] add XCT for Candle Timing ... +// - [] add XCS for Candle Styling ... +// - [] add Support for XZG Indicator ... +// - [] implement XPV based on Market Cycles ... +// - [] create XPV Helper class ... +// - [] create XZG Helper class ... +// - [] add Pivots Functionality based on XZG and XPV ... +// - [] add File as Struct functionality and implement it ... +// - [] add Support for OnSignal Event ... +// - [] add support for Alerting ... +// - [] Refactor XSignal: +// -- [] Add support for Multiple TPS and Trailing Stops ... +// -- [] Add support for Clean, Constructor and Init Functions on struct ... +// -- [] Add support for Prepare Signal inside struct ... +// -- [] Add Support for Position Management inside XTrade Class for Handling +// Trail SL, or Partial Close Positions ... +// -- [] Convert providers from Array to string ... +// -- [] Add Support For Serializing and also Deseriallizing functionality ... + +// +// Imports ... + +// +#include "../Classes/x-saherelm.x121.xmcycle.class.mq5" + +// +// Definitions ... + +// +// Configuration of X121 Provider ... +struct X121ProviderInputs +{ +}; + +// +// Class ... + +// +// Tools ... \ No newline at end of file diff --git a/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.x121.xmcycle.class.mq5 b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.x121.xmcycle.class.mq5 new file mode 100644 index 0000000..fdb370b --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.x121.xmcycle.class.mq5 @@ -0,0 +1,3086 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Class Library +// ---------------------------------------------- +// Name: XSC121MCycle +// Description: provides all requirements for +// Handling Specified Market Cycle Analysis... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Imports ... + +// +#include "../Libraries/x-saherelm.draw.lib.mq5" + +// +#include "../Helpers/x-saherelm.x121.xmc.helper.mq5" +#include "../Helpers/x-saherelm.x121.xche.helper.mq5" +#include "../Helpers/x-saherelm.x121.xosc.helper.mq5" +#include "../Helpers/x-saherelm.x121.xstr.helper.mq5" +#include "../Helpers/x-saherelm.x121.xich.helper.mq5" + +// +// Definitions ... + +// +struct X121MCycleInputs +{ + // + // Props ... + + // + XMarketCycle cycle; // Cycle Descriptor ... + + // + // Draw Props ... + + // + XDrawSpecifications cBarMidDrawSpecs; // Current Bar MidLine Draw Specifications + XOHCLDrawSpecification cBarDrawSpecs; // Current Bar Draw Specifications + + // + XDrawSpecifications pBarMidDrawSpecs; // Previous Bar MidLine Draw Specifications + XOHCLDrawSpecification pBarDrawSpecs; // Previous Bar Draw Specifications + + // + bool drawLabels; // Draw Labels + bool drawCBar; // Draw Current Bar + bool drawPBar; // Draw Previous Bar + bool drawCBarMid; // Draw Current Bar Mid Line + bool drawPBarMid; // Draw Previous Bar Mid Line + + // + X121MCInputs mcInputs; // MC Inputs ... + X121STRInputs strInputs; // STR Inputs ... + X121OSCInputs oscInputs; // OSC Inputs ... + X121CHEInputs cheInputs; // CHE Inputs ... + X121ICHInputs ichInputs; // ICH Inputs ... + + // + // Constructor ... + X121MCycleInputs() + { + Clean(); + } + + // + // Tools ... + + // + bool Init( + string mSymbol, // Trading Symbol + ENUM_TIMEFRAMES mHostPeriod, // Host Period + ENUM_X_MARKET_CYCLES mCycle, // Init Cycle + ENUM_TIMEFRAMES mPeriod, // Cycle Period + ENUM_X_PERIOD_METHOD mPeriodMethod, // Cycle Period Method + string mPrefix = "", // Prefix + bool useDefaults = true // Use Inputs Default Settings ... + ) + { + // + bool result = false; + + // + cycle.period = mPeriod; + cycle.method = mPeriodMethod; + + // + // Initial Cycle Model ... + result = cycle.Init( + mSymbol, + mHostPeriod, + mCycle, + mPrefix + // + ); + if (!result) + { + return result; + } + + // + if (useDefaults) + { + // + mcInputs.Default(); + strInputs.Default(); + oscInputs.Default(); + cheInputs.Default(); + ichInputs.Default(); + } + + // + result = IsValid(); + if (!result) + { + return result; + } + + // + return result; + } + + // + bool Init( + string mSymbol, // Trading Symbol + ENUM_TIMEFRAMES mHostPeriod, // Host Period + ENUM_X_MARKET_CYCLES mCycle, // Init Cycle + X121MCInputs &mMcInputs, // MC Inputs + X121STRInputs &mStrInputs, // STR Inputs + X121OSCInputs &mOscInputs, // OSC Inputs + X121CHEInputs &mCheInputs, // CHE Inputs + int mHostBarIndex = 0, // Specified Host Period Bar Index + string mPrefix = "" // Prefix + ) + { + // + bool result = false; + + // + // Initial Cycle Model ... + result = cycle.Init( + mSymbol, + mHostPeriod, + mCycle, + mPrefix + // + ); + if (!result) + { + return result; + } + + // + mcInputs = mMcInputs; + strInputs = mStrInputs; + oscInputs = mOscInputs; + cheInputs = mCheInputs; + + // + result = IsValid(); + if (!result) + { + return result; + } + + // + return result; + } + + // + void Clean() + { + // + cycle.Clean(); + mcInputs.Clean(); + strInputs.Clean(); + oscInputs.Clean(); + cheInputs.Clean(); + ichInputs.Clean(); + + // + cBarDrawSpecs.Clean(); + pBarDrawSpecs.Clean(); + cBarMidDrawSpecs.Clean(); + pBarMidDrawSpecs.Clean(); + + // + drawLabels = false; + drawCBar = false; + drawPBar = false; + drawCBarMid = false; + drawPBarMid = false; + } + + // + void Default() + { + // + mcInputs.Default(); + strInputs.Default(); + oscInputs.Default(); + cheInputs.Default(); + ichInputs.Default(); + + // + drawLabels = false; + drawCBar = false; + drawPBar = false; + drawCBarMid = false; + drawPBarMid = false; + } + + // + bool IsValid() + { + // + bool result = false; + + // + result = cycle.IsValid(); + if (!result) + { + return result; + } + + // + result = mcInputs.IsValid(); + if (!result) + { + return result; + } + + // + result = strInputs.IsValid(); + if (!result) + { + return result; + } + + // + result = oscInputs.IsValid(); + if (!result) + { + return result; + } + + // + result = cheInputs.IsValid(); + if (!result) + { + return result; + } + + // + result = ichInputs.IsValid(); + if (!result) + { + return result; + } + + // + return result; + } +}; + +// +// Specific Market Sense Based on Specified Bar Index on Host Period ... +struct X121MCycleConditions +{ + // + // Props ... + + // + // Common ... + string prefix; // Cycle Prefix ... + string symbol; // Analysing Symbol ... + ENUM_TIMEFRAMES period; // Analysing Time Frame ... + ENUM_TIMEFRAMES hostPeriod; // Hosting Time Frame ... + ENUM_X_MARKET_CYCLES cycle; // Init Cycle ... + + // + // Bars ... + XOHCL bars[]; // Some Bars ... + datetime time; // Extracting Time ... + + // + // Candlestic Conditions ... + bool isLastBullish; + bool isLastBearish; + bool isCurrentBullish; + bool isCurrentBearish; + bool isCurrentMidLineOverLastHigh; + bool isCurrentMidLineUnderLastLow; + bool isCurrentMidLineOverLastUp; + bool isCurrentMidLineUnderLastDown; + bool isCurrentMidLineOverLastMidLine; + bool isCurrentMidLineUnderLastMidLine; + + // + // XICH ... + // Ichimoku strategy + // Strategy one: Ichimoku trend identifier: + // According to this strategy, we need a trigger that can be used + // to inform us about the trend type, + // if it is an uptrend or downtrend. + // We will check three values to do that and these values are the: + // closing price, Senkou Span A, and Senkou Span B. + // If the closing price is greater than the Senkou Span B and at the same time + // the closing price is greater than Senkou Span A, + // this will be the trigger to know that the trend is up. + // Vice versa, if the closing price is lower than the Senkou Span B and at the same time + // the closing price is lower than the Senkou Span A, + // this will be the trigger to the downtrend. + // + // Closing price > Senkou Span B and closing price > Senkou Span A --> Uptrend + // Closing price < Senkou Span B and closing price < Senkou Span A --> Downtrend + // + // Strategy two: Ichimoku trend strength: + // Based on this strategy, we need a trigger that can inform us the current trend is strong. + // We will check three values to do that and these values are the: + // - current Senkou Span A, + // - the previous Senkou Span A, and + // - the Senkou Span B. + // If the current Senkou Span A is greater than the previous Senkous Span A and at the same time + // the current Senkou Span A is greater than the Senkou Span B, + // this is a trigger that the trend is up and strong. + // Vice versa, if the current Senkou Span A is lower than the previous Senkou Span A and at the + // same time, the current Senkou Span A is lower than the Senkou Span B, + // this will be a signal that the trend is down and strong. + // + // Current Senkou Span A > previous Senkou Span A and current Senkou Span A > Senkou Span B --> the uptrend is strong + // Current Senkou Span A < previous Senkou Span A and current Senkou Span A < Senkou Span B --> the downtrend is strong + bool isSenkouSpanAOverB; + bool isSenkouSpanAUnderB; + bool isSenkouSpanAOverLast; + bool isSenkouSpanAUnderLast; + bool isFutureSenkouSpanAOverB; + bool isFutureSenkouSpanAUnderB; + bool isFutureSenkouSpanAOverLast; + bool isFutureSenkouSpanAUnderLast; + // + // Strategy three: Ichimoku price-Ki signal: + // According to this strategy, during the uptrend, we need a trigger that can + // alert us about the bullish signal, and during the downtrend, we need a trigger than can alert us about the bearish signal. + // We will check based on this strategy two values, closing price, and Kijun-Sen. + // If the closing price is greater than the Kijun-sen value, + // this will be a trigger to a bullish signal. + // Vice versa, if the closing price is lower than the Kijun-sen value, + // this will be a bearish signal. + // + // During uptrend, closing price > Kijun -sen --> bullish signal + // Duuring downtrend, closing price < Kijun -sen --> bearish signal + bool isCloseOverKijunSen; + bool isCloseUnderKijunSen; + // + // Strategy four: Ichimoku ten-ki signal: + // According to this strategy, during the uptrend, we need another trigger or + // method to alert us when there is a bullish signal or + // during the downtrend, we need a signal of bearishness. + // We will check based on this strategy two values, Tenkan-sen and Kijum-sen. + // If the Tenkan-sen value is greater than the Kijun-sen, + // this will be a signal of bullishness. + // Vice versa, if the Tenkan-sen is lower than the Kijun-sen, + // this will be a signal of bearishness. + // + // Tenkan-sen > Kijun-sen --> bullish signal + // Tenkan-sen < Kijun-sen --> bearish signal + bool isTenkanSenOverKijunSen; + bool isTenkanSenUnderKijunSen; + + // + // XMC ... + // Three Moving Averages Crossover + // In this strategy, we will use three simple moving averages: + // the shorter simple moving average period is 10, the longer one period is 48, and in between a period of 24. + // + // According to the strategy, we need the three simple moving averages to be checked at every tick: + // + // If 10 SMA > 24 SMA, 10 SMA > 48 SMA, and 24 SMA > 48 SMA: the signal will be to buy and we need to be appeared as a comment on the chart. + // If 10 SMA < 24 SMA, 10 SMA < 48 SMA, and 24 SMA < 48 SMA: the signal will be to sell and we need to be appeared as a comment on the chart. + // If anything, else do nothing. + bool isFastOverSlow; + bool isFastUnderSlow; + bool isFastOverVerifier; + bool isFastUnderVerifier; + bool isSlowOverVerifier; + bool isSlowUnderVerifier; + bool isCloseOverFast; + bool isCloseUnderFast; + bool isCloseOverSlow; + bool isCloseUnderSlow; + bool isCloseOverVerifier; + bool isCloseUnderVerifier; + + // + // XSTR ... + bool isTrendBullish; + bool isTrendBearish; + + // + // XCHE ... + bool isCHEInLong; + bool isCHEInStrongLong; + bool isCHEInShort; + bool isCHEInStrongShort; + + // + // XOSC ... + + // + // RVI Signals ... + // Strategy one: RVI Crossover - Uptrend: + // Based on this strategy, we need to get buy and close signals during the uptrend by a specific condition. + // When the RVI current value and RVI signal current value are greater than the zero level at the same time + // that RVI current value is greater than the current value of the RVI signal, this will be a buy signal. + // Vice Versa, when the RVI current value and RVI signal current value is below zero level at + // the same time that the RVI current value is below the current value of the RVI signal, this will be a close signal. + // + // RVI value > 0 and RVI signal value > 0 and RVI value > RVI signal value --> buy + // RVI value < 0 and RVI signal value < 0 and RVI value < RVI signal value --> close + bool isRVILongStart; + bool isRVILongStop; + // + // Strategy two: RVI Crossover - Downtrend: + // Based on this strategy, we need to get the opposite signals of the previous RVI Crossover - + // Uptrend strategy as we need to get short and cover signals. + // When the RVI current value and RVI signal current value are lower than the zero level at + // the same time that RVI current value is lower than the current value of the RVI signal, this will be a short signal. + // Vice Versa, when the RVI current value and RVI signal current value is above the zero level + // at the same time that the RVI current value is above the current value of the RVI signal, this will be a cover signal. + // + // RVI value < 0 and RVI signal value < 0 and RVI value < RVI signal value --> short + // RVI value > 0 and RVI signal value > 0 and RVI value > RVI signal value --> cover + bool isRVIShortStart; + bool isRVIShortStop; + // + // Strategy three: RVI and MA Crossover + // Based on this strategy, we need to get buy and sell signals based on specific conditions + // as we need to get a + // buy signal + // when the closing price is greater than the 100 -period moving average + // at the same time that the current RVI value is greater than the current RVI signal value. + // In the other scenario, we need to get a + // sell signal + // when the closing price is lower than the 100 -period moving average + // at the same time that the current RVI value is lower than the current RVI signal value. + + // + // RSI strategy ... + // During Uptrend + // In this case, most of the time RSI values move between or moving between + // the mid range and level 70 (Overbought level). + // The trading strategy for the uptrend is: + // + // RSI Value < 50 = Buy + // RSI Value > 70 = Take Profit + bool isRSIUnder50; + bool isRSIOver70; + // + // During Downtrend + // During the downtrend, the RSI moves most of the time between + // the mid range and level 30 (Oversold level). + // The trading strategy will be as follows: + // + // RSI Value > 50 = Short + // RSI Value < 30 = Take Profit + bool isRSIOver50; + bool isRSIUnder30; + // + // During Sideways: + // RSI spends most of the time between levels 30 (Oversold level) and 70 (Oversbought level). + // The trading strategy will be as follows: + // RSI Value < 30 = Buy + // RSI Value > 50 = Take Profit + // RSI Value > 70 = Short + // RSI Value < 50 = Take Profit + + // + // Bull's Power strategy: + // In this part, we will learn how we can use Bull's Power through simple strategies + // that can be used based on the basic concept of this indicator. + // The following are for these strategies and their conditions. + // I need to confirm here, that these strategies for education only as the main objective + // is to understand the main concept behind the indicator and how we can use them in our favor, + // so you must test any of them before using them on your real account to make sure that + // it will be good for your trading as there is no strategy is suitable for everyone. + // + // Strategy one: Bull's Power Movement: + // Based on this strategy, we need to get signals based on the position of current and previous bull's power values. + // If the current bull's power value is greater than the previous one, + // we will consider it as a signal of the rising of the Bull's Power indicator. + // Vice versa, if the current value is lower than the previous one, we will consider that as a signal of + // declining Bull's Power. + // + // To simplify that, it will be the same as the following: + // + // Current Bull's Power > Previous Bull's Power --> Bull's Power is Rising + // Current Bull's Power < Previous Bull's Power --> Bull's Power is declining + bool isBullPowerOverLast; + bool isBullPoswerUnderLast; + // + // Strategy two: Bull's Power - Strong or Divergence + // Based on this strategy, we want to get a signal that informs us if there is a strong movement + // or there is a divergence by evaluating four values and these values are current high, + // the previous high, bull power, and previous bull power. + // If the current high is higher than the previous high and + // the current bull power value is higher than the previous one, + // we will consider that as a signal of a strong move. + // In the other case, if the current high is higher than the previous high and the current + // bull value is lower than the previous one, we will consider that as a signal of bearish divergence. + // + // To simplify that, it will be the same as the following: + // + // Current high > previous high and current bull's power > previous bull's power --> strong move + // Current high < previous high and current bull's power > previous bull's power --> bearish divergence + // + // Strategy three: Bull's Power signals + // Based on this strategy, we need a signal that can be used to get buy and sell signals and we will + // evaluate four values to do that based on this strategy. + // These four values are: + // - current bull's power, + // - zero level, + // - current close value, and + // - current exponential moving average. + // If the current bull's power is lower than the zero level and + // the current close is lower than the exponential moving average, + // we will consider it as a signal of selling. + // If the current bull's power is greater than the zero level and the current close is greater than + // the exponential moving average, this will be a signal of buying. + // + // To simplify that, it will be the same as the following: + // + // Current bull's power < zero level and current close < EMA --> sell + // Current bear's power > zero level and current close > EMA --> buy + bool isBullPowerOverZero; + bool isBullPoswerUnderZero; + + // + // Bear's Power strategy + // In this part, we will learn how we can use Bear's Power through simple strategies + // that can be used based on the basic concept of this indicator. + // The following are for these strategies and their conditions. + // I need to confirm here, that these strategies for education as the main objective + // is to understand the main concept behind the indicator and how we can use it, + // so you must test any of them before using them on your real account to + // make sure that it will be good for your trading. + // + // Strategy one: Bear's Power Movement + // According to this strategy, we need to get signals based on the position of current and previous + // bear's power values. + // If the current value is greater than the previous, this will be a signal of the rising of + // Bear's Power indicator. + // Vice versa, if the current value is lower than the previous value, + // this will be a signal of declining Bear's Power. + // + // Simply, + // + // Current Bear's Power > Previous Bear's Power --> Bear's Power is Rising + // Current Bear's Power < Previous Bear's Power --> Bear's Power is declining + bool isBearPowerOverLast; + bool isBearPoswerUnderLast; + // + // Strategy two: Bear's Power - Strong or Divergence + // According to this strategy, we need to get a signal that informs us if there are strong movements or + // there are divergences by evaluating four values and they are: + // -current low, + // - previous low, + // - bear power, and + // - previous bear power. + // If the current low is lower than the previous low and the current bear power value + // is lower than the previous one, this will be a signal of a strong move. + // In the other case, if the current low is lower than the previous low and the current + // bear value is greater than the previous one, this will be a signal of bullish divergence. + // + // Simply, + // + // Current low < previous low and current bear's power < previous bear's power --> strong move + // Current low < previous low and current bear's power > previous bear's power --> bullish divergence + // + // Strategy three + // According to this strategy, we need a trigger that can be used to get buy and sell signals and + // we will evaluate four values to do that based on this strategy. + // These four values are current: + // - bear's power, + // - zero level, + // - current close value, and + // - current exponential moving average. + // If the current bear's power is greater than the zero level and the current close is greater than + // the exponential moving average, this will be a signal of buy. + // If the current bear's power is lower than the zero level and the current close is lower than + // the exponential moving average, this will be a signal of selling. + // + // Simply, + // + // Current bear's power > zero level and current close > EMA --> buy + // Current bear's power < zero level and current close < EMA --> sell + bool isBearPowerOverZero; + bool isBearPoswerUnderZero; + + // + // CCI ... + bool isCCIPositive; + bool isCCINegative; + bool isCCIOverPositiveHundred; + bool isCCIUnderNegativeHundred; + + // + // STDDEV ... + // Based on this strategy, we need to measure the volatility based on the comparison between the + // current Std Dev and the average of the five previous Std values. + // If the current Std Dev is greater than the Std Dev 5-periods average, this will be a high volatility signal. + // If the current Std is lower than the Std Dev 5- period average, this will be low volatility. + // + // Based on this strategy, we need to get buy and sell signals based on specific conditions. + // If the current Std Dev is greater than the previous Std Dev and the Ask value is greater than the moving average, + // this will be a buy signal. + // If the current Std Dev is greater than the previous Std Dev and the Bid value is lower than the moving average, + // this will be a sell signal. + // + // Current Std > Prev. Std and Ask > MA --> Buy signal + // Current Std > Prev. Std and Bid < MA --> Sell signal + // + // Based on this strategy, we need to get buy and sell signals based on other conditions. + // If the current Std Dev is greater than Std Dev Avg and Ask is greater than the moving average, + // this will be a buy signal. + // If the current Std Dev is greater than Std Dev Avg and Bid is lower than the moving average, + // this will be a sell signal. + // + // Current Std > Std Avg and Ask > MA --> Buy signal + // Current Std > Std Avg and Bid < Ma --> Sell signal + bool isSTDDEVOverAVG; + bool isSTDDEVOverLast; + bool isSTDDEVUnderAVG; + bool isSTDDEVUnderLast; + + // + // MACD ... + // According to this strategy, we need to identify the market setup: + // is it buying setup or shorting setup. + // In other words we need to identify the market direction, if it is bullish or bearish market, + // and this will be identified by MACD. + // If the MACD main line breaks above zero level, this will be a buying setup or bullish setup and + // vice versa if MACD main line breaks below zero level, this will be a shorting setup or bearish. + // + // MACD main line > 0 = Bullish Setup + // MACD main line < 0 = Bearish Setup + // + // According to this strategy, we need to identify generated signals + // if there is a buy signal or a sell signal based on MACD main line and Signal line crossover. + // If MACD main line breaks above Signal line, this will be a buy signal and if MACD main line breaks + // below Signal line, this will be a short signal. + // + // MACD main line > MACD signal line = Buying Signal + // MACD main line < MACD signal line = Shorting signal + bool isMACDPositiove; + bool isMACDNegative; + bool isMACDOverSignal; + bool isMACDUnderSignal; + + // + // STOCHASTIC ... + // Stochastic strategy + // In this part, we will talk about how we can use this indicator through simple strategies. + // We can get signals from the stochastic indicator according to market trend and these strategies are + // uptrend strategy, downtrend strategy, and sideways strategy. + // + // Strategy one: Uptrend strategy + // According to this strategy, we need to check if the %K line and %D line are below the 50 level, + // then, the buy signal will be generated + // when the %K line crosses above the %D line. + // We can take profit according to another effective tool like price action by searching + // for a lower low for example. + // + // %K, %D < 50 --> %K > %D = buy signal + bool isStochKOverD; + bool isStochKDUnder50; + // + // Strategy two: downtrend strategy + // According to this strategy, we need to check if the %K line and %D line are above the 50 level, + // then, the sell signal will be generated + // when the %K line crosses below the %D line. + // We can take profit according to another effective tool like price action by searching + // for a higher high for example. + // + // %K, %D > 50 --> %K < %D = sell signal + bool isStochKUnderD; + bool isStochKDOver50; + // + // Strategy three: sideways strategy + // + // The buy signal: + // According to this strategy, we need to check if the %K line and %D line are below the 20 level, + // then, the buy signal will be generated + // when the %K line crosses above the %D line. + // When the %K line and %D line are above 80, then the take profit signal will be generated + // when the %K line crosses below the %D line. + // %K, %D < 20 --> %K > %D = buy signal + // %K, %D > 80 --> %K < %D = take profit + bool isStochKDUnder20; + // + // The sell signal + // According to this strategy, we need to check if the %K line and %D line are above the 80 level, + // then, the sell signal will be generated + // when the %K line crosses below the %D line. + // When the %K line and %D are below the 20 level, then, the take profit signal will be generated + // when the %K line crosses above the %D line. + // + // %K, %D > 80 --> %K < %D = sell signal + // %K, %D < 20 --> %K > %D = take profit + bool isStochKDOver80; + + // + // Constructor(s) ... + X121MCycleConditions() + { + Clean(); + } + + // + void Clean() + { + // + // Commons ... + time = 0; + cycle = NULL; + prefix = NULL; + symbol = NULL; + period = NULL; + hostPeriod = NULL; + + // + Clean(bars); + + // + // Candlestic ... + isLastBullish = false; + isLastBearish = false; + isCurrentBullish = false; + isCurrentBearish = false; + isCurrentMidLineOverLastHigh = false; + isCurrentMidLineUnderLastLow = false; + isCurrentMidLineOverLastUp = false; + isCurrentMidLineUnderLastDown = false; + isCurrentMidLineOverLastMidLine = false; + isCurrentMidLineUnderLastMidLine = false; + + // + // XTSR ... + isTrendBullish = false; + isTrendBearish = false; + + // + // XCHE ... + isCHEInLong = false; + isCHEInStrongLong = false; + isCHEInShort = false; + isCHEInStrongShort = false; + + // + // XICH ... + isSenkouSpanAOverB = false; + isSenkouSpanAUnderB = false; + isSenkouSpanAOverLast = false; + isSenkouSpanAUnderLast = false; + isFutureSenkouSpanAOverB = false; + isFutureSenkouSpanAUnderB = false; + isFutureSenkouSpanAOverLast = false; + isFutureSenkouSpanAUnderLast = false; + isCloseOverKijunSen = false; + isCloseUnderKijunSen = false; + isTenkanSenOverKijunSen = false; + isTenkanSenUnderKijunSen = false; + + // + // XMC ... + isFastOverSlow = false; + isFastUnderSlow = false; + isFastOverVerifier = false; + isFastUnderVerifier = false; + isSlowOverVerifier = false; + isSlowUnderVerifier = false; + isCloseOverFast = false; + isCloseUnderFast = false; + isCloseOverSlow = false; + isCloseUnderSlow = false; + isCloseOverVerifier = false; + isCloseUnderVerifier = false; + + // + // XOSC ... + + // + // STDDEV ... + isSTDDEVOverAVG = false; + isSTDDEVUnderAVG = false; + isSTDDEVOverLast = false; + isSTDDEVUnderLast = false; + + // + // RVI ... + isRVILongStart = false; + isRVILongStop = false; + isRVIShortStart = false; + isRVIShortStop = false; + + // + // RSI ... + isRSIUnder50 = false; + isRSIOver70 = false; + isRSIOver50 = false; + isRSIUnder30 = false; + + // + // BULLPOWER ... + isBullPowerOverLast = false; + isBullPoswerUnderLast = false; + isBullPowerOverZero = false; + isBullPoswerUnderZero = false; + + // + // BEARPOWER ... + isBearPowerOverLast = false; + isBearPoswerUnderLast = false; + isBearPowerOverZero = false; + isBearPoswerUnderZero = false; + + // + // CCI ... + isCCIPositive = false; + isCCINegative = false; + isCCIOverPositiveHundred = false; + isCCIUnderNegativeHundred = false; + + // + // MACD ... + isMACDPositiove = false; + isMACDNegative = false; + isMACDOverSignal = false; + isMACDUnderSignal = false; + + // + // STOCH ... + isStochKOverD = false; + isStochKDUnder50 = false; + isStochKUnderD = false; + isStochKDOver50 = false; + isStochKDUnder20 = false; + isStochKDOver80 = false; + } + + // + // Tools ... + + // + // Generate Score ... + void GenerateScore( + double &bullishScore, // Holds Bullish Score ... + double &bearishScore, // Holds Bearish Score ... + double multiplier = 1 // Score Multiplier ... + ) + { + // + double bullScore = 0; + double bearScore = 0; + + // + if (multiplier <= 0) + { + multiplier = 1; + } + + // + // Candlestic ... + + // + // BULLISH ... + if (isLastBullish) + { + bullScore++; + } + if (isCurrentBullish) + { + bullScore++; + } + if (isCurrentMidLineOverLastUp) + { + bullScore++; + } + if (isCurrentMidLineOverLastHigh) + { + bullScore++; + } + if (isCurrentMidLineOverLastMidLine) + { + bullScore++; + } + + // + // BEARISH ... + if (isLastBearish) + { + bearScore++; + } + if (isCurrentBearish) + { + bearScore++; + } + if (isCurrentMidLineUnderLastLow) + { + bearScore++; + } + if (isCurrentMidLineUnderLastDown) + { + bearScore++; + } + if (isCurrentMidLineUnderLastMidLine) + { + bearScore++; + } + + // + // XSTR ... + if (isTrendBullish) + { + bullScore++; + } + if (isTrendBearish) + { + bearScore++; + } + + // + // XICH ... + + // + // BULLISH ... + if (isSenkouSpanAOverB) + { + bullScore++; + } + if (isSenkouSpanAOverLast) + { + bullScore++; + } + if (isCloseOverKijunSen) + { + bullScore++; + } + if (isTenkanSenOverKijunSen) + { + bullScore++; + } + if (isFutureSenkouSpanAOverB) + { + bullScore++; + } + if (isFutureSenkouSpanAOverLast) + { + bullScore++; + } + + // + // BEARISH ... + if (isSenkouSpanAUnderB) + { + bearScore++; + } + if (isSenkouSpanAUnderLast) + { + bearScore++; + } + if (isCloseUnderKijunSen) + { + bearScore++; + } + if (isTenkanSenUnderKijunSen) + { + bearScore++; + } + if (isFutureSenkouSpanAUnderB) + { + bearScore++; + } + if (isFutureSenkouSpanAUnderLast) + { + bearScore++; + } + + // + // XMC ... + + // + // BULLISH ... + if (isFastOverSlow) + { + bullScore++; + } + if (isFastOverVerifier) + { + bullScore++; + } + if (isSlowOverVerifier) + { + bullScore++; + } + if (isCloseOverFast) + { + bullScore++; + } + if (isCloseOverSlow) + { + bullScore++; + } + if (isCloseOverVerifier) + { + bullScore++; + } + + // + // BEARISH ... + if (isFastUnderSlow) + { + bearScore++; + } + if (isFastUnderVerifier) + { + bearScore++; + } + if (isSlowUnderVerifier) + { + bearScore++; + } + if (isCloseUnderFast) + { + bearScore++; + } + if (isCloseUnderSlow) + { + bearScore++; + } + if (isCloseUnderVerifier) + { + bearScore++; + } + + // + // XOSC ... + + // + // STDDEV ... + + // + // BULLISH ... + if (isSTDDEVOverAVG) + { + bullScore++; + } + if (isSTDDEVOverLast) + { + bullScore++; + } + + // + // BEARISH ... + if (isSTDDEVUnderAVG) + { + bearScore++; + } + if (isSTDDEVUnderLast) + { + bearScore++; + } + + // + // RVI ... + if (isRVILongStart && !isRVILongStop) + { + bullScore++; + } + if (isRVIShortStart && isRVIShortStop) + { + bearScore++; + } + + // + // RSI ... + + // + // BULLISH ... + if (isRSIUnder30 || (!isRSIUnder30 && isRSIOver50 && isRSIOver70)) + { + bullScore++; + } + + // + // BEARISH ... + if (isRSIOver70 || (!isRSIOver70 && !isRSIOver50 && isRSIUnder30)) + { + bearScore++; + } + + // + // BULLPOWER ... + + // + // BULLISH ... + if (isBullPowerOverLast) + { + bullScore++; + } + if (isBullPowerOverZero) + { + bullScore++; + } + + // + // BEARISH ... + if (isBullPoswerUnderLast) + { + bearScore++; + } + if (isBullPoswerUnderZero) + { + bearScore++; + } + + // + // BEARPOWER ... + + // + // BULLISH ... + if (isBearPoswerUnderLast) + { + bullScore++; + } + if (isBearPoswerUnderZero) + { + bullScore++; + } + + // + // BEARISH ... + if (isBearPowerOverLast) + { + bearScore++; + } + if (isBearPowerOverZero) + { + bearScore++; + } + + // + // CCI ... + + // + // BULLISH ... + if (isCCIPositive) + { + bullScore++; + } + if (isCCIOverPositiveHundred) + { + bullScore++; + } + + // + // BEARISH ... + if (isCCINegative) + { + bearScore++; + } + if (isCCIUnderNegativeHundred) + { + bearScore++; + } + + // + // MACD ... + + // + // BULLISH ... + if (isMACDPositiove) + { + bullScore++; + } + if (isMACDOverSignal) + { + bullScore++; + } + + // + // BEARISH ... + if (isMACDNegative) + { + bearScore++; + } + if (isMACDUnderSignal) + { + bearScore++; + } + + // + // STOCH ... + + // + // BULLISH ... + if (isStochKOverD) + { + bullScore++; + } + if (isStochKDUnder20) + { + bullScore++; + } + if (isStochKDUnder50) + { + bullScore++; + } + + // + // BEARISH ... + if (isStochKUnderD) + { + bearScore++; + } + if (isStochKDOver50) + { + bearScore++; + } + if (isStochKDOver80) + { + bearScore++; + } + + // + bullishScore = bullScore * multiplier; + bearishScore = bearScore * multiplier; + } + + // + // Generate Summary ... + string GenerateSummary( + double multiplier = 1, // Score Multiplier + bool ignoreFalseConditions = true // Ignore False Conditions + ) + { + // + string result = ""; + + // + double bullScore = 0; + double bearScore = 0; + GenerateScore( + bullScore, + bearScore, + multiplier + // + ); + + // + // Commons ... + string commons = + // + ToString(cycle) + "[" + prefix + "]" + "\n" + + "-------------" + "\n" + + "Time: " + ToString(time) + "\n" + + "\n" + + "Scores:" + "\n" + + "-------------" + "\n" + + "Bullish: " + ToString(bullScore) + "\n" + + "Bearish: " + ToString(bearScore) + "\n" + + "\n" + // + ; + + // + string candlestic = + // + ((isLastBullish || !ignoreFalseConditions) ? "isLastBullish: " + ToString(isLastBullish) + "\n" : "") + + ((isLastBearish || !ignoreFalseConditions) ? "isLastBearish: " + ToString(isLastBearish) + "\n" : "") + + ((isCurrentBullish || !ignoreFalseConditions) ? "isCurrentBullish: " + ToString(isCurrentBullish) + "\n" : "") + + ((isCurrentBearish || !ignoreFalseConditions) ? "isCurrentBearish: " + ToString(isCurrentBearish) + "\n" : "") + + ((isCurrentMidLineOverLastHigh || !ignoreFalseConditions) ? "isCurrentMidLineOverLastHigh: " + ToString(isCurrentMidLineOverLastHigh) + "\n" : "") + + ((isCurrentMidLineUnderLastLow || !ignoreFalseConditions) ? "isCurrentMidLineUnderLastLow: " + ToString(isCurrentMidLineUnderLastLow) + "\n" : "") + + ((isCurrentMidLineOverLastUp || !ignoreFalseConditions) ? "isCurrentMidLineOverLastUp: " + ToString(isCurrentMidLineOverLastUp) + "\n" : "") + + ((isCurrentMidLineUnderLastDown || !ignoreFalseConditions) ? "isCurrentMidLineUnderLastDown: " + ToString(isCurrentMidLineUnderLastDown) + "\n" : "") + + ((isCurrentMidLineOverLastMidLine || !ignoreFalseConditions) ? "isCurrentMidLineOverLastMidLine: " + ToString(isCurrentMidLineOverLastMidLine) + "\n" : "") + + ((isCurrentMidLineUnderLastMidLine || !ignoreFalseConditions) ? "isCurrentMidLineUnderLastMidLine: " + ToString(isCurrentMidLineUnderLastMidLine) + "\n" : "") + + "" + // + ; + if (StringLen(candlestic) > 0) + { + // + candlestic = + // + "XOHCL(s):" + "\n" + + "-------------" + "\n" + + candlestic + + "\n" + // + ; + } + + // + // XSTR ... + string str = + // + ((isTrendBullish || !ignoreFalseConditions) ? "isTrendBullish: " + ToString(isTrendBullish) + "\n" : "") + + ((isTrendBearish || !ignoreFalseConditions) ? "isTrendBearish: " + ToString(isTrendBearish) + "\n" : "") + + "" + // + ; + if (StringLen(str) > 0) + { + // + str = + // + "XSTR:" + "\n" + + "-------------" + "\n" + + str + + "\n" + // + ; + } + + // + // XCHE ... + string che = + // + ((isCHEInLong || !ignoreFalseConditions) ? "isCHEInLong: " + ToString(isCHEInLong) + "\n" : "") + + ((isCHEInStrongLong || !ignoreFalseConditions) ? "isCHEInStrongLong: " + ToString(isCHEInStrongLong) + "\n" : "") + + ((isCHEInShort || !ignoreFalseConditions) ? "isCHEInShort: " + ToString(isCHEInShort) + "\n" : "") + + ((isCHEInStrongShort || !ignoreFalseConditions) ? "isCHEInStrongShort: " + ToString(isCHEInStrongShort) + "\n" : "") + + "" + // + ; + if (StringLen(che) > 0) + { + // + che = + // + "XCHE:" + "\n" + + "-------------" + "\n" + + che + + "\n" + // + ; + } + + // + // XICH ... + string ich = + // + ((isSenkouSpanAOverB || !ignoreFalseConditions) ? "isSenkouSpanAOverB: " + ToString(isSenkouSpanAOverB) + "\n" : "") + + ((isSenkouSpanAUnderB || !ignoreFalseConditions) ? "isSenkouSpanAUnderB: " + ToString(isSenkouSpanAUnderB) + "\n" : "") + + ((isSenkouSpanAOverLast || !ignoreFalseConditions) ? "isSenkouSpanAOverLast: " + ToString(isSenkouSpanAOverLast) + "\n" : "") + + ((isSenkouSpanAUnderLast || !ignoreFalseConditions) ? "isSenkouSpanAUnderLast: " + ToString(isSenkouSpanAUnderLast) + "\n" : "") + + ((isCloseOverKijunSen || !ignoreFalseConditions) ? "isCloseOverKijunSen: " + ToString(isCloseOverKijunSen) + "\n" : "") + + ((isCloseUnderKijunSen || !ignoreFalseConditions) ? "isCloseUnderKijunSen: " + ToString(isCloseUnderKijunSen) + "\n" : "") + + ((isTenkanSenOverKijunSen || !ignoreFalseConditions) ? "isTenkanSenOverKijunSen: " + ToString(isTenkanSenOverKijunSen) + "\n" : "") + + ((isTenkanSenUnderKijunSen || !ignoreFalseConditions) ? "isTenkanSenUnderKijunSen: " + ToString(isTenkanSenUnderKijunSen) + "\n" : "") + + ((isFutureSenkouSpanAOverB || !ignoreFalseConditions) ? "isFutureSenkouSpanAOverB: " + ToString(isFutureSenkouSpanAOverB) + "\n" : "") + + ((isFutureSenkouSpanAUnderB || !ignoreFalseConditions) ? "isFutureSenkouSpanAUnderB: " + ToString(isFutureSenkouSpanAUnderB) + "\n" : "") + + ((isFutureSenkouSpanAOverLast || !ignoreFalseConditions) ? "isFutureSenkouSpanAOverLast: " + ToString(isFutureSenkouSpanAOverLast) + "\n" : "") + + ((isFutureSenkouSpanAUnderLast || !ignoreFalseConditions) ? "isFutureSenkouSpanAUnderLast: " + ToString(isFutureSenkouSpanAUnderLast) + "\n" : "") + + "" + // + ; + if (StringLen(ich) > 0) + { + // + ich = + // + "XICH:" + "\n" + + "-------------" + "\n" + + ich + + "\n" + // + ; + } + + // + // XMC ... + string mc = + // + ((isFastOverSlow || !ignoreFalseConditions) ? "isFastOverSlow: " + ToString(isFastOverSlow) + "\n" : "") + + ((isFastUnderSlow || !ignoreFalseConditions) ? "isFastUnderSlow: " + ToString(isFastUnderSlow) + "\n" : "") + + ((isFastOverVerifier || !ignoreFalseConditions) ? "isFastOverVerifier: " + ToString(isFastOverVerifier) + "\n" : "") + + ((isFastUnderVerifier || !ignoreFalseConditions) ? "isFastUnderVerifier: " + ToString(isFastUnderVerifier) + "\n" : "") + + ((isSlowOverVerifier || !ignoreFalseConditions) ? "isSlowOverVerifier: " + ToString(isSlowOverVerifier) + "\n" : "") + + ((isSlowUnderVerifier || !ignoreFalseConditions) ? "isSlowUnderVerifier: " + ToString(isSlowUnderVerifier) + "\n" : "") + + ((isCloseOverFast || !ignoreFalseConditions) ? "isCloseOverFast: " + ToString(isCloseOverFast) + "\n" : "") + + ((isCloseUnderFast || !ignoreFalseConditions) ? "isCloseUnderFast: " + ToString(isCloseUnderFast) + "\n" : "") + + ((isCloseOverSlow || !ignoreFalseConditions) ? "isCloseOverSlow: " + ToString(isCloseOverSlow) + "\n" : "") + + ((isCloseUnderSlow || !ignoreFalseConditions) ? "isCloseUnderSlow: " + ToString(isCloseUnderSlow) + "\n" : "") + + ((isCloseOverVerifier || !ignoreFalseConditions) ? "isCloseOverVerifier: " + ToString(isCloseOverVerifier) + "\n" : "") + + ((isCloseUnderVerifier || !ignoreFalseConditions) ? "isCloseUnderVerifier: " + ToString(isCloseUnderVerifier) + "\n" : "") + + "" + // + ; + if (StringLen(mc) > 0) + { + // + mc = + // + "XMC:" + "\n" + + "-------------" + "\n" + + mc + + "\n" + // + ; + } + + // + // XOSC ... + + // + // STDDEV ... + string stddev = + // + ((isSTDDEVOverAVG || !ignoreFalseConditions) ? "isSTDDEVOverAVG: " + ToString(isSTDDEVOverAVG) + "\n" : "") + + ((isSTDDEVUnderAVG || !ignoreFalseConditions) ? "isSTDDEVUnderAVG: " + ToString(isSTDDEVUnderAVG) + "\n" : "") + + ((isSTDDEVOverLast || !ignoreFalseConditions) ? "isSTDDEVOverLast: " + ToString(isSTDDEVOverLast) + "\n" : "") + + ((isSTDDEVUnderLast || !ignoreFalseConditions) ? "isSTDDEVUnderLast: " + ToString(isSTDDEVUnderLast) + "\n" : "") + + "" + // + ; + if (StringLen(stddev) > 0) + { + // + stddev = + // + "STDDev:" + "\n" + + "-------------" + "\n" + + stddev + + "\n" + // + ; + } + + // + // RVI ... + string rvi = + // + ((isRVILongStart || !ignoreFalseConditions) ? "isRVILongStart: " + ToString(isRVILongStart) + "\n" : "") + + ((isRVILongStop || !ignoreFalseConditions) ? "isRVILongStop: " + ToString(isRVILongStop) + "\n" : "") + + ((isRVIShortStart || !ignoreFalseConditions) ? "isRVIShortStart: " + ToString(isRVIShortStart) + "\n" : "") + + ((isRVIShortStop || !ignoreFalseConditions) ? "isRVIShortStop: " + ToString(isRVIShortStop) + "\n" : "") + + "" + // + ; + if (StringLen(rvi) > 0) + { + // + rvi = + // + "RVI:" + "\n" + + "-------------" + "\n" + + rvi + + "\n" + // + ; + } + + // + // RSI ... + string rsi = + // + ((isRSIOver50 || !ignoreFalseConditions) ? "isRSIOver50: " + ToString(isRSIOver50) + "\n" : "") + + ((isRSIUnder50 || !ignoreFalseConditions) ? "isRSIUnder50: " + ToString(isRSIUnder50) + "\n" : "") + + ((isRSIOver70 || !ignoreFalseConditions) ? "isRSIOver70: " + ToString(isRSIOver70) + "\n" : "") + + ((isRSIUnder30 || !ignoreFalseConditions) ? "isRSIUnder30: " + ToString(isRSIUnder30) + "\n" : "") + + "" + // + ; + if (StringLen(rsi) > 0) + { + // + rsi = + // + "RSI:" + "\n" + + "-------------" + "\n" + + rsi + + "\n" + // + ; + } + + // + // XCCI ... + string cci = + // + ((isCCIPositive || !ignoreFalseConditions) ? "isCCIPositive: " + ToString(isCCIPositive) + "\n" : "") + + ((isCCINegative || !ignoreFalseConditions) ? "isCCINegative: " + ToString(isCCINegative) + "\n" : "") + + ((isCCIOverPositiveHundred || !ignoreFalseConditions) ? "isCCIOverPositiveHundred: " + ToString(isCCIOverPositiveHundred) + "\n" : "") + + ((isCCIUnderNegativeHundred || !ignoreFalseConditions) ? "isCCIUnderNegativeHundred: " + ToString(isCCIUnderNegativeHundred) + "\n" : "") + + "" + // + ; + if (StringLen(cci) > 0) + { + // + cci = + // + "CCI:" + "\n" + + "-------------" + "\n" + + cci + + "\n" + // + ; + } + + // + // MACD ... + string macd = + // + ((isMACDPositiove || !ignoreFalseConditions) ? "isMACDPositiove: " + ToString(isMACDPositiove) + "\n" : "") + + ((isMACDNegative || !ignoreFalseConditions) ? "isMACDNegative: " + ToString(isMACDNegative) + "\n" : "") + + ((isMACDOverSignal || !ignoreFalseConditions) ? "isMACDOverSignal: " + ToString(isMACDOverSignal) + "\n" : "") + + ((isMACDUnderSignal || !ignoreFalseConditions) ? "isMACDUnderSignal: " + ToString(isMACDUnderSignal) + "\n" : "") + + "" + // + ; + if (StringLen(macd) > 0) + { + // + macd = + // + "MACD:" + "\n" + + "-------------" + "\n" + + macd + + "\n" + // + ; + } + + // + // BULLP ... + string bullp = + // + ((isBullPowerOverLast || !ignoreFalseConditions) ? "isBullPowerOverLast: " + ToString(isBullPowerOverLast) + "\n" : "") + + ((isBullPoswerUnderLast || !ignoreFalseConditions) ? "isBullPoswerUnderLast: " + ToString(isBullPoswerUnderLast) + "\n" : "") + + ((isBullPowerOverZero || !ignoreFalseConditions) ? "isBullPowerOverZero: " + ToString(isBullPowerOverZero) + "\n" : "") + + ((isBullPoswerUnderZero || !ignoreFalseConditions) ? "isBullPoswerUnderZero: " + ToString(isBullPoswerUnderZero) + "\n" : "") + + "" + // + ; + if (StringLen(bullp) > 0) + { + // + bullp = + // + "BullPower:" + "\n" + + "-------------" + "\n" + + bullp + + "\n" + // + ; + } + + // + // BEARP ... + string bearp = + // + ((isBearPowerOverLast || !ignoreFalseConditions) ? "isBearPowerOverLast: " + ToString(isBearPowerOverLast) + "\n" : "") + + ((isBearPoswerUnderLast || !ignoreFalseConditions) ? "isBearPoswerUnderLast: " + ToString(isBearPoswerUnderLast) + "\n" : "") + + ((isBearPowerOverZero || !ignoreFalseConditions) ? "isBearPowerOverZero: " + ToString(isBearPowerOverZero) + "\n" : "") + + ((isBearPoswerUnderZero || !ignoreFalseConditions) ? "isBearPoswerUnderZero: " + ToString(isBearPoswerUnderZero) + "\n" : "") + + "" + // + ; + if (StringLen(bearp) > 0) + { + // + bearp = + // + "BearPower:" + "\n" + + "-------------" + "\n" + + bearp + + "\n" + // + ; + } + + // + // STOCH ... + string stoch = + // + ((isStochKOverD || !ignoreFalseConditions) ? "isStochKOverD: " + ToString(isStochKOverD) + "\n" : "") + + ((isStochKUnderD || !ignoreFalseConditions) ? "isStochKUnderD: " + ToString(isStochKUnderD) + "\n" : "") + + ((isStochKDOver50 || !ignoreFalseConditions) ? "isStochKDOver50: " + ToString(isStochKDOver50) + "\n" : "") + + ((isStochKDOver80 || !ignoreFalseConditions) ? "isStochKDOver80: " + ToString(isStochKDOver80) + "\n" : "") + + ((isStochKDUnder20 || !ignoreFalseConditions) ? "isStochKDUnder20: " + ToString(isStochKDUnder20) + "\n" : "") + + ((isStochKDUnder50 || !ignoreFalseConditions) ? "isStochKDUnder50: " + ToString(isStochKDUnder50) + "\n" : "") + + "" + // + ; + if (StringLen(stoch) > 0) + { + // + stoch = + // + "Stoch:" + "\n" + + "-------------" + "\n" + + stoch + + "\n" + // + ; + } + + string osc = + // + stddev + + rvi + + rsi + + cci + + macd + + bullp + + bearp + + stoch + + "" + // + ; + if (StringLen(osc) > 0) + { + // + osc = + // + "XOSC:" + "\n" + + "-------------" + "\n" + + osc + + "\n" + // + ; + } + + // + result = + // + commons + + candlestic + + str + + che + + ich + + mc + + osc + + "" + // + ; + + // + return result; + } +}; + +// +// Class ... + +// +class XSC121Market +{ + // + // Public ... +public: + // + // Props ... + XSCX121MCHelper mc; + XSCX121STRHelper str; + XSCX121CHEHelper che; + XSCX121OSCHelper osc; + XSCX121ICHHelper ich; + + // + // Constructors ... + XSC121Market() {} + + // + // Deconstructors ... + ~XSC121Market() {} + + // + // Props ... + + // + // Retrieve Trading Symbol ... + string GetSymbol() + { + return mInputs.cycle.symbol; + } + + // + // Retrieve Cycle Time Frame ... + ENUM_TIMEFRAMES GetPeriod() + { + return mInputs.cycle.period; + } + + // + // Retrieve Market Host Time Frame ... + ENUM_TIMEFRAMES GetHostPeriod() + { + return mInputs.cycle.hostPeriod; + } + + // + // Retrieve Current Market Config ... + X121MCycleInputs GetInputs() + { + return mInputs; + } + + // + // Count Total Available Bars in Market ... + int CountBars() + { + // + Update(0); + return mInputs.cycle.CountBars(); + } + + // + // Check Market is in new Bar ... + int IsNewBar() + { + // + Update(0); + return mInputs.cycle.IsNewBar(); + } + + // + // Retrieve Current Cycles Specific Bar ... + XOHCL GetBar(int barIndex) + { + // + Update(0); + return mInputs.cycle.GetBar(barIndex); + } + + // + // Retrieve Current Bar Index based on Host Period bar Index ... + int GetBarIndex(int barIndex) + { + // + Update(barIndex); + return mInputs.cycle.GetBarIndex(barIndex); + } + + // + // Retrieve Bar Time ... + datetime GetBarTime(int barIndex) + { + // + Update(0); + return mInputs.cycle.GetBarTime(barIndex); + } + + // + // Set Market Inputs and Re Initial ... + bool SetInputs( + X121MCycleInputs &inputs // Config + ) + { + // + return Init(inputs); + } + + // + // Tools ... + + // + // Initial Market Cycle ... + bool Init( + X121MCycleInputs &inputs // Inputs for Initialization + ) + { + // + bool result = false; + + // + // Validate Input ... + result = inputs.IsValid(); + if (!result) + { + return result; + } + + // + mInputs = inputs; + + // + string symbol = mInputs.cycle.symbol; + ENUM_TIMEFRAMES period = mInputs.cycle.period; + + // + // Init Helpers ... + + // + // XMC ... + result = mc.Init( + symbol, + period, + mInputs.mcInputs + // + ); + if (!result) + { + return result; + } + + // + // XSTR ... + result = str.Init( + symbol, + period, + mInputs.strInputs + // + ); + if (!result) + { + return result; + } + + // + // XCHE ... + result = che.Init( + symbol, + period, + mInputs.cheInputs + // + ); + if (!result) + { + return result; + } + + // + // XOSC ... + result = osc.Init( + symbol, + period, + mInputs.oscInputs + // + ); + if (!result) + { + return result; + } + + // + // XICH ... + result = ich.Init( + symbol, + period, + mInputs.ichInputs + // + ); + if (!result) + { + return result; + } + + // + return result; + } + + // + // Retrieve Current Market Conditions ... + X121MCycleConditions GetMarketConditions( + int barIndex // Specified Bar Index + ) + { + // + X121MCycleConditions result; + + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + if (barIndex >= CountBars()) + { + barIndex = CountBars() + 2; + } + + // + // Here i Have to Calculate Market Conditions based on + // Several Indicator/Oscillator(s) ... + + // + // Set Commons ... + result.time = GetBarTime(barIndex); + result.cycle = mInputs.cycle.cycle; + result.prefix = mInputs.cycle.prefix; + result.symbol = mInputs.cycle.symbol; + result.period = mInputs.cycle.period; + result.hostPeriod = mInputs.cycle.hostPeriod; + + // + Clean(result.bars); + GetBars( + result.bars, + result.symbol, + result.period, + barIndex, + barIndex + 5); + + // + XOHCL cBar = GetBar(barIndex); + XOHCL pBar = GetBar(barIndex + 1); + + // + // CANDELSTICK ... + + // + bool isLastBullish = + // + pBar.IsBullish() + // + ; + + // + bool isLastBearish = + // + pBar.IsBearish() + // + ; + + // + bool isCurrentBullish = + // + cBar.IsBullish() + // + ; + + // + bool isCurrentBearish = + // + cBar.IsBearish() + // + ; + + // + bool isCurrentMidLineOverLastHigh = + // + cBar.GetMid() > pBar.high; + // + ; + + // + bool isCurrentMidLineUnderLastLow = + // + cBar.GetMid() < pBar.low + // + ; + + // + bool isCurrentMidLineOverLastUp = + // + cBar.GetMid() > pBar.GetUp() + // + ; + + // + bool isCurrentMidLineUnderLastDown = + // + cBar.GetMid() < pBar.GetDown() + // + ; + + // + bool isCurrentMidLineOverLastMidLine = + // + cBar.GetMid() > pBar.GetMid() + // + ; + + // + bool isCurrentMidLineUnderLastMidLine = + // + cBar.GetMid() < pBar.GetMid() + // + ; + + // + result.isLastBullish = isLastBullish; + result.isLastBearish = isLastBearish; + result.isCurrentBullish = isCurrentBullish; + result.isCurrentBearish = isCurrentBearish; + result.isCurrentMidLineOverLastHigh = isCurrentMidLineOverLastHigh; + result.isCurrentMidLineUnderLastLow = isCurrentMidLineUnderLastLow; + result.isCurrentMidLineOverLastUp = isCurrentMidLineOverLastUp; + result.isCurrentMidLineUnderLastDown = isCurrentMidLineUnderLastDown; + result.isCurrentMidLineOverLastMidLine = isCurrentMidLineOverLastMidLine; + result.isCurrentMidLineUnderLastMidLine = isCurrentMidLineUnderLastMidLine; + + // + // XSTR ... + bool isTrendBullish = + // + str.IsBullish(str.GetState(barIndex)) + // + ; + bool isTrendBearish = + // + str.IsBearish(str.GetState(barIndex)) + // + ; + + // + result.isTrendBullish = isTrendBullish; + result.isTrendBearish = isTrendBearish; + + // + // XCHE ... + bool isCHEInLong = + // + NotEmpty(che.GetLongExit1(barIndex)) + // + ; + bool isCHEInStrongLong = + // + isCHEInLong && + NotEmpty(che.GetLongExit2(barIndex)) + // + ; + bool isCHEInShort = + // + NotEmpty(che.GetShortExit1(barIndex)) + // + ; + bool isCHEInStrongShort = + // + isCHEInShort && + NotEmpty(che.GetShortExit2(barIndex)) + // + ; + + // + result.isCHEInLong = isCHEInLong; + result.isCHEInShort = isCHEInShort; + result.isCHEInStrongLong = isCHEInStrongLong; + result.isCHEInStrongShort = isCHEInStrongShort; + + // + // XMC ... + + // + double fasts[]; + mc.CopyFast( + barIndex, + 2, + fasts + // + ); + + // + double slows[]; + mc.CopySlow( + barIndex, + 2, + slows + // + ); + + // + double verifiers[]; + mc.CopyVerifier( + barIndex, + 2, + verifiers + // + ); + + // + bool isFastOverSlow = + // + fasts[0] > slows[0] && + fasts[1] > slows[1] + // + ; + bool isFastUnderSlow = + // + fasts[0] < slows[0] && + fasts[1] < slows[1] + // + ; + bool isFastOverVerifier = + // + fasts[0] > verifiers[0] && + fasts[1] > verifiers[1] + // + ; + bool isFastUnderVerifier = + // + fasts[0] < verifiers[0] && + fasts[1] < verifiers[1] + // + ; + bool isSlowOverVerifier = + // + slows[0] > verifiers[0] && + slows[1] > verifiers[1] + // + ; + bool isSlowUnderVerifier = + // + slows[0] < verifiers[0] && + slows[1] < verifiers[1] + // + ; + bool isCloseOverFast = + // + pBar.close > fasts[1] + // + ; + bool isCloseUnderFast = + // + pBar.close < fasts[1] + // + ; + bool isCloseOverSlow = + // + pBar.close > slows[1] + // + ; + bool isCloseUnderSlow = + // + pBar.close < slows[1] + // + ; + bool isCloseOverVerifier = + // + pBar.close > verifiers[1] + // + ; + bool isCloseUnderVerifier = + // + pBar.close < verifiers[1] + // + ; + + // + result.isFastOverSlow = isFastOverSlow; + result.isFastUnderSlow = isFastUnderSlow; + result.isFastOverVerifier = isFastOverVerifier; + result.isFastUnderVerifier = isFastUnderVerifier; + result.isSlowOverVerifier = isSlowOverVerifier; + result.isSlowUnderVerifier = isSlowUnderVerifier; + result.isCloseOverFast = isCloseOverFast; + result.isCloseUnderFast = isCloseUnderFast; + result.isCloseOverSlow = isCloseOverSlow; + result.isCloseUnderSlow = isCloseUnderSlow; + result.isCloseOverVerifier = isCloseOverVerifier; + result.isCloseUnderVerifier = isCloseUnderVerifier; + + // + // XICH ... + + // + // XOSC ... + + // + // STDDEV ... + + // + double stdDev = osc.GetSTDDEV(barIndex); + double stdDevLast = osc.GetSTDDEV(barIndex + 1); + double stdDevs[]; + osc.CopySTDDEV( + barIndex + 1, + 5, + stdDevs // + ); + double stdDevAVG = GetAverage(stdDevs); + + // + bool isSTDDEVOverAVG = + // + stdDev > stdDevAVG + // + ; + bool isSTDDEVUnderAVG = + // + stdDev < stdDevAVG + // + ; + bool isSTDDEVOverLast = + // + stdDev > stdDevLast + // + ; + bool isSTDDEVUnderLast = + // + stdDev < stdDevLast + // + ; + + // + result.isSTDDEVOverAVG = isSTDDEVOverAVG; + result.isSTDDEVUnderAVG = isSTDDEVUnderAVG; + result.isSTDDEVOverLast = isSTDDEVOverLast; + result.isSTDDEVUnderLast = isSTDDEVUnderLast; + + // + // RVI ... + + // + double rvi = osc.GetRVI(barIndex); + double rviSignal = osc.GetRVISignal(barIndex); + + // + bool isRVILongStart = + // + rvi > 0 && + rviSignal > 0 && + rvi > rviSignal + // + ; + bool isRVILongStop = + // + rvi < 0 && + rviSignal < 0 && + rvi < rviSignal + // + ; + bool isRVIShortStart = + // + rvi < 0 && + rviSignal < 0 && + rvi < rviSignal + // + ; + bool isRVIShortStop = + // + rvi > 0 && + rviSignal > 0 && + rvi > rviSignal + // + ; + + // + result.isRVILongStart = isRVILongStart; + result.isRVILongStop = isRVILongStop; + result.isRVIShortStart = isRVIShortStart; + result.isRVIShortStop = isRVIShortStop; + + // + // RSI ... + double rsi = osc.GetRSI(barIndex); + + // + bool isRSIUnder50 = + // + rsi < 50 + // + ; + bool isRSIOver70 = + // + rsi > 70 + // + ; + bool isRSIOver50 = + // + rsi > 50 + // + ; + bool isRSIUnder30 = + // + rsi < 30 + // + ; + + // + result.isRSIUnder50 = isRSIUnder50; + result.isRSIOver70 = isRSIOver70; + result.isRSIOver50 = isRSIOver50; + result.isRSIUnder30 = isRSIUnder30; + + // + // BULLPOWER ... + + // + double bullp = osc.GetBullPower(barIndex); + double bullpLast = osc.GetBullPower(barIndex + 1); + + // + bool isBullPowerOverLast = + // + bullp > bullpLast + // + ; + bool isBullPoswerUnderLast = + // + bullp < bullpLast + // + ; + bool isBullPowerOverZero = + // + bullp > 0 + // + ; + bool isBullPoswerUnderZero = + // + bullp < 0 + // + ; + + // + result.isBullPowerOverLast = isBullPowerOverLast; + result.isBullPoswerUnderLast = isBullPoswerUnderLast; + result.isBullPowerOverZero = isBullPowerOverZero; + result.isBullPoswerUnderZero = isBullPoswerUnderZero; + + // + // BEARPOWER ... + + // + double bearp = osc.GetBearPower(barIndex); + double bearpLast = osc.GetBearPower(barIndex + 1); + + // + bool isBearPowerOverLast = + // + bearp > bearpLast + // + ; + bool isBearPoswerUnderLast = + // + bearp < bearpLast + // + ; + bool isBearPowerOverZero = + // + bearp > 0 + // + ; + bool isBearPoswerUnderZero = + // + bearp < 0 + // + ; + + // + result.isBearPowerOverLast = isBearPowerOverLast; + result.isBearPoswerUnderLast = isBearPoswerUnderLast; + result.isBearPowerOverZero = isBearPowerOverZero; + result.isBearPoswerUnderZero = isBearPoswerUnderZero; + + // + // CCI ... + + // + double cci = osc.GetCCI(barIndex); + + // + bool isCCIPositive = + // + cci > 0 + // + ; + bool isCCINegative = + // + cci < 0 + // + ; + bool isCCIOverPositiveHundred = + // + cci > 100 + // + ; + bool isCCIUnderNegativeHundred = + // + cci < -100 + // + ; + + // + result.isCCIPositive = isCCIPositive; + result.isCCINegative = isCCINegative; + result.isCCIOverPositiveHundred = isCCIOverPositiveHundred; + result.isCCIUnderNegativeHundred = isCCIUnderNegativeHundred; + + // + // MACD ... + + // + double macd = osc.GetMACD(barIndex); + double macdSignal = osc.GetMACDSignal(barIndex); + + // + bool isMACDPositiove = + // + macd > 0 + // + ; + bool isMACDNegative = + // + macd < 0 + // + ; + bool isMACDOverSignal = + // + macd > macdSignal + // + ; + bool isMACDUnderSignal = + // + macd < macdSignal + // + ; + + // + result.isMACDPositiove = isMACDPositiove; + result.isMACDNegative = isMACDNegative; + result.isMACDOverSignal = isMACDOverSignal; + result.isMACDUnderSignal = isMACDUnderSignal; + + // + // STOCH ... + + // + double stoch = osc.GetSTOCH(barIndex); + double stochSignal = osc.GetSTOCHSignal(barIndex); + + // + bool isStochKOverD = + // + stoch > stochSignal + // + ; + bool isStochKDUnder50 = + // + stoch < 50 && + stochSignal < 50 + // + ; + bool isStochKUnderD = + // + stoch < stochSignal + // + ; + bool isStochKDOver50 = + // + stoch > 50 && + stochSignal > 50 + // + ; + bool isStochKDUnder20 = + // + stoch < 20 && + stochSignal < 20 + // + ; + bool isStochKDOver80 = + // + stoch > 80 && + stochSignal > 80 + // + ; + + // + result.isStochKOverD = isStochKOverD; + result.isStochKDUnder50 = isStochKDUnder50; + result.isStochKUnderD = isStochKUnderD; + result.isStochKDOver50 = isStochKDOver50; + result.isStochKDUnder20 = isStochKDUnder20; + result.isStochKDOver80 = isStochKDOver80; + + // + return result; + } + + // + // Completely Draw Bars ... + void Draw( + long chartID, // Chart ID ... + int subWindow, // Chart Sub Window ... + int &offset // Distance used for Labels ... + ) + { + // + if (mInputs.drawCBar || mInputs.drawPBar) + { + // + DrawOHCL( + chartID, + subWindow, + mInputs.drawLabels, + !mInputs.drawCBar && mInputs.drawPBar, + !mInputs.drawPBar && mInputs.drawCBar, + offset + // + ); + + // + if (mInputs.drawLabels) + { + offset += 3; + } + } + + // + if (mInputs.drawCBarMid || mInputs.drawPBarMid) + { + // + DrawMidLine( + chartID, + subWindow, + mInputs.drawLabels, + !mInputs.drawCBarMid && mInputs.drawPBarMid, + !mInputs.drawPBarMid && mInputs.drawCBarMid, + offset + // + ); + + // + if (mInputs.drawLabels) + { + // + if (mInputs.drawCBarMid) + { + offset++; + } + + // + if (mInputs.drawPBarMid) + { + offset++; + } + } + } + } + + // + // Draw Functions ... + // + // Draw Middle Line of Cycle ... + void DrawOHCL( + long chartID, + int subWindow, + bool drawLabel = false, // Specify Draw Label of Mid Line or not ... + bool drawOnlyPrev = false, // Specify Draw Only Prev Bar of Cycle ... + bool drawOnlyCurrent = false, // Specify Draw Only Current Bar of Cycle ... + int offset = 0 // Distance used for Labels ... + ) + { + // + if (offset < 0) + { + offset = 0; + } + + // + string baseTag = ToString(mInputs.cycle.cycle); + + // + XOHCL cBar = GetBar(0); + XOHCL pBar = GetBar(1); + + // + datetime fromCDate = GetBarTime(0); + datetime fromPDate = GetBarTime(1); + + // + datetime cTime = TimeCurrent(); + + // + // Try to Draw ... + + // + bool canDrawPrev = !drawOnlyCurrent; + bool canDrawCurrent = !drawOnlyPrev; + + // + // Set Cycles Color based on Current Candle ... + + // + bool isCBarBullish = + cBar.IsBullish(); + + // + bool isPBarBullish = + pBar.IsBearish(); + + // + color clrTemoBullishColor = mInputs.cBarDrawSpecs.openStyle.clr; + color clrTemoBearishColor = mInputs.cBarDrawSpecs.closeStyle.clr; + + // + color cBarSelectedColor = isCBarBullish ? clrTemoBullishColor : clrTemoBearishColor; + color pBarSelectedColor = isPBarBullish ? clrTemoBullishColor : clrTemoBearishColor; + + // + mInputs.cBarDrawSpecs.openStyle.clr = cBarSelectedColor; + mInputs.cBarDrawSpecs.openStyle.labelColor = cBarSelectedColor; + + // + mInputs.cBarDrawSpecs.closeStyle.clr = cBarSelectedColor; + mInputs.cBarDrawSpecs.closeStyle.labelColor = cBarSelectedColor; + + // + mInputs.pBarDrawSpecs.openStyle.clr = pBarSelectedColor; + mInputs.pBarDrawSpecs.openStyle.labelColor = pBarSelectedColor; + + // + mInputs.pBarDrawSpecs.closeStyle.clr = pBarSelectedColor; + mInputs.pBarDrawSpecs.closeStyle.labelColor = pBarSelectedColor; + + // + if (canDrawPrev) + { + offset++; + } + + // + // Label ... + if (drawLabel) + { + // + if (canDrawPrev) + { + // + // Draw Prev Bar Lables ... + + // + DrawXOHCLLabel( + chartID, + subWindow, + pBar, + mInputs.pBarDrawSpecs, + "P", + cTime, + offset - 1 + // + ); + + // + offset += 3; + } + + // + if (canDrawCurrent) + { + // + // Draw Current Bar Lables ... + + // + DrawXOHCLLabel( + chartID, + subWindow, + cBar, + mInputs.cBarDrawSpecs, + "C", + cTime, + offset + // + ); + } + } + + // + // Line ... + + // + if (canDrawPrev) + { + // + // Draw Cycle Prev Bar ... + DrawXOHCLContent( + chartID, + subWindow, + pBar, + mInputs.pBarDrawSpecs, + "P", + fromPDate + // + ); + } + + // + if (canDrawCurrent) + { + // + // Draw Cycle Current Bar ... + DrawXOHCLContent( + chartID, + subWindow, + cBar, + mInputs.cBarDrawSpecs, + "C", + fromCDate + // + ); + } + } + + // + // Draw Middle Line of Cycle ... + void DrawMidLine( + long chartID, + int subWindow, + bool drawLabel = false, // Specify Draw Label of Mid Line or not ... + bool drawOnlyPrev = false, // Specify Draw Only Prev Bar of Cycle ... + bool drawOnlyCurrent = false, // Specify Draw Only Current Bar of Cycle ... + int offset = 0 // Distance used for Labels ... + ) + { + // + if (offset < 0) + { + offset = 0; + } + + // + // Calculate Mid Line ... + XOHCL cBar = GetBar(0); + double cMidLine = cBar.GetMid(); + + // + XOHCL pBar = GetBar(1); + double pMidLine = pBar.GetMid(); + + // + string baseTag = ToString(mInputs.cycle.cycle); + + // + string midCTag = baseTag + "|MID|C|"; + string midPTag = baseTag + "|MID|P|"; + + // + string midCLblTag = midCTag + "lbl"; + string midPLblTag = midPTag + "lbl"; + + // + datetime fromCDate = GetBarTime(0); + datetime fromPDate = GetBarTime(1); + + // + datetime cTime = TimeCurrent(); + + // + // Try to Draw ... + + // + bool canDrawPrev = !drawOnlyCurrent; + bool canDrawCurrent = !drawOnlyPrev; + + // + if (canDrawPrev) + { + offset++; + } + + // + // Label ... + if (drawLabel) + { + // + if (canDrawPrev) + { + // + // Draw Prev Candle MidLine Lable ... + DrawLabel( + chartID, + subWindow, + mInputs.pBarMidDrawSpecs, + midPLblTag, + cTime, + pMidLine, + offset // + ); + } + + // + if (canDrawCurrent) + { + // + // Draw Current Candle MidLine Label ... + DrawLabel( + chartID, + subWindow, + mInputs.cBarMidDrawSpecs, + midCLblTag, + cTime, + cMidLine, + offset - 1 // + ); + } + } + + // + // Line ... + + // + if (canDrawPrev) + { + // + // Draw Prev Candle MidLine ... + DrawLine( + chartID, + subWindow, + mInputs.pBarMidDrawSpecs, + midPTag, + fromPDate, + pMidLine // + ); + } + + // + if (canDrawCurrent) + { + // + // Draw Current Candle MidLine ... + DrawLine( + chartID, + subWindow, + mInputs.cBarMidDrawSpecs, + midCTag, + fromCDate, + cMidLine // + ); + } + } + + // + // Protected ... +protected: + // + // Private ... +private: + // + // Props ... + + // + X121MCycleInputs mInputs; + + // + // Tools ... + + // + bool Update(int hostBarIndex = 0) + { + return mInputs.cycle.Update(hostBarIndex); + } + + // + // Draw Functions ... + // + // Draw OHCL Labels ... + void DrawXOHCLLabel( + long chartID, + int subWindow, + XOHCL &bar, // Specify Cycle XOHCL Model to Draw ... + XOHCLDrawSpecification &specs, // Specify Cycle XOHCL Draw Specifications ... + string baseTag, // Specify a Unique Tag ... + datetime time, // Draw Time ... + int offset = 0 // + ) + { + // + // Open ... + string openTag = mInputs.cycle.prefix + "_" + baseTag + "_O_lbl"; + DrawLabel( + chartID, + subWindow, + specs.openStyle, + openTag, + time, + bar.open, + offset + // + ); + + // + // High ... + string highTag = mInputs.cycle.prefix + "_" + baseTag + "_H_lbl"; + DrawLabel( + chartID, + subWindow, + specs.highStyle, + highTag, + time, + bar.high, + offset + 1 + // + ); + + // + // Close ... + string closeTag = mInputs.cycle.prefix + "_" + baseTag + "_C_lbl"; + DrawLabel( + chartID, + subWindow, + specs.closeStyle, + closeTag, + time, + bar.close, + offset + 2 + // + ); + + // + // Low ... + string lowTag = mInputs.cycle.prefix + "_" + baseTag + "_L_lbl"; + DrawLabel( + chartID, + subWindow, + specs.lowStyle, + lowTag, + time, + bar.low, + offset + 3 + // + ); + } + + // + // Draw XOHCL Content ... + void DrawXOHCLContent( + long chartID, + int subWindow, + XOHCL &bar, // Specify Cycle XOHCL Model to Draw ... + XOHCLDrawSpecification &specs, // Specify Cycle XOHCL Draw Specifications ... + string baseTag, // Specify a Unique Tag ... + datetime time // Draw Time ... + ) + { + // + // Open ... + string openTag = mInputs.cycle.prefix + "_" + baseTag + "_O"; + DrawLine( + chartID, + subWindow, + specs.openStyle, + openTag, + time, + bar.open + // + ); + + // + // High ... + string highTag = mInputs.cycle.prefix + "_" + baseTag + "_H"; + DrawLine( + chartID, + subWindow, + specs.highStyle, + highTag, + time, + bar.high + // + ); + + // + // Close ... + string closeTag = mInputs.cycle.prefix + "_" + baseTag + "_C"; + DrawLine( + chartID, + subWindow, + specs.closeStyle, + closeTag, + time, + bar.close + // + ); + + // + // Low ... + string lowTag = mInputs.cycle.prefix + "_" + baseTag + "_L"; + DrawLine( + chartID, + subWindow, + specs.lowStyle, + lowTag, + time, + bar.low + // + ); + } + + // + // Draw Label Using Specifications ... + void DrawLabel( + long chartID, + int subWindow, + XDrawSpecifications &specs, + string tag, + datetime time, + double price, + int offset = 0 // + ) + { + // + if (offset < 0) + { + offset = 0; + } + + // + int offsetSeconds = PeriodSeconds(mInputs.cycle.hostPeriod) * offset; + + // + string value = specs.label; + + // + DrawText( + chartID, + tag, + subWindow, + time - offsetSeconds, + price, + specs.label, + specs.labelFont, + specs.labelFontSize, + specs.labelColor, + specs.labelAngel, + specs.labelAnchor, + specs.back, + specs.selection, + specs.hidden, + specs.zOrder // + ); + } + + // + // Draw TrendLine Using Specifications ... + void DrawLine( + long chartID, + int subWindow, + XDrawSpecifications &specs, + string tag, + datetime fromDate, + double fromPrice, + datetime toDate = NULL, + double toPrice = 0 // + ) + { + // + if (toPrice <= 0) + { + toPrice = fromPrice; + } + + // + if (toDate == 0 || toDate == NULL) + { + toDate = TimeCurrent(); + } + + // + DrawTrendLine( + chartID, + tag, + subWindow, + fromDate, + fromPrice, + toDate, + toPrice, + specs.clr, + specs.style, + specs.width, + specs.back, + specs.selection, + specs.rayRight, + specs.hidden, + specs.zOrder // + ); + } +}; diff --git a/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xaccount.class.mq5 b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xaccount.class.mq5 new file mode 100644 index 0000000..4425f0b --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xaccount.class.mq5 @@ -0,0 +1,398 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Class Library +// ---------------------------------------------- +// Name: XSCAccount +// Description: provides all Account requirements ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// START Definitions ... +// + +// +// END Definitions ... +// + +// +// START Import and Inclused requirements ... +// + +// +// Includes ... +#include +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// END Import and Inclused requirements ... +// + +// +// START Overrides ... +// + +// +// END Overrides ... +// + +// +// a Class for Manage Account ... +class XSCAccount +{ + // + // Public ... +public: + // + // Constructor ... + void XSCAccount() + { + // + mAccountInfo = new CAccountInfo(); + } + + // + // Deconstructor ... + void ~XSCAccount() + { + } + + // + // START Provided Functions ... + // + + // + // User Account ... + long GetUserAccount() + { + return mAccountInfo.Login(); + } + + // + // Account Leverage ... + long GetLeverage() + { + return mAccountInfo.Leverage(); + } + + // + // Get Trade Expert State ... + bool CanExpertTrade() + { + return mAccountInfo.TradeExpert(); + } + + // + // User Account Trade Mopde (ENUM_ACCOUNT_TRADE_MODE) ... + // -------------------------- + // ACCOUNT_TRADE_MODE_DEMO + // ACCOUNT_TRADE_MODE_CONTEST + // ACCOUNT_TRADE_MODE_REAL + ENUM_ACCOUNT_TRADE_MODE GetTradeMode() + { + return mAccountInfo.TradeMode(); + } + + // + // Get Account Balance ... + double GetBalance() + { + return mAccountInfo.Balance(); + } + + // + // Get the amount of give Credit ... + double GetCredit() + { + return mAccountInfo.Credit(); + } + + // + // Get the amount of current Profit on account ... + double GetProfit() + { + return mAccountInfo.Profit(); + } + + // + // Get the amount of current Equity on account ... + double GetEquity() + { + return mAccountInfo.Equity(); + } + + // + // Get the amount of reserved Margin ... + double GetMargin() + { + return mAccountInfo.Margin(); + } + + // + // Get the amount of free Margin ... + double GetFreeMargin() + { + return mAccountInfo.FreeMargin(); + } + + // + // Get the Level of Margin ... + double GetMarginLevel() + { + return mAccountInfo.MarginLevel(); + } + + // + // Get the Level Of Margin for a Deposit ... + double GetMarginCall() + { + return mAccountInfo.MarginCall(); + } + + // + // Get the Level of Margin for Stop out ... + double GetMarginStopOut() + { + return mAccountInfo.MarginStopOut(); + } + + // + // Get the Client Name ... + string GetName() + { + return mAccountInfo.Name(); + } + + // + // Get the Trade Server Name ... + string GetServerName() + { + return mAccountInfo.Server(); + } + + // + // Get deposit Currency Name ... + string GetCurrency() + { + return mAccountInfo.Currency(); + } + + // + // Get the Company Name that serves an Account ... + string GetCompany() + { + return mAccountInfo.Company(); + } + + // + // Calculate Profits for the current account based on passed parameters ... + double CalculateTradeProfit( + const string symbol, // trading symbol + ENUM_ORDER_TYPE type, // order type + double volume, // volume + double entry, // open price + double exit // close price + ) + { + // + double result = mAccountInfo.OrderProfitCheck( + symbol, + type, + volume, + entry, + exit); + + // + return result; + } + + // + // Calculate amount of margin which required for trade operation ... + double CalculateMarging( + const string symbol, // trading symbol + ENUM_ORDER_TYPE type, // order type + double volume, // volume + double entry // open price + ) + { + // + double result = mAccountInfo.MarginCheck( + symbol, + type, + volume, + entry); + + // + return result; + } + + // + // Calculate amount of free margin left after trade operation ... + double CalculateFreeMarging( + const string symbol, // trading symbol + ENUM_ORDER_TYPE type, // order type + double volume, // volume + double entry // open price + ) + { + // + double result = mAccountInfo.FreeMarginCheck( + symbol, + type, + volume, + entry); + + // + return result; + } + + // + // Calculate the Maximum possible volume of trade operation ... + double CalculateMaxVolume( + const string symbol, // trading symbol + ENUM_ORDER_TYPE type, // order type + double entry, // open price + double percent = 100 // percent of available margin + ) + { + // + double result = mAccountInfo.MaxLotCheck( + symbol, + type, + entry, + percent); + + // + return result; + } + + // + // Calculate Point Value for Given Symbol based on Account ... + double GetPointValue( + string symbol // trading symbol + ) + { + // + double result = 0; + + // + double tickSize = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE); + double tickValue = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE); + double point = SymbolInfoDouble(symbol, SYMBOL_POINT); + + // + double ticksPerPoint = tickSize / point; + + // + result = tickValue / ticksPerPoint; + + // + return result; + } + + // + // Calculate Risk Amount based on account Currency by Providing: + // Points and Volume ... + double CalculateRiskAmount( + string symbol, // trading symbol + double points, // amount of Risk Points + double volume // position Volume + ) + { + // + double result = 0; + + // + double pointValue = GetPointValue(symbol); + + // + result = pointValue * volume * points; + + // + return result; + } + + // + // Calculate Risk Points based on account Currency by Providing: + // Volume and Amount ... + double CalculateRiskPoints( + string symbol, // trading symbol + double volume, // position Volume + double amount // amount of Risk based on Account Currency + ) + { + // + double result = 0; + + // + double pointValue = GetPointValue(symbol); + + // + result = amount / (pointValue * volume); + + // + return result; + } + + // + // Calculate Volume based on account Currency by Providing: + // Amount and Risk Points ... + double CalculateVolume( + string symbol, // trading symbol + double amount, // amount of Risk based on Account Currency + double points // amount of Risk Points + ) + { + // + double result = 0; + + // + points = + points <= 0 + ? 10 + : points; + + // + double pointValue = GetPointValue(symbol); + + // + result = amount / (pointValue * points); + + // + return result; + } + + // + // END Provided Functions ... + // + + // + // Protected ... +protected: + // + // Private ... +private: + // + // Account Info ... + CAccountInfo mAccountInfo; +}; + +// +// START Usefull Functions ... +// + +// +// END Usefull Functions ... +// diff --git a/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xdata-collector.ex5 b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xdata-collector.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..7541cb7cd7137bbf69fa64d649fed2429f1cc6e8 GIT binary patch literal 5410 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 +class XSCDataCollector +{ + // + // Public ... +public: + // + // Props ... + + // + // Constructors ... + void XSCDataCollector( + string path = NULL, // Base Folder for Data Store + string fileName = NULL // File Name for Data Store + ) + { + // + if (!IsValid(path)) + { + path = GetType(); + } + + // + if (!IsValid(fileName)) + { + fileName = GetType() + ".txt"; + } + + // + Path(path); + FileName(fileName); + } + + // + // Deconstructor ... + void ~XSCDataCollector() {} + + // + // Properties ... + + // + bool Path(string value) + { + // + bool result = false; + + // + result = IsValid(value); + if (!result) + { + return result; + } + + // + result = value != mPath; + if (!result) + { + return result; + } + + // + mPath = value; + + // + return result; + } + + // + string Path() + { + return mPath; + } + + // + bool FileName(string value) + { + // + bool result = false; + + // + result = IsValid(value); + if (!result) + { + return result; + } + + // + result = value != mFileName; + if (!result) + { + return result; + } + + // + mFileName = value; + + // + return result; + } + + // + string FileName() + { + return mFileName; + } + + // + // Tools ... + + // + // Clear Exists Collected Data ... + void Clear() + { + // + ResetLastError(); + + // + string dataStorePath = GetStorePath(); + + // + // Check Data Store Exists or not ... + bool isExists = FileIsExist(dataStorePath); + if (!isExists) + { + return; + } + + // + FileDelete(dataStorePath); + } + + // + // Collect All Stored Items ... + int Collect( + T &items[] // Hold Result + ) + { + // + int result = 0; + + // + Clean(items); + + // + // Reading Store Whole Content ... + + // + string storePath = GetStorePath(); + int mFileHandler = FileOpen( + storePath, + FILE_READ | FILE_TXT); + result = mFileHandler != INVALID_HANDLE; + if (!result) + { + return result; + } + + // + // Parse Store Content and Read Data ... + while (!FileIsEnding(mFileHandler)) + { + // + // Each Line Represent One Model ... + string content = FileReadString(mFileHandler); + + // + T iItem; + bool isValid = iItem.Parse(content); + if (isValid) + { + // + AddRef( + iItem, + items + // + ); + } + } + + // + // Close File ... + FileClose(mFileHandler); + + // + result = ArraySize(items); + + // + return result; + } + + // + // Add Item ... + bool Add( + T &item // Item to Store + ) + { + // + bool result = false; + + // + result = item.IsValid(); + if (!result) + { + return result; + } + + // + string content = item.ToString(); + result = IsValid(content); + if (!result) + { + return result; + } + + // + string storePath = GetStorePath(); + int mFileHandler = FileOpen( + storePath, + FILE_READ | FILE_WRITE | FILE_TXT); + result = mFileHandler != INVALID_HANDLE; + if (!result) + { + return result; + } + + // + FileSeek(mFileHandler, 0, SEEK_END); + FileWrite(mFileHandler, content); + FileFlush(mFileHandler); + FileClose(mFileHandler); + + // + return result; + } + + // + // Add Items ... + int Add( + T &items[] // Items to Add ... + ) + { + // + int result = 0; + + // + int itemsCount = ArraySize(items); + if (itemsCount <= 0) + { + return result; + } + + // + for (int i = 0; i < itemsCount; i++) + { + // + T iItem = items[i]; + + // + if (!iItem.IsValid()) + { + continue; + } + + // + bool isAdded = Add(iItem); + if (isAdded) + { + result++; + } + } + + // + return result; + } + + // + // Remove Item ... + bool Remove( + T &item // Item to Remove + ) + { + // + bool result = false; + + // + result = item.IsValid(); + if (!result) + { + return result; + } + + // + T items[]; + int itemsCount = Collect(items); + if (itemsCount <= 0) + { + return result; + } + + // + int itemIndex = item.FindIndex(items); + result = ArrayRemove( + items, + itemIndex, + 1); + if (!result) + { + return result; + } + + // + Clear(); + + // + int itemsAdded = Add(items); + + // + result = itemsAdded == ArraySize(items); + + // + return result; + } + + // + // Protected ... +protected: + // + // Tools ... + + // + // Retrieve Type of Class as String ... + string GetType() + { + // + string mType = (string) typename(T); + + // + string result = mType; + + // + string parts[]; + int partsCount = SplitContent( + parts, + result, + " " + // + ); + if (partsCount <= 0) + { + // + result = mType; + return result; + } + + // + bool hasLastPart = GetLastItem( + result, + parts + // + ); + if (!hasLastPart) + { + // + result = mType; + return result; + } + + // + return result; + } + + // + // Pricate ... +private: + // + // Props ... + + // + string mPath; // Path + string mFileName; // Data Store File Name + + // + // Tools ... + + // + // Generate Full File Path ... + string GetFilePath(string fileName) + { + // + string result = ""; + + // + result = + // + Path() + "\\" + fileName + // + ; + + // + return result; + } + + // + // Retrieve Data Store File Address ... + string GetStorePath() + { + // + string result = NULL; + + // + result = GetFilePath(mFileName); + + // + return result; + } +}; + +// \ No newline at end of file diff --git a/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xea.class.mq5 b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xea.class.mq5 new file mode 100644 index 0000000..626a8cd --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xea.class.mq5 @@ -0,0 +1,2142 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Class Library +// ---------------------------------------------- +// Name: XSCBaseEA +// Description: provides all Base EA requirements ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// START Definitions ... +// + +// +// if Signal Execution Failed this is the reason ... +enum ENUM_X_SIGNAL_EXECUTION_FAILED +{ + X_NOTHING, // Succeeded ... + X_UNKNOWN, // Failed, but Unknown ... + X_FAILED_REASON_EQUITY, // Failed, Since Equity ... + X_FAILED_REASON_SPREAD, // Failed, Since Spread ... + X_FAILED_REASON_MAX_REACHED // Failed Signce Max Allowed Reached ... +}; + +// +// END Definitions ... +// + +// +// START Import and Inclused requirements ... +// + +// +// Includes ... +#include "../Libraries/x-saherelm.alert.lib.mq5" +#include "../Libraries/x-saherelm.common.lib.mq5" +#include "../Classes/x-saherelm.xtrade.class.mq5" +#include "../Classes/x-saherelm.xaccount.class.mq5" +#include "../Classes/x-saherelm.xprovider.class.mq5" +#include "../Libraries/x-saherelm.seriallizer.lib.mq5" + +// +// END Import and Inclused requirements ... +// + +// +// START Overrides ... +// + +// +// END Overrides ... +// + +// +// a Class for Handle base requirements ... +// for indicators ... +class XSCBaseEA +{ + // + // Public ... +public: + // + // Props ... + XSCTrade *mTrader; + XSCAccount *mAccount; + + // + bool isNewHour; + bool isNewDay; + bool isNewWeek; + bool isNewMonth; + bool isNewCandle; + + // + bool isInTestMode; + + // + bool mWaitsUntilNewCandle; + + // + // Constructor ... + void XSCBaseEA( + string symbol, // Trading Symbol + ENUM_TIMEFRAMES period, // Trading Time Frame + ulong magic, // Magic Number + int slippage, // Slippgae + double maxAllowedSpread, // Max Allowed Spread to Execute Signal + int maxAllowedPositions, // Maximum Allowed Same Time Position + double minProfitPerTrade, // Min Profit Per Trade based On Volume Factor (Hedge) + double minProfitPerVolumeFactor, // Min Volume Factor for Calculating Profit (Hedge) + double maxAllowedDrawDownFactor, // Max Allowed Drawdown factor for Open New Positions + TOnStopLoss onStopLossTriggered = NULL, // On StopLoass Triggered Event Handler + TOnTakeProfit onTakeProfitTriggered = NULL, // On TakeProfit Triggered Event Handler + TOnDealsChanged onDealsChangedHandler = NULL, // On Deals Changed Event Handler + TOnOrdersChanged onOrdersChangedHandler = NULL, // On Orders Changed Event Handler + TOnPositionsChanged onPositionsChangedHandler = NULL, // On Positions Changed Event Handler + TOnTradeStateChanged onTradeStateChangedHandler = NULL // On Trade State Changed Event Handler + ) + { + // + mSymbol = symbol; + mPeriod = period; + + // + mMagic = magic; + mSlippage = slippage; + + // + mMaxAllowedSpread = maxAllowedSpread; + + // + mMaxAllowedPositions = maxAllowedPositions; + mMaxAllowedDrawDownFactor = maxAllowedDrawDownFactor; + + // + mMinProfitPerTrade = minProfitPerTrade; + mMinProfitPerVolumeFactor = minProfitPerVolumeFactor; + + // + mOnStopLossTriggered = onStopLossTriggered; + mOnTakeProfitTriggered = onTakeProfitTriggered; + mOnDealsChangedHandler = onDealsChangedHandler; + mOnOrdersChangedHandler = onOrdersChangedHandler; + mOnPositionsChangedHandler = onPositionsChangedHandler; + mOnTradeStateChangedHandler = onTradeStateChangedHandler; + + // + // Reset Timings ... + ResetTiming(); + + // + InitRequirements(); + } + + // + // Deconstructor ... + void ~XSCBaseEA() + { + // + delete mTrader; + delete mAccount; + } + + // + // START Properties ... + // + + // + // Symbol ... + string GetSymbol() + { + return mSymbol; + } + + // + // Period ... + ENUM_TIMEFRAMES GetPeriod() + { + return mPeriod; + } + + // + // Tag ... + string GetTag() + { + return mTag; + } + + // + ulong GetMagic() + { + return mMagic; + } + + // + int GetSlippage() + { + return mSlippage; + } + + // + // Check Long Signalling State ... + bool EnableLongs() + { + return mEnableLongs; + } + + // + // Set Long Signalling State ... + void EnableLongs(bool enable) + { + // + if (enable == mEnableLongs) + { + return; + } + + // + mEnableLongs = enable; + } + + // + // Check Short Signalling State ... + bool EnableShorts() + { + return mEnableShorts; + } + + // + // Set Short Signalling State ... + void EnableShorts(bool enable) + { + // + if (enable == mEnableShorts) + { + return; + } + + // + mEnableShorts = enable; + } + + // + double MaxAllowedSpread() + { + return mMaxAllowedSpread; + } + + // + void MaxAllowedSpread(double value) + { + // + if (value <= 0) + { + value = 0; + } + + // + if (value == mMaxAllowedSpread) + { + return; + } + + // + mMaxAllowedSpread = value; + } + + // + // Get Max Allowed Positions at Same Time ... + int MaxAllowedPositions() + { + return mMaxAllowedPositions; + } + + // + // Set Max Allowed Positions at Same Time ... + void MaxAllowedPositions(int value) + { + // + if (value < 0 || + value == mMaxAllowedPositions) + { + return; + } + + // + mMaxAllowedPositions = value; + } + + // + // Get Max Allowed DrawDown Factor ... + double MaxAllowedDrawDownFactor() + { + return mMaxAllowedDrawDownFactor; + } + + // + // Set Max Allowed Positions at Same Time ... + void MaxAllowedDrawDownFactor(double value) + { + // + if (value < 0 || + value == mMaxAllowedDrawDownFactor) + { + return; + } + + // + mMaxAllowedDrawDownFactor = value; + } + + // + double MinProfitPerTrade() + { + return mMinProfitPerTrade; + } + + // + void MinProfitPerTrade(double value) + { + // + if (value <= 0) + { + value = 0; + } + + // + if (value == mMinProfitPerTrade) + { + return; + } + + // + mMinProfitPerTrade = value; + } + + // + double MinProfitPerVolumeFactor() + { + return mMinProfitPerVolumeFactor; + } + + // + void MinProfitPerVolumeFactor(double value) + { + // + if (value <= 0) + { + value = 0; + } + + // + if (value == mMinProfitPerVolumeFactor) + { + return; + } + + // + mMinProfitPerVolumeFactor = value; + } + + // + // END Properties ... + // + + // + // START Provided Functions ... + // + + // + // Prepare Tag ... + virtual void PrepareTag() + { + mTag = "XEA" + mSymbol + "," + ToString(mPeriod) + (string)mMagic; + } + + // + // Handle Chart Events ... + virtual void OnChartEvent( + const int id, // event ID + const long &lparam, // long type event parameter + const double &dparam, // double type event parameter + const string &sparam // string type event parameter + ) + { + } + + // + // Check any Registered Providers Signalling ... + virtual bool SignalCheck(XSignal &signals[]) + { + return false; + } + + // + // Check for any Custom Guard Actions Guard Actions ... + virtual bool CheckGuard(XGuard &guards[]) + { + return false; + } + + // + virtual void BeforeSignalExecution(XSignal &signals[]) {} + + // + // NOTE: you have to call these Functions on Static Classes to Handle Works ... + + // + // Handle StopLoss Event ... + virtual void OnStopLossTriggered(const XDeal &deal) {} + + // + // Handle TakeProfit Event ... + virtual void OnTakeProfitTriggered(const XDeal &deal) {} + + // + // Handle Deals Changed Event ... + virtual void OnDealsChangedHandler(int count) {} + + // + // Handle Order Changed Event ... + virtual void OnOrdersChangedHandler(int count) {} + + // + // Handle Position Changed Event ... + virtual void OnPositionsChangedHandler(int count) {} + + // + // Handle Trade State Changed ... + virtual void OnTradeStateChangedHandler(const XOnTradeHandlerState &state) {} + + // + // Implemented Actions ... + + // + // OnTick Handler ... + void OnTick() + { + // + // First Check Guards .... + // Only when Open Positions Exists or Has Pending Order ... + XGuard guards[]; + bool hasGuard = CheckGuard(guards); + if (hasGuard) + { + DoGuards(guards); + } + + // + XSignal signals[]; + bool hasSignal = SignalCheck(signals); + if (hasSignal) + { + // + // Here we have to Check Signals and also it's State ... + XSignal enabledSignals[]; + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return; + } + + // + // Filter Signals by their type and + // also Check EA Enable their type ... + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = signals[i]; + bool isLong = IsLong(iSignal.type); + if ((isLong && mEnableLongs) || + (!isLong && mEnableShorts)) + { + // + Add( + iSignal, + enabledSignals); + } + } + + // + int enabledSignalsCount = ArraySize(enabledSignals); + if (enabledSignalsCount <= 0) + { + return; + } + + // + // Here we have do All things before Signals Execution ... + // in this way we can implement custom searios on Inherited Classes ... + BeforeSignalExecution(enabledSignals); + + // + // Now double chack signals Array .... + // if there isn't any signal we prevent moving forward ... + // this helps us to Manage Signal Executions on Above Part ... + // for inherited classes ... + enabledSignalsCount = ArraySize(enabledSignals); + if (enabledSignalsCount <= 0) + { + return; + } + + // + ENUM_X_SIGNAL_EXECUTION_FAILED reasons[]; + ExecuteSignals( + enabledSignals, + reasons, + true // Check Policiese ... + ); + } + } + + // + // Handle On Trade ... + void OnTrade() + { + // + XOnTradeHandlerState state = mTrader.HandleOnTrade(); + + // + if ( + !state.hasNewDeal && + !state.hasNewOrder && + !state.hasNewPosition && + !state.hasNewHistoryOrder) + { + return; + } + + // + // STATE ... + + // + // Notfy Trade State Changed Event ... + OnTradeStateChangedHandler(state); + + // + // DEALS ... + if (state.hasNewDeal) + { + // + // Notfy Deals Changed Event ... + OnDealsChangedHandler(state.newDeals); + + // + // Retrieve Last Deal ... + XDeal deals[]; + mTrader.GetDeals(deals); + int dealsCount = ArraySize(deals); + if (dealsCount > 0) + { + // + XDeal lastDeal = deals[0]; + + // + if (lastDeal.reason == DEAL_REASON_TP) + { + OnTakeProfitTriggered(lastDeal); + } + else if (lastDeal.reason == DEAL_REASON_SL) + { + OnStopLossTriggered(lastDeal); + } + } + } + + // + // ORDERS ... + if (state.hasNewOrder || state.hasNewHistoryOrder) + { + // + // Notfy Orders Changed Event ... + OnOrdersChangedHandler(state.newOrders + state.newHistoryOrders); + } + + // + // POSITIONS ... + if (state.hasNewPosition) + { + // + // Notfy Positions Changed Event ... + OnPositionsChangedHandler(state.newPositions); + } + } + + // + // Retrieve Dept Of Market ... + void OnBookEvent(const string &symbol) + { + // + // TODO: Implement this ... + } + + // + // TOOLS ... + + // + // Execute Specific Signal by Checking Spreads ... + // if provided ... + bool ExecuteSignal( + const XSignal &signal, // Source Signal ... + ENUM_X_SIGNAL_EXECUTION_FAILED &reason, // Provides Error Reason ... + bool checkPoliciese = true // Check Account Policies Before Execute Signal ... + ) + { + // + bool result = false; + reason = X_NOTHING; + + // + // Check Account Policies ... + if (checkPoliciese) + { + // + // First Check Equity ... + result = CheckEquityForTrade(); + if (!result) + { + // + reason = X_FAILED_REASON_EQUITY; + return result; + } + + // + // Check Positions Count ... + result = ChecPositionsForTrade(); + if (!result) + { + // + reason = X_FAILED_REASON_MAX_REACHED; + return result; + } + + // + // Check Spread ... + result = IsSpreadOkForSignalExecution(signal); + if (!result) + { + // + reason = X_FAILED_REASON_SPREAD; + return result; + } + } + + // + XSignal tmpSignal = signal; + PrepareSignal(tmpSignal); + + // + // Generate Provider Comment ... + string comment = GenerateProvidersString(tmpSignal); + + // + result = mTrader + .ExecuteSignal( + tmpSignal, + comment // + ); + if (!result) + { + reason = X_UNKNOWN; + } + + // + return result; + } + + // + // Execute Specific Signals by Checking Spreads ... + // if provided ... + int ExecuteSignals( + const XSignal &signals[], // Signals Collection ... + ENUM_X_SIGNAL_EXECUTION_FAILED &reasons[], // Provides Error Reason ... + bool checkPoliciese = true // Check Account Policies Before Execute Signal ... + ) + { + // + int result = 0; + + // + Clean(reasons); + + // + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return result; + } + + // + // Here we Have to Check Account Policies + // and Execute Signals base on them ... + + // + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = signals[i]; + + // + ENUM_X_SIGNAL_EXECUTION_FAILED iReason = X_NOTHING; + + // + bool isExecuted = ExecuteSignal( + iSignal, + iReason, + checkPoliciese // + ); + if (isExecuted) + { + result++; + } + + // + Add( + iReason, + reasons); + } + + // + return result; + } + + // + // Get All Open Trades ... + int GetPositions( + XPosition &result[], // Hold Result ... + string symbol = NULL, // Trading Symbol ... + ENUM_POSITION_TYPE type = NULL, // Trading Type ... + ENUM_TIMEFRAMES period = NULL, // Trading Period ... + string provider = NULL // Signal Provider ... + ) + { + // + int mResult = 0; + + // + Clean(result); + + // + bool hasSymbol = !(symbol == NULL || StringLen(symbol) == 0); + bool hasProvider = !(provider == NULL || StringLen(provider) == 0); + + // + int positionsCount = mTrader.CountPositions(); + if (positionsCount <= 0) + { + return mResult; + } + + // + XPosition positions[]; + mTrader.GetPositions( + positions, + symbol, + period); + positionsCount = ArraySize(positions); + if (positionsCount <= 0) + { + return mResult; + } + + // + if (!hasProvider && type == NULL) + { + // + Copy( + positions, + result); + + // + return ArraySize(result); + } + + // + if (type == NULL) + { + // + ArrayResize( + result, + ArraySize(positions)); + + // + for (int i = 0; i < positionsCount; i++) + { + // + Add( + positions[i], + result); + } + + // + return ArraySize(result); + } + + // + for (int i = 0; i < positionsCount; i++) + { + // + XPosition iPosition = positions[i]; + + // + string iProvider = ExtractProvider(iPosition.comment); + if (hasProvider && iProvider != provider) + { + continue; + } + + // + if (type == NULL || iPosition.type == type) + { + // + Add( + iPosition, + result); + } + } + + // + mResult = ArraySize(result); + + // + return mResult; + } + + // + // Extract Positions by it's Profits ... + void ExtractPositionsBasedOnProfits( + const XPosition &positions[], // Check as Data Source + XPosition &inDPositions[], // Hold In Drawdown Positions + XPosition &inPPositions[] // Hold In Profit Positions + ) + { + // + Clean(inDPositions); + Clean(inPPositions); + + // + int positionsCount = ArraySize(positions); + if (positionsCount <= 0) + { + return; + } + + // + for (int i = 0; i < positionsCount; i++) + { + // + XPosition iPosition = positions[i]; + + // + if (iPosition.profit > 0) + { + // + Add( + iPosition, + inPPositions); + } + else if (iPosition.profit < 0) + { + // + Add( + iPosition, + inDPositions); + } + } + } + + // + // Get All In Profit Trades ... + int GetInProfitPositions( + XPosition &result[], // Hold Result ... + string symbol = NULL, // Trading Symbol ... + ENUM_POSITION_TYPE type = NULL, // Trading Type ... + ENUM_TIMEFRAMES period = NULL, // Trading Period ... + string provider = NULL, // Signal Provider ... + ENUM_X_POSITION_SELECT_METHODS method = NULL // Select Method ... + ) + { + // + int mResult = 0; + + // + Clean(result); + + // + if (method == NULL) + { + method = X_POSITION_SELECT_ALL; + } + + // + // Prevent Going Forwars Since selection type is NONE ... + if (method == X_POSITION_SELECT_NONE) + { + return mResult; + } + + // + bool isMinSelectable = method == X_POSITION_SELECT_MIN; + bool isMaxSelectable = method == X_POSITION_SELECT_MAX; + + // + XPosition positions[]; + GetPositions( + positions, + symbol, + type, + period, + provider); + int positionsCount = ArraySize(positions); + if (positionsCount <= 0) + { + return mResult; + } + + // + // Define Temp Position for Selecting Max Position ... + XPosition maxPos; + maxPos.profit = INVALID_HANDLE; + + // + // Define Temp Position for Selecting Min Position ... + XPosition minPos; + minPos.profit = INVALID_HANDLE; + + // + // Loop through available Positions for Selecting Positions ... + for (int i = 0; i < positionsCount; i++) + { + // + XPosition iPosition = positions[i]; + + // + // Check Profit State ... + if (iPosition.profit <= 0) + { + continue; + } + + // + // Check Selection State ... + if (isMinSelectable) + { + // + if (minPos.profit == INVALID_HANDLE || + minPos.profit > iPosition.profit) + { + minPos = iPosition; + } + + // + continue; + } + else if (isMaxSelectable) + { + // + if (maxPos.profit == INVALID_HANDLE || + maxPos.profit < iPosition.profit) + { + maxPos = iPosition; + } + + // + continue; + } + else + { + // + Add( + iPosition, + result); + } + } + + // + // Add Selected Position if Provided to Results ... + if (isMinSelectable) + { + // + Add( + minPos, + result); + } + else if (isMaxSelectable) + { + // + Add( + maxPos, + result); + } + + // + mResult = ArraySize(result); + + // + return mResult; + } + + // + // Get All In Drawdown Trades ... + int GetInDrawdownPositions( + XPosition &result[], // Hold Result ... + string symbol = NULL, // Trading Symbol ... + ENUM_POSITION_TYPE type = NULL, // Trading Type ... + ENUM_TIMEFRAMES period = NULL, // Trading Period ... + string provider = NULL, // Signal Provider ... + ENUM_X_POSITION_SELECT_METHODS method = NULL // Select Method ... + ) + { + // + int mResult = 0; + + // + Clean(result); + + // + if (method == NULL) + { + method = X_POSITION_SELECT_ALL; + } + + // + // Prevent Going Forwars Since selection type is NONE ... + if (method == X_POSITION_SELECT_NONE) + { + return mResult; + } + + // + bool isMinSelectable = method == X_POSITION_SELECT_MIN; + bool isMaxSelectable = method == X_POSITION_SELECT_MAX; + + // + XPosition positions[]; + GetPositions( + positions, + symbol, + type, + period, + provider); + int positionsCount = ArraySize(positions); + if (positionsCount <= 0) + { + return mResult; + } + + // + // Define Temp Position for Selecting Max Position ... + XPosition maxPos; + maxPos.profit = INVALID_HANDLE; + + // + // Define Temp Position for Selecting Min Position ... + XPosition minPos; + minPos.profit = INVALID_HANDLE; + + // + // Loop through available Positions for Selecting Positions ... + for (int i = 0; i < positionsCount; i++) + { + // + XPosition iPosition = positions[i]; + + // + // Check Profit State ... + if (iPosition.profit >= 0) + { + continue; + } + + // + // Check Selection State ... + if (isMinSelectable) + { + // + if (minPos.profit == INVALID_HANDLE || + minPos.profit < iPosition.profit) + { + minPos = iPosition; + } + + // + continue; + } + else if (isMaxSelectable) + { + // + if (maxPos.profit == INVALID_HANDLE || + maxPos.profit > iPosition.profit) + { + maxPos = iPosition; + } + + // + continue; + } + else + { + // + Add( + iPosition, + result); + } + } + + // + // Add Selected Position if Provided to Results ... + if (isMinSelectable) + { + // + Add( + minPos, + result); + } + else if (isMaxSelectable) + { + // + Add( + maxPos, + result); + } + + // + mResult = ArraySize(result); + + // + return mResult; + } + + // + // Retrieve Orders ... + int GetOrders( + XOrder &result[], // Hold Result ... + string symbol = NULL, // Trading Symbol ... + ENUM_ORDER_TYPE type = NULL, // Trading Type ... + ENUM_ORDER_STATE state = NULL, // Trading State ... + ENUM_TIMEFRAMES period = NULL, // Trading Period ... + string provider = NULL // Signal Provider ... + ) + { + // + int mResult = 0; + + // + Clean(result); + + // + XOrder orders[]; + mTrader.GetOrders( + orders, + symbol, + period, + state); + int ordersCount = ArraySize(orders); + if (ordersCount <= 0) + { + return mResult; + } + + // + if (type == NULL && + (provider == NULL || + StringLen(provider) == 0)) + { + // + Copy( + orders, + result); + + // + mResult = ArraySize(result); + + // + return mResult; + } + + // + for (int i = 0; i < ordersCount; i++) + { + // + XOrder iOrder = orders[i]; + + // + if (type != NULL && iOrder.type != type) + { + continue; + } + + // + if (provider != NULL && + StringLen(provider) > 0) + { + // + // Generate Order Provider ... + string iProvider = ExtractProvider(iOrder.comment); + if (iProvider != provider) + { + continue; + } + } + + // + Add( + iOrder, + result); + } + + // + mResult = ArraySize(result); + + // + return mResult; + } + + // + int GetHistoryOrders( + XOrder &result[], // Hold Result ... + string symbol = NULL, // Trading Symbol ... + ENUM_ORDER_TYPE type = NULL, // Trading Type ... + ENUM_ORDER_STATE state = NULL, // Trading State ... + ENUM_TIMEFRAMES period = NULL, // Trading Period ... + string provider = NULL, // Signal Provider ... + datetime startDate = 0, // Start Date ... + datetime endDate = 0 // End Date ... + ) + { + // + int mResult = 0; + + // + Clean(result); + + // + XOrder history[]; + int historyCount = mTrader + .GetHistoryOrders( + history, + symbol, + period, + type, + state, + startDate, + endDate); + if (historyCount <= 0) + { + return mResult; + } + + // + if (StringLen(provider) == 0 || provider == NULL) + { + // + Copy( + history, + result); + + // + mResult = ArraySize(result); + + // + return mResult; + } + + // + for (int i = 0; i < historyCount; i++) + { + // + XOrder iHistory = history[i]; + + // + if (provider != NULL && + StringLen(provider) > 0) + { + // + // Generate Order Provider ... + string iProvider = ExtractProvider(iHistory.comment); + if (iProvider != provider) + { + continue; + } + } + + // + Add( + iHistory, + result); + } + + // + mResult = ArraySize(result); + + // + return mResult; + } + + // + int GetHistoryDeals( + XDeal &result[], // Hold Result ... + string symbol = NULL, // Trading Symbol ... + ENUM_DEAL_TYPE type = NULL, // Specify Deal Type ... + ENUM_DEAL_REASON reason = NULL, // Specify Deal Reason ... + ENUM_TIMEFRAMES period = NULL, // Trading Period ... + string provider = NULL, // Signal Provider ... + datetime startDate = 0, // Start Date ... + datetime endDate = 0 // End Date ... + ) + { + // + int mResult = 0; + + // + Clean(result); + + // + XDeal history[]; + int historyCount = mTrader + .GetHistoryDeals( + history, + symbol, + type, + reason, + startDate, + endDate); + if (historyCount <= 0) + { + return mResult; + } + + // + bool canCheckPeriod = period != NULL; + bool canCheckProvider = provider != NULL && + StringLen(provider) > 0; + + // + if (!canCheckPeriod && !canCheckProvider) + { + // + Copy( + history, + result); + + // + mResult = ArraySize(history); + + // + return mResult; + } + + // + for (int i = 0; i < historyCount; i++) + { + // + XDeal iDeal = history[i]; + + // + if (canCheckPeriod) + { + // + ENUM_TIMEFRAMES dealPeriod = mTrader.GetDealPeriod(iDeal); + if (dealPeriod != period) + { + continue; + } + } + + // + if (canCheckProvider) + { + // + string comment = mTrader.GetDealPositionComment(iDeal); + if (StringLen(comment) <= 0) + { + continue; + } + + // + string oProvider = ExtractPeriodString(comment); + if (oProvider != provider) + { + continue; + } + } + + // + Add( + iDeal, + result); + } + + // + mResult = ArraySize(result); + + // + return mResult; + } + + // + // GUARD Handlers ... + + // + // Parse Recievd Guards and Do them ... + void DoGuards(XGuard &guards[]) + { + // + int guardsCount = ArraySize(guards); + if (guardsCount <= 0) + { + return; + } + + // + for (int i = 0; i < guardsCount; i++) + { + // + XGuard iGuard = guards[i]; + + // + switch (iGuard.action) + { + // + // Hedge In Profit Specified Positions ... + case X_GUARD_ACTION_HEDGE: + HandleGuardHedgeAction( + iGuard.provider, + iGuard.symbol, + iGuard.type, + iGuard.period); + break; + + // + // Trail Stop Loss in Specified Positions ... + case X_GUARD_ACTION_TRAIL_STOP: + HandleGuardTrailingStopAction( + iGuard.provider, + iGuard.symbol, + iGuard.type, + iGuard.period, + iGuard.dblPayLoad); + break; + + // + // Force Close Specified Positions ... + case X_GUARD_ACTION_FORCE_CLOSE: + HandleGuardForceCloseAction( + iGuard.provider, + iGuard.symbol, + iGuard.type, + iGuard.period); + break; + + // + // Generate and Place Support Signals ... + case X_GUARD_ACTION_ADD_SUPPORT_SIGNAL: + HandleGuardAddSupportPositionAction( + iGuard.provider, + iGuard.symbol, + iGuard.type, + iGuard.period); + break; + + // + // Delete All Placed Pending Orders ... + case X_GUARD_ACTION_CANCEL_PENDING_ORDERS: + HandleGuardCancelPendingOrdersAction( + iGuard.provider, + iGuard.symbol, + iGuard.type, + iGuard.period); + break; + } + } + } + + // + // Close All Specified Provider's Positions in Profit Summary ... + void HandleGuardHedgeAction( + string provider, // Positions Provided by Specific Provider + string symbol, // Trading Symbol + ENUM_POSITION_TYPE type, // Trading Type + ENUM_TIMEFRAMES period, // Specified Time Frame + double minProfitForHedging = 1 // Specified Profit for Hedge + ) + { + // + XPosition positions[]; + int positionsCount = GetPositions( + positions, + symbol, + type, + period, + provider); + if (positionsCount <= 1) + { + return; + } + + // + double profit = CalculatePositionsProfit(positions); + double requiredProfit = CalculateRequiredProfitForHedge(positions); + + // + bool isReadyForHedge = profit >= requiredProfit; + if (!isReadyForHedge) + { + return; + } + + // + string comment = "Guard Hedge " + provider; + int closed = mTrader.ClosePositions( + positions, + comment); + if (closed > 0) + { + // + string message = "Guard Hedge " + provider + "'s Positions on Profit: " + ToString(profit); + + // + LogMessage(message); + } + } + + // + // Close Max In Profit Trade Guard Action ... + void HandleGuardCloseInProfitAction( + string provider, // Positions Provided by Specific Provider + string symbol, // Trading Symbol + ENUM_POSITION_TYPE type, // Trading Type + ENUM_TIMEFRAMES period, // Specified Time Frame + ENUM_X_POSITION_SELECT_METHODS method = NULL // Select Method + ) + { + // + XPosition positions[]; + GetInProfitPositions( + positions, + symbol, + type, + period, + provider, + method); + int positionsCount = ArraySize(positions); + if (positionsCount <= 0) + { + return; + } + + // + string comment = "Close InProfit ..."; + mTrader.ClosePositions( + positions, + comment); + + // + string message = "Guard Close (" + ToString(positionsCount) + ") Postion(s) In Profit ..."; + LogMessage(message); + } + + // + // Close Max In Drawdown Trade Guard Action ... + void HandleGuardCloseInDrawdownAction( + string provider, // Positions Provided by Specific Provider + string symbol, // Trading Symbol + ENUM_POSITION_TYPE type, // Trading Type + ENUM_TIMEFRAMES period, // Specified Time Frame + ENUM_X_POSITION_SELECT_METHODS method = NULL // Select Method + ) + { + // + XPosition positions[]; + GetInDrawdownPositions( + positions, + symbol, + type, + period, + provider, + method); + int positionsCount = ArraySize(positions); + if (positionsCount <= 0) + { + return; + } + + // + string comment = "Close InDrawdown ..."; + mTrader.ClosePositions( + positions, + comment); + + // + string message = "Guard Close (" + ToString(positionsCount) + ") Position(s) In Drawdown ..."; + LogMessage(message); + } + + // + // Force Close Specified Set Of Position ... + void HandleGuardForceCloseAction( + string provider, // Positions Provided by Specific Provider + string symbol, // Trading Symbol + ENUM_POSITION_TYPE type, // Trading Type + ENUM_TIMEFRAMES period, // Specified Time Frame + ulong ticket = 0 // Specific Ticket + ) + { + // + string comment = ""; + + // + // Close All Positions ... + if (ticket == 0) + { + // + XPosition positions[]; + GetPositions( + positions, + symbol, + type, + period, + provider); + if (ArraySize(positions) <= 0) + { + return; + } + + // + comment = provider + " Force Close Guard ..."; + + // + mTrader.ClosePositions( + positions, + comment); + } + // + // Close Specific Position ... + else + { + // + XPosition position; + bool hasPosition = mTrader.GetPosition( + position, + ticket); + + // + if (hasPosition) + { + // + comment = provider + "(" + ToString(ticket) + ")" + " Force Close Guard ..."; + + // + mTrader.Close( + ticket, + comment); + } + } + + // + if (StringLen(comment) > 0) + { + LogMessage(comment); + } + } + + // + // Trailing Specified Set Of Positions Stop Losses ... + void HandleGuardTrailingStopAction( + string provider, // Positions Provided by Specific Provider + string symbol, // Trading Symbol + ENUM_POSITION_TYPE type, // Trading Type + ENUM_TIMEFRAMES period, // Specified Time Frame + double sl // Desired SL Value ... + ) + { + // + if (sl <= 0) + { + return; + } + + // + NormalizePrice( + sl, + symbol); + + // + XPosition positions[]; + GetPositions( + positions, + symbol, + type, + period, + provider); + int positionsCount = ArraySize(positions); + if (positionsCount <= 0) + { + return; + } + + // + int modified = 0; + for (int i = 0; i < positionsCount; i++) + { + // + XPosition iPosition = positions[i]; + + // + string comment = PrepareSLTrailComment(iPosition.comment); + + // + if (iPosition.sl == sl) + { + continue; + } + + // + bool isModified = mTrader.Modify( + iPosition.ticket, + sl, + iPosition.tp, + comment); + if (isModified) + { + modified++; + } + } + + // + if (modified > 0) + { + // + string msg = "(" + ToString(modified) + ") Position's Stop Trailed Successfully ..."; + + // + LogMessage(msg); + } + } + + // + // Add Support Signal for Specified Positions ... + void HandleGuardAddSupportPositionAction( + string provider, // Positions Provided by Specific Provider + string symbol, // Trading Symbol + ENUM_POSITION_TYPE type, // Trading Type + ENUM_TIMEFRAMES period // Specified Time Frame + ) + { + // + // TODO: Implement this ... + } + + // + // Cancel all Placed Orders ... + void HandleGuardCancelPendingOrdersAction( + string provider, // Positions Provided by Specific Provider + string symbol, // Trading Symbol + ENUM_POSITION_TYPE type, // Trading Type + ENUM_TIMEFRAMES period // Specified Time Frame + ) + { + // + // TODO: Implement this ... + } + + // + // END Provided Functions ... + // + + // + // Protected ... +protected: + // + string GetTagPrefix() + { + // + string result = "(" + mSymbol + ")(" + ToString(mPeriod) + ")"; + + // + return result; + } + + // + // Symbol ... + string mSymbol; + + // + // Period ... + ENUM_TIMEFRAMES mPeriod; + + // + // ExpertAdviser MAgic Number ... + ulong mMagic; + + // + // Slipppage ... + int mSlippage; + + // + // Tag Identifier ... + string mTag; + + // + bool mEnableLongs; + bool mEnableShorts; + + // + double mMaxAllowedSpread; + + // + int mMaxAllowedPositions; + double mMaxAllowedDrawDownFactor; + + // + double mMinProfitPerTrade; + double mMinProfitPerVolumeFactor; + + // + // Prepare a Signal and Do Calculations ... + void PrepareSignal( + XSignal &signal // a Signal for Preparation ... + ) + { + // + // Normalize Signal ... + NormalizeSignal(signal); + } + + // + // Check Acocunt Balance is Allow new Trades or not ... + bool CheckEquityForTrade() + { + // + bool result = false; + + // + if (mMaxAllowedDrawDownFactor <= 0) + { + // + result = true; + return result; + } + + // + double equity = mAccount.GetEquity(); + double balance = mAccount.GetBalance(); + + // + double selectedBalance = MathMax(equity, balance) - MathMin(equity, balance); + + // + double balanceForFactor = MathAbs(equity - balance); + if (balanceForFactor <= 0) + { + balanceForFactor = balance; + } + else + { + balanceForFactor = equity; + } + + // + double maxAllowedBalanceDrawDown = balanceForFactor * mMaxAllowedDrawDownFactor; + + // + result = equity > balance || + (equity <= balance && + selectedBalance <= maxAllowedBalanceDrawDown); + + // + return result; + } + + // + // Check Max Allowed Positions Policy for Trade ... + bool ChecPositionsForTrade() + { + // + bool result = false; + + // + if (mMaxAllowedPositions <= 0) + { + // + result = true; + return result; + } + + // + int positionsCount = mTrader.CountPositions(); + if (positionsCount <= 0) + { + // + result = true; + return result; + } + + // + result = positionsCount <= mMaxAllowedPositions; + + // + return result; + } + + // + // Check Spread is Ok for Executing Specific Signal ... + bool IsSpreadOkForSignalExecution(const XSignal &signal) + { + // + bool result = false; + + // + bool isSpreadCheckEnable = mMaxAllowedSpread > 0; + if (!isSpreadCheckEnable) + { + result = true; + } + else + { + // + // Retrieve Signal Spread ... + double spread = PriceToPoint( + signal.symbol, + GetSpread(signal.symbol)); + result = spread <= mMaxAllowedSpread; + } + + // + return result; + } + + // + // Calculate Required Profit for Hedging ... + double CalculateRequiredProfitForHedge( + XPosition &positions[] // Source + ) + { + // + double result = 0; + + // + int positionsCount = ArraySize(positions); + if (positionsCount <= 0) + { + return result; + } + + // + bool isHedgingEnable = mMinProfitPerTrade > 0 && mMinProfitPerVolumeFactor > 0; + if (!isHedgingEnable) + { + return result; + } + + // + for (int i = 0; i < positionsCount; i++) + { + // + XPosition iPosition = positions[i]; + + // + if (mMinProfitPerTrade > 0 && mMinProfitPerVolumeFactor > 0) + { + // + result += + ((iPosition.volume / mMinProfitPerVolumeFactor) * + mMinProfitPerTrade) + + (-1 * iPosition.swap); + } + } + + // + return result; + } + + // + // Calculate Positions Profit Summary ... + double CalculatePositionsProfit( + XPosition &positions[] // Source + ) + { + // + double result = 0; + + // + int positionsCount = ArraySize(positions); + if (positionsCount <= 0) + { + return result; + } + + // + for (int i = 0; i < positionsCount; i++) + { + // + XPosition iPosition = positions[i]; + + // + result += iPosition.profit; + } + + // + return result; + } + + // + // Close a Position Pack and Cancel All of it's Supports ... + bool HandleClosePack(XPositionPack &pack) + { + // + bool result = false; + + // + if (pack.ticket <= 0) + { + return result; + } + + // + XOrder orders[]; + XPosition positions[]; + + // + bool hasPos = pack.position.ticket > 0; + if (hasPos) + { + Add( + pack.position, + positions); + } + + // + bool hasSupportPos = pack.supportPositionsCount > 0; + if (hasSupportPos) + { + // + Copy( + pack.supportPositions, + positions, + false); + } + + // + bool hasSupportOrd = pack.supportOrdersCount > 0; + if (hasSupportOrd) + { + // + Copy( + pack.supportOrders, + orders); + } + + // + string comment = "Close Pack"; + + // + int closed = mTrader.ClosePositions(positions, comment); + int canceled = mTrader.CancelOrders(orders); + + // + result = closed + canceled == ArraySize(orders) + ArraySize(positions); + if (result) + { + // + string message = "Close Position(" + ToString(pack.ticket) + ")'s Pack ..."; + + // + LogMessage(message); + } + + // + return result; + } + + // + // Private ... +private: + // + // Define Requirements ... + + // + // XSCTrade Event Handlers ... + TOnStopLoss mOnStopLossTriggered; + TOnTakeProfit mOnTakeProfitTriggered; + TOnDealsChanged mOnDealsChangedHandler; + TOnOrdersChanged mOnOrdersChangedHandler; + TOnPositionsChanged mOnPositionsChangedHandler; + TOnTradeStateChanged mOnTradeStateChangedHandler; + + // + // Initi Requirements ... + void InitRequirements() + { + // + // Account Manager ... + mAccount = new XSCAccount(); + + // + // Trader ... + mTrader = new XSCTrade( + mSlippage, + mMagic); + + // + // Attach Event Handlers ... + + // + if (mOnStopLossTriggered != NULL) + { + mTrader.AddOnStopLossEventHandler(mOnStopLossTriggered); + } + + // + if (mOnTakeProfitTriggered != NULL) + { + mTrader.AddOnTakeProfitEventHandler(mOnTakeProfitTriggered); + } + + // + if (mOnDealsChangedHandler != NULL) + { + mTrader.AddOnDealsChangedEventHandler(mOnDealsChangedHandler); + } + + // + if (mOnOrdersChangedHandler != NULL) + { + mTrader.AddOnOrdersChangedEventHandler(mOnOrdersChangedHandler); + } + + // + if (mOnPositionsChangedHandler != NULL) + { + mTrader.AddOnPositionsChangedEventHandler(mOnPositionsChangedHandler); + } + + // + if (mOnTradeStateChangedHandler != NULL) + { + mTrader.AddOnTradeStateChangedEventHandler(mOnTradeStateChangedHandler); + } + } +}; + +// +// START Usefull Functions ... +// + +// +// END Usefull Functions ... +// diff --git a/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xhelper.class.mq5 b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xhelper.class.mq5 new file mode 100644 index 0000000..ea582f5 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xhelper.class.mq5 @@ -0,0 +1,123 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Class Library +// ---------------------------------------------- +// Name: XSCBaseHelper +// Description: provides all Base Indicator +// Helper requirements ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Includes ... +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// Definitions ... + +// +// a Class for Handle base requirements ... +// for indicators ... +class XSCBaseHelper +{ + // + // Public ... +public: + // + // Constructor ... + void XSCBaseHelper( + string symbol, // Trading Symbol + ENUM_TIMEFRAMES period // Trading Time Frame + ) + { + // + mSymbol = symbol; + mPeriod = period; + } + + // + // Deconstructor ... + void ~XSCBaseHelper() + { + // + IndicatorRelease(mHandler); + } + + // + // Setter(s) / Getter(s) ... + + // + // Symbol ... + string GetSymbol() + { + return mSymbol; + } + + // + // Period ... + ENUM_TIMEFRAMES GetPeriod() + { + return mPeriod; + } + + // + // Retrieve Bars ... + int CountBars() + { + // + int result = + Bars( + mSymbol, + mPeriod); + + // + return result; + } + + // + int CountCalculatedBars() + { + return BarsCalculated(mHandler); + } + + // + // Functions ... + + // + // Protected ... +protected: + // + // Props ... + + // + // Symbol ... + string mSymbol; + + // + // Period ... + ENUM_TIMEFRAMES mPeriod; + + // + // Indicator Handler ... + int mHandler; + + // + // Private ... +private: + // +}; + +// +// Tools .... \ No newline at end of file diff --git a/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xmd5.class.ex5 b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xmd5.class.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..0c071fbc8410b8ae5ab7ec55dbb7174958f77574 GIT binary patch literal 5058 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 CCVP1R literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xmd5.class.mq5 b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xmd5.class.mq5 new file mode 100644 index 0000000..3311aa5 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xmd5.class.mq5 @@ -0,0 +1,441 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Class Library +// ---------------------------------------------- +// Name: XSCMD5 +// Description: Provides MD5 Hashing Requirements ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// START Definitions ... +// + +// +static uchar _md5_PADDING[64] = + { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +// +#define _md5_F(x, y, z) (((x) & (y)) | ((~x) & (z))) +#define _md5_G(x, y, z) (((x) & (z)) | ((y) & (~z))) +#define _md5_H(x, y, z) ((x) ^ (y) ^ (z)) +#define _md5_I(x, y, z) ((y) ^ ((x) | (~z))) +#define _md5_ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) + +// +#define _md5_FF(a, b, c, d, x, s, ac) \ + { \ + (a) += _md5_F((b), (c), (d)) + (x) + (uint)(ac); \ + (a) = _md5_ROTATE_LEFT((a), (s)); \ + (a) += (b); \ + } + +// +#define _md5_GG(a, b, c, d, x, s, ac) \ + { \ + (a) += _md5_G((b), (c), (d)) + (x) + (uint)(ac); \ + (a) = _md5_ROTATE_LEFT((a), (s)); \ + (a) += (b); \ + } + +// +#define _md5_HH(a, b, c, d, x, s, ac) \ + { \ + (a) += _md5_H((b), (c), (d)) + (x) + (uint)(ac); \ + (a) = _md5_ROTATE_LEFT((a), (s)); \ + (a) += (b); \ + } + +// +#define _md5_II(a, b, c, d, x, s, ac) \ + { \ + (a) += _md5_I((b), (c), (d)) + (x) + (uint)(ac); \ + (a) = _md5_ROTATE_LEFT((a), (s)); \ + (a) += (b); \ + } + +// +#define _md5_INIT_STATE_0 0x67452301 +#define _md5_INIT_STATE_1 0xefcdab89 +#define _md5_INIT_STATE_2 0x98badcfe +#define _md5_INIT_STATE_3 0x10325476 + +// +#define _md5_S11 7 +#define _md5_S12 12 +#define _md5_S13 17 +#define _md5_S14 22 + +// +#define _md5_S21 5 +#define _md5_S22 9 +#define _md5_S23 14 +#define _md5_S24 20 + +// +#define _md5_S31 4 +#define _md5_S32 11 +#define _md5_S33 16 +#define _md5_S34 23 + +// +#define _md5_S41 6 +#define _md5_S42 10 +#define _md5_S43 15 +#define _md5_S44 21 + +// +// END Definitions ... +// + +// +// XCMD5 a library for Hashing ... +class XSCMD5 +{ + // + // Public Provides ... +public: + // + // Protected Provides ... + + // + // Constructor ... + XSCMD5(void) {} + + // + // Deconstructor ... + ~XSCMD5(void) {} + + // + // Hash Specified Char Array ... + string Hash( + uchar &mSource[], // Specify Char Array to Hash + int mLength = 0 // Specify Length of Char Array which required to hash + ) + { + // + string result = ""; + + // + int sourceCount = ArraySize(mSource); + + // + // Validate Args ... + if ( + sourceCount <= 0 || + (sourceCount > 0 && mLength > sourceCount)) + { + return result; + } + + // + // Normalize Args ... + if (mLength == 0) + { + mLength = sourceCount; + } + + // + // Init MD5 ... + MD5Init(); + + // + // Update Buffer ... + MD5Update(mSource, mLength); + + // + // Calculate Result ... + result = MD5Final(); + + // + return result; + } + + // + // Hash Specified String ... + string Hash( + string mSource // Specified String + ) + { + // + string result = ""; + + // + // Converts String to Char Array ... + uchar bytes[]; + StringToCharArray( + mSource, + bytes, + 0, + StringLen(mSource)); + + // + result = Hash( + bytes, + ArraySize(bytes)); + + // + return result; + } + +protected: + // + // Private Provides ... +private: + // + uint m_lMD5[4]; + uint m_nCount[2]; + uchar m_lpszBuffer[64]; + + // + // Convert Byte to DWord ... + void ByteToDWord(int &out[], uint &in[], uint len) + { + // + uint i = 0; + uint j = 0; + + // + for (; j < len; i++, j += 4) + { + out[i] = (int)in[j] | (int)in[j + 1] << 8 | (int)in[j + 2] << 16 | (int)in[j + 3] << 24; + } + } + + // + // Convert DWord to Byte ... + void DWordToByte(uchar &out[], int &in[], uint len) + { + // + uint i = 0; + uint j = 0; + + // + for (; j < len; i++, j += 4) + { + // + out[j] = (uchar)(in[i] & 0xff); + out[j + 1] = (uchar)((in[i] >> 8) & 0xff); + out[j + 2] = (uchar)((in[i] >> 16) & 0xff); + out[j + 3] = (uchar)((in[i] >> 24) & 0xff); + } + } + + // + // Init MD5 Array ... + void MD5Init() + { + // + ArrayInitialize(m_lpszBuffer, 64); + + // + m_nCount[0] = m_nCount[1] = 0; + m_lMD5[0] = _md5_INIT_STATE_0; + m_lMD5[1] = _md5_INIT_STATE_1; + m_lMD5[2] = _md5_INIT_STATE_2; + m_lMD5[3] = _md5_INIT_STATE_3; + } + + // + // Update MD5 ... + void MD5Update(uchar &inBuf[], uint inLen) + { + // + int i, ii; + int mdi; + + // + uint in[16]; + int i0 = 0; + + // + mdi = (int)((m_nCount[0] >> 3) & 0x3F); + + // + if ((m_nCount[0] + ((uint)inLen << 3)) < m_nCount[0]) + { + m_nCount[1]++; + } + + // + m_nCount[0] += ((uint)inLen << 3); + m_nCount[1] += ((uint)inLen >> 29); + + // + while ((inLen--) > 0) + { + // + m_lpszBuffer[mdi++] = inBuf[i0++]; + if (mdi == 0x40) + { + // + for (i = 0, ii = 0; i < 16; i++, ii += 4) + { + in[i] = (((uint)m_lpszBuffer[ii + 3]) << 24) | (((uint)m_lpszBuffer[ii + 2]) << 16) | (((uint)m_lpszBuffer[ii + 1]) << 8) | ((uint)m_lpszBuffer[ii]); + } + + // + Transform(m_lMD5, in); + + // + mdi = 0; + } + } + } + + // + // Finalize an MD5 Expression ... + string MD5Final() + { + // + uchar bits[8]; + int nIndex; + uint nPadLen; + const int nMD5Size = 16; + uchar lpszMD5[16]; + string temp; + string out = ""; + int i; + + // + DWordToByte(bits, m_nCount, 8); + nIndex = (int)((m_nCount[0] >> 3) & 0x3f); + nPadLen = (nIndex < 56) ? (56 - nIndex) : (120 - nIndex); + MD5Update(_md5_PADDING, nPadLen); + MD5Update(bits, 8); + DWordToByte(lpszMD5, m_lMD5, nMD5Size); + + // + for (i = 0; i < nMD5Size; i++) + { + // + if (lpszMD5[i] == 0) + { + temp = "00"; + } + else if (lpszMD5[i] <= 15) + { + temp = StringFormat("0%x", lpszMD5[i]); + } + else + { + temp = StringFormat("%x", lpszMD5[i]); + } + + // + out += temp; + } + + // + lpszMD5[0] = '\0'; + + // + return (out); + } + + // + // Transform Buffers ... + void Transform(uint &buf[], uint &in[]) + { + // + uint a = buf[0], b = buf[1], c = buf[2], d = buf[3]; + + // + _md5_FF(a, b, c, d, in[0], _md5_S11, 0xD76AA478); + _md5_FF(d, a, b, c, in[1], _md5_S12, 0xE8C7B756); + _md5_FF(c, d, a, b, in[2], _md5_S13, 0x242070DB); + _md5_FF(b, c, d, a, in[3], _md5_S14, 0xC1BDCEEE); + _md5_FF(a, b, c, d, in[4], _md5_S11, 0xF57C0FAF); + _md5_FF(d, a, b, c, in[5], _md5_S12, 0x4787C62A); + _md5_FF(c, d, a, b, in[6], _md5_S13, 0xA8304613); + _md5_FF(b, c, d, a, in[7], _md5_S14, 0xFD469501); + _md5_FF(a, b, c, d, in[8], _md5_S11, 0x698098D8); + _md5_FF(d, a, b, c, in[9], _md5_S12, 0x8B44F7AF); + _md5_FF(c, d, a, b, in[10], _md5_S13, 0xFFFF5BB1); + _md5_FF(b, c, d, a, in[11], _md5_S14, 0x895CD7BE); + _md5_FF(a, b, c, d, in[12], _md5_S11, 0x6B901122); + _md5_FF(d, a, b, c, in[13], _md5_S12, 0xFD987193); + _md5_FF(c, d, a, b, in[14], _md5_S13, 0xA679438E); + _md5_FF(b, c, d, a, in[15], _md5_S14, 0x49B40821); + + // + _md5_GG(a, b, c, d, in[1], _md5_S21, 0xF61E2562); + _md5_GG(d, a, b, c, in[6], _md5_S22, 0xC040B340); + _md5_GG(c, d, a, b, in[11], _md5_S23, 0x265E5A51); + _md5_GG(b, c, d, a, in[0], _md5_S24, 0xE9B6C7AA); + _md5_GG(a, b, c, d, in[5], _md5_S21, 0xD62F105D); + _md5_GG(d, a, b, c, in[10], _md5_S22, 0x02441453); + _md5_GG(c, d, a, b, in[15], _md5_S23, 0xD8A1E681); + _md5_GG(b, c, d, a, in[4], _md5_S24, 0xE7D3FBC8); + _md5_GG(a, b, c, d, in[9], _md5_S21, 0x21E1CDE6); + _md5_GG(d, a, b, c, in[14], _md5_S22, 0xC33707D6); + _md5_GG(c, d, a, b, in[3], _md5_S23, 0xF4D50D87); + _md5_GG(b, c, d, a, in[8], _md5_S24, 0x455A14ED); + _md5_GG(a, b, c, d, in[13], _md5_S21, 0xA9E3E905); + _md5_GG(d, a, b, c, in[2], _md5_S22, 0xFCEFA3F8); + _md5_GG(c, d, a, b, in[7], _md5_S23, 0x676F02D9); + _md5_GG(b, c, d, a, in[12], _md5_S24, 0x8D2A4C8A); + + // + _md5_HH(a, b, c, d, in[5], _md5_S31, 0xFFFA3942); + _md5_HH(d, a, b, c, in[8], _md5_S32, 0x8771F681); + _md5_HH(c, d, a, b, in[11], _md5_S33, 0x6D9D6122); + _md5_HH(b, c, d, a, in[14], _md5_S34, 0xFDE5380C); + _md5_HH(a, b, c, d, in[1], _md5_S31, 0xA4BEEA44); + _md5_HH(d, a, b, c, in[4], _md5_S32, 0x4BDECFA9); + _md5_HH(c, d, a, b, in[7], _md5_S33, 0xF6BB4B60); + _md5_HH(b, c, d, a, in[10], _md5_S34, 0xBEBFBC70); + _md5_HH(a, b, c, d, in[13], _md5_S31, 0x289B7EC6); + _md5_HH(d, a, b, c, in[0], _md5_S32, 0xEAA127FA); + _md5_HH(c, d, a, b, in[3], _md5_S33, 0xD4EF3085); + _md5_HH(b, c, d, a, in[6], _md5_S34, 0x04881D05); + _md5_HH(a, b, c, d, in[9], _md5_S31, 0xD9D4D039); + _md5_HH(d, a, b, c, in[12], _md5_S32, 0xE6DB99E5); + _md5_HH(c, d, a, b, in[15], _md5_S33, 0x1FA27CF8); + _md5_HH(b, c, d, a, in[2], _md5_S34, 0xC4AC5665); + + // + _md5_II(a, b, c, d, in[0], _md5_S41, 0xF4292244); + _md5_II(d, a, b, c, in[7], _md5_S42, 0x432AFF97); + _md5_II(c, d, a, b, in[14], _md5_S43, 0xAB9423A7); + _md5_II(b, c, d, a, in[5], _md5_S44, 0xFC93A039); + _md5_II(a, b, c, d, in[12], _md5_S41, 0x655B59C3); + _md5_II(d, a, b, c, in[3], _md5_S42, 0x8F0CCC92); + _md5_II(c, d, a, b, in[10], _md5_S43, 0xFFEFF47D); + _md5_II(b, c, d, a, in[1], _md5_S44, 0x85845DD1); + _md5_II(a, b, c, d, in[8], _md5_S41, 0x6FA87E4F); + _md5_II(d, a, b, c, in[15], _md5_S42, 0xFE2CE6E0); + _md5_II(c, d, a, b, in[6], _md5_S43, 0xA3014314); + _md5_II(b, c, d, a, in[13], _md5_S44, 0x4E0811A1); + _md5_II(a, b, c, d, in[4], _md5_S41, 0xF7537E82); + _md5_II(d, a, b, c, in[11], _md5_S42, 0xBD3AF235); + _md5_II(c, d, a, b, in[2], _md5_S43, 0x2AD7D2BB); + _md5_II(b, c, d, a, in[9], _md5_S44, 0xEB86D391); + + // + buf[0] += a; + buf[1] += b; + buf[2] += c; + buf[3] += d; + } +}; diff --git a/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xprovider.class.mq5 b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xprovider.class.mq5 new file mode 100644 index 0000000..75c1a76 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xprovider.class.mq5 @@ -0,0 +1,319 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Class Library +// ---------------------------------------------- +// Name: XSCEABaseProvider +// Description: provides base requirements for +// Specific Sgnal Provider ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// START Import and Inclused requirements ... +// + +// +// Includes ... +#include "../Libraries/x-saherelm.log.lib.mq5" +#include "../Libraries/x-saherelm.draw.lib.mq5" +#include "../Libraries/x-saherelm.models.lib.mq5" +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// END Import and Inclused requirements ... +// + +// +// START Definitions ... +// + +// +// Notified a Signal was Appears ... +typedef void (*OnSignal)( + XSignal &signal); + +// +// Notified a Guard Appears ... +typedef void (*OnGuard)(XGuard &guard); + +// +// END Definitions ... +// + +// +// START Overrides ... +// + +// +// END Overrides ... +// + +// +// a Base Class for All of our EA's ... +class XSCEABaseProvider +{ + // + // Public ... +public: + // + // Constructor ... + void XSCEABaseProvider() + { + mSymbol = _Symbol; + mPeriod = _Period; + } + void XSCEABaseProvider( + string symbol, + ENUM_TIMEFRAMES period, + bool ignoreTicksAfterSignalTillNewCandle = true) + { + // + mSymbol = symbol; + mPeriod = period; + + // + mTag = mSymbol + "," + ToString(mPeriod); + + // + mIsInTestMode = IsRunningOnTestMode(); + + // + mIgnoreTicksAfterSignalTillNewCandle = ignoreTicksAfterSignalTillNewCandle; + } + + // + // Deconstructor ... + void ~XSCEABaseProvider() + { + } + + // + bool CanIgnoreTick() + { + // + mIsNewCandle = IsNewCandle( + mSymbol, + mPeriod); + bool result = mIsInTestMode + ? !mIsNewCandle + : !mIsNewCandle && mWaitUntilNewCandle; + + // + if (result) + { + // + result = mIgnoreTicksAfterSignalTillNewCandle; + } + + // + return result; + } + + // + // Prepare State ... + void OnTick() + { + // + mIsNewCandle = IsNewCandle( + mSymbol, + mPeriod); + mCanIgnoreTick = mIsInTestMode + ? !mIsNewCandle + : !mIsNewCandle && mWaitUntilNewCandle; + + // + ProcessBuffers(); + + // + if (mCanIgnoreTick) + { + return; + } + + // + mWaitUntilNewCandle = false; + + // + ProcessTick(); + } + + // + virtual void PrepareTag(); + + // + // Initialize Indicators and Requirements ... + virtual bool Init(); + + // + virtual int GetMaxLength(); + + // + virtual int GetCalculatedBars(); + + // + // Handle Update Buffers ... + virtual void ProcessBuffers() + { + return; + } + + // + // Handle On Tick Event ... + virtual void ProcessTick() + { + return; + } + + // + // Check for Guards ... + virtual bool GuardCheck(XGuard &guards[]); + + // + // Add Specific On Signal Event Handler ... + int AddOnSignalEventHandler(OnSignal handler) + { + // + ArrayResize( + mSignalEventHandlers, + ArraySize(mSignalEventHandlers) + 1); + + // + int result = ArraySize(mSignalEventHandlers) - 1; + mSignalEventHandlers[result] = handler; + + // + return result; + } + + // + // Remove All On Signal Event Handler ... + void ReoveOnSignalEventHandlers() + { + // + ArrayFree(mSignalEventHandlers); + } + + // + // Notify a Signal Found on all Event Listeners ... + void NotifyOnSignalEvent(XSignal &info) + { + // + int listenerCount = ArraySize(mSignalEventHandlers); + if (listenerCount <= 0) + { + return; + } + + // + // Loop Through Listeners ... + for (int i = 0; i < listenerCount; i++) + { + // + OnSignal listener = mSignalEventHandlers[i]; + + // + listener(info); + } + } + + // + // Protected ... +protected: + // + string mSymbol; + + // + ENUM_TIMEFRAMES mPeriod; + + // + string mTag; + + // + bool mIsNewCandle; + bool mIsInTestMode; + bool mCanIgnoreTick; + bool mWaitUntilNewCandle; + + // + // Private ... +private: + // + // Signal Event Handlers ... + OnSignal mSignalEventHandlers[]; + + // + bool mIgnoreTicksAfterSignalTillNewCandle; +}; + +// +// START Definitions ... +// + +// +// Model Signal Providers Definitions ... +struct XBaseSignalProvider +{ + // + // Provider use Which Symbol ... + string symbol; + + // + // Provider use Which Time Frame ... + ENUM_TIMEFRAMES period; + + // + // Risk Amount Per Trades Related to Time Frames ... + // Percent of Available Balance ... + double riskAmount; + + // + // Desired Magic Number ... + ulong magicNumber; +}; + +// +struct XLastSignal +{ + datetime at; + string provider; +}; + +// +// END Definitions ... +// + +// +// START Usefull Functions ... +// + +// +// Add Specific Provider to List ... +void Add( + XBaseSignalProvider &item, // item want to add + XBaseSignalProvider &buffer[] // Destination buffer +) +{ + // + ArrayResize( + buffer, + ArraySize(buffer) + 1); + + // + buffer[ArraySize(buffer) - 1] = item; +} + +// +// END Usefull Functions ... +// diff --git a/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xtrade.class.ex5 b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xtrade.class.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..48c85fd13d0d3e699de2686d7c77e167eea01342 GIT binary patch literal 8766 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 U+bE2|Cj^Xe^!g(mzfze00Z-hldH?_b literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xtrade.class.mq5 b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xtrade.class.mq5 new file mode 100644 index 0000000..d58b0fa --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Classes/x-saherelm.xtrade.class.mq5 @@ -0,0 +1,3499 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Class Library +// ---------------------------------------------- +// Name: XSCTrade +// Description: provides all Trade requirements ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Imports ... +#include "../Libraries/x-saherelm.xtrade.lib.mq5" +#include "../Classes/x-saherelm.xaccount.class.mq5" + +// +// Definitions ... + +// +// Overrides ... + +// +// XCTrade Base Class ... +class XSCTradeBase : public CTrade +{ +public: + // + // Modify Specific Position, by Specific Comment ... + bool PositionModify( + const string symbol, // Symbol + const double sl, // Stop Loss + const double tp, // Take Profit + const string comment = "" // Comment For Modify + ) + { + // + // check stopped + if (IsStopped(__FUNCTION__)) + { + return (false); + } + + // + // check position existence + if (!SelectPosition(symbol)) + { + return (false); + } + + // + // clean + ClearStructures(); + + // + // setting request + m_request.action = TRADE_ACTION_SLTP; + m_request.symbol = symbol; + m_request.magic = m_magic; + m_request.sl = sl; + m_request.tp = tp; + m_request.position = PositionGetInteger(POSITION_TICKET); + + // + // Specified Comment ... + if (StringLen(comment) > 0) + { + m_request.comment = comment; + } + + // + // action and return the result + return (OrderSend(m_request, m_result)); + } + bool PositionModify( + const ulong ticket, // Position Ticket + const double sl, // Stop Loss + const double tp, // Take Profit + const string comment = "" // Comment For Modify + ) + { + // + // check stopped + if (IsStopped(__FUNCTION__)) + { + return (false); + } + + // + // check position existence + if (!PositionSelectByTicket(ticket)) + { + return (false); + } + + // + // clean + ClearStructures(); + + // + // setting request + m_request.action = TRADE_ACTION_SLTP; + m_request.position = ticket; + m_request.symbol = PositionGetString(POSITION_SYMBOL); + m_request.magic = m_magic; + m_request.sl = sl; + m_request.tp = tp; + + // + // Specified Comment ... + if (StringLen(comment) > 0) + { + m_request.comment = comment; + } + + // + // action and return the result + return (OrderSend(m_request, m_result)); + } + + // + // Close Specific Position, by Specific Comment ... + bool PositionClose( + const string symbol, // Symbol + const ulong deviation, // Deviation + const string comment = "" // Comment For Close + ) + { + // + bool partial_close = false; + int retry_count = 10; + uint retcode = TRADE_RETCODE_REJECT; + + // + // check stopped + if (IsStopped(__FUNCTION__)) + { + return (false); + } + + // + // clean + ClearStructures(); + + // + // check filling + if (!FillingCheck(symbol)) + { + return (false); + } + + // + do + { + // + // check + if (SelectPosition(symbol)) + { + // + if ((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) + { + // + // prepare request for close BUY position + m_request.type = ORDER_TYPE_SELL; + m_request.price = SymbolInfoDouble(symbol, SYMBOL_BID); + } + else + { + // + // prepare request for close SELL position + m_request.type = ORDER_TYPE_BUY; + m_request.price = SymbolInfoDouble(symbol, SYMBOL_ASK); + } + } + else + { + // + // position not found + m_result.retcode = retcode; + return (false); + } + + // + // setting request + m_request.action = TRADE_ACTION_DEAL; + m_request.symbol = symbol; + m_request.volume = PositionGetDouble(POSITION_VOLUME); + m_request.magic = m_magic; + m_request.deviation = (deviation == ULONG_MAX) ? m_deviation : deviation; + m_request.position = PositionGetInteger(POSITION_TICKET); + + // + // Specify Comment ... + m_request.comment = comment; + + // + // check volume + double max_volume = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX); + if (m_request.volume > max_volume) + { + // + m_request.volume = max_volume; + partial_close = true; + } + else + { + partial_close = false; + } + + // + // hedging? just send order + if (IsHedging()) + { + return (OrderSend(m_request, m_result)); + } + + // + // order send + if (!OrderSend(m_request, m_result)) + { + // + if (--retry_count != 0) + { + continue; + } + + // + if (retcode == TRADE_RETCODE_DONE_PARTIAL) + { + m_result.retcode = retcode; + } + + // + return (false); + } + + // + //--- WARNING. If position volume exceeds the maximum volume allowed for deal, + //--- and when the asynchronous trade mode is on, for safety reasons, position is closed not completely, + //--- but partially. It is decreased by the maximum volume allowed for deal. + if (m_async_mode) + { + break; + } + + // + retcode = TRADE_RETCODE_DONE_PARTIAL; + if (partial_close) + { + Sleep(1000); + } + } while (partial_close); + + // + // succeed + return (true); + } + bool PositionClose( + const ulong ticket, // Position Ticket + const ulong deviation, // Deviation + const string comment = "" // Comment For Close + ) + { + // + // check stopped + if (IsStopped(__FUNCTION__)) + { + return (false); + } + + // + // check position existence + if (!PositionSelectByTicket(ticket)) + { + return (false); + } + + // + string symbol = PositionGetString(POSITION_SYMBOL); + + // + // clean + ClearStructures(); + + // + // check filling + if (!FillingCheck(symbol)) + { + return (false); + } + + // + // check + if ((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) + { + // + // prepare request for close BUY position + m_request.type = ORDER_TYPE_SELL; + m_request.price = SymbolInfoDouble(symbol, SYMBOL_BID); + } + else + { + // + // prepare request for close SELL position + m_request.type = ORDER_TYPE_BUY; + m_request.price = SymbolInfoDouble(symbol, SYMBOL_ASK); + } + + // + // setting request + m_request.action = TRADE_ACTION_DEAL; + m_request.position = ticket; + m_request.symbol = symbol; + m_request.volume = PositionGetDouble(POSITION_VOLUME); + m_request.magic = m_magic; + m_request.deviation = (deviation == ULONG_MAX) ? m_deviation : deviation; + + // + // Specify Comment ... + m_request.comment = comment; + + // + // close position + return (OrderSend(m_request, m_result)); + } + + // + // Partial Close Specific Position, by Specific Comment ... + bool PositionClosePartial( + const string symbol, // Symbol + const double volume, // Partial Closing Volume + const ulong deviation, // Deviation + const string comment = "" // Comment For Close + ) + { + // + uint retcode = TRADE_RETCODE_REJECT; + + // + // check stopped + if (IsStopped(__FUNCTION__)) + { + return (false); + } + + // + // for hedging mode only + if (!IsHedging()) + { + return (false); + } + + // + // clean + ClearStructures(); + + // + // check filling + if (!FillingCheck(symbol)) + { + return (false); + } + + // + // check + if (SelectPosition(symbol)) + { + // + if ((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) + { + // + // prepare request for close BUY position + m_request.type = ORDER_TYPE_SELL; + m_request.price = SymbolInfoDouble(symbol, SYMBOL_BID); + } + else + { + // + // prepare request for close SELL position + m_request.type = ORDER_TYPE_BUY; + m_request.price = SymbolInfoDouble(symbol, SYMBOL_ASK); + } + } + else + { + // + // position not found + m_result.retcode = retcode; + return (false); + } + + // + // check volume + double position_volume = PositionGetDouble(POSITION_VOLUME); + if (position_volume > volume) + { + position_volume = volume; + } + + // + // setting request + m_request.action = TRADE_ACTION_DEAL; + m_request.symbol = symbol; + m_request.volume = position_volume; + m_request.magic = m_magic; + m_request.deviation = (deviation == ULONG_MAX) ? m_deviation : deviation; + m_request.position = PositionGetInteger(POSITION_TICKET); + + // + // Specifieng Comment ... + m_request.comment = comment; + + // + // hedging? just send order + return (OrderSend(m_request, m_result)); + } + bool PositionClosePartial( + const ulong ticket, // Position Ticket + const double volume, // Partial Closing Volume + const ulong deviation, // Deviation + const string comment = "" // Comment For Close + ) + { + // + // check stopped + if (IsStopped(__FUNCTION__)) + { + return (false); + } + + // + // for hedging mode only + if (!IsHedging()) + { + return (false); + } + + // + // check position existence + if (!PositionSelectByTicket(ticket)) + { + return (false); + } + + // + string symbol = PositionGetString(POSITION_SYMBOL); + + // + // clean + ClearStructures(); + + // + // check filling + if (!FillingCheck(symbol)) + { + return (false); + } + + // + // check + if ((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) + { + // + // prepare request for close BUY position + m_request.type = ORDER_TYPE_SELL; + m_request.price = SymbolInfoDouble(symbol, SYMBOL_BID); + } + else + { + // + // prepare request for close SELL position + m_request.type = ORDER_TYPE_BUY; + m_request.price = SymbolInfoDouble(symbol, SYMBOL_ASK); + } + + // + // check volume + double position_volume = PositionGetDouble(POSITION_VOLUME); + if (position_volume > volume) + { + position_volume = volume; + } + + // + // setting request + m_request.action = TRADE_ACTION_DEAL; + m_request.position = ticket; + m_request.symbol = symbol; + m_request.volume = position_volume; + m_request.magic = m_magic; + m_request.deviation = (deviation == ULONG_MAX) ? m_deviation : deviation; + + // + // Specifieng Comment ... + m_request.comment = comment; + + // + // close position + return (OrderSend(m_request, m_result)); + } +}; + +// +// Implementation ... + +// a Class For Manage Trades and Handle Trading Actions ... +class XSCTrade +{ + // + // Public ... +public: + // + // Props ... + + // + // Constructors ... + void XSCTrade( + int slippage, // Specify Slippage + ulong magicNumber, // Specify Magic Number + int manageInterval, // Manager Check Intervals Seconds + double maxAllowedSpread, // Max Allowed Spred for Opening Trades + int maxAllowedPositions, // Max Allowed Positions + double maxAllowedDrawdownFactor // Max Allowed Drawdown Factor + ) + { + // + // Setting Props ... + mSlippage = slippage; + mMagicNumber = magicNumber; + + // + mManageInterval = manageInterval; + + // + mMaxAllowedSpread = maxAllowedSpread; + mMaxAllowedPositions = maxAllowedPositions; + mMaxAllowedDrawdownFactor = maxAllowedDrawdownFactor; + + // + mAccount = new XSCAccount(); + + // + // Instance Base Trader Class ... + mTrader = new XSCTradeBase(); + + // + // Configuring Base Trader Class ... + mTrader.SetAsyncMode(false); + mTrader.SetDeviationInPoints(mSlippage); + mTrader.SetExpertMagicNumber(mMagicNumber); + + // + // Setting Log Level ... + mTrader.LogLevel(LOG_LEVEL_ERRORS); + + // + // OnTrade Context ... + + // + mDaysForRead = 1; + mScanStarted = false; + + // + // Reset On Trade Counter ... + ResetOnTradeContext(); + + // + // Init On Trade Context ... + InitOnTradeContext(); + + // + // Sync Position Infos ... + SyncPositionInfos(); + } + + // + // Deconstructor ... + ~XSCTrade() + { + // + // Remove Pointer ... + delete mTrader; + delete mAccount; + } + + // + // Props ... + + // + // Retrieve Slippage ... + int GetSlippage() + { + return mSlippage; + } + + // + // Retrieve Magic Number ... + ulong GetMagicNumber() + { + return mMagicNumber; + } + + // + int GetManageInterval() + { + return mManageInterval; + } + + // + double GetMaxAllowedSpread() + { + return mMaxAllowedSpread; + } + + // + int GetMaxAllowedPositions() + { + return mMaxAllowedPositions; + } + + // + double GetMaxAllowedDrawdownFactor() + { + return mMaxAllowedDrawdownFactor; + } + + // + // Add Event Listeners ... + + // + // Add New Deals Changed Event Handler ... + void AddOnTradeStateChangedEventHandler(TOnTradeStateChanged handler) + { + // + Add( + handler, + mTradeStateChangedEventHandlers + // + ); + } + + // + // Add New Deals Changed Event Handler ... + void AddOnDealsChangedEventHandler(TOnDealsChanged handler) + { + // + Add( + handler, + mDealsChangedEventHandlers + // + ); + } + + // + // Add New Orders Changed Event Handler ... + void AddOnOrdersChangedEventHandler(TOnOrdersChanged handler) + { + // + Add( + handler, + mOrdersChangedEventHandlers + // + ); + } + + // + // Add New Positions Changed Event Handler ... + void AddOnPositionsChangedEventHandler(TOnPositionsChanged handler) + { + // + Add( + handler, + mPositionsChangedEventHandlers + // + ); + } + + // + // Add New Stop Loss Event Handler ... + void AddOnStopLossEventHandler(TOnStopLoss handler) + { + // + Add( + handler, + mStopLossEventHandlers + // + ); + } + + // + // Add New Stop Loss Event Handler ... + void AddOnTakeProfitEventHandler(TOnTakeProfit handler) + { + // + Add( + handler, + mTakeProfitEventHandlers + // + ); + } + + // + // Functions ... + + // + // Handlers ... + + // + // Process On Trade Requirement ... + // this Only Used when we Have to Proccess OnTrade Event in EA(s) ... + void HandleOnTradeEvent( + XOnTradeHandlerState &result // Hold's Result + ) + { + // + result.Clean(); + + // + if (mScanStarted) + { + // + ProcessOnTradeContext(result); + } + else + { + // + // Init Trade Context ... + InitOnTradeContext(); + + // + return; + } + + // + // Here we Can Check the Start ... + bool isValid = + // + result.IsValid() && + // + !result.hasNewDeal && + !result.hasNewOrder && + !result.hasNewPosition && + !result.hasNewHistoryOrder + // + ; + if (!isValid) + { + return; + } + + // + // State ... + + // + // Notfy Trade State Changed Event ... + NotifyTradeStateChangeEvent(result); + + // + // Deals ... + if (result.hasNewDeal) + { + // + // Notfy Deals Changed Event ... + NotifyDealsChangeEvent(result.newDeals); + + // + // Retrieve Last Deal ... + XDeal deals[]; + int dealsCount = GetDeals(deals); + if (dealsCount > 0) + { + // + XDeal lastDeal = deals[0]; + + // + if (lastDeal.reason == DEAL_REASON_TP) + { + NotifyTakeProfitEvent(lastDeal); + } + else if (lastDeal.reason == DEAL_REASON_SL) + { + NotifyStopLossEvent(lastDeal); + } + } + } + + // + // Orders ... + if (result.hasNewOrder || result.hasNewHistoryOrder) + { + // + // Notfy Orders Changed Event ... + NotifyOrdersChangeEvent(result.newOrders + result.newHistoryOrders); + } + + // + // Positions ... + if (result.hasNewPosition) + { + // + // Notfy Positions Changed Event ... + NotifyPositionsChangeEvent(result.newPositions); + } + } + + // + // This Must be Called Every time OnTrade Event Happening ... + // this Used for Implementing Custom Senarios ... + XOnTradeHandlerState HandleOnTrade() + { + // + // Handle OnTrade Event ... + XOnTradeHandlerState state; + HandleOnTradeEvent(state); + if ( + !state.hasNewDeal && + !state.hasNewOrder && + !state.hasNewPosition && + !state.hasNewHistoryOrder) + { + return state; + } + + // + // State ... + + // + // Notfy Trade State Changed Event ... + NotifyTradeStateChangeEvent(state); + + // + // DEALS ... + if (state.hasNewDeal) + { + // + // Notfy Deals Changed Event ... + NotifyDealsChangeEvent(state.newDeals); + + // + // Retrieve Last Deal ... + XDeal deals[]; + GetDeals(deals); + int dealsCount = ArraySize(deals); + if (dealsCount > 0) + { + // + XDeal lastDeal = deals[0]; + + // + if (lastDeal.reason == DEAL_REASON_TP) + { + NotifyTakeProfitEvent(lastDeal); + } + else if (lastDeal.reason == DEAL_REASON_SL) + { + NotifyStopLossEvent(lastDeal); + } + } + } + + // + // ORDERS ... + if (state.hasNewOrder || state.hasNewHistoryOrder) + { + // + // Notfy Orders Changed Event ... + NotifyOrdersChangeEvent(state.newOrders + state.newHistoryOrders); + } + + // + // POSITIONS ... + if (state.hasNewPosition) + { + // + // Notfy Positions Changed Event ... + NotifyPositionsChangeEvent(state.newPositions); + } + + // + return state; + } + + // + // Trade Actions ... + + // + // Main ... + + // + // Policies ... + + // + // Check Acocunt Balance is Allow new Trades or not ... + bool CheckEquityForTrade() + { + // + bool result = false; + + // + if (mMaxAllowedDrawdownFactor <= 0) + { + // + result = true; + return result; + } + + // + double equity = mAccount.GetEquity(); + double balance = mAccount.GetBalance(); + + // + double selectedBalance = MathMax(equity, balance) - MathMin(equity, balance); + + // + double maxAllowedBalanceDrawDown = GetMaxAllowedEquity(); + + // + result = equity > balance || + (equity <= balance && + selectedBalance <= maxAllowedBalanceDrawDown); + + // + return result; + } + + // + // Check Max Allowed Positions Policy for Trade ... + bool CheckPositionsForTrade() + { + // + bool result = false; + + // + if (mMaxAllowedPositions <= 0) + { + // + result = true; + return result; + } + + // + XPosition positions[]; + int positionsCount = GetPositions(positions); + if (positionsCount <= 0) + { + // + result = true; + return result; + } + + // + result = positionsCount < mMaxAllowedPositions; + + // + return result; + } + + // + // Check Spread is Ok for Executing Specific Signal ... + bool CheckSpreadForSignalExecution(XSignal &signal) + { + // + bool result = false; + + // + bool isSpreadCheckEnable = mMaxAllowedSpread > 0; + if (!isSpreadCheckEnable) + { + result = true; + } + else + { + // + // Retrieve Signal Spread ... + double spread = signal.GetSpread(); + result = spread <= mMaxAllowedSpread; + } + + // + return result; + } + + // + // Check Account Policy ... + bool CheckAccountPolicy( + XSignal &signal, // For Executing Signal + ENUM_X_SIGNAL_EXECUTION_RESULT &state // State Holder + ) + { + // + bool result = false; + + // + // Check Positions For Trade ... + result = CheckPositionsForTrade(); + if (!result) + { + // + state = X_SIGNAL_EXECUTION_FAILED_MAX_REACHED; + return result; + } + + // + // Check Equity For Trade ... + result = CheckEquityForTrade(); + if (!result) + { + // + state = X_SIGNAL_EXECUTION_FAILED_NO_EQUITY; + return result; + } + + // + // Check Spread for Trade ... + result = CheckSpreadForSignalExecution(signal); + if (!result) + { + // + state = X_SIGNAL_EXECUTION_FAILED_SPREAD; + return result; + } + + // + return result; + } + + // + // Manage ... + // this must be Call on OnTick for Manage + // Positions ... + // NOTE: Call this Before Checking IsNewBar ... + void Manage() + { + // + // All required Position Managements Actions implemented here ... + datetime tmc = TimeCurrent(); + bool canManage = !IsValid(mLastManageOn) + ? true + : mLastManageOn + mManageInterval >= tmc; + if (!canManage) { + return; + } + + // + mLastManageOn = tmc; + + // + // - [] Partial Close; + // - [] Risk Free; + // - [] Trail Stop; + // - [] SLS; + // - [] TPS; + + // + // - [] Data Collector; + // - [] Profit Management; + + // + // TODO: Implement them ... + + // + // Implement Signal Collector Inside this Class + // and Manipulate Signals when SL/TP/Partial Close/Trail Stop/Profit/Close/ Modify and etc Happens ... + } + + // + // Execute a Signal ... + bool ExecuteSignal( + XSignal &signal, // Signal + ENUM_X_SIGNAL_EXECUTION_RESULT &state, // Result + ENUM_ORDER_TYPE_TIME lifetime = ORDER_TIME_GTC, // Order LifeTime + datetime expiration = NULL, // order expiration time + bool checkPolicies = true // Check Account Policies + ) + { + // + bool result = false; + state = X_SIGNAL_EXECUTION_UNKNOWN; + + // + double currentEntry = GetEntry( + signal.symbol, + signal.type + // + ); + bool isLong = IsLong(signal.type); + + // + // Select SL and TP ... + + // + double selectedSL = 0; + signal.RegularSL(selectedSL); + + // + double selectedTP = 0; + signal.RegularTP(selectedTP); + + // + if (!signal.IsValid()) + { + // + state = X_SIGNAL_EXECUTION_FAILED_INVALID_PARAMS; + return result; + } + + // + // Handle Market Execution ... + if (signal.mode == X_ORDER_MODE_MARKET) + { + // + // Do Apply Policies here ... + bool hasPolicy = !checkPolicies + ? true + : CheckAccountPolicy(signal, state); + if (!hasPolicy) + { + result = false; + } + else + { + // + if (isLong) + { + // + result = Buy( + signal.symbol, + signal.period, + signal.volume, + signal.entry, + selectedSL, + selectedTP, + signal.comment + // + ); + } + else + { + // + result = Sell( + signal.symbol, + signal.period, + signal.volume, + signal.entry, + selectedSL, + selectedTP, + signal.comment + // + ); + } + } + } + // + // Handle Stop Execution ... + else if (signal.mode == X_ORDER_MODE_STOP) + { + + // + // Check Conditions ... + + // + // Check Price ... + result = isLong + ? signal.entry > currentEntry + : signal.entry < currentEntry; + if (!result) + { + // + state = X_SIGNAL_EXECUTION_FAILED_PRICE_ERROR; + return result; + } + + // + // Execute Order ... + if (isLong) + { + // + result = BuyStop( + signal.symbol, + signal.period, + signal.volume, + signal.entry, + selectedSL, + selectedTP, + lifetime, + expiration, + signal.comment + // + ); + } + else + { + // + result = SellStop( + signal.symbol, + signal.period, + signal.volume, + signal.entry, + selectedSL, + selectedTP, + lifetime, + expiration, + signal.comment + // + ); + } + } + // + // Handle Limit Execution ... + else if (signal.mode == X_ORDER_MODE_LIMIT) + { + // + // Check Conditions ... + + // + // Check Price ... + result = isLong + ? signal.entry < currentEntry + : signal.entry > currentEntry; + if (!result) + { + // + state = X_SIGNAL_EXECUTION_FAILED_PRICE_ERROR; + return result; + } + + // + // Execute Order ... + if (isLong) + { + // + result = BuyLimit( + signal.symbol, + signal.period, + signal.volume, + signal.entry, + selectedSL, + selectedTP, + lifetime, + expiration, + signal.comment + // + ); + } + else + { + // + result = SellLimit( + signal.symbol, + signal.period, + signal.volume, + signal.entry, + selectedSL, + selectedTP, + lifetime, + expiration, + signal.comment + // + ); + } + } + + // + // Handle Ticket ... + if (result) + { + // + state = X_SIGNAL_EXECUTION_SUCCEED; + + // + ulong ticket; + if (signal.mode == X_ORDER_MODE_MARKET) + { + ticket = GetLastOpenPositionTicket(); + } + else + { + ticket = GetLastPlacedOrderTicket(); + } + + // + signal.positionId = ticket; + + // + // Handle Store XPositionInfo ... + if (signal.mode == X_ORDER_MODE_MARKET) + { + // + // TODO: Implement this ... + } + + // + // Handle Executing Support Signals ... + int supportsCount = ArraySize(signal.supports); + if (supportsCount > 0) + { + // + int executed = 0; + for (int i = 0; i < supportsCount; i++) + { + // + XSignal iSupport = signal.supports[i]; + + // + int supIndex = i + 1; + string iComment = GenerateSupportTag(ticket); + + // + bool isExecuted = ExecuteSignal( + iSupport, + state, + lifetime, + expiration + // + ); + if (isExecuted) + { + executed++; + } + } + + // + result = executed == supportsCount; + } + } + + // + return result; + } + + // + // Execute a Collection Of Signals ... + int ExecuteSignals( + XSignal &signals[], // Collection of Signal for Execution + ENUM_X_SIGNAL_EXECUTION_RESULT &states[], // Signal Execution Result + ENUM_ORDER_TYPE_TIME lifetime = ORDER_TIME_GTC, // Order LifeTime + datetime expiration = NULL, // order expiration time + bool checkPolicies = true // Check Account Policies + ) + { + // + int result = 0; + + // + Clean(states); + + // + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return result; + } + + // + ArrayResize(states, signalsCount); + ArrayInitialize(states, X_SIGNAL_EXECUTION_UNKNOWN); + for (int i = 0; i < signalsCount; i++) + { + // + bool isExecuted = ExecuteSignal( + signals[i], + states[i], + lifetime, + expiration + // + ); + + // + if (isExecuted) + { + result++; + } + } + + // + return result; + } + + // + // Regular Trade Actions ... + + // + // Buy ... + + // + // Force Open a Buy/Long Position ... + bool Buy( + string symbol, // Specified Symbol + ENUM_TIMEFRAMES period, // Specified Trade's Period + double volume, // position volume + double price, // execution price + double sl = 0, // stop loss price + double tp = 0, // take profit price + string comment = NULL // comment + ) + { + // + bool result = false; + + // + ENUM_TIMEFRAMES mPeriod = ExtractPeriod(comment); + if (!IsValid(comment) || + !IsValid(mPeriod)) + { + // + string mPeriodStr = GeneratePeriodTag(period); + + // + comment += mPeriodStr; + } + + // + result = mTrader.Buy( + volume, + symbol, + price, + sl, + tp, + comment + // + ); + + // + return result; + } + + // + // Send BUY LIMIT order ... + bool BuyLimit( + string symbol, // Specified Symbol + ENUM_TIMEFRAMES period, // Specified Trade's Period + double volume, // order volume + double price, // order price + double sl = 0.0, // stop loss price + double tp = 0.0, // take profit price + ENUM_ORDER_TYPE_TIME typeTime = ORDER_TIME_GTC, // order lifetime + datetime expiration = 0, // order expiration time + string comment = NULL // comment + ) + { + // + bool result = false; + + // + ENUM_TIMEFRAMES mPeriod = ExtractPeriod(comment); + if (!IsValid(comment) || + !IsValid(mPeriod)) + { + // + string mPeriodStr = GeneratePeriodTag(period); + + // + comment += mPeriodStr; + } + + // + result = mTrader.BuyLimit( + volume, + price, + symbol, + sl, + tp, + typeTime, + expiration, + comment + // + ); + + // + return result; + } + + // + // Send BUY STOP order ... + bool BuyStop( + string symbol, // Specified Symbol + ENUM_TIMEFRAMES period, // Specified Trade's Period + double volume, // order volume + double price, // order price + double sl = 0.0, // stop loss price + double tp = 0.0, // take profit price + ENUM_ORDER_TYPE_TIME typeTime = ORDER_TIME_GTC, // order lifetime + datetime expiration = 0, // order expiration time + string comment = NULL // comment + ) + { + // + bool result = false; + + // + ENUM_TIMEFRAMES mPeriod = ExtractPeriod(comment); + if (!IsValid(comment) || + !IsValid(mPeriod)) + { + // + string mPeriodStr = GeneratePeriodTag(period); + + // + comment += mPeriodStr; + } + + // + result = mTrader.BuyStop( + volume, + price, + symbol, + sl, + tp, + typeTime, + expiration, + comment + // + ); + + // + return result; + } + + // + // Sell ... + + // + // Force Open a Sell/Short Position ... + bool Sell( + string symbol, // Specified Symbol + ENUM_TIMEFRAMES period, // Specified Trade's Period + double volume, // position volume + double price, // execution price + double sl = 0, // stop loss price + double tp = 0, // take profit price + string comment = NULL // comment + ) + { + // + bool result = false; + + // + ENUM_TIMEFRAMES mPeriod = ExtractPeriod(comment); + if (!IsValid(comment) || + !IsValid(mPeriod)) + { + // + string mPeriodStr = GeneratePeriodTag(period); + + // + comment += mPeriodStr; + } + + // + result = mTrader.Sell( + volume, + symbol, + price, + sl, + tp, + comment + // + ); + + // + return result; + } + + // + // Send SELL LIMIT order ... + bool SellLimit( + string symbol, // Specified Symbol + ENUM_TIMEFRAMES period, // Specified Trade's Period + double volume, // order volume + double price, // order price + double sl = 0.0, // stop loss price + double tp = 0.0, // take profit price + ENUM_ORDER_TYPE_TIME typeTime = ORDER_TIME_GTC, // order lifetime + datetime expiration = 0, // order expiration time + string comment = NULL // comment + ) + { + // + bool result = false; + + // + ENUM_TIMEFRAMES mPeriod = ExtractPeriod(comment); + if (!IsValid(comment) || + !IsValid(mPeriod)) + { + // + string mPeriodStr = GeneratePeriodTag(period); + + // + comment += mPeriodStr; + } + + // + result = mTrader.SellLimit( + volume, + price, + symbol, + sl, + tp, + typeTime, + expiration, + comment + // + ); + + // + return result; + } + + // + // Send SELL STOP order ... + bool SellStop( + string symbol, // Specified Symbol + ENUM_TIMEFRAMES period, // Specified Trade's Period + double volume, // order volume + double price, // order price + double sl = 0.0, // stop loss price + double tp = 0.0, // take profit price + ENUM_ORDER_TYPE_TIME typeTime = ORDER_TIME_GTC, // order lifetime + datetime expiration = 0, // order expiration time + string comment = NULL // comment + ) + { + // + bool result = false; + + // + ENUM_TIMEFRAMES mPeriod = ExtractPeriod(comment); + if (!IsValid(comment) || + !IsValid(mPeriod)) + { + // + string mPeriodStr = GeneratePeriodTag(period); + + // + comment += mPeriodStr; + } + + // + result = mTrader.SellStop( + volume, + price, + symbol, + sl, + tp, + typeTime, + expiration, + comment + // + ); + + // + return result; + } + + // + // Check a Position is Exists Open or not ... + bool IsOpen( + ulong ticket // Specified Position Ticket + ) + { + // + bool result = false; + + // + result = mPositionInfo + .SelectByTicket(ticket); + + // + return result; + } + + // + // Modify Position ... + bool Modify( + const ulong ticket, // position ticket + double sl = 0, // stop loss price + double tp = 0, // take profit + string comment = NULL // comment + ) + { + // + bool result = false; + + // + // Validate Args ... + result = + IsOpen(ticket) && + (tp >= 0 || sl >= 0); + if (!result) + { + return result; + } + + // + // Use Position Comment when there isn't new One ... + if (!IsValid(comment) == 0) + { + // + // if there isn't provided Comment + // Use Position Comment for default ... + comment = "Modify " + GetPositionComment(ticket); + } + + // + result = mTrader.PositionModify( + ticket, + sl, + tp, + comment + // + ); + + // + return result; + } + + // + // Close Position By Ticket ... + bool Close( + ulong ticket, // Position Ticket + string comment = NULL // Close Position By Specific Comment + ) + { + // + bool result = false; + + // + // Check Position Open ... + result = !IsOpen(ticket); + if (!result) + { + return result; + } + + // + // Use Default Position Comment if it's Not Provided ... + if (!IsValid(comment)) + { + comment = "Close " + GetPositionComment(ticket); + } + + // + // Close Position By Specific Comment ... + result = mTrader.PositionClose( + ticket, + mSlippage, + comment + // + ); + + // + return result; + } + + // + // Close Specified Positions ... + int Close( + string comment = NULL, // Close Position By Specific Comment + string symbol = NULL, // Trading Symbol + string provider = NULL, // Signal Provider + ENUM_TIMEFRAMES period = NULL, // Trading Period + ENUM_POSITION_TYPE type = NULL, // Long (Buy) or Short (Sell) + bool filterByMagic = true // Get Only Self Open Positions + ) + { + // + int result = 0; + + // + XPosition positions[]; + int positionsCount = GetPositions( + positions, + symbol, + provider, + period, + type, + filterByMagic); + if (positionsCount <= 0) + { + return result; + } + + // + for (int i = 0; i < positionsCount; i++) + { + // + XPosition iPosition = positions[i]; + + // + bool isClosed = Close( + iPosition.ticket, + comment + // + ); + if (isClosed) + { + result++; + } + } + + // + return result; + } + + // + // Close a Collection of Positions ... + int Close( + XPosition &positions[], // Collection of Positions + string comment // Close Comment + ) + { + // + int result = 0; + + // + int positionsCount = ArraySize(positions); + if (positionsCount <= 0) + { + return result; + } + + // + for (int i = 0; i < positionsCount; i++) + { + // + XPosition iPosition = positions[i]; + + // + bool isClosed = Close( + iPosition.ticket, + comment + // + ); + if (isClosed) + { + result++; + } + } + + // + return result; + } + + // + // Close Partial By Ticket ... + bool ClosePartial( + ulong ticket, // Position Ticket + double volume, // Volume Size for Partial Closing + string comment = NULL // Close Position By Specific Comment + ) + { + // + bool result = false; + + // + result = IsOpen(ticket); + if (!result) + { + return result; + } + + // + // Use Default Partial Close Comment ... + if (!IsValid(comment)) + { + // + comment += "PClose " + GetPositionComment(ticket); + } + + // + result = mTrader.PositionClosePartial( + ticket, + volume, + mSlippage, + comment + // + ); + + // + return result; + } + + // + // Cancel Specific Order ... + bool CancelOrder(ulong ticket) + { + return mTrader + .OrderDelete(ticket); + } + + // + // Cancel Specific Orders ... + int CancelOrders( + XOrder &orders[] // Specified Orders ... + ) + { + // + int result = 0; + + // + int ordersCount = ArraySize(orders); + if (ordersCount <= 0) + { + return result; + } + + // + for (int i = 0; i < ordersCount; i++) + { + // + XOrder iOrder = orders[i]; + + // + bool isDeleted = mTrader + .OrderDelete(iOrder.ticket); + if (isDeleted && !result) + { + result++; + } + } + + // + return result; + } + + // + // Extractors ... + + // + // Positions ... + + // + // Calculate Positions Profit ... + double Profit( + string symbol = NULL, // Trading Symbol + string provider = NULL, // Signal Provider + ENUM_TIMEFRAMES period = NULL, // Trading Period + ENUM_POSITION_TYPE type = NULL, // Long (Buy) or Short (Sell) + bool filterByMagic = true // Get Only Self Open Positions + ) + { + // + double result = 0; + + // + // Retrieve Positions ... + XPosition positions[]; + int positionsCount = GetPositions( + positions, + symbol, + provider, + period, + type, + filterByMagic + // + ); + if (positionsCount <= 0) + { + return result; + } + + // + for (int i = 0; i < positionsCount; i++) + { + result += positions[i].profit; + } + + // + return result; + } + + // + // Retrieve Specific Position by Index ... + bool GetPosition( + int index, // Specified Index + XPosition &result // Hold's Result + ) + { + // + return result + .ByIndex(index); + } + + // + // Retrieve Specific Position by Ticket ... + bool GetPosition( + ulong ticket, // Specified Ticket + XPosition &result // Hold's Result + ) + { + // + return result + .ByTicket(ticket); + } + + // + // Retrieve Positions ... + int GetPositions( + XPosition &result[], // Hold's Result + string symbol = NULL, // Trading Symbol + string provider = NULL, // Signal Provider + ENUM_TIMEFRAMES period = NULL, // Trading Period + ENUM_POSITION_TYPE type = NULL, // Long (Buy) or Short (Sell) + bool filterByMagic = true, // Get Only Self Open Positions + bool forceClean = true // Clean Result Array + ) + { + // + int mResult = 0; + + // + int before = ArraySize(result); + + // + if (forceClean) + { + Clean(result); + } + + // + // Count Positions ... + int itemsCount = PositionsTotal(); + if (itemsCount <= 0) + { + return mResult; + } + + // + // Loop Through all Positions ... + for (int i = itemsCount - 1; i >= 0; i--) + { + // + XPosition iItem; + bool isLoaded = iItem.ByIndex(i); + if (!isLoaded) + { + continue; + } + + // + // Now we have to Check Given Filters ... + bool isFiltersPassed = + iItem.IsFiltersPassed( + symbol, + provider, + period, + type, + mMagicNumber, + filterByMagic + // + ); + if (!isFiltersPassed) + { + continue; + } + + // + // Add Filtered Item into Result ... + AddRef( + iItem, + result + // + ); + } + + // + int after = ArraySize(result); + + // + mResult = after - before; + + // + return mResult; + } + + // + // Select In Profit Positions ... + int GetInProfitPositions( + XPosition &result[], // Hold's Result + string symbol = NULL, // Trading Symbol + string provider = NULL, // Signal Provider + ENUM_TIMEFRAMES period = NULL, // Trading Period + ENUM_POSITION_TYPE type = NULL, // Long (Buy) or Short (Sell) + ENUM_X_POSITION_SELECT_METHODS method = NULL, // Selection Method + bool filterByMagic = true, // Get Only Self Open Positions + bool forceClean = true // Clean Result Array + ) + { + // + int mResult = 0; + + // + int before = ArraySize(result); + + // + if (forceClean) + { + Clean(result); + } + + // + XPosition positions[]; + int positionsCount = GetPositions( + positions, + symbol, + provider, + period, + type, + filterByMagic, + forceClean); + if (positionsCount <= 0) + { + return mResult; + } + + // + XPosition min; + XPosition max; + + // + for (int i = 0; i < positionsCount; i++) + { + // + XPosition iPosition = positions[i]; + + // + if (iPosition.profit <= 0) + { + continue; + } + + // + // Calculate Min and Max ... + + // + // Min ... + if (!min.IsValid() || min.profit <= 0 || min.profit > iPosition.profit) + { + min = iPosition; + } + + // + // Max ... + if (!max.IsValid() || max.profit <= 0 || max.profit < iPosition.profit) + { + max = iPosition; + } + + // + bool isSelectionMethodFilterPassed = + // + (method == NULL || + method == X_POSITION_SELECT_ALL || + method == X_POSITION_SELECT_ALL) + ? true + : false; + // + ; + if (!isSelectionMethodFilterPassed) + { + continue; + } + + // + AddRef( + iPosition, + result + // + ); + } + + // + if (min.IsValid() && + (method == X_POSITION_SELECT_MIN || + method == X_POSITION_SELECT_BOTH)) + { + // + AddRef( + min, + result + // + ); + } + + // + if (max.IsValid() && + (method == X_POSITION_SELECT_MAX || + method == X_POSITION_SELECT_BOTH)) + { + // + AddRef( + max, + result + // + ); + } + + // + int after = ArraySize(result); + + // + mResult = after - before; + + // + return mResult; + } + + // + // Select In Drawdown Positions ... + int GetInDrawdownPositions( + XPosition &result[], // Hold's Result + string symbol = NULL, // Trading Symbol + string provider = NULL, // Signal Provider + ENUM_TIMEFRAMES period = NULL, // Trading Period + ENUM_POSITION_TYPE type = NULL, // Long (Buy) or Short (Sell) + ENUM_X_POSITION_SELECT_METHODS method = NULL, // Selection Method + bool filterByMagic = true, // Get Only Self Open Positions + bool forceClean = true // Clean Result Array + ) + { + // + int mResult = 0; + + // + int before = ArraySize(result); + + // + if (forceClean) + { + Clean(result); + } + + // + XPosition positions[]; + int positionsCount = GetPositions( + positions, + symbol, + provider, + period, + type, + filterByMagic, + forceClean); + if (positionsCount <= 0) + { + return mResult; + } + + // + XPosition min; + XPosition max; + + // + for (int i = 0; i < positionsCount; i++) + { + // + XPosition iPosition = positions[i]; + + // + if (iPosition.profit >= 0) + { + continue; + } + + // + // Calculate Min and Max ... + + // + // Min ... + if (!min.IsValid() || min.profit <= 0 || min.profit > iPosition.profit) + { + min = iPosition; + } + + // + // Max ... + if (!max.IsValid() || max.profit <= 0 || max.profit < iPosition.profit) + { + max = iPosition; + } + + // + bool isSelectionMethodFilterPassed = + // + (method == NULL || + method == X_POSITION_SELECT_ALL || + method == X_POSITION_SELECT_ALL) + ? true + : false; + // + ; + if (!isSelectionMethodFilterPassed) + { + continue; + } + + // + AddRef( + iPosition, + result + // + ); + } + + // + if (min.IsValid() && + (method == X_POSITION_SELECT_MIN || + method == X_POSITION_SELECT_BOTH)) + { + // + AddRef( + min, + result + // + ); + } + + // + if (max.IsValid() && + (method == X_POSITION_SELECT_MAX || + method == X_POSITION_SELECT_BOTH)) + { + // + AddRef( + max, + result + // + ); + } + + // + int after = ArraySize(result); + + // + mResult = after - before; + + // + return mResult; + } + + // + // Orders ... + + // + // Retrieve Specific Order by Index ... + bool GetOrder( + int index, // Specified Index + XOrder &result // Hold's Result + ) + { + // + return result + .ByIndex(index); + } + + // + // Retrieve Specific Positions Orders ... + int GetOrders( + ulong ticket, // Positions Ticket + XOrder &result[], // Hold's Result + bool forceClean = true // Clean Result Array + ) + { + // + int mResult = 0; + + // + // Select History by Specified Ticket ... + bool isHistorySelected = HistorySelectByPosition(ticket); + if (!isHistorySelected) + { + return mResult; + } + + // + int ordersCount = HistoryOrdersTotal(); + if (ordersCount <= 0) + { + return mResult; + } + + // + int before = ArraySize(result); + + // + if (forceClean) + { + Clean(result); + } + + // + for (int i = 0; i < ordersCount; i++) + { + // + XOrder iOrder; + bool isLoaded = iOrder.HistoryByIndex(i); + if (!isLoaded) + { + continue; + } + + // + bool isTicketFilterPassed = + // + iOrder.ticket = ticket + // + ; + if (!isTicketFilterPassed) + { + continue; + } + + // + AddRef( + iOrder, + result + // + ); + } + + // + int after = ArraySize(result); + + // + mResult = after - before; + + // + return mResult; + } + + // + // Retrieve All Orders ... + int GetOrders( + XOrder &result[], // Hold's Result + string symbol = NULL, // Trading Symbol + string provider = NULL, // Signal Provider + ENUM_TIMEFRAMES period = NULL, // Trading Period + ENUM_ORDER_TYPE type = NULL, // Long (Buy) or Short (Sell) + ENUM_ORDER_STATE state = NULL, // Order State + bool filterByMagic = true, // Get Only Self Open Positions + bool forceClean = true // Clean Result Array + ) + { + // + int mResult = 0; + + // + int before = ArraySize(result); + + // + if (forceClean) + { + Clean(result); + } + + // + // Count Positions ... + int itemsCount = OrdersTotal(); + if (itemsCount <= 0) + { + return mResult; + } + + // + // Loop Through all Positions ... + for (int i = itemsCount - 1; i >= 0; i--) + { + // + XOrder iItem; + bool isLoaded = iItem.ByIndex(i); + if (!isLoaded) + { + continue; + } + + // + // Now we have to Check Given Filters ... + bool isFiltersPassed = + iItem.IsFiltersPassed( + symbol, + provider, + period, + type, + state, + mMagicNumber, + filterByMagic + // + ); + if (!isFiltersPassed) + { + continue; + } + + // + // Add Filtered Item into Result ... + AddRef( + iItem, + result + // + ); + } + + // + int after = ArraySize(result); + + // + mResult = after - before; + + // + return mResult; + } + + // + // Retrieve Historical Orders ... + int GetOrders( + XOrder &result[], // Hold's Result + string symbol = NULL, // Trading Symbol + string provider = NULL, // Signal Provider + ENUM_TIMEFRAMES period = NULL, // Trading Period + ENUM_ORDER_TYPE type = NULL, // Long (Buy) or Short (Sell) + ENUM_ORDER_STATE state = NULL, // Order State + datetime startDate = NULL, // Specify Start Date + datetime endDate = NULL, // Specify End Date + bool filterByMagic = true, // Get Only Self Open Positions + bool forceClean = true // Clean Result Array + ) + { + // + int mResult = 0; + + // + endDate = NormalizeTime(endDate); + + // + if (!IsValid(startDate)) + { + startDate = endDate - PeriodSeconds(PERIOD_D1); + } + + // + bool isHistorySelected = HistorySelect( + startDate, + endDate); + if (!isHistorySelected) + { + return mResult; + } + + // + int before = ArraySize(result); + + // + if (forceClean) + { + Clean(result); + } + + // + // Count Positions ... + int itemsCount = OrdersTotal(); + if (itemsCount <= 0) + { + return mResult; + } + + // + // Loop Through all Positions ... + for (int i = itemsCount - 1; i >= 0; i--) + { + // + XOrder iItem; + bool isLoaded = iItem.HistoryByIndex(i); + if (!isLoaded) + { + continue; + } + + // + // Now we have to Check Given Filters ... + bool isFiltersPassed = + iItem.IsFiltersPassed( + symbol, + provider, + period, + type, + state, + mMagicNumber, + filterByMagic + // + ); + if (!isFiltersPassed) + { + continue; + } + + // + // Add Filtered Item into Result ... + AddRef( + iItem, + result + // + ); + } + + // + int after = ArraySize(result); + + // + mResult = after - before; + + // + return mResult; + } + + // + // Deals ... + + // + // Retrieve Specific Deal by Index ... + bool GetDeal( + int index, // Specified Index + XDeal &result // Hold's Result + ) + { + // + return result + .ByIndex(index); + } + + // + // Retrieve Specified Deal's History ... + int GetDealsHistory( + XDeal &deal, // Specified Deal + XOrder &history[], // Deals History + bool forceClean = true // Clean Result Array + ) + { + // + int result = 0; + + // + if (!deal.IsValid()) + { + return result; + } + + // + result = GetOrders( + deal.positionId, + history, + forceClean); + + // + return result; + } + + // + // Retrieve All Deals ... + int GetDeals( + XDeal &result[], // Hold's Result + string symbol = NULL, // Trading Symbol + string provider = NULL, // Signal Provider + ENUM_TIMEFRAMES period = NULL, // Trading Period + ENUM_DEAL_TYPE type = NULL, // Deal Type + ENUM_DEAL_ENTRY entry = NULL, // Deal Entry + ENUM_DEAL_REASON reason = NULL, // Deal Reason + datetime startDate = NULL, // Specify Start Date + datetime endDate = NULL, // Specify End Date + bool filterByMagic = true, // Get Only Self Open Positions + bool forceClean = true // Clean Result Array + ) + { + // + int mResult = 0; + + // + endDate = NormalizeTime(endDate); + + // + if (!IsValid(startDate)) + { + startDate = endDate - PeriodSeconds(PERIOD_D1); + } + + // + bool isHistorySelected = HistorySelect( + startDate, + endDate); + if (!isHistorySelected) + { + return mResult; + } + + // + int before = ArraySize(result); + + // + if (forceClean) + { + Clean(result); + } + + // + // Count Positions ... + int itemsCount = HistoryDealsTotal(); + if (itemsCount <= 0) + { + return mResult; + } + + // + // Loop Through all Positions ... + for (int i = itemsCount - 1; i >= 0; i--) + { + // + XDeal iItem; + bool isLoaded = iItem.ByIndex(i); + if (!isLoaded) + { + continue; + } + + // + // Now we have to Check Given Filters ... + bool isFiltersPassed = + iItem.IsFiltersPassed( + symbol, + provider, + period, + type, + entry, + reason, + mMagicNumber, + filterByMagic + // + ); + if (!isFiltersPassed) + { + continue; + } + + // + // Add Filtered Item into Result ... + AddRef( + iItem, + result + // + ); + } + + // + int after = ArraySize(result); + + // + mResult = after - before; + + // + return mResult; + } + + // + // Protected ... +protected: + // + // Props ... + + // + // Event Listener Notifiers ... + + // + // State ... + void NotifyTradeStateChangeEvent(const XOnTradeHandlerState &state) + { + // + int count = ArraySize(mTradeStateChangedEventHandlers); + if (count <= 0) + { + return; + } + + // + for (int i = 0; i < count; i++) + { + // + TOnTradeStateChanged iHandler = mTradeStateChangedEventHandlers[i]; + iHandler(state); + } + } + + // + // Deals ... + void NotifyDealsChangeEvent(int changes) + { + // + int count = ArraySize(mDealsChangedEventHandlers); + if (count <= 0) + { + return; + } + + // + for (int i = 0; i < count; i++) + { + // + TOnDealsChanged iHandler = mDealsChangedEventHandlers[i]; + iHandler(changes); + } + } + + // + // Orders ... + void NotifyOrdersChangeEvent(int changes) + { + // + int count = ArraySize(mOrdersChangedEventHandlers); + if (count <= 0) + { + return; + } + + // + for (int i = 0; i < count; i++) + { + // + TOnOrdersChanged iHandler = mOrdersChangedEventHandlers[i]; + iHandler(changes); + } + } + + // + // Positions ... + void NotifyPositionsChangeEvent(int changes) + { + // + int count = ArraySize(mPositionsChangedEventHandlers); + if (count <= 0) + { + return; + } + + // + for (int i = 0; i < count; i++) + { + // + TOnPositionsChanged iHandler = mPositionsChangedEventHandlers[i]; + iHandler(changes); + } + } + + // + // StopLoss ... + void NotifyStopLossEvent(const XDeal &deal) + { + // + int count = ArraySize(mStopLossEventHandlers); + if (count <= 0) + { + return; + } + + // + for (int i = 0; i < count; i++) + { + // + TOnStopLoss iHandler = mStopLossEventHandlers[i]; + iHandler(deal); + } + } + + // + // Take Profit ... + void NotifyTakeProfitEvent(const XDeal &deal) + { + // + int count = ArraySize(mTakeProfitEventHandlers); + if (count <= 0) + { + return; + } + + // + for (int i = 0; i < count; i++) + { + // + TOnTakeProfit iHandler = mTakeProfitEventHandlers[i]; + iHandler(deal); + } + } + + // + // Tools ... + + // + // Retrieve Specified Position Comment ... + string GetPositionComment(ulong ticket) + { + // + string result = NULL; + + // + if (!IsOpen(ticket)) + { + return result; + } + + // + XPosition position; + bool isLoaded = position.ByTicket(ticket); + if (!isLoaded) + { + return result; + } + + // + result = position.comment; + + // + return result; + } + + // + // Retrieve Last Open Position Ticket ... + ulong GetLastOpenPositionTicket() + { + // + ulong result = 0; + + int positionsCount = PositionsTotal(); + if (positionsCount <= 0) + { + return result; + } + + // + result = PositionGetTicket(PositionsTotal() - 1); + + // + return result; + } + + // + // Retrieve Last Placed Order Ticket ... + ulong GetLastPlacedOrderTicket() + { + // + ulong result = 0; + + int ordersCount = OrdersTotal(); + if (ordersCount <= 0) + { + return result; + } + + // + if (mOrderInfo.SelectByIndex(ordersCount - 1)) + { + result = mOrderInfo.Ticket(); + } + + // + return result; + } + + // + // XPosition Pack ... + + // + // Extract specific Positions Pack ... + // in this senario there is no need to Position exists itself ... + bool GetPositionPack( + ulong ticket, // Specified Positions Ticket + string symbol, // Specified Position Symbol + ENUM_TIMEFRAMES period, // Specified Position Period + XPositionPack &pack // Hold Result + ) + { + // + bool result = false; + + // + pack.Clean(); + + // + XPosition position; + bool hasPosition = GetPosition( + ticket, + position + // + ); + if (hasPosition) + { + pack.position = position; + } + + // + XOrder supportOrders[]; + XPosition supportPositions[]; + + // + XOrder orders[]; + GetOrders( + orders, + symbol, // Specified Symbol + NULL, // All Providers + period, // Specified Period + NULL, // All Types + ORDER_STATE_PLACED, // Just UnTriggered Orders + true // Filter by Magic + ); + int ordersCount = ArraySize(orders); + + // + // Select Orders ... + if (ordersCount > 0) + { + // + for (int i = 0; i < ordersCount; i++) + { + // + XOrder iOrder = orders[i]; + + // + // Retrieve Order Supported Ticket ... + ulong parentTicket = ExtractSupportedTicket(iOrder.comment); + if (NotEmpty(parentTicket) && parentTicket == ticket) + { + // + AddRef( + iOrder, + supportOrders + // + ); + } + } + } + + // + int supportOrdersCount = ArraySize(supportOrders); + if (supportOrdersCount > 0) + { + // + pack.supportOrdersCount = supportOrdersCount; + + // + Copy( + supportOrders, + pack.supportOrders); + } + + // + XPosition positions[]; + GetPositions( + positions, + symbol, // Specified Symbol ... + NULL, // All Providers ... + period // Specified Period ... + ); + int positionsCount = ArraySize(positions); + + // + // Select Positions ... + if (positionsCount > 0) + { + // + for (int i = 0; i < positionsCount; i++) + { + // + XPosition iPosition = positions[i]; + + // + ulong parentTicket = ExtractSupportedTicket(iPosition.comment); + if (NotEmpty(parentTicket) && parentTicket == ticket) + { + // + AddRef( + iPosition, + supportPositions + // + ); + } + } + } + + // + int supportPositionsCount = ArraySize(supportPositions); + if (supportPositionsCount > 0) + { + // + pack.supportPositionsCount = supportPositionsCount; + + // + Copy( + supportPositions, + pack.supportPositions); + } + + // + result = supportOrdersCount > 0 || supportPositionsCount > 0; + + // + return result; + } + + // + // Extract Specific Deals Position's Pack ... + // this used when a Position SL or TP triggered and we want to close + // all it's Supported Packs ... + bool GetDealPack( + XDeal &deal, + XPositionPack &pack // + ) + { + // + bool result = false; + + // + ulong ticket = deal.positionId; + ENUM_TIMEFRAMES dealPeriod = GetDealPeriod(deal); + string dealSymbol = deal.symbol; + + // + // So We Have to Get Positions Pack ... + result = GetPositionPack( + ticket, + dealSymbol, + dealPeriod, + pack + // + ); + + // + return result; + } + + // + ENUM_TIMEFRAMES GetDealPeriod(XDeal &deal) + { + // + ENUM_TIMEFRAMES result = NULL; + + // + XOrder orders[]; + int ordersCount = GetDealsHistory( + deal, + orders); + if (!ordersCount) + { + return result; + } + + // + for (int i = 0; i < ordersCount; i++) + { + // + XOrder iOrder = orders[i]; + + // + if (IsValid(iOrder.comment)) + { + // + ENUM_TIMEFRAMES iPeriod = ExtractPeriod(iOrder.comment); + if (IsValid(iPeriod)) + { + result = iPeriod; + break; + } + } + } + + // + return result; + } + + // + double GetMaxAllowedEquity() + { + // + double equity = mAccount.GetEquity(); + double balance = mAccount.GetBalance(); + + // + double balanceForFactor = MathAbs(equity - balance); + if (balanceForFactor <= 0) + { + balanceForFactor = balance; + } + else + { + balanceForFactor = equity; + } + + // + double result = balanceForFactor * mMaxAllowedDrawdownFactor; + + // + return result; + } + + // + // Private ... +private: + // + // Props ... + + // + int mSlippage; // Slippage ... + ulong mMagicNumber; // Magic Number (Unique Identifier) ... + + // + datetime mLastManageOn; // Last Manager Check + int mManageInterval; // Manager Check Intervals Seconds + + // + double mMaxAllowedSpread; // Max Allowed Spred for Opening Trades + int mMaxAllowedPositions; // Max Allowed Same Positions + double mMaxAllowedDrawdownFactor; // Max Allowed Drawdown Factor + + // + XSCAccount *mAccount; // Account Info Provider + XSCTradeBase *mTrader; // Base CTrade Manipulated Instance ... + + // + CDealInfo mDealInfo; // Deals Info ... + COrderInfo mOrderInfo; // Order Info ... + CPositionInfo mPositionInfo; // Positions Info + CHistoryOrderInfo mHistoryOrderInfo; // History Orders Info ... + + // + // Position Info Collector ... + + // + XSCPositionInfoCollector mPositionInfoCollector; // Position Info Data Collector ... + + // + void SyncPositionInfos() + { + // + // TODO: Complete this ... + + // + // Read All Stored Positions ... + // XPositionInfo infos[]; + // int infosCount = mPositionInfoCollector.Collect(infos); + + // // + // // Clear Store ... + // mPositionInfoCollector.Clear(); + + // // + // XPosition positions[]; + // int positionsCount = GetPositions(positions); + // if (positionsCount <= 0) + // { + // Clean(infos); + // } + + // // + // // Now we Have to Find each Position Info inside Positions and Update them ... + // XPositionInfo datas[]; + // for (int i = 0; i < infosCount; i++) + // { + // // + // XPositionInfo iInfo = infos[i]; + + // // + // // Check Positions Contains Specific ticket or not ... + // for (int j = 0; j < positionsCount; j++) + // { + // // + // XPosition jPosition = positions[j]; + + // // + // if (jPosition.ticket != iInfo.ticket) + // { + // // + // // this is a Position which is not listed in Collector ... + // } + // else + // { + // // + // // Now we have a Position which Listed Before in Collector ... + // // we Have to Update it ... + // } + // } + // } + } + + // + // Tools ... + + // + // OnTrade Event Handlers Section ... + + // + // Props ... + + // + int mDaysForRead; // Reading Dates for Trade History Checker ... + datetime mEndDate; // End Date for Trade history Checking ... + datetime mStartDate; // Start Date for Trade history Checking ... ... + int mOrdersCount; // Number of Active orders ... + int mPositionsCount; // Number of Open positions ... + int mDealsCount; // Number of Deals in the Trade History Checking ... + int mHistoryOrdersCount; // Number of Orders in the Trade History Checking ... + bool mScanStarted; // a Flag of counter relevance ... + + // + // Event Listeners ... + + // + // Deals Changed Event Handlers ... + TOnDealsChanged mDealsChangedEventHandlers[]; + + // + // Orders Changed Event Handlers ... + TOnOrdersChanged mOrdersChangedEventHandlers[]; + + // + // Positions Changed Event Handlers ... + TOnPositionsChanged mPositionsChangedEventHandlers[]; + + // + // Trade State Changed Event Handlers ... + TOnTradeStateChanged mTradeStateChangedEventHandlers[]; + + // + // TPSL ... + TOnStopLoss mStopLossEventHandlers[]; + TOnTakeProfit mTakeProfitEventHandlers[]; + + // + // Reset On Trade Scanner Context ... + void ResetOnTradeContext() + { + // + mEndDate = TimeCurrent(); + mStartDate = mEndDate - (mDaysForRead * PeriodSeconds(PERIOD_D1)); + } + + // + // Initial Context Of Trade Scanner ... + void InitOnTradeContext() + { + // + ResetLastError(); + + // + mOrdersCount = OrdersTotal(); + mPositionsCount = PositionsTotal(); + + // + // load history ... + bool selected = HistorySelect(mStartDate, mEndDate); + if (!selected) + { + return; + } + + // + // get the current value ... + mDealsCount = HistoryDealsTotal(); + mHistoryOrdersCount = HistoryOrdersTotal(); + + // + mScanStarted = true; + } + + // + // Check Statrt Date In Trade History ... + void CheckStartDateInTradeHistory() + { + // + // initial interval, if we were to start working right now .. + datetime currStart = TimeCurrent() - (mDaysForRead * PeriodSeconds(PERIOD_D1)); + + // + // make sure that the start limit of the trade history has not gone + // more than 1 day over the intended date ... + if (currStart - mStartDate > PeriodSeconds(PERIOD_D1)) + { + // + // correct the start date of history to be loaded in the cache ... + mStartDate = currStart; + + // + // now reload the trade history for the updated interval ... + HistorySelect(mStartDate, mEndDate); + + // + // correct the deal and order counters in history for further comparison + mHistoryOrdersCount = HistoryOrdersTotal(); + mDealsCount = HistoryDealsTotal(); + } + } + + // + // Process On Trade Context ... + void ProcessOnTradeContext( + XOnTradeHandlerState &result // Hold's Result + ) + { + // + mEndDate = TimeCurrent(); + + // + ResetLastError(); + + // + // download trading history from the specified interval to the program cache ... + bool selected = HistorySelect(mStartDate, mEndDate); + if (!selected) + { + return; + } + + // + // get the current values ... + int currOrders = OrdersTotal(); + int currPositions = PositionsTotal(); + int currDeals = HistoryDealsTotal(); + int currHistoryOrders = HistoryOrdersTotal(); + + // + // Orders ... + // check if the number of active orders has been changed ... + if (currOrders != mOrdersCount) + { + // + // number of active orders has been changed ... + result.hasNewOrder = true; + result.newOrders = currOrders - mOrdersCount; + + // + // update the value ... + mOrdersCount = currOrders; + } + + // + // Positions ... + // changes in the number of open positions ... + if (currPositions != mPositionsCount) + { + // + // number of open positions has been changed ... + result.hasNewPosition = true; + result.newPositions = currPositions - mPositionsCount; + + // + // update the value ... + mPositionsCount = currPositions; + } + + // + // Deals ... + // changes in the number of deals in the trade history cache ... + if (currDeals != mDealsCount) + { + // + // number of deals in the trade history cache has been changed ... + result.hasNewDeal = true; + result.newDeals = currDeals - mDealsCount; + + // + // update the value ... + mDealsCount = currDeals; + } + + // + // History Orders ... + // changes in the number of history orders in the trade history cache ... + if (currHistoryOrders != mHistoryOrdersCount) + { + // + // number of history orders in the trade history cache has been changed ... + result.hasNewHistoryOrder = true; + result.newHistoryOrders = currHistoryOrders - mHistoryOrdersCount; + + // + // update the value ... + mHistoryOrdersCount = currHistoryOrders; + } + + // + // checking if it is necessary to change the limits of the trade history to be requested in cache ... + CheckStartDateInTradeHistory(); + } +}; + +// \ No newline at end of file diff --git a/MQLTestWorkspace/BKPS/Old/Documents/.gitkeep b/MQLTestWorkspace/BKPS/Old/Documents/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-color.tools.js b/MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-color.tools.js new file mode 100644 index 0000000..c3ac5f9 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-color.tools.js @@ -0,0 +1,506 @@ +/** + * XColor Tools Module ... + * a module for handle colorify text contents in node js ... + * + * Maintainer + * + * Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) + */ + +// +//#region Module Imports ... +const XValueTools = require("./x-value.tools"); +//#endregion + +// +//#region Constants ... +/** + * these are available style which can applied to an string ... + */ +const AVAILABLE_STYLES = { + // + Bold: "\x1b[1m", + Dim: "\x1b[2m", + Underlined: "\x1b[4m", + Blink: "\x1b[5m", + ReverseFandB: "\x1b[7m", + Hidden: "\x1b[8m", + // + // Commonly used for reset all Styles ... + Reset: "\x1b[0m" +}; + +/** + * these are available foreground colors which can applied to an string ... + */ +const AVAILABLE_FOREGROUND_COLORS = { + Default: "\x1b[39m", + Black: "\x1b[30m", + Red: "\x1b[31m", + Green: "\x1b[32m", + Yellow: "\x1b[33m", + Blue: "\x1b[34m", + Magenta: "\x1b[35m", + Cyan: "\x1b[36m", + LightGray: "\x1b[37m", + DarkGray: "\x1b[90m", + LightRed: "\x1b[91m", + LightGreen: "\x1b[92m", + LightYellow: "\x1b[93m", + LightBlue: "\x1b[94m", + LightMagenta: "\x1b[95m", + LightCyan: "\x1b[96m", + White: "\x1b[97m", +}; + +/** + * these are available background colors which can applied to an string ... + */ +const AVAILABLE_BACKGROUND_COLORS = { + Default: "\x1b[49m", + Black: "\x1b[40m", + Red: "\x1b[41m", + Green: "\x1b[42m", + Yellow: "\x1b[43m", + Blue: "\x1b[44m", + Magenta: "\x1b[45m", + Cyan: "\x1b[46m", + LightGray: "\x1b[47m", + DarkGray: "\x1b[100m", + LightRed: "\x1b[101m", + LightGreen: "\x1b[102m", + LightYellow: "\x1b[103m", + LightBlue: "\x1b[104m", + LightMagenta: "\x1b[105m", + LightCyan: "\x1b[106m", + White: "\x1b[107m", +}; + +/** + * these are available style names, which exports from module and + * users can use them ... + */ +const STYLE_NAMES = { + Bold: "Bold", + Dim: "Dim", + Underlined: "Underlined", + Blink: "Blink", + ReverseFandB: "ReverseFandB", + Hidden: "Hidden", + Reset: "Reset", +}; + +/** + * these are available color names, which exports from module and + * users can use them ... + */ +const COLOR_NAMES = { + Default: "Default", + Black: "Black", + Red: "Red", + Green: "Green", + Yellow: "Yellow", + Blue: "Blue", + Magenta: "Magenta", + Cyan: "Cyan", + LightGray: "LightGray", + DarkGray: "DarkGray", + LightRed: "LightRed", + LightGreen: "LightGreen", + LightYellow: "LightYellow", + LightBlue: "LightBlue", + LightMagenta: "LightMagenta", + LightCyan: "LightCyan", + White: "White", +}; +//#endregion + +// +//#region Actions ... +/** + * apply specified style and color on a content ... + * + * @param {string} content specified content for styling ... + * @param {string} color specific color name for using to styling ... + * @param {string} style soecufic style name to use ... + * @param {boolean} toForeground apply specified color as foreground ... + * @param {boolean} toBackground apply specified color as background ... + * @returns {string} styled content ... + */ +function apply( + content, + color, + style, + toForeground = true, + toBackground = false +) { + // + let result = content; + + // + // Validate Arg ... + if (!XValueTools.isValidArg(content)) { + return result; + } + + // + // Detect and Validate Style and Apply it ... + let eStyle = AVAILABLE_STYLES[style]; + if (XValueTools.isValidArg(eStyle)) { + result = `${eStyle}${result}${AVAILABLE_STYLES.Reset}`; + } + + // + // Detect and Validate Foreground Color and Apply it ... + let eFColor = AVAILABLE_FOREGROUND_COLORS[color]; + if ( + !!toForeground + && XValueTools.isValidArg(eFColor) + ) { + result = `${eFColor}${result}${AVAILABLE_STYLES.Reset}`; + } + + // + // Detect and Validate Background Color and Apply it ... + let eBColor = AVAILABLE_BACKGROUND_COLORS[color]; + if ( + !!toBackground + && XValueTools.isValidArg(eBColor) + ) { + result = `${eBColor}${result}${AVAILABLE_STYLES.Reset}`; + } + +} + +/** + * apply specific style on a content ... + * + * @param {string} content specific content which going to styled ... + * @param {string} style a member of STYLE_NAMES which specified that which style going to applied to content ... + * @returns {string} styled content ... + */ +function applyStyle(content, style) { + // + // Validate Arg ... + if (!XValueTools.isValidArg(content)) { + return content; + } + + // + let eStyle = AVAILABLE_STYLES[style]; + if (eStyle === undefined) { + return content; + } + + // + return `${eStyle}${content}${AVAILABLE_STYLES.Reset}`; +} + +/** + * apply specific foreground color on a content ... + * + * @param {string} content specific content which going to colorified ... + * @param {string} color a member of COLOR_NAMES which specified that which color going to applied to content ... + * @returns {string} colorified content ... + */ +function applyForegroundColor(content, color) { + // + // Validate Arg ... + if (!XValueTools.isValidArg(content)) { + return content; + } + + // + let eColor = AVAILABLE_FOREGROUND_COLORS[color]; + if (eColor === undefined) { + return content; + } + + // + return `${eColor}${content}${AVAILABLE_STYLES.Reset}`; +} + +/** + * apply specific background color on a content ... + * + * @param {string} content specific content which going to colorified ... + * @param {string} color a member of COLOR_NAMES which specified that which color going to applied to content ... + * @returns {string} colorified content ... + */ +function applyBackgroundColor(content, color) { + // + // Validate Arg ... + if (!XValueTools.isValidArg(content)) { + return content; + } + + // + let eColor = AVAILABLE_BACKGROUND_COLORS[color]; + if (eColor === undefined) { + return content; + } + + // + return `${eColor}${content}${AVAILABLE_STYLES.Reset}`; +} + +/** + * generate style and color applier expression ... + * + * @param {string} color specific color name for using to styling ... + * @param {string} style soecufic style name to use ... + * @param {boolean} reset close applier string by reset styles ... + * @param {boolean} toForeground apply specified color as foreground ... + * @param {boolean} toBackground apply specified color as background ... + * @returns {string} style and color applier string ... + */ +function getApplier( + style = "", + color = "", + reset = false, + toForeground = true, + toBackground = false +) { + // + let result = ""; + + // + // Detect and Validate Style and Apply it ... + let eStyle = AVAILABLE_STYLES[style]; + if (XValueTools.isValidArg(eStyle)) { + result = `${eStyle}`; + } + + // + // Detect and Validate Foreground Color and Apply it ... + let eFColor = AVAILABLE_FOREGROUND_COLORS[color]; + if ( + !!toForeground + && XValueTools.isValidArg(eFColor) + ) { + result = `${eFColor}`; + } + + // + // Detect and Validate Background Color and Apply it ... + let eBColor = AVAILABLE_BACKGROUND_COLORS[color]; + if ( + !!toBackground + && XValueTools.isValidArg(eBColor) + ) { + result = `${eBColor}`; + } + + // + if ( + !!reset && + result.length > 0 + ) { + result = `${result}${AVAILABLE_STYLES.Reset}`; + } + + // + return result; +} + +/** + * generate style applier expression ... + * + * @param {string} style soecufic style name to use ... + * @param {boolean} reset close applier string by reset styles ... + * @returns {string} style applier string ... + */ +function getStyleApplier( + style = "", + reset = false +) { + // + let result = ""; + + // + // Detect and Validate Style and Apply it ... + let eStyle = AVAILABLE_STYLES[style]; + if (XValueTools.isValidArg(eStyle)) { + result = `${eStyle}`; + } + + // + if ( + !!reset && + result.length > 0 + ) { + result = `${result}${AVAILABLE_STYLES.Reset}`; + } + + // + return result; +} + +/** + * generate color applier expression ... + * + * @param {string} color specific color name for using to styling ... + * @param {boolean} reset close applier string by reset styles ... + * @param {boolean} toForeground apply specified color as foreground ... + * @param {boolean} toBackground apply specified color as background ... + * @returns {string} color applier string ... + */ +function getColorApplier( + color = "", + reset = false, + toForeground = true, + toBackground = false +) { + // + let result = ""; + + // + // Detect and Validate Foreground Color and Apply it ... + let eFColor = AVAILABLE_FOREGROUND_COLORS[color]; + if ( + !!toForeground + && XValueTools.isValidArg(eFColor) + ) { + result = `${eFColor}`; + } + + // + // Detect and Validate Background Color and Apply it ... + let eBColor = AVAILABLE_BACKGROUND_COLORS[color]; + if ( + !!toBackground + && XValueTools.isValidArg(eBColor) + ) { + result = `${eBColor}`; + } + + // + if ( + !!reset && + result.length > 0 + ) { + result = `${result}${AVAILABLE_STYLES.Reset}`; + } + + // + return result; +} + +/** + * colorified specific content ... + * + * @param {string} content specified content for styling ... + * @param {string} color specific color name for using to styling ... + * @param {boolean} toForeground apply specified color as foreground ... + * @param {boolean} toBackground apply specified color as background ... + * @returns {string} + */ +function colorifyContent( + content = "", + color = "", + toForeground = true, + toBackground = false +) { + // + let result = content; + + // + if (!XValueTools.isValidArg(content)) { + return result; + } + + // + // Finde Colors ... + + // + // Detect and Validate Foreground Color and Apply it ... + let eFColor = AVAILABLE_FOREGROUND_COLORS[color]; + if ( + !!toForeground + && XValueTools.isValidArg(eFColor) + ) { + result = `${eFColor}${result}`; + } + + // + // Detect and Validate Background Color and Apply it ... + let eBColor = AVAILABLE_BACKGROUND_COLORS[color]; + if ( + !!toBackground + && XValueTools.isValidArg(eBColor) + ) { + result = `${eBColor}${result}`; + } + + // + if ( + result.length > 0 + && ( + XValueTools.isValidArg(eFColor) || + XValueTools.isValidArg(eBColor) + ) + ) { + result = `${result}${AVAILABLE_STYLES.Reset}`; + } + + // + return result; +} + +/** + * apply style on specific content ... + * + * @param {string} content specified content for styling ... + * @param {string} style soecufic style name to use ... + * @returns {string} + */ +function stylifiyContent( + content = "", + style = "", +) { + // + let result = content; + + // + if (!XValueTools.isValidArg(content)) { + return result; + } + + // + // Detect and Validate Style and Apply it ... + let eStyle = AVAILABLE_STYLES[style]; + if (XValueTools.isValidArg(eStyle)) { + result = `${eStyle}${result}`; + } + + // + if ( + result.length > 0 + && XValueTools.isValidArg(eStyle) + ) { + result = `${result}${AVAILABLE_STYLES.Reset}`; + } + + // + return result; +} +//#endregion + +// +//#region Module Exports ... +module.exports = { + // + STYLE_NAMES, + COLOR_NAMES, + // + apply, + applyStyle, + getApplier, + getColorApplier, + getStyleApplier, + colorifyContent, + stylifiyContent, + applyForegroundColor, + applyBackgroundColor, +} +//#endregion \ No newline at end of file diff --git a/MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-file.tools.js b/MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-file.tools.js new file mode 100644 index 0000000..a1642a4 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-file.tools.js @@ -0,0 +1,830 @@ +/** + * XFile Tools Module ... + * a module for handle all file/folder manipulating task in node js ... + * + * Maintainer + * + * Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) + */ + +// +//#region Module Imports ... +const fs = require('fs'); +const os = require('os'); +const Path = require('path'); +const http = require('http'); +const https = require('https'); +const XValueTools = require('./x-value.tools'); +//#endregion + +// +//#region Constants ... +/** + * current os path separators ... + */ +const PathSeparator = Path.sep; + +/** + * current directory ... + */ +const CurrentDir = __dirname; +//#endregion + +// +//#region Actions ... +// +//#region Global ... +/** + * retrieve a path status ... + * + * @param {string} path a path value to check ... + * @returns an stat object ... + */ +function getStatus(path = '') { + // + if (!XValueTools.isValidArg(path)) { + return undefined; + } + + // + return fs.statSync(path); +} + +/** + * retrieve user's Home path ... + * + * @returns {string} a path ... + */ +function getHomePath() { + return os.homedir(); +} +//#endregion + +// +//#region Path ... +/** + * retrieve the base name of specific address path ... + * + * @param {string} path address of file or folder ... + * @returns string ... + */ +function basename(path = '') { + // + if (!XValueTools.isValidArg(path)) { + return ''; + } + + // + const result = Path.basename(path); + return result; +} + +/** + * join several path segments together ... + * + * @param {...string} path path params ... + * @returns a joined paths ... + */ +function joinPath(...path) { + return Path.join(...path); +} + +/** + * resolve a relative path to absolute ... + * + * @param {string[]} path a path value to check ... + * @returns {string} + */ +function resolvePath(...path) { + return Path.resolve(...path); +} +//#endregion + +// +//#region File ... +/** + * determines a path destination is a file or not ... + * + * @param {string} path a path value to check ... + * @returns a boolean value ... + */ +function isFileExists(path = '') { + // + if (!XValueTools.isValidArg(path)) { + return false; + } + + // + try { + const stat = getStatus(path); + if (!stat) { + return false; + } + + // + return stat.isFile(); + } catch { + return false; + } +} + +/** + * remove a file ... + * + * @param {string} path a file path ... + * @returns {Promise} action done or not ... + */ +function removeFile(path = '') { + return new Promise((resolve) => { + // + if (!isFileExists(path)) { + resolve(false); + } + + // + fs.unlink(path, (err) => { + // + if (err) { + resolve(false); + return; + } + + // + resolve(true); + }); + }); +} + +/** + * copy a file to destination path ... + * + * @param {string} source source file path ... + * @param {string} dest dest folder path ... + * @returns {Promise} action done or not ... + */ +function copyFile( + source = '', + dest = '' +) { + return new Promise((resolve) => { + // + if ( + !isFileExists(source) || + !isDirectoryExists(dest) + ) { + resolve(false); + return; + } + + // + const destFilePath = Path.join(dest, Path.basename(source)); + fs.copyFile(source, destFilePath, (err) => { + // + if (err) { + resolve(false); + return; + } + + // + resolve(true); + }); + }); +} + +/** + * reading specified file content ... + * + * @param {string} path a file path ... + * @returns {Promise} file content ... + */ +function readFile(path = '') { + return new Promise((resolve) => { + // + if (!isFileExists(path)) { + resolve(''); + return; + } + + // + fs.readFile(path, 'utf8', (err, content) => { + // + if (err) { + resolve(undefined); + return; + } + + // + resolve(content); + }); + }); +} + +/** + * write content to a file ... + * + * @param {string} path a file path ... + * @param {string} content the content which going to write to the file ... + * @param {bool} overwrite determines file overwrite if exists ... + * @returns {Promise} action done or not ... + */ +function writeFile( + path = '', + content = '', + overwrite = true +) { + return new Promise((resolve) => { + // + if (isFileExists(path) && !overwrite) { + // + resolve(false); + return; + } + + // + // Normalize Content ... + content = XValueTools.isValidArg(content) ? + content : + ''; + + // + fs.writeFile(path, content, (err) => { + // + if (err) { + // + resolve(false); + return; + } + + // + resolve(true); + }); + }); +} + +/** + * create a file ... + * + * @param {string} path file path ... + * @param {string} fileName file name ... + * @returns {Promise} action done or not ... + */ +function createFile( + path = '', + fileName = '' +) { + return new Promise((resolve) => { + // + const filePath = Path.join(path, fileName); + if ( + isFileExists(filePath) || + !XValueTools.isValidArg(path) || + !XValueTools.isValidArg(fileName) + ) { + // + resolve(false); + return; + } + + // + fs.writeFile(filePath, '', (err) => { + // + if (err) { + // + resolve(false); + return; + } + + // + resolve(true); + }); + }); +} + +/** + * remove a file name extension ... + * + * @param {string} name + * @returns {string} name without extension ... + */ +function removeFileExtension(name = '') { + return name.substring(0, name.lastIndexOf('.')) || name; +} + +/** + * retrieve a file extension ... + * + * @param {string} path a path which locate a file ... + * @returns {string} + */ +function getFileExtension(path = '') { + // + let result = ""; + + // + // Validate Arg ... + if ( + !XValueTools.isValidArg(path) + || !isFileExists(path) + ) { + return result; + } + + // + // Retrieve just file name ... + const fileName = basename(path); + result = fileName.replace( + removeFileExtension(fileName), + "" + ); + + // + return result; +} + +/** + * retrieve all files list recursively from specific path ... + * + * @param {string} path a source folder path ... + * @param {string[]} extensions which file extensions need to be listed, live empty for all files ... + * @returns {Promise} + */ +async function getRecursiveFilesList( + path = "", + extensions = [] +) { + // + let result = []; + + // + // Validate Args ... + if ( + !XValueTools.isValidArg(path) + || !isDirectoryExists(path) + ) { + return result; + } + + // + const contents = await getDirectoryContents(path); + for(const item of contents) { + // + const itemPath = joinPath( + path, + item + ); + + // + const isItemFile = isFileExists(itemPath); + if (isItemFile) { + // + const itemFileExtension = getFileExtension(itemPath); + const isFileInSupportedExtensions = + extensions === undefined || extensions.length === 0 + ? true + : extensions.includes(itemFileExtension) + ; + if (isFileInSupportedExtensions) { + result.push(itemPath); + } + } else if (isDirectoryExists(itemPath)) { + // + const itemPathFiles = await getRecursiveFilesList(itemPath, extensions); + result.push(...itemPathFiles); + } + } + + // + return result; +} +//#endregion + +// +//#region Directory ... +/** + * create a directory ... + * + * @param {string} path destination path including dir name ... + * @param {boolean} recursive create directories recursively ... + * @returns action done or not ... + */ +function createDirectory( + path = '', + recursive = true +) { + // + let result = false; + + // + if ( + isDirectoryExists(path) || + !XValueTools.isValidArg(path) + ) { + return false; + } + + // + try { + // + fs.mkdirSync(path, { recursive: recursive }); + result = true; + return result; + } catch { + return false; + } +} + +/** + * remove a directory ... + * + * @param {string} path destination path including dir name ... + * @param {boolean} recursive removes directories recursively ... + * @returns {Promise} action done or not ... + */ +function removeDirectory( + path = '', + recursive = false +) { + return new Promise((resolve) => { + // + if (!isDirectoryExists(path)) { + resolve(false); + return; + } + + // + fs.rm(path, { + recursive + }, (err) => { + // + if (err) { + resolve(false); + return; + } + + // + resolve(true); + }); + }); +} + +/** + * determines a path destination is a directory or not ... + * + * @param {string} path a folder path ... + * @returns represent destnation path is Directory or not ... + */ +function isDirectoryExists(path = '') { + // + if (!XValueTools.isValidArg(path)) { + return false; + } + + // + try { + // + const isExists = fs.existsSync(path); + if (!isExists) { + return false; + } + + // + const stat = getStatus(path); + if (!stat) { + return false; + } + + // + const result = stat.isDirectory(); + return result; + } catch { + return false; + } +} + +/** + * retrieve a directory content ... + * + * @param {string} path a folder path ... + * @returns {Promise} a collection of folder files ... + */ +function getDirectoryContents(path = '') { + return new Promise((resolve) => { + // + if (!isDirectoryExists(path)) { + resolve([]); + return; + } + + // + fs.readdir(path, (err, content) => { + // + if (err) { + resolve([]); + return; + } + + // + resolve(content); + }); + }); +} + +/** + * retrieve a directory files ... + * + * @param {string} path a folder path ... + * @returns {Promise} a collection of folder files ... + */ +function getDirectoryFiles( + path = '', + containsHiddenFiles = false +) { + return new Promise((resolve) => { + // + if (!isDirectoryExists(path)) { + resolve([]); + return; + } + + // + fs.readdir(path, (err, content) => { + // + if (err) { + resolve([]); + return; + } + + // + if (!containsHiddenFiles) { + content = content.filter(c => !c.startsWith('.')); + } + + // + const result = []; + content + .forEach(c => { + // + const cPath = Path.join(path, c); + if (isFileExists(cPath)) { + result.push(c); + } + }); + + // + resolve(result); + }); + }); +} + +/** + * retrieve a directory folders ... + * + * @param {string} path a folder path ... + * @returns {Promise} a collection of folder names ... + */ +function getDirectoryFolders(path = '') { + return new Promise((resolve) => { + // + if (!isDirectoryExists(path)) { + resolve([]); + return; + } + + // + fs.readdir(path, (err, content) => { + // + if (err) { + resolve([]); + return; + } + + // + const result = []; + content.forEach(c => { + // + const cPath = Path.join(path, c); + if (isDirectoryExists(cPath)) { + result.push(c); + } + }); + + // + resolve(result); + }); + }); +} + +/** + * copy a folder with all of it's content to dest ... + * + * @param {string} source source folder path ... + * @param {string} dest dest folder path ... + * @returns {Promise} action done or not ... + */ +async function copyFolder( + source = '', + dest = '' +) { + // + if ( + !isDirectoryExists(source) || + !XValueTools.isValidArg(dest) || + !XValueTools.isValidArg(source) + ) { + return false; + } + + // + const folderName = Path.basename(source); + const destPath = Path.join(dest, folderName); + + // + // Create Dest Path folder if not exists ... + if (!isDirectoryExists(destPath)) { + // + let result = createDirectory(destPath, true); + if (!result) { + return false; + } + } + + // + // Files ... + const files = await getDirectoryFiles(source); + if (files && files.constructor === Array && files.length > 0) { + // + const filesPromises = files.map(file => copyFile(Path.join(source, file), destPath)); + const filesResult = (await Promise.all(filesPromises)).every(r => !!r); + if (!filesResult) { + return false; + } + } + + // + // Folders ... + const folders = await getDirectoryFolders(source); + if (folders && folders.constructor === Array && folders.length > 0) { + // + const folderPromises = folders.map(folder => copyFolder(Path.join(source, folder), destPath)); + const filesResult = (await Promise.all(folderPromises)).every(r => !!r); + if (!filesResult) { + return false; + } + } + + // + return true; +} +//#endregion + +// +//#region Downloader ... +/** + * download a file from specific url and store it ... + * + * @param {string} filepath the file name and path which required to put download file on it ... + * @param {string} url the web url for downloading ... + */ +function download(filepath, url) { + // + // Validate Args ... + if ( + !XValueTools.isValidArg(url) + || !XValueTools.isValidURL(url) + || !XValueTools.isValidArg(filepath) + ) { + return; + } + + // + var file = fs.createWriteStream(filepath); + + // + if (url.startsWith('https:')) { + https.get(url, function (response) { + response.pipe(file); + }); + } else if (url.startsWith('http:')) { + http.get(url, function (response) { + response.pipe(file); + }); + } +} +//#endregion + +// +//#region JSON ... +/** + * read and parse a JSON content from a file ... + * + * @param {string} path source file path ... + * @returns {any} + */ +function readJSON(path = "") { + // + // Validate Args ... + if (!isFileExists(path)) { + return undefined; + } + + // + let result = undefined; + try { + result = require(path); + } catch { + result = undefined; + } + + // + return result; +} + +/** + * write a JSON Object content into a file ... + * + * @param {string} path dest file path ... + * @param {any} content an object which required to write to file ... + * @returns {Promise} + */ +async function writeJSON( + path = "", + content = undefined +) { + // + let result = false; + + // + // Validate Args ... + if (!XValueTools.isValidArg(path)) { + return result; + } + + // + // Normallize Content ... + if (content === undefined) { + content = {}; + } + + // + const contentString = XValueTools.beautifyJSON(content); + + // + result = await writeFile( + path, + contentString, + true + ); + + // + return result; +} +//#endregion +//#endregion + +// +//#region Module Exports ... +module.exports = { + // + CurrentDir, + PathSeparator, + + // + getStatus, + getHomePath, + + // + basename, + joinPath, + resolvePath, + + // + download, + + // + readJSON, + writeJSON, + + // + copyFile, + readFile, + writeFile, + createFile, + removeFile, + isFileExists, + getFileExtension, + removeFileExtension, + getRecursiveFilesList, + + // + copyFolder, + createDirectory, + removeDirectory, + createDirectory, + removeDirectory, + isDirectoryExists, + isDirectoryExists, + getDirectoryFiles, + getDirectoryFolders, + getDirectoryContents, +} +//#endregion \ No newline at end of file diff --git a/MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-shell.tools.js b/MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-shell.tools.js new file mode 100644 index 0000000..0ee13de --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-shell.tools.js @@ -0,0 +1,219 @@ +/** + * XShell Tools Module ... + * a module for handling shell actions and retrieve OS Info in node js ... + * + * Maintainer + * + * Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) + */ + +// +//#region Imports ... +const os = require('os'); +const process = require('process'); +const { exec } = require("child_process"); +const XFileTools = require('./x-file.tools'); +//#endregion + +// +//#region Constants ... +// +const OS = { + Aix: 'aix', + Darwin: 'darwin', + FreeBSD: 'freebsd', + Linux: 'linux', + OpenBSD: 'openbsd', + SnOS: 'sunos', + Windows: 'win32' +}; + +// +const isWindows = process.platform === OS.Windows; +//#endregion + +// +//#region Actions ... +// +//#region Pure shell commands ... +/** + * execute a command using NodeJS on shell ... + * + * @param {string} cmd command to execute ... + * @param {string} cwd working directory ... + * + * @returns Promise instance ... + */ +function execute(cmd, cwd) { + return new Promise((resolve, reject) => { + // + if (!cmd || cmd.toString().length === 0 || (cwd && !XFileTools.isDirectoryExists(cwd))) { + reject('invalid args ...'); + return; + } + + // + exec(cmd, { cwd }, (err, result, stdError) => { + // + if (err) { + reject(err); + return; + } + + // + if (stdError) { + // + // reject(stdError); + // return; + } + + // + resolve(result); + }); + }); +}; + +/** + * determines a command exists on host or not ... + * + * @param {string} name specific command name ... + * + * @returns boolean Promise ... + */ +function checkCommandExists(name) { + return new Promise(resolve => { + // + if (!name) { + resolve(false); + return; + } + + // + const cmd = isWindows ? `${name} >nul 2>&1` : `type ${name} >/dev/null 2>&1`; + execute(cmd).then(result => { + resolve(true); + }) + .catch(err => { + resolve(false); + }); + }); +} +//#endregion + +// +//#region required commands state ... +/** + * check al required commands exists or not ... + * + * @returns + */ +async function isRequiredCommandsExists() { + // + let result = false; + + // + // const isTarExists = await isTarCommandExists(); + // const isCatExists = await isCatCommandExists(); + // const isGrepExists = await isGrepCommandExists(); + // const isSedExists = await isSedCommandExists(); + const isNpmExists = await isNpmCommandExists(); + const isNgExists = await isNgCommandExists(); + const isIonicExists = await isIonicCommandExists(); + const isCordovaExists = await isCordovaCommandExists(); + + // + result = isNpmExists + && isNgExists + && isIonicExists + && isCordovaExists + ; + + // + return result; +} + +/** + * retrieve required commands state object ... + * + * @returns + */ +async function getRequiredCommandsStates() { + // + const result = {}; + + // + // const isTarExists = await isTarCommandExists(); + // const isCatExists = await isCatCommandExists(); + // const isGrepExists = await isGrepCommandExists(); + // const isSedExists = await isSedCommandExists(); + const isNpmExists = await isNpmCommandExists(); + const isNgExists = await isNgCommandExists(); + const isIonicExists = await isIonicCommandExists(); + const isCordovaExists = await isCordovaCommandExists(); + + // + result['npm'] = isNpmExists; + result['ng'] = isNgExists; + result['ionic'] = isIonicExists; + result['cordova'] = isCordovaExists; + + // + return result; +} +//#endregion + +// +//#region Commonly used Command Checkers ... +/** + * determines npm command exists or not ... + * + * @returns + */ +function isNpmCommandExists() { + return checkCommandExists('npm'); +} + +/** + * determines ng command exists or not ... + * + * @returns + */ +function isNgCommandExists() { + return checkCommandExists('ng'); +} + +/** + * determines ionic command exists or not ... + * + * @returns + */ +function isIonicCommandExists() { + return checkCommandExists('ionic'); +} + +/** + * determines cordova command exists or not ... + * + * @returns + */ +function isCordovaCommandExists() { + return checkCommandExists('cordova'); +} +//#endregion +//#endregion + +// +//#region Module Exports ... +module.exports = { + // + execute, + checkCommandExists, + isRequiredCommandsExists, + getRequiredCommandsStates, + + // + isNgCommandExists, + isIonicCommandExists, + isCordovaCommandExists, +} +//#endregion \ No newline at end of file diff --git a/MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-type-detector.tools.js b/MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-type-detector.tools.js new file mode 100644 index 0000000..86ed3d8 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-type-detector.tools.js @@ -0,0 +1,268 @@ +/** + * DataType Tools Module ... + * a module for manipulate and detect supported data types in node js ... + * + * Maintainer + * + * Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) + */ + +// +//#region Constants ... +/** + * all supported data types ... + */ +const DataTypes = { + Null: 'null', + Date: 'date', + Array: 'array', + Object: 'object', + String: 'string', + Number: 'number', + Unknown: 'unknown', + Boolean: 'boolean', + Function: 'function', + Undefined: 'undefined', +}; +//#endregion + +// +//#region Actions ... +/** + * detect type of a content ... + * + * @param {any} value the content which going to check ... + * @returns + */ +function getType(value) { + // + const type = typeof value; + + // + let result = DataTypes.Unknown; + let dateIdentifier = '[object Date]'; + let constructor = value && value.constructor ? + value.constructor.toString() : + ''; + + // + switch (type) { + // + case 'undefined': + result = DataTypes.Undefined; + break; + + // + case 'boolean': + result = DataTypes.Boolean; + break; + + // + case 'string': + result = DataTypes.String; + break; + + // + case 'number': + result = DataTypes.Number; + break; + + // + case 'function': + result = DataTypes.Function; + break; + + // + case 'object': + // + // Null ... + if (value === null) { + result = DataTypes.Null; + } else + // + // Array ... + if (Array.isArray(value)) { + result = DataTypes.Array; + } else + // + // Data ... + if ( + value instanceof Date || + isFunction(value.getMonth) || + constructor.includes(dateIdentifier) || + Object.prototype.toString.call(value) === dateIdentifier + ) { + result = DataTypes.Date; + } else + // + // Object ... + { + result = DataTypes.Object; + } + break; + + // + default: + result = DataTypes.Unknown; + break; + } + + // + return result; +} + +/** + * retrieve an object constructor ... + * + * @param {any} value the content which going to check ... + * @returns + */ +function getConstructor(value) { + // + const result = value && value.constructor ? + value.constructor.toString() : + ''; + + // + return result; +} + +/** + * retrieve an object prototype ... + * + * @param {any} value the content which going to check ... + * @returns + */ +function getPrototype(value) { + // + const result = value ? + Object.prototype.toString.call(value) : + ''; + + // + return result; +} + +/** + * check an object is null or not ... + * + * @param {any} value the content which going to check ... + * @returns + */ +function isNull(value) { + return getType(value) === DataTypes.Null; +} + +/** + * check an object is undefined or not ... + * + * @param {any} value the content which going to check ... + * @returns + */ +function isUndefined(value) { + return getType(value) === DataTypes.Undefined; +} + +/** + * check an object is null or undefined or not ... + * + * @param {any} value the content which going to check ... + * @returns + */ +function isNullOrUndefined(value) { + return isNull(value) || isUndefined(value); +} + +/** + * check an object is a date or not ... + * + * @param {any} value the content which going to check ... + * @returns + */ +function isDate(value) { + return getType(value) === DataTypes.Date; +} + +/** + * check an object is number or not ... + * + * @param {any} value the content which going to check ... + * @returns + */ +function isNumber(value) { + return getType(value) === DataTypes.Number; +} + +/** + * check an object is string or not ... + * + * @param {any} value the content which going to check ... + * @returns + */ +function isString(value) { + return getType(value) === DataTypes.String; +} + +/** + * check an object is boolean or not ... + * + * @param {any} value the content which going to check ... + * @returns + */ +function isBoolean(value) { + return getType(value) === DataTypes.Boolean; +} + +/** + * check an object is an Array or not ... + * + * @param {any} value the content which going to check ... + * @returns + */ +function isArray(value) { + return getType(value) === DataTypes.Array; +} + +/** + * check an object is and Object or not ... + * + * @param {any} value the content which going to check ... + * @returns + */ +function isObject(value) { + return getType(value) === DataTypes.Object; +} + +/** + * check an object is a Function or not ... + * + * @param {any} value the content which going to check ... + * @returns + */ +function isFunction(value) { + return getType(value) === DataTypes.Function; +} +//#endregion + +// +//#region Module Exports ... +module.exports = { + // + DataTypes, + + // + getType, + getConstructor, + getPrototype, + isNull, + isUndefined, + isNullOrUndefined, + isDate, + isNumber, + isString, + isBoolean, + isArray, + isObject, + isFunction, +} +//#endregion \ No newline at end of file diff --git a/MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-value.tools.js b/MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-value.tools.js new file mode 100644 index 0000000..81cfcc4 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Documents/JsModules/x-value.tools.js @@ -0,0 +1,1528 @@ +/** + * Value Tools Module ... + * a module for Validate args and values ... + * + * Maintainer + * + * Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) + */ + +// +//#region Imports ... +const XTypeTools = require('./x-type-detector.tools'); +//#endregion + +// +//#region Actions ... +/** +* validate a value as an argument ... +* +* @param {string} value the value which going to validate ... +* @returns +*/ +function isValidArg(value) { + // + let result = false; + + // + result = value && + value.length > 0; + + // + return result; +} + +/** + * validate a collection of valuea as an arguments ... + * + * @param {string|string[]} values the value collection which going to checked ... + * @returns + */ +function isValidArgs(values) { + // + // Normalize Values ... + const normalValues = toNormalArray(values); + if (!hasChildArray(normalValues)) { + return false; + } + + // + let result = normalValues.every(nv => isValidArg(nv)); + return result; +} + +/** + * converts content to an array object ... + * + * @param {string|string[]} content the content which required to normalized ... + * @returns {string[]} array object ... + */ +function toNormalArray(content = '') { + // + // Validate Args ... + if (!isValidArg(content)) { + return []; + } + + // + const result = Array.isArray(content) ? + [...content] : + content.includes(',') && + content !== ',' ? + [...content.split(',')] : + [content]; + + // + return result; +} + +/** + * determines value is array and has atleast one child ... + * + * @param {any} value the value which going to checked ... + * @returns {boolean} result of checking ... + */ +function hasChildArray(value) { + // + let result = false; + result = value && + Array.isArray(value) && + value.length > 0; + + // + return result; +} + +/** + * check an string is ends with specified symbol ... + * + * @param {string} symbol specified search symbol ... + * @param {string} value specified search content ... + * @param {boolean} ignoreCase specified search case sensitive or not ... + * @returns + */ +function endsWidth( + symbol = '', + value = '', + ignoreCase = true +) { + // + if (!isValidArg(value)) { + return false; + } + + // + if (!isValidArg(symbol)) { + return true; + } + + // + // TODO: uncomment it if necessary ... + // symbol = symbol.trim(); + + // + let result = false; + const subtractedContent = value.substring(value.length - symbol.length); + result = !!ignoreCase ? + subtractedContent + .toLowerCase() === symbol + .toLowerCase() : + subtractedContent === symbol; + + // + return result; +} + +/** + * surround specified content by provided symbol ... + * + * @param {string} symbol surround string ... + * @param {string} content used content to surrounded by symbol ... + * @returns surrounded content ... + */ +function surroundBy( + symbol = '', + content = '' +) { + // + // Validate Args ... + if (!isValidArg(content)) { + content = ''; + } + + // + if (!isValidArg(symbol)) { + symbol = ''; + } + + // + if (isSurrounded(symbol, content)) { + return content; + } + + // + const result = `${symbol}${content}${symbol}`; + return result; +} + +/** + * convert a parsed sign to clear string ... + * + * @param {string} value a parsed content ... + * @returns clear parsed signs ... + */ +function toStringExpression(value) { + // + let result = ''; + result = value; + + // + if ( + !value || + !isValidArg(value) || + !isSurroundedString(value) + ) { + return result; + } + + // + const startSymbol = value.charAt(0); + const endSymbol = value.charAt(value.length - 1); + + // + if (startSymbol !== endSymbol) { + return result; + } + + // + if ( + startSymbol === "\"" || + startSymbol === "\'" + ) { + result = clearSurround(startSymbol, value); + } + + // + return result; +} + + + +/** + * find and cleare proposed candidates from specified content ... + * + * @param {string|string[]} candidates the proposed string(s) whic going to cleared from content ... + * @param {string} content the destination content which used to find and replace candidates on it ... + * @returns cleared content ... + */ +function clearContent( + candidates, + content +) { + // + // Validate Args ... + if ( + !candidates || + !isValidArg(content) + ) { + return ''; + } + + // + // Normalize candidates ... + const normalCandidates = toNormalArray(candidates) + .filter(c => isValidArg(c)); + if (!hasChildArray(normalCandidates)) { + return content; + } + + // + // define regexp for content ... + const regExpExpression = normalCandidates.join('|'); + const regExp = new RegExp( + regExpExpression, + 'gi' + ); + + // + let result = ''; + result = content.replace(regExp, ''); + + // + return result; +} + +/** + * clear surrounded symbol from content ... + * + * @param {string} symbol specified search symbol ... + * @param {string} content specified content to clear ... + * @returns + */ +function clearSurround( + symbol = '', + content = '' +) { + // + // Validate Args ... + if ( + !isValidArg(content) || + (isValidArg(symbol) && + symbol.length >= content.length - 1) + ) { + return ''; + } + + // + // Validate Surround ... + if (!isSurrounded(symbol, content)) { + return content; + } + + // + if (!isValidArg(symbol)) { + return content; + } + + // + let result = content.substring(symbol.length, content.length - symbol.length); + return result; +} + +/** + * clear object sign ... + * + * @param {string} content + * @returns cleared content ... + */ +function clearObjectSurround(content = '') { + // + // Validate Args ... + if ( + !isValidArg(content) || + !isSurroundedObject(content) + ) { + return content; + } + + // + const endIndex = content.length - ( + endsWidth('}', content) ? + 1 : + endsWidth('},', content) || + endsWidth('};', content) || + endsWidth('}\n', content) ? + 2 : + 0 + ); + + // + const result = content.substring(1, endIndex); + return result; +} + +/** + * clear array sign ... + * + * @param {string} content + * @returns cleared content ... + */ +function clearArraySurround(content = '') { + // + // Validate Args ... + if ( + !isValidArg(content) || + !isSurroundedArray(content) + ) { + return content; + } + + // + const endIndex = content.length - ( + endsWidth(']', content) ? + 1 : + endsWidth('],', content) || + endsWidth('];', content) || + endsWidth(']\n', content) ? + 2 : + 0 + ); + + // + const result = content.substring(1, endIndex); + return result; +} + +/** + * slice a content to individual parts ... + * + * @param {number|number[]} indexes which indexes used to slice ... + * @param {strng} content the content which going to sliced ... + * @returns sliced parts of content ... + */ +function sliceContent(indexes, content) { + // + // Validate Args ... + if ( + !isValidArg(indexes) || + !isValidArg(content) + ) { + return []; + } + + // + // Normalize indexes ... + const normalIndexes = toNormalArray(indexes) + .filter(index => index > -1 && index < content.length); + if (!hasChildArray(normalIndexes)) { + return []; + } + + // + let result = ['']; + result.pop(); + + // + let lastIndex = 0; + for (const index of normalIndexes) { + // + const part = content.substring(lastIndex, index); + if (isValidArg(part)) { + result.push(part.trim()); + } + + // + lastIndex = index + 1; + } + + // + // check remained parts ... + if (lastIndex < content.length) { + // + const part = content.substring(lastIndex); + if (isValidArg(part)) { + result.push(part.trim()); + } + } + + // + return result; +} + + + +/** + * check an string is starts and ends with specified symbol ... + * + * @param {string} symbol specified search symbol ... + * @param {string} content specified search content ... + * @param {boolean} ignoreCase specified search case sensitive or not ... + * @returns + */ +function isSurrounded( + symbol = '', + content = '', + ignoreCase = true +) { + // + // Validate Args ... + if (!isValidArg(content)) { + return false; + } + + // + if (!isValidArg(symbol)) { + return true; + } + + // + symbol = symbol.trim(); + + // + let result = false; + result = (!!ignoreCase ? + content + .toLowerCase() + .startsWith(symbol.toLowerCase()) : + content.startsWith(symbol) + ) && + endsWidth(symbol, content, ignoreCase); + + // + return result; +} + +/** + * determines a content is an string surrounded value or not ... + * + * @param {string} content a content which going to check ... + * @returns + */ +function isSurroundedString(content = '') { + // + // Validate Args ... + if (!isValidArg(content)) { + return false; + } + + // + let result = false; + result = ( + content.startsWith('\'') && + ( + endsWidth('\'', content) || + endsWidth('\',', content) || + endsWidth('\';', content) || + endsWidth('\'\n', content) + ) || + content.startsWith('\"') && + ( + endsWidth('\"', content) || + endsWidth('\",', content) || + endsWidth('\";', content) || + endsWidth('\"\n', content) + ) || + content.startsWith('`') && + ( + endsWidth('\`', content) || + endsWidth('\`,', content) || + endsWidth('\`;', content) || + endsWidth('\`\n', content) + ) + ); + return result; +} + +/** + * check a content is an array content or not ... + * + * @param {string} content + * @returns + */ +function isSurroundedArray(content = '') { + // + // Validate Args ... + if (!isValidArg(content)) { + return false; + } + + // + let result = false; + result = content.startsWith('[') && + ( + endsWidth(']', content) || + endsWidth('],', content) || + endsWidth('];', content) || + endsWidth(']\n', content) + ); + return result; +} + +/** + * check a content is an object content or not ... + * + * @param {string} content + * @returns + */ +function isSurroundedObject(content = '') { + // + // Validate Args ... + if (!isValidArg(content)) { + return false; + } + + // + let result = false; + result = content.startsWith('{') && + ( + endsWidth('}', content) || + endsWidth('},', content) || + endsWidth('};', content) || + endsWidth('}\n', content) + ); + return result; +} + +/** + * check an index model is contains inside anothers or not ... + * + * @param {{ start: number, end: number}} source the source index model to check ... + * @param {...{ start: number, end: number}} dest the collection of index models which going to check ... + * @returns + */ +function isIndexInside(source, ...dest) { + // + let result = false; + + // + // Validate Args ... + if (!source || !dest) { + return result; + } + + // + // Check idx is standard ... + if ( + !source || + !source.end || + !source.start || + source.start > source.end + ) { + return false; + } + + // + // Check types of destinations ... + for (let index of dest) { + // + // Check idx is standard ... + if ( + !index || + !index.end || + !index.start || + index.start > index.end + ) { + return false; + } + } + + // + if (dest.includes(source)) { + dest = dest.filter(d => d !== source); + } + + // + const insideContentIndex = dest.find(dIndex => { + // + const result = source.start >= dIndex.start && + source.start <= dIndex.end && + source.end >= dIndex.start && + source.end <= dIndex.end; + return result; + }); + + // + result = insideContentIndex; + return result; +} + +/** + * check a number exists in + * @param {number} idx the number which going to check ... + * @param {{ start: number, end: number}} index the index model + * @returns + */ +function isInsideIndex(idx = -1, index) { + // + let result = false; + + // + // Validate Args ... + if ( + !index || + !index.hasOwnProperty('end') || + !index.hasOwnProperty('start') + ) { + return result; + } + + // + result = idx > index.start && idx < index.end; + return result; +} + +/** + * determines an object is key/value and type ... + * + * @param {any} content the object which we are going to check ... + * @returns + */ +function isKeyValueType(content) { + // + const result = content && + content.hasOwnProperty('key') && + content.hasOwnProperty('type') && + content.hasOwnProperty('value'); + + // + return result; +} + + + +/** + * find all indexes of token(s) in content ... + * + * @param {string|string[]} tokens the tokens which require to search ... + * @param {string} content the content which using to search ... + * @returns {number[]} all occured indexes ... + */ +function findAllIndexes( + tokens, + content +) { + // + // Validate Args ... + if ( + !isValidArg(tokens) || + !isValidArg(content) + ) { + return []; + } + + // + // normalize tokens ... + const normalTokens = toNormalArray(tokens); + if (!hasChildArray(normalTokens)) { + return []; + } + + // + // Parse contents ... + let match; + const result = []; + const regExp = new RegExp( + normalTokens.join('|'), + 'g' + ); + while ((match = regExp.exec(content)) !== null) { + result.push(match.index); + } + if (!hasChildArray(result)) { + return []; + } + + // + return result; +} + +/** + * find nearest symbol in a content from specified index ... + * + * @param {string|string[]} candidates specifies which symbols to find ... + * @param {string} content te content for seasrch ... + * @param {number} startFromIndex the index of start position ... + * @returns + */ +function findNearest( + candidates, + content = '', + startFromIndex = 0 +) { + // + // Validate Args ... + if ( + !isValidArg(content) || + !isValidArg(candidates) || + !isValidArg(content.trim()) + ) { + return ''; + } + + // + // Normalize Content ... + content = content.trim(); + + // + // Normalize Starts From ... + startFromIndex = startFromIndex < 0 || startFromIndex > content.length - 1 ? 0 : startFromIndex; + + // + // Normalize Symbols ... + const normalCandidates = toNormalArray(candidates); + if (!hasChildArray(normalCandidates)) { + return ''; + } + + // + let nearestIndex = findNearestIndex( + normalCandidates, + content, + startFromIndex + ); + if (nearestIndex < 0) { + return ''; + } + + // + let result = content.substring( + nearestIndex, + nearestIndex + Math.max(...normalCandidates.map(nc => nc.length)) + ).trim(); + return result; +} + +/** + * search candidates in content and find nearest one and return it ... + * + * @param {string|string[]} candidates which candidates required to check ... + * @param {string} content the content which required to search candidates ... + * @param {number} startFromIndex the proposed index to start searching content from on ... + * @returns + */ +function findNearestIndex( + candidates = [''], + content = '', + startFromIndex = 0, + ignoreClosedItems = false +) { + // + // Validate Args ... + if ( + !isValidArg(content) || + !isValidArg(candidates) + ) { + return -1; + } + + // + // Mormalize startFromIndex value ... + startFromIndex = startFromIndex < 0 ? + 0 : + startFromIndex > content.length - 1 ? + content.length - 1 : + startFromIndex; + + // + // Normalize candidates ... + let normalCandidates = toNormalArray(candidates); + + // + if (!!ignoreClosedItems) { + normalCandidates = normalCandidates + .map(c => content.indexOf( + c, + startFromIndex + ) + ).map(c => +c) + .filter(c => +c > -1); + } else { + normalCandidates = findAllIndexesOutOfCloseds(normalCandidates, content) + .filter(c => c >= startFromIndex); + } + if (!hasChildArray(normalCandidates)) { + return -1; + } + + // + let result = -1; + result = Math.min(...normalCandidates); + + // + return result; +} + +/** + * find close index of specific sign in destination content ... + * + * @param {string} openSymbol open of area sign ... + * @param {string} closeSymbol close of area sign ... + * @param {string} content the destination content for parsing ... + * @param {number} startsFrom an start index of content for start parsing ... + * @returns + */ +function findCloseIndex( + openSymbol = '', + closeSymbol = '', + content = '', + startsFrom = -1 +) { + // + // Validate Args ... + if ( + startsFrom < 0 || + !isValidArg(content) || + !isValidArg(openSymbol) || + !isValidArg(closeSymbol) || + openSymbol === closeSymbol || + !content.includes(openSymbol) || + !content.includes(closeSymbol) || + startsFrom > content.length - 1 + ) { + return -1; + } + + // + let result = -1; + + // + let index = startsFrom; + const openSignStack = []; + while (index < content.length) { + // + const openCandidate = content.substring(index, index + openSymbol.length); + const closeCandidate = content.substring(index, index + closeSymbol.length); + + // + if (openCandidate === openSymbol) { + openSignStack.push(index); + } else if (closeCandidate === closeSymbol) { + // + if (openSignStack.length > 0) { + openSignStack.pop(); + } + + // + if (openSignStack.length === 0) { + result = index; + break; + } + } + + // + index++; + } + + // + return result; +} + +/** + * find closed contents of specific sign in destination content ... + * + * @param {string} openSymbol open of area sign ... + * @param {string} closeSymbol close of area sign ... + * @param {string} content the destination content for parsing ... + * @param {number} startsFrom an start index of content for start parsing ... + * @returns + */ +function findClosedContent( + openSymbol = '', + closeSymbol = '', + content = '', + startsFrom = 0, +) { + // + let result = [{ + start: -1, + end: -1, + content: '' + }]; + result.pop(); + + // + // Validate Args ... + if ( + !isValidArg(content) || + !isValidArg(openSymbol) || + !isValidArg(closeSymbol) || + !content.includes(openSymbol) || + !content.includes(closeSymbol) || + openSymbol.length >= content.length || + closeSymbol.length >= content.length + ) { + return result; + } + + // + // Normalize Start From ... + startsFrom = startsFrom < 0 || startsFrom >= content.length ? 0 : startsFrom; + + // + let canContinue = true; + while (!!canContinue) { + // + let openSymbolIndex = content.indexOf(openSymbol, startsFrom); + if (openSymbolIndex < 0) { + // + canContinue = false; + continue; + } + + // + let closeSymbolIndex = findCloseIndex( + openSymbol, + closeSymbol, + content, + openSymbolIndex + ); + if (closeSymbolIndex < 0) { + // + canContinue = false; + continue; + } + if (content.charAt(closeSymbolIndex) !== closeSymbol) { + closeSymbolIndex++; + } + + // + // Prevent ${} string interpolations ... + if ( + openSymbol === '{' && + openSymbolIndex - 1 >= 0 + ) { + // + const prevChar = content.charAt(openSymbolIndex - 1); + if (prevChar === '$') { + continue; + } + } + + // + const item = content + .substring(openSymbolIndex, closeSymbolIndex + 1) + .trim(); + startsFrom = closeSymbolIndex + 1; + result.push({ + start: openSymbolIndex, + end: closeSymbolIndex, + content: item + }); + } + + // + if (!hasChildArray(result)) { + return result; + } + + // + return result; +} + +/** + * extract a collection of closed contents exists in a content ... + * + * @param symbols a collection of open and close contents ... + * @param {string} content a content for searching inside it ... + * @returns a collection of closed content ... + */ +function findClosedContents( + symbols = [ + { + openSymbol: '', + closeSymbol: '' + } + ], + content = '' +) { + // + let result = [{ + start: -1, + end: -1, + content: '' + }]; + result.pop(); + + // + if ( + !isValidArg(content) || + !hasChildArray(symbols) + ) { + return []; + } + + // + symbols.forEach(symbol => { + // + const closedContent = findClosedContent( + symbol.openSymbol, + symbol.closeSymbol, + content + ); + + // + if (hasChildArray(closedContent)) { + result.push( + ...closedContent + ); + } + }); + + // + return result; +} + +/** + * find all string content closed items ... + * + * @param {string} content a content which going to search ... + * @returns a collection of index descriptors ... + */ +function findClosedStrings(content = '') { + // + // Validate Args ... + if (!isValidArg(content)) { + return []; + } + + // + // there are 3 types of strings ... + // ' " and ` + + // + const token1 = '\''; + const token1Stack = [0]; + token1Stack.pop(); + + // + const token2 = '"'; + const token2Stack = [0]; + token2Stack.pop(); + + // + const token3 = '`'; + const token3Stack = [0]; + token3Stack.pop(); + + // + const result = [ + { + start: -1, + end: -1, + content: '' + } + ]; + result.pop(); + + // + for (let i = 0; i < content.length; i++) { + // + const currentChart = content.charAt(i); + + // + //#region Token 1 ... + if (currentChart === token1) { + // + if (!hasChildArray(token1Stack)) { + token1Stack.push(i); + } else { + // + const start = token1Stack.pop(); + const end = i + 1; + const pContent = content.substring(start, end); + result.push({ + start, + end, + content: pContent + }); + } + } + //#endregion + + // + //#region Token 2 ... + if (currentChart === token2) { + // + if (!hasChildArray(token2Stack)) { + token2Stack.push(i); + } else { + // + const start = token2Stack.pop(); + const end = i + 1; + const pContent = content.substring(start, end); + result.push({ + start, + end, + content: pContent + }); + } + } + //#endregion + + // + //#region Token 3 ... + if (currentChart === token3) { + // + if (!hasChildArray(token3Stack)) { + token3Stack.push(i); + } else { + // + const start = token3Stack.pop(); + const end = i + 1; + const pContent = content.substring(start, end); + result.push({ + start, + end, + content: pContent + }); + } + } + //#endregion + } + + // + return result; +} + +/** + * find container indexes from within indexes ... + * + * @param {...{start: number, end: number}} index the collection of indexes to find beiggers inside ... + * @returns + */ +function findContainerIndexes(...index) { + // + let result = [ + { + start: -1, + end: -1, + content: '' + } + ]; + result.pop(); + + // + let concatedIndexes = []; + for (let idx of index) { + // + // Index Childs ... + for (let iix of idx) { + // + // Check idx is standard ... + if ( + !iix || + !iix.end || + !iix.start || + iix.start > iix.end + ) { + continue; + } + + // + // Check index inside another index ... + concatedIndexes.push(iix); + } + } + + // + if (!hasChildArray(concatedIndexes)) { + return result; + } + + // + for (let ccIdx of concatedIndexes) { + // + const isInside = isIndexInside(ccIdx, ...concatedIndexes); + if (isInside) { + continue; + } + + // + if (hasChildArray(result)) { + // + const isInsideResult = isIndexInside(ccIdx, ...result); + if (isInsideResult) { + continue; + } + } + + // + result.push(ccIdx); + } + + // + return result; +} + +/** + * find all tokens indexes inside a content which they are not inside closed items ... + * + * @param {string|string[]} tokens the tokens which require to search ... + * @param {string} content the content which using to search ... + * @returns + */ +function findAllIndexesOutOfCloseds1( + tokens, + content, +) { + // + // Validate Args ... + if (!isValidArg(content)) { + return []; + } + + // + // Extract token Indexes ... + const tokensIndexes = findAllIndexes(tokens, content); + if (!hasChildArray(tokensIndexes)) { + return []; + } + + // + // Extract Closed Objects Indexes ... + const closedArrays = findClosedContent('[', ']', content); + const closedObjects = findClosedContent('{', '}', content); + const closedStrings = findClosedStrings(content); + if ( + !hasChildArray(closedObjects) && + !hasChildArray(closedArrays) && + !hasChildArray(closedStrings) + ) { + return tokensIndexes; + } + + // + // find bigger sloded ... + let containerClosedItems = findContainerIndexes( + closedArrays, + closedObjects, + closedStrings + ).filter(i => !isSurroundedString(i.content)); + + // + let result = [-1]; + result.pop(); + + // + for (let tIdx of tokensIndexes) { + // + let canAdd = true; + for (let ccIndex of containerClosedItems) { + // + canAdd = isInsideIndex(tIdx, ccIndex); + if (canAdd) { + break; + } + } + + // + if (!canAdd) { + result.push(tIdx); + } + } + + // + return result; +} + +/** + * find all tokens indexes inside a content which they are not inside closed items ... + * + * @param {string|string[]} tokens the tokens which require to search ... + * @param {string} content the content which using to search ... + * @returns + */ +function findAllIndexesOutOfCloseds( + tokens, + content, +) { + // + // Define Result ... + let result = [-1]; + result.pop(); + + // + // Validate Args ... + if (!isValidArg(content)) { + return []; + } + + // + // Normalize Tokens ... + const normalizeTokens = toNormalArray(tokens); + if (!hasChildArray(normalizeTokens)) { + return result; + } + + // + // Extract Closed Objects Indexes ... + let openSymbols = [ + '{', + '[', + '\'', + '"', + '`' + ]; + let closeSymbols = [ + '}', + ']', + '\'', + '"', + '`' + ]; + let openStack = []; + let lastOpenSymbol = ''; + let lastClosedIndex = -1; + for (let i = 0; i < content.length; i++) { + // + const prevChar = content.charAt(i - 1) || ''; + const char = content.charAt(i); + const nextChar = content.charAt(i + 1) || ''; + + // + const isToken = normalizeTokens.includes(char); + const isOpenSymbol = openSymbols.includes(char); + const isCloseSymbol = closeSymbols.includes(char); + + // + if (isOpenSymbol && lastOpenSymbol !== char) { + openStack.push(i); + lastOpenSymbol = char === '\'' || char === '"' || char === '`' ? char : lastOpenSymbol; + } else if (isCloseSymbol) { + // + lastOpenSymbol = char === '\'' || char === '"' || char === '`' ? '' : lastOpenSymbol; + let lastPop = openStack.pop(); + if (openStack.length === 0) { + lastClosedIndex = lastPop; + } + } else if (isToken) { + if ( + i > lastClosedIndex && + openStack.length === 0 + ) { + result.push(i); + } + } + } + + // + return result; +} +//#endregion + +// +//#region Validator Actions ... +/** + * check specified value is Valid URL Address or not ... + * + * @param {string} value specified string which required to check + * @returns {boolean} + */ +function isValidURL(value = "") { + // + if (!isValidArg(value)) { + return false; + } + + const pattern = new RegExp( + '^([a-zA-Z]+:\\/\\/)?' + // protocol + '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name + '((\\d{1,3}\\.){3}\\d{1,3}))' + // OR IP (v4) address + '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path + '(\\?[;&a-z\\d%_.~+=-]*)?' + // query string + '(\\#[-a-z\\d_]*)?$', // fragment locator + 'i' + ); + + // + const result = pattern.test(value); + return result; +} + +/** + * check specified value is Valid URL Address or not ... + * + * @param {string} value specified string which required to check + */ +function isValidEmail(value = "") { + // + if (!isValidArg(value)) { + return false; + } + + // + const pattern = /[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}/gim; + + // + const result = pattern.test(value); + return result; +} +//#endregion + +// +//#region Normallizers ... +/** + * normallize an string ... + * + * @param {string} value specified value ... + * @returns {string} + */ +function toNormalString(value = "") { + // + if (!XTypeTools.isString(value)) { + value = ""; + } + + // + const result = value + .trim() + .toLowerCase(); + + // + return result; +} +//#endregion + +// +//#region Beautifiers ... +/** + * converts an object to string based on json and beautify result ... + * + * @param {any} object + * @returns {string} + */ +function beautifyJSON(object = undefined) { + // + // TODO: Complete this ... + let result = ""; + + // + // validate object ... + if (object === undefined) { + return result; + } + + // + // Convert result ... + result = JSON.stringify( + object, + null, + 4 + ); + + // + return result; +} +//#endregion + +// +//#region Module Exports ... +module.exports = { + // + endsWidth, + surroundBy, + isValidArg, + isValidArgs, + toNormalArray, + hasChildArray, + toStringExpression, + + // + sliceContent, + clearContent, + clearSurround, + clearArraySurround, + clearObjectSurround, + + // + isSurrounded, + isIndexInside, + isInsideIndex, + isKeyValueType, + isSurroundedArray, + isSurroundedString, + isSurroundedObject, + + // + findNearest, + findAllIndexes, + findCloseIndex, + findNearestIndex, + findClosedContent, + findClosedStrings, + findClosedContents, + findAllIndexesOutOfCloseds, + + // + // Validator Actions ... + isValidURL, + isValidEmail, + + // + // Normallizers ... + toNormalString, + + // + beautifyJSON, +} +//#endregion \ No newline at end of file diff --git a/MQLTestWorkspace/BKPS/Old/Documents/Temp/multi.asset.configs.yml b/MQLTestWorkspace/BKPS/Old/Documents/Temp/multi.asset.configs.yml new file mode 100644 index 0000000..79e0ba7 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Documents/Temp/multi.asset.configs.yml @@ -0,0 +1 @@ +EURUSDb,GBPUSDb,USDJPYb,USDCHFb,XAUUSDb|M5,M15|0.01|X786|true \ No newline at end of file diff --git a/MQLTestWorkspace/BKPS/Old/Documents/Templates/arrays.price.mq5 b/MQLTestWorkspace/BKPS/Old/Documents/Templates/arrays.price.mq5 new file mode 100644 index 0000000..6389481 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Documents/Templates/arrays.price.mq5 @@ -0,0 +1,22 @@ + const int rates_total, // total calculated Candles on charts ... + const int prev_calculated, // total calculated Candles on charts ... + const datetime &time[], // history of Candles Open Time ... + const double &open[], // history of Candles Open Price ... + const double &high[], // history of Candles High Price ... + const double &low[], // history of Candles Low Price ... + const double &close[], // history of Candles Close Price ... + const long &tick_volume[], // history of Tick Volumes on Candle ... + const long &volume[], // history of Trade Volumes ... + const int &spread[] // history of Candles Spread Price ... + + + // // + // // XICH ... + // string ich = + // // + // "" + "\n" + + // "-------------" + "\n" + + // (( || !ignoreFalseConditions) ? ": " + ToString() + "\n" : "") + + // "\n" + // // + // ; diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMACD.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMACD.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..ea91c438e4cb32ef14c37128f1aad67569f88090 GIT binary patch literal 141724 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%0A61ZqQrUq%p*lWqQz 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 +#include +#include +#include +//+------------------------------------------------------------------+ +//| Inputs | +//+------------------------------------------------------------------+ +//--- inputs for expert +input string Inp_Expert_Title ="ExpertMACD"; +int Expert_MagicNumber =10981; +bool Expert_EveryTick =false; +//--- inputs for signal +input int Inp_Signal_MACD_PeriodFast =12; +input int Inp_Signal_MACD_PeriodSlow =24; +input int Inp_Signal_MACD_PeriodSignal=9; +input int Inp_Signal_MACD_TakeProfit =50; +input int Inp_Signal_MACD_StopLoss =20; +//+------------------------------------------------------------------+ +//| Global expert object | +//+------------------------------------------------------------------+ +CExpert ExtExpert; +//+------------------------------------------------------------------+ +//| Initialization function of the expert | +//+------------------------------------------------------------------+ +int OnInit(void) + { +//--- Initializing expert + if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) + { + //--- failed + printf(__FUNCTION__+": error initializing expert"); + ExtExpert.Deinit(); + return(-1); + } +//--- Creation of signal object + CSignalMACD *signal=new CSignalMACD; + if(signal==NULL) + { + //--- failed + printf(__FUNCTION__+": error creating signal"); + ExtExpert.Deinit(); + return(-2); + } +//--- Add signal to expert (will be deleted automatically)) + if(!ExtExpert.InitSignal(signal)) + { + //--- failed + printf(__FUNCTION__+": error initializing signal"); + ExtExpert.Deinit(); + return(-3); + } +//--- Set signal parameters + signal.PeriodFast(Inp_Signal_MACD_PeriodFast); + signal.PeriodSlow(Inp_Signal_MACD_PeriodSlow); + signal.PeriodSignal(Inp_Signal_MACD_PeriodSignal); + signal.TakeLevel(Inp_Signal_MACD_TakeProfit); + signal.StopLevel(Inp_Signal_MACD_StopLoss); +//--- Check signal parameters + if(!signal.ValidationSettings()) + { + //--- failed + printf(__FUNCTION__+": error signal parameters"); + ExtExpert.Deinit(); + return(-4); + } +//--- Creation of trailing object + CTrailingNone *trailing=new CTrailingNone; + if(trailing==NULL) + { + //--- failed + printf(__FUNCTION__+": error creating trailing"); + ExtExpert.Deinit(); + return(-5); + } +//--- Add trailing to expert (will be deleted automatically)) + if(!ExtExpert.InitTrailing(trailing)) + { + //--- failed + printf(__FUNCTION__+": error initializing trailing"); + ExtExpert.Deinit(); + return(-6); + } +//--- Set trailing parameters +//--- Check trailing parameters + if(!trailing.ValidationSettings()) + { + //--- failed + printf(__FUNCTION__+": error trailing parameters"); + ExtExpert.Deinit(); + return(-7); + } +//--- Creation of money object + CMoneyNone *money=new CMoneyNone; + if(money==NULL) + { + //--- failed + printf(__FUNCTION__+": error creating money"); + ExtExpert.Deinit(); + return(-8); + } +//--- Add money to expert (will be deleted automatically)) + if(!ExtExpert.InitMoney(money)) + { + //--- failed + printf(__FUNCTION__+": error initializing money"); + ExtExpert.Deinit(); + return(-9); + } +//--- Set money parameters +//--- Check money parameters + if(!money.ValidationSettings()) + { + //--- failed + printf(__FUNCTION__+": error money parameters"); + ExtExpert.Deinit(); + return(-10); + } +//--- Tuning of all necessary indicators + if(!ExtExpert.InitIndicators()) + { + //--- failed + printf(__FUNCTION__+": error initializing indicators"); + ExtExpert.Deinit(); + return(-11); + } +//--- succeed + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Deinitialization function of the expert | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { + ExtExpert.Deinit(); + } +//+------------------------------------------------------------------+ +//| Function-event handler "tick" | +//+------------------------------------------------------------------+ +void OnTick(void) + { + ExtExpert.OnTick(); + } +//+------------------------------------------------------------------+ +//| Function-event handler "trade" | +//+------------------------------------------------------------------+ +void OnTrade(void) + { + ExtExpert.OnTrade(); + } +//+------------------------------------------------------------------+ +//| Function-event handler "timer" | +//+------------------------------------------------------------------+ +void OnTimer(void) + { + ExtExpert.OnTimer(); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAMA.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAMA.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..6ec34be76263326e966edf9641ba358c8695b856 GIT binary patch literal 149930 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

Buy_Ez0*wnzt1&hV7dRJ0D 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≧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®F%^X!1 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 FKLMRt*TMh* literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAMA.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAMA.mq5 new file mode 100644 index 0000000..8fa819d --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAMA.mq5 @@ -0,0 +1,175 @@ +//+------------------------------------------------------------------+ +//| ExpertMAMA.mq5 | +//| Copyright 2000-2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2000-2024, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" +//+------------------------------------------------------------------+ +//| Include | +//+------------------------------------------------------------------+ +#include +#include +#include +#include +//+------------------------------------------------------------------+ +//| Inputs | +//+------------------------------------------------------------------+ +//--- inputs for expert +input string Inp_Expert_Title ="ExpertMAMA"; +int Expert_MagicNumber =12003; +bool Expert_EveryTick =false; +//--- inputs for signal +input int Inp_Signal_MA_Period =12; +input int Inp_Signal_MA_Shift =6; +input ENUM_MA_METHOD Inp_Signal_MA_Method =MODE_SMA; +input ENUM_APPLIED_PRICE Inp_Signal_MA_Applied =PRICE_CLOSE; +//--- inputs for trailing +input int Inp_Trailing_MA_Period =12; +input int Inp_Trailing_MA_Shift =0; +input ENUM_MA_METHOD Inp_Trailing_MA_Method =MODE_SMA; +input ENUM_APPLIED_PRICE Inp_Trailing_MA_Applied=PRICE_CLOSE; +//+------------------------------------------------------------------+ +//| Global expert object | +//+------------------------------------------------------------------+ +CExpert ExtExpert; +//+------------------------------------------------------------------+ +//| Initialization function of the expert | +//+------------------------------------------------------------------+ +int OnInit(void) + { +//--- Initializing expert + if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) + { + //--- failed + printf(__FUNCTION__+": error initializing expert"); + ExtExpert.Deinit(); + return(-1); + } +//--- Creation of signal object + CSignalMA *signal=new CSignalMA; + if(signal==NULL) + { + //--- failed + printf(__FUNCTION__+": error creating signal"); + ExtExpert.Deinit(); + return(-2); + } +//--- Add signal to expert (will be deleted automatically)) + if(!ExtExpert.InitSignal(signal)) + { + //--- failed + printf(__FUNCTION__+": error initializing signal"); + ExtExpert.Deinit(); + return(-3); + } +//--- Set signal parameters + signal.PeriodMA(Inp_Signal_MA_Period); + signal.Shift(Inp_Signal_MA_Shift); + signal.Method(Inp_Signal_MA_Method); + signal.Applied(Inp_Signal_MA_Applied); +//--- Check signal parameters + if(!signal.ValidationSettings()) + { + //--- failed + printf(__FUNCTION__+": error signal parameters"); + ExtExpert.Deinit(); + return(-4); + } +//--- Creation of trailing object + CTrailingMA *trailing=new CTrailingMA; + if(trailing==NULL) + { + //--- failed + printf(__FUNCTION__+": error creating trailing"); + ExtExpert.Deinit(); + return(-5); + } +//--- Add trailing to expert (will be deleted automatically)) + if(!ExtExpert.InitTrailing(trailing)) + { + //--- failed + printf(__FUNCTION__+": error initializing trailing"); + ExtExpert.Deinit(); + return(-6); + } +//--- Set trailing parameters + trailing.Period(Inp_Trailing_MA_Period); + trailing.Shift(Inp_Trailing_MA_Shift); + trailing.Method(Inp_Trailing_MA_Method); + trailing.Applied(Inp_Trailing_MA_Applied); +//--- Check trailing parameters + if(!trailing.ValidationSettings()) + { + //--- failed + printf(__FUNCTION__+": error trailing parameters"); + ExtExpert.Deinit(); + return(-7); + } +//--- Creation of money object + CMoneyNone *money=new CMoneyNone; + if(money==NULL) + { + //--- failed + printf(__FUNCTION__+": error creating money"); + ExtExpert.Deinit(); + return(-8); + } +//--- Add money to expert (will be deleted automatically)) + if(!ExtExpert.InitMoney(money)) + { + //--- failed + printf(__FUNCTION__+": error initializing money"); + ExtExpert.Deinit(); + return(-9); + } +//--- Set money parameters +//--- Check money parameters + if(!money.ValidationSettings()) + { + //--- failed + printf(__FUNCTION__+": error money parameters"); + ExtExpert.Deinit(); + return(-10); + } +//--- Tuning of all necessary indicators + if(!ExtExpert.InitIndicators()) + { + //--- failed + printf(__FUNCTION__+": error initializing indicators"); + ExtExpert.Deinit(); + return(-11); + } +//--- succeed + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Deinitialization function of the expert | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { + ExtExpert.Deinit(); + } +//+------------------------------------------------------------------+ +//| Function-event handler "tick" | +//+------------------------------------------------------------------+ +void OnTick(void) + { + ExtExpert.OnTick(); + } +//+------------------------------------------------------------------+ +//| Function-event handler "trade" | +//+------------------------------------------------------------------+ +void OnTrade(void) + { + ExtExpert.OnTrade(); + } +//+------------------------------------------------------------------+ +//| Function-event handler "timer" | +//+------------------------------------------------------------------+ +void OnTimer(void) + { + ExtExpert.OnTimer(); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAPSAR.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAPSAR.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..7f1e1c2c379054a8aa9dda5f9815a9dbd3f8308c GIT binary patch literal 147206 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�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 literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAPSAR.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAPSAR.mq5 new file mode 100644 index 0000000..eed021a --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAPSAR.mq5 @@ -0,0 +1,171 @@ +//+------------------------------------------------------------------+ +//| ExpertMAPSAR.mq5 | +//| Copyright 2000-2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2000-2024, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" +//+------------------------------------------------------------------+ +//| Include | +//+------------------------------------------------------------------+ +#include +#include +#include +#include +//+------------------------------------------------------------------+ +//| Inputs | +//+------------------------------------------------------------------+ +//--- inputs for expert +input string Inp_Expert_Title ="ExpertMAPSAR"; +int Expert_MagicNumber =14598; +bool Expert_EveryTick =false; +//--- inputs for signal +input int Inp_Signal_MA_Period =12; +input int Inp_Signal_MA_Shift =6; +input ENUM_MA_METHOD Inp_Signal_MA_Method =MODE_SMA; +input ENUM_APPLIED_PRICE Inp_Signal_MA_Applied =PRICE_CLOSE; +//--- inputs for trailing +input double Inp_Trailing_ParabolicSAR_Step =0.02; +input double Inp_Trailing_ParabolicSAR_Maximum=0.2; +//+------------------------------------------------------------------+ +//| Global expert object | +//+------------------------------------------------------------------+ +CExpert ExtExpert; +//+------------------------------------------------------------------+ +//| Initialization function of the expert | +//+------------------------------------------------------------------+ +int OnInit(void) + { +//--- Initializing expert + if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) + { + //--- failed + printf(__FUNCTION__+": error initializing expert"); + ExtExpert.Deinit(); + return(-1); + } +//--- Creation of signal object + CSignalMA *signal=new CSignalMA; + if(signal==NULL) + { + //--- failed + printf(__FUNCTION__+": error creating signal"); + ExtExpert.Deinit(); + return(-2); + } +//--- Add signal to expert (will be deleted automatically)) + if(!ExtExpert.InitSignal(signal)) + { + //--- failed + printf(__FUNCTION__+": error initializing signal"); + ExtExpert.Deinit(); + return(-3); + } +//--- Set signal parameters + signal.PeriodMA(Inp_Signal_MA_Period); + signal.Shift(Inp_Signal_MA_Shift); + signal.Method(Inp_Signal_MA_Method); + signal.Applied(Inp_Signal_MA_Applied); +//--- Check signal parameters + if(!signal.ValidationSettings()) + { + //--- failed + printf(__FUNCTION__+": error signal parameters"); + ExtExpert.Deinit(); + return(-4); + } +//--- Creation of trailing object + CTrailingPSAR *trailing=new CTrailingPSAR; + if(trailing==NULL) + { + //--- failed + printf(__FUNCTION__+": error creating trailing"); + ExtExpert.Deinit(); + return(-5); + } +//--- Add trailing to expert (will be deleted automatically)) + if(!ExtExpert.InitTrailing(trailing)) + { + //--- failed + printf(__FUNCTION__+": error initializing trailing"); + ExtExpert.Deinit(); + return(-6); + } +//--- Set trailing parameters + trailing.Step(Inp_Trailing_ParabolicSAR_Step); + trailing.Maximum(Inp_Trailing_ParabolicSAR_Maximum); +//--- Check trailing parameters + if(!trailing.ValidationSettings()) + { + //--- failed + printf(__FUNCTION__+": error trailing parameters"); + ExtExpert.Deinit(); + return(-7); + } +//--- Creation of money object + CMoneyNone *money=new CMoneyNone; + if(money==NULL) + { + //--- failed + printf(__FUNCTION__+": error creating money"); + ExtExpert.Deinit(); + return(-8); + } +//--- Add money to expert (will be deleted automatically)) + if(!ExtExpert.InitMoney(money)) + { + //--- failed + printf(__FUNCTION__+": error initializing money"); + ExtExpert.Deinit(); + return(-9); + } +//--- Set money parameters +//--- Check money parameters + if(!money.ValidationSettings()) + { + //--- failed + printf(__FUNCTION__+": error money parameters"); + ExtExpert.Deinit(); + return(-10); + } +//--- Tuning of all necessary indicators + if(!ExtExpert.InitIndicators()) + { + //--- failed + printf(__FUNCTION__+": error initializing indicators"); + ExtExpert.Deinit(); + return(-11); + } +//--- succeed + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Deinitialization function of the expert | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { + ExtExpert.Deinit(); + } +//+------------------------------------------------------------------+ +//| Function-event handler "tick" | +//+------------------------------------------------------------------+ +void OnTick(void) + { + ExtExpert.OnTick(); + } +//+------------------------------------------------------------------+ +//| Function-event handler "trade" | +//+------------------------------------------------------------------+ +void OnTrade(void) + { + ExtExpert.OnTrade(); + } +//+------------------------------------------------------------------+ +//| Function-event handler "timer" | +//+------------------------------------------------------------------+ +void OnTimer(void) + { + ExtExpert.OnTimer(); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAPSARSizeOptimized.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Advisors/ExpertMAPSARSizeOptimized.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..08efe3a489e438473e47e3604d1d670e07dfd482 GIT binary patch literal 151292 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

+Uw>Zef@u775)F`1U_oIxflRa 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

1n=ak=G^s^`E+D!gaqC3CAJc7>l+j%^l-5riR! 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 +#include +#include +#include +//+------------------------------------------------------------------+ +//| Inputs | +//+------------------------------------------------------------------+ +//--- inputs for expert +input string Inp_Expert_Title ="ExpertMAPSARSizeOptimized"; +int Expert_MagicNumber =27893; +bool Expert_EveryTick =false; +//--- inputs for signal +input int Inp_Signal_MA_Period =12; +input int Inp_Signal_MA_Shift =6; +input ENUM_MA_METHOD Inp_Signal_MA_Method =MODE_SMA; +input ENUM_APPLIED_PRICE Inp_Signal_MA_Applied =PRICE_CLOSE; +//--- inputs for trailing +input double Inp_Trailing_ParabolicSAR_Step =0.02; +input double Inp_Trailing_ParabolicSAR_Maximum =0.2; +//--- inputs for money +input double Inp_Money_SizeOptimized_DecreaseFactor=3.0; +input double Inp_Money_SizeOptimized_Percent =10.0; +//+------------------------------------------------------------------+ +//| Global expert object | +//+------------------------------------------------------------------+ +CExpert ExtExpert; +//+------------------------------------------------------------------+ +//| Initialization function of the expert | +//+------------------------------------------------------------------+ +int OnInit(void) + { +//--- Initializing expert + if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) + { + //--- failed + printf(__FUNCTION__+": error initializing expert"); + ExtExpert.Deinit(); + return(-1); + } +//--- Creation of signal object + CSignalMA *signal=new CSignalMA; + if(signal==NULL) + { + //--- failed + printf(__FUNCTION__+": error creating signal"); + ExtExpert.Deinit(); + return(-2); + } +//--- Add signal to expert (will be deleted automatically)) + if(!ExtExpert.InitSignal(signal)) + { + //--- failed + printf(__FUNCTION__+": error initializing signal"); + ExtExpert.Deinit(); + return(-3); + } +//--- Set signal parameters + signal.PeriodMA(Inp_Signal_MA_Period); + signal.Shift(Inp_Signal_MA_Shift); + signal.Method(Inp_Signal_MA_Method); + signal.Applied(Inp_Signal_MA_Applied); +//--- Check signal parameters + if(!signal.ValidationSettings()) + { + //--- failed + printf(__FUNCTION__+": error signal parameters"); + ExtExpert.Deinit(); + return(-4); + } +//--- Creation of trailing object + CTrailingPSAR *trailing=new CTrailingPSAR; + if(trailing==NULL) + { + //--- failed + printf(__FUNCTION__+": error creating trailing"); + ExtExpert.Deinit(); + return(-5); + } +//--- Add trailing to expert (will be deleted automatically)) + if(!ExtExpert.InitTrailing(trailing)) + { + //--- failed + printf(__FUNCTION__+": error initializing trailing"); + ExtExpert.Deinit(); + return(-6); + } +//--- Set trailing parameters + trailing.Step(Inp_Trailing_ParabolicSAR_Step); + trailing.Maximum(Inp_Trailing_ParabolicSAR_Maximum); +//--- Check trailing parameters + if(!trailing.ValidationSettings()) + { + //--- failed + printf(__FUNCTION__+": error trailing parameters"); + ExtExpert.Deinit(); + return(-7); + } +//--- Creation of money object + CMoneySizeOptimized *money=new CMoneySizeOptimized; + if(money==NULL) + { + //--- failed + printf(__FUNCTION__+": error creating money"); + ExtExpert.Deinit(); + return(-8); + } +//--- Add money to expert (will be deleted automatically)) + if(!ExtExpert.InitMoney(money)) + { + //--- failed + printf(__FUNCTION__+": error initializing money"); + ExtExpert.Deinit(); + return(-9); + } +//--- Set money parameters + money.DecreaseFactor(Inp_Money_SizeOptimized_DecreaseFactor); + money.Percent(Inp_Money_SizeOptimized_Percent); +//--- Check money parameters + if(!money.ValidationSettings()) + { + //--- failed + printf(__FUNCTION__+": error money parameters"); + ExtExpert.Deinit(); + return(-10); + } +//--- Tuning of all necessary indicators + if(!ExtExpert.InitIndicators()) + { + //--- failed + printf(__FUNCTION__+": error initializing indicators"); + ExtExpert.Deinit(); + return(-11); + } +//--- succeed + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Deinitialization function of the expert | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { + ExtExpert.Deinit(); + } +//+------------------------------------------------------------------+ +//| Function-event handler "tick" | +//+------------------------------------------------------------------+ +void OnTick(void) + { + ExtExpert.OnTick(); + } +//+------------------------------------------------------------------+ +//| Function-event handler "trade" | +//+------------------------------------------------------------------+ +void OnTrade(void) + { + ExtExpert.OnTrade(); + } +//+------------------------------------------------------------------+ +//| Function-event handler "timer" | +//+------------------------------------------------------------------+ +void OnTimer(void) + { + ExtExpert.OnTimer(); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/ChartInChart/ChartInChart.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Examples/ChartInChart/ChartInChart.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..4dd3519e99dc7dca4d4bb0e3bd6313b2b4f19592 GIT binary patch literal 17810 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 literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/ChartInChart/ChartInChart.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Examples/ChartInChart/ChartInChart.mq5 new file mode 100644 index 0000000000000000000000000000000000000000..8bfcab0591f3e18010fd13c91d94eaae4044ffdc GIT binary patch literal 30544 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 Xt&2%zgymn2H03ugH7+=tG3x&T{t=c0 literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Controls/Controls.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Controls/Controls.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..397ae19237f2a54970685be0fe5622f3c448f46a GIT binary patch literal 181718 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�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μ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 +#include +#include +#include +#include +#include +#include +#include +#include +//+------------------------------------------------------------------+ +//| defines | +//+------------------------------------------------------------------+ +//--- indents and gaps +#define INDENT_LEFT (11) // indent from left (with allowance for border width) +#define INDENT_TOP (11) // indent from top (with allowance for border width) +#define INDENT_RIGHT (11) // indent from right (with allowance for border width) +#define INDENT_BOTTOM (11) // indent from bottom (with allowance for border width) +#define CONTROLS_GAP_X (5) // gap by X coordinate +#define CONTROLS_GAP_Y (5) // gap by Y coordinate +//--- for buttons +#define BUTTON_WIDTH (100) // size by X coordinate +#define BUTTON_HEIGHT (20) // size by Y coordinate +//--- for the indication area +#define EDIT_HEIGHT (20) // size by Y coordinate +//--- for group controls +#define GROUP_WIDTH (150) // size by X coordinate +#define LIST_HEIGHT (179) // size by Y coordinate +#define RADIO_HEIGHT (56) // size by Y coordinate +#define CHECK_HEIGHT (93) // size by Y coordinate +//+------------------------------------------------------------------+ +//| Class CControlsDialog | +//| Usage: main dialog of the Controls application | +//+------------------------------------------------------------------+ +class CControlsDialog : public CAppDialog + { +private: + CEdit m_edit; // the display field object + CButton m_button1; // the button object + CButton m_button2; // the button object + CButton m_button3; // the fixed button object + CSpinEdit m_spin_edit; // the up-down object + CDatePicker m_date; // the datepicker object + CListView m_list_view; // the list object + CComboBox m_combo_box; // the dropdown list object + CRadioGroup m_radio_group; // the radio buttons group object + CCheckGroup m_check_group; // the check box group object + +public: + CControlsDialog(void); + ~CControlsDialog(void); + //--- create + virtual bool Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2); + //--- chart event handler + virtual bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam); + +protected: + //--- create dependent controls + bool CreateEdit(void); + bool CreateButton1(void); + bool CreateButton2(void); + bool CreateButton3(void); + bool CreateSpinEdit(void); + bool CreateDate(void); + bool CreateListView(void); + bool CreateComboBox(void); + bool CreateRadioGroup(void); + bool CreateCheckGroup(void); + //--- handlers of the dependent controls events + void OnClickButton1(void); + void OnClickButton2(void); + void OnClickButton3(void); + void OnChangeSpinEdit(void); + void OnChangeDate(void); + void OnChangeListView(void); + void OnChangeComboBox(void); + void OnChangeRadioGroup(void); + void OnChangeCheckGroup(void); + }; +//+------------------------------------------------------------------+ +//| Event Handling | +//+------------------------------------------------------------------+ +EVENT_MAP_BEGIN(CControlsDialog) + ON_EVENT(ON_CLICK,m_button1,OnClickButton1) + ON_EVENT(ON_CLICK,m_button2,OnClickButton2) + ON_EVENT(ON_CLICK,m_button3,OnClickButton3) + ON_EVENT(ON_CHANGE,m_spin_edit,OnChangeSpinEdit) + ON_EVENT(ON_CHANGE,m_date,OnChangeDate) + ON_EVENT(ON_CHANGE,m_list_view,OnChangeListView) + ON_EVENT(ON_CHANGE,m_combo_box,OnChangeComboBox) + ON_EVENT(ON_CHANGE,m_radio_group,OnChangeRadioGroup) + ON_EVENT(ON_CHANGE,m_check_group,OnChangeCheckGroup) +EVENT_MAP_END(CAppDialog) +//+------------------------------------------------------------------+ +//| Constructor | +//+------------------------------------------------------------------+ +CControlsDialog::CControlsDialog(void) + { + } +//+------------------------------------------------------------------+ +//| Destructor | +//+------------------------------------------------------------------+ +CControlsDialog::~CControlsDialog(void) + { + } +//+------------------------------------------------------------------+ +//| Create | +//+------------------------------------------------------------------+ +bool CControlsDialog::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2) + { + if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2)) + return(false); +//--- create dependent controls + if(!CreateEdit()) + return(false); + if(!CreateButton1()) + return(false); + if(!CreateButton2()) + return(false); + if(!CreateButton3()) + return(false); + if(!CreateSpinEdit()) + return(false); + if(!CreateListView()) + return(false); + if(!CreateDate()) + return(false); + if(!CreateRadioGroup()) + return(false); + if(!CreateCheckGroup()) + return(false); + if(!CreateComboBox()) + return(false); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Create the display field | +//+------------------------------------------------------------------+ +bool CControlsDialog::CreateEdit(void) + { +//--- coordinates + int x1=INDENT_LEFT; + int y1=INDENT_TOP; + int x2=ClientAreaWidth()-INDENT_RIGHT; + int y2=y1+EDIT_HEIGHT; +//--- create + if(!m_edit.Create(m_chart_id,m_name+"Edit",m_subwin,x1,y1,x2,y2)) + return(false); + if(!m_edit.ReadOnly(true)) + return(false); + if(!Add(m_edit)) + return(false); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Create the "Button1" button | +//+------------------------------------------------------------------+ +bool CControlsDialog::CreateButton1(void) + { +//--- coordinates + int x1=INDENT_LEFT; + int y1=INDENT_TOP+(EDIT_HEIGHT+CONTROLS_GAP_Y); + int x2=x1+BUTTON_WIDTH; + int y2=y1+BUTTON_HEIGHT; +//--- create + if(!m_button1.Create(m_chart_id,m_name+"Button1",m_subwin,x1,y1,x2,y2)) + return(false); + if(!m_button1.Text("Button1")) + return(false); + if(!Add(m_button1)) + return(false); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Create the "Button2" button | +//+------------------------------------------------------------------+ +bool CControlsDialog::CreateButton2(void) + { +//--- coordinates + int x1=INDENT_LEFT+(BUTTON_WIDTH+CONTROLS_GAP_X); + int y1=INDENT_TOP+(EDIT_HEIGHT+CONTROLS_GAP_Y); + int x2=x1+BUTTON_WIDTH; + int y2=y1+BUTTON_HEIGHT; +//--- create + if(!m_button2.Create(m_chart_id,m_name+"Button2",m_subwin,x1,y1,x2,y2)) + return(false); + if(!m_button2.Text("Button2")) + return(false); + if(!Add(m_button2)) + return(false); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Create the "Button3" fixed button | +//+------------------------------------------------------------------+ +bool CControlsDialog::CreateButton3(void) + { +//--- coordinates + int x1=INDENT_LEFT+2*(BUTTON_WIDTH+CONTROLS_GAP_X); + int y1=INDENT_TOP+(EDIT_HEIGHT+CONTROLS_GAP_Y); + int x2=x1+BUTTON_WIDTH; + int y2=y1+BUTTON_HEIGHT; +//--- create + if(!m_button3.Create(m_chart_id,m_name+"Button3",m_subwin,x1,y1,x2,y2)) + return(false); + if(!m_button3.Text("Locked")) + return(false); + if(!Add(m_button3)) + return(false); + m_button3.Locking(true); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Create the "SpinEdit" element | +//+------------------------------------------------------------------+ +bool CControlsDialog::CreateSpinEdit(void) + { +//--- coordinates + int x1=INDENT_LEFT; + int y1=INDENT_TOP+(EDIT_HEIGHT+CONTROLS_GAP_Y)+(BUTTON_HEIGHT+CONTROLS_GAP_Y); + int x2=x1+GROUP_WIDTH; + int y2=y1+EDIT_HEIGHT; +//--- create + if(!m_spin_edit.Create(m_chart_id,m_name+"SpinEdit",m_subwin,x1,y1,x2,y2)) + return(false); + if(!Add(m_spin_edit)) + return(false); + m_spin_edit.MinValue(10); + m_spin_edit.MaxValue(1000); + m_spin_edit.Value(100); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Create the "DatePicker" element | +//+------------------------------------------------------------------+ +bool CControlsDialog::CreateDate(void) + { +//--- coordinates + int x1=INDENT_LEFT+GROUP_WIDTH+2*CONTROLS_GAP_X; + int y1=INDENT_TOP+(EDIT_HEIGHT+CONTROLS_GAP_Y)+(BUTTON_HEIGHT+CONTROLS_GAP_Y); + int x2=x1+GROUP_WIDTH; + int y2=y1+EDIT_HEIGHT; +//--- create + if(!m_date.Create(m_chart_id,m_name+"Date",m_subwin,x1,y1,x2,y2)) + return(false); + if(!Add(m_date)) + return(false); + m_date.Value(TimeCurrent()); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Create the "ListView" element | +//+------------------------------------------------------------------+ +bool CControlsDialog::CreateListView(void) + { +//--- coordinates + int x1=INDENT_LEFT+GROUP_WIDTH+2*CONTROLS_GAP_X; + int y1=INDENT_TOP+(EDIT_HEIGHT+CONTROLS_GAP_Y)+ + (BUTTON_HEIGHT+CONTROLS_GAP_Y)+ + (EDIT_HEIGHT+2*CONTROLS_GAP_Y); + int x2=x1+GROUP_WIDTH; + int y2=y1+LIST_HEIGHT-CONTROLS_GAP_Y; +//--- create + if(!m_list_view.Create(m_chart_id,m_name+"ListView",m_subwin,x1,y1,x2,y2)) + return(false); + if(!Add(m_list_view)) + return(false); +//--- fill out with strings + for(int i=0;i<16;i++) + if(!m_list_view.AddItem("Item "+IntegerToString(i))) + return(false); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Create the "ComboBox" element | +//+------------------------------------------------------------------+ +bool CControlsDialog::CreateComboBox(void) + { +//--- coordinates + int x1=INDENT_LEFT; + int y1=INDENT_TOP+(EDIT_HEIGHT+CONTROLS_GAP_Y)+ + (BUTTON_HEIGHT+CONTROLS_GAP_Y)+ + (EDIT_HEIGHT+CONTROLS_GAP_Y); + int x2=x1+GROUP_WIDTH; + int y2=y1+EDIT_HEIGHT; +//--- create + if(!m_combo_box.Create(m_chart_id,m_name+"ComboBox",m_subwin,x1,y1,x2,y2)) + return(false); + if(!Add(m_combo_box)) + return(false); +//--- fill out with strings + for(int i=0;i<16;i++) + if(!m_combo_box.ItemAdd("Item "+IntegerToString(i))) + return(false); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Create the "RadioGroup" element | +//+------------------------------------------------------------------+ +bool CControlsDialog::CreateRadioGroup(void) + { +//--- coordinates + int x1=INDENT_LEFT; + int y1=INDENT_TOP+(EDIT_HEIGHT+CONTROLS_GAP_Y)+ + (BUTTON_HEIGHT+CONTROLS_GAP_Y)+ + (EDIT_HEIGHT+CONTROLS_GAP_Y)+ + (EDIT_HEIGHT+CONTROLS_GAP_Y); + int x2=x1+GROUP_WIDTH; + int y2=y1+RADIO_HEIGHT; +//--- create + if(!m_radio_group.Create(m_chart_id,m_name+"RadioGroup",m_subwin,x1,y1,x2,y2)) + return(false); + if(!Add(m_radio_group)) + return(false); +//--- fill out with strings + for(int i=0;i<3;i++) + if(!m_radio_group.AddItem("Item "+IntegerToString(i),1< +#include +#include +#include +//--- +input double InpLots =0.1; // Lots +input int InpTakeProfit =50; // Take Profit (in pips) +input int InpTrailingStop =30; // Trailing Stop Level (in pips) +input int InpMACDOpenLevel =3; // MACD open level (in pips) +input int InpMACDCloseLevel=2; // MACD close level (in pips) +input int InpMATrendPeriod =26; // MA trend period +//--- +int ExtTimeOut=10; // time out in seconds between trade operations +//+------------------------------------------------------------------+ +//| MACD Sample expert class | +//+------------------------------------------------------------------+ +class CSampleExpert + { +protected: + double m_adjusted_point; // point value adjusted for 3 or 5 points + CTrade m_trade; // trading object + CSymbolInfo m_symbol; // symbol info object + CPositionInfo m_position; // trade position object + CAccountInfo m_account; // account info wrapper + //--- indicators + int m_handle_macd; // MACD indicator handle + int m_handle_ema; // moving average indicator handle + //--- indicator buffers + double m_buff_MACD_main[]; // MACD indicator main buffer + double m_buff_MACD_signal[]; // MACD indicator signal buffer + double m_buff_EMA[]; // EMA indicator buffer + //--- indicator data for processing + double m_macd_current; + double m_macd_previous; + double m_signal_current; + double m_signal_previous; + double m_ema_current; + double m_ema_previous; + //--- + double m_macd_open_level; + double m_macd_close_level; + double m_traling_stop; + double m_take_profit; + +public: + CSampleExpert(void); + ~CSampleExpert(void); + bool Init(void); + void Deinit(void); + bool Processing(void); + +protected: + bool InitCheckParameters(const int digits_adjust); + bool InitIndicators(void); + bool LongClosed(void); + bool ShortClosed(void); + bool LongModified(void); + bool ShortModified(void); + bool LongOpened(void); + bool ShortOpened(void); + }; +//--- global expert +CSampleExpert ExtExpert; +//+------------------------------------------------------------------+ +//| Constructor | +//+------------------------------------------------------------------+ +CSampleExpert::CSampleExpert(void) : m_adjusted_point(0), + m_handle_macd(INVALID_HANDLE), + m_handle_ema(INVALID_HANDLE), + m_macd_current(0), + m_macd_previous(0), + m_signal_current(0), + m_signal_previous(0), + m_ema_current(0), + m_ema_previous(0), + m_macd_open_level(0), + m_macd_close_level(0), + m_traling_stop(0), + m_take_profit(0) + { + ArraySetAsSeries(m_buff_MACD_main,true); + ArraySetAsSeries(m_buff_MACD_signal,true); + ArraySetAsSeries(m_buff_EMA,true); + } +//+------------------------------------------------------------------+ +//| Destructor | +//+------------------------------------------------------------------+ +CSampleExpert::~CSampleExpert(void) + { + } +//+------------------------------------------------------------------+ +//| Initialization and checking for input parameters | +//+------------------------------------------------------------------+ +bool CSampleExpert::Init(void) + { +//--- initialize common information + m_symbol.Name(Symbol()); // symbol + m_trade.SetExpertMagicNumber(MACD_MAGIC); // magic + m_trade.SetMarginMode(); + m_trade.SetTypeFillingBySymbol(Symbol()); +//--- tuning for 3 or 5 digits + int digits_adjust=1; + if(m_symbol.Digits()==3 || m_symbol.Digits()==5) + digits_adjust=10; + m_adjusted_point=m_symbol.Point()*digits_adjust; +//--- set default deviation for trading in adjusted points + m_macd_open_level =InpMACDOpenLevel*m_adjusted_point; + m_macd_close_level=InpMACDCloseLevel*m_adjusted_point; + m_traling_stop =InpTrailingStop*m_adjusted_point; + m_take_profit =InpTakeProfit*m_adjusted_point; +//--- set default deviation for trading in adjusted points + m_trade.SetDeviationInPoints(3*digits_adjust); +//--- + if(!InitCheckParameters(digits_adjust)) + return(false); + if(!InitIndicators()) + return(false); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Checking for input parameters | +//+------------------------------------------------------------------+ +bool CSampleExpert::InitCheckParameters(const int digits_adjust) + { +//--- initial data checks + if(InpTakeProfit*digits_adjustm_symbol.LotsMax()) + { + printf("Lots amount must be in the range from %f to %f",m_symbol.LotsMin(),m_symbol.LotsMax()); + return(false); + } + if(MathAbs(InpLots/m_symbol.LotsStep()-MathRound(InpLots/m_symbol.LotsStep()))>1.0E-10) + { + printf("Lots amount is not corresponding with lot step %f",m_symbol.LotsStep()); + return(false); + } +//--- warning + if(InpTakeProfit<=InpTrailingStop) + printf("Warning: Trailing Stop must be less than Take Profit"); +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Initialization of the indicators | +//+------------------------------------------------------------------+ +bool CSampleExpert::InitIndicators(void) + { +//--- create MACD indicator + if(m_handle_macd==INVALID_HANDLE) + if((m_handle_macd=iMACD(NULL,0,12,26,9,PRICE_CLOSE))==INVALID_HANDLE) + { + printf("Error creating MACD indicator"); + return(false); + } +//--- create EMA indicator and add it to collection + if(m_handle_ema==INVALID_HANDLE) + if((m_handle_ema=iMA(NULL,0,InpMATrendPeriod,0,MODE_EMA,PRICE_CLOSE))==INVALID_HANDLE) + { + printf("Error creating EMA indicator"); + return(false); + } +//--- succeed + return(true); + } +//+------------------------------------------------------------------+ +//| Check for long position closing | +//+------------------------------------------------------------------+ +bool CSampleExpert::LongClosed(void) + { + bool res=false; +//--- should it be closed? + if(m_macd_current>0) + if(m_macd_currentm_signal_previous) + if(m_macd_current>m_macd_close_level) + { + //--- close position + if(m_trade.PositionClose(Symbol())) + printf("Long position by %s to be closed",Symbol()); + else + printf("Error closing position by %s : '%s'",Symbol(),m_trade.ResultComment()); + //--- processed and cannot be modified + res=true; + } +//--- result + return(res); + } +//+------------------------------------------------------------------+ +//| Check for short position closing | +//+------------------------------------------------------------------+ +bool CSampleExpert::ShortClosed(void) + { + bool res=false; +//--- should it be closed? + if(m_macd_current<0) + if(m_macd_current>m_signal_current && m_macd_previousm_macd_close_level) + { + //--- close position + if(m_trade.PositionClose(Symbol())) + printf("Short position by %s to be closed",Symbol()); + else + printf("Error closing position by %s : '%s'",Symbol(),m_trade.ResultComment()); + //--- processed and cannot be modified + res=true; + } +//--- result + return(res); + } +//+------------------------------------------------------------------+ +//| Check for long position modifying | +//+------------------------------------------------------------------+ +bool CSampleExpert::LongModified(void) + { + bool res=false; +//--- check for trailing stop + if(InpTrailingStop>0) + { + if(m_symbol.Bid()-m_position.PriceOpen()>m_adjusted_point*InpTrailingStop) + { + double sl=NormalizeDouble(m_symbol.Bid()-m_traling_stop,m_symbol.Digits()); + double tp=m_position.TakeProfit(); + if(m_position.StopLoss()0) + { + if((m_position.PriceOpen()-m_symbol.Ask())>(m_adjusted_point*InpTrailingStop)) + { + double sl=NormalizeDouble(m_symbol.Ask()+m_traling_stop,m_symbol.Digits()); + double tp=m_position.TakeProfit(); + if(m_position.StopLoss()>sl || m_position.StopLoss()==0.0) + { + //--- modify position + if(m_trade.PositionModify(Symbol(),sl,tp)) + printf("Short position by %s to be modified",Symbol()); + else + { + printf("Error modifying position by %s : '%s'",Symbol(),m_trade.ResultComment()); + printf("Modify parameters : SL=%f,TP=%f",sl,tp); + } + //--- modified and must exit from expert + res=true; + } + } + } +//--- result + return(res); + } +//+------------------------------------------------------------------+ +//| Check for long position opening | +//+------------------------------------------------------------------+ +bool CSampleExpert::LongOpened(void) + { + bool res=false; +//--- check for long position (BUY) possibility + if(m_macd_current<0) + if(m_macd_current>m_signal_current && m_macd_previous(m_macd_open_level) && m_ema_current>m_ema_previous) + { + double price=m_symbol.Ask(); + double tp =m_symbol.Bid()+m_take_profit; + //--- check for free money + if(m_account.FreeMarginCheck(Symbol(),ORDER_TYPE_BUY,InpLots,price)<0.0) + printf("We have no money. Free Margin = %f",m_account.FreeMargin()); + else + { + //--- open position + if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,0.0,tp)) + printf("Position by %s to be opened",Symbol()); + else + { + printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment()); + printf("Open parameters : price=%f,TP=%f",price,tp); + } + } + //--- in any case we must exit from expert + res=true; + } +//--- result + return(res); + } +//+------------------------------------------------------------------+ +//| Check for short position opening | +//+------------------------------------------------------------------+ +bool CSampleExpert::ShortOpened(void) + { + bool res=false; +//--- check for short position (SELL) possibility + if(m_macd_current>0) + if(m_macd_currentm_signal_previous) + if(m_macd_current>(m_macd_open_level) && m_ema_current=limit_time) + { + //--- check for data + if(Bars(Symbol(),Period())>2*InpMATrendPeriod) + { + //--- change limit time by timeout in seconds if processed + if(ExtExpert.Processing()) + limit_time=TimeCurrent()+ExtTimeOut; + } + } + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D Morpher/Functions.mqh b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D Morpher/Functions.mqh new file mode 100644 index 0000000..4ee46d2 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D Morpher/Functions.mqh @@ -0,0 +1,372 @@ +//+------------------------------------------------------------------+ +//| Functions.mqh | +//| Copyright 2000-2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ + +//--- custom function y=f(x,y) +typedef double(*MathFunction)(double,double); + +//+------------------------------------------------------------------+ +//| math functions | +//+------------------------------------------------------------------+ +enum EnMathFunction + { + Peaks=0, + Chomolungma=1, + ClimberDream=2, + Granite=3, + Hedgehog=4, + Hill=5, + Josephine=6, + Screw=7, + DoubleScrew=8, + MultiExtremalScrew=9, + Sink=10, + Skin=11, + Trapfall=12, + }; +//+------------------------------------------------------------------+ +//| Names of the math functions | +//+------------------------------------------------------------------+ +const string ExtFunctionsNames[]= + { + "Peaks", + "Chomolungma", + "Climber Dream", + "Granite", + "Hedgehog", + "Hill", + "Josephine", + "Screw", + "Double Screw", + "Multi Extremal Screw", + "Sinc", + "Skin", + "Trapfall" + }; +//+------------------------------------------------------------------+ +//| Function Peaks | +//+------------------------------------------------------------------+ +double PeaksFunction(double x,double y) + { + double res = 3*MathPow((1-x),2)*MathExp(-x*x-(y+1)*(y+1))-10*(0.2*x-MathPow(x,3)-MathPow(y,5))*MathExp(-x*x-y*y)-1/3*MathExp(-(x+1)*(x+1)-y*y); +//--- + return(res); + } +//+------------------------------------------------------------------+ +//| Function Chomolungma | +//+------------------------------------------------------------------+ +double ChomolungmaFunction(double x,double y) + { + double a= MathCos(x*x)+MathCos(y*y); + double b= MathPow(MathCos(5*x*y),5); + double c=1.0/MathPow(2,b); +//--- calculate result + double res=a-c; +//--- + return(res); + } +//+------------------------------------------------------------------+ +//| Function ClimberDream | +//+------------------------------------------------------------------+ +double ClimberDreamFunction(double x,double y) + { + double a= MathSin(MathSqrt(MathAbs(x - 1.3) + MathAbs(y))); + double b= MathCos(MathSqrt(MathAbs(MathSin(x))) + MathSqrt(MathAbs(MathSin(y)))); + double f=a+b; +//--- calculate result + double res=MathPow(f,4); +//--- + return(res); + } +//+------------------------------------------------------------------+ +//| Function Granite | +//+------------------------------------------------------------------+ +double GraniteFunction(double x,double y) + { + double a= MathPow(MathSin(MathSqrt(MathAbs(x)+MathAbs(y))),2); + double b= MathPow(MathCos(MathSqrt(MathAbs(x)+MathAbs(y))),2); +//--- calculate result + double res=a*b; +//--- + return(res); + } +//+------------------------------------------------------------------+ +//| Function Hedgehog | +//+------------------------------------------------------------------+ +double HedgehogFunction(double x,double y) + { + double a1=MathSin(MathSqrt(MathAbs(x-2)+MathAbs(y))); + double a2=MathCos(MathSqrt(MathAbs(MathSin(x)))+MathSqrt(MathAbs(MathSin(y)))); +//--- calculate result + double res=a1+a2; +//--- + return(res); + } +//+------------------------------------------------------------------+ +//| Function Hill | +//+------------------------------------------------------------------+ +double HillFunction(double x,double y) + { +//--- calculate result + double res=MathExp(-x*x-y*y); +//--- + return(res); + } +//+------------------------------------------------------------------+ +//| Function Josephine | +//+------------------------------------------------------------------+ +double JosephineFunction(double x,double y) + { + double a= MathSin(MathPow(MathAbs(x)+MathAbs(y),0.5)); + double b= MathCos(MathPow(MathAbs(x),0.5)+MathPow(MathAbs(y),0.5)); +//--- calculate function + double res=a+b; +//--- + return(res); + } +//+------------------------------------------------------------------+ +//| Function Screw | +//+------------------------------------------------------------------+ +double ScrewFunction(double x,double y) + { + double a=(y==0)?0:((x*y<0)?MathArctan(x/y):MathArctan(x/y)+M_PI); + double b=x*x+y*y; + double f=MathSin(b+a); +//--- calculate result + double res=(f*f); +//--- + return(res); + } +//+------------------------------------------------------------------+ +//| Function DoubleScrew | +//+------------------------------------------------------------------+ +double DoubleScrewFunction(double x,double y) + { + double a=(y==0)?0:((x*y<0)?MathArctan(x/y):MathArctan(x/y)+M_PI); + double b=x*x+y*y; + double res1=MathCos(b/2+a*3); + res1=((res1*res1)/sqrt(b+1)-0.2); + double res2=MathCos(b/2-a*3); + res2=((res2*res2)/sqrt(b+1)-0.2); + double f=fmax(res1,res2); +//--- calculate result + double res=(f>0)?f:0; +//--- + return(res); + } +//+------------------------------------------------------------------+ +//| Function MultiExtremalScrew | +//+------------------------------------------------------------------+ +double MultiExtremalScrewFunction(double x,double y) + { + double a=(y==0)?0:((x*y<0)?MathArctan(x/y):MathArctan(x/y)+M_PI); + double b=x*x+y*y; + double res1=MathCos(b/2+a*3); + res1=((res1*res1)/sqrt(b+1)-0.2); + double res2=MathCos(b/2-a*3); + res2=((res2*res2)/sqrt(b+1)-0.2); +//--- calculate function + double res=fmin(res1,res2); +//--- + return(res); + } +//+------------------------------------------------------------------+ +//| Function Sink | +//+------------------------------------------------------------------+ +double SinkFunction(double x,double y) + { + static double k=5.0; + static double p=6.0; +//--- calculate result + double res=MathSin(x*x+y*y)+k*MathExp(-p*x*x-p*y*y); +//--- + return(res); + } +//+------------------------------------------------------------------+ +//| Function Skin | +//+------------------------------------------------------------------+ +double SkinFunction(double x,double y) + { + double a1=2*x*x; + double a2=2*y*y; + double b1=MathCos(a1)-1.1; + b1=b1*b1; + double c1=MathSin(0.5*x)-1.2; + c1=c1*c1; + double d1=MathCos(a2)-1.1; + d1=d1*d1; + double e1=MathSin(0.5*y)-1.2; + e1=e1*e1; +//--- calculate result + double res=b1+c1-d1+e1; +//--- + return(res); + } +//+------------------------------------------------------------------+ +//| Function Trapfall | +//+------------------------------------------------------------------+ +double TrapfallFunction(double x,double y) + { + double a1=MathSqrt(MathAbs(MathSin(x-1.0))); + double b1=MathSqrt(MathAbs(MathSin(y+2.0))); +//--- calculate result + double res=-MathSqrt(MathAbs(MathSin(MathSin(a1+b1)))); +//--- + return(res); + } +//+------------------------------------------------------------------+ +//| GenerateFunctionData | +//+------------------------------------------------------------------+ +void GenerateFunctionData(double &data[],int &x_size,int &y_size,double x_min,double x_max,double y_min,double y_max,MathFunction function) + { + double dx = 0.1; + double dy = 0.1; +//--- + x_size = (int)((x_max - x_min)/dx) + 1; + y_size = (int)((y_max - y_min)/dy) + 1; + ArrayResize(data,x_size*y_size); +//--- + for(int j = 0; j < y_size; j++) + { + for(int i = 0; i < x_size; i++) + { + double x = x_min + i*dx; + double y = y_min + j*dy; + data[j*x_size + i] = function(x,y); + } + } + } +//+------------------------------------------------------------------+ +//| GenerateData | +//+------------------------------------------------------------------+ +void GenerateData(EnMathFunction function_id,double &data[],int &x_size,int &y_size) + { +//--- + switch(function_id) + { + case Peaks: + GenerateFunctionData(data,x_size,y_size,-3.0,+3.0,-3.0,+3.0,PeaksFunction); + break; + case Chomolungma: + GenerateFunctionData(data,x_size,y_size,-2.0,+2.0,-2.0,+2.0,ChomolungmaFunction); + break; + case ClimberDream: + GenerateFunctionData(data,x_size,y_size,-10.0,+10.0,-10.0,+10.0,ClimberDreamFunction); + break; + case Granite: + GenerateFunctionData(data,x_size,y_size,-4.0,+4.0,-4.0,+4.0,GraniteFunction); + break; + case Hedgehog: + GenerateFunctionData(data,x_size,y_size,-10.0,+10.0,-10.0,+10.0,HedgehogFunction); + break; + case Hill: + GenerateFunctionData(data,x_size,y_size,-1.5,+1.5,-1.5,+1.5,HillFunction); + break; + case Josephine: + GenerateFunctionData(data,x_size,y_size,-200.0,+200.0,-200.0,+200.0,JosephineFunction); + break; + case Screw: + GenerateFunctionData(data,x_size,y_size,-3.0,+3.0,-3.0,+3.0,ScrewFunction); + break; + case DoubleScrew: + GenerateFunctionData(data,x_size,y_size,-3.0,+3.0,-3.0,+3.0,DoubleScrewFunction); + break; + case MultiExtremalScrew: + GenerateFunctionData(data,x_size,y_size,-3.0,+3.0,-3.0,+3.0,MultiExtremalScrewFunction); + break; + case Sink: + GenerateFunctionData(data,x_size,y_size,-3.0,+3.0,-3.0,+3.0,SinkFunction); + break; + case Skin: + GenerateFunctionData(data,x_size,y_size,-5.0,+5.0,-5.0,+5.0,SkinFunction); + break; + case Trapfall: + GenerateFunctionData(data,x_size,y_size,-5.0,+5.0,-5.0,+5.0,TrapfallFunction); + break; + } + } +//+------------------------------------------------------------------+ +//| GenerateFunctionDataFixedSize | +//+------------------------------------------------------------------+ +bool GenerateFunctionDataFixedSize(int x_size,int y_size,double &data[],double x_min,double x_max,double y_min,double y_max,MathFunction function) + { + if(x_size<2 || y_size<2) + { + PrintFormat("Error in data sizes: x_size=%d,y_size=%d",x_size,y_size); + return(false); + } + double dx = (x_max - x_min)/(x_size-1); + double dy = (y_max - y_min)/(y_size-1); + ArrayResize(data,x_size*y_size); +//--- + for(int j = 0; j < y_size; j++) + { + for(int i = 0; i < x_size; i++) + { + double x = x_min + i*dx; + double y = y_min + j*dy; + data[j*x_size + i] = function(x,y); + } + } + return(true); + } +//+------------------------------------------------------------------+ +//| GenerateDataFixedSize | +//+------------------------------------------------------------------+ +bool GenerateDataFixedSize(int x_size,int y_size,EnMathFunction function_id,double &data[]) + { + if(x_size<2 || y_size<2) + { + PrintFormat("Error in data sizes: x_size=%d,y_size=%d",x_size,y_size); + return(false); + } + bool result=false; +//--- + switch(function_id) + { + case Peaks: + result=GenerateFunctionDataFixedSize(x_size,y_size,data,-3.0,+3.0,-3.0,+3.0,PeaksFunction); + break; + case Chomolungma: + result=GenerateFunctionDataFixedSize(x_size,y_size,data,-2.0,+2.0,-2.0,+2.0,ChomolungmaFunction); + break; + case ClimberDream: + result=GenerateFunctionDataFixedSize(x_size,y_size,data,-10.0,+10.0,-10.0,+10.0,ClimberDreamFunction); + break; + case Granite: + result=GenerateFunctionDataFixedSize(x_size,y_size,data,-4.0,+4.0,-4.0,+4.0,GraniteFunction); + break; + case Hedgehog: + result=GenerateFunctionDataFixedSize(x_size,y_size,data,-10.0,+10.0,-10.0,+10.0,HedgehogFunction); + break; + case Hill: + result=GenerateFunctionDataFixedSize(x_size,y_size,data,-1.5,+1.5,-1.5,+1.5,HillFunction); + break; + case Josephine: + result=GenerateFunctionDataFixedSize(x_size,y_size,data,-200.0,+200.0,-200.0,+200.0,JosephineFunction); + break; + case Screw: + result=GenerateFunctionDataFixedSize(x_size,y_size,data,-3.0,+3.0,-3.0,+3.0,ScrewFunction); + break; + case DoubleScrew: + result=GenerateFunctionDataFixedSize(x_size,y_size,data,-3.0,+3.0,-3.0,+3.0,DoubleScrewFunction); + break; + case MultiExtremalScrew: + result=GenerateFunctionDataFixedSize(x_size,y_size,data,-3.0,+3.0,-3.0,+3.0,MultiExtremalScrewFunction); + break; + case Sink: + result=GenerateFunctionDataFixedSize(x_size,y_size,data,-3.0,+3.0,-3.0,+3.0,SinkFunction); + break; + case Skin: + result=GenerateFunctionDataFixedSize(x_size,y_size,data,-5.0,+5.0,-5.0,+5.0,SkinFunction); + break; + case Trapfall: + result=GenerateFunctionDataFixedSize(x_size,y_size,data,-5.0,+5.0,-5.0,+5.0,TrapfallFunction); + break; + } +//--- + return(result); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D Morpher/Math 3D Morpher.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D Morpher/Math 3D Morpher.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..e607524e6885d6b037b8ff1f3af5a83647fe104a GIT binary patch literal 67722 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

srnG!R+vc_vdc2S!Cv_n)pw~1t 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 literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D Morpher/Textures/checker.bmp b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D Morpher/Textures/checker.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0d65c538b8a39a3d5491f1c40a5a63e7eeb26943 GIT binary patch literal 196662 zcmeIy!3l&g00q&=Hem@{fd%Z{=F^aCND=Qc0Y&jJF!S+uU*j{@x!&u$9*%t-<6Lj= z+28l`zCRsmV0Neh8bA0$;|HHj&>Coh)_|=a-PVuZ0Cog)_|=a-PVuZ0Cog)_|=a-PVuZ0Cog)_|=a-PVuZ0Cog)_|=a-PVuZ0Cog)_|=a-PVuZ0Cog z)_|=a-PVuZ0Cog)_|=a z-PVuZ0qocsqqjh7paoh3wtjS5KY9za z23nvsVCzS>^`o~yYoG;M1Gav2TR(aWv<6zBHDK#UxAmj9Kx?1{S_8IzbXz}q3$zAW zpfzCYN4NE(w?J#41zH2Peso(udJD7$TA(#x>qocsqqjh7paoh3wtjS5KY9za23nvs zVCzS>^`o~yYoG;M1Gav2TR(aWv<6zBHDK#UxAmj9Kx?1{S_8IzbXz}q3$zAWpfzCY zN4NE(w?J#41zH2Peso(udJD7$TA(#x>qocsqqjh7paoh3wtjS5KY9za23nvsVCzS> z^`o~yYoG;M1Gav2TR(aWv<6zBHDK#UxAmj9Kx?1{S_8IzbXz}q3$zAWpfzCYN4NE( zw?J#41zH2Peso(udJD7$TA(#x>qocsqqjh7paoh3wtjS5KY9za23nvsVCzS>^`o~y zYoG;M1Gav2TR(aWv<6zBHDK#UxAmj9Kx?1{S_8IzbXz}q3$zAWpfzCYN4NE(w?J#4 z1zH2Peso(udJD7$TA(#x>qocsqqjh7paoh3wtjS5KY9za23nvsVCzS>^`o~yYoG;M z1Gav2TR(aWv<6zBHDK#UxAmj9Kx?1{S_8IzbXz}q3$zAWpfzCYN4NE(w?J#41zH2P zeso(udJD7$TA(#x>qocsqqjh7paoh3wtjS5KY9za23nvsVCzS>^`o~yYoG;M1Gav2 zTR(aWv<6zBHDK#UxAmj9Kx?1{S_8IzbXz}q3$zAWpfzCYN4NE(w?J#41zH2Peso(u zdJD7$TA(#x>qocsqqjh7paoh3wtjS5KY9za23nvsVCzS>^`o~yYoG;M1Gav2TR(aW zv<6zBHDK#UxAmj9Kx?1{S_8IzbXz}q3$zAWpfzCYN4NE(w?J#41zH2Peso(udJD7$ zTA(#x>qocsqqjh7paoh3wtjS5KY9za23nvsVCzS>^`o~yYoG;M1Gav2TR-|Ap@6C! literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Functions.mqh b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Functions.mqh new file mode 100644 index 0000000000000000000000000000000000000000..be9be094c7b7febcd077abc3cf40577d3881e11f GIT binary patch literal 16008 zcmeHOZEqS!5Z=#~`XBBi#>F-?PFuIMikviQ)ktZb?-gKhEaRFQEE_fX>usNBhhbmt zg|mBD9JP?~!S2pJJ3G(p%-r$M-}`3Y?3&gFymrm!<};w#Hy=&%NUtBwjrqe2%*>pd zD_l*@p1CxCnh%)&VKlWoMF|J_c6q*A?V(jx${M zu9mW7_Tnu$p8LlpqpaU1mn&josypiJx;Kf#B__6uY#7B-v0Q#z7Bf5#oEWfJU6ef z+cPVRdKepj%s0W96N}{nGq%B2AMc5|ux)G!_4wZEXM+8tY_7B&Xz-I~1)Ihi@w&f3 z%QI-}8v8*1)5G5cI_AD`&#&>BjFOhvZWCD09Bs4@j#f6&!mlxkek0F%#a^A)-6Z`e zQ)BFjd2RKT*WQ4=<@43)M|@Ar-8`vjf6>ilaEw^Ikmz~}K5?f8;9X<6R}PEx^1X?C zGk{f)ul$tlUyeN1%NTi&?S;6r{8JHXUtS+pMNf6H;FaGNqNF!X`?vex%$86!($K?} z#}|&P8ddDs%j1eiR*y{1l=~o(5mh5epJL@PrN>r{&Yg4RQMoZyqsczC%OlGkUp2}y zQA2smWu#TT0*ztHqtp@ABaxWtK1gIl)kxwPtvsT5=W7y2%`Kej7mY)U>&7kQt{LBlmjpDxCh$VTaxo>}GAkCEBYY_&Xe z((1v;Y@Iw7C*|aI3_3v_@){?C`{o6#Us#*KUK7+7_E3S@!PPGQlzG~V?B&b1>d^W_ z2CGj{Ir;Ou9;^zmekL=8ILeP#q(xXq@C-eyv%gqRmF(B`sHYiOPxCC&-FAC~Fn@H+ zUDs6|JVL0G$MOSeg=&@e@eBS*9{T~Fo}I|1i~K>1qr86zBZ^`iRr0upI79t|*zI<6 zHmoTP4xEj3vQE~vaV9;4rM&M~#MJx~yN8i(&hm_mQR<29;{J!9*3~k&jWeFB z^mVZ9ES7qtvTWV|>%rpe8tudK;VLaunZ)~u6U4qPo88{we^$o4-IklKTCdl3>tMNQ zoviZ&@@qPAoEXP%8i(aaXN(XJkW;coQ+b8Um#-?l4!m_bSubB3I48Pz9l*AK!21!-5LQrFZT)WX zt)4M2Q2(J7^NAbw*|!zhqh-vQ-A-QpZr+)nR&toL-XY$Slgp2|!n}~R7saGrrf=i4 zvWyg_$ul^4Y}ATv7i%2>*(k!l-JE=h`nf)5=4??JRQ>-ta57sbPyEb2$NX$mGs8Z7 zM#nO>X)DD($Ayy|MGvH(n#-#ljGZoP(Byj?jBMEmp}3ADva&K&!PA0A%frJ_4o?UD zRNBMw(0`5WbB}l4N*P%=*`k?Mk%jbM<;TcY=_$VK`-NX0!P_7Fk22dbPdrrV+3Mia z%IM_D!##Pp1}fRv9(R?Gx^MPF&nWlt#Aoq|X7yjOpJxyEjEeM6$AB8))$Ojh#I_e$ z{o}mq;IC9CRr)0UCWFtRoFlu5nNH2~nS1`yBs?oujhbN8b8plto{069Im?v|=`1MB zpjgwtK*XZClB*F;@U8T1p=!unFa31QwsT9K=6f7w`M;Lhq~8&QdA0tIq)KjuGxQL% z^EW(deSZ8O_hjVFo~x<>eJfLKTr&;M#O#32q_l$=SNijvcW1-45W@hiX^u%nk}FX8 z;oTt_#rG!sNs;{1K)yrHQ!Wd+^yhmMziTRzJPagjjYN^Njw$j(tx;DM?FRPJIuVBMnA$D>8d*sp~uL3 qV$NZZNOz8tx|5or3g)SWDFa)}XrTQ1W3=?GeDaMRHm#9uVDP`$T*LeT literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Math 3D.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Math 3D.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..6ebbb0bfa2de1232f27850c2796e4b56105b2f03 GIT binary patch literal 39596 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 literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Math 3D.ico b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Math 3D.ico new file mode 100644 index 0000000000000000000000000000000000000000..0d881c483aa3257a60ffa0cb79f5df28be796884 GIT binary patch literal 16958 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 literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Math 3D.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Math 3D.mq5 new file mode 100644 index 0000000000000000000000000000000000000000..f82a19252d324c30991c4f88359755f0056835b6 GIT binary patch literal 6986 zcmd^D?{5=F5S`DJ`afKZDj5Mu1nn0pe<&eANDT?bNTfotOl%Sh>~n1=IF$bDzE z?C$xFkTyiuBJ1Scy}Q{rZ+`B5`nVw*a!c;i;CD-Ylpla*Lq14$jlW&#$y|=5EBEA~ ztjkFLlwYv_hbzIeCAm!GOr|oFBkVGVGQ~OpHhRTG<@F$qen1Q}#WhQw+J@w!HXUG{sIIne@qSCTfRepx2WWGT{UT$TY|8?2itDCfU2`Te(+}vC=37IIhN^$+ zzpHEn_W#W&( z%*bL6wyX05ea!eA;@PIG!Q-AHrxOL=nI|k~uYsA{ z=bjMrxH@hiE6^L>LFyEH+P-{0L-t!}O}EOvi8`LJ9Z7LLjf#Cl z5aW-TysPo^9I>^-e} z?`x!6o~X{0fw5xuwSX4PUQ^YDvl%qDzLVPd3eOnve1LhJdx~<;61kkEa(%_+`n)Lj z6|yLMN{<}k8Ne#e4>9rGc+GIdtU7nA9Wd)p;4|>FuN=g^viVdS>#PL>t$5}~FP2s= z!^X9*;g@>H{E`><57YfJhbgzUgZ(`96{6Ie(~enJ#x zk=5fB%8uuhZF9qYm8?}^JWCLm{xPPDFp`&V&0{e`5#Q`Qr;HJ|Bjlr8tcS5IP@Ub} zpW?{iDRTfl-oRGuAj?mQ%<1d{XwLznk#Dd+>PNZQ`_Ez&@Vf$Q?%GP6UfgNMIk*8W z!``e7{DyH{iP&S4*vHyS+X~Nu7j@NZcxDeiS#~lvpQgvM7WH8b=hbr*|KqMHOZu>V z^kHpWyXcuZxZ2RGi<-jPvWHn4YpgP>QbSMWr~A};;gr3a=j^0!2+dNo6LYfpIZwoH zDUbMY=kk^!H;3v`tl(qVYK(6Z@3G1+AaT|W)`$@WtHo&k8+Hj*q}mJqFWvL?cFi7P z_3WP09*Exp;vV|@=$+HrlAeuOKVG9|#otNOGkl1gl*`bgwU8alzMFZ~;}_9v+20=& za%dcl&8Y8-Gi}JRbw9U0L@s5;zuvQJJtOZFHD#zZz8G~eOJ9mWdY*eLa%+I2c literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Math 3D.mqproj b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Math 3D.mqproj new file mode 100644 index 0000000000000000000000000000000000000000..f6c8fab8d3b95d74d0992bc07ed78efbbe6f574e GIT binary patch literal 6042 zcmeI0TT|0O6vxjqpCZGvRzZ2;O$vw(9WUk0I!x^aD!s%sLBR2=tH1wlmu#Rqj3Xi$ zC(~xLd(PSOKewFC_itZp#S*SnOKogj%WY^g%WT4o=5=i{p0KjP{Xs;ZL3spim(@eo z&yg{JM)U(ab59xbF;@?s6w1s-@E*I>a+l_{)x_5AvAZ6+(YifFhs0X!khAj}E8xj_ znlro4sBewRj$?M3+6i+3Pq<4@X^^AQ9IZR{$o)Q>t_G++VUrC;(pnZN(Vwzo2G@v{ zX+^fAuE8U%V~)PlvFDJd>{)V(;{Z)Y4#Q4lxx}7<=hUspE6IY!%aR4BNbNK4y_VP$ z+vdr06xc`TFPvZfehK;xp^z7(!{pj}=JYJ!%+aTTMKXRXxHChN{VEjIFh|xV^^m>jZs;IkxA>d8KOmGLlNE zvPc72@?p$hwSZ*Daj{mR9b&Bur~M2$LfKnHl=pTl*T!1f z`8a~o#FIxP%pspk4VNJrVvn(l`(+$|7gLLhw@*##aJ?Y9dT3U-+|Z0NXiEGjORqlP z9qQPAzw66iP5Y(U)x3CNiFiK%@-?w?!NzT Xr33d?O8H`{47%;Q7kb1MzH|KmOo(NK literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Chomolungma.set b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Chomolungma.set new file mode 100644 index 0000000000000000000000000000000000000000..09a45991e367d211dec2055272376dd3072d9413 GIT binary patch literal 684 zcma))PfNp45X9#!_#JZdqSAVmo&-VAtJq_W&l+r#&?KVbXIFo-kJO5XO33>&yE{8O z$=Bz(3f(GcqfV6?)!Z9BvL5M13-x-^1^Y^+238|EuOp+NDuEO_)Pc<9{0g*yqar_X zDucJDwu0X=?=5_;Y{56Y>tM=CT-|_LOB)^6)VxRC5_F%k0+=$@XuM#t#9 zJ#_c0txNXI{@rhV-sfPRv8KlCGp6@995{dQcrLr%Z*K{=#)v)7=M-PCBrh?SIkToq km};gT|Am>RJJCD(O@iS>XR%Lo3NnpzM&>*D^MB=k117(F_5c6? literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/ClimberDream.set b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/ClimberDream.set new file mode 100644 index 0000000000000000000000000000000000000000..3536542206ad9fcc17dc6d2c2e5fab715cd2ebb9 GIT binary patch literal 696 zcmb7?K}*9>5QOI}_#blfqEZD<(vu(vdKG)D@mYg52~8?0{&w}7eI`~s6e)e#x4Sbt zJIUwAsR~^yX{An;8r9qz-E;2gN^|vk&>7Dsm0EK;llwY43Q&nmpSb0az+IpB4dW}koteN+@m+V+^J`!KT?n!?g{mnY~VU3>Y&1-ZF z&f7yzzZhMzXZG)Q^m&_udB+-z*{5vpceo~g=jXlbdOzM0ZVeTCp5qj6u%s`smpQYh lbC_zj9=?UCjyI||%$o$mfsVeTi4KWQB0J<}8<^R@Fkk1ee9`~_ literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/DoubleScrew.set b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/DoubleScrew.set new file mode 100644 index 0000000000000000000000000000000000000000..61c3cbc4d1a211fbca79f0e798b0cc108ee6b43c GIT binary patch literal 684 zcma))PfNp45X9#!_#JZdqEhi9NKb+w=vC~o#%B$+NoW#L@w2PH*+*){LnY+>ncbb8 zo#gBDT!n6xv{t7|jcV?V9$61`qq%xL>4N=Pr3O|bIjm-2!x%vI4GGD$V8|b3N#V>MmG+ zv^KD!ETVuqY=W~iLSdy2R%bZ!$ lB}_F_kN?6{XIs%b`b~o2NT;z+bPRG5=Zws@@@N0b{{|`%d;tIe literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Granite.set b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Granite.set new file mode 100644 index 0000000000000000000000000000000000000000..3356136f09f8e15efa34e38bf530803dbf8d1a99 GIT binary patch literal 684 zcma))PfNp45X9#!_#JZdqEghG^dty^Ud0}3eAZB#geDOcKfC&yeWX@AR6^dL+1=UM zNxnYMRp?epYjvvBsOH}2k@Y|~nyc57F4&({YG5^z^ExsLsuD<{eeKCy&aXfVI4bfJ zr!shZYAg61^WMVe$`*Xhy9%bP#MKR`wY1T3Ma_HEEkJiEE8u#i(roTA*MnZD?t=A4 zYeQ^^8LY{fR+gu*@(#?}dYBe^i%1I8%!k}dW~^A3oUdVbr@xN=W*z;oM)&mOH9AJ; z?V-D0ZCtWv_V0e<^DYPTj5Rf8pEA9_;lTNW$8*{BesfE>HAd`tKBxGCC3%Ut%$YS^ k!c;T$_%BR#x)r^n-y|50bQb$W#~>$h&d6*lfA+8ZZz&gi0ssI2 literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Hedgehog.set b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Hedgehog.set new file mode 100644 index 0000000000000000000000000000000000000000..c543a3fbd1081f7a7d24929c8f3f4ad96c0a86ff GIT binary patch literal 692 zcma))K}*9>5QOI}_#blfqEbOm(vu(vdKG)D@mYg52~8?0{&w}7eI`~sR7zj=?e5IZ zPV)J2szTRFTB%c|Mm6_F_ndpW(p_(_xCHYSxCPm5$_lt%K$^`n=DO1}=q^}) zv^Lb%v4b_a)5`J|R^E}bwjQR1UZavCYvz6KB|BD}kHnX-d(vM=f3psLSfgip^BNt4 z^Y+lwFGiQ_nf<#Rect9^-mwN__9@%@9j=Mr`FSt9-jBD0TSLX3=Qzb1Ea^+^WzMYW l9HyGBhi_r3MVB}TVIt)+{OD=_bYTN2%+tbpqkq}kkKp?kf6?t}G5 zYfEm78LY{bR+gu*@}8Kr4KOYB7MT=LGaquVn6YMk;(P_WJN9?xahhs`bF)|9d5`JCblR@5ctGH2Fw l0aL@&)4wp&=~niZeq}Hm=_K}2$3#l1%$sBLEyVnvh;I&Wd|m(m literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Josephine.set b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Josephine.set new file mode 100644 index 0000000000000000000000000000000000000000..8d82f2c93b358d470bbb34c2249e8beeb652b601 GIT binary patch literal 688 zcma))K}*9>5QOI}_#blfqM#nUNKb+w=vC~o#%B%MBs7Vr_}kTQ_K~#Wp;G#?Z+B;Q zc9QR}a}~N((psG=HLAHcdgMINjTY+lqzj%eDm8FAllwY43Q&nmp?&SiT<)*P7I0Mb zC!#WVd$1M!uKC%*XJku$&3_e4S&7jNS!-!y;tI@1;Fe@}DJ$T518FwTSm;5opu1q* zXlg|GH2Fw j2~*A1tR~xEg~sUGaqsA*XS6X zw}J{Mo?B{G=PGooq_sL#YE*M?^vHUk8_m`0Nf+$TDmAbg$$1?a1yu>8(7yI$F6URE1soOm ziBlQ8J+&45j(Kn4b7c#@=3NC-R^sXg)LPo;xT5Ag>K358lofEjQfW5#nCn3=RCmGp zqqQM6#0=KtOe@P%Sa}C#Z9Pm2y+tGiYUV@kB{Np6OU~D@yVGAsf3uE$SfhJ-@){kZ z^Y+l)uQo2(Gy8YH@p+endB&O=vrn1c-*Djk!Q;8?dcV0P+!`bHJfBm1!IHehT;|N0 lE@7&fdi)orI@^lg(QgtAM>>stqGOPgIA>(Gl|TDe{x>PFd;kCd literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Sink.set b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Sink.set new file mode 100644 index 0000000000000000000000000000000000000000..4da1d77a9126b447ca5d524190c4a4ce72c4591b GIT binary patch literal 686 zcma))PfNp45X9#!_#JZdqSE3~dJ+UduVRliK5MW|N|T6+pI!aUJ`yV)Dk1OB?C$LB zBwwHBDs-!)ty)!TRC90i$aRFBCyq1iDssvK#PzN%X^DEE-j*9%m zsSMtZ+6sQhyl>!h1X2rP=CbucaU7LgRFnUA@b%viBLbH0Y%o&Gxdn|1KR8r{>A*XS6W zw}QpHqCnlDx!R=FFNd lVXB#W_!nlHYO)i*qvIqvPIMOgM5iFrIA>(OlRy7g{x=hhd@29{ literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Skin.set b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Math 3D/Sets/Skin.set new file mode 100644 index 0000000000000000000000000000000000000000..4d2bf73aa7a781c4a88d52b4f57437665b072360 GIT binary patch literal 686 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 OW8?-ZNh!HRrW9w_R-MWK literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Examples/Moving Average/Moving Average.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Moving Average/Moving Average.mq5 new file mode 100644 index 0000000..40ac10b --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Examples/Moving Average/Moving Average.mq5 @@ -0,0 +1,233 @@ +//+------------------------------------------------------------------+ +//| Moving Averages.mq5 | +//| Copyright 2000-2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2000-2024, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" + +#include + +input double MaximumRisk = 0.02; // Maximum Risk in percentage +input double DecreaseFactor = 3; // Descrease factor +input int MovingPeriod = 12; // Moving Average period +input int MovingShift = 6; // Moving Average shift +//--- +int ExtHandle=0; +bool ExtHedging=false; +CTrade ExtTrade; + +#define MA_MAGIC 1234501 +//+------------------------------------------------------------------+ +//| Calculate optimal lot size | +//+------------------------------------------------------------------+ +double TradeSizeOptimized(void) + { + double price=0.0; + double margin=0.0; +//--- select lot size + if(!SymbolInfoDouble(_Symbol,SYMBOL_ASK,price)) + return(0.0); + if(!OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1.0,price,margin)) + return(0.0); + if(margin<=0.0) + return(0.0); + + double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_MARGIN_FREE)*MaximumRisk/margin,2); +//--- calculate number of losses orders without a break + if(DecreaseFactor>0) + { + //--- select history for access + HistorySelect(0,TimeCurrent()); + //--- + int orders=HistoryDealsTotal(); // total history deals + int losses=0; // number of losses orders without a break + + for(int i=orders-1;i>=0;i--) + { + ulong ticket=HistoryDealGetTicket(i); + if(ticket==0) + { + Print("HistoryDealGetTicket failed, no trade history"); + break; + } + //--- check symbol + if(HistoryDealGetString(ticket,DEAL_SYMBOL)!=_Symbol) + continue; + //--- check Expert Magic number + if(HistoryDealGetInteger(ticket,DEAL_MAGIC)!=MA_MAGIC) + continue; + //--- check profit + double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT); + if(profit>0.0) + break; + if(profit<0.0) + losses++; + } + //--- + if(losses>1) + lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1); + } +//--- normalize and check limits + double stepvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP); + lot=stepvol*NormalizeDouble(lot/stepvol,0); + + double minvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN); + if(lotmaxvol) + lot=maxvol; +//--- return trading volume + return(lot); + } +//+------------------------------------------------------------------+ +//| Check for open position conditions | +//+------------------------------------------------------------------+ +void CheckForOpen(void) + { + MqlRates rt[2]; +//--- go trading only for first ticks of new bar + if(CopyRates(_Symbol,_Period,0,2,rt)!=2) + { + Print("CopyRates of ",_Symbol," failed, no history"); + return; + } + if(rt[1].tick_volume>1) + return; +//--- get current Moving Average + double ma[1]; + if(CopyBuffer(ExtHandle,0,0,1,ma)!=1) + { + Print("CopyBuffer from iMA failed, no data"); + return; + } +//--- check signals + ENUM_ORDER_TYPE signal=WRONG_VALUE; + + if(rt[0].open>ma[0] && rt[0].closema[0]) + signal=ORDER_TYPE_BUY; // buy conditions + } +//--- additional checking + if(signal!=WRONG_VALUE) + { + if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && Bars(_Symbol,_Period)>100) + ExtTrade.PositionOpen(_Symbol,signal,TradeSizeOptimized(), + SymbolInfoDouble(_Symbol,signal==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK), + 0,0); + } +//--- + } +//+------------------------------------------------------------------+ +//| Check for close position conditions | +//+------------------------------------------------------------------+ +void CheckForClose(void) + { + MqlRates rt[2]; +//--- go trading only for first ticks of new bar + if(CopyRates(_Symbol,_Period,0,2,rt)!=2) + { + Print("CopyRates of ",_Symbol," failed, no history"); + return; + } + if(rt[1].tick_volume>1) + return; +//--- get current Moving Average + double ma[1]; + if(CopyBuffer(ExtHandle,0,0,1,ma)!=1) + { + Print("CopyBuffer from iMA failed, no data"); + return; + } +//--- positions already selected before + bool signal=false; + long type=PositionGetInteger(POSITION_TYPE); + + if(type==(long)POSITION_TYPE_BUY && rt[0].open>ma[0] && rt[0].closema[0]) + signal=true; +//--- additional checking + if(signal) + { + if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && Bars(_Symbol,_Period)>100) + ExtTrade.PositionClose(_Symbol,3); + } +//--- + } +//+------------------------------------------------------------------+ +//| Position select depending on netting or hedging | +//+------------------------------------------------------------------+ +bool SelectPosition() + { + bool res=false; +//--- check position in Hedging mode + if(ExtHedging) + { + uint total=PositionsTotal(); + for(uint i=0; iM?J~Ap=2Cb&Wd7{_p<(&hY;m{6A!O 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 +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpPeriodCCI =37; // CCI period +input ENUM_APPLIED_PRICE InpPrice=PRICE_CLOSE; // price type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot =0.1; // lot +//--- Expert ID +input long InpMagicNumber=120100; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error + +//--- indicator handle +int ExtIndicatorHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iCCI(_Symbol, _Period, InpPeriodCCI, InpPrice); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating CCI indicator"); + return(INIT_FAILED); + } +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // long black + (Open(2)-Close(2)>AvgBody(1)) && + (Open(1)-Close(1)>AvgBody(1)) && + (MidPoint(2)AvgBody(1)) && // long white + (Close(2)-Open(2)>AvgBody(1)) && + (Close(1)-Open(1)>AvgBody(1)) && + (MidPoint(2)>MidPoint(3)) && // higher midpoints + (MidPoint(1)>MidPoint(2))) + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_BUY; + ExtPatternInfo="\r\n3 White Soldiers detected"; + ExtDirection="Buy"; + return(true); + } + +//--- result of checking + return(ExtCheckPassed); + } +//+------------------------------------------------------------------+ +//| Returns true in case of successful confirmation check | +//+------------------------------------------------------------------+ +bool CheckConfirmation() + { + ExtConfirmed=false; +//--- if there is no pattern, do not search for confirmation + if(!ExtPatternDetected) + return(true); + +//--- get the value of the stochastic indicator to confirm the signal + double signal=CCI(1); + if(signal==EMPTY_VALUE) + { + //--- failed to get indicator value, check failed + return(false); + } + +//--- check the Buy signal + if(ExtSignalOpen==SIGNAL_BUY && (signal<-50)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: CCI<-50"; + } + +//--- check the Sell signal + if(ExtSignalOpen==SIGNAL_SELL && (signal>50)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: CCI>50"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)>80) && (CCI(2)<80))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| CCI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double CCI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the CCI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BlackCrows WhiteSoldiers MFI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BlackCrows WhiteSoldiers MFI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..e2370fb293412961f0aca3cc2f30ba9a0f4a308e GIT binary patch literal 47844 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

K>+?Ji~#ofIRZ{v1PiB`L+KH??rl~&FZhk%IH3+ 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 literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BlackCrows WhiteSoldiers MFI.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BlackCrows WhiteSoldiers MFI.mq5 new file mode 100644 index 0000000..e9bb791 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BlackCrows WhiteSoldiers MFI.mq5 @@ -0,0 +1,657 @@ +//+------------------------------------------------------------------+ +//| BlackCrows WhiteSoldiers MFI.mq5 | +//| Copyright 2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2024, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" + +#include +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpPeriodMFI =37; // MFI period +input ENUM_APPLIED_VOLUME InpVolume=VOLUME_TICK; // volume type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot =0.1; // lot +//--- Expert ID +input long InpMagicNumber=120200; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error + +//--- indicator handle +int ExtIndicatorHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iMFI(_Symbol, _Period, InpPeriodMFI, InpVolume); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating MFI indicator"); + return(INIT_FAILED); + } +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // long black + (Open(2)-Close(2)>AvgBody(1)) && + (Open(1)-Close(1)>AvgBody(1)) && + (MidPoint(2)AvgBody(1)) && // long white + (Close(2)-Open(2)>AvgBody(1)) && + (Close(1)-Open(1)>AvgBody(1)) && + (MidPoint(2)>MidPoint(3)) && // higher midpoints + (MidPoint(1)>MidPoint(2))) + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_BUY; + ExtPatternInfo="\r\n3 White Soldiers detected"; + ExtDirection="Buy"; + return(true); + } + +//--- result of checking + return(ExtCheckPassed); + } +//+------------------------------------------------------------------+ +//| Returns true in case of successful confirmation check | +//+------------------------------------------------------------------+ +bool CheckConfirmation() + { + ExtConfirmed=false; +//--- if there is no pattern, do not search for confirmation + if(!ExtPatternDetected) + return(true); + +//--- get the value of the stochastic indicator to confirm the signal + double signal=MFI(1); + if(signal==EMPTY_VALUE) + { + //--- failed to get indicator value, check failed + return(false); + } + +//--- check the Buy signal + if(ExtSignalOpen==SIGNAL_BUY && (signal<40)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: MFI<40"; + } + +//--- check the Sell signal + if(ExtSignalOpen==SIGNAL_SELL && (signal>60)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: MFI>60"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((MFI(1)<70) && (MFI(2)>70)) || ((MFI(1)<30) && (MFI(2)>30))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| MFI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double MFI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the MFI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BlackCrows WhiteSoldiers RSI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BlackCrows WhiteSoldiers RSI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..78f3132f519c7a6d2c3465522c0fa4f1c57d2c87 GIT binary patch literal 48884 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

#hM+{+Z7glPVjdi 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 +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpPeriodRSI =37; // RSI period +input ENUM_APPLIED_PRICE InpPrice=PRICE_CLOSE; // price type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot =0.1; // lot +//--- Expert ID +input long InpMagicNumber=120300; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error + +//--- indicator handle +int ExtIndicatorHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iRSI(_Symbol, _Period, InpPeriodRSI, InpPrice); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating CCI indicator"); + return(INIT_FAILED); + } +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // long black + (Open(2)-Close(2)>AvgBody(1)) && + (Open(1)-Close(1)>AvgBody(1)) && + (MidPoint(2)AvgBody(1)) && // long white + (Close(2)-Open(2)>AvgBody(1)) && + (Close(1)-Open(1)>AvgBody(1)) && + (MidPoint(2)>MidPoint(3)) && // higher midpoints + (MidPoint(1)>MidPoint(2))) + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_BUY; + ExtPatternInfo="\r\n3 White Soldiers detected"; + ExtDirection="Buy"; + return(true); + } + +//--- result of checking + return(ExtCheckPassed); + } +//+------------------------------------------------------------------+ +//| Returns true in case of successful confirmation check | +//+------------------------------------------------------------------+ +bool CheckConfirmation() + { + ExtConfirmed=false; +//--- if there is no pattern, do not search for confirmation + if(!ExtPatternDetected) + return(true); + +//--- get the value of the stochastic indicator to confirm the signal + double signal=RSI(1); + if(signal==EMPTY_VALUE) + { + //--- failed to get indicator value, check failed + return(false); + } + +//--- check the Buy signal + if(ExtSignalOpen==SIGNAL_BUY && (signal<40)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: RSI<40"; + } + +//--- check the Sell signal + if(ExtSignalOpen==SIGNAL_SELL && (signal>60)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: RSI>60"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| RSI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double RSI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the RSI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BlackCrows WhiteSoldiers Stoch.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BlackCrows WhiteSoldiers Stoch.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..536bb6030244fd8a3e2f0f632b9c2ad159505c53 GIT binary patch literal 49340 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 YWu$d@C7O!O5>J3xLv={T +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpStochK =47; // period %K +input int InpStochD =9; // period %D +input int InpStochSlow =13; // smoothing period %K +input ENUM_STO_PRICE InpStochApplied =STO_LOWHIGH; // calculation type +input ENUM_MA_METHOD InpStochMA =MODE_SMA; // smoothing type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot =0.1; // lot +//--- Expert ID +input long InpMagicNumber=120400; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error +//--- indicator handle +int ExtIndicatorHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iStochastic(_Symbol, _Period, InpStochK, InpStochD, InpStochSlow, InpStochMA, InpStochApplied); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating iStochastic indicator"); + return(INIT_FAILED); + } +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // long black + (Open(2)-Close(2)>AvgBody(1)) && + (Open(1)-Close(1)>AvgBody(1)) && + (MidPoint(2)AvgBody(1)) && // long white + (Close(2)-Open(2)>AvgBody(1)) && + (Close(1)-Open(1)>AvgBody(1)) && + (MidPoint(2)>MidPoint(3)) && // higher midpoints + (MidPoint(1)>MidPoint(2))) + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_BUY; + ExtPatternInfo="\r\n3 White Soldiers detected"; + ExtDirection="Buy"; + return(true); + } + +//--- result of checking + return(ExtCheckPassed); + } +//+------------------------------------------------------------------+ +//| Returns true in case of successful confirmation check | +//+------------------------------------------------------------------+ +bool CheckConfirmation() + { + ExtConfirmed=false; +//--- if there is no pattern, do not search for confirmation + if(!ExtPatternDetected) + return(true); + +//--- get the value of the stochastic indicator to confirm the signal + double signal=StochSignal(1); + if(signal==EMPTY_VALUE) + { + //--- failed to get indicator value, check failed + return(false); + } + +//--- check the Buy signal + if(ExtSignalOpen==SIGNAL_BUY && (signal<30)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: StochSignal<30"; + } + +//--- check the Sell signal + if(ExtSignalOpen==SIGNAL_SELL && (signal>70)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: StochSignal>70"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((StochSignal(1)<80) && (StochSignal(2)>80))|| // 80 crossed downwards + ((StochSignal(1)<20) && (StochSignal(2)>20))) // 20 crossed downwards + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if((((StochSignal(1)>20) && (StochSignal(2)<20)) || // 20 crossed upwards + ((StochSignal(1)>80) && (StochSignal(2)<80)))) // 80 crossed upwards + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Stochastic indicator value at the specified bar | +//+------------------------------------------------------------------+ +double StochSignal(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, SIGNAL_LINE, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the iStochastic indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing CCI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing CCI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..392f4324002c806a877fe5fb9676c8f96ed1d794 GIT binary patch literal 48826 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 +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpMAPeriod =5; // Trend MA period +input int InpPeriodCCI =37; // CCI period +input ENUM_APPLIED_PRICE InpPrice=PRICE_CLOSE; // price type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot =0.1; // lot +//--- Expert ID +input long InpMagicNumber=121100; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error + +//--- indicator handles +int ExtIndicatorHandle=INVALID_HANDLE; +int ExtTrendMAHandle =INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iCCI(_Symbol, _Period, InpPeriodCCI, InpPrice); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating CCI indicator"); + return(INIT_FAILED); + } + +//--- trend moving average + ExtTrendMAHandle=iMA(_Symbol, _Period, InpMAPeriod, 0, MODE_SMA, PRICE_CLOSE); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating Moving Average indicator"); + return(INIT_FAILED); + } + +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // body of the candle is higher than average value of the body + (Close(1)CloseAvg(2)) && // uptrend + (Open(1)>Close(2))) // Open price of the bearish candle is higher than close price of the bullish candle + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nBearish Engulfing detected"; + ExtDirection="Sell"; + return(true); + } + +//--- check Bullish Engulfing + if((Open(2)>Close(2)) && // previous candle is bearish + (Close(1)-Open(1)>AvgBody(1)) && // body of the bullish candle is higher than average value of the body + (Close(1)>Open(2)) && // close price of the bullish candle is higher than open price of the bearish candle + (MidOpenClose(2)50)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: CCI>50"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)>80) && (CCI(2)<80))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| CCI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double CCI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the CCI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ +//| SMA value at the specified bar | +//+------------------------------------------------------------------+ +double CloseAvg(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtTrendMAHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the Simple Moving Average indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing MFI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing MFI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..b98e3c6e003847c2e25a5dfe3700a6503c23e49e GIT binary patch literal 49420 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 literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing MFI.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing MFI.mq5 new file mode 100644 index 0000000..ef447bb --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing MFI.mq5 @@ -0,0 +1,682 @@ +//+------------------------------------------------------------------+ +//| BullishBearish Engulfing MFI.mq5 | +//| Copyright 2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2024, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" + +#include +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpMAPeriod =5; // Trend MA period +input int InpPeriodMFI =37; // MFI period +input ENUM_APPLIED_VOLUME InpVolume=VOLUME_TICK; // volume type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot =0.1; // lot +//--- Expert ID +input long InpMagicNumber=120600; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error + +//--- indicator handles +int ExtIndicatorHandle=INVALID_HANDLE; +int ExtTrendMAHandle =INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iMFI(_Symbol, _Period, InpPeriodMFI, InpVolume); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating MFI indicator"); + return(INIT_FAILED); + } + +//--- trend moving average + ExtTrendMAHandle=iMA(_Symbol, _Period, InpMAPeriod, 0, MODE_SMA, PRICE_CLOSE); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating Moving Average indicator"); + return(INIT_FAILED); + } + +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // body of the candle is higher than average value of the body + (Close(1)CloseAvg(2)) && // uptrend + (Open(1)>Close(2))) // Open price of the bearish candle is higher than close price of the bullish candle + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nBearish Engulfing detected"; + ExtDirection="Sell"; + return(true); + } + +//--- check Bullish Engulfing + if((Open(2)>Close(2)) && // previous candle is bearish + (Close(1)-Open(1)>AvgBody(1)) && // body of the bullish candle is higher than average value of the body + (Close(1)>Open(2)) && // close price of the bullish candle is higher than open price of the bearish candle + (MidOpenClose(2)60)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: MFI>60"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((MFI(1)<70) && (MFI(2)>70)) || ((MFI(1)<30) && (MFI(2)>30))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| MFI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double MFI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the MFI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ +//| SMA value at the specified bar | +//+------------------------------------------------------------------+ +double CloseAvg(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtTrendMAHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the Simple Moving Average indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing RSI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing RSI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..ee912f7e18e507dcf49e87906c2e007b14bc5b7c GIT binary patch literal 49134 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 +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpMAPeriod =5; // Trend MA period +input int InpPeriodRSI =37; // RSI period +input ENUM_APPLIED_PRICE InpPrice=PRICE_CLOSE; // price type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot =0.1; // lot +//--- Expert ID +input long InpMagicNumber=121300; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error + +//--- indicator handles +int ExtIndicatorHandle=INVALID_HANDLE; +int ExtTrendMAHandle =INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iRSI(_Symbol, _Period, InpPeriodRSI, InpPrice); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating CCI indicator"); + return(INIT_FAILED); + } + +//--- trend moving average + ExtTrendMAHandle=iMA(_Symbol, _Period, InpMAPeriod, 0, MODE_SMA, PRICE_CLOSE); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating Moving Average indicator"); + return(INIT_FAILED); + } + +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // body of the candle is higher than average value of the body + (Close(1)CloseAvg(2)) && // uptrend + (Open(1)>Close(2))) // Open price of the bearish candle is higher than close price of the bullish candle + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nBearish Engulfing detected"; + ExtDirection="Sell"; + return(true); + } + +//--- check Bullish Engulfing + if((Open(2)>Close(2)) && // previous candle is bearish + (Close(1)-Open(1)>AvgBody(1)) && // body of the bullish candle is higher than average value of the body + (Close(1)>Open(2)) && // close price of the bullish candle is higher than open price of the bearish candle + (MidOpenClose(2)60)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: RSI>60"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| RSI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double RSI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the RSI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ +//| SMA value at the specified bar | +//+------------------------------------------------------------------+ +double CloseAvg(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtTrendMAHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the Simple Moving Average indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing Stoch.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing Stoch.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..282046f2a6d54ccc7fd2b6435fcf3f00d28dc2c8 GIT binary patch literal 49882 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

    BrUBw6+g$`u+%69phj-`5pakxo>jhD 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 Z(L2U+M#@OcjkCeLntrs;wFy{Iei>mPtY-iK literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing Stoch.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing Stoch.mq5 new file mode 100644 index 0000000..7437be3 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Engulfing Stoch.mq5 @@ -0,0 +1,688 @@ +//+------------------------------------------------------------------+ +//| BullishBearish Engulfing Stoch.mq5 | +//| Copyright 2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2024, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" + +#include +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpMAPeriod =5; // Trend MA period +input int InpStochK =47; // period %K +input int InpStochD =9; // period %D +input int InpStochSlow=13; // smoothing period %K +input ENUM_STO_PRICE InpStochApplied =STO_LOWHIGH; // calculation type +input ENUM_MA_METHOD InpStochMA =MODE_SMA; // smoothing type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot =0.1; // lot +//--- Expert ID +input long InpMagicNumber=121400; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error + +//--- indicator handles +int ExtIndicatorHandle=INVALID_HANDLE; +int ExtTrendMAHandle =INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iStochastic(_Symbol, _Period, InpStochK, InpStochD, InpStochSlow, InpStochMA, InpStochApplied); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating iStochastic indicator"); + return(INIT_FAILED); + } + +//--- trend moving average + ExtTrendMAHandle=iMA(_Symbol, _Period, InpMAPeriod,0, MODE_SMA,PRICE_CLOSE); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating Moving Average indicator"); + return(INIT_FAILED); + } + +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } +//--- + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } + +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // body of the candle is higher than average value of the body + (Close(1)CloseAvg(2)) && // uptrend + (Open(1)>Close(2))) // Open price of the bearish candle is higher than close price of the bullish candle + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nBearish Engulfing detected"; + ExtDirection="Sell"; + return(true); + } + +//--- check Bullish Engulfing + if((Open(2)>Close(2)) && // previous candle is bearish + (Close(1)-Open(1)>AvgBody(1)) && // body of the bullish candle is higher than average value of the body + (Close(1)>Open(2)) && // close price of the bullish candle is higher than open price of the bearish candle + (MidOpenClose(2)70)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: StochSignal>70"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((StochSignal(1)<80) && (StochSignal(2)>80))|| // 80 crossed downwards + ((StochSignal(1)<20) && (StochSignal(2)>20))) // 20 crossed downwards + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if((((StochSignal(1)>20) && (StochSignal(2)<20)) || // 20 crossed upwards + ((StochSignal(1)>80) && (StochSignal(2)<80)))) // 80 crossed upwards + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Stochastic indicator value at the specified bar | +//+------------------------------------------------------------------+ +double StochSignal(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, SIGNAL_LINE, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the iStochastic indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ +//| SMA value at the specified bar | +//+------------------------------------------------------------------+ +double CloseAvg(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtTrendMAHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the Simple Moving Average indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami CCI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami CCI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..cde980176c7e69dcbfcb1de73fbc9a8cfbde880e GIT binary patch literal 49884 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 literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami CCI.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami CCI.mq5 new file mode 100644 index 0000000..b61b438 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami CCI.mq5 @@ -0,0 +1,682 @@ +//+------------------------------------------------------------------+ +//| BullishBearish Harami CCI.mq5 | +//| Copyright 2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2024, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" + +#include +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpMAPeriod =5; // Trend MA period +input int InpPeriodCCI =37; // CCI period +input ENUM_APPLIED_PRICE InpPrice=PRICE_CLOSE; // price type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot =0.1; // lot +//--- Expert ID +input long InpMagicNumber=122100; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error + +//--- indicator handles +int ExtIndicatorHandle=INVALID_HANDLE; +int ExtTrendMAHandle =INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iCCI(_Symbol, _Period, InpPeriodCCI, InpPrice); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating CCI indicator"); + return(INIT_FAILED); + } + +//--- trend moving average + ExtTrendMAHandle=iMA(_Symbol, _Period, InpMAPeriod, 0, MODE_SMA, PRICE_CLOSE); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating Moving Average indicator"); + return(INIT_FAILED); + } + +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // the previous candle is bullish, its body is greater than average (long white) + (Close(1)>Open(2)) && // close price of the bearish candle is higher than open price of the bullish candle + (Open(1)CloseAvg(2))) // up trend + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nBearish Harami detected"; + ExtDirection="Sell"; + return(true); + } + +//--- check Bullish Harami + if((Close(1)>Open(1)) && // the last completed bar is bullish (white day) + ((Open(2)-Close(2))>AvgBody(1)) && // the previous candle is bearish, its body is greater than average (long black) + (Close(1)Close(2)) && // open price of the bullish candle is higher than close price of the bearish candle + (MidPoint(2)50)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: CCI>50"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)>80) && (CCI(2)<80))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| CCI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double CCI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the CCI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ +//| SMA value at the specified bar | +//+------------------------------------------------------------------+ +double CloseAvg(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtTrendMAHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the Simple Moving Average indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami MFI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami MFI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..abdbfb72d1d186fae92506feae4e6a558734dcf2 GIT binary patch literal 48860 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 +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpMAPeriod =5; // Trend MA period +input int InpPeriodMFI =37; // MFI period +input ENUM_APPLIED_VOLUME InpVolume=VOLUME_TICK; // volume type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot =0.1; // lot +//--- Expert ID +input long InpMagicNumber=121600; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error + +//--- indicator handles +int ExtIndicatorHandle=INVALID_HANDLE; +int ExtTrendMAHandle =INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iMFI(_Symbol, _Period, InpPeriodMFI, InpVolume); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating MFI indicator"); + return(INIT_FAILED); + } + +//--- trend moving average + ExtTrendMAHandle=iMA(_Symbol, _Period, InpMAPeriod, 0, MODE_SMA, PRICE_CLOSE); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating Moving Average indicator"); + return(INIT_FAILED); + } + +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // the previous candle is bullish, its body is greater than average (long white) + (Close(1)>Open(2)) && // close price of the bearish candle is higher than open price of the bullish candle + (Open(1)CloseAvg(2))) // up trend + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nBearish Harami detected"; + ExtDirection="Sell"; + return(true); + } + +//--- check Bullish Harami + if((Close(1)>Open(1)) && // the last completed bar is bullish (white day) + ((Open(2)-Close(2))>AvgBody(1)) && // the previous candle is bearish, its body is greater than average (long black) + (Close(1)Close(2)) && // open price of the bullish candle is higher than close price of the bearish candle + (MidPoint(2)60)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: MFI>60"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((MFI(1)<70) && (MFI(2)>70)) || ((MFI(1)<30) && (MFI(2)>30))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| MFI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double MFI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the MFI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ +//| SMA value at the specified bar | +//+------------------------------------------------------------------+ +double CloseAvg(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtTrendMAHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the Simple Moving Average indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami RSI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami RSI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..2d8aa1831afd2c1df5ae1471258c01b53bdf8657 GIT binary patch literal 49266 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 Y<6~X)#}M+**oWT4PlxI{_#n^!2PQ9peE +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpMAPeriod =5; // Trend MA period +input int InpPeriodRSI =37; // RSI period +input ENUM_APPLIED_PRICE InpPrice=PRICE_CLOSE; // price type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot =0.1; // lot +//--- Expert ID +input long InpMagicNumber=121300; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error + +//--- indicator handles +int ExtIndicatorHandle=INVALID_HANDLE; +int ExtTrendMAHandle =INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iRSI(_Symbol, _Period, InpPeriodRSI, InpPrice); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating CCI indicator"); + return(INIT_FAILED); + } + +//--- trend moving average + ExtTrendMAHandle=iMA(_Symbol, _Period, InpMAPeriod, 0, MODE_SMA, PRICE_CLOSE); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating Moving Average indicator"); + return(INIT_FAILED); + } + +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // the previous candle is bullish, its body is greater than average (long white) + (Close(1)>Open(2)) && // close price of the bearish candle is higher than open price of the bullish candle + (Open(1)CloseAvg(2))) // up trend + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nBearish Harami detected"; + ExtDirection="Sell"; + return(true); + } + +//--- check Bullish Harami + if((Close(1)>Open(1)) && // the last completed bar is bullish (white day) + ((Open(2)-Close(2))>AvgBody(1)) && // the previous candle is bearish, its body is greater than average (long black) + (Close(1)Close(2)) && // open price of the bullish candle is higher than close price of the bearish candle + (MidPoint(2)60)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: RSI>60"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| RSI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double RSI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the RSI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ +//| SMA value at the specified bar | +//+------------------------------------------------------------------+ +double CloseAvg(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtTrendMAHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the Simple Moving Average indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami Stoch.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish Harami Stoch.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..2751eb2e133d2ac3366492b2aace5758caba61a5 GIT binary patch literal 50270 zcmdSAQ;aT5)Gqk8ZQHhO+qP}n-Mekuwr#t6w{7=s8}t2Va&AsC$z<+kt*k7hDpgNi zRb@RTrpX5E1h_;5fCBy#Ai(ke^8XY6-_qkRl2{-Sx+e?5weS2-ss4Z0|F?(#-@*Tb z_k;id{>K1;1eE{h5K`Ath!Gn-qfWX>jb4O3YfwlTce^uH4 zB2xhU|GDu05A**)?E2pcxB$2T4F9Re|5AE@9l!}-3t;;Xqsf1`?f!p=?El@Cnf^n_ z_@DlNm2J8;P8s-QcyP0Cv3MVUws=xQ;7T}HwAlEITWG9yQHsw|^uqp0=xcV7u>I^R zvmX3s6nr8F!h> ze$%)$csfQlwS>cee|9-*tH2EzWZc`fPS zlW&;U>y^1cdIoE?qUfs=aW6_tL7zxY8nTLf$Z@bk7*@*>K)72{yZHK4lJICYKv3#s zvr~hcE98o;@=PKx^3@7v5hg*-y7tRSvn|9WYhOMH_OL&Dw7pukufWMCZWAg7E`f0R z)NCVRb_PA~Ujlo6FAy==EYLce>HC->1PW{FK#MX$ygC>={Xu^(kaFPvcNMl%@;c{- z%91Y5eVzl>uxZ3W{c6q*SA(evBv{T(Y9db73Kb&|j;FQYX~i;NlE;%Cb;(swH%uR} zj;$EB&N{Xjgi~0J`!F~yh?9^KaCeea%83qkvu3!C2ujG7?#JX~* zQ(m}`S`~&nNal#O&svG*9^06=Srb-!a9p zIrk_e+ksu_q4z{Qnqu)HOlf*9pBN=__)K0nptuvB3;ffle|kXsK7H%u9qFmU4!gr6 z)eX6HaOsfZNTeM@$HvfmXN2j=S>6G&AuD9rVp_S`>vLb_0Edi5A7cib2QsuGNk3!3 zw4NFJ&+ejYLGt_8I~y|e`tkTFtaN$h3i;I!g&t$~b!Ky0)_8QnbH+19Xay*N(qA`M zQl;Lwq(*7fS&Dd1AGlGl(`zG&SI;w728jW;nu&>dGv+(JhM+($Pdr4!ID~|;^7)9k z_>V1%lQ>1|C=!8K6|4E*R%BYWYqwd6)>Ft|(10<*5rls=g{jL>&dEeopA8&0(u&~{ zZ#*nGTQ?@(*TL>O)WZ}iMm=8vN5#JQA7QpyVWx?I=o^;#fil)u`#>jt)~s~H>g%S{ zR5eSQ)^ZBCmn|o^4IQ1Ip=;YPfgQ-+e96AI9Oa`v^{LSyyPVrCufNV;1^NO$`1tOD z&us}N>0bIIi|ZD)J2M1tAk-G3s8PT8=mEC}Nd(9H{{WXa$7p}JG7myuoWLGD%;Od; zrbZ8y^CZJ9qNiEbWf)pYSHVzc#}1iEy_3kQfFG6V=_IeX(i|ZCwYb{$6?72r9V}` zS3V3bFSP_(X?>gJ>C=ZXvwG#poyZX^T)N@f*j1MePk%n6KsEMy5eM%=&I_wSGd#J85EdV_*0z*DlyK|EAp%>4CoaP6r;yEd;3`XUE zV-?X45Q&qq5RD>|p8j+dhS_?vp(7sp`4!aAk%191gwrFwoiz(neO!hw_7E>84$S8q zXz@v+)&DM47(4Wes5_u4%XA>3N9ZUVX-o=@Xu+_4I@-BCaTf|)hWAi6Hda!p zUO#$4;3m`-P7^aSui%lCGiY zE>ee2bM%7N@!X?FD4Eg-6AK4R*j~9^{Ay+F9GZ1erZDj)?_WEOu*Bq7ppk%$ zgHrQiL|P{fC~Ow}^vfP}2DAF3)8G_~$cdhGyBzCtn$U`^hA%j#)gG*;k(8=S{@}NH ztS_cf|35zQHl)y=dEq!NcVm!VH(d0!vyHWLl$D-xc2pdp-)cneEWa+%YPhu3dY8e# zc3AvU_z~%+^7rTa-$Q1TzpoQ206A7oo^h1YsW^X04;Q`ykB|onM! z;K4esFB>p?$*}JX%o?FcM3u5*$E2V@A>#|R7;|4GJOl(R;?jEf-zU{GTI5J$3pse1 zY4;HvHMJ%F?v*;qc?-XY<~1(*o~*#el~>(uOOr7=kEPePAgL#bzklbXMKhBy^G>D0 zS3}D(NB#EkZ^(U`!QY*%lfnL@BVH2KtL@mgR<_Orx8@RtulFAbZn$N$DYDYCzet@H z3(8L*SteaH5`8H#L-47~8x=&>P=$NLiH(QgVLZ%jQp>rMA)AfMR~}fP7O4I_Xo)Td;A?r^aSK__6b!0^ z(zi|d8jY)##$_0t%)b6GtW|r}^HxbUkWCEMjOl`_jF}8~hYu?EQBT8j+c!O3?>&x4 zj7%&!kR2|KWFLjmNdvUdEh!+PA2E~Y2d_iSOCj_t!Uy&%`Xhq^g9x769mAxmA0h5|)RJ7*ortujm;A-@e5KC!|#R;a1DP!)@F!NGfP;g(V5#MwrQaSZ$` zh5>%b4d5W=o^iK47fY+Ss2yBHgSz3C&1m_CY}xZ@hPK>VVAgRQh-!DCb13 zRjBG?K6=5L*yqyO^mia1yis$AB9-7i#dk9lCRu(H$3H!xdT5sM9|Xvbo&lyrDlSp&9jMoB16v!Xu95#9!6ZW9P4I`vvq}WiXs|c=qQlly}vJxo}`y1 z?KHt5URD%fDj^y!qG5*{2VxO;{M=~4w#e8eQ{=g&FvrYYz5_+EsZ2JTP^~pdfUB^Wixh2tdJyINjpiov8idF{x) z;FT%HYy%ET$;&&WoD5pT95p!X$Ctj(*0-?yFmS)Ly7@1tDhBWYNRWwx(9@U&t?F zR}T(8dAfOAy=+yHUZFUt+b7sqsOLH;(UFHVAa@(_Y;-VM2ba-QqMuF+f$THQtKONz zZM|$+l4MnL9VOO~`8<4O=t;UBhNdRZtztZ-{@nu}dIj!#fRMv4`6vPF`3Asg-Z9fV zglx@GAhG!J_(+mKe(eIisAwQM0|U5&yeS;0lQqesv6=wkvk6<$+FvYX!({^R5-l!k z4Yx?|rco>uu*NN)C#jjbUU-SSSFlXN3Y?Zh@JyvH;Ozeqt{@@0DLWK1%L&7(U`uWf)Q7xoiA6Ldt?PX#~k+>F>C$h^xs|-?= z(s=7vl}@$Ds+y$nSDO?q%nGlRm309V%F_Dt+`fa4$!oFZRn>i`AeQJ=k}ovfXoQ~u zzf~ip^A9(ZyQIwI)q`a5BgJ*wq0k8yAH9kvQ#;MB}n_qiY4%K9}cyX`syd4}om=!UZ z-$hb%V5`k9Q$hiV^=~&3y_{>V0Kybt&vWS5fL9^5Np!Q=wE(=KLh+41!HwzpyR}MU zZ3>apq~yJE00#dBiSC>yb~)Flh?WdVE8JY6oitMp=L}9t9Rq*3d;sWd04feNPTspw zX9DVBB!C20ar$K@LRIinq^4B;Yej5^k*ePa*E|I0>v;EIK!k`j3{lSUaC^g`MtnBs zDYKI1olsCYd0_rHOh%;Yuvi9D$!B=K^HmiKks`8av3rmC(4@H z0;H=y>!4(v9QM)4EtS{Y@+S_kNlf{yIl*xH+Njm$1~nIa7ffMb41=kqv?x^cP>o0L z_o_k803;kg04ZfCj9lYafx7INL1ZPj5$(WzYYsMV7o71QUA~#9E6(`4L{v(>h@Ip)9j@dQK(BSC{E*d>cM?qNjHd{}6vx)}Zu- zuz|QJ$>sJB4I*>o5Uy2;6#;N{skvi-qfn%uFP^aJ4AoV6wgjRVS0%HlPqteY+>*WM z+cAA6ES;;)#{xkCS7~M5-m_8gf^=WV3s#GwhdA+dxs02RwFS?aa9cDS-d)$16AQTo zojpOmi2mchSF)f?!O&7{X@l39i}=yZBOTBgzO15clbb~&qmArn$8W^F=CN#H8Tb+7 z^-t&df2!H(X!4@|TP$(f7|d{2pun1Pgp$x|s>;FUYur3L48I1Vg|#dK#{bIyT4n8k zCfaXALgg?{uUd?V53?VkjCe?+4B4suHY>k8H@mxUu^deSARR$XCJ=I>lA~eu`w0In z%BO@Q# zEPR_@16HeLf>H$Y%@?y>3j@QNOnSi^R%0%~l|!tNuCfsNmXs@(W>afWj#Q+j9{NRV zu(#zZfenp$&z{^$G?^`b>m*gF;xL_AWZ=m>V06h)?TVFaH8@Z(4h+u&i79<#!pi~7RKBzTd{kcW==tE;07hl=o; zqpfT3qi|XZs%@l(I7)OtYGRE_vW~NmG zQzv7r1xWRC;&V4U@&gU5V+E6!NHcx$0q#Ao?Q%nP>exZw4Q}=yWjlN|^DdkKq0#`5Y#l(}tgm!0nCQnD7qmn+5`(`0gypf!|2&^v|7gX|N zL#Rut@4mBN+eb{TEZzb8Wz5VF;fP}_7%daI%bbjP%+B6mP5hm9{rV?eyV9YvYRD(q zyS-fT%Ik^Lj}*23>|*ch0cwhj6}`yKkjg&A(_PmC)I^6NhFLGIW5aGYi~C%hQpiMP zg&FoY;QCtb2ImMNS0+*hB$A8I_A8K+%6nJP5?%xlbSb2>`#U`g)4=tWVnTVRx|JwsX>fKSz&}Kva)c~B89U#R&PKcKn zZd7h15u{)*-{gM&+!5p*ddGC}{s;uAKepHP(jUX{Y>}{g>#YKq$I4pr7lj~Qi0ZDU zO_qkS0J_+ZQo$!JeoOp|tcb}p(%B+FRC`dJ{QWFYkc2fr`3+kD-$#UCN=sI*U~j`y z0F7+Q9nRhx`;7q$8hU`X!|-@g@t}6)k|~4*+c`<3=w(XpgSqUH`C;NRh%o*(3X}&- zAW3RR&V7TP%&d8n3ja&xc8)zu@%noamg5-pLa?$ImhGw4$Iyt7^<$TnxH#0@Mh{QTSSvht##ptFQjsd z+{e&1Sh+M1En2_LY<5)7*IjI`5cV<_oJIf#gij}JsN>L8Ku9s@x`&K)$o>`4Um8lQ zbWeVdsMONo-2(_Kkapq}3ZIv`0D8Y3jn6!i*2%h?zsDB@dPcB)lSF(^10Gv|*i~L_ zv$V^hs6O6zPA)wce6yV4UEp_`+CVV3MO{iYWl1iG6G{@DqcE!}Xk4DOe182U$DJBt ziBHXRZd!xj1mi<1a2qM+(&JGOEqN_cC+m2pZxhnW$;A`{!g4+&HvxEp@1JmW?Gzwx z*Io6dScW03=!H6=&*=NuWr(V03QF4bQeQ$IYDEfx%=C(|qi^6yoB2hUO+RvGg0}Tc z=I5$ar?z@Fz8<>0%b=kV~uV zsp|We=3_Ti@Axosy61fMv+VurQqAYJx7S{_)p^Hlztd-*jXCHZqRZIWxfw6HAv5L^ z4-ft8;ftE3E2h~=1~=mX{ry}&=H27+vm-%5@LPU=b)s#*OO5OLivW{o5uDqS>M6If zHKrdsB$d|X#=C*qpMm!$yYX4q${U)pyPUrnf8z`qmW|;EGq)FpV}MaJNe0f+c&%b{ zj0XdlS%OT~S5%qlE^@VsQ{jua(;kWJ`udiVf155h_z^=78lO5bTxq<(9~!&DxPl7; z(io2wlb@)yhQstg@48B?= zXsmZHtjk}FFJxX7irwviq;Oq=z1)OzJz3t7LL?fdV%?&3KHngGZLHQWGX`IW7Q6Br zq3V_+8pYQnE`@6{2z7MV%iu3Mmal22ej&mPzk0cyFSE+{ni(R*c0~8A58q5Mo`|Fr zih8A45k!F2==csiW0NZ|tIy-YCX? zOx_KX|9Z^W^zDpCWR*5fV!cdsinz4-I{UkO~)aWv{IpJSO8IHV< z9Ti>4_h?3fWc$?YFBeHX?VKU7k3KksQcrj5FAp1X`?q`o9$Oxmtg6BQ$i2o$^D7O~ zw0DFxF8jAskzGMbf?-~DE2IOP88*=4U)k(A=SpvcK&nCi+vjcmMapj2((rD~a)@(( z?e)WO(T&BG$37O2=F9L3_HMv~WkFrg^R85GfRMxht0KBH#-E<0p1ZuYRv5ZTj+YM^ zmFCS;zVoGuztUA$8jtnMJ`V`u|*X0IOQnzr!ZyJ495&jwvVa5NGj@UaE)GltFij`Cch(3JKf{Z_K-E;~P z#kj1@NO}eQb$vX+BZ5w`NJeB!q3*}CGkjnh^vDnpuvuuU`HcJ)nxKHg%Zg?1sBeZx zX@O=M}D(tZay!E6iQP93n*?+4R9h;aCI|9ESWy&S0N9j{@ zPkFn!(1U}q@q$FzKPr|Mu^p*v3q9aRo#R-Q{#p#y!F~67ou-C|8R|Lx+>fk~J7t^X zyA!F;e0dJGmZwbQjy#z@<{(RT$aZMczI-=YUkth=I$lsNGR7F06m7B;QcYv19C<~f z*0V3ahVHhy?GMI-!T}~Q6W;F{w10MMTn*RgA$pAnD^ zH=G^91y&>k3NU_1JYin?OB8O*L1q;+(&Rxv50|DvzNnUd6bOt6YGSm%{)bsnA|*C0 zUSqk%oUn2k8^t9kF$LEvzS*WPJf*anvO~ABya6K7erFd~ic|1uRG6K9ZbHP9K=eTB z9(CmI`AJPdjH;K2qG9%T!qqu;=`QPY`V>>K4dg2(SjZOzDqpvOm2GThHo+Z>ru89{ zum5t?A|h$~QBz}R2a=kRWP(GXihhAEq* z6Ti2UEWt}b7eO=VqS|o5o)Flz5@P6|4@T7#4iJ0}%3BS5i#3Xybq~TX5Wpd<+kkB+K}I)g5jm76VcMf=1S9xv`0{gK;h;2 z-;6sy0K4h)#+H_(6xwFs6Q4WoL`tx%UfkW_$hRLD7BI1d zn6}+GtG@FiuB2D;a&ezl;Eg_j;e=@ClL5nBPXMkxo^uEiqM3BlY6T)F6e>4$jX96iECF7C(lQ z4#_;?>!g=a90EyhS+ss47PnK#`CDB3WRk6#+#1sz+k-`wvDU8u4$gH0W~kKG!psX? zmE*&#pfG&Xy`d?g$eOL!ge&4#f3c2|leL`_=>6PnEJ6Y`}hk8&6&mco$T@LDHd>y@$ zPB)RAqi6OXJ#JIgCBqW;fv9hKP=MLd(~6dr2c3QToYBfIbk^KDE;8K1Gm!+bX^Mfs z_CTyNhN!H{9VvL}dF%^?1rGljDFFT{P(s=Lx24c|bQA>pGyoVKR6mQj8^e-)nipK1 zVS6EEgIq8fSECV{7n(Wcq>jN(ymy-v?hZA7c?6$G(^6^&uir8HsoGYm#;%oU^ope` zR34I4KM<)FeH!x_q|MN<-Alv_k2Z_kyZTl%;>7(xS>aHk*jAJvX{^ zd-fOynk-CoO;cfnpG};vLqw_v<#CNQ~zn0_*_#_46GRAI~u<8bC~v?K}IBBonR7Y{GMpDNP->F?{rLEIb_C~T*);V zHf3MemA_0TLpZ*)i7_nHSDG#b6wV0!PwL0X-EzOI!(D*e)G?0_;3g&0l?MVM2sxDl zDd)6HEF>v-8M6>T8onH0R3MS}hvc)#*p%@XWgXg$v=iSx6;ych%jc|2iVErSfk&_W zV1bG=KIQz;t1hS}792s3rLd;!YD8mxsv&|)OwD2u$eQRBq+Vm{6NlexVs9Od(t9V9 z)48~j>B^Y?Qs=2&+JDcVK;Uruqha48=e9>hbA@s<1gWfq8w&mFhxmY1w69MSUcSEV z2Z|wnPPTCy-uH6F#B3ovjl@LKl$iH%4%T zSKq!GYPH8!puTWDA2gOJ2}{O;7}X<)&ojRY(+5fx(CI*%4>BC zIXE4IJ0K<5pKP;_GRkiLU}zTapW^!9TsymK_PB`fiZpj`M)m2^g@Uq7$yoh^O0U>tICby0CbJ}CY)qx{^v7em^#`^C40 z*^yA4hx#e`m5%4E*l?$g507U5aAlh&9x$m@lo@v%a%TQEfxmw)-}dn$VgmF83QXU; zfJXlN;W`PQ-upx$!k_`RfQmZzt+3CTQqHvJn@L^|$QcvZsgYatStAB{f|P7D=Zt+_ zX(6GNx1i>Y(E;zhP1gkDsaA@W2tFG&gVWFw(YPGX7-T_{sM|2lCh)AQe(zHiQnVO$C6@0_80`r@ zKL6`-aE?|_!oRLxvYuy4S_d(V5U~m3%P(qa%Sp+b(ak1X70X$26ja_$%DRGga`hPH z^Nq;Nr+;UewrVK)U!Huf6Gcd*AFmdIU%V8MN1!otMekcU&#lS*u+UnK=;cumBpH)T z&ir@zG8iAEw4437>m*vt>^e@4rS|XAo!8&IgOu`cJ@nuTIJq-x(|mT+Vd+$Yu_xQM z%?Nt1setL&Kd93iMd|XHbt0xFS6BpLKfo{F@pDrQyAB*tL=(LjOn@W=AAQ8L) zLR7Vgnru`!wA*c!$zfsz>0|-Cu-`$b4KM6?5K~uwc_mtE!m+2>K`@A3-e;onkG^X> zjjK~{3n-%!7PZTB%(UbXU=YH00&i5Mxx;4Z`^$?39a;!|6Ss-k4}50yDpc6I7D(1y z-PfhC@c;GJ?+2T6i5b6;W!kJPg|Mh&wVMFg*J1hpk)dR7Q(%N)U@)O~Ryx#BE zq@HrWCC+>oUMZh-(bv~vXv6N59Zczyh5acHaVJCZ`j%G=Ata>6E%oe%p(7W5PjPTb zUAya~ADri-QCZ^@c(ZtnSbU`(PwNd^!Zxy%V(aIm~+)1?t`7xN_<%1G;u_jlEOBaL?lz z!h?Xb(M@vNkArM&_C-XL^Y>#IpWb*gkTE8ch)&Vea9>-d@K3jkn-~OObKXG|qxxFT z{NIMouIs}C=!)f$V$kO$Wn4yV$2b*u$pJ+ZWvS+;-|}I6Dil)%Z_Un+b0XAUAA$y? z_ZEJT77S46wwA~~uW#}%YiPm+m$|>Mby0cDBU^2UFRGX%TY^eEhBRs-m4E1@q(=f3 zLlgmlmxQ9}$+a8q=^JgrF=!KqbYZYihot=FiVz| zP*+4do&pMmy)*Wh4us@$za4aCn#%znf8Uw4LuBe)pYkgCVqXe&4FPo9f(61~slm}9 zdrPB?glMrp^*3s2vU8YLUxN^k?jmCz;?tbO&}YuJP?F9# zQ6aE%SAn@`_}chN`8|-~J5WWJ#Wq}xUUAC!hQlX}>mqn8IYl^P)2WrPA_+2#MFjcO zGkz7_)yi~|lZTws?W7e5JWCLdVenbSajQl;;3$DO9v2EqLSyD-<7x`Wtf87benh00 zS(UQ|a-)UH*7zHd8`8SgH;Ny>h;k>3 z75IOOp6#`~6DX?t`Ob+ysfB_AgOrQ{NRX7Y#F!s%wqlMho8Azp@Sm-57QI^s=v6c{ zz;|)kDe>#+fUk(#^HDb#q8*(j*_iE+gz>^*`b?EfAngEAr+e-P`;kckp^yl? zo-V5&nQW4>-9DnYhiK3%l?X`qr9t!-^ci=1I>GB?nnZnzoL5Pl5Xn+tMg!2YSb^RO zm;)lbS4H>|yDC5y9LZzwbfgJ%7J?pN8864-lm60N9|ueV3ifgtXo<1Dl#|wdseiX| zVowQOGHogn3lqL`we0(+JeOsB{w>Bz&z8!z_xQ&0^!1jAi09&<3)(> zZ)p|5=IbQe?@o6I>*hTX4mJ{R0H%V(D{EoT4(xg|Em_MY!j|aum$o8u1fBkSMz(b1 z`6wE0%C-nZJx?^!fQ~xJ80UNDj7jhRHfgLm1N=8dT7pRUGek$ZSE|Af6~>w(8a6O4 z{TU{54OPm2!uy$byKzhk=|IuY>22j~5K!Kyhl<8&7 zDKH@TFp=DRi_?8s+h@it87c({EY_GzoDw2*t0c481{|jDxW^$Hm|*=123Lqss>Kot zU`3bkG0y0Yw55l~MdeL&A4r%?chOC&s4dmlCQc)Ktq%qWhCsx1ULS)D)7M{71RHCt z9#4Sl?t;7PqjORf48uhcoBj@OoZl5CNyo!1&VhVGjDvg8JU)5`b>o0e8nZhgJ@Q!`^LL=auw!7r169#|Gf z|I1b-6};5pbo0XIKi5msax)Z2!VNu?k6@1)F(333Q(~WzuZ&>Pey=k;SO{81b|((w zkYY?EgGP6|8?n;W;SywOcv5#gl5C9bDf zdC;U&-S2%i#Ih&a=_Q-AH;1*W%X@BnR%T=mw1o&k<#EKHi8Vh+4a1s0*UD;1tCGGp zj+sc7oz5JnG(8F)RroN!Jbtb=;^Nn%%-fs3Cu0BHEWd5&eqkZY&aNv^2(&8Tw>Yry zrcVn1r=Tsu#VY zibCx%TpJEd?{;x) zSiI^WX@>d;8npgrQR_l4R+~5dN~^H5%c1t4Pn^t>v8_|m-J1kaF0g|1Gtj#~s!yH< zK^Oy%VD~M2tgcjq_-+455h%{?pD7^An-Qi8q_O`fwCgw?`o|{*+WQ)c;6h@jl#md1 zVa5bBc@{6=YZeBjKA``mF-dFXNKa9U%HvGD3`j4=GE*yhjc!WItuPPRNTgW1g_*8^ z&?{d{s(0R|H0@>&W!4ar(C{dV6hx7Uk~n?PFx~%9u>^@`MC?*mfVEqrctZR`*{TM9 z8%cg@Q!5OxB$0DlRb5%@K`fN=HX<|cIT{R@2Fq8Ha%PKm-5TK;l^s={?$a!TYs>i# zac0NSYo^3P{Ya(>h3abxcsZY{eTe9S|BWY#SQI6f;h)_RNe8DUZzd! zw-2t8KKR61-Qkqq@@%hC!Dy}EpwDaDt0502{1->55NyBc9?0d;Iz2SlO;a=_lXfn` zh|1N6{Q(jycQ2v$E0DrkPncD25+|htZzx9&z4>ICS6a3fE9{lrg!W## zK@?JTZy`VAy}yff=GJ;cv3-(lN?+=^)l{Psk;KvU4UZ6}Inu^iKdq3#ZI~TTzd~xE zoCiqfmOj8ohr~wf9>a>|E z?7u9qJH`%=5~Zw$d@L3ZZ@^P$z}eNDo~RoW+mP5Ac6Uc`qzG+xWG%NIZP5dV<@>s} zy=>DY?FC|C9ODt1l&6iIx`m-l4pHB(A}~B9A;?JSdZ`~%7{j&} zkf+CKs5)rOW|tOuI6XH{Zbv|DE)~-qi&GgOp!_KVS}<7ceVwR(f2@lI!mxzpz;~3jkCh1M^;NWr1PmY-Wq-;~BaldM4Oa6%C zoQ;tLKHFwfl7Sh-x}vY~$1dKq{ojRv+=f)O(KhvSz~EkmI%lMYtm;3SgT#c~#CWtt zhF+*9a&{~CP>P6z?XKOcxBC#hUZuuW_!1q@QS_rSrkKa8^1ZbQ>Y+JeInxpPo2-@Q zaic}Q9flOc!0oD;2*Y_HZ&-bUA$?^?=#aRqKj^zw3tUE{5+^LCkroK2H1bcDle?CE zrlHs*mfavOcqCy(Z?;mDm#D@ojeo%hA!rVV$-zA=k1Cim{dHT$SM<6z#2TCHKYIl8 zqIH6H=>UisnD1x|fiFcQ!YqNO)Ld9!%G4~03f@ycYL~VvXbF;3s-CgL-M%V379m&U z*`<*+=BZbQA3VbBGu+NFBlATXrn8H4zSaf3TN$(?4rFWD-^Bv2zXLJa@9*etM&4cM zXgI(1n);T++E;X#*yZ{}nc`~};m7SiUfIj=C4ldS9`8@YvNjvk61u0X`|^hXbP`!)oO%Ph8+7c$O-%?uQWIZu^ogwywy+Jl)Sl z`oD}mzSl}z-Vlsl5N4?DOqGttm#D~=N!Ul0jO+F}ss&ugJxgBPs+*F#4gLL=MUOzt!t*$by|e6k{G4V24~yit zt}(UgS`N>#+MUlw-ZU;>Ksl&GsBw1-^>4|^?1&)<+zAI-gvdNmA&#!Pmhry}er@>8 zr~RP_aILi`+#Na!p#DU4JEb5h1+nri4>Cly*>};v&v`Pk)*O2o>B%4XRRj-17pdk*!|cH*!zZ z5EUi1uSzQ*d}wYG=^N`qw5U9T-hrletVk^GvG|f-D?ympWSHJ^?G1y2le_3;!ujiQ z-K3rmoHs_(IMgk((?hGOLv380vaikMpUIcQFsIyg|DFa$HHk^xSuL`7?zgmO1TJJH z5|NZ67-Ox{tEDBI-?E6a*xVU{u&hJ086b*hc-6NRl9UQBXA$Q88Lm?j7l*=&g%9@M zPmc4il@d6tYVf)a$4?K986Y(p!NP{QTSDpU%}rbsa#st@5rt>|hRB1?3}&+0%bnGG z52N+>&qsrt=H#J7Lqh#_@Aw6qBcK`9j0Eyq;;D_6D>@XY87rt^#YdO(`GoS}L{@!+ zrBv3rg)Xkw>M}uS${hjuXsnw86E)GlGMu=t6k#^uiHJf;_mp}?K=OSwm1TSDM3$}( z#9`fKiKmj*Je22RnI%~^>aba}uy1Z9BJnV?0u*s3?ReDJHwJjxGk)$U?0nML)Y~x# z)jG$ZTgKmQ%2)sk>sV0tOGUo)(yWqeyT7~jL`r-K4@)|F-Sty!hO&R>rL!eqTI+AW z1!=?{lUF!eDQjnt!qylr*}NNaC5X8K$yDsvkft~mjZP37f{l7PS-Xj?CwfL^TXo-x zYv@sjgCHu%)3aYvQGD!+?VyC9r=H`)k!JyT6CTZ1rE;DNisCcR7JqYcIJF=?H84gj z2$^d<`KLN$EF~Y?`5b@2IW~C~ZvW$3P}9z?sKRELL-2Jy`13Cm&dP z-!evGQep0SieLwO`17O+Rk(#I7`(t_ixg(zZ5B-RSPwWE+Q%?e8CeE9Q;O^dLx?uJ zao0@4|MgB*ps|zGyGLns8y^RyAo|8Z4r(Vkm-fp_z}P!^_--v z!k~>{CPU(2177W5;od>#{`j9u)mFHis#j0hTP2@rC9Szz3R~>L z0UW`CZb@f6PI3{}3K%WP?9Z!fim+nh247>ZLOG{0^Sb`k#WG$1z|&Sf*)m z)I5xO+wCyzbjF z?c$wb8BZY{=x4&~ai+s$_RNK}SV4#d@S2>Gd2UYTd|GA%S$!q_qwxuwNBJ?HZ6hkw z*^aC?nVj|O*k@bqxY?PICfamZ$cb}Q80expMr)z)J>uGDDyRHan>1BddJL1M>L2ZS zwHD^;v&4mu9Dn%^vCPrcTslqDzc3j3qE}im1%s&f-n zn{mTS^?<}&l-{WdxE=vdo1rLzd<$y(A53p5w1X@`ErzB=Xa3+_VQ7;GFP6C~8y z>gXO7Y@+22S{^&#G^zGnatzieP>Mpye=4Qqj>4dQ^_!*uCEADf0t--wdNw7g_wG2 znH5lw&wclzZuHlI9wG)oPpP^g}jps$p1J}NaNT! z+mFM2-PJzWuMFwNvyKEi*78|>-*6(3v~kEknhhG5`y?_xg?LmJvufsmK1cg7mB`j# zL|$oV6Tx^Uq?Za;++&~gD#akFdiwqJv>)&IG+HhFM}5XwL#~f%nnM-`Q4rJo#iJc- z1tt}TFE4l}PypV!4>0V9TWcPzpcH5aeCXpUwup@5nxLxtr*s)_)w1_F!A&2e`=|m9 zl1B4VAtVp(ey=&J5uEC>>OBu%3J-50>Sh^xG@}Z+1zr#~qn&a5I>BqMS>-56J&xJn zB}E9IZne<_yRM&ZV}ZgdCZPY3o2y*zzAj8h!A9Q38j8Rb0(ht9!H%r~)B%kW~z z@lr>lmX1Ng^1sL+MPt)Aiw{+34SQK2dy4D&juvxoptTX^Gr zuAoBF3jfXxo#}APnC~o$a2okZ$=bvM755WpRmAp%5zuUsg$^iq#98~aM^;G=Z$g?F ze?N4mV_Q;s!xcdFS#O3NWggA&3-SkIw<%aqriVmQC8u)dPfTio2tAcsxZa2RJ{DN( z!I53fGZY)T6Ptb2WfS?^sF4=%i7$IEZDYeKDt!d_jL{lBlW|p2SZE-i@&qEo*f6=g z@q~;`)Y?4_t)(|N8cqYp+E~fVs;@|Y|5S{))|EVRwAxiU_M`O;UT9aRnJrDX_8m!q zb*C#}^pf|5y53dI9imX2EW0p{5nb>s$9D4%43>|gL1?qBKbd?XGKezBbL%;M?Wpzm z%ScCEmy+4G)zQJFu;L2BM}zCjn*=k)_fFm6CU&(&PmwYneia*Hxx*ZZhV^y_-H2eJ z5Sk*-l&PM^+&q$bU_MEwKc4ww}vZ9C!qzciLq)&?M59LwoCExI(`g|0rA{(jwkntckOu(}ZDK zNO?T2HF3(S9h*#s_C4<;T;u3H@hQ0&Vdij6n)HV;?X+UP?5XBNg9Q zG7A8e!2)ZFj8oLfEjvq%@+z{9(>f%XI_l%!Gf-r;&9Z)|0OZ($38_mr(#s-+cu|R^ zdWMt9xmaseB)1Frb$}}8E`|QwJ$tW(Yy4jTC_vZ06gMU2LeM1Ab+T_d6h7m^$=}({IFj92nO&{Ce5PkF#)+4B1JaGH}zDPK5974GjvG&fLnT%~uRFE6Ym0J5T)h`}@@>!=Du3r~^4~{(AR7QEq>L{={jKP)JT`C+@0fmit$$ zkuav0mJ(ON`EXs)B>|5^{=SM6NnK)ZAa<9&_URn?5$TQ5qc0ra*(mVs3SFJ?>x*|M zZIfk#+cNgaEv9>_GXO^9bA#7mIT#Lmf?~}yr#*k3xR73jeb3aa!)>a-!@feM0Vn9K zV08=rD>xczH6kuv+!ACdSqlLZ}nwDY7bZwc!i2U+l1v|H1#ZH^>jKc@Nq!J4u8t!8(=A{OKj$wHB;-XYfgRiU;E2P-(RI1P~$rg;D%p0_QFnA#ua%q1AZlkMo z^D?HaNWGWwyV2(E1>LD!TUdfOv0xIk<#a6Rc!?k{ZXA1^prGF~m z!o2w3T!)B`=^xKvSM0y4VDf4Dq&wkF;btw7^aHYc#XJ6|-d0BPjXHUP=EH^ON&4YQ z*PGr~7|rOq5%#;*t#>E>beRXt5@1WW0&>@(8oAOuIqS{#xh*Fh&5UPmT{{A^m_@lJ0edH=aXA<*_G56ce9tvAU}FYQ)o-$ zS|>v-%^VDycZb#6v;Rhhp4hW9z{1ruaNql1u2TVz6+gSGC%zqvl{2s>Fo<6DSH3hx zL6fiwx^mp56>)WrSRz_i^k83k!`45}%%}}C zuu9#cBI(0@N&Y{Z2u%xb;5bs+a(TWqkmxgKVpGcb3Vg!q;>ZWqyrom(;DXgwYh6qB z21&Zoksv6v+>SzX#p%()yFU)MLse=_^@mZB)vnU-MbNW$ykC03@ZwxGDd?S?U@N@W z0oRt%)pjA`@4pbvJ5#C)O?{vGCW~l9+m<+hHRg~UumQz3#Kum^_*qPBmyEg;B01H* zTyDQ#2jrVTaVbErU~ku?*a^Enlvdm_W~r@k2X_?}PgZ;y_HGnbVW6)ch3H_`r6NXn<7O|y{a6c{B?5+X0E#C3V&ykhN+Hz9~ZjpT!18j zgAMpAvqGhAyOXrWHlPC7p|hj*^^u!C0Cn&nyK-*apfv3XLTG#p1Bv_j5cbzsalC_A zZ^+3eA#ubwIeDETF+E#TNwp55gNxGzxe8x4{U>ZP9BYNYo=Hid*M!teqF4#Ujy$|k zXuTWP3D;gP*OQg_I|O|*tHBh7qvTP(RYUbZc@6Y@tdSkG;Fk?)Qv?xXyle$5zjRXM zeTzo0zlHdb1r+=h9zF-klYKs4|A46Euc{lS{kKi*$D;i4Ch%6+%8I*z^Vw@6xROeF z-b9Y+wL#r6u<pxdzj-56E?SZ=ZGGpB%$(q+5004O& zQcnT6xYH>?;(z^*CWj$O>$S@id#8U@6m%X3BAtc2?mu-y(|Q}f50N|t)91+FQOwHP z*ab`1D|{Qe%qKtf%*-Z3c62okNv9g=?D_+8cK>j>na&p&x_G1M9Ks#Hx-8!iL=-UB zzF?w>1)K=1DoL)o66d_{r^I|@j;Ww|Na79?cN2>F`E3Tg$-=4x?J`5|iih0eDl8V+PRXy{BFU4W615vV;PdB?mIjES->u?{H`(99(SVu_5<(=4MF?v;`xthm7zBg-C;LT$|7uDmDE&=uD!tsZikfqOa8W*igI? z-MV%|y$m=I1XsHiKdVgX&fCi|0cD$ky@8YiSMIp>E80&T%LEuE+Q8~lCN<=>r=u%; z>X)o=#kZi}k)AkPGboCL7Jnbsg$}aH_j`ukmT*G|ZI$h%@==q5hbz4~*qRl6d{c^! z2d}}^=(5yu9kwb{+A~VOk9r{fu^#n(XYeMFL9nNw^}i4NNpvn7n9nJHA0_r+QfTbc zq$}-*NTfbRj#Dfp31uY+>=Ug87U;YM6$zLXb+Zf{-0nz2nWy}nYRglLa8v6)`cS`?{r}WI zbDg$&Yd(;a6M=y(yHm#38UvS_?OLj5nStWkj{hifI+lF)5OWd} zhE6E?yZ0`M^5bd6@apF$X6~FU08XA5 z+{WlzQDqX5yIP-sG)1D-#cK6@$(Iy+~M_yZB#_J4bz4-XwukV*LDpl97gTN}!Zfw}IkEpTdfNxaTdn zns`xG8~}?nv1v|$drjVy(E`}#cf`(jw{YsP>VUV`YAPZWOmyge^*sgm_pFJ};IV3`G4hi@ zFHFiqb;pI(;*>lyr;5kySy75I?ej=z!-rgj#n$_@LASR}HMem}-5a{wBA5Z1)W|1V z9e+5@KO>z?ClLI(JZsTqsl*+C+{}>^*qasB!-4fjZRJ=h9j4WjG9gF= z!VF-oe!fUBYrp?h(nOY=H2v&<@ve|4yA>0^@E@*h<*3>OuaoLqad+_%ukn}Y^x*04 z-iPk^x{pc)NqFl=oBwYi94Jf-)5e!w%WjF+o-vw0Z2l>Q_7Vg)Q{&jT_Lb$C-{0Ds zwKDwlySj8em}XtI+CJo7J9&|PW!*L*Z(t@A=YOj0KaCEDP&_roE?u|Ao?v2s$T*Ux zB~FyH!oY=8M|m(8e*(?u&j#&|mpRWY%@vR(PGNC`hap?600)o~bP_{b_`e#UjTtp0 zlmANBZQteKuG`Vud=#`qlbY-`LYwHO-sHghvZnT&o39!ZC0{sqcyIM( z>`wmMj!b`&qkl=bL8lckzhJOO1o~1F?J}7f{p5{og%KD4d7*IIVz;Q10k{t--hg2B zdL1i`6X?Z`-XutX-#&I=B`1v=fGDxE&&v#?bPU&8_;JJ(mN__!b>~F3-{ZMyh07M= zR{?8v+K824e3mo4M!?fg#br=D601Kb4S_V1NJ?HZDo(SB?Q&IX7M_APgGIEwB6P^Q zzJKu#xp~3g0!)%zQ7w(2NJn^x|D(PDN|nuQZW>Ae89E8bV@4V>9?^X@c%9TCsD!r` zJj=%ti>=F}$riN&T$K<>0;6!OMcNb_naC`X`nF^!qo3p6U_#+Y#ltTZPl z>JL~a_i6)bA+%|IPV3+V+hYh!@ERqD9rv=tkpr_xONGMoYenDGob= z?#{lVcD6%Crft+1)C%({Je96$&G_H?Yw}4?G}IxHo{~7Z30-UHNydNIkL_OjqjDgA zo)UTj+u6*L_<-^TB^QSUZxFG?Y|=sQtbd^>-xvnGrjgGGL_*a)#>yF{Y>~!uRVTkl zlk7hk*!Qss$s4n9S8^wD+ouwiMx~!*yyv``QX%_Y8?&1c4wy;1Dv^%;w^3-u78zRFfrK-s<$=jH zlD?FeeV&uDxKfYeosymj56n|66f8#a(3sR4P|`?AQB26*v*A0ul^&PS@x2s6q4%&e zpaa2Ur_?J<5Y@b2`fOjek0t|Cou{o|q|7Gd;79QPS44FmTxmOzmkJ?`zZ)mg!|@v8 zu~87mViJtsH4{#4aln7>27LT@a^16YN{G}JGbD24PdJh~{pJsHQ`3Oalu9!5W!hbP zY+6)X=?(1Hv1vs>0Q)vN0CcL*l^BcR6+F@GQnJ;9Z2C)m>lHfqwUAb(dF7M*IR1V= zebrw&E+r>qSo{O#2=>{Rmw-a}wRD?G5BgnPy$|k)VIw>0?NX#wm#0Rh{r0b*ynoo3NXl})POtT;%df0uPd1L*f&j~z ziy1rp)NwskU?si?)E0Pf+xauu3#{Uhm#~-_i;vGc@-gg{?-{!Has~KL67Blw0N`MY zX`6mvQVRj_fxt~1K1_^lp0aBe&`pCY{MDaNJ8{vOX!b6eQtUe!qxv$eBc^z52om5o2(VsI4PdHXr|8 zPTIAITEVU;Ruj%l55)IV7ImI}rq+$T>plKqg7L^zDc< z(l3-@5H~npS!!>DUlu8{VpiAf%05`sy><#dG7lZiY)4X(GJstzRQFFKfUxlH+hU7J z__`Z9>`CZPrmlEy^PO;Mb?N>%433rjht_dPUqzGqzDz>=u=`}OlnMQ(fsL*wH=U!c zsL%?j>k^LjZHFG5L8BQTQv`9NP@oM%B;N%b>=$Agj&+8i*wjS17D!GzX|$R$a38^+ z(iwD0@$sWHeMgi{Cc!;HNE!Ut^e&QH=m9>P@+8CDSY2=WC8o~Ew1<&R6xh-`mtMG+ zJ|Q3RHZ9Vi>AG85VdeS2(E^)l!4j6aWGHW13?5_T?wK>OkrU=iN0c+O%dBZ@u;@Qz z#N5j)gEcV`qw?wP;}j_h0AWvQI(Kxk9%oKw&z#d3)Q`Bk1s!#xF3~^4ULe)8%{^WU z=Znn#S&5_@=feq-fiOf94FiYNdy+2ayWw2~vS8gheuiVrXeH0n)vcZl<9M}u7yvw^#z{(!#xb8HoXiW z#0LwfjI;j*#(wBAlB>7ysYz{>NH2CRv%krIkT}`MwBCO)F=ay#F0sby>LbFqOz)lN zQ5)L&g+DVv&$tx~ek)(WyCHI2kBRI#V)R!@-6qAV%}Z?_no~R;1QHn&sO~NSQ1?bG zz5eA31A&0|nrpcsk5?qm3wf2vY^_{voE(KVQ$(+wcjM(EJP*ak$h&@+9zFEiL-NI7 zW$hK6-Zl?*RQXqNCY;UMU*{RgXA!ZNlRjwy;lpu_hNdY;p%2M#ZW!a!JAaolUgKp= z*h7Y{D(RD3G3K?rW24f+X5@jp70k^(I++|@B@lY&is&<$HPkrZ%Zvku0o5RVkF~r& z9-Z>Ibe-OnAXS*C?#V5DQVN&C?KP81aay|V{7cs~oZN9vGmD-u?sI3yXiDq6a>Ha9 zhq+0f$1+(B{5&6Ct+Y{I`g%@##7igz0CaWY+GiYZA6-mwMX^YeF+G}vLsN;IJNkeB zDNT+bgyrJA7LfynDb*DpMSDs3`zBL*wH7W#_kgsg2+jvz9Uo0R5tR}6CL8K|igHX? z%X_{Sv=EU#gSRY`kEYG5BBj>shIf&k3&LnCtX0bdE_Os_bO0dlQ9<05sR~*37elB7 z)MfnF&Xi%!DH#I2Nmod|k+bY)pvQ^H#*au=TzYfsR|*AmyqKR*W=AYb*Y;v3IxTes zt77am6if!Dp};`Ua1kEZZBDNCeXP*3D6of4aD5N zE{Ir`Yq6Q&TY{bbr)I8gjDK(MzNZz9r6|Kk8V|*;&jw>L& zd~f;xKwPR|b$zifUr_`Bk$RUn4SNDS)%5_LfgOmX$)2>zprqZpzm0`=(#7WA08!U< ztd#Eh-!4c@#<|ERnhDY3|I}cVrj1j%ndxH)#>sY5~&gHDeQcLF)5!+=M+o6%-&dFUr0ACdN~UPt@cA z97Da5`1sWO5qb(E^8)5vHAN9rG>j(Y$KTSLJ~3%A@k12z_k?_lblaDTOr1RkAjgfW z&6Vz02OQWkJ;ZSlE}QOADh%pbH#&edJlbcei#s%(QFz7(*LQbzTbHV;J$L)(c}Gz@ ze0PYTexmxE@Ys!GIPkRtGn&YqG1W~L=T2jgLam>l`5oYiZNKflvl$o8mi>^0k?T;> z!))OT#rEPzlf;7s4|JWvac&ZAPbV7`aAJoSKD=dagXN7g!Y}SIA(b^gn)g5=#FCfEBI=*HNnV9G_=lfZ+a4tX$F#g=B7aueV{+eIWC&0zJjt z@S%9E33YIz!!JVs^#_cwlVwnoW$G0-q@O3FOw~Qa%#ExslYq*2>C(h0p1@ zx=p>! zeZ?p9#f^x^VRdMe1dbNK*xHkt7U=RNYncuMK`PJ)o_Y2PmAtR9rM0^gckN8QV}TvO z?G?Kj-6X4W&^~5nRNxcr&Mu^#A|PWq`;eh*5wkKJ+Wl1HM= z-NwkJ6Gq@;6C*rMTeN45+8sSABnT_Fm%#|35{N9s=ym0I9tAk~l?(5LtDgb9 zy>B7zXfc9adjbiRBEy@eMWtlK_j8!@V%|Gu=TqKin+m{9^a8M6q)aDJWND(>y{Bln-MxS zxopbY37-XVpUTA_W@y!L*0_sW(K~o8i@rj1Udel}@2EX0gBOD}AO#Q|Qu*A%ye2r zyJz;{qBG@1Mn_&JH8^arVFMQY`iZ7&T8Y!Q`d?qOsfXcyt|uUaRJ>aTsPHI2 zl%RY_`h_kVIF1I}O*|yoQdF(7{vIfZ zGrxe_NvX`t$A7!EG8pCpSGV6u9)P)@F4B_NoCg?xz$-Xw)Cq1P%KMfocMek2FoGOY z^jKWRISa6P@2R@bj2x$72rJZg_E8k7U%Gm`fX@?p3!c zyj8pC?ZkqEj+|KCA*Fn;4yJqCQN*2Tu#HZEVjtn%6!$rr479-Qk5ITYNBv{`fYp{; z7E6?)8ARaE^?rY5fpZsL-MpM=D6It=^*fG;VyEsbK(K`mzP}&4QT5kh}n5iwO^ zW@8{hrk`-aD!jkN1y84H!*(1h11M0Xl8W}B2oB$mh3$&ak{4m_8x8Q)AWqD^Ohyrd zDqXh|5Odz)-^Mrxqy@&*Cge2y@#nx}{#HMOC5$rMg?iDd$CuO_L`dUIuEhO_~RWh+u`ru}T57j61S~;sLu}4dZLl z&?Ca`!-l%*=lB|M2duD20K@%E^fWJY2@$hmC0GAPi!=wGapCG!xzunCl@CkK#*)rK zHfdKfmF$yr$5Oel6}ZqKjYUU$5kO!nu;|t)42t9L&Ip{=PY2D}7?nKB3(f1ENtjP^ zTXf7c9FJ@3!R6A1=k0=T<_`z()PJ(}l_X>KX!kl&cE7VpVU0)OnK;^lh2^dJ*P)r) z@Boe=obClVR9{Ow(}1C6WV0idGf8=7?9p}wab%#eZ3G(R9D$cRAFY<+EIO%i;~$#s z(fv+IhJih)QQ}{5RZfK;93^usJBC<3%S*V}hy^vyxZ4?dkEM)x&dPa`G;Q3(%H}Oc zPD{C-mCxxBKx5U{DkR<|jR@2s>_GipR@+L3UhrD40(%1&dUf~#zoC&pVnYm+lL&tB zsF~Se(7wfdcTDHD(Xwk{teZb0J=n5CX%!`#+D(5xAr1X{Q5F53XY-Jil0 zS%)pRGB>+c>z@+Hqn3Tuf|#UT$y0Tw%iLk`u=@ju0M5F(Exx|aYmZ4sqUU;eB>sgwL z3kFFN+ct9-->HBiyLF}*2s7J2^^9^=nk!<2?Xpiy+^^+^fuk;QMg!^xSrmSWm?NLu zW6Uk8MmC>7Ps2(VzT@(TxC7`rgadEZ#l*^bCGCAo6hh&E=L(^!iKIfPCnIMW=V_sr zB(#$x9$VaQOd{fLd9@xo^gf};f~Qf(xRRCDKAzHyE!vh^iCkeLvtrz%2^q`Ba&pk; z%N%$3q>z{@Am>|%{eIsH+g=vFk~Xf^M7LNO$5mhHDElb_gykv%FS&>j#PNwtpKA7n z6p_S;JPX){uKbr~v9bsz5}EFX`GIMzsN}}`Fl5hRjSW5g1aS?3hleTw47WnSZB-YA z?er=SJJcpp?kd&{L}cV?RS}PX$(e85Plf!TfESABs|~3=+v7lx}D;f|`p%YI}YCk^Se$i~BK^fYAWdcl?HdL%GsyvT8^a6O- z%?>E$-rHe2lJmM3h1%~s&z-5+zJbSi92rEl+F*J(M|7OymUjcd<(Wi!>7-fQkd%bJ z2{33Ups)NsDAKg{_8Sf`e}OW^*?`%&Q&`{Hw^y}XzQpFaQ$A|sYtuN@stQSnz=-Ns zG~wo5B69p>r`D$a!ir!vAAO@%)gN#AwtL+8KIvkd@-$qZ8ljiD=kbu_m8S-DIm-(! zX4D@IhXFQ+WK`~??RGAeCc$rM(ej=NvZLL)ov)NNs&7gPB?i!l$WJIrtANWavc9vzya#?iP9LE*%GRZRkd|w{9$`CIJ)J_LR}YiOvb#9 zX2wzgEkDQB$uQEGy|V5ZWO$d#?goEG2i9|@yZSBjzQ1dLid^k3<1nKFg}SgU#%)B~ zxSSIJ8nVy&y}P`0>AWVI}^X;Ywg+?EvIPnqhkeLgK}l zhZ|K}L;bMFyEa$%I%6Uv_#ZS@``JW%is*MPNh(L1f0jdst0oU@TcWJj>=c;P1EcZ` z^6i!?8rO_|V03)nMJzvp0IM{ou2X9$2xlz%&1i=y#ZWUL>h*AKP4YsUWT~;O8++z5 zyd77IOG`ySjF?BK%J5(K8+m$$a;g|kvSj1wg9adKU zZz;IUo9w5mC2us&LSodI{f03iE?&PfNP-?A zQYrhB9m31(@S(r&yzA2{&k*ii0-#9@o}#pB&7wMdO!~QD{tt16*!77yM2f&SMA7TS zuq(roQ8UsJe=740{bJk zNl=zi1|&JB16N&H-xIIK#p-wFJJvYL`QE+V;3TM_(5g*Am|wvoa0=W}x3BZTUSGVz zcsGB9@CmJUc;K@}HPR{)SgW;Tg8^dfiN5Qron}=JzYg^+_GMAv(C_c4)EjE|VT4U4 zX=_k9*V+y;fp&uFrTK6o@P?5*q=g{p+Zww8bPtW?Gvo3Z(AuNhFc6zyVM4;OsX_ZN z<>FrspOz^m9mF7QPoNePXo(=?miO0VxK=`p-{;bMpRLFrYT!ZC%vniAH;$svQ(?o* zW+*dv74?AP#o9n!$7zHc?ozP(OpkcnlZ2TX2-A54{*2^iV+K?)!BbztL2jst?(f2G zyff-q z{OFF^)X@*4eI2~lwiq|KttDQqQCodXf&E#@6yWw_fQYAE#;U<%C$v_B*=k_8>&*I& z$6q7hN{nEw2k1%X#EsY=)Lji^E_ckjaN_!57SZ_$uH$i#U};tvzkDbL3o|EHXEDfkWXse zk33-s0EOqNK2d9Xa`L~D*690A>$a^Tw7Nj}3sH%hMEETa(6Jlis8g791&z^CM^il0 zgm1&uA2Fnn=>4(T%_wz^0VeI@#YbusV!imdT^X0INzefgySYF51vqt6>HN=Np^ka( za_8YPOtQ*b{chpfAT;*mHo%y))UeV}yhSolYfV#6Rlp;06r9o(R=L@zVB1Dz~ZmBiWMpviV1dwNTDK zV_#fmCMr^gTbz^OuE7KAnjap~LfD%Uw4yNTFDZeR$#0|ybX8afa=+&$@_j!qt49Qr zL|I&hgxPro!@KV9*F0P%(Z(VUO_0{r^o?qC^lSdW#I91y*ps|?2_{^6Xi{wb+7&dn zt2%Eq3x8*qA?~-kI2!m8gynaDP*;`@*E*|sbxFlT$s)T!*>$qqTlRLC6AwYTZkyw( ztnnLYKBukWK}x8OS6KimajCgxz7WE5eus023#9J6`=WW@%CPFB*!l(>*5>{UDG4lV zi-2DsuI{u`?WQ8Bz@p9KI_9YcT$%o3ul>BXuU$h6Ghk71MRa#?BWD-saXZ8@>3kQo zv>T2IMyBfK-U!A$NuQi#&EbQLELuH982*z@!qdA=F{(`^S4)bKr5@Lc871B*Ldh4n z8w(%d&yo!uOr$CQC*vbQ-uNuZU0)aSDQy&i-c;v)O{;L{6BWhg;cBI0V*rW_Px~F! zZeDB__mh!U(d-LBY#c9obw@b=9y%qEs{M;OD9JbU0Jr7GJx@xF7W|83}#;)&67b<`|nGQaziEmV1Q0Gk3 zm{y1G_7kt3_nq5kcSYO~U*~|DtRGT|R4%7&2)*bWJoAEW9j)oWgT^&hjNF1*$DMVI z+rHkpIf#W~jA$n~wq?PLX?QMho~i|u@{4UUrPm8GDnBD+uqTY_9w5pa*U6XQa%SVA z*H&ZXm%m0Z1Aq3}(|C6&LyM6mNohXF@(`4iG({)lZA*M5!N&ncaFeQA(#@qC&{w;} zv4r;D^%#6~i@*iYn;QyiQo^FlsVbdGmn`PQCbLdt-XiL zpGh-Ki(?6_t5@n(RR|>&DN9Ps(L;TD6n+U%RW8#cjwO)eXG%L|z0-R~X_%Y_`Zv`0vv0bA5a8{%Pwt|66l>m(%H}A+qRc`u3|Dq1GtR zw7Oi)pia+57YP)Ypi(JHYqg<_MVOEz<-&!Ti)_JCBB0nUwV9{rK@3X(6Afg#*F}K3 z9);t0d<~?z=`!E9MYhk{v$ly>KOztq!f5X>y#a?@+g_ki7lG{ za3rY>W=a7NX4GG+r}#U~a-k7ho`?CVMzhh*$DjNq0`C=3`#qE*?o%d&5h`x2R(@tw zYD5@;5RN$7sQd#xZ6N|UfggN$Ax4U-H|;RRqtNAr;%wsNXev*{TZzYOptM9!y>0i zwQAhkWa56SDFh)Q_iK;H;E$zm(QV=q35R9j{uJ*;eVp=U8-!%^Y7E2@C4hJNm3f+@ zGfQ6xm+Na>Pebb1wX{747|Xu+mqU6=Kn<03$vymBy|f)Wk2A4ywp-bVY%!$k3}4m( ztVVN_qR5KjDuLw<2MU043aOa+T*1nETEBKz4zuxWuc=B04Rl128+PiJlL`f6 z{nmd4kDd7L%8GBkJe(w0J#UsOtKpAKGlku38kn9q(A ziW;D6)33Sly=uLk8Nxr3`-4Uj2x;RzaIi+6= zN9P4>C_!E24tJW>{f)p{h!)OET=a8m<`=JiOYmzu{$}q9{}DNDLroz#41@2_9&FN= z7{AJjb}hoZZ}ga9u-%l?aV$aQHdButBVgB%s4IDx&4e$mjTY(XE8zG3x=@Vym9hbW z*IYW^QRTqGQeb$~X3TBlqL9pojN^WFvzaUmFG;Us49VensVcb=7j5XacDR0*Z(CM)QBnGt&Ij1*T_^u#YQ`V*8aiZQ_m z_@&CdzR0WS8MwjR2-6oXaFWGD#c{)vcN-`Fh}{ppx^MxTkSF;5C0s4w%)&*Eezn+n z=k#SbXxsXA8583UG|F7AK9h++G!vsCV#vTA!R0P;epxLxwWXvEU7B(?rs)l1&~(tc zB6c-Qsg6!VA$?TV)=j>@34dmOfAitd0LLJ!IJl^%;FiiCR8BF5J*Gxycu5a?<1~a} zX&2g@h&4(FCfBjw5)J>uH};|5trai z?g~t0%%F4)aaN5kH#hkOwjg&|CJ5pq3=5yNJSqo$1j1%glKYKkZYr%1<%cWjTg6HW zfUu)KTBc?m@`em;A&0nOPu!m9T{z&z7fyKUMn*Y@tEd}Sq0jh2z~^ag^L5e=`XE#T zfGn+jp|Uh-M{M@puPcjc%HyhG6bd2*$B9&8bm5QX0a$BRk?F-K>rKx8i5UzdDJF_{ z%R+c#$S;UE^+^IzSmtRUJAo<;a6ypsdOxngrDYQ!7dVD;?R4hf@qi*LdXr$b}BOlQh+`?W^xHLAb6-E{=cXXRS4WNgQ;LKBJhLI zM~8|0a#dJ8;3rCb!Pit9qKLSV65}3TH7pD#tx%Xfs^t%4R~s$i4Pt6>k%W@8#3okk zK(5mn1>T$ZRD81mZ#M;Vl(CazV@a>d9TH8&1&rtK&Q}Zagm=E5;)%#G90~Q%cwenTuZyiydb3Wj2y3uVQo$L&J-4w3S ztk#iOkWu2x4)7XHpRi7n>&K?qyZ#iNnIGk9Oo_paBxs>(EHMss-q=`%Rk*O`Bx4CsMEBQ=~s)Txxz`V>+JM#*o}@x*ZOq zn_Po5_S88Y?N#oeax<9NOKI@=0b2#=!kUe2T8~k(wnZj*A5Fid1j<^E45v(MOk4u! zz9F?`_2>*aBKpiubd{x7GUDXu%l@^sz{m5Z;=#Ve7SF?K3Y1TK>sm{md#Dtq+ zgOR^U*gOw)HB@bw6D!g>kJndFS$>oEs!nXH7H01>WFfm#eQ7F{mBB$OpF+JT$eT1O$iEdNCH^HNO4%lkB{!47UxOvMW7FNKPFzg3~6q4}-ncb3iZ!|T7d2mtH;jN*EORAfK z-c@DMvfA%sm@-)~+uJICQSZseoXTiH=>%~<%AmHrq##Rm_(mxNn2>)aB+cCH-soZrBAc(pOu(JR7YOa@Qm|E zjc%lCQlItHFXw;<){00(L;O~$q-uA{?ar{5OQZ_ypk z-vjb_q8|KD5%UaU>Y{-deGvjtV{ghUYIq!7or55pU1`7#i_L<~job1S4q@c-gPmmE z!d({+hVAz_8TqOnr$pOPEh&^qldIcDU^`~F$iY00v&RhaNOJ;SSm`;;9%_P|viMYT zmlwu?6p+|aPA8+H$Wh`}?2=cqi54j>xW|GrrSZCqveh>;v4D=0W~vlCTwC@@^$zxl z-5n9Kyr#Vc?F4ma8j06M&ExVy`ow+B&ZM{=!F+$2kky!MY0uLOUm+4YBSTDy5V~=?yUFArYkMte`$td!-f3af#!}D2Z075=GQ8@yl%$RmCPm}7uM0eMscQGz7vkLu7^sJ;^v#(;{RWrjT#zRCE}yyFdQlwAKbDpp)b z`+}uOU!H6T^rWiI^pdX7x$!!M&QHy&Zg@~+>En(&A2rUwpRM!ipO9yPKS9(6AwG4D zSdyIbnzs%cbyCWLM}iQ8Eg>h=9u}nxe9iWEe}3${3&k6*y`2UJ$Jyc~+hO?j>LpBE z@Z6y3TX|d|bEE)fxfV?D@pytHtqY|Q(!YY;6S4iLpc{Zm{xZ4sl5-f+BJl0dM@eX3 zM4d;`C1>AUPVm_wXDL}Q%OZqZ^^Y=Dl)%DBwMG@4z#PZXG}n9K!khXT0sYg*I=XiN zyaNBNL4B--r*!LFifUuD6CdWXOMmSKU`O>Qhyw*pM+h1`RpD9L+Ir}c^VK@oZLEm% zj(9?YZ=O-}WD#Bg#jb~szOnkWg1$UtC+C|JCRkBUS~dXyr`+F6l3S))b4x}{f7Mto z@LaKku)3(`rQ+QJ%BPsRCSvsR5n0cCjvrHX4a+>oJ2!Eeuve}qiV1QaT%Tg@sz2_tdu`QVNW1wTywO#~b@Vjz+u!*| z#xb1)b8DXwLu-hDq$hr^f4FZk?#C>NLMD6s`b*@njsbAw83fZBg3XjT&CpM19~AIZ z6@8=59b^17G3R*EDl`9K#^`uA;lAX-CX~R_mWY&uLPEGFEqY&1|1tNyw8OGLLymHY zpb2{G3#%5a(tdlJ}liV%|VA?sB-(R1LLHJu7so3I0j)(etEd& zq)bpLFF5u2Rf0MKLhVl)<=aUb!F>oAuwUCb}pFX9Yrw}@2XU-Uy_t98#p z6tOQDSKVd0!whTDpZ&%LuI2?fMVT{sQqzf|uy>`Tc}%-Tca5sm?4$ZMW{LYU?ExZX zSFB=-6UQ9U?YiK=afruWvh4-+3SuVKVNxp64}5y9IO-8FhiK@Qmmo=zy4`&RXzYEs zpbRi>uz0eWX3&#yf^Y#UU9j;>$m0n%&Xo76nJaa?fO|}YVywNS4r;Uc#fDOz61Hw~ zoQZd~7pol6$s5@|Nyce&Zd|uh6~fdL*W_q)UyVZVyI2j1#pM;mkLF$@9qY96Cb%CS zoQr%jXL=Us&SW(8k%jBKXQt=7>3$9v5Px6yr6H;S6X?*C(4`gH*M zH4=*R#@VcS7d@=BI(#H{H|u!%L`~w;S@^>7b1O-(6RNG4=BgVxK{r5;gBWJ8sHvNKA2F^@ggL~a;U0sHgd{qhnB^>amOAwpCeJ~RF~lw zP8A-Dizo$$1}G=7_40gE0Xbzvh(%wpHp1hrJM`VJWgPSR3MGTni!jg)Ytn@euaA{4 z^LVk>w$CAF788r?+yl&oBRPA5p?*3F!m6H}YfYSd{3Mr%FSI)B^f_4pjR;{HP{6~ripWM_C7 z`Qe21cdNVxd!}j>n7fi1u7k zfYTe-bvJ6F57VyX6uJk+|YdJFes&%#;@xHE{D|MJkWYs6ev+F9**WK;d=h)FKK6k!lq5`|_A=A2iUfUV^UV`NG?kG^_AL zFrtU~c}_u-tBpl&Qv@s4rz|62rGvrs_)BGFojdKCS_Rwre|X)>>bh1`-$lq?gia^G0!Y8xc!D6mY4r80yvz zh4%qP6V;)|@6DH#U7NVvw?;5CT2!RK2^-vrC?ogC)T!`d4MOvTCRgJAWf7n|fMMMP zKL<0t*1clK8<+3KmSI7@_PhMAVsgN%8KD?MZ=nup3aXfUdH>iha?~Nq)YFNMz{=O5 z*Lt*$LZ>RQdBGb#3{aQxxC_7%HspIS>pj${Oqu{p$k-Rw5jTHwQjlw7>w`);%Qk`m zGJFnD(#j#*U9hofWVK2Y*ebhTkv>fAT&s&c(}yg`p$P?gQ@~#(u_aL#DXb$r(5M5U znILOXmUA9##{o`-BdJ3VN_xJ}7#@03PY)0TaiQEUC~@$>2M8EHRaA?onWd_DlFxW+ zYk1%$=kW707s9}QN_@c7ZT|Z9xT-kwvJ_QNebb~X54*;w7K^|M5BT~IPVqW^WiZe% zn{ZOq;#es5(N^a<=s8dga}T|FFrsCel(!NF$WdbH*?&<}Jg2GGu-o4yRNp~T8Tqn9 z!YSJUTXln=jCp6^vv3ez4^m(kb2d}JsZcimV^AeX!*jy(>7m9K;aqdll*LjObQ_K~QBswm+H`j@S zv6(w}ulTB@7rR=E;>Z3zmoY95WYH>}z@>(^9jJ0(+QZ*xz9lX_aJj@lZ9a32_Q+Xrgi>gEAvCPz*-m z53<%tJJ5-{=@t%uWKfd{P$0O@TBxJL$v9N#1s2m;jnYB-(_oii#qLt-N(_iX3^*)3 z=4@&|soMX?uwED#NuIN(WR^0n`Zbe6=HlIIaKfC;#+oAO2}y>P2yd+ABVlGd5KaNAn@&O&<_GJ&J5 zqE@Lyy{8LJ!mWIPiyqNRkkcY-bQ0g-K0k=AgnZcOD@zG+5XkyWMheZ-5Ai%Iioi3> zG2ZdB%zb%z(&3Z<*Duq-XZj`PQ{;w2u=#{PLQK4&_HbOe>n#O1w{$g)pJ$;bYZ$hd z9ikSA0(Y}tQ3DH**Wb%#aQ?KR40Vk0!AcG6w;5RUEBK@`hySRVWpJS%TV%~6N%LYs z0$&GMQ4sA`-5%#P>JX*NhW`g`+AzL;H6zT^v!)*y#jp_TN}X;mv#lT{rp)AMXf;}_Dc30!xg9J-LQI|^u*(65dw zDTW3DjL0y~Vw0&$0Zb=ZfObk9wWR2$Mb`q|?npjmrp;V9*1nb>^nP?3_P=Q$R~KpS zpHZFXkxt<7Sk68Laqthw!)0 z)1KZ&nq-OTqW?sf<O*1-3(}I$Ey;>7^K|^ zwR?rB#cj?Qd}gqhGMc6pS?kNlt}NUiu5{oHd3nxqp_w%G<(;U?5htTl05n%L*UiL( z&qo~o&r=w@*Bd8AX8CJ^Yj|;$?9=Sq5PN`T_GE``yzr90Hc_>$|NiBoqV68GSh&HS z^cpz+5>!=I|NFlkx{QcSA{05Oo+m1K1 z!VUA@MnZUejP9DTU%=p)Xl{SEg(g?0M;|n+dbIW$P@cU}^bhkBD>lAAEfOu1>LE!S zm|Me!JwTbaj!c;pjA9o{!U`H3J~8yVtbqT0L`Eqn?gg{_j zR7G6ufO6=fEirVj@_q(G<%vr&wZtkGb+Qt!cQ89H1j62~n`h8M7`Ir0@`)iKWsUwP zDFwWIxNI?v!VlVs!391iZwITKMeTrcNTU>iQZ&`B$Y##D)TS`~&`gxq%lMhq7MP?v zYa=?c_9F_42&3UVO*iQiWE#-&P`JHh=6O%PO`oxKVp;Vi_iAdv_-kHOC|A!00jg`5 zn9V8FU;>0k(00|QU=kH#c$kGC<~%$vy^_*OIghY!V^aiQ_!$9`vB_G8oKf=*I-0x> zetO@CzU?-|3fh|}gFp(JIdtw^yO$o_{r0SR{-88guB;_v%4C!5EPb_X9{@beUrnqW zH(XFPu@UGXFl;qoB7V=Xoov+xbGSTq0ZHKAr-rctzilMlaNF8;3&2H%Yab!+L;RaJ z&%yi_Kdf?izOUE&?^VZl!dS@T+#g>$Ax{@1CP?Z8Wge*C8Ge-#wH}>g(_X=`$fIUQ zez_O#9GvbZR$Jx_`gh}L*9?l)s$1ue<$axIW;Z6#^z+?(<>*FC&TKV{>tFtjurqTc zhw{;znGNi0xSDz=S`LKGSh2HR|(OPwXH;tdS ze~j4~tsu5n>eZK=7@RKLHh-mbDQIN=#DUJ5KScTi>FT+*ks=n%g_0EVaP(`Q+L>S= zNiMmGf-BWD@L|fgPEf=CDh;LWcwPW7^3qyVteWh6-YNO-$&LNIvnEt~U2<;Ms1lsf z?!mS{Vla5#Hu?M70>K)k&6eBLPi3Smx8wV|9|tZ$2e`Na;%AVi@+Du&6m0OhOK$9f z<4mm{2koU$?oaBaL|5|RRKeY%7u9W>(Ki~ z*r)Dw3CD&z@^nhIH1+}<4a-GuB2j2Zbw_b+A{#lKY7YZIO~ik6^hsEHDBOF%whVW} zG_V-=G^xC@V*`CZZA<7;y**h-j7CX})H4!ZD+rHANz;q*f!Yq=V1Ei$VZyz0Ka#ZDotGpz}6G9{zOf+U;Nlv^x5G>JIX4T;e==+YEnVb)Tbs-X6b&n>{&hIwb!Ppg2mUFmEST%ZBiz?afX z@kR5g1HR}8V}Swh4kAZ9eLXsC^^ihcUp=BgtdA0^=J{=xZjH~jU48m%*}381#SZSq z@KMHsyfhU_gW_Wo1w|KWNn>kOC*|8XQ6k!z`be1mn zgb9`wW@k63BQpJbiRy)^xKmPgLo73hmRU2V=awPbk7yea$<18qrPXhzC)uVE|M8?9 z8^I63@ZNN2sf6%Cj#9|7%DyknJ`d%Ca!$bakcUvLzX;0O7!zQbj=xe%1XHs1A`dm)H3^Mjv z7y2Oob#=B&Xj(dXTJlZ3ARb96gkW{lTT2TI)gdpTV0iPr;0y1{X^1#-S#-2?q;Zer z)KUj)|5ksuQGgg=RmTkno@ooIPgptWknq?P?jpZz*`3We<$jOSA9*R7GYG0o{nl)l zLHPSM_-PqdMdBiX^B7G$MCB)%CpI1?#HM$BKeE2YADg1il<#qV0%h2E!OD+@vDtpL z^VwzSL2ogKd-2`D3Uv8zA$ux|L!JswUK|YQvxF0gU}- zG7;DdRIZUZ{u2qefEVuR04DC;EnH5Xslynt zreF6O5mW)|=6$P9pnaZOq?O%KiZvj#tsgEWD=w>?`7$zU`tMs1rnl3Ge~X=D7OBF? ze!<&=1?w)+`Lg+J5Ar`&FscZ$zyNPYTZY|$t=W(YhZ!NWSp?R{Hv7JLuJS6B5Zb)k zskw`*=FY|`=HF&-wL*ZPk>m+eS(;L{hw-sA%I*Xj*=TxxY#4j0@6?Vo2#rvOcZoE5 z5L0ULC4c%YvP&q?c!vzD++hWF3*NGnX;+e)Xay_~Qpb>QA2-gqi2Qe+$59FbM9izM z$x^)`IS(Bg%?>h4X{;9A`yXnC9tauotDnN&$#8yj7mq1@$%Y(!va8#-WNwoz&o9oc zK+2Xk0ULIimZZ-%q?*VFr3e_W&BsMK4r3#o(3qnY%!; zpS^EF&sp3qPydEsA9*~^Rp;)_zx8<=_uT~;s(*F33KmqWCO6G6I|Ftf$A9HK$MxE? zG!=CEE0UG!tesPj+J@OG?12pZH#}bzYv_>@#r_C&$8K^qyM{Zgf|JLz34yO7nv*0p zH0oZdT?~9*q{UTQ1A2#>$9_zn&Bmuh)UWp^;X7XU(7^*-3%k5BzZ#ByXE;gd!F_>y=S*~$#)t$k}l-XUx;ti zw<9Dq$nTUUu8`x;zi5nIqJmR;^UnTQW-Nx!mvUMK0v~Kstp^MdJ8DlLV%|f@=#Sz7 zgQy7IRR?WQhplGBevI@F6G8bcCo}tK6P22r&k9{`h*)zy=dQbW3~R3ONV4M7iINU& zhRNY|w?%w{_nC}EZa^#TfPmD4&T#jOt8y!1VpmA{rL3$k^Yz#Ne6f20bo3wPzZ=nw zVgKQ;X20?GjmhX}x(hr79!O61n08 z$EALK!tQwE!J*`7mlqOoE)NWvbNjOW&O{(V;nPAZnL92}Vt*rMY?~URuabGruj~GM z!v?ZJ&#v36$Ly=);Fl3~oCF(8{<|^RW1H=ZSloEDb+u*5(I|R`xj}MA)xx)litK&k z6cFG;9?{>0;ar*YjRWoE+dG4SAhBs=DPV)GS0R}9B zA(YI@1Jm-E)Oqbgl?)HhJGrrwqSGw?3|y#n?>B-ZLt;_`JSqRmOd;5$ z;Xg5C&WKD@moOz!Uw3TAaXgUT>Ujo6$9ownL)MX#5m#vDP1bztT z+TjHEp;V@~eljCNgZxNejY*MZw^KQxPQOv(L`~3#7(8=k_*Rw(ctfllEP)LKwIo^vS-~^b!W9kcLC* zMAiX|En=zDgY!lUdL(imWYmdi8G39Admf1VJ7Gj1(ZW<#NwUFb^6fufo(@Q7KRmzh{b%tsA?&^JkbB;;m zjA>;}&6dF=u@NfYJeZO5J)>=fKlJcOcWcWH!2sKtnA0J_a#_oEv+Z|8+m6;I)Q2gL z%q2|%WwdJ_TA6Zczcsq)O(*4~u;Brro^Ki=-ALy`zv7>~tUWTjL44yYNqMh*ohMYq zjA;oxU#W;d`bba&6)qu?l<3_)7!;mh()*5U!)>H-l}t`Kns-y3(hYT1@D_Fbl^ux` zGP`t5aNOrLPIzJOC6L>hjoN{`6MUchwschnco=D^ymN`$C<9Y3yR|Yh2FeAV{y@Wm zMh~Ct-4^3nFPY*HhjcUAoelxAC}kN(7#WZh&j3x_3S@iQ4}NX*>x`N*u1j)O>#e;p z=fp{Cpn0iy?Kxr}IJpc@I;~y3)56)D?4$kov;t4^fM*$h(l)S z@KO^v5r0=<7jC)N{!Qpz2Ht*_rkpW}j40^s#4;2z3$Y34_6hy)0Of1_#fxmdZZIOU z)=W~Sv$I*a;}bBv+9Y$Rb=hb2Yc;=TPjKe;wBBl?p!0GUpRq=bT>a@tZYSaU;Z} zS!JZSMXY~a(WNOKbxx{*o3}x*hbC^@=e{@qdI@8*7Ffx8 zg|t;+M6FFj!Wse&^c2k@20)%jCk?eT&UF3n@cM;OwM+p-6tIHg>4frwJw@nRH=Sw! zKn9jU>L4hyDCJASU5Fv0V(+&kb~Hu{B~n5~ljMcSy3r3t`&rmx1nOXJO5PoK@nC85 ze>F2oNGj?xus-0NZ@X+mi*hGv9ybnVvS{9=8KyUJAlDkvU(ebk0oZSUS=AswG(%c? zX|qA%&{e|tkmQc?P3C|j=Lx`hr+#0tdHcc0+n7-uQTuTZJ8$EOhxfGqTJ&7)IoghsdGsUFta>n7qBn6VYcw=coE2bE;$% zR3Ck~T-O+XZmIH->)YkghLGtda+Zz>eq_?Di#&`ZZ=zYmVVVl}39Cy%D*vs+PA~aC zZlRbk*3%eP{F0{Zx6uZCM7xJwTk{0*J*TOuV{9Cxu|j^4p#3Ab+6kJC6kBJ#>n;TF z0m<`xO3d#&5AFLtB4vUZ_m$zKeCG`ThCYFByK4le`cN$y+edQwt=n7#5z{|((fhCQ z4!i~~5LAjAF`(mhyXBLmc27!jXh?0p+(s$<A4RGdc} z7zCB~O~M-w0$yC*cl4TSD0Cx;l#cHjE$rXxlP{sz&%{?_Hp2?6OiIQ?M05YdNgP_# zXf@Wjt7_Ns4Cx!aIPm0g_V~DNmq4Tr05$^x15k@67v8<4zS9lgidyr(KvhOfmgi24WP`aZxT_vV)8+eEF!it{5t@ljrg_|Rl#yhvz zGgG|wbi39_HMdQiIKZzFc5)NS&kctbtMw^{6Pz`{X*wfa6ymf`P;Z!r(7K7OQY7v( zc^zt1ea;O=Mp;3%xIk}qp;2=l(_PofC8xsF8EXDoaEuZm@QW3 zsZ=7uAXovndi$to-~>nOALo1GT4fY>TW>?(r^Yd$!v4c=S7El=f|9G~@?3BW^F{1l z6kLA9&q^`CXkNV*e^>Tn&UXq-Z8+B z)grw`6J#`?^OA6kbSw@DWJwd(Y$QH z`O{CM>`V#$JLPoMPl8Hnd1*+z8isO;Lob8>a66O@Jas9J~yf*72Ptg-0zr=ubeAb@x)i= zeH*GI#_74skOdI`NwJ6}M6NC)MQP4FrUOzN|ada^#KF@O(IwovIu5Dl(#tjf0( zh~ZwJ9a>WoR)#L5Uo{%J#Q0GqXOG2oJg)A*;%_bdpGCi@rqrD5A*QQx6uaA|7GtN0B zvM7kRcO$&=z^tWdU8s;+i-N$AZ%F641LFvDG8Q46aE9Zk!hSdsk&eGmV-X7zQYiUh zbD;$W^@(w`ubA}&VouW4`i?a+#8LjB3Y@+;sl@FV$Q%aJ)_aB7-f2JMT?36I{03=s zV82`@?>!ZKBn3LyzugH^^26c0OiSAQ7_>&b)^M6F$0oNn2)4*#fXmZ6-4$H*8lsYM zm!n<7`QmfrH^Qu+BQzeL&J+b>xko`{_~_YDc2orr#Wp1&A6E!o8zyHq9&epF^SIJiohQv?JQW;4e6Ji!|`vw-+{Gp8gxvOZJB^MZX3yQwhwSvvc z5Lo+e;sOidSj;`vqacr7P&wFW*xU_nE%CP2lj~s@6dd8q&2B0ELc-`wkpAegEw--9 zHJa-ZwZ)fgGmA}|e)s({Urp%g95;f)WtApoSF-3O8rcCyRC7EZi0;L^T3*jhc;@84 zdxL5bHMrNSa673`%=ih@I@2ki4SM1)ATF}+aWMNgsxOVu|6;kKnH@yr9T0HSj&@)c zP9Iv(1*?zOxSPyJr18s|84AoQbXZ(2qag$VIfnPIEsomqr-%RZP|vhc(d#;36&vDv8mJ5D3(q(qzlPrCSJhJgF! zHdpYlm4OyybhxRSzrdN)z2`N+RR3U0ODSPg?0s-#-V$7!I8EJD;uPeE>5OH=ha^BS zvY;=UE7RWR+NjUK<)J5aN7Y$$$i z3?-9@Zuur4sbBsKxdygkVtJj5S}-0L4FAYkiIX3mybR5Dw0 zQ{fRGpG)5s@+!!n4Gof_u@csnf8qHbHs~t#@H74R30ZPrXEqwfm^-8*#{I-NyyXLYgWR3-Ax*(a*p4d-nk;vk$j! zn-Ol^ZA?u0QzJWR49x^^QJ#ic!^i8TIYmSS zu=To3b{|C}&ckKp*2ttsE5z!+oXgG|X!Ku6ITJ-hmJincmq8`};w0^$0!@-#L2RQ; zE%BUHb*6_ZtZ9%+sqF(%UNsc2OCJF#+<+xcoLLXRt;8o#U7f6l@u1T~w2b zh9FyP(#fi`by9ycw28lN9*k~I z^p%c)(*aGUqkDZ1LU!?gi*;nF_!}`KB0A3+kAOvXa82oTONCK3@jH)N=Af8(sRs#3 zh%!8;|2?=GECT*9=4pS#>eV`zUL8+GuaQ#YU$}qmHxK~BylpYhT%+Z_`A1N&!Bqsy zp4!6;_`a^SF+D0(h~STrYq4j)cw5@}=qo|GMZ_9P;yVO!uS_UEMPLqxL>M{k2ljqI za>Q~YioDAZL&*og?IC@DdgP(}w@st3L`%8%Lbz3NG0VES2XW7mny-Y3)|#7-6G{J-}USoThalTbEer1X zZ}ql9_b$Ds3j*Gm_Hj#FLfziIQ zNZ%6?>mbUmpsoO|0BDJ#_hiE-I<$J6CZus`P?Pz==3n&YjibawfkL@U@tZ+K4)KrI>%5;ec%_f>-aa!N=AYyxwNEaMk$A|4_(Gic` z_VvUP_SU_b$)rrv+iPN2gwK*!)L2SafBJhLcyr=FT0YDr~&A zAKU9Gq}50qcKoPPk$ZlMo`~*ny1cCR0m!L2v7#XM2!u(0^<3N}hPSpq6`>zk$weD@ z7g|Cd0!7&+b`Q5`^3|YF#)oeY8dUSh+JWImsT%%>koMnsh(jG zkA%?z6U2KEb0QEm%5n&92SOML(|Un-@2Q7#d`%2Xtaq{LSNeC$9Q=yJwiiJezESRJ zjjh!99uF-4?lXZ5h@n-wi)G5ozqNhifA3?BNG3Z8;1@MwLLt4I@MfN_wcova$M%F) z-i*J95^jqu>$DAsU_i1MF68?%#ZV0uBu0(LA{62$E*$7s#nZfe1x{?wS| z&P_iJ)boMxcmbZKEg?igVu5GWnK&|AJtq?C7fm(+!L&;@tw+*V`suO7Dg^o8*oyU> zF5QW%aV``wg~Cg{>U%F{I#h5-Zy{H98frr8ydPc+Zg-8>A_5c8EgwKnC3*XqA?sYK zz|CFn&*gYt2$@IMN2&i|^oGfSLprge%Wtk%KfX7IcVb*)@JCxuNCvTxWcK<0x{|Am zOdPnQK*}4cfM~{Y?>8o$8kRZS(?z&%Qg8sW!k(uR}NwJW<#aRFS{L+>n`h~kt3(*)L~i?iPt7iPHt-C>?#4nk@Dul3)pLut`3<= zRP_Po4*B^|xCn!&zQ}ms1hW1Tmkf{lhyeGeaqfE5@o=B0@OK&zWl8W-!2x}5VT*qg z*g!kwZ@(f)BHCHmq8IccquG2-raSz4 z{@K?Z-bH)ESc&dy)qCXtw&IPvKLJDd$M1w?5>xK!PJDVQ=ink+UZp!8SBmTD&4h*e z=e9Gb!g#rfs%vDTiFBTc`@Kl|+OC%bY~FR?nyanJy|nj@40J4)#JHv!bwKLs4=u*Q z=z=QbXZ$iuUBPy@L>71ZFetn59OW2G$a==pNCIo^xY8l{Z7xc;^XpQ^S==(!NC5I* zg4OqpS>@AIvu^%e-Gvw-M0n1BPqqom7gXj}tKkT8Q#y!!z-^Umj1|(!WOw3FvUmR= zTUKE)@$z2)K_{Uvidee?grh_o)RF>kML~3G-fEJ2tEU|t4${wbl?-Tq0fD`ju0K=E zv9o`abR=p$A5S0kzjd3m2(zVntJ3~)|7eZ7E09R9VdYIK#A4pa6DMUPBp}2xn}+wg zbhkqtW}E*6NcpDs4181A{8)#lxmQK(Ysp#v=Y_Xbh*nhJE(Q1B%L9kog8l^7H3-xjFUh}>7bJ24dMB3!+ptMdO;6qG>2zuazmhncR5kWB`Gim z>x%^OIofeyQ~`+f;cp0ixCmQ2P&V;;aR=dvfPJ(DhEN!$DFZkHmGMP8FML&sdpEH( zI?oMUVSR zFhpTfciN%`IFkwED%7GAxbGy5(g}zBb|+}vGzM_jo100StZm{r#|^s2V*qUhl7*v1 z=e#AY!5vVzTyL!T5Qmd1{A3kvVATh27_CSGL0i|;ywg!2(KCO@p9+RJpOJ9ZrpI}Z z#!}Q`8I`9%&zVncCPd22;x#xLWuna-gU51d&%3jqo&sckt#8V!0lo0<1gHt|>aRLe|q1DcGMpQMO1v=YLZD821}x72!HthgXp6AM+CB zkj@`k-K2GF9W4Qo&8ll+kxcH(c6@2Igs1evnjW(_;>Herz5;gFzUuG6uX@o+EqlRT z^>i85raH`N%plFqXi1ik=622ZbCXeh$A?UAYRUG*{Gq?_dQn3GI!4L%E4!@w|Hx6j@ zlHp1nzaps<6KyjhpWmU5ymmx?;nYIz!X2Y--E;@t6;@CfkyJmm~d} z;*=d_&;gpc^b9x)B%CcRNYPyHG+O`VZSG};U>R)|4QjWlbPy%t4N&e8!2smvEyN|W zZ~BOYyR_4jvmd@fnmJ+LlLT_Yh#NVFwoh*;CV``W9$w2YM*0Hv?(z;$?1AFhSsfz9 zpS0x_vEP6&$0a1*>21+q4WkDCRuD`q`0Iu;!q#IcuoDsoZ1;;p@@2h}whyY<)C}i3imC(Iw{x zpGXhGJ$7W89U{)M9>N`gLk6@fZ{kYH|5}caij^Hv6_zxCBvCDV@fHBx*|L{E7`s5Q z9wOEjRYg{A7A(|B8swi4f7mo*Q$oZ7X$yFLPQlbEJc2=JPu)78hrA29rP@JT2*7=x_|wHl9ycp6mcneBiG4a0A%(0zx}t( zfuQYJZyFUs-@iv*Jf9>G9Y}SP^~uFdAEL-@NdESbwl7yU_?4T^#BLeUgmqe=^&(jV z%|A1n-@8qf{T>}AH=nH0*ELxYP_=_qdnhH{KM6R`vOSMsewa?k$W_&h2op$$Bx+KI znpd6?zh~T$;S7hMn*tPt3Bv}4=r8dTzDZ3IW9gWFJ-*tu(VvGx9HbR}^i}U(H8BCN zbnYKKk{gRnC3yNjzNEDy~6(>U^*ac&xu?iNPJNXVF3aO`oBT^_zP*3{o#-TIl+9bQ zIqKQin!K6J6rRAC?sbfbf#SIbj0V2P5uXrBQO!*a-lTxxhT?kcX06Ks(qw51tt3(# zkYh<(ubGW0fARw{KSMb-5$ z1I}zU_ijl3X0H8S!l06A-wwl>D0RZ`erO1Lk^ag>#Fhd@Pi2hW)U5w8*DL~ba=p8t zavX#GjQ-iD$~szZUm(a5y8P4)arXP)PvUZa5Q5bMAE+a{_3MR3&BTfAvWI?M3bEMd zW`z&23vyqE+7PJdhap1&093$V9Dt%ysu3|jA=Bk6-y=|>vR8K92kMmnUMrNj#NTfv z4jD^6e>l&Rn`uYvR z0KpBI3V#m>MXQHYURRiAzv9MWI(@MM{${Uni&Ct?zx6-wf$guBlrU!@K+^Ck`blXp za;uGdqjMMtHaWV-Yl&>r!_QbagcsnYu0zZms#xPvp(+z6Q8nU6dV2)aGpz*kI^ z*!n#9vW5ht6=N!M#l9C`8t9QESh=StdL5;lkK!GR#S7RvwIs=(33O3oIj1iH{@zh$ zmE_4>%m=p*UAoyA8NoP73-7~izor($VJHluH#bbCwwt+M`+5vps;|?=R_IIJq$8W; z6?dc0!8RrC<*oiOR!x3LPv>An8jF9x%{!Px3B5g;IGz)}N;K&?U7pwCzC)2cD(ePc<2gs3h$rTXQi>H#=s zDuMwy2fQ(Wst?)*e!TV2fMc*eVF$BfK<4DwcffHoxp2N6a4iTTSXQ0tY0HFv0RL1G zLG?avOqfmcFl-KFCbo`kK`bA3jqEFc77T8UU1(W12;o{R_N$EDJ4G{DqTKLei|BM1 zTSApG{;}>LMpbSkA)gokk-*ZD+{OV@9Hb;5;it||V23h_{^u6^pVs74+QGEgzy&pEpgr52EAriUxW-|I6j{H}|>~3-Ystl%8_kSqn}` z)&=PO_BQQzZSDyKf&~yRB(4%`&MLYjp^1bwnG8tgg|a#+w+h;|Mx8#OtACxj_h;%I zZ%;3DMHWX|Wpzm|Z*cs)&EI6>ug%Bf>YdwFG6%SBRzwKWL&+qN&wM^`r3q$%*@sq3 zztEp&nYJ7Q!XTvo_G%j~JTaPcwa1~Pe$80(9#&jlQxS`rPFqYx(- zKN8|}@YhEl9V8a}3vMX;g6Tf9d6_yWlr-g;@4DhpBQ%|5dP?X3BRA`Dyc?C?x5sj; zlH!-4qvigCOCgVxye4Lp_PawQiP*}iGg#^Y8%fU7z&1OP7T6}0iDlrfd6`S$L`44? zc1rV64(^>53>`W<-FwDArmMWHf0*%;xer?4Sc&nfqxp?<#7)N*dp&O4Pu#IxEpHvJ z)}zcNKdLD5@c(u(ej&UlTC!OzoU_Prk&%0de_k*sX|>2$$SqX6;%Q{flw8i}1Ac{3j?>=^XHP&>VuE3%~3t%S%34<~CZ5jivsWNM$zXM@H;c ztBS_fuQ5)ZrdJ;fQ5%=8*FUX&8inyJ`)iRb*c2Ocmi^Sq56}LzPKY1zM8SBBGY|u0 z-@>TMNW^u0F^}$z4>QS#z92A^z%}c&A^l;O3BLYOqVtz)?m0*9_F_!BdG}^(+)EC# z5c?EtLxI0D71x%l9!~f)EWC$!IXGYjXezpf8OLi|@&+6ahjHt?9)h_3*C0_iPqyPY z321kh?M4_hegk5-Brb?S%qNWB5$AMYX>K0sCN$stQ^Rkez+b<+ViA0y6HNK5D#gJ% z0NTEV-UcE>p`4;At?uG5)=);2}j2tuZo`@6! zIec~xZ$ev3$oaUkAS6Eu&@!Nxsc>~cm*){xZW8-i{ZAs6*5AH;14#P`ad0KqkJ(z*e+~tS$ul>FiVg;(E@51m zGVP{Px_?p&mAuq)I1tdjha6MAm4bR^1VRQ+Pj;UGN_CW$1d13wn0le~hZGqu+nZiF z7F>fehWW05+VQREzlt8n*Man7>$BSWU~fZXUfCSW-H=YGDqtSsg^OE@;_rU`;alYv zGKHSTIAcP!W@Gpt* zG>jZu@Uyn^fB9DfV2MgukY}<|H?SMkj6Ew&d9$jNE#t}R&i?YP8uVNTL2VWr<=y5L z;zzSHTz`CrT9gqN$DZeIpIp*$+Ss2_)Ju2dm)}t`#v$p4aLpFuwa*HI=Vw_UP3%(F z43fKcaRjf5N-A@vuNRA+fu5}C1Ay-q;q~C`lmc65 z2Vhq9@w7)p-4*e0xCdl06jR}s6luk5ZC_Y^1w&(>TqSTbnZ&<^v`~&>h1JW*ZAHx9 zs#yK$dB&2T_+NaYJboi-Yoq_<=w^6Ja{{u%zl$VsTymqsk)O+_!2K5rz^cqKiY>o& z+XqB|y()DSnGuIz0(RCq>5xeOx^O|)piN^W_%t-E7Ppqd(q}#k>Tcc;gD6MO0Ge0D zH6pOAX>k&5brKUFcaZzi&I!r*vPg^>^+H8`iZ>J;@-?@r$tSK?UanhIC-2L()hE|d z7(N^AvGrE-O;_s&_p(Q5_88$UXcIQ0+I#+XG8v*kT}^rqaiqjKoKNm9(wH!3f&MWM zwAIw8_N2x(4y}RA@3swW%K+x|t__{2ndi_!sZ?eBDiiYLg!fqrCe18fiq6CBKruX! z%LV^nOM!-}Ejg$8=cnldx@0MV1G@yiGlFSEvJz)q)G5)(+vtYf67oKfqQ6G*V+c0v@;{w`V zrg51~nNLj$?xW{qKJ+!gkWu%80eXKgfH>IrfhCl~q5y&+OP4-}B!s0eY&!Q;$$veT z$g>GQUxI3h*+s`;Nx;%1SMla{%A6B7OO;G}n3ebg#7rr%0YFD@ki)ey3*lGT_(ylzyZW5qnEZ_acm_`327Iv@f1LEtO)a(M77 zut!tartm$8mj_>6L{_^?E?7JCg&??PlW{`odW$23;kpESLd!iamR_czHFO6FO!fZ% zzxb_AP{zA*ylGvp!~{sPeG{R~<#9}AIKq7`v$GifG$i;8#0n06>V`hIg}i$1#-Zl&1$VcjR*(aJ9tabjO@7OvN%H~f_X1Sp8>;`c#YW(glvv4PZKD0=Wbg29G( zt?-fm^`=?RoOSajkHmiHR!R_vbdg`~N<`(+V~u)0mi~SX&6ItU(rulXQm=E#P?(hW;|AYQ!t7obr6rk8az!pjf3kji3 z5p(a)Yuc~wOv-7e*zw40${S!3_JBTRFob^u8Bg`a5{ru&5j2uo>`#Mp^` zYj@fri;p|{KLHZ~?EYfV%5{h;hdmtYn0hp%8tPW|jLQu9LqWwJ6~Iao?^vNBCP6$7(C;mDycw zo>fDAo+6sK!SPeH(lgZzx$%PHBmz)Skmmi#BAy92!mq1dLnCvE)*boakmgy&nzXbx zEqb5y_K2k%O_-xXEL+#;r+@Op<#&j^PeLTlbJ#BY7tp)%opr_l1s!< +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpMAPeriod =5; // Trend MA period +input int InpStochK =47; // period %K +input int InpStochD =9; // period %D +input int InpStochSlow =13; // smoothing period %K +input ENUM_STO_PRICE InpStochApplied=STO_LOWHIGH; // calculation type +input ENUM_MA_METHOD InpStochMA =MODE_SMA; // smoothing type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot =0.1; // lot +//--- Expert ID +input long InpMagicNumber=122400; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error + +//--- indicator handles +int ExtIndicatorHandle=INVALID_HANDLE; +int ExtTrendMAHandle =INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iStochastic(_Symbol, _Period, InpStochK, InpStochD, InpStochSlow, InpStochMA, InpStochApplied); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating iStochastic indicator"); + return(INIT_FAILED); + } + +//--- trend moving average + ExtTrendMAHandle=iMA(_Symbol, _Period, InpMAPeriod, 0, MODE_SMA, PRICE_CLOSE); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating Moving Average indicator"); + return(INIT_FAILED); + } + +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } +//--- open position not found + return(false); + } + +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // the previous candle is bullish, its body is greater than average (long white) + (Close(1)>Open(2)) && // close price of the bearish candle is higher than open price of the bullish candle + (Open(1)CloseAvg(2))) // up trend + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nBearish Harami detected"; + ExtDirection="Sell"; + return(true); + } + +//--- check Bullish Harami + if((Close(1)>Open(1)) && // the last completed bar is bullish (white day) + ((Open(2)-Close(2))>AvgBody(1)) && // the previous candle is bearish, its body is greater than average (long black) + (Close(1)Close(2)) && // open price of the bullish candle is higher than close price of the bearish candle + (MidPoint(2)70)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: StochSignal>70"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((StochSignal(1)<80) && (StochSignal(2)>80))|| // 80 crossed downwards + ((StochSignal(1)<20) && (StochSignal(2)>20))) // 20 crossed downwards + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if((((StochSignal(1)>20) && (StochSignal(2)<20)) || // 20 crossed upwards + ((StochSignal(1)>80) && (StochSignal(2)<80)))) // 80 crossed upwards + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Stochastic indicator value at the specified bar | +//+------------------------------------------------------------------+ +double StochSignal(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, SIGNAL_LINE, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the iStochastic indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ +//| SMA value at the specified bar | +//+------------------------------------------------------------------+ +double CloseAvg(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtTrendMAHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the Simple Moving Average indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines CCI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines CCI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..481f2b6e40da93809ac86f697a0ebaad30501cda GIT binary patch literal 48156 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�atZVMT6;n?zTR1@yVQ>dWev2IqwCAcDmB(9pH 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 L4jn*iQ-yBgkUoVN literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines CCI.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines CCI.mq5 new file mode 100644 index 0000000..761f926 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines CCI.mq5 @@ -0,0 +1,654 @@ +//+------------------------------------------------------------------+ +//| BullishBearish MeetingLines CCI.mq5 | +//| Copyright 2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2024, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" + +#include +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpPeriodCCI =37; // CCI period +input ENUM_APPLIED_PRICE InpPrice=PRICE_CLOSE; // price type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot =0.1; // lot +//--- Expert ID +input long InpMagicNumber=123100; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error + +//--- indicator handle +int ExtIndicatorHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iCCI(_Symbol, _Period, InpPeriodCCI, InpPrice); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating CCI indicator"); + return(INIT_FAILED); + } +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // long white candle + ((Open(1)-Close(1))>AvgBody(1)) && // long black candle + (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // doji close + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nBearish MeetingLines detected"; + ExtDirection="Sell"; + return(true); + } + +//--- check Bullish MeetingLines + if((Open(2)-Close(2)>AvgBody(1)) && // long black candle + ((Close(1)-Open(1))>AvgBody(1)) && // long white candle + (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // doji close + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_BUY; + ExtPatternInfo="\r\nBullish MeetingLines detected"; + ExtDirection="Buy"; + return(true); + } + +//--- result of checking + return(ExtCheckPassed); + } + +//+------------------------------------------------------------------+ +//| Returns true in case of successful confirmation check | +//+------------------------------------------------------------------+ +bool CheckConfirmation() + { + ExtConfirmed=false; +//--- if there is no pattern, do not search for confirmation + if(!ExtPatternDetected) + return(true); + +//--- get the value of the stochastic indicator to confirm the signal + double signal=CCI(1); + if(signal==EMPTY_VALUE) + { + //--- failed to get indicator value, check failed + return(false); + } + +//--- check the Buy signal + if(ExtSignalOpen==SIGNAL_BUY && (signal<-50)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: CCI<-50"; + } + +//--- check the Sell signal + if(ExtSignalOpen==SIGNAL_SELL && (signal>50)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: CCI>50"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)>80) && (CCI(2)<80))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| CCI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double CCI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the CCI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines MFI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines MFI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..8c716bcfcb6edff3d60812380c00431cf66af0eb GIT binary patch literal 48032 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 +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpPeriodMFI =37; // MFI period +input ENUM_APPLIED_VOLUME InpVolume=VOLUME_TICK; // volume type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot=0.1; // lot +//--- Expert ID +input long InpMagicNumber=121200; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error +//--- indicator handle +int ExtIndicatorHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iMFI(_Symbol, _Period, InpPeriodMFI, InpVolume); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating MFI indicator"); + return(INIT_FAILED); + } +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // long white candle + ((Open(1)-Close(1))>AvgBody(1)) && // long black candle + (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // doji close + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nBearish MeetingLines detected"; + ExtDirection="Sell"; + return(true); + } + +//--- check Bullish MeetingLines + if((Open(2)-Close(2)>AvgBody(1)) && // long black candle + ((Close(1)-Open(1))>AvgBody(1)) && // long white candle + (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // doji close + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_BUY; + ExtPatternInfo="\r\nBullish MeetingLines detected"; + ExtDirection="Buy"; + return(true); + } + +//--- result of checking + return(ExtCheckPassed); + } +//+------------------------------------------------------------------+ +//| Returns true in case of successful confirmation check | +//+------------------------------------------------------------------+ +bool CheckConfirmation() + { + ExtConfirmed=false; +//--- if there is no pattern, do not search for confirmation + if(!ExtPatternDetected) + return(true); + +//--- get the value of the stochastic indicator to confirm the signal + double signal=MFI(1); + if(signal==EMPTY_VALUE) + { + //--- failed to get indicator value, check failed + return(false); + } + +//--- check the Buy signal + if(ExtSignalOpen==SIGNAL_BUY && (signal<40)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: MFI<40"; + } + +//--- check the Sell signal + if(ExtSignalOpen==SIGNAL_SELL && (signal>60)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: MFI>60"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((MFI(1)<70) && (MFI(2)>70)) || ((MFI(1)<30) && (MFI(2)>30))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| MFI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double MFI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the MFI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines RSI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines RSI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..38c882a9186162a83aa4590cba8698d9a8ff9561 GIT binary patch literal 48182 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%0Af7v3 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 literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines RSI.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines RSI.mq5 new file mode 100644 index 0000000..76a9be9 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines RSI.mq5 @@ -0,0 +1,653 @@ +//+------------------------------------------------------------------+ +//| BullishBearish MeetingLines RSI.mq5 | +//| Copyright 2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2024, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" + +#include +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpPeriodRSI =37; // RSI period +input ENUM_APPLIED_PRICE InpPrice=PRICE_CLOSE; // price type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot =0.1; // lot +//--- Expert ID +input long InpMagicNumber=122300; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error +//--- indicator handle +int ExtIndicatorHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iRSI(_Symbol, _Period, InpPeriodRSI, InpPrice); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating CCI indicator"); + return(INIT_FAILED); + } +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } + +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // long white candle + ((Open(1)-Close(1))>AvgBody(1)) && // long black candle + (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // doji close + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nBearish MeetingLines detected"; + ExtDirection="Sell"; + return(true); + } + +//--- check Bullish MeetingLines + if((Open(2)-Close(2)>AvgBody(1)) && // long black candle + ((Close(1)-Open(1))>AvgBody(1)) && // long white candle + (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // doji close + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_BUY; + ExtPatternInfo="\r\nBullish MeetingLines detected"; + ExtDirection="Buy"; + return(true); + } + +//--- result of checking + return(ExtCheckPassed); + } +//+------------------------------------------------------------------+ +//| Returns true in case of successful confirmation check | +//+------------------------------------------------------------------+ +bool CheckConfirmation() + { + ExtConfirmed=false; +//--- if there is no pattern, do not search for confirmation + if(!ExtPatternDetected) + return(true); + +//--- get the value of the stochastic indicator to confirm the signal + double signal=RSI(1); + if(signal==EMPTY_VALUE) + { + //--- failed to get indicator value, check failed + return(false); + } + +//--- check the Buy signal + if(ExtSignalOpen==SIGNAL_BUY && (signal<40)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: RSI<40"; + } + +//--- check the Sell signal + if(ExtSignalOpen==SIGNAL_SELL && (signal>60)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: RSI>60"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| RSI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double RSI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the RSI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines Stoch.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines Stoch.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..06faa887861f1e2a3e4bc4c6abeb18af5df3fbdb GIT binary patch literal 49926 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«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 OY#Ih_uRA4r|JGg^c+7$T literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines Stoch.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines Stoch.mq5 new file mode 100644 index 0000000..de4acc7 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/BullishBearish MeetingLines Stoch.mq5 @@ -0,0 +1,662 @@ +//+------------------------------------------------------------------+ +//| BullishBearish MeetingLines Stoch.mq5 | +//| Copyright 2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2024, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" + +#include +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpStochK =47; // period %K +input int InpStochD =9; // period %D +input int InpStochSlow =13; // smoothing period %K +input ENUM_STO_PRICE InpStochApplied=STO_LOWHIGH; // calculation type +input ENUM_MA_METHOD InpStochMA =MODE_SMA; // smoothing type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot=0.1; // lot +//--- Expert ID +input long InpMagicNumber=123400; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen=0; // Buy/Sell signal +int ExtSignalClose=0; // signal to close a position +string ExtPatternInfo=""; // current pattern information +string ExtDirection=""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed=false; // pattern confirmed +bool ExtCloseByTime=true; // requires closing by time +bool ExtCheckPassed=true; // status checking error +//--- indicator handle +int ExtIndicatorHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iStochastic(_Symbol, _Period, InpStochK, InpStochD, InpStochSlow, InpStochMA, InpStochApplied); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating iStochastic indicator"); + return(INIT_FAILED); + } +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } + +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // long black + (Open(2)-Close(2)>AvgBody(1)) && + (Open(1)-Close(1)>AvgBody(1)) && + (MidPoint(2)AvgBody(1)) && // long white + (Close(2)-Open(2)>AvgBody(1)) && + (Close(1)-Open(1)>AvgBody(1)) && + (MidPoint(2)>MidPoint(3)) && // higher midpoints + (MidPoint(1)>MidPoint(2))) + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_BUY; + ExtPatternInfo="\r\n3 White Soldiers detected"; + ExtDirection="Buy"; + return(true); + } + +//--- result of checking + return(ExtCheckPassed); + } +//+------------------------------------------------------------------+ +//| Returns true in case of successful confirmation check | +//+------------------------------------------------------------------+ +bool CheckConfirmation() + { + ExtConfirmed=false; +//--- if there is no pattern, do not search for confirmation + if(!ExtPatternDetected) + return(true); + +//--- get the value of the stochastic indicator to confirm the signal + double signal=StochSignal(1); + if(signal==EMPTY_VALUE) + { + //--- failed to get indicator value, check failed + return(false); + } + +//--- check the Buy signal + if(ExtSignalOpen==SIGNAL_BUY && (signal<30)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: StochSignal<30"; + } + +//--- check the Sell signal + if(ExtSignalOpen==SIGNAL_SELL && (signal>70)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: StochSignal>70"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((StochSignal(1)<80) && (StochSignal(2)>80))|| // 80 crossed downwards + ((StochSignal(1)<20) && (StochSignal(2)>20))) // 20 crossed downwards + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if((((StochSignal(1)>20) && (StochSignal(2)<20)) || // 20 crossed upwards + ((StochSignal(1)>80) && (StochSignal(2)<80)))) // 80 crossed upwards + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Stochastic indicator value at the specified bar | +//+------------------------------------------------------------------+ +double StochSignal(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, SIGNAL_LINE, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the iStochastic indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine CCI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine CCI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..6ad4930c026dc13e47ee7f8cc4e74b8191fabf8f GIT binary patch literal 49246 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 +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpMAPeriod =5; // Trend MA period +input int InpPeriodCCI =37; // CCI period +input ENUM_APPLIED_PRICE InpPrice=PRICE_CLOSE; // price type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot=0.1; // lot +//--- Expert ID +input long InpMagicNumber=120500; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error +//--- indicator handles +int ExtIndicatorHandle=INVALID_HANDLE; +int ExtTrendMAHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iCCI(_Symbol, _Period, InpPeriodCCI, InpPrice); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating CCI indicator"); + return(INIT_FAILED); + } + +//--- trend moving average + ExtTrendMAHandle=iMA(_Symbol, _Period, InpMAPeriod,0, MODE_SMA,PRICE_CLOSE); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating Moving Average indicator"); + return(INIT_FAILED); + } + +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // long body of the white candlestick (long white) + (Close(1)Open(2)) && // close within the previous candlestick body (white) + (MidOpenClose(2)>CloseAvg(2)) && // uptrend + (Open(1)>High(2))) // open above the previous day's High price (open at new high) + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nDark Cloud Cover detected"; + ExtDirection="Sell"; + return(true); + } + +//--- check Piercing Line + if((Close(1)-Open(1)>AvgBody(1)) && // long body of the white candlestick (long white) + (Open(2)-Close(2)>AvgBody(1)) && // long body of the previous black candlestick (long black) + (Close(1)>Close(2)) && // close within the body + (Close(1)50)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: CCI>50"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)>80) && (CCI(2)<80))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| CCI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double CCI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the CCI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ +//| SMA value at the specified bar | +//+------------------------------------------------------------------+ +double CloseAvg(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtTrendMAHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the Simple Moving Average indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine MFI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine MFI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..285668c5534fc5ba43396fdec07fe0c61bb596c6 GIT binary patch literal 48418 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 P)6PIIiqE=?2f-(Dup`UL literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine MFI.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine MFI.mq5 new file mode 100644 index 0000000..b739422 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine MFI.mq5 @@ -0,0 +1,681 @@ +//+------------------------------------------------------------------+ +//| DarkCloud PiercingLine MFI.mq5 | +//| Copyright 2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2024, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" + +#include +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpMAPeriod =5; // Trend MA period +input int InpPeriodMFI =37; // MFI period +input ENUM_APPLIED_VOLUME InpVolume=VOLUME_TICK; // volume type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot=0.1; // lot +//--- Expert ID +input long InpMagicNumber=122600; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error +//--- indicator handles +int ExtIndicatorHandle=INVALID_HANDLE; +int ExtTrendMAHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iMFI(_Symbol, _Period, InpPeriodMFI, InpVolume); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating MFI indicator"); + return(INIT_FAILED); + } + +//--- trend moving average + ExtTrendMAHandle=iMA(_Symbol, _Period, InpMAPeriod,0, MODE_SMA,PRICE_CLOSE); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating Moving Average indicator"); + return(INIT_FAILED); + } + +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // long body of the white candlestick (long white) + (Close(1)Open(2)) && // close within the previous candlestick body (white) + (MidOpenClose(2)>CloseAvg(2)) && // uptrend + (Open(1)>High(2))) // open above the previous day's High price (open at new high) + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nDark Cloud Cover detected"; + ExtDirection="Sell"; + return(true); + } + +//--- check Piercing Line + if((Close(1)-Open(1)>AvgBody(1)) && // long body of the white candlestick (long white) + (Open(2)-Close(2)>AvgBody(1)) && // long body of the previous black candlestick (long black) + (Close(1)>Close(2)) && // close within the body + (Close(1)60)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: MFI>60"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((MFI(1)<70) && (MFI(2)>70)) || ((MFI(1)<30) && (MFI(2)>30))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| MFI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double MFI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the MFI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ +//| SMA value at the specified bar | +//+------------------------------------------------------------------+ +double CloseAvg(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtTrendMAHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the Simple Moving Average indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine RSI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine RSI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..55da1def2b0ee0bb4b8d1f65fe613be3ebd6938e GIT binary patch literal 49870 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 +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpMAPeriod =5; // Trend MA period +input int InpPeriodRSI =37; // RSI period +input ENUM_APPLIED_PRICE InpPrice=PRICE_CLOSE; // price type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot=0.1; // lot +//--- Expert ID +input long InpMagicNumber=120700; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error +//--- indicator handles +int ExtIndicatorHandle=INVALID_HANDLE; +int ExtTrendMAHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iRSI(_Symbol, _Period, InpPeriodRSI, InpPrice); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating CCI indicator"); + return(INIT_FAILED); + } + +//--- trend moving average + ExtTrendMAHandle=iMA(_Symbol, _Period, InpMAPeriod,0, MODE_SMA,PRICE_CLOSE); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating Moving Average indicator"); + return(INIT_FAILED); + } + +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // long body of the white candlestick (long white) + (Close(1)Open(2)) && // close within the previous candlestick body (white) + (MidOpenClose(2)>CloseAvg(2)) && // uptrend + (Open(1)>High(2))) // open above the previous day's High price (open at new high) + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nDark Cloud Cover detected"; + ExtDirection="Sell"; + return(true); + } + +//--- check Piercing Line + if((Close(1)-Open(1)>AvgBody(1)) && // long body of the white candlestick (long white) + (Open(2)-Close(2)>AvgBody(1)) && // long body of the previous black candlestick (long black) + (Close(1)>Close(2)) && // close within the body + (Close(1)60)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: RSI>60"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| RSI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double RSI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the RSI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ +//| SMA value at the specified bar | +//+------------------------------------------------------------------+ +double CloseAvg(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtTrendMAHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the Simple Moving Average indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine Stoch.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine Stoch.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..0d26db901bd812176e4b0d771eefccc981e6c951 GIT binary patch literal 49408 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 literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer CCI.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer CCI.mq5 new file mode 100644 index 0000000..d137f14 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer CCI.mq5 @@ -0,0 +1,679 @@ +//+------------------------------------------------------------------+ +//| HangingMan Hammer CCI.mq5 | +//| Copyright 2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2024, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" + +#include +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpMAPeriod =5; // Trend MA period +input int InpPeriodCCI =37; // CCI period +input ENUM_APPLIED_PRICE InpPrice=PRICE_CLOSE; // price type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot=0.1; // lot +//--- Expert ID +input long InpMagicNumber=124100; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error +//--- indicator handles +int ExtIndicatorHandle=INVALID_HANDLE; +int ExtTrendMAHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iCCI(_Symbol, _Period, InpPeriodCCI, InpPrice); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating CCI indicator"); + return(INIT_FAILED); + } + +//--- trend moving average + ExtTrendMAHandle=iMA(_Symbol, _Period, InpMAPeriod, 0, MODE_SMA, PRICE_CLOSE); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating Moving Average indicator"); + return(INIT_FAILED); + } + +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeCloseAvg(2)) && // up trend + (MathMin(Open(1), Close(1))> (High(1)-(High(1)-Low(1))/3.0)) && // body in upper 1/3 + (Close(1)>Close(2)) && (Open(1)>Open(2))) // body gap + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nHanging Man detected"; + ExtDirection="Sell"; + return(true); + } + + +//--- check Hammer + if((MidPoint(1)(High(1)-(High(1)-Low(1))/3.0)) && // body in upper 1/3 + (Close(1)50)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: CCI>50"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)>80) && (CCI(2)<80))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| CCI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double CCI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the CCI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ +//| SMA value at the specified bar | +//+------------------------------------------------------------------+ +double CloseAvg(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtTrendMAHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the Simple Moving Average indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer MFI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer MFI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..5254fc92af637fa067be4b668a6a5a970215049c GIT binary patch literal 48336 zcmdS9Q>-pb&@T8c+qP}nwr$(Cy_ap=5a9TK+5f@+w>)tkY_WPoT*j3@ElS?(AO7$7|F-b|8~i_5 zPY3|ue+D3sfb#!LX%^_<2Zf5a*`VP7%M^Ci2{yWulH+107jYy;-mzr~P&B7jD%sOA z|DSmx00)30zzg6EumV^BECH?nLI5*>@xQ?ep#2Za0nGl383B|4ZvSPv{^z;;7nS`F znF8ql&xQYg=>HF6*Z)qy1;7np_)k6lm(m0508Ri~0NZ~YP5$F;_y0p?|L?ZU^dCdU z|MdT>km}>S?)CFfq$Bj;P@taE7 zIosEWpzZ6wS*w@avk8J)>JsPt<*SgGjd*tqn5UVNULf|9Pf9x;C3Cz&kqOgV4zpd0* z83f^Vyuf{Q(G20qZIQKAf;~r6eu%4#bv?W>&ZORavz<(9w&#GhQB>0p$<@O*p!kED z4l!P8@qbij30ScRji>g=tfSTDAsRtsZrGIUQGeEnp^rSpRU4~lGlatc?_Tg)YcyK3 z4EN)lSe~P>BmeBnwaKn*cG4^O@j=pJ|4!(l_9!wR6GwJy?t)_jDF-W`x^Kr+uu13WO99vd+}sE{n>*GDkNWZ1TMW)< zIUp#m{P}7IN}~~?ff(y>7gvB9)M)@sIWWV&`uVe`Z-I83$#5q&+Nl}!{8~@gKbg|O zj+5u84aC!E2G6&eYHQg&ZZixh}89nS1p{jv$kv*}|-2o(#9|TCDDkx?C*r<1YitkvNSh5yDF0AAxdfgy@wHA?q-1 zjWX9BUn=GE=bb6bE8~mJ`TpoD4ETIRJ6po1leC{du923(avcG0DC&jFGs_>Y4Yu~6 zeR|Lw=EI<%F?n3!T}DJ zezfX1ZATkBQkK=^1o^B1UrGUwY8W^A)GDUjLlET68WA~Fjg`b6VkUGUoMBHnD9a@9 zK7;`>dE#l!kmg(6_>)&AtHQ?SR6kYmnT@NDFrIw^0?|^D@fYdv3e!QSz;Yz%vLKfV zK9Ohc8&%A2_U~H`>Vu=b3)#t__Op;S18s!l;Y2MT$P3SM(cXVZcHBhv?E@DU=J9}) zR96k}IX2i#kXbImE-ch~LWXp%y|eM4GN`}3R|fB=Tpat8!O-kx_H)N%x`r$3!L{6l z#Sm3+usG-ZQ&>gA!1v?bl^5Dczjsebq!YMy57jY-5r-p&l`gU~upR-pKAh+LGsRU22YO+96RSbC^_45mbrUI!%xZ#TC3o-?MmMb@BGB zSoh7~c|AVW0LIyeV?EtOouW||M(w7B@O;cWAqaxgbVf%0GFz|07jhqv(mjedE#S10 z?(nG%CcXi64x-i`H+x>xp3aq}4uP0oWTEA5HVQ9nob^e68F0aRm}Z$cFeOMeVu<>6 zrt-KEpz6iSr_<%28958Bn7yfb@YV7sk@ySj~jk73R&pEg7wuF=mo0X^BPFkzQt&dQN+`B}lBUoTwEZ@EL;sVV@ zmt$MDNVK`X?TZ}WUJQ_ z6;Ji3Hpg9P50$a&M!$%!{59P zfqyv+dwiWGlt^89I@28Dmza7=JX=)RvP-`tmJBcD;b3Y70XOoWV!;nSFEW#+-#4F- zoE$lW9aGQRH-2FIssCEPw=yjJk6BX(sgw~QyUspoqozY8i6;^{od9?Y8loA3DSAi$ z#YgRiB>|*kY}b_H5jp>YaYv1;anWbi`KhK_>|LY&7E7iB0Oki*KBuNYLB$%;OGo2f zg(q6(G-Vt|xxU!!`8xpwYK68}FOmXte;DXSoUNt%w*?U$7vUl#A>oy|UcydK zd(cQ(xK8#kd~IuunLBKuf9Prd9okHd$ms1MyS-%GP)+IH!5V6!4!`e6GZ%eX$&=Hcr zgOjbF(8ers^>Qlh6a?}Pni8&pn@!0S3G8%onx#sehvw_kJGeE;+rv+QY?dvss$`z0 zJPd@aaGv2Djot`W4xaXhL?G2J+wuFeQxK zg@#)^l~;Bm^eOebe9fK7%=c3bGT>x8my=t(U0l$;e221U_PeXK*>`LHW_`5L6Fj%{ zJMdcOQ~;jOgj!3uCpd-md8JU;Yt&bO;&1sxSaVoVsfWbd?g}`3mWdDdwNV)r{kZ2S zy;3!gZW0IL&XgRexDRIis7S0;2*6x>Z}FX;OyXKdFh9Gv041M#_LbSvyEC8Keswu( ze;0=K6M?=-?1PZSg69-^dM#0lQK(}7ctbH3(>c)jy#CyOuRLIsz}gLD)~F7a zYpAheNp0Yv8M57KSJ6W;vbULF5F>FQ4VxP+a4aZ({--z~q4b%u^4^t;S8mNTDDQ_- z1j1qokB2=_#$u=D+q9dpn~hU4%uTqY+l#HPoF<;lLH8)^#a>>00!GV|}En(6=# zpUZHR<=&k{y&@e2-f*(WdR~w0Y`ygziQhh?VXS%Nj^?RTT!-IQ)~w7FQFwbpQl5`2 zc^+xHUwtrz7Yew$nu~0?{0FsV0ftlv}V}<0L8ndVtW&qJfI&#hvhb@)-Z?pNpui-H zYbx^3XBiY3(vp1UUk!(S`j}NZ&6)QVtsEsDJkLGm44s!CA>EycHT!0-+*{T6{IT2< zV`k`4wWUv_^D=7vurc5e&drxcN2gq}OLDsSK1F%x++{ITW>|5=yy0Ar`VXO|@8=a9EXUZ}>`=9=@sf8M2>sQ&}K5W)N#5=%2S z9pt!hzU znwQ!zE6+KYEbisNGg9}WRP-6S`pcu$5%@Ec$`C2G4sDU#OGQ$Tiw`kBCw5yDJ224w zM*{2WlrN98d)VUgov94sF z__%f4qhZp$2rR5uVSnrIrZ<})>B{)+CT8s`SE_01>Jio;s!vg5Y3Hsx3yu1AYYRxi zJy?mCT4bo~+B}6ZL%N2ne`Oi(?2y2I(5sA$X><%RP;DyNoibDJeTl+2_u|+ij^`q@M&lV#vlJ1AgFiS zI-Ksa(l!>vq4O8_3|?9t)vK=mD?Wv>bOvsj00pD+tH~Af386bHC!{Bv{ANb3n=~^# zAdxZam|t%pgRE*8oo~P_#XtAh1J1`U;vr6$95duDPEf+OHXX9WYf;!adOm6>>_XDp zs0UnXy;1^k>fIb-y05z-p)lEKw{P>x5+CdjIAtt!3BgGHc{J%~4qX_UV{@+ytTlt= zW1E1ZL&%VE!!&DKEj7#!(RGUO52d%ja3h)LdMr16O7>9&S=_z;1_Ra0UvORl1|jm9 z1*Xq}zS$=s(71(9!wS&qkQM}qi5$%1!YdXhE>kLEjY1dP=J@mL* zsP}J#j%8Ss$IT~NnvVTE+@81~ie4B~PlK<5EFDEMZHQS>&B#TM+6j+U$#iHS=UN0p z)c4`m&5%b*3cdjZ#~L*G7X6KKwD`TPqE$(;S5JXLG97Oy`v_6fjo8`AwYj(Z9}5k? ze<7b2ZmHGi-tCeaaMX+)?)u+(Z>>-hFXJh!^7pYyTt`<$o_f|w{^Ou)?b|~%ZCmOI zF*iL?g0>o~5EpksSo5{xL${Y}CcBzMcMB+c1`SsPdm1kq@I1@y1Y#lI`5ALD2e1P= z9@&X)cOTI)$h*`zGA>iJLowR{%gRceq4w*^UpDT9#(|r>xNT8%YZhh;xZOH6m|cxC*m&eB-05Bp znlKO*a^}jJrE3T}H`739>KgAo-||DuPdXvHmRVTO6=R<+sB8I_|wt&DJw3}pzrE1oy>ExQB2$!LQ>Z!z8gFH#LfbB>QsKr0At8rs8m_tnuP!9-6R742TI6 zj30;o{XdkT1riiRw0RKP4sIY_M)5ri-I1LX9uI1*W)yiI%pzTv?q`8uYmQoL;w~`e z$L!ge`Igb(EudyAXeTpF;?T3(>Z0=@mtOQrA;EVr#JLIH;dj8M*;%mz^DrCwBQ@H! z=v*K<&>}4w{CE%7EIwVA(((B6kx_8L;620JF6=igw9IPARt91V>&UeE&gCi+Q8+$I zJ3&tbu(TgSdR(Slbcgr{^NqHa@E21MB3RCd>b}|eJNOgFReeQgWE=ANCHAT1ZsD{0 zGdTG#BxBN4nkeei3a#fSzI06F97o1HB5^AQyyXQw_=4?!)Rmvx`@WSIo8thrXBUr5 zB#jt&aZIion@uw(`6i;tMxTV-tB^TLnt_6ETpYyQPMt9ff>#Z0kIa#1UjK3o=j?r? zfW`Jp3uSyy#)qXfC04Y8<0QVNE>rS7Yo~Iy$qrHx{uCOxLr*V7PIVvXptM4afe|Cf zqYFnoqo8D>DFnS5@Ho~7AG-?gMU&<%T z!8ev{ZZwHI5R?qJb)?cWdN`b;g>dHtf{Tp{I-}-$c5;#2crKprmMgedwBqL>2uX2L zrA0a3CV>2#QZehHPp)aD+cCF)>eDU^;>mN~#!;T)wh-B3u*K*q^hu*FXSXL=$_|ps ze6zyp9go@;N_8w#`J1(T?RV+!$0SsN;!)wma3HbQHQnXI5Dk_u5>KrTjCsEa@&uW~ z_YHPmw5`385s=6RL;cxVxnREzpW$-kSZT0R6Md4AxpTnJgih^&?jyVfHZD{`>$j3%&efuXl`9G$^@4@O4k9Irn9F1G}6ssM^j}qkYFo!y!FCJ zzyZ;e3Z#`a6G#+VUw>4NvQc^@=CyetZ{#AYxZ?&EJXgo)G>GFa;*zrfy)arFdcQROI`rjA}FfI9vhg5AQ}2TB<x6iXt;Ye+%EZO!s74*!R9{ZrH% zZ-L(A6mJFTpuX1un^IJ;a2A_lUv&2;CVi>u)*Ti%_iq=7CS^^6$ik;&$~bgiLggeX zzRpUv2S%tXL1??kVtdkIc-q0Eh&`($|DW%GZt*t#Z=`A{ELr<)%E3R(KT87G+(70d zu(Z-Emm^>=y&Kw7>d0Vs+#63ejjvM5ITNj_?dghe7@I+EJMa^AmxgWwm5Q<`>nC8- zlw@_6^wYFW^TlcIgQ^TDAzEE3E38a&le%^Znq#TRYWZAzR>p6ql&je8`laB^FA0IX zJTozIiH!h~z~?F@lDR`M>~>UlXEYA)Fj6b5U<|Q^<4m+2wGpIkuqKgc#Fv<4bI!+{ zFzy!?cN)0IMh(L!=;8TH4Ax|_I?d^5GCa*CXxeTmtTAs?7_4mpXg_hR0}O}!VcGU^ z5Y6V|z`Q?ZFlZMJ?{4iUo2i_0fzS+v$Mx0oGS>gzi5kjpj%=sLSs7BSq~ro9DN0IS zWvF{uId26OgJ7@%?T*mdVk0+HM$y>!LWS~{7;@jRGSF*8H*j;fA(d2K`7i$g6#VC~ zYk!su^-M?3ao9Q{g~>kouM^eVYUOoWY$|?PQ0q})fsDuUZi|iC`~5QSgBoj8Y0H~m zK_ke~DGnC;oVOlLqBR?@S@*+0y_?m>s2#x}zsjd}b+7eFWIJb|z{jRKO*omSXZ@9y zFrz-l9;3ZO#~(q1Y=blH*!XgfaJj04iC#en1Qql_t;s>_%X(MHg$`=++E^d?G$?2X z%z<71{NWL62~Olc=}P*Jog3hbhpr<-M{Lc`d1Re3BJyf%JjvgwF}XM*A=mW9zDn=8 zSx)a<)~o=T{<`K(KBFR`mjL03EFZAm<;Zr0&W23MOQFhX>Tz`NmY6FII+sIO{23jn zSSf_)xslSrWm!>Ep>Q8EApn?>bNwb2w`0~yVUN)Mn;`rrDx)&yIbP*+>rwdx`2!LF zc=C#-4zV_rnr4dV+oD3VuqExS6re z%HKORHsRH+MQ>{xU1layRj9sv9-Pff16YuPclZKPr8l17927ak;W5 zc;4Mb=_C$~sbr^7p|IKm7Cg>dZUX;pohW`@#XIZ|JARj>Hh!L&fXiGfTnsNX{VDr2 z05LG_TX&?fNvo2O>GXAXtxt9f%+z;b<0%q6-Mhjxe7F>nS{ck~_Mge~*~4G*xRGLc zN=zxEIc3&b=`}G#nq?ZQhLy(OFWt%^%T*(jA1vXCSy({yr01p8e*WoE;1 zZ{sJ~Z~yipn6Hj)!6*$p)f%Y2#rq0%(wCStHC&F*j`$?9rio0Xe?qZY*Dg!+FoHEK z$n=!QKnw!A>V*^-hc=fXiX)BQC=DcJK@sVX+FR180Ty8bcJ`a0C2907!xTs!S{K~;CiiOzCaZmXEq}-o8 za9U1aVql!kI{Ux^_8dTW@Pw%@rl(joCzw-e6P^4M5)+thi(NS~o%<0ch~}cIUR0qk z8TS>gT%N&RyDw?T>gO;-E`EB(G_s?>4Y!S8dwj;c>Nm;Cy>#AW+Ibb*mmCl_1C~)^ z+B@0OV8S1K70i4}T^Gz`J-Td(;K4-g&}75hhyl$)@;BXINo6c+R*Au+dX1x(&ewk% zQ`qeAfc14JFPpjEe_vNFf7+U*&){jDzwep?U2ih=)GQWje}nXo(Lt0JBU` zxO6d)j054BDI7L|gXp6j%wAa-FH%2CT|_w$X~p#pAK(BC&lQXH`-!^A}! zZSfI@l6g2{XjMN&K>G?P_5~UBZ0DK!;R`P&FbQrU%L-ZV2{JCpvHlGzIizy#Wm0WF z!5mU+bPi<9JhILlp@%8`1-^L~YFi{-9uu=0UZPf&E12s)r){j)3j|gK3?!4fac>}T zarFcikQl0^Ito2ijJ7tw37WCyA}cnN(s(X9$vx`K5cYFCQ*GB4iHmrBF~JA`9QxPh z*Oa-YEK{Vi-D+c!-<`Ry0b>#))E5t%i5OAZ9bGednljARiE2Y>hbJ&9I&NulAzA)f zBNN+2*oi~R%<|U)W5V04^<7uEwUWEX9!cJKJ70L5@IVsA-e%! zuuBx(;3M&`#uv1g zsI1@0WkQPj;w=m?Kv!jJ*!G`94{&QrLz}<%oz|^xMgMX~zqCk138s+XzsS~+=XWG2 zr+zY-=pog$^BIflD+cLZ1f!NiCVt1%6d2MK@C{o$P-}CL_U4A2bGpWsYjOuAq0Mwd z?TRuXM5{$HWObi>H@-fZ&*b#y>AnfkxbJaa*Pdp_O~g#Tdzwn9tIDb6!87B6JqZ%< zPR6E@f-Tef_T8SSX||LgV1SnfjmZ7oYEH$cJvLa{(z@iJBy~yylcFlvEu<|~-6)L& z4Kk{=iAbCdCX5f(@@>j%8(dktbParPZMFpJyy36MJ6_aMZg~nBsRs5C zc)rQl5qU56I4f?sW(?*}je;5^jHB!_TmQ&f?q#MlEJ`|+}+cU zypCk5q<~a!-S9VuxdnN@PB%YW$bF`{B+|KA(JM7v$rne3`L)LaI zD5Mt(Vmi0YyRDho(xZ!yv}AFW_CpvCj?|T(Mq%Hkf)#+Ic@)1#IhJf|dZ>+1w{4l0 z4J%uWYdGRBFFS7q8#BjM_?_8Q#?j0=BsnS-oAs9Lx;syrW#20VrwUB!NLLBM3>ib?6$FhTWN*QoyFZ_Q-~#35}h$n0fjUs|AzufiRXF;Sh)bk)65 z+YbEcyr$_PBc1Jw27%tv5W~3yV8Mgb&Pz)1AETZNrC{H9kD2b|TOWbQAtTO7H9L;Z z7`oY$z@rROH3FDT;ITTKLOH}rf<42CV=Yr-r9B%6}VXc2AYa}REn z4`UTkpDrR77d0IggwXT)k~P9c(!`the03q>R-%ZWs-5lcZ2!(;GxBAk%z)sLM2KOw zv@qOY`^YU!Epi0Tl~N@W@S0!}w23R-2+!RKv_|>*1ebYg`H>D@`|Qmd9`Z!Z7)mG< zIIgHpg=Bf|^yO@v*(#e%Z0Z|E@h$#_N(#C#7`<*~n$bfmx)NVyeX9WUF$(|lZqE|h;N=^OWxUiL)(#bf?E!YLCn3IK zyYsfv`>Ywt=@s7)yDv2#t}VhIR;pO|Ln-|4h--Jg93=FdWV(8bgN4E{Hg!N%mjjl@ zg8Q2(yH!|ysh;mpC6W9I7&D5;R%AjSs}?t*VexRLFtY!u|lH;)2xYW7wQS%Rl$Xv(B5zraC(_gXG8nt~YY|w;X`=Wmd`)+(mC?B+9=7~(gSUGmB5hP%- zl?IPwF^e>LA+UW}2N!TilSE&81RcLWtIsZ*%PR@WoD&bWV-jTXpLl93rH(ZReY|IqZeq(O?1wpvnPbQ4D9rnxiHlISzedFbZmtegPq(iAj0w)a> zmCPkhWxFv)Q#-WP&F@Gf^FL@d%GhGJ)DYE_pBQdJ2tQShw_O@=#VLC9NimMlzt6`c zRl)9t6^we4Wxj1GEX$9Ph`vG>co@xBa7KfUdb3_n!rnRszJ+wSwkz@cC}1nL%%$ai zG8(l5nW@$g9!-t7lk-aZ8z+QK&4ns#-TBX&TLfo0d-(PXG6JK0Nq=eUezBH_CNi3r zXshey!ikEG%=Euu#$~X4H75%g{t+_->QS0XpMvIb%s?k@-tiTjY8cJ7jRkVVvAkBi zkycm#`=&HFg*xd(duxgtL*Z>dEl-6N;? zGwXp$Ey`>r@8dmRn{%GRCSNj+jK*)ooHxLiU7|?uZ)z27BvF5 z%#I`43wT(Hq%Wc~rKTp?dba%II>?JstTUVAvl{2Wtx+mqlK_Rg;tirm96H2`g+4a# z$Du+E?>XIQ0=M6@OD)1aUU8B^?x$njFgs!!b`)GD~pD-o)@bq2PR~p2)~rIIq;65u8t4_z0m>&jE27Gd$2dk z+TIm#Ehm`ro0fdQYh&*Y9=-Buh2%RUe9K-z7U^&p{sJ6yuoJJYL6g5Ah|L*u{-lq7 zUm@AhQ5c&1uwc<0*LCidq)NWMpYVAf5XX@Z=rs&X@`m>u8DW1vFu2ymr*mH>7;`56 zyxTUD_?~P5MS#!be7cdbxT1a`zLWrFcQb5wDRl?w_unPM^^Og`Qdc0M2P(|Dh~HbX zdm)uD0D@QNqDo%Jj{QNgBXJ=HTBHntW6M0 zdcHV{GT$#kF{dBlN*ElylnAt0uMVvl3|fka?on0;Dl6A+Y)_V)u%}1FekO*_XV19y zyu^at49j&*N^^|+x8rOU^ZOe~N3xk2-SNl6H6Mns$KDv9wgZ$v9`TL8p%e=?d}iKLp?P4LR*;c(Me4E z0PP3Y5TA_{2m<6&oq^pjZYf}Ij!3qKI9J3Oz5k@ z(EiZ{pjt6}ET1x(Kwy8Tm|{EA_d9x2F_Qk=Lp8E4#kQLW_*0mx$2Wv}Pht6ZiDoWqGDRT&SYc9lLW}{&eLcXYdws}o z0;x+jnke?BSUB93DVi^D_S&%ch|$|1d;cXW0{w-FkqUuJRZFP2Wu)1qWY5&H2O_XC zzuJA<^~QE4ijI73W@-@s^d52OxDL*s4c&I(xP+7qJnf52T*lkjA3N`k*;RS#yrG^Q z?SqkSz~~`}|30X1OsZPkBaa&t8sRE}S9q}{RfP}-BGKV>A>iLPy}pvg8ak6Y`2O!| zdF^`Mh^P@N&N)NM-tJhbz7)Q>qPZ;I9GLqqdk&;?|NAF8IR9A57D}SV{k1Ra>EWlg zsu`Q5>kd8mZ7nnf%!VjUjh7} zthx~=WfGE?9Vj)KF~8ztS4)M|B+-aovan(tRN-IU=ebZ`KctRb_N&eDOGzinZJl5m z3iz!@6dtrg`fLNy4|olI5s|i4Cf81Uta0R*BETn^LGdiPjeVqy;S17Yc5kn!X%mM6 zGwJ-u;l4VIz~?U341c2U-JIoAeE7`dd5;}FERrI~-#vv3BXoeKp9{sfx!orHC9bI; zUzbuDx8-lMXGAZR-riw!m~)GPaoQ<$8uBJeJ%&@6H7Y)g0*ImsNwZgIZ;1t1#~q@m z^xzuk&C;Y@0J89SJW-($BVpl-W`i)F6yac^KvZ zr9%Y-0Di@sAMwyM}ZY8QFlhbX62vmYB1snyqiQx_jt?#ce;lD7*nkKu9{p(sqUM9^PM0t+` zsI_pR*=?6r%DFsLt5^*wGNcx($KCYZ!Q+|Ssbh}?GagJma_yJ-N%f)5#kD028M2(3 ziG2DzN&Rmz>k>+jV3&m7^ei#AYV`LvvW-AGNjg(JyrAQ9?#VbCH3zG+vi>1OZA(7V ztlDeCh%Gju)V4Xh!G&}IhSGB6YE6RgYYqsi1R7DV2^rpE*e`qd*6cV81Wf%2# zW24h-m6_mcH3%2Gjo^rVnnxDsUni-Xh7D~_Eo z{d(tZL)WMD$hv~&P2k^7NINMBrKsRI6^c2t4bgu0pV=)7gu+d|5`n4cssQPY``Rk(=NlX(6VVB8dAE_s!4@j zffXjXg5JP0YjMlCNI)u=xa7j*oeN6V?F00Ok_^0OJTI64Py~G$x8SevTU&~`IVT!| z%#C%5;8M0WjTk&bVv|<;>XzHk&v=~q?yIqik_tupTbWbXchHjZKU_GXzkV&#epERS zc$S^#e8ruUnhmf=)Da5X(4}!_n~;X}hUD!@hJeu!lE^O{AeNL!TPuwV{7Z>>o+XQT zAylV)z7Al{5L##QdWH&08A%as2o^57(G#_}qX7^KqG(cpX5C(G^)zLDQ?pKm@r!BW z?nz;VEEQO}s3knvM84^^23$GHo$soy5&7VYLxfj1T%`~hkRr{MJb-ClUrDX(Ce>SW zJu9nQ4`K}qI_}iUs4c-@A)jQcGTe>Mu{Cn|2A1m~qjFs;jZkM!GAHYZx)<8itd!hTL)i7s0ABV_5;ybkWfdU%GW;O5d*WXU>Kl z$FE)~Ilv&lWVvd z3`=eaj7L-3`c--;!Lcit)fT79P!3*Az~$EbYXj8oYw!tX`OCY|Suy|UtE1gL%OOo`*m6|^Rvv5nlJG0-z4IP@y`i;|YgWny z?ATG!FDmVa#6I1K=wGC1h>!wiJUz&Dbz)-P-B&__M#o=j1JGDk0l7JYhh=lfDu?J! zE5flB88c#uzc^T@U=2J!mPs%UHaRMP4YVJdq!qHqKVHUx{KV{XZdm+dldt$hH}#^l zRKrXr==!57EN8vY!rgdkcmwmZf&c6MAy_OZV?RZNn@LqUvnlIZX_O4HC)>`Ky_Es) z<1XG!50;U=ra?wy$~b-$l&SYW;zSpm3djaT<89=>xvqfLXiT97 z-g&h*>HyC=gZXz`?p$_w$mLro?e);9C#r2~fADO$dq|r-^YbhO=yB7R3NW&huuj8l zJy(Wd&Zx7Gt_$ya9yhe}ty`8FpFanKzpG&4Lst0tqWto%(F-Q z2If&4T}>fe{wpUJb%>#1{Az{z&dEcZh^{F-l%3x9IV2@IN%($olg}24yucUHwU2La z!;Jd_ZBVgJ$vF1k3&NX1fr~;+%G$}}v~Mzu5MFH6Qq;1I|LbtgLO*#f<@w-7h6MvVaea3~b=$eFj7{0o@?Rj=(+xK2V{f*h=2uHCL>dOw~R}cG3=n3!|=8fS;WPHAZc&!x+g5D zcH)kqX>#NgwZH7iOIFCuNx;~40f;WgjzmzbySWF+E3@Y>p4hGXB6RuZc1BC<2trrqp zJ0Ntf_b{2lB_jyTc(ii(Aohx)&?Cg73R!DGDQ)w!lW5MFs)mOwT+x_5h__;~>wt{% zHym}}ZXXDTaT0@KDa4YZ}u^+x0i#wRZorizE0e^UBuDd zY>B`TP36f-`R{0-j5Mh?h#ltG2VeWp87^~Xwx>XIM~`2GguLWB{^aH@yq#DsbMdO4 zs%pAQd;4iD#J!kC*wiW@yH7CiE$q14%{@%VQ1rZzjEukp!NIWH+_E27Ns>reoH@-e zv1476Dbx*1CL7Df^lEumE>hyqG;U=Pel<5ahaf$Y^vCHEBQNTeT!SMc6qQgQ*e|r{ z^zkvJFz;QuVDwiZ^zFNAu_nZy24aqP^SPgbd3=|kvLy62a!jh@){LjFviYCvz?hcl zwx&+OeAIS#KU|COoE{V1a9`Sswzd8=7Cj|~j2{CTtrmRiN;XS6Y zPF5hJLglIW53mFCC=zO$#)B^Co7}Av%0LBZJ7mb_%sDX^t^+5P)1ZLyp4Wd>*j=zK zan)^L7XRRh57mmw6hxW<0`Nr+<^tW6y7uF~7p0a&mgN)Wi-;Avh{pGw?3U|s+11kv z;z-UU^Kw~HFev&MD}%8Mq`2kTe|-}Tn8-hQ`bRQ-LENWE{kXmwZ9zpBx7Az-X6#z_ z!ECKy4SoCWGV}$w17ZA)*cvE&V6{aC^JF_9{BuAh z0PMR3FWvqvK>C=JiOL^AUtX&QOg8vtlQ_dBiC!cfV%&PF&l95#O&0CZRaQT~Pc9}E zZO{?-)a7YIgoWeWfMXPZlYr>{ABIX4SE&uk-Qh?&{;!FN?o0Ze%Rl*0_BZGcG3SN&UT>81enOo_Z_Cz7GxdP%BAKb zn}Wy+Qv;DQ3V^L3azyeMK9c3~r$Xs6vj4_RikD|`*&@%<#yxOefM)=i$5+E_46YW7 z(l-QZ%!MSfQPJ(=0n5|sMLnOf?BiY)t0uUAKQu3;e)Ez@)q zuOdbxZ>OQGAHWoPK9x2RgF8TKk68%^Pp*BDQv&YAo`h&NyB2pQI~8l$^v!?jk+~-B z8*`Fz9jr*e;wWSyLcBT0e8Hc?n1g5`YLyn?((xVTs~L8Qh$2-$xv^d6j*e`8l~S*T zD6HE&{@A`a{3Q87Na!)7si$*UNuVl7i6HZipUIH~>&$7c#&zGVg)%AX24l)c8V^~A z3k;#N8c{FfcU?NCc-EXhl=^&P(PEDEX2}c(wGzRWXmu`pz+~)ec1jQg5?(%( zz=_Yx2@Ey5*~-0Fg~YV6u8$n4meRrAL-TF@?FdDH>%&p3qPqap%&9CdwH_oLG}h?@ z=QJ~nVdWthB{Fg=L1L;hsgw#*BhS4KWHacB76Q$>`j}=W2WLLZ(jCGU_A_>v4sl=t z;FyZM9fvB}T9XZ*p(u{n<1E}qLnmxIQAEKYvUjayhpGv#8F$U=`IuI2MPcWT3k|! zKXFH5@rwQ{H_3~il z#W3j5*^?m7OESS&r2C7x(YbaOS^aX%=4!Tu_TYM~WCGD;4>*teu4_(9a=@ry+i+|a zzS*XdoxL8-f$aVVSEV;8CfV#2;97oXib$bDv=43DtNz;@-R#`1a1JJ{kqhNFk4iDbz z6=}1^6;HUfWqGf+=tSs%X3DUrYHX7rWf7s zv6Q~CK&3+p8y*INdYCLvE9L&VYy#YoD8irA*4OH6vZ?at5;atc4jmX+uY*s3s|&`t z+lboiztq1YZ&s{pX~u0IN;vm4_xhj4Q3;K?F+Z%>Zt%S&G?|}QXcx>?Le`u`wPq@2 zhO21(ag}guDQ&)VbJ1bLEo?lfJ@1w|5d;%ODWB_wf)TM?PtGHQHAS%**~;8CG|7fO zVv}cx^UoC0V39<1*EiFnl^H@r`L=OrSM_8NcXV)n@U^wh{upO@LKQ=ozX((IVAE3J zF7Krz!}2%E-XJmYn3ElJ{OMID4UPP(qwqmH)0p)3_BEEM^j8w7tELyj0WWCU}yL}F4-`@Nhap72_`HTI&E$t}z#`ZzDo94dh zcqg3#c=i_sZvnG3>P2(dHS`JbL~t&g?kU%O91!7Y?#`I-8r? zZyz=Zzf+Ce;`P1x_9qeZ7U*n6>cpC^bWiM6y)lqoY~xGBq>3fMl%srOGi@zZ)U)Ay z?Y3}v^{k7i{-f5=H-_U_vO5OgNO$EOdJA6SgMVk;;k-> zUwWS|A7hYzu*#y|Q=oV&%pvJYP*+dHUmVG?;BsM(5Ff`}4xNe6;*4i)NqcLTS#*)j zDcoOK6h_}BFiAPY10lSuu4Z+pa$4r_45|AogMLF8`sawSeV%-X!9$=>Q)1;?#i!7- zuwKOSMjt%AzD?sarnOt=k<1&IR}Qw@7?z_?v~yWzFjUQ5dmb_(80n ze~+U-TyFSPI;FipmW|YxXzwu8pw7=|?J8!x`d0i-%9<&=o_vC?M7LZDZHxUDKQ3O&-m}MWp_j!Ec>3NR+Ta z(OM&*8S_SAs_|WoystlHc_&XgBO_)4pgZf?qM54O`Qtk3AiISDWowCPIgo@utO_b4 z>cLqQX=mjphD4Yo9w?DVC5L`fu$h^#O}|2xY4iNtUXmLKmp*`?HRA&DY81TL4S6TQ zF#$~KjWRYw%hH~n9(iZThLtkF)ZYz zSwSJoQJLFTUTI_M^$EX>{OeG^3u?o^4Bw47GS)rnh2PoPY!ERZ6EYdn5iKloIXxUz$Bn#8%&&dgS0K{^G_^>f z4rXql%(A~egw`zdPH)4`A;#(0jyC)h_B}Tl>9q+}4cNFU-Lc{4Tb{kyi=hQb!@uXb zM5eQKRGscEh|B#lvHO$>fBx^i*)QDroD~A~WL}aPc*CdH`zM`@oPHsJ$${#xRg$b} zajUB(ZiR!hGd=g;!q-z*u6=}HUu3?i*@v z^`P@Mqx0g&2S6wjrl3J8u1L!RAa16u!fVa}t_F?*xZs8yuGU(XseXTwSk&2zDFqw~ zZkD1C{d4PJN$R{CzGZqcM&kJ?Z+Vn(tPp)fID_lht`tejUb`%hIEXftLv-% zHf8@DS+YK#02x7hqovPILp9fn49BVUA@3SXu?^qx-29(7qiqfUYNay%_zr=%kT+4f zhwS+v&x3YYU^K?MWxk9{$)Kt)Mzr`5eyAf}>9cGa+<9)|C*%Ldr*$}S!tPs^bK?^f zhd-|_P+X7?8!}@W|07m0eKsKrN=q}UNS*9hF9cTddj)8W7!*I@A&yo*443dd$>9Lil|x_={gOI(9454$8-#R#tkd`dsYDMw1C zBz))AT}q^&3^_tIIH(0Q8N>a0tx)yDk}?iR_e&_lw>ywh>CX!)077T?&&C*4SCN@D zdj&~Q`p3sM%Ge|xHih;3Vs=t=KFrFcp;T^>Ym6vqg#j&y~yG%XTsF`GU~fw$!`@0)ABNsPY-Puxxkc-&}fB3 zfQ3Y+5UT{NgckgFqa8M|!dnvKJ`=`UCy;o>OWm$ck#E5uLZupJ$L7%ryYikiHF!nn zrc}2cxUM>BICdCS9llLIwzvfQw6RkhE9@ADy7YL`&>BS^{`cXfj+JzYWALYiWT%&1 zM7H~X@^`h&>y7-F3Gx)Igtc5XA|<0!cDP>9-EgO8x~PNd1w6FcKdZhJp z`PaFqJNf<}$!1MrhAcj5J|>S;TqkWlE=`W)3C*jQTy#Z(h@SFj?*#VTnK}`JS|!;h z#aX>)zRcy6wE%;l-opGJV>65M2O~T7#?8R?v9%<$QF1_A^i$4Xf6gPZij8Mc0sZc! zQW_4Df`s)6VoXiu3K#;-zq6>gs@W&z)`l>w^07H62QjM0RO<*5so`5p<^ov!d{zHn z>-AkVCCmZTdGFtpqI?iPAJ{s*rxOJRnpy<-u5Y!9A@%sLWymF0MIIQsLyNCfgld3~r;*YN4%d5kwzsY$a6hCYIk z`IU#t!}Uh3&jRx|jUlB_{(JrT1&;33z@B5t$^EL{g6OGcV7czt zfnGx(q=PZ{5zrFO&#(7IWg(q@=VoMe_ic0OOElR>{;CM4?yKtnvK`JR=0qCKL*Z({w0|A1Ii9(a!uwU@{=aDXcP7GUM!}#2Vr@e;KI{dY*Wx@cJd4sQFW31tr z=u$EJX8ATTHRR{mg{!CnF8Y{DSAm)=ki)~fJfr(kX51I#)rLz~jF`>Tw8G1GrX!{2 zu6*R8P>kYA6Gz|#$S6mQC8ht3ra&ue9t&9}aw9_Yy$}{yHq9t3R;fY?@OSVKXGRPV z>9l>?c8$)x2sGst@4So<{N?ns4>w<}?fpX5eSN#012K?;qKg5@jGSI>}% ze0E}caC+kIP+QacL*d2bOSH2m2Hy(K)4k^BA&FV1Z59){%zqBk%5D!{i9UiMM4RG! z7viKjnnr#GUkqiX1Utxb3O5Ap+MKip)(Yqhc%PK|VNNdqL9A9IbOd7Qr|G>mpOm%A zJY}cNYm?3^Ns1Je&%}a^XNBg!rOR}SuD3-d_C*KxddB7tjJFRKU`4JM8=YhTYx)s+ zw`J>T0cogQ%X+8*QN;UaKqxm5I48`|a~1%$4bB9lBWkypwnH=&xg5m3XGP^+9t|yp zBW8K@80^un6^Szq5(3w zyZXJa@+bJ`DT&~&sOZ<0g4egG5@XitR_F>&GoF1n>Mk~hy@tzVckyF-6RuPEs?(%e z>yXdJgZR~Rox>VODm&-$9spr^*nA)2E_awh=_^JcLdh{?f6o^dSSwVn$r80J10Bhy z7A~QbCe539CB*U;ITuCxp?sKgXdgTw>;NdG9fF8? zdn_hH58%5&|LZ}K>0^@fg+=~}%2OyF3v~sTBVTx1-3>Ye?dIWN5$@!A`5(ZM5)$G3 z?W0n6uvM`6nJoi$SP&0B!6FQ-Ji52au9bj%A>OHob2b?Z`J5cllfPY^X!ra#;FK5b z4+Djel5Rm`R~fvu`^9-m=}_FiC_fUIRLXOqL1YbW1DUhXZ~hkFI2@6^_90F>B*7{n zab5go=ts6eF|tdhT)$v((7N5W^e~fjo5oRlsytTij>}S4s~VnS5u#R;f|uNX&mn&R znsCr(Ly+!J&v<*o4~~tdlNPJGMLTU`Oc4_Xg~(9`!PKz7VVmAK;6YG0rL(cu4hg)` z-k3IKTM%pR%~ne>GnyBV`59Zr)9NTrtFe-18n#^~kKjT2?Nbfa(PRv}C+ledU)3w`tY6HUK8_09k+^HDiT|%pv-Bx zw^CbDV!yV6z%Ah4z_$k7^u%9Xb3VGPhOo(6dA0w4qeIPmBi-RRlXy-i!L&-0VDab; zv`ukj>S%fVz&dkrRnHlo=L;1ktx~(gC6ZoCa=Jn;5!}&_TtQci)R{hKvrBtedJu5v`Joo zBkEKLIF@LxjqXEdxz_cLx?_27gmAN!(cwktCW`Oax6Xh^ai*UdgL0{wr>99lR-kc&L*hfLg``SG9~NW|3(rvwNVpVi&qTzc&6e){}d_q|(Z z&O%dAC28Fd&eyadZ6M}NhnE6RRR8v!2;m6tPEW}FuBaS98C=g`WQ70~C{!Uo2+Gl@|N*$y8TXZY|Oc&eeyWyXWV7&nzMV---QaUCodHUkOcj*L);Njw)M+Qu~GnMlyf?b{cgQVe^|GYii_=^|28KSu8K zMP3P!RxS2EMSzxyoT}WT-%}?H8na%WlV?PKxtDW^+95zoyF`pE?8r6oo9>Aw{Ot}J zMfG@DI;8v~8#u$s3Zxkr+7fj@Y*$_^Z&kCM_I)8$lnLV;)9- zwUF+#PFRXQHxTuoYQ&y_8giZ2Ua2trCJ6&ikl;&o2Ws?fm+8Oo&8*QCN4UJ4fAr@P zGb&@&xxyhuv~$^_BDcG@QmE@P?}M1Dt^fDjBjTq&6Ft|{_UOpdb^B!Kmey;~!s<^f zdE-3qw%Q5Gy3TxuHG$g1GeCcPT{I;CkkdJ=B>-M2HT-954-(BZ^Fmkj=+jPzFO8~0 zsLw>jMOhGqRj`c3HDKm4c;jmilZcB^abG-pW{@cE*`h9qPU-%mSLbz1LaQPC&-E=3 z@WwuNp|e`~-r;MQXTy>NM%HKvcmqhLE*i;_SWV&Wcnc|8P51P>hrq|1cWgi2POJzR zOo|^K2tD396p3QH<;1u=k|F9<4)!Tb{=Okm{r1X!L6slW)sdm`r)VW+bgqwGh3R*HurRK=<)6=W1T`LL>d8{*b}VIpQXgNUR@-=QSbev)4+^2hXPg_}qG%B``= z{UNctZzaDDJ5BYmQ*oRSralTeC^^-;Xao4vpQFl*7KY+owyi)Z7hcE!wN9h(-vei{ zLX2$Cyvt-lnuLt&j0}a%V(R9IK_I$2&1aZ?xsY>uXh*Szp*SXg@Pr zx~0+(9ES=@OPwmY6A%fQ;D(w<6Nz-;@|9$aac9G_rnbLw8}E&i{b9s>vEERYK=AYE-$ta^w6`LAo0&p8znL zD27Ky$vF*&Ek{vtGg{nyr#mT5ZdKc9vZif-CGGtati#=71mPlO6hjp?I9M9?gFr}8 z$KZok%1Qo|y;gPy7{A|*zsL%k8aS~nX<4v$gI=D-Z4LW-oCDJ~zyV^Ub5}n!>+;~_ zWHF=mH7i$^@!Ew(l$WDLDuI;d08T~RmGO<1g(aM|%|nc0K)XeLoFCfCS}H?k_6PK0 z$@i>g!1bMMFlp=uB+4ELw@ZSbvTmw5xe>s7$*ZV?Bh|K0LaR+ol*>gt zvYiqUeeBHM%TMtuKul500Ko>?|HrYKG<_lOJe3&ANAHw-IiF*TG8L!DNob@q8_)?= z4=zutMKb6YMNQili#>7i5H)1iyJ-d(At5XSpduWv)<&I{I1j{xc!6}8z;lB{^sLhI zG+{SKQq7dJB#!|3f)lB(>JIqnw@YxX`))N02R?_;-LBbHNP(MW^xMUuQ7~i=K}2i| z+BrE$3iFQ<^i|!VM6&_M?hMuJIFbzT-r;h85;p>oahlZ|r?2RyH*fgaR@%pzQUlw( ziU7H(-2z0tr>@Vxaq(}PQ*=+Xg~W5bj7)0ho0X&H_Hc9ul*8bR)XJssjeKlT99%2c z?5}8JO{DR89;l0z^E??r z4RDJd1M-)8&*vX@G_MK*DnbdFBeb@olvz6!lTA_j`AzMJA<<&$6GdEcCiz5%ac&v}Sjxy|kTL zVIQMw1lgSBCa~IDT`Y)o>k4xkIsCtzRxKKI7~mqkbf7e&LLu29TF-1m@*=z7N*k2NMk?&hDHpm!x4s?`Nud-0r=9_Z-YQFWCVlVMKp z$k!$m3yzW!V3V(4zvzW=$hX4l#cqH~AoaP})=HSyw=EPLsVq29!kv1J6qBiz2%AVE zcCyR_!&?s$A7*#DfYq;(Zu6*4^Q|wqUsxVXV$V_*)m}|4@(9yUJga=in;~|)LV=V1 ze)d5&mJ+=aqhezT)9pbJdB;F#q9J}Hn;D`qMOu??{rl`?`Q}7}nBa&9?_QknHC2(rW;A9yJzx+5l1Jd9e&{ zndAHq{lV_rW~d*ql7e;~Zl6JtyU>8Lv9ds2Ij#?px!d(0w@_nOjU!d3rR;N=oz3CO zxAjf=|ApVEZT<^PPmqyw@7X1vDD51ni1C!$MN}7Y+V2!`j$(pC!M4JN{HhQqN{&cr zHSfP>y%#upD0az^SD7%f*K*Svw40=pFQ-UJ9OhIauHq+sb8r(3s9yqA6=ql!<#?)R~f|i6M2X)PHiNJ0XR~!bq@5RS8vt zqC0Y!P>mZ~_+%F3@f_Qb$UwKJe|~sCABYJ^ix$CJVzcNRI7MX}WZ{p1}h~gJJqwxcHhbwJ|tY;cuO$V2nyA`K6{nHhjl^?=NpYCMug9?FpZ`jreBYT zG7+mN>~TJN_$4B>j3E&k0C6#* zz8{pR!%65^r-`ABdN4+2X1?yi$_}7N!%$siyYBCKHthj)Ra$b0CNE{brBFG{ zE;>G060g4+#I+LJoUwjhv%~?BF(~3}GxgS7inlH&k!Il$$_hK$o3;Y?gFyWKU5{zf z8bY_?neZSPN`0$HmmN6Y3MgstOV zj1O>jhDPGaWrnv1KLL#v*Tr$J&KjQ(E>(>`cW^<7JdG3e!@pAFsJBQZMrf0m#2Hvg z_FS^yQl!@Lryn^%N8ef@HQm@BfBTM96T)v&_BEt9&!?3LQVVJGLpVeBqn|TrhCUlS z&89fpF<_3_ac>1<{6GXR4IEE`ymwy&jm?mCISm4IOs$>y>0{ofOSvD$#%WK zP@KN;vRf|kLX5?0+k>@G_&zUtwq`(0vdB(#YLy%?Khi6Ri@LlJ15;BwZau76lvm3osxWF6A)?(>evbq&2~xzCD3yeq+T7rac|a0ya3V*I{jiM%GMiRGg^$X_#7CaI+PpW=#?{`d6`k zP61lldu|_GHk3ZCtAAO%2fzkyT0Nt7!CMFHBg(IplELNBR>A16OUGT`t+=%!mEHUK z*tXyo*(tZ~Gtn3Zm2yc*5Hr+W#3V4>qZ~9sV&hyYJ(+9U!v!eJWvOuBL^4g(j=N-E zl53ly5hnA8BD*Q8l_eA#Vhd4QeH^#d1lG4TXNX7bN*;TSvOg?DZG-tZAmWfW&^_tn z;w+hhD60_-yL2!fMk^+1j?RAyEb5-chqOhfJxQSVPp}cS`C%g^JlwKCt{nNa`H~95 zz?iXD0XNQmJe6Sv&YvIPEO+FNPHX*mN3u%Fw@CRThk%FohppQACf_mkeu5D}yN7e! zQe=@p>l$(MZtj4yV%G;yfNqi6mD*!< zHc-+wvO*pDuPVYVGB=Vs?DT0g-+1zS9HpP~&d5vfIt7CS(3=Z3ckEJpP}7Uq{L&FX zoG9Zt)W?lVI6F>Cd0X0B)NRhr$O7}&+*fS+qfbG1{5loJGcPNmz*xh(6hn2zZG+SV z|4kEBCR-A17j$|1w<@XRg6X}gM#+9PE>DbXE($x@BT6#J@ioi;Z*t`Z^H~Atj2r@ z<#uSoNqjT#)hM_-w#MJxg62pXi2_`wY&b>gq<9H7!n#%JT@w%SQW}oCOd&0JqL+1? zKW!#Bqz)ac1mKx0_Gq$4&><@&%Es4+x(X9n{QsQ0H^l^5K4RZ;bKa*w;i$twMndR_ z?YXO9EJr~)rR?xwmc1hkT{vY&X+`^d)e}tUgwy zyoOb_3NkRtW(okc@qW5+_$kW*ar2Tza808T%lQP1LS&XyQVr-PLq!KZcjI&ZQ`=bp zDN~O;-Zi$JsAIG_1EIGWb3o@PgvJD%E$Zc$+hL8XM63p1ZyILlfCG8?L>g-~mJ*UR z@qRGbUV*9IjeYdJ`B*b8LCiC)6Ifw9i=6w1sRS^MgEz~FSX}dGYCow{Hy%mM4 z=dL|Z<@Y4`n>IdBZGCJd9-B!&HgoUEhvmU(#8JdDP*(5v%F?6hWU_3LE)YdM=v)r& z39wmm>!bHBZ1Y=J;MHPCNmGZ1Y|xyzhVFP`-!GZ}@uG_Fx2Z4_(fR61tisUX>pl*tV!;_B-y!PY;+gFg&w(D_T5}R5{0b>uAy7yCIk(8G1 z{eRS#y{$e)u3upNc-9%C>>l2ZMGp^B$&}b0=L)=VE*gqDBDVAgVDhN-Q@RFlqQt+{T{X=*2$a1v~wCOrl zC^2ajlGryJlNCZ6tX+_Q%_A=g`2#yFc^Y4xg*72c7 zMM4;g>42dz6ec;4;q8z~uuF1j4hO!n!!@hVjIV$DyoQ(seeu zJXnzEJK8a`oHcQPn5XTkO>@JO7SQ^(>3occ$rB12<4f35eTss8y`yH0!Ur^K|EXFw z-R#H(v7X#=g6!8n3j1WoMgc8)lUHP7YOXg*uC5S2E}~cpY2fstdf(-Bt;3sgy!-3& z0(^{_hSr|2kpN;gl^f%)FpD&|3nA@-YQT8vnE^m7xgYUNh!|S+PjerWT9d1a+Xmjo z;ZN!?um?t>&yg5f^S~J4{62%1g$IbcshG#6y}r=5R{#|TuM$qehSu|wBJkDjOU0mo``ej4(48)YF%=9^+C5yA{ z3Gg{>s;mdH0V8r^q$q8Mvw7JaT zHn3+5A?0}2*w(hDB5nLDaK+uhncuS`Fav_rZTz@4g%dO|ctPH^y3^E~URC$mOD7xP z`6%fY?Fk=g-fEY@wcQ<}b1X3r4nj<8=-VB!m#6Q%L|k09Ltyn-sudSRyw?3@oCU)W ztBCmCr}NfAUwxm*$zr@zfH%bFw`YQime^qFLihLXl{&@NG%r6ahlUPjbp%K9#VZ|2Et$r$q=1)bPZ)irZDJhllsCf5Az-^oHk#yxk#sU0mrNA3lj zyCy{}ogS>b0rTrrsRa@-J)*hPITWwJu;&%9UfunrOwntv0|GU6HGEPb!)wMC1+*nD ze(lu1Dx8l>-(|>oDe5|{iWgv~ubb(Q=tsgh4Z_@g;_E8MJS0UdA=!wnaU2|Nxwuxc zyncvA5DvPf$n+YnbaVpf@k1nE`-2X>*j z{RPF-{a1z({%}oCWhe$=D_A)8l{sNfr)Uo_k^s&jt@q?mzs7k1=U!K@i$8IDR^20+ zr=t7hE|*OdEv!VR7Z=G_!lx|SfaIg_d-91s>i6Bswz^A(+*eh1Mj)jMa8}0I>0ThZ z*9w1LI~gjlDA>qa8uE>pqnh*VepHvmE9>Z)v{gK@TXLXgu1*S9*p{ft?rx?B(~EhnCu=7 zSTi8NCi=UFDuavjdEqaPDHOJejh9*a@sxg_&tvx}xWk|bBElW6c4sc{=q%Y{?X!kg zI`NtDVOD!F;8tD0=oofH9B#li&(W1BgdPKairDZ}c(_X6yc)B6^|S47i_wKm^M}S2 z7pxFK!hH%jUOuEixp?C~2q!B`M_}-tFcH1)b_<&D`T!-A@LX>@H;I;xlTvKpNFpv| zeG!HCnMu^+v!8Rqw7P{Ln3h6zHa6VzUzCC*wKVe2aBpr_6QIE@XqbG|x@MtLy*co#c}Gj=V2EDhLD0y< z09)gSN(I>|YA7$-`#2pIQi;2OSKu&vptYPFfc4XUc?q)^7e-$Jxl-%JIt+0a>}gKA zG)TfJVR7Xe&?+)xZJM&4WWSzT-h}EHwX%!#mAcxJO8;6M6X~|RdU^5rR^wrv&6qLz{ZI5d8|s)%6Qz`dI^cl zF(Y4=lqjcBM50uNa+(GHRzDd{zCa@qzTibUBhMWzvGai@B%z$H+27>0X}gVyV9=31 z=c`zUty7)@U^wY96d&=JM)N;1cby<0(_bkqCw{w&-9>L$k_UXvkmBhB^2q5AqAAlw z%Cd*T${rnM#TMrg3O#Cbx4MebYlLHLLz&0Ii&FYEBjW)0PU=hwZ2}4Fi8_ygNp)7a z`B+gr%3H3+;?J0e8&@(5(rk}N#ivR^(-b)ivRfm!a_MM(6b=q~Kc~FucUQ_Sn%n;w z@PtKrl103Q=!}_0Nc<*qs=p5Dlx-VoRrK1P5WN7jPEeNSoGy?) z0CA(l8i+~Bret?Gt`#Wo6pP40QOaY;CYTAsA!PcFPzDUTd10fZ&(wbvT!G&26jW%$ z5Z~PQYks#Pz$;Ati9fxKddT^~0s#{fQ(HBXaMAt+MZ2?<(*FVk-19rVpf%I%)MxFC zfoaPdldn8(Q{ZhR5RfG@QU!|=x2Y#sB$3BwtwW9gMA-HdW0cWkP&1@Lt+t#`4iO(W zd0;gT=- z$al-#)AuauTr2=v=;rY|HQejxFM3rrT2sO23kWQ_B$v3z@2Xb3$qks)^P6B@x0UR2 z%44Y^t|o+H!>|Q(b3Wvii2-oGFHqwo_<^H8dk^KgdF>0N?hHTC- zo>;jnNV@#1r$huY5PH~S(qoZ^eSeHz`-sbkwx_$nhWMJGC*hgzG+k|&)2a(3h7;+3 z)W$sD%m7$klagpb)E2WjM#=;qjqM`B3X96YNw!*nR%5!;V|zu!l%RzfcLe4*h9r$@ zD4Y*?=TK|JCAAG3wVdVj)8s)=&^)rXXp&}%dR@TGoflP+54mKsLnp;n z%@pHG@6(tR)43K$AIumVq%}ae@6r8rA+TbbJe#e(hp&J{0wKD;yGC9Ki!yq4xZxE8 zXv0Rh=3-)*F9kil@mJ-=jd}4D=aC3BbgwaFUb&}yTZ8qBWjfWp4XFCNbwuV4y3-yL z`yuHFc5ebXC!n$Iz+4Wtd6#{;kW&L8Tbi5v8i+=3G$03&J!{jGp0uBBm?yzpl*_2rGdrnI7Eir50x^8RCBFxWU|;}i^z60{KGEfyfkFJ&f zjvMh#sw#JZ_qA8094MpPau1azPy)BhJQO{xdjWvjWqH|zz}^J4y`K#g) z$j7W1Aa?MY(0_X=yLKwrM*p*4j4W>YbKr={?4e#+;cM@gsdK zUCj@8T&zB?BgG05TK|qMzlrzeG)=k6Qh%C1>lbw=V6i*HeVOK*ez+bngH(U(Q7U)! zFN}$k(qVt5}q8I^I!z z__$7;n%3Uq;n=A%Nz&kknCo*ptoI1EtvuXr7z*+eB6Pw*XA#8(2b+MrV=*e64MM8_ zxh=ye+})@tp%tt;rz+gAN2iE5I&Iq0JbXW?j`DU46kXuiUlUjeeStgYW~QbA-u~X> znhCkZjWFJjEQ+}YYgO^^wP%Al5{@#bt)!VxX073UbOiWD^?>%-u7`MhPm4 zAr{ap514~!O(+d5dwtE4RS!kT%5B?2uETTh21x6p{SPj0^Rr#B6~a1KHO7EkTjIV) ziqhb*GVj3ZcDGk!p)7!SE?8Rbj&8A~cUsXCUIq{E(R3=vOK8wjgVl}9*)LI2#YLG7 znw1Qfu0+gTnC2&BZ|dFKlOJyt6V=z)2X z#_%AEwNbEIKX*CSYwlPySA5u7mlfObHoQSW`X!?N4;ZMnW?NRqo7wHVZnfIsJnLRn zVRT8q<+q@$y}7}OD`uK1FtmLS=iyTIE$Z?h;P1jMnt&-4o38)J*6MbAppodb633p? zZO{g{Ye#)jf{YLAm`X22XA*yE2+RdbZ(up)l^k61PA=$yXv+A^*}x|wlW+`NIOBgR z{uKe62#R0?E!PZJxs!XiVE(%9crs|&21!Zz5%+ixhX*~qW%@HipwAO%;`wrgoIveR zVB@GqBzr)tVboh6^tpCf&-*P%H4lR)Lz~CMerAUR8NT2`&wo;Y z!oD|zd#~TpK@d3P)_}>wNEICK78~2bqZZSVxKOZ}w2=19!>S55>|i`bf68k9ef~KK zoXo(=+%Qe<{^ak&7*D4%ND6onSKio25{famW`BSbF@99d`Jb#&#DD6DU~MO)#ncxy z(KI@H_WaKiVa9!1FeeQLd|7W)hl&p+hoD`P+`Go$(TOR{+ZvBhMY(|Z(gf*8#*@&) z5TxzFMzI(r2qn+V5WhF!5%K^zHiuSWVfJk%lXACwt3H!Ctg<_$T|jv(s$0rRwd*hk zPBC~=*T6w-u7Xz)m2+|xP@vB|qmU4-x^0B09D^H9`Ne40_j#A;4Arfuji^!rD4;(*#}989p#^6Rb}63P6WX~m&h6@{ zd;^U|MwDi(YlY{?Ci5Yv)6ne&$edv)oZQtxGSj!?Ao_oEoY3u3al-^33^GdLS%den za9|tVzR>5P|F#(MSPAzZ1j!OFq(sZlufAU@nBL?AI6C##AS(ChGpzN@pb>_(TA^HH zc_;4l*hZ)9n+F688mVSs#9G7>Ll<4z_$x^(u*o1=Z2tx2Tk|g>MKjQNq-y?zMBVP`J%DPoQbn5&=~21~At@bds2eFBPh z4+$9R^s`G-9)~R&6d15bDO>-$IMO~rp|&VDFr0GDKdL*DSd$MI$cS#D;opKH11|Xo z$et%|_D*Oi7@tanlRzMesKDldq;%06Obc?EpFa>><{ahMsO_~bjFMb_&d5e&MTGKA zLGfd5B)zF{24|~zg6LrwY`&P{v#t9Qy=Vte?6(6dwZ#J>PrgkF-ScPb3?Ue!55e>=T zh{M>|=4>*h31{G}J9t9SU4UhUdiDTS7Kx_b)@&olABHPjSPT{m1Gd)Z$Y53R5n;@< z;&|vUP&M!Zh=&(~&kJ0{u4#OIVXUSffolIOu_>$g1sR~i)Q+JN4iw$V=L_L+fCo7+ zGu+0Pr4@q1*vnR1q!95yU``#K!gCH5Pn!qR=nYS^eM)3=~KQ{>+< zesoW}4wL-3(8Gh_JIYdHe_Y4s`yM%V80MN$u{hoH*>I9ucs2-Uyptz-@8mD7`ppxS zRLp?gcFF8@e7@DTHbe@`Ks|lsz|uVep?JloEdoS74Mxf5*4mNTm^UfA7Bd1?r*>mj z28pVDDC2C|vhIGvQ{Yti`*|_LYc1!^=-nGIhgf!cT$Ck{0cI73Y&u;>KtWkQXf=!< z6Yju((!^qLZD|Vvg#yTtSONvW+nF`VkHpDFB=OD@b#ukweD(s_( z6VcRRsyF;|PCU(i)rTFhohnwId{g~ALoXYcl6enqgZO@dbHcF{T-LY&_M(zv z1URLO!xXf?)s1>VTCO+2&F1I#Zv53*>gFM%B{0I*bOK)AB$x1H>4L%WL_-M5vJ{EY zcuXQ}`c~5AG*Roqh`m(HWTf35OiZ}Xs(sa#=G)n(3^-G_Tl{=5 zT8RU}K?0qbb!f4aumyPB9V}k56b@t`6H9@cXgMU)S%f&{o??p>Xv6S=ywccCM3!js zkvnBf_stmIM?Dy(gGNk@D}K>a;$o`;;3T`l9sz!bTAUAaLJj7mrgl4Uu38rJKz@?t z7A%-nFaO#8B9^JCfRDW^(<8WL$4hVLqbs}N?-ndXg%adS<(!?;R{~0O@GS&y#UY%s zZd##JImZkUh1)o0resElk05!gw%6jeAh!Txjw~_SW9Q$O5njr(jr}r;~de98AP>O$)j6M>BM?^TRyaM`Ja~7qzJ?{06 z7z9oglL+QDpRh$R)67wBi1qz7gL(Vp_I$O$T5pnWjc5N^C(U8Fre-?jrRZ;LSGbYB zDv=AU38+vIAhsA#HQt_k+3?DUNjry9f|n&l8ddH0{MNzzFm2k5*AB1YWw)Iz==PLZ zO{N2UHf@%;7DW191Mcf_@6~jr zhYU0jJ{Z!L!&;q!IGMR+0{%nfed`OD0nu@8e6_ptLl1$bYcq85PUryi(m`?I^FInm z<9OxGRPRkq85=BEbY9@E#Pw{dF8rY|iUW(#0_*;GFv1l}&4Yfq(PzrjIl-$>0!Wr! z16hCQ#tmLq6cn(CUKrc0BG!MLuaSs#eQ_62vk_J40t4KLMVgR6^7Tz16|drJWe_do zF%Wd(>~#@{h~N#{u0`9Z!zg7%11onBm@f+{s$V+;^>YJh#3ppfYVv0d*La|8!MyGC z_v9%R&*i3m=R&#gS*6hdTsou01J{;@beeiDr^H< zlK3&7m%dWa>>MeCYL@T4abQk9>9*Jp#XZJ@t$OG7l6_S|1(Avd-WMlv4w_G^H8`wS z^(#yVUAdu==7uxX8I(gt(^l>r1X&X~*Ll*V0c<6kHcewlad%Z^)yr^5lC!z}Ob*&%aZ2%$WD+vUc8lIJWn5QFj(WeO zS%-98rdZNrlC`=`%R~6@N!Jn3L6hita| z-86kG+oUkRP_=-myY`OjDI(A$5LI~jQIPe3?xLu1AaWPupZec54T?|_&QJ8XyH^!b zwmdU^@LL()UNz5JmJ^F@PLK1S=-!@c>x-9oT zaa>ZuE0vuky?oVQE~fRVaU3CKz1D#0a`sgRccFipbU+EI#i$Ivq|44p z9^qbWWF@GU`nx|7hxZEY|AB_^a+>z1P4nnzbU3pn7_X58lD`hUGJE4Ow!6vGEH~sk zRkL24P~?J9k&owe>EyBTiy)2wqZI=nNqBraJ&1S}>k`d4gT9>m5t9wjRU+zV%Mn*v5h;PDHz_y};s;DK%ss)`F~ih~pbVQl!YPVx!w!(HlN z|M&0X2JNLH!~6e_P67)l6^TJ@1(a^Xbb&~!-4Z<=y&%=Q4m<*I164QSK~xRW(I1PsNo*xEe21_hrKvr=@@A zZd?S~xe`H#||IyPTAIm`fhCYCq#5lW>#3qrHB#;UVn(%#j-~=^Q`IbdeO?g-33WV$!^%EvUpyqX%NbjZ7~V3e!oM)8zx3d z@qk=2saBCf&<`MYj+;LpaK8;8o-6f|)8ze}@%~34PZ8P0trz$`qJB(^UjsFYJTOVY z0oz`hzBs9BC5pB4&#o+dT5Iq)zbDY0%jgd}s>yh*ei{GNqPp7|?qeBB5+NG92GR7~ z??P7#L{MUe=dUspY*7F&FMwwc?(hd5y=ZpRqmrchtH5t;0zb@#sQ-$(Q+|u(!aCCm z+EX-U(HYC8vj9v%j-cPnZZlP=MDylQmo$NGgG+0)z1RgQd7;Ki$K1l(ID~hS$!t2l z({sd|o~#9jf?k4qwo&Dz4<;y4*yfyPJ~>7&hRGeIkLkGu?^+j- z@7HQ2UrSeX-GxBu#dtzpM)RASn5=ZjfUQA=p0_&N4Am0YaLpbJAuM-EL*xf>X7~=X zVA3N2V6IcHH}Anmw30=4O3rHsh#)4E&D-7bT;o5$o24&1qoCSO)AF3a>)yED#*dvk zc;d;%jm730HIZd{yRzO^osmt-d7GL@`^w~e^bWCUifL|0>!>z-(qLL zi)pznpNSwxkDT)||j^nLR6}gzmV)vmM>&O^@g?y>r^BEbOlv+;Bl*_-)TBc zx`a0fLck(6EBFlOvxMtI(uA=0WB>ni#i8s{d$_O@1G9geoI^_EtnV}#%t`u0>k^lD z-hf+j^T5^A#YSz$(|i$V^R|~W`!{=Q(JSAoDD(v90gnD)N6mrZq;h7?)HqN78~fPT zueA`WyOSkzYR@ZpUUAKqAgQB3#U$abI9=h}QKjkt2(Z*x{<1GH8sNgVrgO^mf3kR2 zg{j7TWAv)u|7_ugLh|E=hG*{D+-tO@LRd>GRsvSx*6XZO$B_O7Pd z?gV|I0HS%4XvtZN5~7;_?y&BT68_j1Zpuc`Tq%y;z4-K#FmTx z)HO`c;RZTzI@49Q@k}+!{s|l_<24b_Y{Jak+#kG_tvITyMPZ6P z{@pK_0ksZgC*fb*ctqlyKkVk@a%1hk#2BEc36n@y5DW8n?CfEFZe~NEzNCi78=tji zprqson`Ft48JfpEuq7yRj+5*0|&z{F`~lMbbJ73D!$Uv#19_HLSU@1(su2Lu{}Jc5nEaswuvJf!$<6@Rh` z0K_UDxrqh)7^f+Xz`JvHp!I`V`#V}TuZx2qYOq{F7pDPA8b?^Be=4j;;36mZ3<}+GCs)%e_-X zx0lT}6fIJoVT>14&|n#pRncpue!P_9qJ$=xK^45`4tkgZKfWXhTZ-DCr){q=Q=8~U zL6Ujs)Q6P__bNl;WM=w_IQsz#&a9ARlz9fvZDC;nVc!&xpQ};b z(q;eXsKG=o@yT4%Wd#Z@*Hq+ceQ0|JB+v$RuFKBQbNbq?Bi24ya5lA`Of;|U1(yo(mOaRIblD&DtNNC9&yCV5vU1?<|(&QB`-*W8CH zNrAV>-w9cq6w~U(j`B&VqZQhqn1|Z@w*A0fS`nu*oJ14sJQR|tNRD@YdYXA%R8c`| zTpXN3{`L2?!iIT_-rx%I6ap^UblWr0G-lMM!K8lyN$>ABOtw@*Pz@C`t#+a9Fk}q~ zdC2Q_h^VQT1QRF;-a<@IkAp`4zQy<|6iu?6n|vLLX$uMUM)2b5W)GlTIYD`dr>wWj zJHgxthZ1%2>jJ&=@{>+@bMmkJpSa!x0sz*w6g9h$U6^vfHzVcYuDPz{fPcubGY@U# zAo++GmiO8{x;9S$M?uzmo;{NG`UIvuP@Qe_e3!)%F~@}Sn3qK|aIR34=!9e3vELc= zLv}Usazh-E3yLb#sX4y>dq6YACz1#bDMRfF>x$8ZSA!^?#Gn7JhIq
    IKJ#|!TFoB#FIj)yf#$vsuA7ssK8GI6hJOHMu1s=8c->diEy-PlUsV%S%YFIceI zRjIRoh7aY3#DUr76%VXO?u^~_&3=f#M5)(Tb*5R40y@?RbpPn5D^whP^m(Pn?~&w zC9ng5kL>>KKWnGP+o|kx6`!)Q_x$z+NI!Vz{|~qNiT@%$Qtb>6?pN-mGZJK7E}f50 zfhE)9&x2y%dO-q#adz&N07Px}cl&O>mK!e+V<|kE8>g@O%*~7uQ|wktr^MRPowOms)dw~f}+&%=}*PtBqSh35hkE!yJo_6=~ZU>W4`YU)`t@mR2nqsLJ zEGSBJUsX}vVm?>jb!!yX(~E-3AvI`x1?XeYKyn7A_rT$`_l}BW(krY@Gjjmtd5=GS zY-M^M^H@il0ocOjo5h6%BZOJek6eVA){ zVM+Y76CoRf7%R41*BA-smHJCvq_P|+$e%nH^>k!NpVAXaAOq7V`MouO^Z>$$05Z>= zvpqt)*$RNkR%`1ilDs04Y=aYsvi2>ebsvaRWS9&?lHS88ZQ&R!XiMI(k6p^qFu;U; z(Kx(Q@cr}omcmee<(yEu1q+QTtJD;c)#d}wJ(&Rt8956A=NU8zRZvJb*V|f2Zf)w@Oh(Czh7;}w(3L=|GueaS z8{A0uHx}*}u#z@eSY98rE?Bj!6u>dXoNbThG<|uI7(AoFR(KiG#^y=xfBDK2`b;Uq zlco9JN5l@ap5tIMPcW_hkh&d9HNsgsMhVY>z|a&v(2__0$CagoXry+&MO+7$5f0I~ znJyh(Thev4Cp*yiSlCGC_JkT2wQcI7CZPG$C~WbT&J}cI{G9puqBU+V)Ip^(bMl*h zQlAn@sU9l7WH4n`=HcXx0;1hCf7ZFfDFoFrHn#h#1h_-6_L>V%B1lo{e9ZtV=IR4p zaAf7`fj;_8fO1 z0iVM&iuua}2{w5Tx`%vaCVATk)h=WD1s~dJmV|mC=|XW#{m{yK9myj{XdXQa6P>)z zdN8KL1M*p)BY1BGfRNlC#U9AqwJC5pZ&odAMDhKVbKjq*#mL4RsDFrg7>Ror_N4)@ zCH#-c@lg0*KEqL?p3UN_xUR`hIBt+T+lcFzyeagtUf7ImH8kjaqiwcD$`q|#Av_%0 zlov390W3OB07E=S0*=OXBVLQc1j=1(%>FP5J$bKnOuNlG*kx}5^?@m*cJnND+#2ib zaES}4ZR^y|>=ii%v-=6a*x9VK=!ZZ4E}If`r*x9!Wz3DW5`J;Y{|PQGuPKeOgf~^a z6I#xf)K+_uSwDkx#4c4J^OU^k_2NiK+Vd6m%SRG8jE*|I@t5E>=|DoJ_6+hBZczUM z<~6qeQbmc?#&{XAt-Ne`n($|ukyc1f+h}X*-nE~0J1s#>M~_y68mg;YG@1++ zM>!J(Far<2*TM%!%4pWcd{;6c( zn_T51G5UC)S+v78mE5y@5d=z+Y?gT@nN&&F*+mCcAc9E2(5u=q2v_COD{M~&Qw>rG z0@)_wYiimz&&diilC)sF#Q9+CF@cR-5EJ2cj#G6{iTSs2^CwU#K_p_L_7U}u5jtDf zb;NX0j$r`TviN7%g5gWWhjGw|pT>flOU!)1Ysr-X*D4m7 z)o1IX`-w>^xf#rjSV1QNEG`}Q@jbzwlFym;+z>=X4|`4+02<cAsgcQ86(CtNBL1P?Gc9SW6Fml_qSO1 zSlToRRE4N82Wy7QI{A;04wP(TA1}2BI}ET4j8?;~5m+@w>mE7l z^4Ykhy66EDnZ~GqBD#J~*c3D!)Or`zs%44=gVKVx(tV zA_v_Gw*Eq{C}io%C5uIp853xv7mRA8HW`eJ`a;^eQmmu z>Bpdu3{Ns0I?3bacf2t6kLQy+VI@JV0{Q8GuIFu_q3U*lJ*KwCG8+WWu zdidmUlL^ZeNf;e{#Pt=;Php8bGr@$A3(9VK0U2}Ncs(6SOZAe|t zSe&$Gp^?zbzjOBzM5HV&j!?j&65etG)Hux$f^uVrUG#w>s(O#`h>B6ApR)?YmAwB? zfX=A7bWUnfPD5xAarP3`aEz;5s40T+hh@50r$mt+o7dh??z>CH9&&=Ux%d6$^C`t| z_cdSf_y$dw{8o*e-9gQ=<1d9u=4EE?hew@qPC|9`?+&JL(yFaLQtQ*-bK=f1F#->c zd!{4Zp|8_vQnS?ggPZYY#m6sKmuX-!?_Hn@hiy02OT^?HL-#yp6?&_a^aKC}E>q)E zG-7;ZyUPE~pLg2Gg$MZB-Gx>$pYepuinULNPn^s{rW`;xpaIpfBC(k5R&THK>SVbF9CmlhOz}O=UQ^V(5ozo_8>jBuQJKkqMnHh zfx$fN9Iye(O3QeEUe`5iT*z?$cER%fUPvs$2V9A&l+9b$%~_?f`KUy*QDi3~BH zc`A(-6A|wzf^yluzGc~12VIUX!N={R8VlgL);u4~@rSbX`-QC-My~3(KyyG5;bP+yQcpy;ET``&`VXdh464hD)08;n z#s&}i)=L#2%1vKqKtdRj;frQ`V4&OKr$~N6L+sF_>r`!HHKEM(Juio-c=tuu9~O~1 zSN5G2=Vr_7$_dAz00L@bL*F6mb`GhgUpmPMYNWj!{KzgT-D~p`m^v(|rzD_ZDkfXz zqVFsR3hl%G-vB&ka_=KPxDW@ne2-{eoN!vM6rN3v;D&>oe&3o}O^rkMe=XsgyWIVZ zCn(O2SyZg9;VM-dr(Hd>r&k=@IV102XhgQK3C5k9#9iN0M2r7;Snj|)8a}g#EFb^E zBEeFm>(!{kAYW+SLdu_~DWdIW8QG%r(;&jE(Ki}=_EU3p_z^<*VbOK_oW7y_#vYPx zO*d&h^-fm3AaAKXq`5rC`Dq^XOYmCNGH7NUq?Wp`tY2-L-3&2^490J;rKLIeL_DNu z%lm2sY6Um~(051DTx0*G{%3kZ`g<}?xmyH-5QMA(SG1NC6)z84(^FRR>P~t{hM9FH z?!^U13MPy$mCH+E*Fv2!h%!3lE}shy`voOQ0n?*E(u-WMMgUu8IQ9ZrMC$oF63LZ` zI_ZGlT=y7Y79IBLGH!7sNvpsMXCU3Muo zzR29}R7p)l&!~#%<#x0}kfnuRgn@1qNf3`JNu^OmuGbw^AIg6+Z?IB>Zf0yNXa(ev z#irtb{ITyIy^l8vw%tftUNg6H1QVLXIVYMpoC&8_|Fx7Z`5{-+GORDJ*dBX;K&3sG z_bF-#NUm7Yv-h7^|L|_$tp@Rap&aV{Zawpbl|31@vpt;Jygv#Q-wOy3U#B0CdU5xL z7dbrQM@+^*!8XnD(Y#ptm5>eoTm)86--k_qlAP})8|&v$Rmmg#ESdl*ru!+K|G}3C z)cx^KzWe$g4dnHB|Ed%e=7d$SFN;vPu)KHX9o8wEq(@d;9f?|s*Gn>Y$2)_0#0(qv znBH&%4LKb?)JBLK{eIo%wYmH)U6R)uNK{NxX^!(w)E;68b$}kB^Zg?o1GyHGxAip` zheYWvFJCDTS|OfOK8=d@?*&W@X{Ly7@-CJz*BhRdUr%gqI2K!8Oy$=kmJ(Lb?` z8?pxcFI(+hnDo>LXN@Dc!&D>V%S^L^7tIn`C`9aS2-jqBhb&YeW&_oiM@Dm;1WD!^ zXBQe04gK9ohDUeL&AE_n?yjVBTB+w%x{f*q%?NG74B!b>Xj`fzDxf*n@&P4*=JbV1 z(Hs3-XFD{0F6l5lZ@o3G{TUlg7{vy?Nl+sm%iGQ+NVqE$q#H>dK9z;+l3^yN-SvMGwPCtKO~)^+-YxkN?#r|m?zJ-FpL z{o{$qluQC4Dl+!0)Qs?U&M6<>qW{2shkN_YUJ(one$N2IF<8!FJ6o8pYAzUSLHsO97dt#TeI$_6yz8k{QIZw+DXx0~+Ejx*jH53r|j zOsDFa!Rg9gTzLl8%3XLnr*!-4q;r{{esGIPd8NB|h5J->Y7RukOoUtY-Y_Kk5Y?#t zFvj>f?FE#uPAFJ~ilDv{@riZe8?8(*Th5vVTJ<7xdS4wHV6!2j@b4FHYWo$~3F)QD z7YX*NDGBIGO>rnv|cJ}oezJs|E&TIT$^6%zBs;3MO>IiVxhP}(hf!!x(ABWd+ zAIQ|aB{oA`(c20grf!VMC=(H|u=3#4csS+eK;ij?%;laDfP%VSTtrlA@Nd!OUA~`i zz+|PO64$4(Bt#2`-{`(!qq8Cjy0=zKhCI&=M0mu3L^=&Wii0L!_Ct7>NhV2Pj@lIw z1d%i6{tl)|ha|P3HvaR*{M?5DAo7#lYT^cy_AK}6J>z0QI2#>gh)uEeZc2cGJIb!h z&8dmm4ga4!;-?jP`qMS+Z)ki<&qN+fZ0O#40Diii`cbwu=Oq>`_xn|kM}`NL6bHs2 z_Sr1$*)#F10Nz%`?N$b_?Gfb|R3?X`r8`HWw5@kGNP1Y5M;NkJ>VAmX?w^&S#%-y9o2n;9d3eal(UauBpWr;pRGPVyD8fqU&z<0tKov%vznF5Y=PpK({R3XIU7B$xlka$?otG_ z_I3cX_^@(rJnDO&<-aump7CDz%1aeckLD1LqJKRR*=>&UC@#ydrkF>KVl8h9$Ux&L zCYVdqwZ|(EoWX9YXp2}Lqb(phL!wZM zyj%f^VQNkbk+g_?#voMIe`1Qaj*z}3v0@FlavdalkBoN}wZ}L!x=nRPyz9xh6Zq!A zs;zzjracRpr|9>eq}uuSUz7iVDY!_6RhX`UiiZa`P|^$79qu?&herCk4Ab#Uh4lu< zmNB|Hz^_8M6~RaSE8C1<8`Um}rXv;VR8D3p=suE#R%#*zMcEeL-_Z-9V(wp5cXvHU zz$xd>J=C|4ZoLlN6mBV3#FaaLYsKj@gs9e9J3Qutf%$Z+^(K}@zq3DHtY}Ls%@Gjk zlyp$8qNphU6B!gPE7_LKWE4xJIatG$>iYsdV#1OrqV}JD(pr^~&N|kvJVoO%@>-Du zz$DU|+b%p{k8S$qp`%s5Pz4WTe-pIxP5&tj-jq*|)kQD;j0f*@1HtiO^`VIc#J7zr zWGRW7OpuW=X3$RAJcqDu(-2e8c9@UypMBYYMq6C;j` z9YQ?Sw}&NjQ?Ny&>}!3xj%+428yCQ5dPOnTm9mUMYDq^5^>xDuLOqmAK-7jA48^Cr zuG@GixyP5j5pIvgj>zb(#=~iM+PtuKD9|eoR_8&`MeHhWc#gf@p0O16Tc}6)(-jGo zJ{Gv1t^nCkZ%zsQCafj$y8E`|cI|Y_H(a)FT{h5@hu7G;hUt_^&7;Mjt(m3`M{_@Q z&5}(L=Mku8qEmPt6hy$xr&nnGj_M5Xm#L$5S}k=|?3Y}~=XJN5lHWz?06FFCe{khn z5z)?nEJG)Gi+Tr+mbFW#hfpoh9~*zZ`Fb8N1@BketX*u zpF=Aoz+U~IKvRh5%0EUg*;*8!WxvtZw#2Qf{s_XXPcHFrruxhjYVF;3C><{za}!bD zF~}ptJBy)}0`AoW7-7^-@4E#DCF{VETAX3x)3EM(I1jjI8zcE;cuks&lz!qWPMCPM zIdbTi1grN@BQ23Fs>|xEa5y6a)2d;?7#XGyG*kJ)s9mUinZ=C{V?|t~HKr+AAlnFv zXl8xio6P?c8JTEPjj#>4By$@Q6^ZR5c&8BHZuQ_q8B#+klBL5-}r zGD_mqnRuD%mvqk)(Vk^CuO99lv*wf=Mj{O$EZ)*5T2|ZFe~SE$;n(Jlb$L_>=7CD= zuX9ZfmRwry8z&znJYmKmr}5J=JrN32uKt1Clg6D9gP1VUKmebPrn_!mjt4P^9&&(4m21XLgI1xS?AqF z+`!5u%VFMgS5oO%T3-#VE)iw{Vt9%NIjm2xz9xVCnhuaWR0&itc^ZlSh)*M&TLPt7 zuW#W|Ush~Yl^-)?Gv=9&g7TxiW6D_q(9A71iQuuxcS2`Nzo9nn3RzBLthwx2_&`Ec z>azo_ftoste)!R5nM3_i>S%7{tiVBA8Kc-K-g5*Zj>RA!t6_0ug8U<`lV9D;K)nDM>)f}-V^8s zmi=7aBw48HOWCC0qA*Rzi>pYmz%Vg7Wtz!5?#*!vZW$l!oYwx2FCrkQm`}m7A<>FS zM(jkiQ^+UTeW~-pV))0xUND3GPi&bL1?C%UAvLbq;)5Cd@R{7DD)Amv8;;!Pr`rKpbrD1wCX;W65&la58Dr)v^ zj1mIV1V&bH=qkpX&91tE+Eui6O zNF3Lt#nWs(zvR-2&nn{Ao|&Hs5;^G1-eV%ptJjUQKE>6x+X_5EhUkx^a3g zk!#obP2d(q%^1Lfc0sGpLUKg2tNVv?)jl6Jb1m`Q&USaoIEKig;1`qz<`IhBxkhg- zOC-T5<%ONHp#Q9e^F%lq)adQgRrfKk|C1BF!h)ntS(KLY6V7tSf>9W~^B2}{M<+E_ zLlt?s+r3n0h?j|EDh+faCERwK{KqrGdz&7L(#boGzN)-n#=vJLELErz^1WRTY)7e_ zbG(A%Rs@^&oExUW=;g$rg?*5Kem}aZ|KNzp6v$Gqs!F^ibwb!E*>X3KbO_t!CJzeF zP8_7rszJx=gOU@JHJ9boRW`HVhwUR<*F2ztn!WqUChGfB5JlPo^QAFmw32cKhEPC>4o#NN{4M)J_e?cBcS!!%>&o^CF%;Degh5R{jIUz}zY zX#Ap~)pnpo4OS?TCz0qW1ciQ8BsSnc_M6gF3NzTv(h3W{;~s zgPy=NpHnFpK^W@yvVc-HuG+X-&|+&EB?B0W7`b;SKI#{Aj?S$m#vXX6*{(E;tZ_zd z;7E$IQOO#sk!{2QHFvWt0hi5NbYORaf- z-Xby%&79s1CJNoHN6k!bUA+Mud?=-c`jT*Bor6pAfz#5>ULXklM4!k$bbtbWw30EL zD$5j7yvOuWYpaR^qx)5bwu=#HiB2O*y(JAjLq$0?Ye&rrOpc%#ffp&a@l9)vwKa5J zKO%pZ^&OD*--awli%E5h{9kvi{$S0}4^!s83))L{{NS2pm>#y$;X!(TC&M3(&b>#hFt8g=bs@caaT)3H#yN$N9k!OZzqbF-2Ps{>t)zLObnkya~G#Vr*@ z<6GQq8umGM+8h>-5~#aL5p8dhu`y;)XiF6>Pj@7WIpEy)^RaxAod3S`h37Fem)i>B zp>V|R2kQpWYw@PSu@UbHX%!p=c@d$L&a{9h!W0t@pJ7Qph2RN)wZTKb_0!VBuCT4^ zCo(#h-yfP1lj{gLDE*`QYcODki14xD5QuI5aXAjdg9&=tR(k{ zZc4B01xJGW&}N(}M4(`U&rcu<%dV)vz2(Fz@Rw?ZCF8Ed!6f4u{9dT53QmGr8R$G_ z*F~R|V(8oVuMf@VH{*|Zo;I(cvzY;?LzR?|AmYluHj=wBW^(j!ri98vF3uNKzsmPi zZmx|5R&xqQh+N`1UL*J)vKj(1&`8Nzznc3voLDo}Rq7zF$Ry+kQ`4l59s&Ck6FVA! zX47E+UmWNC`du7SF_YckKZCcAP91TZw3xGgQP<-Bo&AfYU<_eO*Kd%5*}ukZPN3G& zVk8+3Rj}MriIo$N#iK&4JKQB>&DaHEe7u_zv}2J3TsWE5 z3QUIp)oYZ2Yi0i80!zFKW@o-LF;;;lRM=M4V zt1;#R(GczkXcQX+P3CrJqKH)cmgwi=Q$(m&Q8iE-wL9<(`&&6vvtMRU!&~d!82-v}3|?JW>8q27 z&ni>N{|k)?KOF>-;C{FDFgqJ~`#Wyt?ncl5UNf2Sc|Lrjdg89$6^&r=u#C+LN{p^2 zktaCDz#O&MO3J&X1m}R5=MS9&$#AK>qhKpRKA~WidD|r@7kaLSMHFa~=+El4PSlB| zl=RZs6?Am!BiZq}*Uckd&#ns&ng{62Z|$6b>lJC|2_#zq$b!lj?LwA{NP=Z;}~9NMM3 zxEtCK^Hras0Y!OH5Z^Ohwq$^`9iuErSh(f@KO!2%{nA*k!jOhJta4fks34&-81z+=#t1{aktbd2 zCB$y&%1ayu$Eu{fx#7Sj?1@}=7uBG)f8d|hxf^9@#|u9f)}{F)JRmy;>2FGAC513b z=8~C$?uHf!5ca}p5MrsMHTU1t8+M-+OIO)di)jdR0ix?Elb*{cLV{u0deSUhjbi9O zU?ut?l>ForvMOT=4-_F@^EDfk45Ijk@JxQ8f&#Ul3G9-php*>NeI(cN;-CZ?e&Nmp zll4qbuJS-*-K_yDL?}ZJs4nCG?oKR5rczl#-<<2ABM8)c7HDT;^R=Cl*)(0#2^E(U zV#}U!0HEn7kc_LJM&ZD?S+NT{Y(d8!KLptTbKAr7v1|w6ITSp3!v!#@D!`^RPO5X3 z;$mP*3-0_B8$%+9PW8y+gFy@;AA&)5TD%4cXsqD4cSf4T-ND?aLC1WUhv&uLKkM?_ zPv>`Obfk~T7ik3l`McA|f7)W$X?2ngWI~AZ?~wU7(cEUkwDi3-qWULSh+X44`$f8# z^j$@D6N?O;gI~b?D{ZJD^^3tzX~l)8^mIip@YBuZ;tJ_c6}*qCN(j^G=1B-XA%o4( zK7zK6O&oBVg?^s?XF&ClfZ)E^IOOZpNZ@c{or6#I*eXXtqh%fwHj&dw4;$@i{@fgg za1mOV7$Z=vpWnVV&?p$uo9Xt{OfCZ|odxY3yEC*!D+g$$*&9~Rq&jf^7<4pOqa*a* zpMrdpk-3=u#B1jNVBx^lydSFI!zFKW(G^J{;I9KMMk+-RsxajNxVcUgi#9zbr7D8s z9;$Yo=-3c<_qd>y+&5s>2o#nQQcd78KjA89(%lMYfx(~{xe;rd%%LZKeu}HA;!87Q z0eSk1aZRr4A7Pvo>VURH9iN!T>}@_M;X|FwHeWuZY7ylBpIu>h8huQHDT}(jXsqD4 zY&(y+hiisW?sWP0=SL+!pG#6ZuSeI(1nRb3_)1Ac)t7&CyB0sS>-Tx}D+#C*p+bwv zGd^p`;v(Uvx9|ry3El%*64%f6NwL=l&`6{;c~#R8Hh8lv0hi5N<)Wpu|9($7{^8s6 z(D>Iq1FC(P$AnL1!l3_5&@+92-y>Hq?!6H^PBKjxu{Z1pH*}TL%z1!m-E{@`HXP`W zDtvo(2g$Lf?MQLw9Vx3P&Aq8&53%|(lfniAb^ zA^kIO#t0^#2AtAhX2OD{@o_>dMAbVh*Z$o@39y5nKK#es-$DR38-2&hDQ%&7Y&+%< zN-iSpr!ADQ@K8cr$#oI>3!^h7U`7(Tbc1LcQxyF1IFr0GXms{+=-GJVaS~gZ5g$yc z!UEx0`cie-^~+JH$&O=+{bfykyAzyO!k+*=C1;`=a|u7q=R*S~aPYyaPcke-1T1;q z*M2@(i%B(0Xv^6ToBbdoGLiwMWi*JgnSK4p1Bp^@ecjFHDAc#0Vfp0NbXq3OXu7$y zMF;QXF^shA-U?`geZ3GH1{3tI8|TNFsio+O<$B`7Ox;Rh+N%}#4$S$nEkb=$e65ei+`Sbh zZIHl30c4d7*1cH5r2*k_pMiIY5(G)gj;?HlRA ng5tp1w|+c86h57 +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpMAPeriod =5; // Trend MA period +input int InpPeriodMFI =37; // MFI period +input ENUM_APPLIED_VOLUME InpVolume=VOLUME_TICK; // volume type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot=0.1; // lot +//--- Expert ID +input long InpMagicNumber=123600; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error +//--- indicator handles +int ExtIndicatorHandle=INVALID_HANDLE; +int ExtTrendMAHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iMFI(_Symbol, _Period, InpPeriodMFI, InpVolume); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating MFI indicator"); + return(INIT_FAILED); + } + +//--- trend moving average + ExtTrendMAHandle=iMA(_Symbol, _Period, InpMAPeriod, 0, MODE_SMA, PRICE_CLOSE); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating Moving Average indicator"); + return(INIT_FAILED); + } + +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } + +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeCloseAvg(2)) && // up trend + (MathMin(Open(1), Close(1))> (High(1)-(High(1)-Low(1))/3.0)) && // body in upper 1/3 + (Close(1)>Close(2)) && (Open(1)>Open(2))) // body gap + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nHanging Man detected"; + ExtDirection="Sell"; + return(true); + } + + +//--- check Hammer + if((MidPoint(1)(High(1)-(High(1)-Low(1))/3.0)) && // body in upper 1/3 + (Close(1)60)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: MFI>60"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((MFI(1)<70) && (MFI(2)>70)) || ((MFI(1)<30) && (MFI(2)>30))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| MFI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double MFI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the MFI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ +//| SMA value at the specified bar | +//+------------------------------------------------------------------+ +double CloseAvg(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtTrendMAHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the Simple Moving Average indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer RSI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer RSI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..7c5232750e4b4c09b9620ad97cd8038108a7a967 GIT binary patch literal 49388 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 D8^_FY literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer RSI.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer RSI.mq5 new file mode 100644 index 0000000..3ee08ba --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer RSI.mq5 @@ -0,0 +1,677 @@ +//+------------------------------------------------------------------+ +//| HangingMan Hammer RSI.mq5 | +//| Copyright 2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2024, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" + +#include +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpMAPeriod =5; // Trend MA period +input int InpPeriodRSI =37; // RSI period +input ENUM_APPLIED_PRICE InpPrice=PRICE_CLOSE; // price type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot=0.1; // lot +//--- Expert ID +input long InpMagicNumber=123300; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error +//--- indicator handles +int ExtIndicatorHandle=INVALID_HANDLE; +int ExtTrendMAHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iRSI(_Symbol, _Period, InpPeriodRSI, InpPrice); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating CCI indicator"); + return(INIT_FAILED); + } + +//--- trend moving average + ExtTrendMAHandle=iMA(_Symbol, _Period, InpMAPeriod, 0, MODE_SMA, PRICE_CLOSE); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating Moving Average indicator"); + return(INIT_FAILED); + } + +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeCloseAvg(2)) && // up trend + (MathMin(Open(1), Close(1))> (High(1)-(High(1)-Low(1))/3.0)) && // body in upper 1/3 + (Close(1)>Close(2)) && (Open(1)>Open(2))) // body gap + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nHanging Man detected"; + ExtDirection="Sell"; + return(true); + } + +//--- check Hammer + if((MidPoint(1)(High(1)-(High(1)-Low(1))/3.0)) && // body in upper 1/3 + (Close(1)60)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: RSI>60"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| RSI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double RSI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the RSI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ +//| SMA value at the specified bar | +//+------------------------------------------------------------------+ +double CloseAvg(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtTrendMAHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the Simple Moving Average indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer Stoch.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer Stoch.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..c36253128c80d78ab109cd2a1f3da74bf68d9592 GIT binary patch literal 50556 zcmdSAQ;auE@Gkfpd)~2a+qP}nwr$(CZQJvXZQJkI`~A=6+?-^S&E9QQD)m&QI^9qA zRZCQZ71$AQi2wiv{3k$w z?SujL00)34zzJXpFb7xwTmS?BCIG{K#sZ-E56c2f|H~Ny6alXPRl58aIsccH`45=@ z=>E@+|9=?&4`Y}AX22Q11)%>=-T#-;0c-(|02=`7e;kef<8Ax@LuUW)hRpaMLx%tK z|EtVMHX8X0!&#<#k5F3K-9p%E6p+#hS<@cnJO=?)OMeq@Z3ZE(LnM7h@OKioK=A67 z-(m5jyc5(?cBtm^3hiD#3wP2YxtnFlr>R{png@3BpH*dvYO=6$%jRWF+-A$%j$C7B zae4G@&t9_p`_v_2y`4qJ*9Jww=iZ#Asc9L}Vtj{mLi+oRu-l0AmK?x^WwJQezBTM)j z-Pln{+juT(q9Pbr3F8e&dHbb;7_%ir(dX_FA4j<~_6gJhO>U#8W*m{Lhi^dh2Q?pI z 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 +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpMAPeriod =5; // Trend MA period +input int InpStochK =47; // period %K +input int InpStochD =9; // period %D +input int InpStochSlow =13; // smoothing period %K +input ENUM_STO_PRICE InpStochApplied=STO_LOWHIGH; // calculation type +input ENUM_MA_METHOD InpStochMA =MODE_SMA; // smoothing type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot=0.1; // lot +//--- Expert ID +input long InpMagicNumber=124400; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error +//--- indicator handles +int ExtIndicatorHandle=INVALID_HANDLE; +int ExtTrendMAHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iStochastic(_Symbol, _Period, InpStochK, InpStochD, InpStochSlow, InpStochMA, InpStochApplied); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating iStochastic indicator"); + return(INIT_FAILED); + } + +//--- trend moving average + ExtTrendMAHandle=iMA(_Symbol, _Period, InpMAPeriod,0, MODE_SMA,PRICE_CLOSE); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating Moving Average indicator"); + return(INIT_FAILED); + } + +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } +//--- + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeCloseAvg(2)) && // up trend + (MathMin(Open(1), Close(1))> (High(1)-(High(1)-Low(1))/3.0)) && // body in upper 1/3 + (Close(1)>Close(2)) && (Open(1)>Open(2))) // body gap + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nHanging Man detected"; + ExtDirection="Sell"; + return(true); + } + + +//--- check Hammer + if((MidPoint(1)(High(1)-(High(1)-Low(1))/3.0)) && // body in upper 1/3 + (Close(1)70)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: StochSignal>70"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((StochSignal(1)<80) && (StochSignal(2)>80))|| // 80 crossed downwards + ((StochSignal(1)<20) && (StochSignal(2)>20))) // 20 crossed downwards + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if((((StochSignal(1)>20) && (StochSignal(2)<20)) || // 20 crossed upwards + ((StochSignal(1)>80) && (StochSignal(2)<80)))) // 80 crossed upwards + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Stochastic indicator value at the specified bar | +//+------------------------------------------------------------------+ +double StochSignal(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, SIGNAL_LINE, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the iStochastic indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ +//| SMA value at the specified bar | +//+------------------------------------------------------------------+ +double CloseAvg(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtTrendMAHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the Simple Moving Average indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji CCI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji CCI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..3a74ea76392f18a7b0c1350136de8f6d6e3ac9c2 GIT binary patch literal 49326 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 kfD#L`^2~;A=QxcY^GGJj;D!~W%A@?NDY +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpPeriodCCI =37; // CCI period +input ENUM_APPLIED_PRICE InpPrice=PRICE_CLOSE; // price type + +//--- trade parameters +input uint InpDuration =10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage =10; // slippage in points +//--- money management parameters +input double InpLot=0.1; // lot +//--- Expert ID +input long InpMagicNumber=130100; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error +//--- indicator handle +int ExtIndicatorHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iCCI(_Symbol, _Period, InpPeriodCCI, InpPrice); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating CCI indicator"); + return(INIT_FAILED); + } +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // bullish candlestick, its body is larger than average + (MathAbs(Close(2)-Open(2))Close(3)) && // second candlestick close is higher than first candlestick close + (Open(2)>Open(3)) && // second candlestick open is higher than first candlestick open + (Open(1)AvgBody(1)) && // bullish candlestick, its body is larger than average + (MathAbs(Close(2)-Open(2))Close(3)) && // second candlestick close is higher than first candlestick close + (Open(2)>Open(3)) && // second candlestick open is higher than first candlestick open + (Close(1)AvgBody(1)) && // bearish candlestick, its body is larger than average + (MathAbs(Close(2)-Open(2))Close(2)) && // upward price gap on the last candlestick + (Close(1)>Close(2))) // last candlestick close higher than second candlestick close + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_BUY; + ExtPatternInfo="\r\nMorning Doji detected"; + ExtDirection="Buy"; + return(true); + } + +//--- check Morning Star + if((Open(3)-Close(3)>AvgBody(1)) && // bearish candlestick, its body is larger than average + (MathAbs(Close(2)-Open(2))MidOpenClose(3))) // last candlestick close is lower than the middle of the first (bearish) one + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_BUY; + ExtPatternInfo="\r\nMorning Star detected"; + ExtDirection="Buy"; + return(true); + } + +//--- result of checking + return(ExtCheckPassed); + } +//+------------------------------------------------------------------+ +//| Returns true in case of successful confirmation check | +//+------------------------------------------------------------------+ +bool CheckConfirmation() + { + ExtConfirmed=false; +//--- if there is no pattern, do not search for confirmation + if(!ExtPatternDetected) + return(true); + +//--- get the value of the stochastic indicator to confirm the signal + double signal=CCI(1); + if(signal==EMPTY_VALUE) + { + //--- failed to get indicator value, check failed + return(false); + } + +//--- check the Buy signal + if(ExtSignalOpen==SIGNAL_BUY && (signal<-50)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: CCI<-50"; + } + +//--- check the Sell signal + if(ExtSignalOpen==SIGNAL_SELL && (signal>50)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: CCI>50"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)>80) && (CCI(2)<80))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| CCI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double CCI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the CCI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji MFI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji MFI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..d2e53c71b14b8b5497416a627f40154afd1413b6 GIT binary patch literal 48968 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 $H!j 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 literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji MFI.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji MFI.mq5 new file mode 100644 index 0000000..0771bc5 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji MFI.mq5 @@ -0,0 +1,686 @@ +//+------------------------------------------------------------------+ +//| MorningEvening StarDoji MFI.mq5 | +//| Copyright 2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2024, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" + +#include +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpPeriodMFI =37; // MFI period +input ENUM_APPLIED_VOLUME InpVolume=VOLUME_TICK; // volume type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot=0.1; // lot +//--- Expert ID +input long InpMagicNumber=130200; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error +//--- indicator handle +int ExtIndicatorHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iMFI(_Symbol, _Period, InpPeriodMFI, InpVolume); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating MFI indicator"); + return(INIT_FAILED); + } +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // bullish candlestick, its body is larger than average + (MathAbs(Close(2)-Open(2))Close(3)) && // second candlestick close is higher than first candlestick close + (Open(2)>Open(3)) && // second candlestick open is higher than first candlestick open + (Open(1)AvgBody(1)) && // bullish candlestick, its body is larger than average + (MathAbs(Close(2)-Open(2))Close(3)) && // second candlestick close is higher than first candlestick close + (Open(2)>Open(3)) && // second candlestick open is higher than first candlestick open + (Close(1)AvgBody(1)) && // bearish candlestick, its body is larger than average + (MathAbs(Close(2)-Open(2))Close(2)) && // upward price gap on the last candlestick + (Close(1)>Close(2))) // last candlestick close higher than second candlestick close + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_BUY; + ExtPatternInfo="\r\nMorning Doji detected"; + ExtDirection="Buy"; + return(true); + } + +//--- check Morning Star + if((Open(3)-Close(3)>AvgBody(1)) && // bearish candlestick, its body is larger than average + (MathAbs(Close(2)-Open(2))MidOpenClose(3))) // last candlestick close is lower than the middle of the first (bearish) one + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_BUY; + ExtPatternInfo="\r\nMorning Star detected"; + ExtDirection="Buy"; + return(true); + } + +//--- result of checking + return(ExtCheckPassed); + } +//+------------------------------------------------------------------+ +//| Returns true in case of successful confirmation check | +//+------------------------------------------------------------------+ +bool CheckConfirmation() + { + ExtConfirmed=false; +//--- if there is no pattern, do not search for confirmation + if(!ExtPatternDetected) + return(true); + +//--- get the value of the stochastic indicator to confirm the signal + double signal=MFI(1); + if(signal==EMPTY_VALUE) + { + //--- failed to get indicator value, check failed + return(false); + } + +//--- check the Buy signal + if(ExtSignalOpen==SIGNAL_BUY && (signal<40)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: MFI<40"; + } + +//--- check the Sell signal + if(ExtSignalOpen==SIGNAL_SELL && (signal>60)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: MFI>60"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((MFI(1)<70) && (MFI(2)>70)) || ((MFI(1)<30) && (MFI(2)>30))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| MFI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double MFI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the MFI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji RSI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji RSI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..0e115f6f009c26850ce25f819a69aea83474ba0d GIT binary patch literal 49952 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 literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji RSI.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji RSI.mq5 new file mode 100644 index 0000000..293d897 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji RSI.mq5 @@ -0,0 +1,686 @@ +//+------------------------------------------------------------------+ +//| MorningEvening StarDoji RSI.mq5 | +//| Copyright 2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2024, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" + +#include +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpPeriodRSI =37; // RSI period +input ENUM_APPLIED_PRICE InpPrice=PRICE_CLOSE; // price type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot=0.1; // lot +//--- Expert ID +input long InpMagicNumber=130300; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error +//--- indicator handle +int ExtIndicatorHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iRSI(_Symbol, _Period, InpPeriodRSI, InpPrice); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating CCI indicator"); + return(INIT_FAILED); + } +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // bullish candlestick, its body is larger than average + (MathAbs(Close(2)-Open(2))Close(3)) && // second candlestick close is higher than first candlestick close + (Open(2)>Open(3)) && // second candlestick open is higher than first candlestick open + (Open(1)AvgBody(1)) && // bullish candlestick, its body is larger than average + (MathAbs(Close(2)-Open(2))Close(3)) && // second candlestick close is higher than first candlestick close + (Open(2)>Open(3)) && // second candlestick open is higher than first candlestick open + (Close(1)AvgBody(1)) && // bearish candlestick, its body is larger than average + (MathAbs(Close(2)-Open(2))Close(2)) && // upward price gap on the last candlestick + (Close(1)>Close(2))) // last candlestick close higher than second candlestick close + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_BUY; + ExtPatternInfo="\r\nMorning Doji detected"; + ExtDirection="Buy"; + return(true); + } + +//--- check Morning Star + if((Open(3)-Close(3)>AvgBody(1)) && // bearish candlestick, its body is larger than average + (MathAbs(Close(2)-Open(2))MidOpenClose(3))) // last candlestick close is lower than the middle of the first (bearish) one + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_BUY; + ExtPatternInfo="\r\nMorning Star detected"; + ExtDirection="Buy"; + return(true); + } + +//--- result of checking + return(ExtCheckPassed); + } +//+------------------------------------------------------------------+ +//| Returns true in case of successful confirmation check | +//+------------------------------------------------------------------+ +bool CheckConfirmation() + { + ExtConfirmed=false; +//--- if there is no pattern, do not search for confirmation + if(!ExtPatternDetected) + return(true); + +//--- get the value of the stochastic indicator to confirm the signal + double signal=RSI(1); + if(signal==EMPTY_VALUE) + { + //--- failed to get indicator value, check failed + return(false); + } + +//--- check the Buy signal + if(ExtSignalOpen==SIGNAL_BUY && (signal<40)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: RSI<40"; + } + +//--- check the Sell signal + if(ExtSignalOpen==SIGNAL_SELL && (signal>60)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: RSI>60"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| RSI indicator value at the specified bar | +//+------------------------------------------------------------------+ +double RSI(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the RSI indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji Stoch.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji Stoch.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..9e23ca0f84078c488275e7c4e43ef2324ec91819 GIT binary patch literal 49764 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 literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji Stoch.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji Stoch.mq5 new file mode 100644 index 0000000..8a58965 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/MorningEvening StarDoji Stoch.mq5 @@ -0,0 +1,691 @@ +//+------------------------------------------------------------------+ +//| MorningEvening StarDoji Stoch.mq5 | +//| Copyright 2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2024, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" + +#include +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpStochK =47; // period %K +input int InpStochD =9; // period %D +input int InpStochSlow =13; // smoothing period %K +input ENUM_STO_PRICE InpStochApplied =STO_LOWHIGH; // calculation type +input ENUM_MA_METHOD InpStochMA =MODE_SMA; // smoothing type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot=0.1; // lot +//--- Expert ID +input long InpMagicNumber=130400; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error +//--- indicator handle +int ExtIndicatorHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iStochastic(_Symbol, _Period, InpStochK, InpStochD, InpStochSlow, InpStochMA, InpStochApplied); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating iStochastic indicator"); + return(INIT_FAILED); + } +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } + +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // bullish candlestick, its body is larger than average + (MathAbs(Close(2)-Open(2))Close(3)) && // second candlestick close is higher than first candlestick close + (Open(2)>Open(3)) && // second candlestick open is higher than first candlestick open + (Open(1)AvgBody(1)) && // bullish candlestick, its body is larger than average + (MathAbs(Close(2)-Open(2))Close(3)) && // second candlestick close is higher than first candlestick close + (Open(2)>Open(3)) && // second candlestick open is higher than first candlestick open + (Close(1)AvgBody(1)) && // bearish candlestick, its body is larger than average + (MathAbs(Close(2)-Open(2))Close(2)) && // upward price gap on the last candlestick + (Close(1)>Close(2))) // last candlestick close higher than second candlestick close + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_BUY; + ExtPatternInfo="\r\nMorning Doji detected"; + ExtDirection="Buy"; + return(true); + } + +//--- check Morning Star + if((Open(3)-Close(3)>AvgBody(1)) && // bearish candlestick, its body is larger than average + (MathAbs(Close(2)-Open(2))MidOpenClose(3))) // last candlestick close is lower than the middle of the first (bearish) one + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_BUY; + ExtPatternInfo="\r\nMorning Star detected"; + ExtDirection="Buy"; + return(true); + } + +//--- result of checking + return(ExtCheckPassed); + } +//+------------------------------------------------------------------+ +//| Returns true in case of successful confirmation check | +//+------------------------------------------------------------------+ +bool CheckConfirmation() + { + ExtConfirmed=false; +//--- if there is no pattern, do not search for confirmation + if(!ExtPatternDetected) + return(true); + +//--- get the value of the stochastic indicator to confirm the signal + double signal=StochSignal(1); + if(signal==EMPTY_VALUE) + { + //--- failed to get indicator value, check failed + return(false); + } + +//--- check the Buy signal + if(ExtSignalOpen==SIGNAL_BUY && (signal<30)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: StochSignal<30"; + } + +//--- check the Sell signal + if(ExtSignalOpen==SIGNAL_SELL && (signal>70)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: StochSignal>70"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((StochSignal(1)<80) && (StochSignal(2)>80))|| // 80 crossed downwards + ((StochSignal(1)<20) && (StochSignal(2)>20))) // 20 crossed downwards + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if((((StochSignal(1)>20) && (StochSignal(2)<20)) || // 20 crossed upwards + ((StochSignal(1)>80) && (StochSignal(2)<80)))) // 80 crossed upwards + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Stochastic indicator value at the specified bar | +//+------------------------------------------------------------------+ +double StochSignal(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, SIGNAL_LINE, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the iStochastic indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/x-saherelm.xbe.ea.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/x-saherelm.xbe.ea.mq5 new file mode 100644 index 0000000..651546b --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/x-saherelm.xbe.ea.mq5 @@ -0,0 +1,3365 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center XBEEA MQL5 Expert Advisor +// ------------------------------------------------- +// Name: XBEEA +// Description: an Exper Advisor which used RSI and MA +// to Analyse Market ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +//////////////////////////////////////////////////////x +// +// Global Properties ... +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://saherelm.ir" +#property version "1.00" +#property description "SaherElm XBEEA" +#property strict + +// +#define ShortName "XBEEA" + +// +enum ENUM_X_ZIGZAG_BUFFERS +{ + X_ZIGZAG_MAIN_LINE = 0, + X_ZIGZAG_PIVOTS_LINE = 1, +}; + +// +#include "../Libraries/x-saherelm.log.lib.mq5" +#include "../Libraries/x-saherelm.draw.lib.mq5" +#include "../Libraries/x-saherelm.common.lib.mq5" +#include "../Classes/x-saherelm.xtrade.class.mq5" + +// +#include "../Helpers/x-saherelm.xche.helper.mq5" + +// +// Inputs ... + +// +long xBEEAMagicNumber = 78692110; // Magic Number +int xBEEASlippage = 10; // Slippgae + +// +input double xBEEAVolume = 0.01; + +// +// Indicator Inputs ... + +// +// Maarket ... +input group "Cycles"; + +// +// Short ... +input group "Short"; +input ENUM_X_PERIOD_METHOD scMode = X_PERIOD_MANUALLY; // Method +input ENUM_TIMEFRAMES scPeriod = PERIOD_H4; // Period + +// +// Presentation ... +input bool xBEEADrawSCLabel = true; +input bool xBEEADrawSCCBar = true; +input bool xBEEADrawSCPBar = false; +input bool xBEEADrawSCCMid = true; +input bool xBEEADrawSCPMid = true; + +// +// Medium ... +input group "Medium"; +input ENUM_X_PERIOD_METHOD mcMode = X_PERIOD_MANUALLY; // Method +input ENUM_TIMEFRAMES mcPeriod = PERIOD_H12; // Mid Period + +// +// Presentation ... +input bool xBEEADrawMCLabel = true; +input bool xBEEADrawMCCBar = true; +input bool xBEEADrawMCPBar = false; +input bool xBEEADrawMCCMid = true; +input bool xBEEADrawMCPMid = true; + +// +// Long ... +input group "Long"; +input ENUM_X_PERIOD_METHOD lcMode = X_PERIOD_MANUALLY; // Method +input ENUM_TIMEFRAMES lcPeriod = PERIOD_D1; // Long Period + +// +// Presentation ... +input bool xBEEADrawLCLabel = true; +input bool xBEEADrawLCCBar = true; +input bool xBEEADrawLCPBar = false; +input bool xBEEADrawLCCMid = true; +input bool xBEEADrawLCPMid = true; + +// +// Hind ... +input group "Hind"; +input ENUM_X_PERIOD_METHOD hcMode = X_PERIOD_MANUALLY; // Method +input ENUM_TIMEFRAMES hcPeriod = PERIOD_W1; // Hind Period + +// +// Moving Averages ... +input group "Moving Average"; +input int xBEEAMaFastLength = 9; // Fast Length +input int xBEEAMaSlowLength = 18; // Slow Length +input int xBEEAMaShift = 0; // Shift +input ENUM_MA_METHOD xBEEAMaMethod = MODE_EMA; // Method +input ENUM_APPLIED_PRICE xBEEAMaAppliedTo = PRICE_CLOSE; // AppliedTo + +// +// Presentation ... +input bool xBEEADrawHCLabel = true; +input bool xBEEADrawHCCBar = true; +input bool xBEEADrawHCPBar = true; +input bool xBEEADrawHCCMid = true; +input bool xBEEADrawHCPMid = true; + +// +// Vars ... + +// +string xBEEASymbol; +ENUM_TIMEFRAMES xBEEAPeriod; + +// +int maxBuys = 1; +int maxSells = 1; +int buyCount = 0; +int sellCount = 0; + +// +double _tp = 0; +double _sl = 0; +double _entry = 0; +ENUM_POSITION_TYPE _type = NULL; + +// +MqlTick xBEEATick; +XSCTrade *xBEEATrader; + +// +// ZigZag ... +int zigZagHandler = INVALID_HANDLE; +double zigZagBuffer[]; +bool isZigZagInPeak; + +// +// Cycles Definitions ... + +// +XMarketCycle sc; +XDrawSpecifications scCMidSpecs; +XDrawSpecifications scPMidSpecs; +XOHCLDrawSpecification scCBSpecs; +XOHCLDrawSpecification scPBSpecs; +// +XOHCL scCBar; +double scCMidLine; +XOHCL scPBar; +double scPMidLine; +// +double scTrndBuffer[]; +double scFastBuffer[]; +double scSlowBuffer[]; +double scLongExit1[]; +double scLongExit2[]; +double scShortExit1[]; +double scShortExit2[]; +int scCheHandler = INVALID_HANDLE; +int scFastHandler = INVALID_HANDLE; +int scSlowHandler = INVALID_HANDLE; +int scTrndHandler = INVALID_HANDLE; + +// +bool isSCCBullish; +bool isSCPBullish; +bool isSCFastOverSlow; +bool isSCFastUnderSlow; + +// +XMarketCycle mc; +XDrawSpecifications mcCMidSpecs; +XDrawSpecifications mcPMidSpecs; +XOHCLDrawSpecification mcCBSpecs; +XOHCLDrawSpecification mcPBSpecs; +// +XOHCL mcCBar; +double mcCMidLine; +XOHCL mcPBar; +double mcPMidLine; +// +double mcTrndBuffer[]; +double mcFastBuffer[]; +double mcSlowBuffer[]; +double mcLongExit1[]; +double mcLongExit2[]; +double mcShortExit1[]; +double mcShortExit2[]; +int mcFastHandler = INVALID_HANDLE; +int mcSlowHandler = INVALID_HANDLE; +int mcTrndHandler = INVALID_HANDLE; +int mcCheHandler = INVALID_HANDLE; +// +bool isMCCBullish; +bool isMCPBullish; +bool isMCFastOverSlow; +bool isMCFastUnderSlow; + +// +XMarketCycle lc; +XDrawSpecifications lcCMidSpecs; +XDrawSpecifications lcPMidSpecs; +XOHCLDrawSpecification lcCBSpecs; +XOHCLDrawSpecification lcPBSpecs; +// +XOHCL lcCBar; +double lcCMidLine; +XOHCL lcPBar; +double lcPMidLine; +// +double lcTrndBuffer[]; +double lcFastBuffer[]; +double lcSlowBuffer[]; +double lcLongExit1[]; +double lcLongExit2[]; +double lcShortExit1[]; +double lcShortExit2[]; +int lcFastHandler = INVALID_HANDLE; +int lcSlowHandler = INVALID_HANDLE; +int lcTrndHandler = INVALID_HANDLE; +int lcCheHandler = INVALID_HANDLE; +// +bool isLCCBullish; +bool isLCPBullish; +bool isLCFastOverSlow; +bool isLCFastUnderSlow; + +// +XMarketCycle hc; +XDrawSpecifications hcCMidSpecs; +XDrawSpecifications hcPMidSpecs; +XOHCLDrawSpecification hcCBSpecs; +XOHCLDrawSpecification hcPBSpecs; +// +XOHCL hcCBar; +double hcCMidLine; +XOHCL hcPBar; +double hcPMidLine; +// +double hcTrndBuffer[]; +double hcFastBuffer[]; +double hcSlowBuffer[]; +double hcLongExit1[]; +double hcLongExit2[]; +double hcShortExit1[]; +double hcShortExit2[]; +int hcFastHandler = INVALID_HANDLE; +int hcSlowHandler = INVALID_HANDLE; +int hcTrndHandler = INVALID_HANDLE; +int hcCheHandler = INVALID_HANDLE; +// +bool isHCCBullish; +bool isHCPBullish; +bool isHCFastOverSlow; +bool isHCFastUnderSlow; + +// +int mBullishScore; +int mBearishScore; +bool xBEEAIsSummaryTrendBullish; +bool xBEEALastIsSummaryTrendBullish; +string mLastCommentHash; + +// +int mMaxBullishScore = 0; +int mMinBullishScore = 0; +int mMaxBearishScore = 0; +int mMinBearishScore = 0; + +// +double mPivots[]; +bool mPivotsScanStart; +int mPivotsLoopback = 52; +int mMinRequiredPivots = 400; +int mNumberPivotsSequential = 10; + +// +X121CHEInputs xBEEACheInputs; +XSCX121CHEHelper xBEEACheHelper; + +// +// Event Handlers ... + +// +// Initialization ... +int OnInit() +{ + // + if (xBEEASymbol == NULL || StringLen(xBEEASymbol) <= 0) + { + xBEEASymbol = _Symbol; + } + + // + if (xBEEAPeriod == NULL) + { + xBEEAPeriod = _Period; + } + + // + // Validate Inputs ... + if (!XBEEAValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + logTag = ShortName; + drawPrefix = ShortName; + + // + // Initialize XTrader ... + xBEEATrader = new XSCTrade( + xBEEASlippage, + xBEEAMagicNumber); + + // + // Init Indicators ... + if (!InitIndicators()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + // Prepare Style Specs ... + PrepareStyleSpecs(); + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart period is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs 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 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed + + // + // De Initialize XBEEA Providers ... + delete xBEEATrader; + + // + // Short ... + IndicatorRelease(scCheHandler); + IndicatorRelease(scTrndHandler); + IndicatorRelease(scFastHandler); + IndicatorRelease(scSlowHandler); + + // + // Medium ... + IndicatorRelease(mcCheHandler); + IndicatorRelease(mcTrndHandler); + IndicatorRelease(mcFastHandler); + IndicatorRelease(mcSlowHandler); + + // + // Long ... + IndicatorRelease(lcCheHandler); + IndicatorRelease(lcTrndHandler); + IndicatorRelease(lcFastHandler); + IndicatorRelease(lcSlowHandler); + + // + // Hind ... + IndicatorRelease(hcCheHandler); + IndicatorRelease(hcTrndHandler); + IndicatorRelease(hcFastHandler); + IndicatorRelease(hcSlowHandler); + + // + IndicatorRelease(zigZagHandler); +} + +// +// On Tick Handler ... +void OnTick() +{ + // + if (!HasEnoughPivots()) + { + // + if (!mPivotsScanStart) + { + ProcessPivots(); + } + + // + return; + } + + // + if (!IsNewCandle( + xBEEASymbol, + xBEEAPeriod)) + { + return; + } + + // + // Reading Tick ... + if (!SymbolInfoTick(xBEEASymbol, xBEEATick)) + { + return; + } + + // + // Reading Data From XDSR Indicator ... + ReadData(); + + // + // Counting Currently Open Positions ... + buyCount = xBEEATrader.CountPositions(xBEEASymbol, POSITION_TYPE_BUY); + sellCount = xBEEATrader.CountPositions(xBEEASymbol, POSITION_TYPE_SELL); + + // + if (buyCount < maxBuys) + { + // + // Check For Buy Signals ... + } + + // + if (sellCount < maxSells) + { + // + // Check for Sell Signals ... + } + + // + UpdatePivots(); + + // + string comment = XBEEAGenerateState(); + Comment(comment); +} + +// +// Custom Functions ... + +// +// Validate Variables nd Inputs ... +bool XBEEAValidateInputs() +{ + // + bool result = false; + + // + result = + // + xBEEASlippage > 0 && + xBEEAMagicNumber > 0 + // + && + // + // Short ... + IsValidCycle( + scMode, + scPeriod) + // + && + // + // Medium ... + IsValidCycle( + mcMode, + mcPeriod) + // + && + // + // Long ... + IsValidCycle( + lcMode, + lcPeriod) + // + && + // + // Hind ... + IsValidCycle( + hcMode, + hcPeriod) + // + ; + + // + return result; +} + +// +// Initial Indicators ... +bool InitIndicators() +{ + // + bool result = false; + + // + // Init XZG Indicator ... + zigZagHandler = iCustom( + xBEEASymbol, + xBEEAPeriod, + "x-saherelm.x121.xzg", + // + // Inputs ... + // TODO: + // add these inputs to TODO ... + 12, // Depth ... + 5, // Deviation ... + 3, // Back Step ... + 1 // MODE ENUM_X_ZG_PRICE_MODE (X_ZG_PRICE_HIGH_LOW_MODE) ... + // + ); + result = zigZagHandler != INVALID_HANDLE; + if (!result) + { + return result; + } + + // + // Here we have to Init XMarketCycles also ... + result = InitMarketCycles(); + + // + xBEEACheInputs.Default(); + result = xBEEACheInputs.IsValid(); + if (!result) + { + return result; + } + + // + result = xBEEACheHelper.Init( + xBEEASymbol, + xBEEAPeriod, + xBEEACheInputs); + if (!result) + { + return result; + } + + // + return result; +} + +// +// Initial Market Cycles ... +bool InitMarketCycles() +{ + // + bool result = false; + + // + // Short ... + sc.method = scMode; + sc.period = scPeriod; + result = sc.Init( + xBEEASymbol, + xBEEAPeriod, + X_MARKET_CYCLE_SHORT // + ); + if (!result) + { + return result; + } + + // + // Trend ... + ArraySetAsSeries(scTrndBuffer, true); + scTrndHandler = iCustom( + xBEEASymbol, + sc.period, + "x-saherelm.x121.xstr", + // + // Inputs ... + // + // ATR ... + "", + 14, // Length + 3.5, // Multiplier + PRICE_MEDIAN, // Applied To + // + // Presentation ... + "", + true, // Show Trends + false // Fill Trends + // + ); + + // + // Che ... + ArraySetAsSeries(scLongExit1, true); + ArraySetAsSeries(scLongExit2, true); + ArraySetAsSeries(scShortExit1, true); + ArraySetAsSeries(scShortExit2, true); + scCheHandler = iCustom( + xBEEASymbol, + sc.period, + "x-saherelm.x121.xche", + // + // Inputs ... + // + // Market ... + "", + 35, + 26, + 3.0, + 3.5, + // + // Calculations ... + "", + PRICE_HIGH, + PRICE_LOW, + // + // Presentation ... + "", + true, + true, + true, + true + // + ); + + // + // MA's ... + ArraySetAsSeries(scFastBuffer, true); + scFastHandler = iMA( + xBEEASymbol, + sc.period, + xBEEAMaFastLength, + xBEEAMaShift, + xBEEAMaMethod, + xBEEAMaAppliedTo // + ); + ArraySetAsSeries(scSlowBuffer, true); + scSlowHandler = iMA( + xBEEASymbol, + sc.period, + xBEEAMaSlowLength, + xBEEAMaShift, + xBEEAMaMethod, + xBEEAMaAppliedTo // + ); + + // + result = + // + scCheHandler != INVALID_HANDLE && + scTrndHandler != INVALID_HANDLE && + scFastHandler != INVALID_HANDLE && + scSlowHandler != INVALID_HANDLE + // + ; + if (!result) + { + return result; + } + + // + // Medium ... + mc.method = mcMode; + mc.period = mcPeriod; + result = mc.Init( + xBEEASymbol, + xBEEAPeriod, + X_MARKET_CYCLE_MEDIUM // + ); + if (!result) + { + return result; + } + + // + // Trend ... + ArraySetAsSeries(mcTrndBuffer, true); + mcTrndHandler = iCustom( + xBEEASymbol, + mc.period, + "x-saherelm.x121.xstr", + // + // Inputs ... + // + // ATR ... + "", + 14, // Length + 3.5, // Multiplier + PRICE_MEDIAN, // Applied To + // + // Presentation ... + "", + true, // Show Trends + false // Fill Trends + // + ); + + // + // Che ... + ArraySetAsSeries(mcLongExit1, true); + ArraySetAsSeries(mcLongExit2, true); + ArraySetAsSeries(mcShortExit1, true); + ArraySetAsSeries(mcShortExit2, true); + mcCheHandler = iCustom( + xBEEASymbol, + mc.period, + "x-saherelm.x121.xche", + // + // Inputs ... + // + // Market ... + "", + 35, + 26, + 3.0, + 3.5, + // + // Calculations ... + "", + PRICE_HIGH, + PRICE_LOW, + // + // Presentation ... + "", + true, + true, + true, + true + // + ); + + // + // MA's ... + ArraySetAsSeries(mcFastBuffer, true); + mcFastHandler = iMA( + xBEEASymbol, + mc.period, + xBEEAMaFastLength, + xBEEAMaShift, + xBEEAMaMethod, + xBEEAMaAppliedTo // + ); + ArraySetAsSeries(mcSlowBuffer, true); + mcSlowHandler = iMA( + xBEEASymbol, + mc.period, + xBEEAMaSlowLength, + xBEEAMaShift, + xBEEAMaMethod, + xBEEAMaAppliedTo // + ); + + // + result = + // + mcTrndHandler != INVALID_HANDLE && + mcFastHandler != INVALID_HANDLE && + mcSlowHandler != INVALID_HANDLE + // + ; + if (!result) + { + return result; + } + + // + // Long ... + lc.method = lcMode; + lc.period = lcPeriod; + result = lc.Init( + xBEEASymbol, + xBEEAPeriod, + X_MARKET_CYCLE_LONG // + ); + if (!result) + { + return result; + } + + // + // Trend ... + ArraySetAsSeries(lcTrndBuffer, true); + lcTrndHandler = iCustom( + xBEEASymbol, + lc.period, + "x-saherelm.x121.xstr", + // + // Inputs ... + // + // ATR ... + "", + 14, // Length + 3.5, // Multiplier + PRICE_MEDIAN, // Applied To + // + // Presentation ... + "", + true, // Show Trends + false // Fill Trends + // + ); + + // + // Che ... + ArraySetAsSeries(lcLongExit1, true); + ArraySetAsSeries(lcLongExit2, true); + ArraySetAsSeries(lcShortExit1, true); + ArraySetAsSeries(lcShortExit2, true); + lcCheHandler = iCustom( + xBEEASymbol, + lc.period, + "x-saherelm.x121.xche", + // + // Inputs ... + // + // Market ... + "", + 35, + 26, + 3.0, + 3.5, + // + // Calculations ... + "", + PRICE_HIGH, + PRICE_LOW, + // + // Presentation ... + "", + true, + true, + true, + true + // + ); + + // + // MA's ... + ArraySetAsSeries(lcFastBuffer, true); + lcFastHandler = iMA( + xBEEASymbol, + lc.period, + xBEEAMaFastLength, + xBEEAMaShift, + xBEEAMaMethod, + xBEEAMaAppliedTo // + ); + ArraySetAsSeries(lcSlowBuffer, true); + lcSlowHandler = iMA( + xBEEASymbol, + lc.period, + xBEEAMaSlowLength, + xBEEAMaShift, + xBEEAMaMethod, + xBEEAMaAppliedTo // + ); + + // + result = + // + lcTrndHandler != INVALID_HANDLE && + lcFastHandler != INVALID_HANDLE && + lcSlowHandler != INVALID_HANDLE + // + ; + if (!result) + { + return result; + } + + // + // Hind ... + hc.method = hcMode; + hc.period = hcPeriod; + result = hc.Init( + xBEEASymbol, + xBEEAPeriod, + X_MARKET_CYCLE_HIND // + ); + if (!result) + { + return result; + } + + // + // Trend ... + ArraySetAsSeries(hcTrndBuffer, true); + hcTrndHandler = iCustom( + xBEEASymbol, + hc.period, + "x-saherelm.x121.xstr", + // + // Inputs ... + // + // ATR ... + "", + 14, // Length + 3.5, // Multiplier + PRICE_MEDIAN, // Applied To + // + // Presentation ... + "", + true, // Show Trends + false // Fill Trends + // + ); + + // + // Che ... + ArraySetAsSeries(hcLongExit1, true); + ArraySetAsSeries(hcLongExit2, true); + ArraySetAsSeries(hcShortExit1, true); + ArraySetAsSeries(hcShortExit2, true); + hcCheHandler = iCustom( + xBEEASymbol, + hc.period, + "x-saherelm.x121.xche", + // + // Inputs ... + // + // Market ... + "", + 35, + 26, + 3.0, + 3.5, + // + // Calculations ... + "", + PRICE_HIGH, + PRICE_LOW, + // + // Presentation ... + "", + true, + true, + true, + true + // + ); + + // + // MA's ... + ArraySetAsSeries(hcFastBuffer, true); + hcFastHandler = iMA( + xBEEASymbol, + hc.period, + xBEEAMaFastLength, + xBEEAMaShift, + xBEEAMaMethod, + xBEEAMaAppliedTo // + ); + ArraySetAsSeries(hcSlowBuffer, true); + hcSlowHandler = iMA( + xBEEASymbol, + hc.period, + xBEEAMaSlowLength, + xBEEAMaShift, + xBEEAMaMethod, + xBEEAMaAppliedTo // + ); + + // + result = + // + hcTrndHandler != INVALID_HANDLE && + hcFastHandler != INVALID_HANDLE && + hcSlowHandler != INVALID_HANDLE + // + ; + if (!result) + { + return result; + } + + // + return result; +} + +// +// Prepare Style Specs for Drawings ... +void PrepareStyleSpecs() +{ + // + // Each Cycle has 2 Kind of Specs: + // 1- MidLines; + // 2- Candles; + // + // also for each Cycle we have 2 Series of Specs: + // 1- For Current Bar; + // 2- Prev Bar; + + // + // Short ... + + // + // Current ... + + // + // MidLine ... + scCMidSpecs.width = 1; + scCMidSpecs.style = STYLE_DOT; + scCMidSpecs.clr = clrSpringGreen; + scCMidSpecs.Label( + sc.prefix + "_C MID", + scCMidSpecs.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // XOHCL ... + scCBSpecs.Default(); + scCBSpecs.Width(1); + scCBSpecs.Style(STYLE_DOT); + // + // scCBSpecs.openStyle.clr = clrDarkOliveGreen; + // scCBSpecs.closeStyle.clr = clrDarkOrchid; + // scCBSpecs.highStyle.clr = clrDarkSeaGreen; + // scCBSpecs.lowStyle.clr = clrPink; + // + scCBSpecs.openStyle.Label( + sc.prefix + "_C O", + scCBSpecs.openStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + scCBSpecs.highStyle.Label( + sc.prefix + "_C H", + scCBSpecs.highStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + scCBSpecs.closeStyle.Label( + sc.prefix + "_C C", + scCBSpecs.closeStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + scCBSpecs.lowStyle.Label( + sc.prefix + "_C L", + scCBSpecs.lowStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // Prev ... + + // + // MidLine ... + scPMidSpecs.width = 2; + scPMidSpecs.style = STYLE_SOLID; + scPMidSpecs.clr = clrLimeGreen; + scPMidSpecs.Label( + sc.prefix + "_P MID", + scPMidSpecs.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // XOHCL ... + scPBSpecs.Default(); + scPBSpecs.Width(2); + // + // scPBSpecs.openStyle.clr = ; + // scPBSpecs.closeStyle.clr = ; + // scPBSpecs.highStyle.clr = ; + // scPBSpecs.lowStyle.clr = ; + // + scPBSpecs.openStyle.Label( + sc.prefix + "_P O", + scPBSpecs.openStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + scPBSpecs.highStyle.Label( + sc.prefix + "_P H", + scPBSpecs.highStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + scPBSpecs.closeStyle.Label( + sc.prefix + "_P C", + scPBSpecs.closeStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + scPBSpecs.lowStyle.Label( + sc.prefix + "_P L", + scPBSpecs.lowStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // Medium ... + + // + // Current ... + + // + // MidLine ... + mcCMidSpecs.width = 1; + mcCMidSpecs.style = STYLE_DOT; + mcCMidSpecs.clr = clrSteelBlue; + mcCMidSpecs.Label( + mc.prefix + "_C MID", + mcCMidSpecs.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // XOHCL ... + mcCBSpecs.Default(); + mcCBSpecs.Width(1); + mcCBSpecs.Style(STYLE_DOT); + // + // mcCBSpecs.openStyle.clr = clrDarkOliveGreen; + // mcCBSpecs.closeStyle.clr = clrDarkOrchid; + // mcCBSpecs.highStyle.clr = clrDarkSeaGreen; + // mcCBSpecs.lowStyle.clr = clrPink; + // + mcCBSpecs.openStyle.Label( + mc.prefix + "_C O", + mcCBSpecs.openStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + mcCBSpecs.highStyle.Label( + mc.prefix + "_C H", + mcCBSpecs.highStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + mcCBSpecs.closeStyle.Label( + mc.prefix + "_C C", + mcCBSpecs.closeStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + mcCBSpecs.lowStyle.Label( + mc.prefix + "_C L", + mcCBSpecs.lowStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // Prev ... + + // + // MidLine ... + mcPMidSpecs.width = 2; + mcPMidSpecs.style = STYLE_SOLID; + mcPMidSpecs.clr = clrRoyalBlue; + mcPMidSpecs.Label( + mc.prefix + "_P MID", + mcPMidSpecs.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // XOHCL ... + mcPBSpecs.Default(); + mcPBSpecs.Width(2); + // + // mcPBSpecs.openStyle.clr = ; + // mcPBSpecs.closeStyle.clr = ; + // mcPBSpecs.highStyle.clr = ; + // mcPBSpecs.lowStyle.clr = ; + // + mcPBSpecs.openStyle.Label( + mc.prefix + "_P O", + mcCBSpecs.openStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + mcPBSpecs.highStyle.Label( + mc.prefix + "_P H", + mcPBSpecs.highStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + mcPBSpecs.closeStyle.Label( + mc.prefix + "_P C", + mcPBSpecs.closeStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + mcPBSpecs.lowStyle.Label( + mc.prefix + "_P L", + mcPBSpecs.lowStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // Long ... + + // + // Current ... + + // + // MidLine ... + lcCMidSpecs.width = 1; + lcCMidSpecs.style = STYLE_DOT; + lcCMidSpecs.clr = clrYellow; + lcCMidSpecs.Label( + lc.prefix + "_C MID", + lcCMidSpecs.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // XOHCL ... + lcCBSpecs.Default(); + lcCBSpecs.Width(1); + lcCBSpecs.Style(STYLE_DOT); + // + // lcCBSpecs.openStyle.clr = clrDarkOliveGreen; + // lcCBSpecs.closeStyle.clr = clrDarkOrchid; + // lcCBSpecs.highStyle.clr = clrDarkSeaGreen; + // lcCBSpecs.lowStyle.clr = clrPink; + // + lcCBSpecs.openStyle.Label( + lc.prefix + "_C O", + lcCBSpecs.openStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + lcCBSpecs.highStyle.Label( + lc.prefix + "_C H", + lcCBSpecs.highStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + lcCBSpecs.closeStyle.Label( + lc.prefix + "_C C", + lcCBSpecs.closeStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + lcCBSpecs.lowStyle.Label( + lc.prefix + "_C L", + lcCBSpecs.lowStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // Prev ... + + // + // MidLine ... + lcPMidSpecs.width = 2; + lcPMidSpecs.style = STYLE_SOLID; + lcPMidSpecs.clr = clrOrange; + lcPMidSpecs.Label( + lc.prefix + "_P MID", + lcPMidSpecs.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // XOHCL ... + lcPBSpecs.Default(); + lcPBSpecs.Width(2); + // + // lcPBSpecs.openStyle.clr = ; + // lcPBSpecs.closeStyle.clr = ; + // lcPBSpecs.highStyle.clr = ; + // lcPBSpecs.lowStyle.clr = ; + // + lcPBSpecs.openStyle.Label( + lc.prefix + "_P O", + lcCBSpecs.openStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + lcPBSpecs.highStyle.Label( + lc.prefix + "_P H", + lcPBSpecs.highStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + lcPBSpecs.closeStyle.Label( + lc.prefix + "_P C", + lcPBSpecs.closeStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + lcPBSpecs.lowStyle.Label( + lc.prefix + "_P L", + lcPBSpecs.lowStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // Hind ... + + // + // Current ... + + // + // MidLine ... + hcCMidSpecs.width = 1; + hcCMidSpecs.style = STYLE_DOT; + hcCMidSpecs.clr = clrSandyBrown; + hcCMidSpecs.Label( + hc.prefix + "_C MID", + hcCMidSpecs.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // XOHCL ... + hcCBSpecs.Default(); + hcCBSpecs.Width(1); + hcCBSpecs.Style(STYLE_DOT); + // + // hcCBSpecs.openStyle.clr = clrDarkOliveGreen; + // hcCBSpecs.closeStyle.clr = clrDarkOrchid; + // hcCBSpecs.highStyle.clr = clrDarkSeaGreen; + // hcCBSpecs.lowStyle.clr = clrPink; + // + hcCBSpecs.openStyle.Label( + hc.prefix + "_C O", + hcCBSpecs.openStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + hcCBSpecs.highStyle.Label( + hc.prefix + "_C H", + hcCBSpecs.highStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + hcCBSpecs.closeStyle.Label( + hc.prefix + "_C C", + hcCBSpecs.closeStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + hcCBSpecs.lowStyle.Label( + hc.prefix + "_C L", + hcCBSpecs.lowStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // Prev ... + + // + // MidLine ... + hcPMidSpecs.width = 2; + hcPMidSpecs.style = STYLE_SOLID; + hcPMidSpecs.clr = clrSaddleBrown; + hcPMidSpecs.Label( + hc.prefix + "_P MID", + hcPMidSpecs.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // XOHCL ... + hcPBSpecs.Default(); + hcPBSpecs.Width(2); + // + // hcPBSpecs.openStyle.clr = clrDarkOliveGreen; + // hcPBSpecs.closeStyle.clr = clrDarkOrchid; + // hcPBSpecs.highStyle.clr = clrDarkSeaGreen; + // hcPBSpecs.lowStyle.clr = clrPink; + // + hcPBSpecs.openStyle.Label( + hc.prefix + "_P O", + hcPBSpecs.openStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + hcPBSpecs.highStyle.Label( + hc.prefix + "_P H", + hcPBSpecs.highStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + hcPBSpecs.closeStyle.Label( + hc.prefix + "_P C", + hcPBSpecs.closeStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + hcPBSpecs.lowStyle.Label( + hc.prefix + "_P L", + hcPBSpecs.lowStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); +} + +// +// Reading Data From Indicators ... +void ReadData() +{ + // + int mLoopBack = 15; + + // + // Update Market Cycles ... + UpdateMarketCycles(0); + + // + // Short ... + CopyBuffer( + scFastHandler, + 0, + 0, + mLoopBack, + scFastBuffer + // + ); + CopyBuffer( + scSlowHandler, + 0, + 0, + mLoopBack, + scSlowBuffer + // + ); + isSCFastOverSlow = scFastBuffer[1] > scSlowBuffer[1]; + isSCFastUnderSlow = scFastBuffer[1] > scSlowBuffer[1]; + + // + // Medium ... + CopyBuffer( + mcFastHandler, + 0, + 0, + mLoopBack, + mcFastBuffer + // + ); + CopyBuffer( + mcSlowHandler, + 0, + 0, + mLoopBack, + mcSlowBuffer + // + ); + isMCFastOverSlow = mcFastBuffer[1] > mcSlowBuffer[1]; + isMCFastUnderSlow = mcFastBuffer[1] > mcSlowBuffer[1]; + + // + // Long ... + CopyBuffer( + lcFastHandler, + 0, + 0, + mLoopBack, + lcFastBuffer + // + ); + CopyBuffer( + lcSlowHandler, + 0, + 0, + mLoopBack, + lcSlowBuffer + // + ); + isLCFastOverSlow = lcFastBuffer[1] > lcSlowBuffer[1]; + isLCFastUnderSlow = lcFastBuffer[1] > lcSlowBuffer[1]; + + // + // Hind ... + CopyBuffer( + hcFastHandler, + 0, + 0, + mLoopBack, + hcFastBuffer + // + ); + CopyBuffer( + hcSlowHandler, + 0, + 0, + mLoopBack, + hcSlowBuffer + // + ); + isHCFastOverSlow = hcFastBuffer[1] > hcSlowBuffer[1]; + isHCFastUnderSlow = hcFastBuffer[1] > hcSlowBuffer[1]; + + // + // XZigZag ... + CopyBuffer( + zigZagHandler, + X_ZIGZAG_PIVOTS_LINE, + 0, + mLoopBack, + zigZagBuffer + // + ); + + // + isZigZagInPeak = zigZagBuffer[0] < MathMax(xBEEATick.ask, xBEEATick.bid); + + // + // Summary ... + CalculateSummary(); + + // + // Provide all Draws ... + XBEEAHandleDraws( + // + // Short ... + xBEEADrawSCLabel, + xBEEADrawSCCBar, + xBEEADrawSCPBar, + xBEEADrawSCCMid, + xBEEADrawSCPMid, + // + // Medium ... + xBEEADrawMCLabel, + xBEEADrawMCCBar, + xBEEADrawMCPBar, + xBEEADrawMCCMid, + xBEEADrawMCPMid, + // + // Long ... + xBEEADrawLCLabel, + xBEEADrawLCCBar, + xBEEADrawLCPBar, + xBEEADrawLCCMid, + xBEEADrawLCPMid, + // + // Hind ... + xBEEADrawHCLabel, + xBEEADrawHCCBar, + xBEEADrawHCPBar, + xBEEADrawHCCMid, + xBEEADrawHCPMid + // + ); +} + +// +// Update Market Cycles ... +bool UpdateMarketCycles(int barIndex) +{ + // + bool result = false; + + // + XOHCL cBar; + XOHCL pBar; + + // + // Short ... + result = sc.Update(barIndex); + if (!result) + { + return result; + } + // + cBar = sc.GetBar(0); + pBar = sc.GetBar(1); + scCBar = cBar; + scPBar = pBar; + scCMidLine = (cBar.high - cBar.low) / 2; + scPMidLine = (pBar.high - pBar.low) / 2; + isSCCBullish = cBar.close > cBar.open; + isSCPBullish = pBar.close > pBar.open; + + // + // Medium ... + result = mc.Update(barIndex); + if (!result) + { + return result; + } + // + cBar = mc.GetBar(0); + pBar = mc.GetBar(1); + mcCBar = cBar; + mcPBar = pBar; + mcCMidLine = (cBar.high - cBar.low) / 2; + mcPMidLine = (pBar.high - pBar.low) / 2; + isMCCBullish = cBar.close > cBar.open; + isMCPBullish = pBar.close > pBar.open; + + // + // Long ... + result = lc.Update(barIndex); + if (!result) + { + return result; + } + // + cBar = lc.GetBar(0); + pBar = lc.GetBar(1); + lcCBar = cBar; + lcPBar = pBar; + lcCMidLine = (cBar.high - cBar.low) / 2; + lcPMidLine = (pBar.high - pBar.low) / 2; + isLCCBullish = cBar.close > cBar.open; + isLCPBullish = pBar.close > pBar.open; + + // + // Hind ... + result = hc.Update(barIndex); + if (!result) + { + return result; + } + // + cBar = hc.GetBar(0); + pBar = hc.GetBar(1); + hcCBar = cBar; + hcPBar = pBar; + hcCMidLine = (cBar.high - cBar.low) / 2; + hcPMidLine = (pBar.high - pBar.low) / 2; + isHCCBullish = cBar.close > cBar.open; + isHCPBullish = pBar.close > pBar.open; + + // + return result; +} + +// +// Pivots ... + +// +int CountPivots() +{ + return ArraySize(mPivots); +} + +// +bool HasEnoughPivots() +{ + return CountPivots() >= mMinRequiredPivots; +} + +// +// First time Scan for Previous Pivots ... +void ProcessPivots() +{ + // + if (mPivotsScanStart) + { + return; + } + + // + mPivotsScanStart = true; + + // + ArraySetAsSeries(mPivots, true); + + // + double tmpPivots[]; + + // + int count = iBars( + xBEEASymbol, + xBEEAPeriod) - + mPivotsLoopback * 2; + + // + // Reading Pivots based on ZigZag ... + int bIdx = 0; + while (!HasEnoughPivots() && bIdx < count) + { + // + UpdatePivots(bIdx); + + // + bIdx++; + } +} + +// +// Update Pivots on Running ... +void UpdatePivots(int barIndex = 0) +{ + // + double tmpPivots[]; + + // + CopyBuffer( + zigZagHandler, + X_ZIGZAG_PIVOTS_LINE, + barIndex, + mPivotsLoopback, + tmpPivots); + + // + int valueVerifications = 0; + double selectedValue = tmpPivots[0]; + + // + int start = 1; + int end = ArraySize(tmpPivots) - 1; + for (int i = start; i < end; i++) + { + // + double iValue = tmpPivots[i]; + + // + if (iValue == selectedValue) + { + valueVerifications++; + } + } + + // + if (valueVerifications >= mNumberPivotsSequential) + { + // + AddIfNotExists( + selectedValue, + mPivots + // + ); + } + + // + ArrayFree(tmpPivots); +} + +// +// Other ... + +// +// Calculated Suggested States ... +void CalculateSummary() +{ + // + // Summary ... + + // + int bullishSigns = 0; + int bearishSigns = 0; + + // + // Short ... + + // + if (isSCCBullish) + { + bullishSigns++; + } + else + { + bearishSigns++; + } + + // + if (isSCPBullish) + { + bullishSigns++; + } + else + { + bearishSigns++; + } + + // + if (isSCFastOverSlow) + { + bullishSigns++; + } + else if (isSCFastUnderSlow) + { + bearishSigns++; + } + + // + if (scCMidLine < MathMin(scCBar.open, scCBar.close)) + { + bearishSigns++; + } + + if (scCMidLine < scCBar.low) + { + bearishSigns++; + } + + if (scPMidLine < MathMin(scPBar.open, scPBar.close)) + { + bearishSigns++; + } + + if (scPMidLine < scPBar.low) + { + bearishSigns++; + } + + if (scCMidLine < MathMin(scPBar.open, scPBar.close)) + { + bearishSigns++; + } + + if (scCMidLine < scPBar.low) + { + bearishSigns++; + } + + // + if (scCMidLine > MathMax(scCBar.open, scCBar.close)) + { + bullishSigns++; + } + + if (scCMidLine > scCBar.high) + { + bullishSigns++; + } + + if (scPMidLine > MathMax(scPBar.open, scPBar.close)) + { + bullishSigns++; + } + + if (scPMidLine > scPBar.high) + { + bullishSigns++; + } + + if (scCMidLine > MathMax(scPBar.open, scPBar.close)) + { + bullishSigns++; + } + + if (scCMidLine > scPBar.high) + { + bullishSigns++; + } + + // + // Medium ... + + // + if (isMCCBullish) + { + bullishSigns++; + } + else + { + bearishSigns++; + } + + // + if (isMCPBullish) + { + bullishSigns++; + } + else + { + bearishSigns++; + } + + // + if (isMCFastOverSlow) + { + bullishSigns++; + } + else if (isMCFastUnderSlow) + { + bearishSigns++; + } + + // + if (mcCMidLine < MathMin(mcCBar.open, mcCBar.close)) + { + bearishSigns++; + } + + if (mcCMidLine < mcCBar.low) + { + bearishSigns++; + } + + if (mcPMidLine < MathMin(mcPBar.open, mcPBar.close)) + { + bearishSigns++; + } + + if (mcPMidLine < mcPBar.low) + { + bearishSigns++; + } + + if (mcCMidLine < MathMin(mcPBar.open, mcPBar.close)) + { + bearishSigns++; + } + + if (mcCMidLine < mcPBar.low) + { + bearishSigns++; + } + + // + if (mcCMidLine > MathMax(mcCBar.open, mcCBar.close)) + { + bullishSigns++; + } + + if (mcCMidLine > mcCBar.high) + { + bullishSigns++; + } + + if (mcPMidLine > MathMax(mcPBar.open, mcPBar.close)) + { + bullishSigns++; + } + + if (mcPMidLine > mcPBar.high) + { + bullishSigns++; + } + + if (mcCMidLine > MathMax(mcPBar.open, mcPBar.close)) + { + bullishSigns++; + } + + if (mcCMidLine > mcPBar.high) + { + bullishSigns++; + } + + // + // Long ... + + // + if (isLCCBullish) + { + bullishSigns++; + } + else + { + bearishSigns++; + } + + // + if (isLCPBullish) + { + bullishSigns++; + } + else + { + bearishSigns++; + } + + // + if (isLCFastOverSlow) + { + bullishSigns++; + } + else if (isLCFastUnderSlow) + { + bearishSigns++; + } + + // + if (lcCMidLine < MathMin(lcCBar.open, lcCBar.close)) + { + bearishSigns++; + } + + if (lcCMidLine < lcCBar.low) + { + bearishSigns++; + } + + if (lcPMidLine < MathMin(lcPBar.open, lcPBar.close)) + { + bearishSigns++; + } + + if (lcPMidLine < lcPBar.low) + { + bearishSigns++; + } + + if (lcCMidLine < MathMin(lcPBar.open, lcPBar.close)) + { + bearishSigns++; + } + + if (lcCMidLine < lcPBar.low) + { + bearishSigns++; + } + + // + if (lcCMidLine > MathMax(lcCBar.open, lcCBar.close)) + { + bullishSigns++; + } + + if (lcCMidLine > lcCBar.high) + { + bullishSigns++; + } + + if (lcPMidLine > MathMax(lcPBar.open, lcPBar.close)) + { + bullishSigns++; + } + + if (lcPMidLine > lcPBar.high) + { + bullishSigns++; + } + + if (lcCMidLine > MathMax(lcPBar.open, lcPBar.close)) + { + bullishSigns++; + } + + if (lcCMidLine > lcPBar.high) + { + bullishSigns++; + } + + // + // Hind ... + + // + if (isHCCBullish) + { + bullishSigns++; + } + else + { + bearishSigns++; + } + + // + if (isHCPBullish) + { + bullishSigns++; + } + else + { + bearishSigns++; + } + + // + if (isHCFastOverSlow) + { + bullishSigns++; + } + else if (isHCFastUnderSlow) + { + bearishSigns++; + } + + // + if (hcCMidLine < MathMin(hcCBar.open, hcCBar.close)) + { + bearishSigns++; + } + + if (hcCMidLine < hcCBar.low) + { + bearishSigns++; + } + + if (hcPMidLine < MathMin(hcPBar.open, hcPBar.close)) + { + bearishSigns++; + } + + if (hcPMidLine < hcPBar.low) + { + bearishSigns++; + } + + if (hcCMidLine < MathMin(hcPBar.open, hcPBar.close)) + { + bearishSigns++; + } + + if (hcCMidLine < hcPBar.low) + { + bearishSigns++; + } + + // + if (hcCMidLine > MathMax(hcCBar.open, hcCBar.close)) + { + bullishSigns++; + } + + if (hcCMidLine > hcCBar.high) + { + bullishSigns++; + } + + if (hcPMidLine > MathMax(hcPBar.open, hcPBar.close)) + { + bullishSigns++; + } + + if (hcPMidLine > hcPBar.high) + { + bullishSigns++; + } + + if (hcCMidLine > MathMax(hcPBar.open, hcPBar.close)) + { + bullishSigns++; + } + + if (hcCMidLine > hcPBar.high) + { + bullishSigns++; + } + + // + // ZigZag ... + if (isZigZagInPeak) + { + bearishSigns++; + } + else + { + bullishSigns++; + } + + // + mBullishScore = bullishSigns; + mBearishScore = bearishSigns; + xBEEAIsSummaryTrendBullish = bullishSigns > bearishSigns; + + // + // Calculate Max an Min Scores ... + + // + mMinBullishScore = + // + mMinBullishScore == 0 || mMinBullishScore > mBullishScore + ? mBullishScore + : mMinBullishScore + // + ; + + // + mMinBearishScore = + // + mMinBearishScore == 0 || mMinBearishScore > mBearishScore + ? mBearishScore + : mMinBearishScore + // + ; + + // + mMaxBullishScore = + // + mMaxBullishScore == 0 || mMaxBullishScore < mBullishScore + ? mBullishScore + : mMaxBullishScore + // + ; + + // + mMaxBearishScore = + // + mMaxBearishScore == 0 || mMaxBearishScore < mBearishScore + ? mBearishScore + : mMaxBearishScore + // + ; + + // + if (xBEEAIsSummaryTrendBullish != xBEEALastIsSummaryTrendBullish) + { + // + // TODO: Summary Trend Change Alert ... + LogMessage("Majour Trend Changed Happens: " + (xBEEAIsSummaryTrendBullish ? "Bullish" : "Bearish")); + } + + // + xBEEALastIsSummaryTrendBullish = xBEEAIsSummaryTrendBullish; +} + +// +// Handle All Draws of Experts ... +void XBEEAHandleDraws( + // + // Short ... + bool drawSCLabel = true, + bool drawSCCBar = true, + bool drawSCPBar = true, + bool drawSCCMid = true, + bool drawSCPMid = true, + // + // Medium ... + bool drawMCLabel = true, + bool drawMCCBar = true, + bool drawMCPBar = true, + bool drawMCCMid = true, + bool drawMCPMid = true, + // + // Long ... + bool drawLCLabel = true, + bool drawLCCBar = true, + bool drawLCPBar = true, + bool drawLCCMid = true, + bool drawLCPMid = true, + // + // Hind ... + bool drawHCLabel = true, + bool drawHCCBar = true, + bool drawHCPBar = true, + bool drawHCCMid = true, + bool drawHCPMid = true // +) +{ + // + int offset = 0; + + // + // Short ... + + // + // Cycle ... + if (drawSCCBar || drawSCPBar) + { + // + XBEEADrawCycle( + sc.cycle, + drawSCLabel, + !drawSCCBar && drawSCPBar, + !drawSCPBar && drawSCCBar, + offset + // + ); + + // + if (drawSCLabel) + { + // + if (drawSCCBar) + { + offset += 3; + } + + // + if (drawSCPBar) + { + offset += 3; + } + + // + if (drawSCCMid) + { + offset++; + } + + // + if (drawSCPMid) + { + offset++; + } + } + } + + // + // MidLine ... + if (drawSCCMid || drawSCPMid) + { + // + XBEEADrawMidLine( + sc.cycle, + drawSCLabel, + !drawSCCMid && drawSCPMid, + !drawSCPMid && drawSCCMid, + offset + // + ); + + // + if (drawSCLabel) + { + // + if (drawSCCMid) + { + offset++; + } + + // + if (drawSCPMid) + { + offset++; + } + } + } + + // + // Medium ... + + // + // Cycle ... + if (drawMCCBar || drawMCPBar) + { + // + XBEEADrawCycle( + mc.cycle, + drawMCLabel, + !drawMCCBar && drawMCPBar, + !drawMCPBar && drawMCCBar, + offset + // + ); + + // + if (drawMCLabel) + { + // + if (drawMCCBar) + { + offset += 3; + } + + // + if (drawMCPBar) + { + offset += 3; + } + + // + if (drawMCCMid) + { + offset++; + } + + // + if (drawMCPMid) + { + offset++; + } + } + } + + // + // Mid Line ... + if (drawMCCMid || drawMCPMid) + { + // + XBEEADrawMidLine( + mc.cycle, + drawMCLabel, + !drawMCCMid && drawMCPMid, + !drawMCPMid && drawMCCMid, + offset + // + ); + + // + if (drawMCLabel) + { + // + if (drawMCCMid) + { + offset++; + } + + // + if (drawMCPMid) + { + offset++; + } + } + } + + // + // Long ... + + // + // Cycle ... + if (drawLCCBar || drawLCPBar) + { + // + XBEEADrawCycle( + lc.cycle, + drawLCLabel, + !drawLCCBar && drawLCPBar, + !drawLCPBar && drawLCCBar, + offset + // + ); + + // + if (drawLCLabel) + { + // + if (drawLCCBar) + { + offset += 3; + } + + // + if (drawLCPBar) + { + offset += 3; + } + + // + if (drawLCCMid) + { + offset++; + } + + // + if (drawLCPMid) + { + offset++; + } + } + } + + // + // MidLine ... + if (drawLCCMid || drawLCPMid) + { + // + XBEEADrawMidLine( + lc.cycle, + drawLCLabel, + !drawLCCMid && drawLCPMid, + !drawLCPMid && drawLCCMid, + offset + // + ); + + // + if (drawLCLabel) + { + // + if (drawLCCMid) + { + offset++; + } + + // + if (drawLCPMid) + { + offset++; + } + } + } + + // + // Hind ... + + // + // Cycle ... + if (drawHCCBar || drawHCPBar) + { + // + XBEEADrawCycle( + hc.cycle, + drawHCLabel, + !drawHCCBar && drawHCPBar, + !drawHCPBar && drawHCCBar, + offset + // + ); + + // + if (drawHCLabel) + { + // + if (drawHCCBar) + { + offset += 3; + } + + // + if (drawHCPBar) + { + offset += 3; + } + + // + if (drawHCCMid) + { + offset++; + } + + // + if (drawHCPMid) + { + offset++; + } + } + } + + // + // MidLine ... + if (drawHCCMid || drawHCPMid) + { + // + XBEEADrawMidLine( + hc.cycle, + drawHCLabel, + !drawHCCMid && drawHCPMid, + !drawHCPMid && drawHCCMid, + offset + // + ); + } +} + +// +// Draw Middle Line of Cycle ... +void XBEEADrawCycle( + ENUM_X_MARKET_CYCLES cycle, // Specify Which Cycle to Draw ... + bool drawLabel = false, // Specify Draw Label of Mid Line or not ... + bool drawOnlyPrev = false, // Specify Draw Only Prev Bar of Cycle ... + bool drawOnlyCurrent = false, // Specify Draw Only Current Bar of Cycle ... + int offset = 0 // Distance used for Labels ... +) +{ + // + if (offset < 0) + { + offset = 0; + } + + // + XMarketCycle cycleModel; + XOHCLDrawSpecification cycleCBarSpecs; + XOHCLDrawSpecification cyclePBarSpecs; + + // + switch (cycle) + { + // + case X_MARKET_CYCLE_SHORT: + // + cycleModel = sc; + cycleCBarSpecs = scCBSpecs; + cyclePBarSpecs = scPBSpecs; + break; + + // + case X_MARKET_CYCLE_MEDIUM: + // + cycleModel = mc; + cycleCBarSpecs = mcCBSpecs; + cyclePBarSpecs = mcPBSpecs; + break; + + // + case X_MARKET_CYCLE_LONG: + // + cycleModel = lc; + cycleCBarSpecs = lcCBSpecs; + cyclePBarSpecs = lcPBSpecs; + break; + + // + case X_MARKET_CYCLE_HIND: + // + cycleModel = hc; + cycleCBarSpecs = hcCBSpecs; + cyclePBarSpecs = hcPBSpecs; + break; + } + + // + string baseTag = ToString(cycle); + + // + XOHCL cBar = cycleModel.GetBar(0); + XOHCL pBar = cycleModel.GetBar(1); + + // + datetime fromCDate = cycleModel.GetBarTime(0); + datetime fromPDate = cycleModel.GetBarTime(1); + + // + datetime cTime = TimeCurrent(); + + // + // Try to Draw ... + + // + bool canDrawPrev = !drawOnlyCurrent; + bool canDrawCurrent = !drawOnlyPrev; + + // + // Set Cycles Color based on Current Candle ... + + // + bool isCBarBullish = + cBar.open < cBar.close; + + // + bool isPBarBullish = + pBar.open < pBar.close; + + // + color clrTemoBullishColor = cycleCBarSpecs.openStyle.clr; + color clrTemoBearishColor = cycleCBarSpecs.closeStyle.clr; + + // + color cBarSelectedColor = isCBarBullish ? clrTemoBullishColor : clrTemoBearishColor; + color pBarSelectedColor = isPBarBullish ? clrTemoBullishColor : clrTemoBearishColor; + + // + cycleCBarSpecs.openStyle.clr = cBarSelectedColor; + cycleCBarSpecs.openStyle.labelColor = cBarSelectedColor; + + // + cycleCBarSpecs.closeStyle.clr = cBarSelectedColor; + cycleCBarSpecs.closeStyle.labelColor = cBarSelectedColor; + + // + cyclePBarSpecs.openStyle.clr = pBarSelectedColor; + cyclePBarSpecs.openStyle.labelColor = pBarSelectedColor; + + // + cyclePBarSpecs.closeStyle.clr = pBarSelectedColor; + cyclePBarSpecs.closeStyle.labelColor = pBarSelectedColor; + + // + if (canDrawPrev) + { + offset++; + } + + // + // Label ... + if (drawLabel) + { + // + if (canDrawPrev) + { + // + // Draw Prev Bar Lables ... + + // + XBEEADrawCycleXOHCLLabel( + cycleModel, + pBar, + cyclePBarSpecs, + "P", + cTime, + offset - 1 + // + ); + + // + offset += 3; + } + + // + if (canDrawCurrent) + { + // + // Draw Current Bar Lables ... + + // + XBEEADrawCycleXOHCLLabel( + cycleModel, + cBar, + cycleCBarSpecs, + "C", + cTime, + offset + // + ); + } + } + + // + // Line ... + + // + if (canDrawPrev) + { + // + // Draw Cycle Prev Bar ... + XBEEADrawCycleXOHCLContent( + cycleModel, + pBar, + cyclePBarSpecs, + "P", + fromPDate + // + ); + } + + // + if (canDrawCurrent) + { + // + // Draw Cycle Current Bar ... + XBEEADrawCycleXOHCLContent( + cycleModel, + cBar, + cycleCBarSpecs, + "C", + fromCDate + // + ); + } +} + +// +// Draw Middle Line of Cycle ... +void XBEEADrawMidLine( + ENUM_X_MARKET_CYCLES cycle, // Specify Which Cycle to Draw ... + bool drawLabel = false, // Specify Draw Label of Mid Line or not ... + bool drawOnlyPrev = false, // Specify Draw Only Prev Bar of Cycle ... + bool drawOnlyCurrent = false, // Specify Draw Only Current Bar of Cycle ... + int offset = 0 // Distance used for Labels ... +) +{ + // + if (offset < 0) + { + offset = 0; + } + + // + XMarketCycle cycleModel; + XDrawSpecifications cycleCMidSpecs; + XDrawSpecifications cyclePMidSpecs; + + // + switch (cycle) + { + // + case X_MARKET_CYCLE_SHORT: + // + cycleModel = sc; + cycleCMidSpecs = scCMidSpecs; + cyclePMidSpecs = scPMidSpecs; + break; + + // + case X_MARKET_CYCLE_MEDIUM: + // + cycleModel = mc; + cycleCMidSpecs = mcCMidSpecs; + cyclePMidSpecs = mcPMidSpecs; + break; + + // + case X_MARKET_CYCLE_LONG: + // + cycleModel = lc; + cycleCMidSpecs = lcCMidSpecs; + cyclePMidSpecs = lcPMidSpecs; + break; + + // + case X_MARKET_CYCLE_HIND: + // + cycleModel = hc; + cycleCMidSpecs = hcCMidSpecs; + cyclePMidSpecs = hcPMidSpecs; + break; + } + + // + // Calculate Mid Line ... + double midLine = (cycleModel.bar.high + cycleModel.bar.low) / 2; + + // + XOHCL cyclePrevBar = cycleModel.GetBar(1); + double midLinePrev = (cyclePrevBar.high + cyclePrevBar.low) / 2; + + // + string baseTag = ToString(cycle); + + // + string midCTag = baseTag + "|MID|C|"; + string midPTag = baseTag + "|MID|P|"; + + // + string midCLblTag = midCTag + "lbl"; + string midPLblTag = midPTag + "lbl"; + + // + datetime fromCDate = cycleModel.GetBarTime(0); + datetime fromPDate = cycleModel.GetBarTime(1); + + // + datetime cTime = TimeCurrent(); + + // + // Try to Draw ... + + // + bool canDrawPrev = !drawOnlyCurrent; + bool canDrawCurrent = !drawOnlyPrev; + + // + if (canDrawPrev) + { + offset++; + } + + // + // Label ... + if (drawLabel) + { + // + if (canDrawPrev) + { + // + // Draw Prev Candle MidLine Lable ... + XBEEADrawLabel( + cyclePMidSpecs, + midPLblTag, + cTime, + midLinePrev, + offset // + ); + } + + // + if (canDrawCurrent) + { + // + // Draw Current Candle MidLine Label ... + XBEEADrawLabel( + cycleCMidSpecs, + midCLblTag, + cTime, + midLine, + offset - 1 // + ); + } + } + + // + // Line ... + + // + if (canDrawPrev) + { + // + // Draw Prev Candle MidLine ... + XBEEADrawTrendLine( + cyclePMidSpecs, + midPTag, + fromPDate, + midLinePrev // + ); + } + + // + if (canDrawCurrent) + { + // + // Draw Current Candle MidLine ... + XBEEADrawTrendLine( + cycleCMidSpecs, + midCTag, + fromCDate, + midLine // + ); + } +} + +// +// Generate Expert State ... +string XBEEAGenerateState() +{ + // + string result = ""; + + // + // Summary ... + result += + // + "Summary: \n" + + "------------------\n" + + "Pivots: " + ToString(CountPivots()) + "\n" + + "BullishScore: " + ToString(mBullishScore) + ", min: " + ToString(mMinBullishScore) + ", max: " + ToString(mMaxBullishScore) + "\n" + + "BearishScore: " + ToString(mBearishScore) + ", min: " + ToString(mMinBearishScore) + ", max: " + ToString(mMaxBearishScore) + "\n" + + "isSUmmaryBullish: " + ToString(xBEEAIsSummaryTrendBullish) + "\n" + + "\n" + // + ; + + // + // ZigZag ... + result += + // + "Peaks and Vales: \n" + + "------------------\n" + + "Looking for New: " + (isZigZagInPeak ? "Vale" : "Peak") + "\n" + + "\n" + // + ; + + // + // Short ... + result += + // + "Short: \n" + + "------------------\n" + + "Period: " + ToString(sc.period) + "\n" + + "Bar 0: " + (isSCCBullish ? "Bullish" : "Bearish") + "\n" + + "Bar 1: " + (isSCPBullish ? "Bullish" : "Bearish") + "\n" + + "Trend MA: " + (isSCFastOverSlow ? "Bullish" : "Bearish") + "\n" + + "\n" + // + ; + + // + // Long ... + result += + // + "Medium: \n" + + "------------------\n" + + "Period: " + ToString(mc.period) + "\n" + + "Bar 0: " + (isMCCBullish ? "Bullish" : "Bearish") + "\n" + + "Bar 1: " + (isMCPBullish ? "Bullish" : "Bearish") + "\n" + + "Trend MA: " + (isMCFastOverSlow ? "Bullish" : "Bearish") + "\n" + + "\n" + // + ; + + // + // Medium ... + result += + // + "Long: \n" + + "------------------\n" + + "Period: " + ToString(lc.period) + "\n" + + "Bar 0: " + (isLCCBullish ? "Bullish" : "Bearish") + "\n" + + "Bar 1: " + (isLCPBullish ? "Bullish" : "Bearish") + "\n" + + "Trend MA: " + (isLCFastOverSlow ? "Bullish" : "Bearish") + "\n" + + "\n" + // + ; + + // + // Hind ... + result += + // + "Hind: \n" + + "------------------\n" + + "Period: " + ToString(hc.period) + "\n" + + "Bar 0: " + (isHCCBullish ? "Bullish" : "Bearish") + "\n" + + "Bar 1: " + (isHCPBullish ? "Bullish" : "Bearish") + "\n" + + "Trend MA: " + (isHCFastOverSlow ? "Bullish" : "Bearish") + "\n" + + "\n" + // + ; + + // + // Test CHE ... + double shortExit1s[]; + xBEEACheHelper.CopyShortExit1( + 0, + 2, + shortExit1s // + ); + + // + string shortExit1sStr = + // + "[0] => " + (shortExit1s[0] != EMPTY_VALUE ? ToString(shortExit1s[0]) : "EMPTY") + "\n" + + "[1] => " + (shortExit1s[1] != EMPTY_VALUE ? ToString(shortExit1s[1]) : "EMPTY") + "\n" + + "\n" + // + ; + + // + result = shortExit1sStr; + + // + string hash = ToMD5(result); + if (hash != mLastCommentHash) + { + // + LogMessage(result); + + // + LogMessage(hash); + + // + mLastCommentHash = hash; + } + + // + return result; +} + +// +// Custom DRAW(s) ... + +// +// Draw OHCL Labels ... +void XBEEADrawCycleXOHCLLabel( + XMarketCycle &cycleModel, // Specify Which Cycle to Draw ... + XOHCL &bar, // Specify Cycle XOHCL Model to Draw ... + XOHCLDrawSpecification &specs, // Specify Cycle XOHCL Draw Specifications ... + string baseTag, // Specify a Unique Tag ... + datetime time, // Draw Time ... + int offset = 0 // +) +{ + // + // Open ... + string openTag = cycleModel.prefix + "_" + baseTag + "_O_lbl"; + XBEEADrawLabel( + specs.openStyle, + openTag, + time, + bar.open, + offset + // + ); + + // + // High ... + string highTag = cycleModel.prefix + "_" + baseTag + "_H_lbl"; + XBEEADrawLabel( + specs.highStyle, + highTag, + time, + bar.high, + offset + 1 + // + ); + + // + // Close ... + string closeTag = cycleModel.prefix + "_" + baseTag + "_C_lbl"; + XBEEADrawLabel( + specs.closeStyle, + closeTag, + time, + bar.close, + offset + 2 + // + ); + + // + // Low ... + string lowTag = cycleModel.prefix + "_" + baseTag + "_L_lbl"; + XBEEADrawLabel( + specs.lowStyle, + lowTag, + time, + bar.low, + offset + 3 + // + ); +} + +// +// Draw OHCL Content ... +void XBEEADrawCycleXOHCLContent( + XMarketCycle &cycleModel, // Specify Which Cycle to Draw ... + XOHCL &bar, // Specify Cycle XOHCL Model to Draw ... + XOHCLDrawSpecification &specs, // Specify Cycle XOHCL Draw Specifications ... + string baseTag, // Specify a Unique Tag ... + datetime time // Draw Time ... +) +{ + // + // Open ... + string openTag = cycleModel.prefix + "_" + baseTag + "_O"; + XBEEADrawTrendLine( + specs.openStyle, + openTag, + time, + bar.open + // + ); + + // + // High ... + string highTag = cycleModel.prefix + "_" + baseTag + "_H"; + XBEEADrawTrendLine( + specs.highStyle, + highTag, + time, + bar.high + // + ); + + // + // Close ... + string closeTag = cycleModel.prefix + "_" + baseTag + "_C"; + XBEEADrawTrendLine( + specs.closeStyle, + closeTag, + time, + bar.close + // + ); + + // + // Low ... + string lowTag = cycleModel.prefix + "_" + baseTag + "_L"; + XBEEADrawTrendLine( + specs.lowStyle, + lowTag, + time, + bar.low + // + ); +} + +// +// Draw Label Using Specifications ... +void XBEEADrawLabel( + XDrawSpecifications &specs, + string tag, + datetime time, + double price, + int offset = 0 // +) +{ + // + long chartId = ChartID(); + int subWindow = 0; + + // + if (offset < 0) + { + offset = 0; + } + + // + int offsetSeconds = PeriodSeconds(xBEEAPeriod) * offset; + + // + string value = specs.label; + + // + DrawText( + chartId, + tag, + subWindow, + time - offsetSeconds, + price, + specs.label, + specs.labelFont, + specs.labelFontSize, + specs.labelColor, + specs.labelAngel, + specs.labelAnchor, + specs.back, + specs.selection, + specs.hidden, + specs.zOrder // + ); +} + +// +// Draw TrendLine Using Specifications ... +void XBEEADrawTrendLine( + XDrawSpecifications &specs, + string tag, + datetime fromDate, + double fromPrice, + datetime toDate = NULL, + double toPrice = 0 // +) +{ + // + long chartId = ChartID(); + int subWindow = 0; + + // + if (toPrice <= 0) + { + toPrice = fromPrice; + } + + // + if (toDate == 0 || toDate == NULL) + { + toDate = TimeCurrent(); + } + + // + DrawTrendLine( + chartId, + tag, + subWindow, + fromDate, + fromPrice, + toDate, + toPrice, + specs.clr, + specs.style, + specs.width, + specs.back, + specs.selection, + specs.rayRight, + specs.hidden, + specs.zOrder // + ); +} diff --git a/MQLTestWorkspace/BKPS/Old/Experts/x-sample.ea.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/x-sample.ea.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..c24c27e0f01f434ae3d440939aa60809a1825652 GIT binary patch literal 58040 zcmdS9Q;;uC%qaL9+qP}nIAiOKZQC}^*tTukwr$(m|95xqKJ3GN-*j~+m882WNmo}_ z5-|-nUXKL7$8{V)7K^#2W^MgRPGg+CcciGC@BPd#4$H~)WQ`2S7(fARlw zjynVZ@IO-!6^`=%tFlE=$*=FWPN45FWMtxk2lwL_NMFqbs)NaVFF&K$rbkFXU~=g8 z$Mk>pi2&>X_5crnBftV+1~3OW0|)`k0LK3&3xM`NS{Y#QAJ^nRxfsA2VDleG5}@+m zD)JxC_CM|ak^KJ|{>NhH|2*IX;07@KH=O=odrkhAz4ZV2<^SIn{-2}61fc&f+Km5a zrT>EzS$-P#PQTQw2-wO!nER9{2l$4U0inrdy3q7JXR`s?lXs6T(V$Ed=%XVy$_mO` zy>BUreEps}2%Ux=Shka@5!nO2wsNhewm1P#YrMCxV1`$g^`BT!8wTnNVRD8Lb1O86 zH{|(bTAq4x??~h|?E=sJA4ai0^5J z5Cfp7a5?1uITp4XL>V@N}*t@)a)G)||NMXeD=(cFu_3k2c7xIRC=F*;rrth(&S zh|uF?g{8%UXqM(Sar+X5zrE2c*?fBtDOY>zkXG?ro;avHg(b;5DQSwiJ`Pwb_19a> z73SY$ru|*Ij;^UcT-h)nW_|Q7U01mwkSO8rmw%1kaOT;ZteVqWaWLzTkEUd(q1VHD zbZl^B#YSR| z!_`I1APXM}lY5*$&cJ%Q_K5V|`I;7=YF#dZO^Ra)edE*@;kz6vIiZA4q3hn;wBq|C z@OuTtzYyLL%kd^M9gh_!aK$#d^L-;qmeWQHI!V z9z=s)?*3&K5&j!O(UHOVdooGF`{0d@@lVjD;e~vR99n03wc*Y_#Z8XC$d!NfB*$15 zTI%Oik5WNRIaA1{K)nm^9nI7wENa=@Cu;bEO7SSQ%E)ygCJ+aipBeI1 zw@ryFh^Z^28-F?C`<=OX8h6XbMQl|jDtM^gO)#QsegSF3}=RcgMXG6tPN%Wu3eUQltTryWgI z3{D6Ay=p~Aow<^R!Cq(YhGGEiZ}qu#hK8V4biI9nyd+!WBr-ovz08`vjE0nqxOYdg zVi?1aj%4%D>5WB8lId1KgJrNgwOMaY6S49m_yu2eYr>p@t2#Y?u(vA9V=spqMSQH|>vRa-W2x5Z+eAzY)j9eth>g{IxqYyV@axrsdNSeZ6KEf)S-M%;*g zX5%|#Rd!eF4s|$7CU%SClwX>yxZoaD>m>54v;@Ave^W|4r^4DGSdi3~wK|Gnn&SIj zPPvqP6CaWNYf28#yv#jp<-zaxEz~(vhm*j=0~0}WurayFHT(+2Sd@Bksy6taE~x`D zPKSu#E&h^F!-3N%#76(7CIAPN0(hRBTz8ACP@6<;1Z+JW?;MBCj7n0MYdF7&er)(L z_!?5E`2O$@jA0bcVnnQ@9ax%tRTtQ^D$GZhmGZDrIW)8lZP--Az61mClv~xt=9t?22!$;|Cp2#^uK?SBjfo-Fa z5|_TEoTeXW^?p%B<&5W(jL$`YB9%_r)XhU*Rr=M$>O+v@MX!lp6$?k8x8?Js2x8OQ zG?9VOt6wf)ZT#|CIL0zR(o5GdVyV|#{dfzPl2NZKn(Xn&fUe_Qz{bsN6=AzxHpzx` zaJF*!*xaNvsG6s*I8*4T3RuMnLd0dj{_R^@zM5_)-9K{_yqkX~VHH zCcSgU!~;VLN&-0%!D9&_-c}`N=XfZ*Vsk#}S_b+tBVkD_JU`S}_XjAD5BvkoL>%*b zc((-&QpZR*Wa!O<*Ge{HgR$<>sNfDg)MDTydh*t4GwU!}hbh`u_B($U%OGU9noQ*@ zO7u3qUV(uc+~s!B@9KO3cgu6c07=dbvyJ9HXh9jI8^Qp#J1}|pP7+td(l(S6p&#pv zDF?lUq}6ImiT>;M#Z2@&mNZgX^|!(Hba^0PMYamLPD5OMzKJC(DgnauFnjY`je({c ze8zV+ewNEmX?a8s0OH(P?%Yf|70pYz+XeU4-!*KDii+}?+?Xk8Kwtf?IH=a|Wk;Zd ziAR}^sN`Y2B_Qt_2K(66Vw5k^&7iieOw?8hx}?`))X8K*~$C-#uecH%(?I zwT_#H05S5~e^u_3j`UBj3M@(PbGTLDeW0XqF%WA7hm^uI&ixB!K;uB)8FIhG(3i=D z@tGC?&~^~pRWr01M5zpMU!^vQ|4b&SFxqAxY?~)d-o&X(^WvpVKyh-IDBIrAF}B1> zF*(=3fRq77n|sNfnIJUE5SjdSfe7B4V=Z94wSOh1l1{d)Z>yFCRRp zPKe$O%G$d+my6S{fYirG$%nK@DJAr+aKw9Q)Od=nmPd+1ROR?RD~C~r6dkv!7+OG3 zYV@p3>^B8=xVd8l2HYYt?!P}P@#VU;|Lj7(dAO%$M#@<4X7LKXZv^qHWk3LNCf<9a z;5CY=Vevi*Q1BZU)Gk06jT?vJ3M}*=a=)%&HToB=M19*5n3+y2qb(@oj-N)KD@~C6 z>=bF~>o5`G%y%ecIfEOvL#iWms$ZUz;|xCPPdxT6-MIOT>L^Ja^GBB=;%ses^HoTY zl7viYCnAs<3M5u4WivMyz$28kBRvvFT7k`U#j4)G_so{J7ZoYf1v7PFMP!TrR-2MA zs(;Prd^(g=v0ubQU4bGc__8^ovk_eX5Kya=bfCqZbZ(@~a7Rr#@5MK&qIE9cS%HC; zZ^(+7IX0~tHz%goNilnerRos@{7;4(`41mz<)Ci#Hu!zXAoVg(A%@alu?lnR^Ff}d zdv{z<+FQ|@;siSxbA&R|{gfEh# zL5EJ*j%@m=3|$v%LtzZp^wIDfbg`QdCd?@aBokuxpGTcAn4UkRtKVcW8f%c;7w zD!N(6_&h&(C?>hZFIhLtLDyYnA4s7pJ6`jGU`6sg zaH?i86c@zNoNmv;PD_ON)w%x7m>jy!bWvS9-HR0hit)A@!MCvIXXlQ+UNg9g60Hf5 z7OV2*c+#YKM}tcGnr`yi%u+r9TlH6Vds^c#od(mJ;q78PHvn?1ONJMw&tqSeGwIOj z9=R=D6i-pi9g8FJlwZ;Gl-=j_s(*GuWJX41{$6si`s6_}z>__lZF9PQ;bH#xo`*lm zGgFAG+p{-%Lz6z4mz!mfp-W1)o4?E$5XR$wq_{Ycxa1|wCC7si`^keC=Wz*;g8A{F=&M$FG?WV=m@{1$g=<#TKpSCkFpwf<R88n2=oTL2GHnM`u~#o>S^ zLwo4Hd%=%ZAJO!VmG`!jp|m3Sh|A2Jn&yfT;vr6(p?2xn4=O`v+rIMy)2UOxYEY+_ zdT#aIdz*uyP-4{Dx*s6zIz3I6Y@>0AE=9F+SxhR7E&$KYcYR)s8Uc&_uEj(Q&-E_+ z)0Zr>!RalIgwHl1MO%GQy=;~Iu2_?nQ4sVSG5Wf~>iJg8w;#CzGTSM8{YwMO8Lj!X zOu6EgJ1BTL!(?tjgAjroBdq-X4;)u$mB6VK+<&{61tg@|W?gY*X+>vaa%wES^|)>O zk+!{scnmA~S)#~0+asTDTqj)kJhny?5vO%{_{21SW_v-?d!M?$iXQ$YG{k*3wcs0= zGT8xW5gFbtyvzThla}5CE8M*?!1!{EkQ%K8`+W(qIA(Y;glkAVDnm2ByZpD!vLN0x ztwhhkf2ogR?9|9Dn~wz7o{!_60eo(8n=lI}Ivk zE&w>8-JF?2FMqY_9WYg%Mf0fuuL^2FH~w`+^oBkZE8tP*ME|L4MAX|3xBXjQ4TCVOjKoDk8*9k`cQ`8sIT9hTr$0XVf8^E zuU%D2>;4q>{rrX?Y!YJkgVLyuk#X`O#YvudfO`SH4-0H|bT`%cCA4Eqk!SeKQwAu{ z=Xa3JaLfEz*o8{R#xf&AVG8;LFT+QeW{ci3!wv{tp>)8_G07h#CADj}Jfv=V8v4YPecUxUz7ZCf5m6k*u1W3Q+ zzQ;1EFc|8%Nj6aR9F~o`eMJuU^Zd+wE4G~DOmBalb{Ffj&zUd5Vl9IB*YC}~4Ln!4sIs2ZyB zQx*)6{YPUV8`PG2+^Qy#i0(m9RA~IwFZUcAYd&x~v2Wj2sN4P;@ zU+Y#ahkIWoY7em%fflu(IqsjB_$rY*zP`k~)>(-;ug%7iGhSPGR#S1!{(8GWUzQ6k zIV{iPh^&{?(XxmO#tsM>++C(?*v(S9Od{w&xx@8s=aCk*5oSBru+ab6BLyP96Q~CV zc8SCmx9C9GU=rJ?{p4ogOJ?TpCA# zny<(s*N1$$r6*>*qi#Mf|8awj26~X1Ky7!Qb0T!mQ?T-_D|q6No5wmpZ&{VoVAx>G zZ94GVRfeZ0fqzeO`=G?K=1Kr^icvxlKus4)aT z!^Q$ZGEogCtQIzu_fdJIFTAxd*^^t;H8NMq%;Y!J1jg_(0p|QY4lHD3B*mFLP!9}%W2E2wI;mANC2M?x@gk^Ynbu<>ofI+D z2&O-Wt5nEh6bLjH=5<|hN##m)i8*93?JhsbvpQ1>b^bR1+ z!sB{?5auF{qstIUJ~ZXgk^=FmrhCKIrj6@yf<*8cFz2D&(lti%0Cmtx@S`a2tf z*g}9N9qDhk;!`x;pYa*~i4ll2Uta5A7qi1ki>js&LMX?a31Kxo9%^&_muci)Qbe3M z)F8_!=rR;>X22w&2x%CZ%*;i1Y(xbL4&~zwXa#nx>Ocreav&}vqLh=S|3$7#pP|?4 zp|=3X=BnDhS252h@rm_QW!IE=(Ayl>*g#(in#_r>hU4pf?u>h6*%X+wkkIkBz5$0C zNny&U_N`^6%GDyWxy^QQ*HS?I^H8ZypZ2|(sHkMU(H6y|#vUawX9IrLR-)Xy>ZtDdIiWqz+>8q|kd&~oyyW5mLB zR86s&iHQ`gS|>H*zO*+EiL0U-cb03+Q;Zr2_P)QQ>DStxr%Q^l5=F2QRzgZHQbLd3 zg#rbK*HQ>;--rV57E7x%_ca=!IqpqtOHkf0vW!zq%_ob+WN5UorMtCI7zxdtj-AaP zrleuU`Y=@aIdLU7)rR4i;3M7B=l7Y~-95Xj?`Y`rG>XpevHjpi(V5ax%B@dFaboZa zJ*B$cKCARZ^p7jjjSj~ScvON>D1Mt zb~gJaJC{fAs&%tq^?PB$QdI{w%i6FWDXfSn{?^s?>t$KP_yb4 zTd|~-q9vn4FkCop79JNS#2d7lE(Ltltd3uPePGE4)uA)Qsy|yHB9(%deHk&;-nEtk zSA~Vwm7$?xd589VH?%_wBHaT;3&1R^f>H5Z$y)7|t!z^9*mb$>)W8Si{>Q+>Jf!gu zE94U(t7RAIeE@7U_Br*LBVr>KO;~;YR)Knur5HD-C&caqQeZTrq5jGi%3|quzAjf( z*xOq3D}w>dZ}AS0*o?qhsp9Y%rC|QAwZp+(C*#4)56%Mc>6_(1Yy>{~;a6sOI`YotLv>d-D5Q!^twMzolad4(S7y-K#O z0}B^o-~n&B+rb{^HWHHOopk#%kOcpZp~M7Sn-m6bVRSOi?ZQ80=6q6&FwdPaL_kGi z852wdRGO6qnzMVtFhdM%V_7cMH}4W)-!nD_6yWS)g93se3Uxtr4D|Z9R`67b=)^tL z=wtJ_jQwEh;nYq=fS)a(h2ryP^7^R!#o($zA#x+o)%R%_=bLMIn8=xM0S*ICOj#Em zg1<-N5mZdMY7@qI@Gx*NcaJc^nV%w!9o&9-#22m6XGexge67M zXtWR-SA0hGN#JX^db4|_7fsw<)j(L`J3gD(aG=Ig&FH$Bqy~rj zFMf||XRgcj}fe_DplEVwkt<%@UN%m6Q~9@=O7OhUg6D={EYovFZ0A81*1o~3=dA)$J9dP z;doqPCTXQatgbM``@=bNv>bA!ZJz_&^d%BXRB8CfB)p~tk_|&oT-@^F&on0UMkf)d zOF4Goliz>h925D~=<#ZDV3u3nY*`_R@V`GO%@40wTFuT1AioWgj!zNPD#7F&Dt)J_ z{c-A$<~gKG!KHqmij_zAqzBv`JqWLPE|H;qCZy7KGY#skwA ztm&e}KnIFwBnKN(YL#NPKzgTzh3NMlh=7xAf?o&ETPpEagRwHfgH&&dnvB={joqE9 z3X^+2JGx7p)Of{EVIwiR2hXcMV9IADios(pMLKgoJ=w<48OL|LDH`W?m5;=w|or_$@%KJkqepYPkDt~7w6m}FT)=U!3Dq2Zy8gx#Wv+l z{WJwl50?OgE^uq-mmzf8%}ZbpBoaJRsNOFPJJb@-u82W5v^v>_n6*Uk zRVs6;8}2hscPrwHu2Jm9z?`xCrDT6Q^nA(PV9q=qmNAklFEp;TtzgjpHA)<|B*mgG zWIHZ9D6g4dbGc!X1f_l~G=)_Q&W4Z(!Fg_~tGBy+p`PvJa##3J*%2y-1?-w)-jM@D zNVgl!yz$uQnIO7Fj}ohB=%oKEMa)zmpUm7(6EMp&4&HviQyH;+2TkY^?1|X?mqG{z zSFI($*FT{$kCaP2_N8*>7TR#cV%%tgl<3{M`A3xTN33Tb{v61vmDZkIQy}y&vmB4i zsjtL0JD$-6s#f}vlt)gI>fYwo$@!Ts{N`;ce2|+d8x!Ue8CKFxE5h)Lzd}m*AhvVV zgtqbuMT%oqpmI#8K45SBtFGQPDxeWgXm%X()a%B=ZKdKP@@P??lMaUz7QtTn9P^=C zQ*OkOqzBDkec>{kq(ubQXH~wM9pX`$lsdNf(T_%zQK}jdQi2H*1ny)$EhVi&YYznG z>(px=8mEhG`v8}RwUEe24)fxyF%YZ}*YnFZ?ZI^tje|#k?mc(gH{ zF965688|57*(7O&^#v~3^VG?B`t?A5sQquKyZ`_~r?Vtb`e3;KJ+;LFd1nOV6ZWL- z%~$r}jvqOXU=qD4@aLxwB^mnJ5dIfqWm5dJ6i@OX`(f3DF1(Dl1|jBclh!y8uCK!h z>^|O>j=EU>ToxVeIbg=)p^6`8`Oz^+lwjmSE*q+^nTp?%V^griqyEGXeY1@$LFJwE z^qDdxzb^!a97vyBO5D=U>;>rsX)O>W?Pp}nHc7$qDIu&u{79h+C30q{0B#ic560)r zqceh)tfNFi=JJ2l8=k>Lxg!7A*8^aTL=XWkzl*x&96&bn5yt&_YTG7Vgr-t?*8c-SIJ)| zfvj5ZXJzqoetO( zn6ST*_vngaDVuJ=2)^OOmrB&<7?vUwAChOmPS&3mQN>K6FgkNO&c6g{fC#t_TNpwH z3O8(ajUsA(PHs0BN1lSVL}T|OD!yz% zIq$>S$MW36&%$O-EctUc>MTs?Wndh)07RBw zbXY*?tCnyTlx%P75+4tu&9RNn;S|QvqQjT4DXxRWQ7QLCS)anL7O*WM0mN;+ zPA(|{W8VSt@5`7B51R1yL*kLR*C+l8Z>W(=(~7FDF+A5p6OxPOrDVo!G4n~GCB&a) z4*H-9tiRWv=Px$G`-m{n=;(L6Y)hiv?5x8IhF0-Cn0?8sNx2=80cuT(S&`@}HqFH8 zgTA%|UYBMn)5itGQ#$qH71xwt7Usf^QCvZfv8!VW^Do6Folmju+{62Di^2#Z(Bx2) zTz;O!SY^KyZia@qShf}&2b4=A-3z$`W17PBQ_5*jrlZ<(+C&8%f(U7qVjx$f2!Hl< zC&dR6_~C6W6k|S^$OSdt_#RYC8q^JcLfHJ7K2L`F&|zGtUO03{h#L$chT&Wqa06Sh z7Im<^TvbwnoQss0lQOt+sE_(FWg{xzReaZW>-i+J55e~aH}$138YF8LCYDDk-Ke)a zMa{_k_cNcBlZn`Lws6d2K(%$LkU0vbvZ}A_1rbW>_Ivl(WJBr=t~q`E4rz;L#N5fE z3*;z*)V$2JbH!Lo17QX4QbDoKJ9kLXHscyQ`ruCli9gt$g{BpFUKM+}dPzxaMSvI$~Bv=#TWJqnpoSs+$#ujOsOn`e4>M`3R+A zSk2TbzP8!770@e7{+h8BpsF?MdoCTI$EZH(!m8OXqZIg-(vV@BRiCPU0b=Zu;-IH3 zc)824rEN3Bu`7V2?@~un5x}%g0Z8Pz^Vj>l1sts?;^dmQqixHo-BqxsQ>NR!x0Ppj zV}>1El@JOIx;gP6`g33i+n@gD$P8knlkXP{F-G#D)!2qnzYP<#H;B7(2ZW0??Ch3o z*k#~a6tus~RqsK-eZ4bXj}z5iIa{f~Sjf9R{1vTXyl^dMFs@&@4@6K5Zr-Ns4EV80 zY%i|Fx)7diUwEvv%t{@BhP+C(~0t;d(a6!c4Ek2WaM!D(mn2LF>2s(cuJYG4tW=ACM=8wy` z@dl~pq^m&JpD?iX{?t#-;Vwo)N#lF_Z=Bcp}wVG%ih8fq?K3~i(JR+U~C{# zgq*#01Kq(#c|)_IiEGQQY{`~!CDMolh|qEP`4>pz9EU+#)RVT;pD&A~pmK5zExb>z z8h+TToYO=aB*9-G-wCDzu4HRRdx^wfe+0a0hT(yY6dS`X9^WgOTB}?bxIB{YC7k&O zD~leQTx8sW1(wk+)vE2pmX|p}f&}fNQ82ypBZ=Y${qF@eP(?=6b3|aqTE;ZR6p~xF z`$ubx=@P3;37ZR+wCV@q;GZfl!H?EH<({!Bw8}k7%4^FRlqQ`f73oT*$j!uO$833M zXvLO-EZcWdd<_8xP8D}2$x+WK=KDEJ$2bvH@&bq$xou5wENRqxJ>doI%7SAPPS!N$C5@P)fUx5XMn*ymXY(5uofVCKK|e_O^f0kWb^Xu z;m5=K(vT&4*dGcMLln3gYlzW*4zq|)#(9+)s>dTx7B}Z2>K*Avu%F%Mr)VqsgTj9^vXya3!i1!lAWDkhSux>_*zTK2xl4-PirV@1 z!R)n3Ysi>20er1~bSo-3pGuO>zj6j0vf#el3p0GtM)v~JTPZwjF$L-xX-lf^e$gx` z%*-3cJ&@N#FmEhyekXcOBY8Iv@b?zXQS&7=m8;(~r zmp-=Q^Doi!2$Cm5DC@25i~|7`Fb@N5a~0<-32^w;fol{6+y>Oc5>ql_ z+|xslzbDIcokKOn`j*RMC0W+>+0PiD2EqcxVtrZR>6YWLXO1r@z&%9<6F@sC)^@On zc+7Do$?LI?*vaYfCz;p@6(iCvkp3L`>dvd3^M+eK0kuPAy?SSGtZst&%o^;lhu&I)!Jssfr6CH)XQ2F%TkssrEo)TQP(-96`YQB3EuVT zIW4Pj0^ zC{2a@MVaDKlMaPYv3UT)mh|i>51h4>Z`;aj(V`2S5K2!-{=$qmzrwFj-PJT|*7x`^ z&33dwMehrX4Ip9{x7$%>po6JQApOz0aK4oZckCfsY!R2D3Tn*Mw`A?&;G#$L1S}l_ zwaA_+D);NParv10VFEA+(I$F^BYvbn%9fn2I0Xo$)DE2KlzhUVj1cZPnlVDL=n*CE z>BulO*0n?CZAsoYP%R2(q;laih30AB@(JsBT!0r7B^IEf0V~BQLjNU_6#SV((#5cu zjYYy5Ul5gh764^WzCqAA)W7lztst6KDR~#H%cu=!VZ@=6BINEoEe{XFT zBKBY!!R6q30*^L&iIUhD-?izgvug-T4S98peEH#NEsb-JgvR$`byvjFbhI4VXh#tn z7(wcwUESjn^Q#kwjxW-!a8T$u0!L2bCY)hw!W=_7QFeC<4*J_z4@Be6ChPxxV)Yp^ zuCU)I<@k%tgj1Z3kZEI0{g}Tw?k!Jc6@S~YEr8)9Cs0#5XAXp<8kwKUUlOb^i!-7+ zk*r(fiL$l1!ep$HI}`_!UfpPx6=m32t0CO2YWv2Uq<7aPr>Mcg2Q7I1_n+XBfE{$M zU3%HJ-PlJpuCv%%OvZ3be`f05=~I}GLMOy;XzLOGi|y+|O3bm}bzP}F%NJQIep45B z)~T0q>29$!#XC=hRC}Mw-}i-UNpm#nV+~pF_EiuGza1X!T9;*D_98Hh`J#e)B$(^VJdq zKx}8|_or0gzPHsAF=QQ#Vb6nNkAe*H-cS}W@uZSmYv(4OdRRr_R(Gzz*%l@QZ4efk zY+%B(s`4l4Y3)Wo%TXRq(G}7=A6w@$e2RY(*q}U>CB)XUaqNB9MAGN3)5XQglv;a? zE-o!ydwE?0cw+(=&0%Q91TCB_hh`vqdfP~Npej4JZrHqY7f5?D{1bm^VB#TOV&LnzelRV-Ww6K1hIgf7j_kKZk zG;gfvG!gjIeQ?mD(~F}!BJ|S%+qH6E9jyKMNufjVlo;QzNHS%ABDUX~;3#6i44gk_Sqlk&Rt$WX6VR zUv7#dBFFHTgaGHGDI+(g(np}yocFAJ6>o~qxbNFN^h%2pChE<(0+}@Qe-|24m0q#X z4ND>Mbkg`E*eYXD#(Ug1zVn>7bOkut$`(^7_%<)*rC*>_tIY;xf=b_!fxwr2*& zNZ?cOUm7rfSn%)K_Z2yONUsr~AIc;=XYXyCV7-cCh`Vc@+O9lf3V3~6tD3FSkGlLN ztZ=zpyeK0N#E8$SLcFkOMoG{!09NSH_+_^VH=k~jEv`UdIH!f}{J=T6Lx3yNtKLhf zLyo~a0+kKxp(bJxs1mE+4mA`XC{Y>X#wmJrrRLdtRaFWKzzz*TotaHoW~F$#o~(ni zcA3S@cT;Mm+w0@L@7lAcCa(m1*I^N_oFW;&DJYU@WI&zVq1Yma1ZpNbQ8n{X$*5@< zS~J{!$Wiykz+An~Y8RfHd%AQrrOdEHVdiXQ{4O4jHe$ZY0440G z4pe$ULNE?jI zf~52oDu~pZZXv%FF07@zm-Lh7&Rzw67Zd17P*R%?H0hPBm2VA~V;{>!&vdAV()x2& zp(uBT3Uzr8iC#zKFA?f{-Qup~e5Km$;X;g|;V)-f-M#4_LDwN;gL&O_fW@g8;$^S_ z4!JlW_|K^)9ZZla+71eN$Cfd8fs{R<0uKp3u0{(_^wfw>&4hmK?Utj;!bs@jpIv5| zLRnDTcz`(}>uH+T70q~*fsDT5p^HUd7Q%U8M&c-XkHip&jy{c}v>Zt=Wuojz28AR9 z6$8AC0EpWlL&Oa6Dh;9bxr{mOva4=pava29m$W!y=>ysKURgXRVnTz59YjNVlV&e7 zI6s>W^$3`Xd-4R$j0qQxf#MA~1$jLOb7g6}GW|{gesP(*EpzI$my1#reIp1)RD_go zX+>6@WkrNpwJQ1wsrGLU$Di1KOA4PMe*a%L;?eAC&rWx}iPh=`)_mb_T#k8MFdx$M zWFs_R?y;m&{sDLgsD$GYPpAAr{l9qHGq?TGZ+PF6T!!jLcl{u;SxqP#fv+xYYm;Rn z5~?$QfkY3g%mf-;Bm6p;hUNqvA_l{j8F4{!{rTvOanvm=72O`IIM_WtOZ! zD#vHPh)siiq$a>I_pEyv!bbQj=xu;rV>g$oDpG9fnGr7=N+@pP{cBtufx=;wTs?Cl zc_o&QSo-|mV>OMISL`JWms~MUMR@rK zKkZ$tbWX6!;LdbT0vCKIAe?d%>vEMcW8JZ5|G~LTkeuER*~n6_$DYLh*Rsdl>J06D zI4i*58|z8A&aOY@X?gL0r>P^|Ss{2Ef(aKUt=`7M#HF!uuh6QOV-kl>0%~-6PP~Yy zDi8^p?UC(lEw~mdvl3!zb^^W*u67Awa*BHOSf)wDCg{47OJrIerUv;~v{DV1tz|C7 z;R6GJTT%?TZ3X$#(kthD>UMvcRZD`E6K#a$>}Sow0B^FUP9Q5r%GF^h8MHhh74d*B z!6)m+5aF=jNSLe(70>OJ=q!J}hG1qSjSN-WKDH-j1G<0EN`-Y?;?f3dzRl%dUa-D8 zUHTm7bD2mI5yQ=CW8>1LX@4gUr7&fkI@gpy86#CI1(G=XfscU>+YHXTP-ck-W*%P( zaQTvKP&#U6TK5KL&HBaQ7if}LC(eC?K2}~2Qf%_VtjSDT)^8AIHg4WK^)zleDs3sN zVj2V*59F!W4qRpl0ESamp*E8(ZZkI@t>i@K!*PJ>Z~IyBpwkYf7p@2!ReZNiwf}QM z=enGy&9W1;C#_=<5U$@eL1%J3{)d;}#FmmEa$BEJ1sb&-EZMEhgGj;3-cz>ii^c1@-n zac)Atz3i-lDWn{om8kg$nnSOgVV*=RQ4S_iPh7}Auc{qmp({oOs_TH^QypHq`|$SN zx(Gre!W4d>L9%c}*n%-ouj1>D!@8HDM`>VwU$1?qBFR@wx5uv)__mwKcaKk33E&tC zL>ZJ}O2WNA8yl$Ylxx&cB69h`6KnD;@55C9J!v!Q!`s}zkU~qeVVlM5C9AR$Rz%Wg z_tE|2uz?%W&~JRjsn+qh1w@j?>5neYAenjfb#jAsjApiK{PjIkp!#2JhI*tn zi5FQZnID1B?y~Ar1cY(^lH8eS7^TLGvkt5vcD|XxQucV&Rs0p|j*%%J+zri(X$1`< zFQ&l&zskPS!tBGBW}RfLp2aItY1#?-?gjm{)Vu%s6q=QE$QYmEnJDjkL3wS3`4HfB zgtQ#mF?KFIHxOR9J}l#f(9Qe{aNj?|=x$BhtylarNn7?07AJU}$gV3uDOhKqt>*-B zIu7R8x*AMxaY_*r_Vo?h*P@8`z~@p$PQNj$iYurLR+RJ2W`CIai`N)7?bI~@(=BD# zGwcLFk(t3=#?O=G4k|0_dV?GjuEz}d=$()nMXgW6B0WG}c6${HH<6I#pA@E=FvOuQ zewc@?=z$w;T_*g~Bl^J&a&b~zH7Hx&Yo#g~fm=5u8-MbO32@R^_F+^Obn?343Z>sv zO>oFt=MxB>Kp;_h$BwJ_EGmi}8Zfg5grQa2^Xp#qAh<9tbH)w_S*rJAmKlrW2?iFG zPRrCxo>n!)%!vI2KvU>*(!roN;Tyx_X5HZQX9t24o)j~jTayzj)6P1nb=!;UhC+^&ixQ&&WTvQq5BQKl#cMLZ^+NG^$*@KfKVv{6|QE z^wDQ$XRGed-zX-1q-bWI$^_G+H~;C-f#sm*9*NCeRkd$>^-8rYlwYqh$-h9}RV(o# z@nSZ)(>_hWF9x>j-QRiYpm+Bd*74#BBCi?+Lj^C7?<;`6rqiZ1n?Tf`hW$PIS#qCq zAx{8zD8}w0;)rewG=cte2LC#!H3-z7VG$7Lw6*WiRxgv+RxSp1$!7`5geEybpL8LM zeG%_t*$2p4{+rWPVadBkPJ!l!k%q+XW@*ko&C3>Spg!u*S)LH+48PfTQwQb;ZYdhYca?}`rgCJ9I2{BotiHx5YNr5(U?^=TqBboIp4m^J9`{F$Sq2uC0I8bdSZ8htYJT(|PGC<|dJ7x&>xk@P29$miAwP)>Q zn$~Wb8Nd6mg6_ifO9WYT_S-20!-E#^k&54g*o$c-yP=(*RN~1wedXW~Avd*OUgeU7VhI+w=YX+;ldp{-FtDr-Rr(o6hAb}K zBg@vJ&8Yr4TwTu@B^p`&-0q__Gca>)=#wy%r1Q^NXqri*H>lu{P|eSdvx=V35J)Ct z#k`p6Sx1L~0zsRWi)A-)n*bTAtU~>)12!hxN!0&`lgZ~Vv+3CEDqIp z8g>(%I}NAsK;a;}f+73EBB_*Gdqobu2K20w~5`(?*P zN?lp;+#>{Xggg`o<6-m>E9f@<+!jdKBhdiA`}H+p+|3uJ)jDG~{BW>AtC*BSP2^Xg zp`DnOaNt2yNYjL5spqvT!wYhCGkrP@i*+ZAMPUk-oQ>#89I)mS#f3Uj&t#6G#!jd! z>9|v0GbOk%N1dNjb^2V9fcq;_A!E`dOu=%GYCjK;JUt48N?vX0%0lq)=a+x?-&#%$ z17pb|{xj7z^8P{=39ufkjd0~X+R7_}8!zo*;&l9h5nDY^P~PL5C0sI*Tva$@@U|1d zdWyo$MrQG5q-LX^KVyWfb$oTtAcuWjN_ZB9Yu)j?$ZJWJO8M#4PyF8&MXu1Q*0Lu@ zf`CfVT3fNoGEZoSoB`ioYqz<7BS8xgFPpbTwT9JlIM)0mvq({3B77NZoK0vs_RQJt zCUYV!Md|Wb=22`-Mn|5*4BOw-MXqK|dQh`@52MpTp2zRJ%ESlcahO$tbsY*De;sWQ z-k)6akgf}`oaCm4)P|8h44hOQ~ik5^*_O2n50H8+|C?Y%Ln!nANq(Imi&J<4!5 z%rP(L@C=6Z-h+jZ^-yXXSx={>sG9w@crlGjWzYdvs*Rwg2Y`$8)G=f0ZbV-%KN|nF z?t#l!l-eWQh$&NNnVn9JkPpYMX4*|j^x8m{d53S5ecXY><1eDcnVb%f0HH-n=qk$8 z_q1|9JwNej7;Nv-PEZ=S)S44J8c@7%XS>}UImOT;s&q?x{2{PJ$1qbCrquhB$+DrJ z72q=B8zKM=iD8ZjTT&aymy=8X5?=@1cSf315ga8sp}l`mN<*b{dJFW3#cL?X>04RQ zeu5`cLlSXe5yCEN#tp4*_ZwpSrdk4f>HLS$_t!tQg&c`r^eAI>uoz^aExBOxWx=l5 zU4uT%Rf$$pXo`4A8i{8kDxg(`ZcH{_OS<)VfJB3S>SE5GpJFGHWH%?HC@nZ&st*y1 zd&5M!Sok7*(-9qr>-z~kDyBt_1Gre-d(I5}s#Ffi7s4Hl-=OV^R<5@@FTlMl7{V_Z zp7p+d{Gv9DWHmktX{zJ=wOqlx?%;$3O2zyC0wF-&zsEKtB=dQ{ovr;9tKKt+xLxod zh$|r@BHdmN+D})+8+z>q^)rqYEYlb`tHk2$gNLAD0t)7}}zpfUD z!fCn?dJo^81`-NU?al3lzw6U~@}zM^k4zVB>P#<^fIPO*yQ%CS)xY{L1`?ck*p>gC z>ipDoFMuc3w~@2Vyh!F)h|S%P{8hS!Ax;Wh7A6A&gi) z1EY|PeT?`Kt4OVwTlvlmSUs2q{6&ubBBy84i>aG+@iH2S3{iPt{f6H^_f}Xq+jXDy zF=*fxyqp^56Sg@v%%BV^v;mY8m@@Yj{ELgTx)9Lh@j7q_DEF&c|6XQS%OLsxzXfkR zSpyKN6Zgd)oI_XB6M6_22F4`j0EJ3Zh zt$|(rsnEWt>;i(dLFgAuUn!pHd1y({{{E#n^}{SMgUv3n8teagsu{a-U~uKfq80V4O)1vG!L%Xcej3l;CxvZbA;>{H5#R(AuY?RwwfucPr&+>?WHy)(#VBuI)DUclUF%L&vcnCoEApGp z_Pc@suUaZtU35j)tIAkD$Nh*Y4Nx#G;G_?98%$V34IK|Ix?0%~yU|jqPcM02{{Oc6 zJps!S{0^h3Os=|Vn-c?-M1HD}MzzY9h8NwSW9W6Dz6|<}UmHoP&J!b8q7diX>m-yX z)Cx~-qM|Z-v9axzYhLwVUpg%$qi`q54XN6x7eY6QmF+e{8GbLag1n;lgW;*w^N*13 zA`122CRa&*;r+^v)oP&lO6X%vg(TAntMbBWX9UEsVQB6&&Gc2Do)&a1EXe^XJBjM< z4}WWF^@Bcv5T^^7dR|b$8=7lI+JI2G*1T$M)MUBb!nzPx2cMV%6AlD%pX-TyF#y`3hAk<9SHX`BdPyxp99^4eyb0z9 zAKbj1N0x8C>nIgd{YqN(&U@RWA%NbiR$UGJspqFK=T>&EVGeRd-k3t{u@342(iGKP z4@o}&hQkQ^0!;@GL_Z^3^Q$JgXSiw%W709OOh*mO1Ixt#pV39jlhH;(#7gAoGExT9PA7?_Npw(DP1C25hDA{xNVWZ$? zr92{xX?VWh-mKwrao*pG;||0IX*gC8H2uM-VwM23y!|jlmTEX~%fxN>gAKspar%aR$0JR>UoZU*>Hus+pBsan#7b z+6TH)CpSjaosGb8Ytb4P@of94v2_6+hcBxl5!JXJ-`qIM!G{hH-wm$Nj}<2m-h%@f8x8lO<1AcHu$ z(WRW+Qm-q1dV12PNy5uFwin#ZLgTx5r4GVPoxGPWtJA>-SYVQc#blRnQOkH_4YmcR zHPBJ%{*|$2;v9?vZUs|{3_`5=Uh?_rX(KbQPpc3&5PYEHK2S6Fmg84`X_knm^-;=u z`r;4ibNyv>B#U4o5WN4}Fb-11o7iaGfems}GMtsz{AFrnWFAj`RJ`Ww6AGTlcK=oD zz=0~2fkwxo(-aqKH8b^%OZ+YWREtaf&)ri&gKl#ocrs9DwpTG6j*?ZOv!`~TFcn9M z0DYt9%t4nXqpnARe8)Q-X_>3EC`Ql-HHiy57?7?ewZ-FdWlPkhf7Ae{-<#Am(YvEj zG`SB|bkKg+7h7hUG#ne_bc?`~dXtWP@NQEB8?DL`ea-{zf!vgFzLgo6jg*if?}izt z>zb1V`DlE3cG59XUb0jimJgmd(>^?!o%RSajNsJXoJ??h&Yp?_i}?;3;FolMcS<23 z8wm+LoEldlcie9WudkG1Q#*3|P#@d;z%1SC&aQ}dmAO!;kM80aQv|YzF-uJf-iEcf ze&IIJhxA%;g0P7VA4*C0leAfy>A>uu=d7xmLy9fQljBPzO<+^}S;054K4yASsjB@{ z`;gPX)AHHk2;ChI^iPL1kBVY5^DdN#Qu(sWV;_WjF(S^1MAFYzleYi`BRn8SJ0YKS zLqkkDe>b^m5z`+zLQG#HLG3~Cn^L{69N7h^+Vl@70^H0sO|D?0bL%-32(gER{|LH3 zf^MTgkWP9KWaYis_bkP8;vX(A-8P@Ife55OI^f$)B_EU1yG$ft#ma{i2Pt>$}F zN{31rbhl4JGDHo(Sw=W3m;;|_zxq%&s)oLrm8NP|0Gptm@(+;=NKi(z%^6J86x~7X zXD2wVA-0WwE%Wb!5ADy!Yx@A`?cVI5KC`9DXY-=i*@q&6h9GKeF=ET;qAER4I70Z= zle~CoTdH>J6PrTrsKGrXjbv%Cey4yn zB)w%B=WFb*5D4y&b5TA(sYX>RkfL@GPlqPOw2PmT--<9ZrAI8tl|U?WpPi)t`9gl= z6A*Yx;{GD#q7j_HCfa;-BM2!b&7u&f;n0Vz9E&91c6OLnrM|Q4y##kMlD{Nq6jq- z`98>Ir$qeWvIq<-ouM*WQwc=5LhL3|%$y3>Ya5}2weJ1(650?$^gGCL+tw~qLj86|o^+r;x4ARg? zAG;(NkU(yHRc8W4zvpuLw8R5AP^jrr)}+Q2z;w1(cp@YeCpLCJ)^y9V2`qj^FVfp< zh51{L12&l16KyXYhLAXhITj5Y(AuXk!JxQcZ~F!1(FBGAe}^qJJZxhk5=6NnCFaix z=piVpj}7Tp+CG3exo~2iM3IV(%dW7kWAq;PQdgFcz>{mAY_3F4huo54#O_fCmY$@| z9IBD!4)T6hC|PsXHhr#}NKJh1IJPH4O;&XnctkQ5qO66`59 zr}4lU-2eJ4MM=$pSAf1hj>+8K)=F`GL;SSZP{TkFpEDRc>LD5o#8Iy=xtMRm({d$%C;!-#_&%pO0 zweH!6H-z%sC98MaRjZi3!qn9_kx+;_gRuX??65x`B_Xl9wJzMJRVpoxWDYL-1IF#T>5>!Lf+)L^P5cIem1N@nXI81vdZJPEknLq+? z>_3<5+8Xz&y@UEzra4=)&2IbXA+OiMI^t+f?(1iQD_v6uKm^$MpaCa;-6J+r$7 z%a~q$&R)2*bXL9NG=VgFTw;KpyfI|L6%3(6=5adVaLJ60h*I?ah2NPfMkb1^gxSSI ziwlM&HM|nlI@s8%U-Db6$KbYXH(!n9I{#Qt(S;#=W(WZA#j|^3yxdhXc%Q(L!ZHp^ zYEi7U4LuP#E7)}F1~BAmdOS+0G>yW{hHBNk8p8dx`FWy4g4#%z?`kn9W68p=F(m?8 z_WJeYV2!J9=l8@q^ZSL9Gpi=fhAoPeOMD%lEdaH_%L@c@Dvx(LotxC z97LpL1RM}TXfY-2?u_wL>26&9=aRmHqDkSQCHQ0a$L=@2J1r_sCth zkpU+jqS$3M3Ek{Xsvf{JBk{+Zq-)yjuWQiJNsbKvv;s?E9@Jqe)b?1C-&WfFN?){C z%?*f^^&(W)W$^iFE*mdjNO-cdj`<0P#7ZT8u^ss&V z!5G)!d!^&Ept4;olrzVr#{p8(m19*HM;d>_q(rm=O%Mn%?WjW|G_c&P(~9YFei$3& zRMhvng!KUd$IiCfh<4DxM@@>V5Ite`rLEQm{{8{iCAgvlret$l{>K*ib5n6+S@OPY zt!m8pYzksHbj{;jq<0OHUcE{x#4 z%aY5c!$QS!Dp6nA71lLn;h93|Va1``nUv0E?Wov4$ei^RL7DO;WW$%ZR*~bF=-Ucm z@WUvpB7m7@L|K-%hg}4v{9)Q5-kOyJ2f1C#?#n#fwAhdSI+)s`SHJsg04Ek$#}+sk ztk$OrYGaz`#PUiuQJqbc?WMwtsyH$nny$lm+eudR8i5lUZ1fQ#2HCHN0Z{sy$#@(t z_piNN0}B}=fJGXxB= zOPP`Uj5(t3Nt8O&)I&0s>dNPs!N=^?TTA%AA^W2zdxF;AZ}s5P3u}Lz*{<$LC1SE@ z#u10O!Pjxd$s>@LVL-?ETf`;Ss5etiQ6Y+m58AZo-bfPV?ox#%@_?{&ga?&twOE2j zHA21~jJq?x;zFfhB}RZBEo#ewN6r^JSW;`V@&9s-wao?Si)zpEa`F7ZP2%v};h-JB zdhx~^!+ijmi7w1dG4AvN5xoUl7qdbT`@A~{OW4|vtoFai$Hud{V^$Qdzpk#reP^3T zIucc^|8?9PhoBw<3;V@G#*$6B(n4rbV>6Qk^z3w_nGBEA9<(PCq{&1;^$OU(Xv>7& zoqwe)?R1fSOi-=%5q+XZrlR>Fm6KHuaIb$g3-M3);A$tN?J1zM`9Pk{h7R=eNLPbz zioAJs3{12NVWFtQf3_}6fQDB8(-$n;x+Dz(b_Nd@+3x}*wC_>t70$OEQ-1Xf(@al`K5vn9i0ST8%oasWqKtPCQSYq!hzf zF~UI&vM$m6&+9A6XM9wJ?w97O{_bpg^#;-kd}*NTw!psUrc%8@CsQe;IP-Dr(v$(K ztdd$wr#eWxxt$pnx>|MU23Og>cy{v=J-@}5-_z7kva9&-psp6h@l=Ty*qB71%VE+&JznWCUMTIx3~M52B{0vkTY_++E{QrJNk$y`N?FuL1mPG%nmQ2vs#AIregg&JPh-h z33wSLo*CI6$i;xVby1=v%B3A0A*7kM0A#O%+s#+m`eY78;{>XZSvV5*4~$jib@_HyK1Bzu!SZ7HI0WTi?zpB{|iPesn||uF4Hc4^9NABW*dC1jm!#Hv`oD(BZ?uP7cDouKXq$k?J_|M?=N+9HuOl zrbe6(;k{U0hi9j~Tb!zIL4XF@NTm%s>KxHW59{#UA!0oDw|5viIjVbj{d_?zl4rS+ zo8AbEKSVgH1U2lQsFBvD8nRPQSP1U72M)qo=f-&(ijR}mqPHsW+Jno-qWu}L(xoINLMk{HkfwyGKo`oPa(2qhOVaU2+P-7+oG|iUG5scu2mD!iQu-Ju5&6iOWqkXMR z`B!8O6mb+jq!Tj)9 zWHtr0_NY$HKXWL9&V}VDG@rNsN9<2#t#>E7&8_0TH%R(`rO7sn_y{{7&Ik-7ipMp{ z-MU_jUC>c$z%tcKpabgN5ZGW!7ICSY+dql@%AZ6w?v`mYPC! z9UKPj!iJ|%SJcW~cBAl#E+{$=t>^RXhzPe0tm1ZR0{C8C!EQ$%TcVuMuBjM#gi=}l zqchUbi6KHg%{)Q9DXM1!97=3a=cGZS*$n``g?^meccHmO9yw^3CVMAQ0A;(%|Dn-> zgKYe(nEqQ$r(Ph6lzI?Hl*WRJm8|uvB;@EYrldCBuO1UEcGbE1$`g`9L}8(^lz>xt zZs#UV$y0h*n=OU7(FT%cS7FXgGD_h;)&=C;vx|3rtEY~jJ$P1lf3EP(Zv^Z8`R_U~ z)WP2>i?AB;sJ?7167hmXs>?+8YvF|vx!IkY1MnM=s!vr;GOfQU2-M$@=zwuhF3hTR zHLsa+D{x}q(rA~?2?0Z5n|CH9YYddm-h-tzRrnLRcv9b5$ROxw4Vr?D7=IA{UZ3N> zS?&O0m{vWiI0O&XY^sv&KuBo$-2Xh+Nh^SsIdWLwz4gzrt<=uO;*kwBJ)^6n4|VO- zaj=SuMS$rB5++l+DCyr>Fd^&lVx)ym*Y@%xlKB zzE|b;eGb$dw#iPmC8-;hc1I%I2XIMkS#feCYZq)rn9-GTwIiR)(b$e)=7rMUL(TXV zGNuy()OqoYbEqm6pKn3!vk(z?$$@R8G!07F#>>*h05D!teC5UoZW!1<+S|nw!KLDi zz5dIbgA4>m$plW~ruiSM;G8zeC|IgB{mZxIOmia+BFJYDq|vq~I)fqRUO~EkC}H?q zi`C$bI7|La)#f7?q)8;f=Imks5EBV;ixxMne(nzI-1BO^2=`r)uNf!DA4L6QA-}D% z|GIJf;54Q7X&@m?gG#o8Im9`&PB4af0*^dE3H_*cM*kp zOJ3|D@pw$v3dJsFeCJGHp}k;{)A!F!94RN_+DA+w;bOJTH-2W*ZIxxWjXUJ%aMDDc z(%2^TzX@8u6LTXVv<`TlNLpln{?^d=*uM5WCv|dR(_}6};f_H7YqKsu2Pv5$s13W~ zk5jBCG9W=exyR$u+A5V@^!q7{vLnarlSYR0bCJOXqGU!somgkzwH-Vpi??0xZV)E2 z{NWEMZbePX8f3;LWh9d;LXC5)w)1+Nx~l8YkDA)CB}CCrPHQIkq#CT~M>JbR<~Rd# zh=HlXO$2+$^LyyMNmOP8tJJYwW}iNd+L*ru{fhSTl8;rGKuiRlevHn5ymp#DThF5^ zKO^=L7i90$*;wJETQoqI;6cKmw5_IVV&8p@Ol+0Fc;i)T8pf?H#*js1qQ`#S0H!Wa z3f8~ck8YA7Z}AJjAc&5S3kQAmPcC0D2x-Xp7=Y2Xjer)&T)HDDhOWNP5mfhDvj6dx zNYSc$IT*S-G1;1^VR&oZhu@->S6h7L4q6koZlsSZMm@2aI=_bOFUK4LG5IqIBsKhK z0H5tCvc^Lb4ab)4IBF^SqM^n!fN=3+F-ibNJ^lJjglh_V4pnzW50T1vlf7 zS1QNdnbS%|d#eLo3kie^c6&-&uM&Tikj{+_&<4&oTHYJ%C^kNtH`SMyJtriUtPvdr z;U6w^=-a%-)4Pi@*oS4I_X1oVMEvYiIWLEr@Go~dfI%v&lpS}Np1QYo!JJ$Y+vH(b zDVpl6LV$mxfUfq8nCQMVi1&}#N_E92q|11@D2?L2k@IWy@Iw#1Xb+=se@On&~G*L& zSn?m}W9w$`ovTm0YjPn_64=NOs&p+)wxvTH0;UtsI-hi_VZ)}q4fBBi&mWlth1kOD z67kJu>$_;;ll0IiKst@02|cLT2|UCtQSG<5flW6M`}fvc>V@)65~+G;xv7#Yi@rkB ze9iD|rDRaW+}yj=5ay+72jEOt!6Qq9jij~i2#MK~1AU2kZEfCZMjf(i5cgk1K#sWT zwJ@=M>%8v7e{759?U|u3QCC!O;zJKcW9R_L$GsNfkyG4c6e{{TR#6G`09-O!3M6g_ zF%Z8?@*ta756Hi$-j{fGb&AEUqG4LP-s!26wF9Tp-AnIG5;{01QQV3J0i?so#(bSA zl`>o)4%RtbH+6kU^8*B=eq?PO&zQWohV6@x=X};2!6}dC)lpRF^k#hta_K06NZg;L(CJ4(oMl`1`hvY8N232Gk~0u{ZQU%cF$YaTB4NH}sjO$6s_! zeFR3+7^M!jd+Ge#!iYc1DimPa;${Bh_L3oO3@WKSS$ErZ-e$eh>`B?r@f~ znEBxrLi>je^jF$-u*@iZ9NJv8Mx`!X70}Sn|G#oK9B; zw~;2S8Pc}E=^RDes)Aes{JUHPgC~^yg)B+dU@dNIn2U&x0WF4$SEF_b-fS80nsH(# zfs?;UE%yjUUa<6M`j<3po1;;5YtR)!v`GI6GSdn+VnquPd#Vdx&6*mzRh>BT@L+JAnLl$MFnev9ou;V>cyf< zAjUMnxbgU9tPQQb#8FN2aMR(<+*tgrmJLoyrn%0S$LVHWr#l)QJRlEP-~pD!_dWBT zv{3~icE5R8$`qE{BzR{M@J$OUC6$dlI7DFSfA124DM|Nk6JhKIQDc>_eCU$A9%ai~%n|{rH+73+p$ec~&#ig@`NY!B`0exKz0@J#~A=irK!fHi*i!XoNRWB>)=s;#3`2OFweK2LJ$9`wT1wwN8H7B9raW18V~ z;kV33sT{*DQ)YXt!B^hBsk3yUsOJS1=05jdIFL58A>VidKD-0ntD9CVRVMjO8UZq| zC1N?=iM!0!HiE^zNb&bFV!a()7>i4qao)QdOr12LUA6r~UI=8tHZ|E@!`cg_?3;}} zLLQzerme|VON7tYf^(+!^oHaFTn&Ti{9lU%P%RAAC&Vug`-swZG`c*umaXxDu$nTA zbcl3q$kgHQ<4^fSxu%livJAy735nklO`7Y+qn7jC0v*a)6N@BsRra-%#{Tqw|B=12 z??ox#DgrLL2vSZ@Z$!PD zmknP}M3C$zrLZc`yFPyrz%>11EoC4D8?v`vj>ErQ9vB8!K7tsLO9!I*_vpxl6QrY$ z?Nu&qw=%uj50zHk&fa%u8;$M=!`7e=(9Rq6Sve6-V~9G`?^YTP|z@^BCu|?st?9n?b87hnuu8lb7Y}Y!9l*2yAv54M%%O z^$_0@{lkl983LeqA40c?p4rfnTx>MJBH!5CORb%qJI6C<>NV%%5vsd^%|H;udQc&F zY$RdudddUxv|RYt_AQlRrCgIm#%u#|#2=WZ;912_R~%A<&^RuK999M@BtLs-rjD zic1!DLod7~`(_Bc%&IjCWy9!yW`jFo0d+u|*V1@#B-SUxewXXBvbn4#p#W(QWMs2F zycOVPKK}s6BwaL_=t#Bejm1VoOVGyysehmnCMc2)$F*>SHyK4a8U~R&PIkE?K8_S@ z^en4$?!i6vL;c8dBv3Ov>Tw?!AO^|eU1?tKE*Hpx&hOSD)7J=^TWEobWazrvY~dIb z|60O90}DT7YEDeYlwKS@o_)&Crx-D+$9unbR(nzs&4=}Fk_PPqFGJESLD!AQ_I0|| zZ?K1ds8HTny#xW$p}D-fcG{264Vl*MmhzgW#l_db_|oMeN3GEpbU3$G1G-;#hZp{( zElLee=l~;~9QN41+B>3O5^MaFhtS5@*WN0L11n-ReeP_B?4l;X+9y)ZeN_}MVCfgb zL^w;l;VjGv3`Q>cj@kRy8T1i$PNMC6HG>=V)v=>4j8Fu{xIjcK>P-N_`e!#wZ3UrA z`E?0257JnAwW+yIpwR4~(^%FZmjrts!ehqCh`Fo}6#sN5NE|p~qj!usN=SIS=_!SE z9AHHkmOAX}-Xz1nGM3~BC33{#3;hO6qIsUG*30v4{B7!sxDiGAA^Ms-Lxr$_V9NpQ z_>EnimsVj$c_C)a$71_TT&(&Iqg9u<33_g$aZwlhs;X~21abz6-+A~sIx-eIDTN-Y zFy-qVC1e{TR3wza^=mqrlp}`bszlMNk4Z>4tEtQeCQQKZEn*^Y7fh3UC2)z;Qu{;P zQT1xpIbq&)n9?rc=BGBkx%k-G3Z_aXQflCJZc@e!s^dF>Bgh z7MGjs3GGM%wVg(wl+lboHo8_l=ntU?V$N--VN3#~wZti2*Q5Q<;eI;GjzZvE(gDdk z^^{^=3l24o$8~VW9~I?Pw;yg4$`j5>${H2lvK=8wr3^+)rrC?2@)y~taYiHw#X*5qT??2ms^Y|TwNx@z9$#gH{jwQ^$S%I>I&%V zwoJCsv>473QSXw2TZEVwgKSH3L~>U z-P?)iTgUhky09TSJe~#9G=}6@C!OFzGlB}|WAmm+ik{C|3eVlCSHt@FvkUBW8U(A= z;^R2Jb++6{lJu$?Q_BjL3JltT5hRRyW!eS}?*;&X`LaY~_U!BkM$7#(#tLE6H%-RI z9DUpCt#N3c#H{m=Ua5ZK6(F7#w!%`NS;y%;$6{ado3vc`P~eSK)LS~Ei5RFM7i-xK(?FXp?lqw{SWf`D+RuYLp$HZ8NB*1fJ1 zt793W>0dV&yEB`&`H&Z{gDroL<>a(ZhIYLygiU=bU1+ylp&!0X!X-WHeS|I2TXzjH z_PCyZf*a_ZW?utd`<0#;cEmk!6Uc2Hrjkzqr5q84!v=(nSeDqBKC*wEwz?AZY?=>Bo%uTMJ<(FRy`tuU|6WVm)t<`K!K$-Jg18#yfD#92pr?fp zqZ5LJ5GwG7q&)A-{)R%g3(3fFzf&(xdm2P$%$>~Eiln26h)k{Y~yWH+zU9D{*?_UW8nny&3I0#DFjuTt9!H)k*MGxg@& z&b=*2QyOi>wWChtI+5^ZJgyT~(XMO`^}2a|*dc#c~0aoc9f`AT*~ zper(=(VyjJ-nyh$C4&Csfryt0U~*pEnd!Jfs`0B&}2dh&3k_7=2(hj7V)vOYTW zG=t$Wpf_sZLpp_mAWN9l$9{c*GZRu-->+vmfi@%jS?e;nrqs|I#$yr>M;y<$b?^&r=I{v)>flP$dyChRkIDWBXutgAV>EF6 z^ED%-D`8Z%!vxDyv5?I%}hW)jOeO>PQ$A7sB$V^YUNV~QX|x^i!{ z*Vx1h9)OOz=|7^gIkb{u<|%mM8m|MU`a0*+3A2O$j8emog_J>-X>$rM>P*f_M(!|s z845uI^Rvk%>C99B(qY0lU8gF3iu0iF;RbTi8w?YgtVQcm?!FW%`s~=+394BLM@12% zn*sr_9Bn~$Gv8xW?qK4I^6c^Vgg<=nb|hyJZPqu@wf0h(`1?nQur}c6K}=OAz!&6O zpc8D^k%L>gs(uGnU;iRFl?xi`|)B=k;|6n_RiGbNB5SvKSDa)lAOM3wJNh0~!Iwgz5CB^g_J5RkipIWo*rA z@>IThGo~%W?=V<4)bnr8Acg8E5}CC5@8{g9m43e-6MchluVu@NqLJV_w5 zir)>e?5Z!D*#9VuD*}YOB(SeF-5y|Ya8#!*(qU##f^SGftEzv&z1GeA^k`dt@j=Hx zIArq(;Bk-Se+b=>8|I6pv`l`!??9io(Bn{)xl^qr0l?*i9T_(<%;mis7`Zb~M~&Lt z`>>5tR&O6{)G&P^%oB$^Pio1`zB%AJj>C{hbwwe;y;TdBOk~RR+ll0<&)WyYDTN1) zU*8AIU1b1HYz}f9Q;?uN#P(w)$Lgu3I7yAOde~YsOAV-xlM{(gFP3N|OMv!?aykeZ z^;;?_@Jk3|y65w7!c|J;L6h3auo0pj?imRXBfLS@_UVnS>-deb1{3IBSXyrY{~7qE zZXR;-(Qkqvx^eAh`I2C2y`a7B28Y0j)1w^7GQ7=g1yboHXOAY3M<-3QG^0$pfcYR5 zO#0f*#{$x)$8{-ZKzT8hhPWjGZ3hFInkC$;s|at`bPu2RV_ebV9Ve9rls5~kxUMm* z2ZQ7};_1aWz`@3DhfXk_wCZ{qzRAJ)j zYckokZe%JwuLSWA=WsabLr>QP3GqBx| zxxNfJ{=7rg!QVmf4W|`5J^E?H8hAL45wciU&%)Fi9F3lMUw(CwACEP~4B5shWpk}i zlQC;sI^;cUcUzB1q6slPmTrWie^h1>sJytmz&N?UYJltYAIb{J>g~s4T32dkR>Ex_ zh$paN3;B5Idf_sqT>vJyx(*b?)jqzA0JtfIu~0hmTL^n3$T}&pFPoUrl^zoOyO*t2 zcMU(7=H|k#`G^uISN$OdT?J2BW#l&w}u8lX#|7ZddtH4K` z)-MAK_ShO8#yl~X1%ia$A2WqcP1fl_!l+sZ_QR(3AXc^~O*t_G@*cDG4h||%>_D0A zU?y|U4$LQ!1!|9YOAk&abNs*t8BA z6xxSzp&Y`eq1&oyMbPg@kQ$`h!&!TsNd>N%u=tf07AzFAjRqKPYowC)-N8lL)3f`g zF|oVU-)o{{c(_$_<#)`&f970Pg%{3mzzdxa@s@mzQox1Nv z7IWRMy>_X}_ANV#$Iv&{NI1bV{fbX!g7}p1|6MXOGt}rekSJ80H{enQW5g$_E$IXu znFY4Ke_1*p4_0`>kbJe*`7~0NcUL{{Yq*x&n=Fg(8>%vCv#~k3O@~CtDJKw;qci6t1E;Zp3OkGt#@2D1A&vQ5WcKeg0#RGVG4fEE*L$s@gR3(>cS(9T+>b<~cFJZ%Z}g|oqy zbZDo{b`fLdV(!?cvF{;#5C6opCHz;E{=19wE- z?a88nmuRiZZ+yZ7l=NOPwsw##SEK~+maD<<1TyDHAy$tkJ~Sy;tp10m_cGuWVg8L} zSXh(4XaRg9o;KS*@RR6k>zVY6dH|Ue$;SyW9CL{RvrU=rc`$j2mJwDak5kJ$N?`uG zK?;UZ(^G?__&%RfMJhjLx{fO!X&Q!E(}53fZNkIf^)o`3R{{jsZRwMFn3y?u|Hn9J zgD8f9AO=pHxcm5FE8d;jyp2)Pi2sR{rb)D*1y<*L>`n)Coai2>n*Z5HB$t z;<(y%AES#9=Zv9(W&fyr3{PCa{;1EBaf7qqTAa(0=_hxq&F$n-Wn~j5SkDS6lS%Rr ziS4OWH<%XB!Bvr=m#i7$PKlrSmG+uaKY(nYHK>?Wem`|Nh&G1>?nH7V(w()we+Y>4 zN%kud<}+Ic6xqU!fWuejQ**@d1z8WN(n6Gy zB6v^$9=tZ_;Vp&6Sh>Jmq>&|%cKkgLPFJ08SY}qmq|Rmgrw?;ir%O|bTn)j?JC-Tgrh&VP~Pq3tcb3X+y6gdy3mr- zpD+gK2VeIcnkq$=uVDEZqe8_h{y{FsISU;hEZ#2{iyur=C0kNTXPQ1vKU!fqw3<0> zpX?)pAJh!itFY}Un(WE(1Hs#)JEo19*}e+XPMc3L|!s ze;F+r;Pcj2XkO$dM>pAZ@J#A?H>W*Kuz-tH`zPhZ*{*de1>EK(_LGnt4p$N)8uI#y zz&t%Sle0!!PZx}*zzi$x?Er)-aFy0V1>(7WGP{~A;>uz;gAN_+Kl&C{1D8ue+?#WaM70%PDu;FMMna;Z4cbcE~ -uj13-(z{E)S5!OF1S3sFGqj{F}s zdfWHEbbB*y!S6(4CNKY#e7<#zq4Y{+BaZ?P4tnVYXo!=<$Te+Tpqi68B+CZ(>4Ke$ z9X;ytZZK+f>4~pi+(*VQf!r=JHvyqsR2kfFvYll0rKRT@?XTu>dN!#(M+knOb*gWw z2f$S~tS`O@z7t2OB4md)!QztQ$W0nWiub3k3zd*!SPQIM1IxAH(1~mPmnn@bB;CW; zzT+^VLHW{?0=DC)(}#Z#G7)SB8tfYWGG2h1K+yN12jBQt7utSvVhH-9^T*~wHq2H5 z5zfN`j4BQz{fpjNS`51pR!UB!DW*p%H9AyK*GOT!*)iVYDq?N%SxLW6wypJFG~vwnzl@^AaN~7 zx~L38layX-2zhA)BhniKDy`kidOYU(C#a9y0fn1NsSYGohXLv2#Sm}ijx8u@C(GSF zG76f=Mx+N#kr2wv$p{}3Ovlla{`p*6jwpTEGf2hCrjhIAaA<(Tuj-_YH`y}nt(C&; zy2N->(AuA}miN4RpQV>^s&7#pb)pd}(jUa!*IHf3aHBzOo1D2t(YYSRQ6CCH?lEx)|l=%-;{o6+mEt+Grt6$Uq zKCY^NeNfJ>3U2H;D9iU^&Qk?n2rv>53deJ?fyp-l3)G$Vh|>@-kECIrDs))d8TgxVpSUGo6U3q7v?m0yIy%--OpF;3U4}YOR zcK@*2>9Ct#?>HjO8^&uA>(Jyl?}jh0M#?el9kd-?MR8Hhhk##KO0h?(Azh3x=Q4vn z3^KkN7FGv_OMW<`{-yM22@f%IzkOo7cv5pMjA7iZF>T=G?)(>pTRu(2^h3J$s>dKy zR<;=~tRMVP&%ofN-XRnjbcmqA3%6bwi!I3oV~0-4)0vtuWnF4~Wo{Cs-5T%jYI4_= z8o|4m?17hZiT68%RTtP9FhJEYY^UtdcIL(N*vP-((-&A5-A%rPGW(39ZyyZMszb}) zll1)2i-(<4pR_E;!V&*=aAV{ACrcD9?X0;m`6I@iy}IqMr4@nLoV zr$6On_}oQd1dZxYx2U7@J$I&%SJgNLRf*o-3aI8)9=6?;!^t5NDjJ;_D~M28czs-M z`k+Iacx!zaR2cq&G++*s$pG58%A^>jR2#Us;}wOO%HVlhKqQl_5=7xyRkXqlg3VdR!GpPq z-*sU=&3-m*J7oIz`zKy`VWhZS7D`}>2;8=$x2WrUUjj>fUyoa6x^!1NK@+{cWelpI zm^@@PHWc#f>pN-mD5a7rSR^EU$N?dg7$Z9Z=1Omt!6%n;7=1)u-%XhoCJjEgBJSlk zuD#S)aiy@wMbVew`f2$hyC6$H5W|PjGGMWLHL16$6CJ*LsHOUV=v^R_oDHo=S-{@c zS&27&O1iXBFfJuYoHi+?2xt6nBM;EywOOiJ?nD{!C?V1`Giu_gEcW+mqPD7+EnRBCqfevb*7^XVf-hr%3cGpxEpL;xQr2kSsp?)kIg&ZQ~|fVn}cApNS*(TW$9ZvwVI z7Dcb^&fr=ZHH2*#d`4PsZSvhTJdSagoGf~Rrkvvp#JTC#NGO?{w?h-@4eKZGoM{0k z^=Fs2r$_dSLk_z|g*RbJ6glp_cV-Yz`H2Difs+zvezNvBt-DSrPyYQMKG;tPY1ZX2 zw_QuNGXDb_cJ8d61~rBs!axOnzodr~kSwlwUC8_Ti~7if0z#UQ>#R4QD|9-GWK0m;>5JVex_KjduBwA&&v8 zK?a}%HJ#xf3)Phj7kVy4Yb>!YIzu6_nOLOJfUg3l^?(b6zkr$cONfVLT4?fTev4@% zENI6b--vfC`+sgL!j)0nwpzaRbs4f$$h#8p@LTDRUCe{(FmB3LF~=%d6%H-C(&9hm z%?YhtR7iFNf4;+d%|nl%oB^C~E>{2(n5|b*>M^lZq%OF*&FU{Bd9JO=@0)!?Gv;d_ z$yV3d6hNuufDQ%o@c`lJ?NUkKxlFt7T0Car+tt>M9AYE>8=e3UwS0v&-|UIv@JF+Q zz?W)Ucu;Ig@uf_3QUrC#PeVa=d5DW9(A_lk?uTfEjb#~w@})?bZs27SDH^~?Bcp3Xihu|{HnWiil z`}-MUR+Wx`6;58Db0mO~VsNOZ!))I1a`}!Yp|hT62AKlK`$W40y1&kJ9Vw}<51$&x zs$7;7YGYt5B=f8@;i^JV2B7Z@7ehc)X0z(oo0P9We*j8RIOpp|v(aYYZN75QN2M)}n0ypz#ajs%k9b_qVF`#K~oKPGQF#kzf}=%a|~UJ`A? zi05YK0E-xuUMG2(qq?5N zl&y+LX90~+zU<18q4$tyIchrJNIVP{xHr9}A1oa>?b*&rytm{UaPAq&y+Xee>Fvue zRRXHT>9MwG@tFr*hvjXr#w9Q>tJV@+sh-IYnJEw9>;#Fg!DQ{0hG7|glXw&%NF@i)DSKaxbJ48Doxm{OUN5?u#>e}!*AM6MGH$9qgF zMrnUb5mWc=0k4Uj)rU&q!#;_g?8a19;$(De>vqK{&#p{)0?G4FFDC1{c<7N2{=xbm z;JD3HL&MLfPQO6i%mb{O{cszo6k`J716kd@(^^EhrPjZEK*u2#%_2!kL~&h$YQ}ZS z3W%+Rg)%=Vt@LLKEVH%09b%7yv*l)DVt2DxVuCJ?3Tim=3f(v8QED`mpuH~&kJgph z$0by6_)k}4^;2cdF}X)GgU?oLNTe6<5h+9{)gR@uw{hz#?kuKvnf&d zSalRpPWsRr%CI>-pHbgg>hG0{cFA%h+}f1g6AKk2ioSpSM*|80S`wE_DW0C2kbn?ei<;Ua0o2(Ql!3Hf-m zrsGQGPGV&hBtHh1x(V+C=rSwzCH4uO`DwAqVZ53cR8~|m4h@b0DJ%v0v^y}BCF%vn zp=tyeBYR;kn4M#8_7jpTP@*>Y-{GU+^*2&yfpPEHg~OHb_8cq3%^OezhHDBn^pF#W z_MqLZ%O-9|BwYuSrQ!zmgk=(1zGba#57;`RwJUlwqhPhJIoeKQuhqIF zdcDV1We6ANUMQ&vZ5iFnun-i!B8$5_F76PFrU1a#2mI;A>n0kdTEk);9aqVo*lVlq zvl%Dp&4KLI-vj~DB69f1garR2lMEuHp%)_pKT%RD1SMce&i2}2)fPSX1 zkUse*ba5Vsvp;5GP?L&9lh26Kv1~=%{nJ4HM#g7l|ClavI1-h3q`Lr1_rc6X9d%ov z{*M6u{rGU=7CQJIwJ(vQ_JO45abn#ZstoUC=j&Y!PI;V&^ri;%!EIG1n=oyPV{9f# z+Z$`j%MuvzDe7S;7gkY~%ze-DxVGk>17T1@tuc`Z=j_4faPn;wm!Qt`pMhy#>T;dC1MA#S>sbu)*OzIa-@d5LjUhA3BU=mfocQmwWE zHhc}FIG%UHx0e<+H&^L$56vR6A#v*j#&{d0&HR4BTE^jNA4msyFVD2`XK;TS+8=gw^>FN1jIt1^SI95qs>9`uqjg@1P>MiLKK%)_|%kY%BU>M%r24ed2V43_~J78 zK=ge>d%E|4)MJ``lL+xALBM z|I$)3Z1JhHhxmhZB+O1>cL}Igh_Pm0imYIJs;`9f2hS}a0E%ewz}op*)c5sFt0$Pq z*-Fy$x_iOeLmBc&+O%_ANj+`dO4=0yldiPkM}lODMPz95Al2t>ll_JJ3lr>{{SG z;Aw=ZSG?h}E9~!g zs8VxMfFxbO5-SAu+cvg*W~B$6>5Z@CF;#ax2EB`^w^~5QT2}I>Coeq58+TsBe(ksA zRjNuDvjXwnSQ{R6!m0m*n4b0|uvv-9aM#XW=%FC8%g~&KBeAPvmfl4IBf4_?62#&@ zo5a`YHnUJ!VIO>}xvw0(`skRlLIyWogViV2C@@c=StITd*UxpeZEyS%{*fm2!iaP z4qc>&X4MC2{9@$A_`->po?sZl)ntcSsq1kg%GE}E^R}H1A<*!*$Yo~0i$CO~f@$V? z2RrnFHfq9C8k^z{NOADIu|)e$`0@@ntrFn-l?05_QxTBiSiKCjuhh06NLg|;7-i8M zJ)2<%#_v-gBCL6K$Vn0A*eo}lZ10$PVjemDzd(EklN0+FW_o!|YGPBWtBTDO3^ir0B97t?S%dt7-YQTl_xr1bGRnRR3eRc7_`&;eB%9>tx_oWRrJpQrLcI> zyAu~q(uI^hNvWT!_Fz95M!LJkSK!Q|rC(a7mfb5cp6V+w* zI~B^(qP3+QCgP8MYnIj+IXBOKyc0b3DVA}NV$r-1f(Vr`eanFtDPD;xvnj(QEe41< z%fB!x=`vyJu>U@;)o(d(2G6jVWy6^3> zxH`|_J|`F@z%0>sFqJxe+FcS(brkWk6%R@4hI8Fi4a{AXsP z&aH#gj7Bb!f)$xiQUqKq3LRvGa@xmX4Q$S~Vf`2uJ_rWK;gJ54@B!W(?fOfbi*fxx z3-CYV{JC$khhK%}y@>AWxw>(7NkEnWe5#SX1O0rIV!q}9r$uj8_vI~Jtz??y6lfI8 zaD)ijJ6K7%C^gv|T=P%{A`NNYUN@67fNH4LPii-+h}B%CbWVnZk%o}sja9w)=3gY< zzIg4}oYc*ZJodl*1qc-z$(4OLp zUz>tMoLd$+M1zl;dCSV9RDFT=tMjEw$?KjGHE_?Z@jfB(P?V&J39Oru1hAq%tN_&( zztbIy4zFaRq5wmU%I6(-Wh&(P!QqW242Z{yxkT2%;cO;}N>k+s`%ABZUIX?zX7He{ z(ju)fn9a(zx?y^nkQ?4%%KcgMW3~R;i1{jUG>75wWay)D86|wx>+dVxxNhR6d^>WX z3rs$~lG_`)($(qE6XJS^nX%*lp(M1+BBcLmA~LX*Z>W#)^C7^n%KllU@DJ3o8wbSf zzhnn+<~sY*=y)70(W8q_CS+@!^M4CSX>{rD<+5UDe=(sU<}}C7y356*sS+*rIQW;p zzrUfv71vo!)xOeFS{QnFxNQ|z`07ef$K~GHM|LFW3W}Brm;mFkiQWDk~Ql=W#_=Lx@t{#rIkrtn(S?qGqEO z1bRJX*^iixpKMQmpEf(lZ#OABFaInc*s({Sur0`Phac8A#wQmdHDB0bAI9rD9_l^k zl9kfmEXl_Y?J8qTEZp3>B%|ZBi& zFzqPF$1c_KXCf191JbR#C;+Dg7*z@?X zPC)OZT7t;<$KWUYq++=)!<}GXn2z^THp5*6=AD``-LhSb_7)3@t zW&#^fdpMr_?@wBpu?NteHDSHyS{5SOYs?{j?s}HOR}^jQIcD~KL>en^_33a&Ne?-h zl!Af)?DTo_HAUv#Kwk+5$4) zn63;T;obw|AVmdVy2Ki3u{!ubBy#?KZ%>Z=IF6ZY{B{%~T>p>JvWouc6wgJ^vL}5Jga$(Sp5E>SC7_s*l zM?Q;r{UJmFORgplVwcV+hdZR=KA{*Ejm)9etRHN6zHaqAGv@Pr3}MRLbMs$2khm$=HJy9r*5XkU ztmRgA-^}rC0)|AYI~)Xo26a20WrE&?a;V1<>;tLfK2pUBW&(b+^l|Q)ctkM~{rARH zq9RYK(X76$poua}qWLWY zpOJ7VR|j3k1Ga$Dx!c{^0-RrmvLm>eA8H#!PR*cRr^Y`)AJ2~I;LFl3hwnTus7L@x zSUogute@PlWo}!Y%4m2YBY%MD2$CdRI4vi*S&_6p|@zznFVnW}*)FNR47L&`pZ*)g2 zynF-+jbo5;RS@{=NJBIuyqxd4k4V}NdSEw`TN%I`Z}T*bZT8v;zc;{t^@={xZ~dYm z536Hg>5#FH9mWiz&KgWO##qXlEQN4xohp_jXsMHcA2HAXWchz&&c~vxpi(S=_7mw~ zk*HL)QSW^dRR0(`F@}M^1F$qW;Hg^Lt1e36d#tC{^?5|iiI5G|hw<0ZZU!f~>l!CP z18v1ApNXdo=+wC2+Kx7*`rncv-^Z$H7f|1vv_WF~>`jh<``^#~=u7X7umSw=lJJZn z$Fm?sl*w}oWjUp8#Y&PKnWBXie3>cec@CuEZ8#ax3qpq=4;dA-CcPtMPNi}4*EoDC zn@aQ&@$WH{$?YwMjVCvaWwH!hBrkvIKh8=|^E=3QFcYC%^odl>(oua(wgaZgGw8VC z>z5*%n;9TBXcMVKN{3+IsiN$GrWxRq*^_rC;+?sUNg^D*T+#U`C@yy&l>w;B)=|>QG2}5 zQxvz!g8{Vf8o&=65)mi3Fn+0{39a>>*(A`?o^s|G%VjuizEJ=kh_(7FW&=%0*C31y z@4cDHBwH1po3`}b;6MUrqGNXIBvdzY0xXkJ^Lwb<++C7D#$yb*a46DFBajlB=iGw8 z)(4WkTmv%q*FM>y!M0wagN582DN76 zy_?C}FO5Rc(BIz@^pEp(8MCW%Lm?pysMarFjhF=KP zPir8-T6zH(Z@JSUfS4wGiCFgwtn^*))&e56aae=_Zp_ATDCyHgX`>bkx$GSrUm+u; zs9#+Dvk2k+LQX_bwPxT?`*Pc3Zu;AzqVYOWiOwdEU8!B-nt2i8E@Ymu-HHx$`h6r> zZpDA${rocDKV=}zK$_K5{=p~S(+tED2`^yS^>^-keJ_@1Te_8n)ccBy1FNzyJC@+@ ztoG4CGy-Mk;!?}e@j72`J53$`&cb2WQv}aJ+`xr*dw1HHopNN7P7VQ3RW9h16~892 zDUZ3-@4*hfVuAZZt`=uPalN%|dIFY|^GMpBqQ+sF(8<55g>5Fq1Tj*BRF$tk<8NE7h~`u0{Kc?lh6-*`DONhv*-v7P z>fQ5G_sSO}bgyF3rq^X7zz>&|tQZ=ANEA|{s!?82Xx>muVOgJD8#@9yQfzzIA6pX1 zBeNOWvpN+strslcMlkINQF58XaKtR_aeDY|bG#CEI^|hGi;uNMSOq0Tz7E=={2I;X zqrj_ILfFp8{D3VYw1ec?BNKvW*%tE?z;=jQA8js(nfo3Fm<7u`vF+I5U}^m$c+t~Z zOP^OVlyCfb__ajEBaAUV3mi}n$SuwObTvsUJ#c~~3_`|aRN|zomqe_Mc5;>V#Ev+y zjO|$973#J*cBOqNm;y{8*Dx!=n|EX8eUCnjzrB3MI&yfpt`=*Bsbd7r%FZz53j1HG zYtf}LOi;p+?EXUFq6HaSkGd@y{SgFT<^0nBx$3EzF1=$R$K)eK>eGwU9oKx3g9cLa zTJkS(a{!z+84?X>Y8jU2wNqwEFK(XD?N!l2F*FDj3*{zZI%_3^wkR7h={y8ECTjzO z=(T0;cjUf|;`B1*_MJUgPo)Pih&a1_us3xHRtSKra!skNq*dXNushe{IcV^<#Iuy8 z91b@j9MMY<6X#{2h!4bCf%827sKi((@`02Z62hU|EI2My05uL_0uM6&Zmx6>fA-+?zd?$HC_KWES-=nV6MKbBg{YuyWDyGuIdkmBAkPDmE zej3~1iwCZl8s^bYD_9%vn%I#-__P%j^JSk>X#Q>&kP9%lTX}x5l>0uCNpN$MXLJY( zZZ%9UvgMgQkA|u+1)$c_Es)qbGqXl~;_+hjjGpd>qvIb@!8z5^P+>pqNj1prZRebI zSk=OAAn4= zV)gj&56cF5la`g4%PxsmJb~r_;*Qn1r+j;UFCzIXbthjhbP?lk@S_2Gxnd>9pdwL; z1&U2X^no&gGOsp2mWlL+FWiJiEL9SL;Gz&npYhyba-0&T($#D&FkoL593OFXOS~vY z$)Y4jz&9v+%&xi%tfBcUZEk_L{Pj}G?*pu(q%Fr9ywQRQWKs3y@M8cAE%!a(Y5suj z2S{9>65gY7Q(N^sBE#2tjnXmj9wc3XiIb2M&iy;f zSGL}VBXmi%J`qA4*H&Aeu-kN0tkjmM1cS1ieE(u&Y|BOW>MJHo`aZ zj*4|JnDW=#MDKjZJ22@tDLgu;-i=4-FeRmy7b zh$c|kxDUbbRvN&T(U92W2>8ovAIweS;%bjpV)|GjkO|jEfVBf1R|0q5h;shgFL(hk z4t`(pvL?(ZR1A=3urlLv^0x=J7ndpSy}83iX~yT-)VHS#(y*ao!agVv*CHHS5AAi% z|HilnZu-D%>S6k^Z}j1}F`%fn(dRQi29dTT8|exFh4}-7aV)W@3dfx$=8cuh z35-4vE&5_;?)b>P*-H>{5xWeu)a;ahuh;Y@RxrjOsQO7^6(eN`HE)-R*K~mB_Nub2 ziYr)=B?`kNcUqvS!4XDx=q7M1vNs7;3jc8m5&H2qu%p7exaYirb?s1+E$s*PNYW7e zkTo?sE=%M1KMYk6E?|)0M=V(`mC)U#7Jt?g0;2J9X(?#aVnl_-8ZNjuD**<9_$;02 z7{zE`o@2bV=;SXBYJC}OYV`#bGDwZEidA}QGn_?iHY}FyIXTKN<4E1W;-v3vh09Y_ z49mBo_Wr;~C%qds=KqA@gQuu<1t}_f;;N7Pa3K|j4;wX5Z-kh;%;G)`GKqaInX;B8 z_TMrs?k)7uV+dp8E7Yi7ie+d6v&LSej;4=|)$YlcJm-&k?rG&co5?-jKo zH&CMNw(iKRj5@e&MuH%ja~Y&6_xo1219H2Wcx>~@{MAJd9+3Cu8}~#%P(R$DYz{f| zKmpB+w2u$P13+?&_ogPRdIn04de!m<6CAHJp4CZO`;KeF(v1!17NM_UrqP;#{KJMV z_-BHbD!GkwOs==btt6?L`u14jgTlKXLuW8JC!a!&e5<@jL*!)6F(=-k*Z{JusXNj@ z5{z%`%_Z8|J#d%IygJ%19G(e9gk=B)wAI?E%?Ivb9uibtZnV}9@$FQI>rQC+aWP^R zVUK^apayhTXX;ZI7&A`MY(w z9hm@9D9kd~0ZP0FbnqJ=;i%89!v7cCN$dgXDJAR~OL8iNeO0|r2z7Q;^19U#_Ss*2 z?VN%V3|Ih39xy4|%R|gDxB4^rOzcVeM%$7Ay5liX3#Mpmbd8J1Mlj8ZJ#v?S^yBtMhcgj{%o;TsH`FBzADh#&$a&O|$3AuT^%hny_LCA&;g@F% zGv}-=YTf!jI=f~;vm`1k2{{nFM?-&7-o+lMEVnBREhk8cmVTAKl(XKv#f3dY;tV7xQjnP9Xc12rED0~3KrVAneLx3 zCvj~rfYWStv_*c2JT6~8kVQOONjEtkqxQaJ8ji*Gtk6tpzfVZz^wg136@&$jAkY4; z!h*bUslre^HWXO;LteQ6rJhhHOrQ+fxQxKUKFTuD!cg~xsRvR7(1#}adPl#N|27hz zGx`^3xSU+nhOOywtl^#yIvu8~0A*YShbYaWWL*Z<<9(Wii2HslT0H?0Fzr~+ttIE? zEj-!^?{+Zpfw}oGNqOJ%R}~f*7Dm_4_)UxhsAE+K3|;|{a3&VB(=3M?Jg-QRpO2(M z15%#D2wV*JHmD-dR0)j7+{*HG>=9UEo}h2J}+SwRs9$@$C3`!=ymk>A-bhlF$c7>J|Og~S@ zp>oi}h*tWzN!eZ8xg{<@+vkd^-geH8^fo&ly32g`?s#O-!n`?t(27uh)3XI178H?Y zRhZq*htUv2*Jo<>f}^RRXdJg_7#g(ve0i`%1Y`MY5+Xglisyw0!Tr8+epUmOyoO7w zN|pM)XZo{sSLs6NB6t~`5;96@@}DNu?(VkgMn8*~fycGF^xsyMZt>`fkvb>j{ShB< z#JB0KP-IlUAK~U@X0H@p8`zOyEc!z;n&s7Os@mYzH9~G=H7$63&B;A$FBr^^v&{uY z1x1ld>Cz0@3MZrp0vR3~yaS?|SEOfk`fzTT1(E-v%TA}83>Avi# z0$C&=Z>T0P=W#?axwvJBM{P=MLeJlA4=Jm8q;X*Qjl4zF=KYdRaPsl>Mwx!-w@v7#%{K>xP4;& zwfckY4HO~J+Y|dg{Xh!M#!Sh}c+{kyD5Qn+h{mu>P2cte?yJ!$p(A@EyI zIx$vriH2!$CW@8|#fmS;rLZxXtI#};NaC;>M|i=BW@nW8h8Fx)(h+PW+rfZUZrH=R z`1bx-@t~&5vILrXi~6-Q{%YRyiM^e7#53Si&p+-m@ELXDCM?TX5Tg}N? zd0!K0-J#;(S1HTH@yr46rA{=Mj!D{X;%~Cd%r;)@zqW^=!r&+LVe`{3%5+F$m-22r zjTpoW#hJm9e5V_QIPjpbfMLg(tGT^L4QlD^nWu`5{0{lhX0F z^JSb%LK%D`^LLdqo;RKAB8OG}uFVnP>x1kF-FjgldNhQ`A#{+do&63}=AE4>M9A=E z6gj+`^e@eBKg!vrWrbG>{e^~@zckWdW_)4rGf!JUuwnWUCjX$tpeT0ebAR|10S`2z zs76CM=L4-E5=3>$6mx0|^#e&oF{Zfw*vi?tQ1U0}q4lA!HkZx}Ls5*nrRP8Uh|m|Z|HRcf$@fWooPR20|@YFE7+F0i+oWqfVa)WvS*=PX92rw-FezBIjY2~PQ zS=<$y5S4MGTA6ixKGEvwlANY#PQ?+ z2RBYFUMe&5{>^U-!4ANk7K)M0Gjp*YXyYZ8TrmH^f`Zrf6-@L&?DB{fIkB@=g^$C1 zC6p!1x1kG@20x+sNsf5$i-m*4(CQ^01kTQT@BBvCwvYLg#L3r}0m!k=WBa}=o@H-(Pe z``?$%hJY}AQN_QA=W1yN(pJ|P=F3d8&vIDk*1L6%UcaTA`ej2so4ThW;B9iOfW(&q z$s`*G%PCnZkQjXXWhFi-ACC@cv0U6n_#?KRx~%XA5s;cQo8Dg3ViDSY9il%f^u%^V zM)Vc?KSpMZskq95m9Fswm3zupLY0HFhf-#`BiC-!WUz*h8ryT=K70O^Gzpt}OGyso zXj@qJS>X)Zp5EBcu_C!dhxDf_H*E3 z^sG6C)1|e$1jziXzCy!K&i_DWw)|+Y*r3+O0=8AR!BIO3|1CxEHCC^ZpieK=JSIdL zZ%ap)QXJwY$0%_tTA$*cqU^CK>9KCtVFl|=BO=*P5KV+x7{qUR5>m7EIu0|kj zB-ThNW{K|-W{YSjvnuDDFRU4xE#-2*_c*@#2#W|D|6OTmj&MxY;z0f2=P`XH@DtKW z>;yo-5qLX9tj!WdeGTr6Rc*y=zvABM2z{tyXkz9S35ziiZKn%ziNi!Y5Jp2J-fo{W zWijHHwTVjWSyn}{%ry;=+fvq4K-^lSj4Pr|vW`~K4y!ZHr zC7Xab7}?>x6Xv~(vR4L%*AvG@>3R1^5KB#0464QL&74Ys)JhfU728x4a7GuRh#k(< z!#YLXrhByjfAhYxl^vLyc{vlQTSI8_ZKboE15o4!&yxf;myx3{;w=P?$y4$AU_j(_ zg-jJOS0T-u_4p6fx}zesmDy*s>@9G+|1V#$;ul(ryYS+8d?C|YTFBbG_hoWHtZx^~ zcPEKyP*+#2n%6T)6)HyE9MBlSw}Xl__Y;H@LRa|>M9A=;s~P+QQC4AG_ZiDIB&U8e^4;} zaik+Yr)a zRv8489xtoGpI3{|9Sg>$KN@(Z#h`^KDOwBcxuL%)=kvak1Xdw_S$7}T*{#~Ebo`4* zwUJC~0I9Yg(qQdN>{%~03jTD%wmA%-G4~MUmj{JmDrdCTG11a1D=0dakD&+(dpyv^ zt)n^u?yvh&XHvD?u>c>r6cwdGl1}&kJUFcszB~c1+eu%hFb-)HlO=6iR>h0x3L{94 zNKk{AG0=0CypV|GhbJbs?8Iw&jkB+GLRS3&`)K+PlZ1{%nZ{3N9#MbO%&0iWo3p>R z6mb-vErG14zuSo7o_RyvKVLolywYU9nr>po0P%B801+im`A`kHJc%G&;$|DR{Blj! z3}3MY<_Kd94e?6D)PJc_&?cXh`*-A|_2x4Xa4p<0#+fkxjWqFa$TE&MbQ_jCkOGc> zbhR4R-I*;9bZZ2&Hn%(e;u$t(GUl>hj?GP6D^so`%I0saFEGv3KdXm^A83tD#bzOF zW^`lHNh6v^x1zNvTZHM}-3va$J~;Q2U;mgSok2Kna_l8c85$#+UJ-COCbg>hNUPiL zXggr$*ea7-ut$qq)tOvfOXjD3k%+Oop1Y9P*W+I)W~e52KYDzIJK6Lc{L6W;PhWBE z+OXqex*H0=B@%#a1*pBnyY1L~og5V8=Zgc32&?~-1bKXT^fQ0e@54t}S#)l5&vHwU zMYhT0QD1@YCJF#egEi{L#f+49DS8I&~O4t~&e&z_iJ0B)v zwGU{1N~;YssECsWn=Z8Jt6!*5`$&BYb7^I&2gnUsqP;K#j@@pn3Q8WXK%j<`O<%cuk%o9CT3OWJ(nGlv&KA?p`tpU`IEUy0 zd7nI|fyuHIROf2Mrt9Y~p?FM2W`Xg6NswJg3~nK#`|-jBe7Q+w8(^f|74Duh9Zs6xs| zBd(6TRFT-*>5%G#FY=0R$lX-vK-eP0bja(d58v zqXQ2L;hb!tzSNx>X^E_?Hq)dL37n={B6rFZUf-au^Y3Ygl0BB;#RLCaBX{Km&ED;kp98(i<|IXb+U*S#glq2>33hKRg4t9~x%vpzR~M9{V~>(a z1i&w4t#^~bims3Tw-MnNjp&t^o=svv`|w56HWA)2ciJ!ak+SeRFr64DK17ksoGTilsT50}J1=JC-Ir6d9C4%fer$%D=d06{ ze>4xAW_Gh7GGYf1(O>ZAP3a%Sv%iprlV4S+S=6YhKL-yS*Gz{GT({aNubPnO3+3V^ zY=FXdqsj*#gD}?3J-3dtw?Dlg`TdNXtGSFuvZZf!X-nv|>Z9>>BdLhXLwW6c+n=bwSH5bjGM--t^#HTGH;QkuH1jaeZJ9>#yUeU+J}lq- ztd)_TJS6$5sI=J>e#@SMv*#y|GWjCBp9>zLx3qHY7+5sJJ;=NV(~g9xYj|8mak)?& zkZA~lGy{#0kG*RdR}#dk^dnX|kVW809P6$|8jBcbI{NemP-+>ra0_!lsfvSd1B;x2 zVyRpzQrl!FFJjBPVy0df7}6@GPi|j`*DD-biWFXdg|Iv0{p9Cmft(qFn4Rw&d5+xy zY4K)EuUp{gTzl%8mzavYZ=f40os$`CR$R~ndoKG*a13p}I-(ulq(y40^_m0%fQ3`9 zVGVHJMv>kqAJ!>0M-jDf^w#?Mp%xhwB3l7)b_>Q_D{Gs=IOTU#aLpVY3}eg10zkjOUDx9=i*`L&jkkSPA=8JjxL- zS5nmzpOid&q(ut|kj4T4u(jr>gSu#|PMFnq*23a2>>Enn4jAV3=kecdN-}pS{fMBA zVu+V-bTvRO!%T~>bKhjUUK7dcpYw$*9`*0DnySAuqtB{?) z+n8?d!kSI8NGc^(z0Q(b{poqsrmnMIS_4wwHr5D-cM-@LjZ%UGm)4#U<) zj*I#!ilWj^OeTJ1*EII$@g4jZ0>%;BTh@hkn(gVm|8qU5z*wy{1!^`>cvvUZ46D0o zo0Rn1CDUFYs<8v6?#<~{k5p=NBL|~qq0SAb$aCGJ9ig&CVIJgkzPx}8xnOD5d$VN(vOvK%1_b)(CE!mz52P?_?IDEG003W8yIF+$)4`$ zlndh1KFqevO;B6YhAfn=QPa#@fD;Z&;bN{a8sXN!DCH&+;9^*=p0CiSqxdgsnM!kr z{TS}%hdn(?+4n<5s}!s6q9zuHM&IDU?gB;0<2ZXVM@3mI;!6 zc_28rKSG1x+M-e`JM$YaW)Lr#PKrq7f+3?1s6>PerU8Z;AyAPVu-V_-{p*o9K62cv z@~36ihu2i)OZ90(sBTiav{+Sh9sF&&3_8s-J7g_i)O3p=Il7QRjWV~dz^eiRS`LE3 z4`7L*_17A=lMWz5FrzHi+a(=xy8E-t==w5e`e$VvnI;7l!y}TSMLk?*3k~__tX;21 z0MB>O>ZAAdi=JfO<*M6&3bKD+bzlKy>|%bNu3zN7uQAV8@+4y=vZ9c%MjP(B@ZU1M9IOXXHn`^}cl7yR3{ zHg?KdP#yveI41plX5C5s4aLhOI6(bLG_G?n#q7L46dW5R91}Xl9Rs8>GJe}+%H_q}WFbCYx=x(I0f6!sE z?nKkeZJc0AO|FLSQzs&%2F)&2yR(dxjpnc?U<24~8(ua<=f18b619HsQS?r)KSLfG z8fub-ePK7oRkR`DX5GSY(-11Vb|3!E{(J8 z-!;FJJb8Ym_2Xh66p=)0RwX?|g?ph@CgN{EvD)o^is=L?Q9R{C*DOvBdzwEl?AH?O z())v9k#9ammuzk+gfbU&Vv#Ow=Db&M+UV7q?tq_h%)7;v-O(|nEj^y=(xnYqFjjIe z>PN-(%>^5-6^Q*19d%^>;(=fy)u4s_m{%8!ZSz%XXg~{U3_HUTH5Ri|x`qd|?JII= zu0|HM0RL(K8rmS^=UY_LDmZqKGvCy6d`TgsHMM9F=JFGNeE)S0 zFn_pmy7_ErV|lezKWE$LQ^mcEJ9mkeze6CjlT!mZM;w$*g5RQj|CY~o$zh@&eD&Y{ z7h^|_91EUlVLe`e!&m|#>MHtDs;DQJ)CE}>8)ky836(Xr;gbwz_{j-;eR%I)bVq?q zIHRcaCtowtE0-t{@ZmE2y&G+o#FrbN^U~->a4SE(c^2O6wA{Umm~IH8?J4emUEUko zkxBi+>Zn~p)2Of4>#-AhgLFe<+KoqQW+|++1axx_ZS`!g!jkTNm5|f^q>4TiqaHx9 zG%9gqhyPG*ZSy%5Y>7f3%?%vPVn+%4)DkiV_|Q=1#BaXz)ZY_gSm?Q3#ItW|?o40@ zg=aa0p_NC+a2beImJQobU~jLtFUdR}eTW zEP_fx_s7Z=#PMjVAv1fz%fAVrM9i2EBLYRIe}SJv;IPvJ-Ujm-V%L5Fc_=7j7S*N*gsg%lcAD~AF8BFCq$vPYL?H_{;eLO zRdu9Z1SP{TVL;8f^_a&;HpRMdQX5p78rgY)NIo5FjVPW1{3_kUogLa?wCSa|BE@0! zjDKiy_S~m3_+k*(s-WRzHPf*H7OicfH~HMin$=@2ZXN7a z%iFf!SlK;d8T4?t~(5_d@+S;b8qB@@Kpf|3i}rGoEqs+2+zW)#N^7_(fTUbpNJ2)3a# zx2FL_-6hNU-<@m?3u=h^{cEwaE)-911<*Y_U^gqY8_8@HJi||uHnMsD4M(v0OYbpp zz7(+HD`ipcw>-RL>e0&RDxn!oV~8YklLpJtVkr`Iawezmowo#pp|oBq>jQuR3b1E2 z9>{Ri)OBX+5fy*#^C|7C7*`}|dH)C80L6R_@C`jscEx&0 z^*fr7M8WQO;lec=-h4ly3`*AC5U=-+LX|7`S)mEI9m}11{U+xi<0~kg@y`^7b@9>S zlQ3L*n$yn&m~^LVT0~&6$7)+(4c5SyHZPuU#&*_?_Oo?aEC~~17;Q{08?WqjOAsMz z$dU`5y{26=>+d>dx|)`XuQLQVmmYCfOL;k}G5!c1#l;oS&-6}wDm0r@(;|u9Hf`d7 zM$N{kN9LKMV3@^I5M-}^-JWU0^`e!b=)iTKNg9>T=%bwUFmy$X6u`q@A@6PuBp{JP z2wB6Ptu=T~nK*5AQJ%V;#iUG$cgPWz9oyQ!{u;-uu9?*D{rS|jrsNi!l)hqkF)z}= zzUg>_D@aN3sLbs8MkEz#JZj7oPUxMSF5~eu36@d!dF~4ocx3tbIr_3#K%K(K?XGAL zrgKGAfbj^!)0>f&3`?kq+lP|sXWN)5;OSen%In)=<*$4`CdV@rO7Acw;lMCYwo)Ld zzRtbqhSO6B2%5M(LcBjlw3s4ZHoKp<0r!L|{On`$h{}HQ0+aH^WFNKH3Q39nZ|i?jqf| zhq@A{YVGuF|Ie*-SjzhPfm-owSGTC$qCU}wDI0(RvO4rNSm{qB5(m|>jROkD&5x%m z=hR=Gy;?86tNA(%NtNW{E}aTE$mR2rZom@TLp%X0@8SGpmHUUGp9XXY+0RC$J8lE* z0U9Cn%Irl9Gn{tquK}jdtOi6hnv!ct36u-SeGrZMd=AEqgKYHdZaMIoIv{Wy>u5#k zJhHVi>iUy)@l?GSG>t0K8EA(c`KO-g)y7v{^Nzs|P5yhxX2;6LtbrGL6-*EwuOk$q z@*03dj>h?gJDIM){krwXxjP7kH;=m2qkOG?%GQEGVGfSxK7oc}of}6Q?DROJ0Q#Xr z#%HeSrIIu-S;V-6)C0-@qQK)tL6mwcuc3}v@zuJeEXR<$Qx|VMQjcwd#qY+j<~Xuc zZtq`C-TE`+?5iV8+3!G5^04IH%H5b5JXi3P)0)DJ@Z}3o`~S;FR+Eohk-3LjHj%*V z!W^W)Nt(owxk9`zMgIyQQgzBgiQl#|ANPOxIkXzfv=Q(ZHB$c1R6u!Cex0Tkt1HA7 zQ|xl3AKw*6#pQZy3&aj}`&q>Q&4%2*tuz;p-|%J~Csa|n3rVWHQVUY%HM4&~hz#g@ zq1qNjbm%r^VTD*G!)~Z$X9nAU#kZ*9-qq022Mkf{1$lf9HbZZ{96SUSipok7_X|y ziHt(M27reN;Oj2Dhe0Fw}X|B*@7BU_xgWXqeVnl-(g|14_dXAR$70u8|YlWZi# z#bZ3rY#Zg~0&9@-lU%XVL#@~JM{pr-$&@C_Q`MwwUn5!KowgV9l-sG#f^9!=DN0LP zX3z{!<`o6EY~K}~eu3fwBU;P;QeBxnmK?Q-TQGH76|s8}M`aVDsU^>v==mQGw6=|bNIciHKp4YX`&r2ZCtjnXCocsQ` zKD1$g>TpYE7e1-;DGJus^Dee=lP3HcQ+UThpP)|6`xW%SRu05}DtfgP_sVY*4H#;- z;hEstecqWB{_VJg?EOjG&XJ=yu;wxccHC{_vj^~ z;_O#O!34o z;~H2SM2)2UfF9P+K{)zV?zf@t0OoYQ^<7A}q(+F(W*s}0H5v;4q%VT(7u)R)l6EG>>u-6%w+=JJ5G zOtAX0!!2JAw|GJb#MVGDw1oAM!B=cCoLxurnPU{IG2ogxM!-oGX)?mr*J7(Bd0+*G z@m|*WZl2yS!jDxJ;;Rr~9Z-9Z!CBuK*EB;->{8|E2k>VNQ7L`wY$?Zlep)agKyG+xZ8Qtx9fSFqA5&gzkY9<7J020&EPWL*i*<`^;^8 zQv`AwHhrQ9&AIJw{TC|3PqL~%@lgS5xw%r^A-w$_-UT&!BVp9u2|V;>IrjI(1?mHj zHKY37CyoJ5-q|8foAOb!p^t&e;5(Q|k5KHb!fA1OJRy~lUhfrJu#O_0%2kZ~(?z08 zHnTe3%CFch;&2>k(>ns>41$y@tg+w_1^6NIf=y&C9~_!>QW4~@Ss^I0lIcBYL#XS0 zQA7j6{Qh>y3k?l{xFkR6jdZ!DsEFpB-^4Gig$WAyHbF5Tm&1!>am1C|GAMc|U$S^K z7du|7R^QY@+)-MRc6V#IXU&qcLsprf*!|hD2j9@9fs2qj=TA9wu6gob2{>Js>x`zz zsP_)fbeXzRLjwf_WG50Q(2j>s1zB6|8tqi|n))&3%;ayZg_5V4xJ#u(E+J*8L6U4m z{i0)avi|}r2PI1okT6EqBKBG@Kbvc-ZpkcS&hi5h3DZ6#lD@GXzjEU?*+}noixZrC zAPUw7)LFtL@#10&R>9Wyo8mKM0+`|ZACvCjD>mN4G%c-Mo4)!ct%4%&V7tb=y8$8V0fKV~Gd}WzNHsFVT>!Vdh(di@; zHeN{uzk(xf^{{O)&xJ2=e385Vfou}w#F}fO~^$Z7I!L`yQo?0>1$&7!~ zNg`V`q3&0juT+KqV=iOwArrqt41}fcvK%aVA!xKhjhp<1t`leHrCbXtD8Q>xZnw8f zfJq5Y+6DkwBC4wRb7V8lfF>blogp-aIxnM};dBPj3MD^Ro}rR@R=xzK^48Rs+ljOh z869#Bq=jIr#k+PJdaFHq?3J~_h?|<*Y06U#6*H~tj7AU9>mm{imroc(ump}D$f83} z=oOZW0W*D2?_$R@4_GXOq>|mN4EFu-{gm&3jX(-Il;}6zO#rYYVH74~K>q2a%%*~+ zy3e@^0niOSLP;zu?mejZXvhbsJhUXPQm|p(2kg;&&3Gq z%6YQ$r=i%P)Lm+-1m0)Lk-AX}9kL)_mLOW<3jd+qnFtVkZ~Bg(<$Kc@)51w&pFe8`v>7-5bz&}tTVse3F9zzWNFU74wy#Q3|G zJ6ys>w5;Fhve_=Tm33i%Xg7^#>3`i6;xc+DA;KCP;lR9f)OE}E(xE73 zU=w{zG+Bs}t1rtk0MR=JBa1!eEGA9{b-ilAk%=kSA6=#)Yqb4)b2)?hSiJ?GYmC|3 z4)oWt-+`7(EiuKS1~_046^@TiRIgg^y;sNktj3j53i_Q;!TtEW>aX{D+Q_QpX`cz6 zQT@NLP)Z*YoSh8G|7n$AYSO2uG=Kzl4?%Xh>Kad!*ixC&*nDE3sQ32LWtL4tOt3%f zQk?gx;R9N?9-+54X$8W7-N%PorW!&HiYat-MX1E)HTMQcZFefi4U2eZdvy)y;;9qS zrEq9p_%aa9mcUXeA{U#SU_LKWOfnIzcYj^bNr_a4bp3~@(Rc*9bn735for0$bsC&j z?elVMN+H!Q5)XCc*7bl6WkYpL)x0_U4w^VLt|bo<^!f5eZ|%7GppaRc-Ts>l5r;uZ zl4FvC#-hrVwW#m!JFrW9ZyKI+ac^6!+}b@{|>8UX|`|*Q>)rDc6Xn=-0(Nc7rTRRP^&D&pC;h1J%#fD zn&G!677IK9B{Mub{*a0l91Kj#uXKt~a0v(dBR*^S_zTGXW zU@W~?Dj_E7dLW#KWUT0oCs+{sn1#-SgCkgjBZF6d=qbZrayYW?T` z;>EraI}i7LU{D!boxWSl(MJLLL$l&Let)OL 0 && + xSampleEAMagicNumber > 0 + // + ; + + // + return result; +} + +// +// Tools ... + +// +void TestXSignalCollector() +{ + // + XSignal signal; + bool isPrepared = signal.Prepare( + xSampleEASymbol, + "XTest", + xSampleEAPeriod, + POSITION_TYPE_BUY, + X_ORDER_MODE_MARKET, + GetEntry( + xSampleEASymbol, + POSITION_TYPE_BUY), + 0.01, + 0, + 0 + // + ); + if (isPrepared) + { + // + bool isAdded = signalCollector + .Add(signal); + + // + if (isAdded) + { + LogMessage("Signal Added Successfully ..."); + } + } + + // + // Try to Reading Collection ... + XSignal collectedSignals[]; + int collectedSignalsCount = signalCollector.Collect(collectedSignals); + if (collectedSignalsCount > 0) + { + LogMessage("Number of Loaded Signals: " + ToString(collectedSignalsCount)); + } +} + +// +void ApplyMCDrawStyles() +{ + // + // Here we Apply All Draw Styles on Input of Market Cycle ... + xSampleEA121MCInputs.drawCBar = true; + xSampleEA121MCInputs.drawPBar = true; + xSampleEA121MCInputs.drawLabels = true; + xSampleEA121MCInputs.drawCBarMid = true; + xSampleEA121MCInputs.drawPBarMid = true; + + // + // Current ... + + // + // MidLine ... + xSampleEA121MCInputs.cBarMidDrawSpecs.width = 1; + xSampleEA121MCInputs.cBarMidDrawSpecs.style = STYLE_DOT; + xSampleEA121MCInputs.cBarMidDrawSpecs.clr = clrSpringGreen; + xSampleEA121MCInputs.cBarMidDrawSpecs.Label( + xSampleEA121MCInputs.cycle.prefix + "_C MID", + xSampleEA121MCInputs.cBarMidDrawSpecs.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // XOHCL ... + xSampleEA121MCInputs.cBarDrawSpecs.Default(); + xSampleEA121MCInputs.cBarDrawSpecs.Width(1); + xSampleEA121MCInputs.cBarDrawSpecs.Style(STYLE_DOT); + // + xSampleEA121MCInputs.cBarDrawSpecs.openStyle.Label( + xSampleEA121MCInputs.cycle.prefix + "_C O", + xSampleEA121MCInputs.cBarDrawSpecs.openStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + xSampleEA121MCInputs.cBarDrawSpecs.highStyle.Label( + xSampleEA121MCInputs.cycle.prefix + "_C H", + xSampleEA121MCInputs.cBarDrawSpecs.highStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + xSampleEA121MCInputs.cBarDrawSpecs.closeStyle.Label( + xSampleEA121MCInputs.cycle.prefix + "_C C", + xSampleEA121MCInputs.cBarDrawSpecs.closeStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + xSampleEA121MCInputs.cBarDrawSpecs.lowStyle.Label( + xSampleEA121MCInputs.cycle.prefix + "_C L", + xSampleEA121MCInputs.cBarDrawSpecs.lowStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // Prev ... + + // + // MidLine ... + xSampleEA121MCInputs.pBarMidDrawSpecs.width = 2; + xSampleEA121MCInputs.pBarMidDrawSpecs.style = STYLE_SOLID; + xSampleEA121MCInputs.pBarMidDrawSpecs.clr = clrLimeGreen; + xSampleEA121MCInputs.pBarMidDrawSpecs.Label( + xSampleEA121MCInputs.cycle.prefix + "_P MID", + xSampleEA121MCInputs.pBarMidDrawSpecs.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + + // + // XOHCL ... + xSampleEA121MCInputs.pBarDrawSpecs.Default(); + xSampleEA121MCInputs.pBarDrawSpecs.Width(2); + // + xSampleEA121MCInputs.pBarDrawSpecs.openStyle.Label( + xSampleEA121MCInputs.cycle.prefix + "_P O", + xSampleEA121MCInputs.pBarDrawSpecs.openStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + xSampleEA121MCInputs.pBarDrawSpecs.highStyle.Label( + xSampleEA121MCInputs.cycle.prefix + "_P H", + xSampleEA121MCInputs.pBarDrawSpecs.highStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + xSampleEA121MCInputs.pBarDrawSpecs.closeStyle.Label( + xSampleEA121MCInputs.cycle.prefix + "_P C", + xSampleEA121MCInputs.pBarDrawSpecs.closeStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); + xSampleEA121MCInputs.pBarDrawSpecs.lowStyle.Label( + xSampleEA121MCInputs.cycle.prefix + "_P L", + xSampleEA121MCInputs.pBarDrawSpecs.lowStyle.clr, + "Arial", + 8, + ANCHOR_LEFT_UPPER, + 90 + // + ); +} diff --git a/MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xche.helper.mq5 b/MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xche.helper.mq5 new file mode 100644 index 0000000..73a2d3d --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xche.helper.mq5 @@ -0,0 +1,492 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Helper Class Library +// ---------------------------------------------- +// Name: XSCX121CHEHelper +// Description: provides all Indicator +// Helper requirements ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +#include "../Classes/x-saherelm.xhelper.class.mq5" + +// +// Definitions ... + +// +enum ENUM_XCHE_BUFFERS +{ + X_CHE_LONG_EXIT_1_LINE = 0, + X_CHE_SHORT_EXIT_1_LINE = 1, + X_CHE_LONG_EXIT_2_LINE = 2, + X_CHE_SHORT_EXIT_2_LINE = 3, +}; + +// +// Input Models ... +struct X121CHEInputs +{ + // + // Props ... + + // + // Market ... + int length; // Length + int loopback; // Loopback + double multiplier1; // 1st Multiplier + double multiplier2; // 2nd Multiplier + + // + // Calculation ... + ENUM_APPLIED_PRICE upAppliedTo; // Up Zone Applied To + ENUM_APPLIED_PRICE downAppliedTo; // Down Zone Applied To + + // + // Constructor(s) ... + X121CHEInputs() + { + // + Clean(); + } + + // + // Tools ... + + // + // Clean ... + void Clean() + { + // + length = 0; + loopback = 0; + multiplier1 = 0; + multiplier2 = 0; + + // + upAppliedTo = PRICE_HIGH; + downAppliedTo = PRICE_LOW; + } + + // + // Default ... + void Default() + { + // + length = 35; + loopback = 26; + multiplier1 = 3.0; + multiplier2 = 3.5; + + // + upAppliedTo = PRICE_HIGH; + downAppliedTo = PRICE_LOW; + } + + // + // Validate ... + bool IsValid() + { + // + bool result = false; + + // + result = + // + length > 0 && + loopback < length && + multiplier1 > 0 && + multiplier2 > multiplier1 + // + ; + + // + return result; + } + + // + // Retrieve MAx Length ... + int Max() + { + // + int result = 0; + + // + result = MathMax(length, loopback); + + // + return result; + } +}; + +// +// Class ... +class XSCX121CHEHelper : public XSCBaseHelper +{ + // + // Public ... +public: + // + // Props ... + + // + // Constructors ... + XSCX121CHEHelper() : XSCBaseHelper(_Symbol, _Period) + { + } + + // + // Deconstructor ... + ~XSCX121CHEHelper() {} + + // + // Tools ... + bool Init( + string symbol, // Trading Symbol + ENUM_TIMEFRAMES period, // Trading Period + X121CHEInputs &inputs // Inputs + ) + { + // + bool result = false; + + // + mSymbol = symbol; + mPeriod = period; + + // + result = inputs.IsValid(); + if (!result) + { + return result; + } + + // + mInputs = inputs; + + // + ArraySetAsSeries(longExit1Buffer, true); + ArraySetAsSeries(longExit2Buffer, true); + ArraySetAsSeries(shortExit1Buffer, true); + ArraySetAsSeries(shortExit2Buffer, true); + mHandler = iCustom( + mSymbol, + mPeriod, + "x-saherelm.x121.xche", + // + // Inputs ... + // + // Market ... + "", + mInputs.length, + mInputs.loopback, + mInputs.multiplier1, + mInputs.multiplier2, + // + // Calculations ... + "", + mInputs.upAppliedTo, + mInputs.downAppliedTo, + // + // Presentation ... + "", + false, + false, + false, + false + // + ); + result = mHandler != INVALID_HANDLE; + if (!result) + { + return result; + } + + // + return result; + } + + // + // Inputs ... + + // + X121CHEInputs GetInputs() { + return mInputs; + } + + // + bool SetInputs( + X121CHEInputs &inputs // Configs + ) { + // + return Init( + mSymbol, + mPeriod, + inputs + ); + } + + // + // Buffers ... + + // + double GetLongExit1( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return longExit1Buffer[barIndex]; + } + + // + // Copy Required Long Exits 1 ... + int CopyLongExit1( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + longExit1Buffer, + buffer, + forceClean + // + ); + } + + // + double GetLongExit2( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return longExit2Buffer[barIndex]; + } + + // + // Copy Required Long Exits 2 ... + int CopyLongExit2( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + longExit2Buffer, + buffer, + forceClean + // + ); + } + + // + double GetShortExit1( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return shortExit1Buffer[barIndex]; + } + + // + // Copy Required Short Exits 1 ... + int CopyShortExit1( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + shortExit1Buffer, + buffer, + forceClean + // + ); + } + + // + double GetShortExit2( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return shortExit2Buffer[barIndex]; + } + + // + // Copy Required Short Exits 2 ... + int CopyShortExit2( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + shortExit2Buffer, + buffer, + forceClean + // + ); + } + + // + // Protected ... +protected: + // + // Private ... +private: + // + // Props ... + X121CHEInputs mInputs; // Inputs ... + + // + // Buffers ... + // + double longExit1Buffer[]; + double longExit2Buffer[]; + double shortExit1Buffer[]; + double shortExit2Buffer[]; + + // + // Tools ... + + // + // Calculate Values Until Now ... + void Calculate() + { + // + int totalBars = CountBars(); + int calculatedBars = CountCalculatedBars(); + + // + // Long Exit 1 ... + CopyBuffer( + mHandler, + X_CHE_LONG_EXIT_1_LINE, + 0, + totalBars, + longExit1Buffer + // + ); + + // + // Long Exit 2 ... + CopyBuffer( + mHandler, + X_CHE_LONG_EXIT_2_LINE, + 0, + totalBars, + longExit2Buffer + // + ); + + // + // Short Exit 1 ... + CopyBuffer( + mHandler, + X_CHE_SHORT_EXIT_1_LINE, + 0, + totalBars, + shortExit1Buffer + // + ); + + // + // Short Exit 2 ... + CopyBuffer( + mHandler, + X_CHE_SHORT_EXIT_2_LINE, + 0, + totalBars, + shortExit2Buffer + // + ); + } +}; + +// +// Tools ... diff --git a/MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xich.helper.mq5 b/MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xich.helper.mq5 new file mode 100644 index 0000000..74957a4 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xich.helper.mq5 @@ -0,0 +1,717 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Helper Class Library +// ---------------------------------------------- +// Name: XSCX121ICHHelper +// Description: provides all Indicator +// Helper requirements ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +#include "../Classes/x-saherelm.xhelper.class.mq5" + +// +// Definitions ... +// +// Ichimoku Lines Calculator Mode ... +enum ENUM_XICH_CALCULATION_MODE +{ + // + X_XICH_HH_LL_MODE = 1, // Highest High and Lowest Low + X_XICH_HO_LC_MODE = 2, // Highest Open and Lowest Close +}; + +// +enum ENUM_XICH_BUFFERS +{ + X_ICH_TEANKANSEN_LINE = 0, + X_ICH_KIJUNSEN_LINE = 1, + X_ICH_CHIKOUSPAN_LINE = 4, + X_ICH_SENKOUSPANA_LINE = 5, + X_ICH_SENKOUSPANB_LINE = 6, +}; + +// +// Input Models ... +struct X121ICHInputs +{ + // + // Props ... + + // + // Market ... + // + // Tenkan Sen ... + int tenkanSenLength; // Length + ENUM_XICH_CALCULATION_MODE tenkanSenMode; // Calculation Mode + + // + // Kijun Sen ... + int kijunSenLength; // Length + ENUM_XICH_CALCULATION_MODE kijunSenMode; // Calculation Mode + + // + // Senkou Span B ... + int senkouSpanBLength; // Length + ENUM_XICH_CALCULATION_MODE senkouSpanBMode; // Calculation Mode + + // + // Chikou Span ... + ENUM_APPLIED_PRICE chikuoSpanAppliedTo; // Price Type + + // + // Constructor(s) ... + X121ICHInputs() + { + // + Clean(); + } + + // + // Tools ... + + // + // Clean ... + void Clean() + { + // + kijunSenLength = 0; + tenkanSenLength = 0; + senkouSpanBLength = 0; + + // + kijunSenMode = X_XICH_HH_LL_MODE; + tenkanSenMode = X_XICH_HH_LL_MODE; + senkouSpanBMode = X_XICH_HH_LL_MODE; + + // + chikuoSpanAppliedTo = PRICE_CLOSE; + } + + // + // Default ... + void Default() + { + // + kijunSenLength = 26; + tenkanSenLength = 9; + senkouSpanBLength = 52; + + // + kijunSenMode = X_XICH_HH_LL_MODE; + tenkanSenMode = X_XICH_HH_LL_MODE; + senkouSpanBMode = X_XICH_HH_LL_MODE; + + // + chikuoSpanAppliedTo = PRICE_CLOSE; + } + + // + // Validate ... + bool IsValid() + { + // + bool result = false; + + // + result = + // + tenkanSenLength > 2 && + kijunSenLength > tenkanSenLength && + senkouSpanBLength > kijunSenLength + // + ; + + // + return result; + } + + // + // Retrieve MAx Length ... + int Max() + { + // + int result = 0; + + // + result = MathMax(result, tenkanSenLength); + result = MathMax(result, kijunSenLength); + result = MathMax(result, senkouSpanBLength); + + // + return result; + } +}; + +// +// Class ... +class XSCX121ICHHelper : public XSCBaseHelper +{ + // + // Public ... +public: + // + // Props ... + + // + // Constructors ... + XSCX121ICHHelper() : XSCBaseHelper(_Symbol, _Period) + { + } + + // + // Deconstructor ... + ~XSCX121ICHHelper() {} + + // + // Tools ... + bool Init( + string symbol, // Trading Symbol + ENUM_TIMEFRAMES period, // Trading Period + X121ICHInputs &inputs // Inputs + ) + { + // + bool result = false; + + // + mSymbol = symbol; + mPeriod = period; + + // + result = inputs.IsValid(); + if (!result) + { + return result; + } + + // + mInputs = inputs; + + // + ArraySetAsSeries(tenkanSenBuffer, true); + ArraySetAsSeries(kijunSenBuffer, true); + ArraySetAsSeries(chikouSpanBuffer, true); + ArraySetAsSeries(senkouSpanABuffer, true); + ArraySetAsSeries(senkouSpanBBuffer, true); + mHandler = iCustom( + mSymbol, + mPeriod, + "x-saherelm.x121.xich", + // + // Inputs ... + // + // TenkanSen ... + "", + mInputs.tenkanSenLength, + mInputs.tenkanSenMode, + // + // KijunSen ... + "", + mInputs.kijunSenLength, + mInputs.kijunSenMode, + // + // SenkouSpan B ... + "", + mInputs.senkouSpanBLength, + mInputs.senkouSpanBMode, + // + // ChikouSpan ... + "", + mInputs.chikuoSpanAppliedTo, + // + // Presentation ... + "", + false, + false, + false, + false, + false, + false, + false, + false, + false, + true // Push Kumo to Future ... + // + ); + result = mHandler != INVALID_HANDLE; + if (!result) + { + return result; + } + + // + return result; + } + + // + // Inputs ... + + // + X121ICHInputs GetInputs() + { + return mInputs; + } + + // + bool SetInputs( + X121ICHInputs &inputs // Configs + ) + { + // + return Init( + mSymbol, + mPeriod, + inputs); + } + + // + // Buffers ... + + // + // TenkanSen ... + + // + double GetTenkanSen( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return tenkanSenBuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopyTenkanSen( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + tenkanSenBuffer, + buffer, + forceClean + // + ); + } + + // + // KijunSen ... + + // + double GetKijunSen( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return kijunSenBuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopyKijunSen( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + kijunSenBuffer, + buffer, + forceClean + // + ); + } + + // + // ChikouSpan ... + + // + double GetChikouSpan( + int barIndex // Bar Index + ) + { + // + barIndex -= mInputs.kijunSenLength; + + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + if (barIndex > ArraySize(chikouSpanBuffer)) { + barIndex = ArraySize(chikouSpanBuffer) - 1; + } + + // + Calculate(); + + // + return chikouSpanBuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopyChikouSpan( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start - mInputs.kijunSenLength, + count, + chikouSpanBuffer, + buffer, + forceClean + // + ); + } + + // + // SenkouSpanA ... + + // + double GetSenkouSpanA( + int barIndex // Bar Index + ) + { + // + barIndex += mInputs.kijunSenLength; + + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + if (barIndex > ArraySize(senkouSpanABuffer)) { + barIndex = ArraySize(senkouSpanABuffer) - 1; + } + + // + Calculate(); + + // + return senkouSpanABuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopySenkouSpanA( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start + mInputs.kijunSenLength, + count, + senkouSpanABuffer, + buffer, + forceClean + // + ); + } + + // + // SenkouSpanB ... + + // + double GetSenkouSpanB( + int barIndex // Bar Index + ) + { + // + barIndex += mInputs.kijunSenLength; + + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + if (barIndex > ArraySize(senkouSpanBBuffer)) { + barIndex = ArraySize(senkouSpanBBuffer) - 1; + } + + // + Calculate(); + + // + return senkouSpanBBuffer[barIndex + mInputs.kijunSenLength]; + } + + // + // Copy Required Items ... + int CopySenkouSpanB( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start + mInputs.kijunSenLength, + count, + senkouSpanBBuffer, + buffer, + forceClean + // + ); + } + + // + // Future SenkouSpanA ... + + // + double GetFutureSenkouSpanA( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return senkouSpanABuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopyFutureSenkouSpanA( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + senkouSpanABuffer, + buffer, + forceClean + // + ); + } + + // + // SenkouSpanB ... + + // + double GetFutureSenkouSpanB( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return senkouSpanBBuffer[barIndex]; + } + + // + // Copy Required Items ... + int CopyFutureSenkouSpanB( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + senkouSpanBBuffer, + buffer, + forceClean + // + ); + } + + // + // Protected ... +protected: + // + // Private ... +private: + // + // Props ... + X121ICHInputs mInputs; // Inputs ... + + // + // Buffers ... + double tenkanSenBuffer[]; + double kijunSenBuffer[]; + double chikouSpanBuffer[]; + double senkouSpanABuffer[]; + double senkouSpanBBuffer[]; + + // + // Tools ... + + // + // Calculate Values Until Now ... + void Calculate() + { + // + int totalBars = CountBars(); + int calculatedBars = CountCalculatedBars(); + + // + // TenkanSen ... + CopyBuffer( + mHandler, + X_ICH_TEANKANSEN_LINE, + 0, + totalBars, + tenkanSenBuffer + // + ); + + // + // KijunSen ... + CopyBuffer( + mHandler, + X_ICH_KIJUNSEN_LINE, + 0, + totalBars, + kijunSenBuffer + // + ); + + // + // ChikouSpan ... + CopyBuffer( + mHandler, + X_ICH_CHIKOUSPAN_LINE, + 0, + totalBars, + chikouSpanBuffer + // + ); + + // + // SenkouSpan A ... + CopyBuffer( + mHandler, + X_ICH_SENKOUSPANA_LINE, + 0, + totalBars, + senkouSpanABuffer + // + ); + + // + // SenkouSpan B ... + CopyBuffer( + mHandler, + X_ICH_SENKOUSPANB_LINE, + 0, + totalBars, + senkouSpanBBuffer + // + ); + } +}; + +// +// Tools ... diff --git a/MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xmc.helper.mq5 b/MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xmc.helper.mq5 new file mode 100644 index 0000000..f8c48b2 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xmc.helper.mq5 @@ -0,0 +1,481 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Helper Class Library +// ---------------------------------------------- +// Name: XSCX121MCHelper +// Description: provides all Indicator +// Helper requirements ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +#include "../Classes/x-saherelm.xhelper.class.mq5" + +// +// Definitions ... + +// +enum ENUM_XMC_BUFFERS +{ + X_MC_FAST_LINE = 0, + X_MC_SLOW_LINE = 1, + X_MC_VERIFIER_LINE = 2, +}; + +// +// Input Models ... +struct X121MCInputs +{ + // + // Props ... + + // + // Market ... + + // + // Fast ... + int fastLength; // Length + int fastShift; // Shift + ENUM_MA_METHOD fastMethod; // Method + ENUM_APPLIED_PRICE fastAppliedTo; // Applied To + + // + // Slow ... + int slowLength; // Length + int slowShift; // Shift + ENUM_MA_METHOD slowMethod; // Method + ENUM_APPLIED_PRICE slowAppliedTo; // Applied To + + // + // Verifier ... + int verifierLength; // Length + int verifierShift; // Shift + ENUM_MA_METHOD verifierMethod; // Method + ENUM_APPLIED_PRICE verifierAppliedTo; // Applied To + + // + // Constructor(s) ... + X121MCInputs() + { + // + Clean(); + } + + // + // Tools ... + + // + // Clean ... + void Clean() + { + // + fastLength = 0; + fastShift = 0; + fastMethod = 0; + fastAppliedTo = PRICE_CLOSE; + + // + slowLength = 0; + slowShift = 0; + slowMethod = 0; + slowAppliedTo = PRICE_CLOSE; + + // + verifierLength = 0; + verifierShift = 0; + verifierMethod = 0; + verifierAppliedTo = PRICE_CLOSE; + } + + // + // Default ... + void Default() + { + // + fastLength = 9; + fastShift = 0; + fastMethod = MODE_EMA; + fastAppliedTo = PRICE_CLOSE; + + // + slowLength = 18; + slowShift = 0; + slowMethod = MODE_EMA; + slowAppliedTo = PRICE_CLOSE; + + // + verifierLength = 200; + verifierShift = 0; + verifierMethod = MODE_EMA; + verifierAppliedTo = PRICE_CLOSE; + } + + // + // Validate ... + bool IsValid() + { + // + bool result = false; + + // + result = + // + fastLength > 1 && + slowLength > fastLength && + verifierLength > slowLength + // + ; + + // + return result; + } + + // + // Retrieve MAx Length ... + int Max() + { + // + int result = 0; + + // + result = MathMax(fastLength, slowLength); + result = MathMax(result, verifierLength); + + // + return result; + } +}; + +// +// Class ... +class XSCX121MCHelper : public XSCBaseHelper +{ + // + // Public ... +public: + // + // Props ... + + // + // Constructors ... + XSCX121MCHelper() : XSCBaseHelper(_Symbol, _Period) + { + } + + // + // Deconstructor ... + ~XSCX121MCHelper() {} + + // + // Tools ... + bool Init( + string symbol, // Trading Symbol + ENUM_TIMEFRAMES period, // Trading Period + X121MCInputs &inputs // Inputs + ) + { + // + bool result = false; + + // + mSymbol = symbol; + mPeriod = period; + + // + result = inputs.IsValid(); + if (!result) + { + return result; + } + + // + mInputs = inputs; + + // + ArraySetAsSeries(fastBuffer, true); + ArraySetAsSeries(slowBuffer, true); + ArraySetAsSeries(verifierBuffer, true); + mHandler = iCustom( + mSymbol, + mPeriod, + "x-saherelm.x121.xmc", + // + // Inputs ... + // + // Fast ... + "", + mInputs.fastLength, + mInputs.fastShift, + mInputs.fastMethod, + mInputs.fastAppliedTo, + // + // Slow ... + "", + mInputs.slowLength, + mInputs.slowShift, + mInputs.slowMethod, + mInputs.slowAppliedTo, + // + // Verifier ... + "", + mInputs.verifierLength, + mInputs.verifierShift, + mInputs.verifierMethod, + mInputs.verifierAppliedTo, + // + // Presentation ... + "", + false, + false, + false + // + ); + result = mHandler != INVALID_HANDLE; + if (!result) + { + return result; + } + + // + return result; + } + + // + // Inputs ... + + // + X121MCInputs GetInputs() + { + return mInputs; + } + + // + bool SetInputs( + X121MCInputs &inputs // Configs + ) + { + // + return Init( + mSymbol, + mPeriod, + inputs); + } + + // + // Buffers ... + + // + // Fast ... + + // + double GetFast( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return fastBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopyFast( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + fastBuffer, + buffer, + forceClean + // + ); + } + + // + // Slow ... + + // + double GetSlow( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return slowBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopySlow( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + slowBuffer, + buffer, + forceClean + // + ); + } + + // + // Verifier ... + + // + double GetVerifier( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return verifierBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopyVerifier( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + verifierBuffer, + buffer, + forceClean + // + ); + } + + // + // Protected ... +protected: + // + // Private ... +private: + // + // Props ... + X121MCInputs mInputs; // Inputs ... + + // + // Buffers ... + // + double fastBuffer[]; + double slowBuffer[]; + double verifierBuffer[]; + + // + // Tools ... + + // + // Calculate Values Until Now ... + void Calculate() + { + // + int totalBars = CountBars(); + int calculatedBars = CountCalculatedBars(); + + // + // Fast ... + CopyBuffer( + mHandler, + X_MC_FAST_LINE, + 0, + totalBars, + fastBuffer + // + ); + + // + // Slow ... + CopyBuffer( + mHandler, + X_MC_SLOW_LINE, + 0, + totalBars, + slowBuffer + // + ); + + // + // Verifier ... + CopyBuffer( + mHandler, + X_MC_VERIFIER_LINE, + 0, + totalBars, + verifierBuffer + // + ); + } +}; + +// +// Tools ... diff --git a/MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xosc.helper.mq5 b/MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xosc.helper.mq5 new file mode 100644 index 0000000..3c33097 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xosc.helper.mq5 @@ -0,0 +1,1319 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Helper Class Library +// ---------------------------------------------- +// Name: XSCX121OSCHelper +// Description: provides all Indicator +// Helper requirements ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +#include "../Classes/x-saherelm.xhelper.class.mq5" + +// +// Definitions ... + +// +enum ENUM_XOSC_BUFFERS +{ + X_OSC_ATR_LINE = 0, + X_OSC_RVI_MAIN_LINE = 1, + X_OSC_RVI_SIGNAL_LINE = 2, + X_OSC_BULL_POWER_LINE = 3, + X_OSC_BEAR_POWER_LINE = 4, + X_OSC_VOLUME_LINE = 5, + X_OSC_RSI_LINE = 6, + X_OSC_CCI_LINE = 7, + X_OSC_MOMENTUM_LINE = 8, + X_OSC_SAR_LINE = 9, + X_OSC_MACD_MAIN_LINE = 10, + X_OSC_MACD_SIGNAL_LINE = 11, + X_OSC_STOCH_MAIN_LINE = 12, + X_OSC_STOCH_SIGNAL_LINE = 13, + X_OSC_STDDEV_LINE = 14, +}; + +// +// Input Models ... +struct X121OSCInputs +{ + // + // Props ... + + // + // ATR ... + int atrLength; // Length + + // + // RVI ... + int rviLength; // Length + + // + // BULLPOWER ... + int bullpLength; // Length + + // + // BEARPOWER ... + int bearpLength; // Length + + // + // VOLUME ... + ENUM_APPLIED_VOLUME volumeAppliedTo; // Applied To + + // + // RSI ... + int rsiLength; // Length + ENUM_APPLIED_PRICE rsiAppliedTo; // Applied To + + // + // CCI ... + int cciLength; // Length + ENUM_APPLIED_PRICE cciAppliedTo; // Applied To + + // + // STDDEV ... + int stddevLength; // Length + int stddevShift; // Shift + ENUM_MA_METHOD stddevMethod; // Mode + ENUM_APPLIED_PRICE stddevAppliedTo; // AppliedTo + + // + // MOMENTUM ... + int momentumLength; // Length + ENUM_APPLIED_PRICE momentumAppliedTo; // Applied To + + // + // SAR ... + double sarStep; // Step + double sarMaximum; // Maximum + + // + // MACD ... + int macdFastLength; // Fast Length + int macdSlowLength; // Slow Length + int macdSignaLength; // Signal Length + ENUM_APPLIED_PRICE macdAppliedTo; // Applied To + + // + // STOCHASTIC ... + // The buffer numbers: 0 - MAIN_LINE, 1 - SIGNAL_LINE. + int stochKLength; // K Length + int stochDLength; // D Length + int stochSlowing; // Slowing + ENUM_MA_METHOD stochMaMethod; // Ma Method + ENUM_STO_PRICE stochMode; // Calculation Mode + + // + // Constructor(s) ... + X121OSCInputs() + { + // + Clean(); + } + + // + // Tools ... + + // + // Clean ... + void Clean() + { + // + atrLength = 0; // Length + rviLength = 0; // Length + bullpLength = 0; // Length + bearpLength = 0; // Length + volumeAppliedTo = VOLUME_TICK; // Applied To + rsiLength = 0; // Length + rsiAppliedTo = PRICE_CLOSE; // Applied To + cciLength = 0; // Length + cciAppliedTo = PRICE_TYPICAL; // Applied To + stddevLength = 0; // Length + stddevShift = 0; // Shift + stddevMethod = MODE_SMA; // Mode + stddevAppliedTo = PRICE_CLOSE; // AppliedTo + momentumLength = 0; // Length + momentumAppliedTo = PRICE_CLOSE; // Applied To + sarStep = 0; // Step + sarMaximum = 0; // Maximum + macdFastLength = 0; // Fast Length + macdSlowLength = 0; // Slow Length + macdSignaLength = 0; // Signal Length + macdAppliedTo = PRICE_CLOSE; // Applied To + stochKLength = 0; // K Length + stochDLength = 0; // D Length + stochSlowing = 0; // Slowing + stochMaMethod = MODE_SMA; // Ma Method + stochMode = STO_LOWHIGH; // Calculation Mode + } + + // + // Default ... + void Default() + { + // + atrLength = 14; // Length + rviLength = 10; // Length + bullpLength = 13; // Length + bearpLength = 13; // Length + volumeAppliedTo = VOLUME_TICK; // Applied To + rsiLength = 14; // Length + rsiAppliedTo = PRICE_CLOSE; // Applied To + cciLength = 14; // Length + cciAppliedTo = PRICE_TYPICAL; // Applied To + stddevLength = 20; // Length + stddevShift = 0; // Shift + stddevMethod = MODE_SMA; // Mode + stddevAppliedTo = PRICE_CLOSE; // AppliedTo + momentumLength = 14; // Length + momentumAppliedTo = PRICE_CLOSE; // Applied To + sarStep = 0.02; // Step + sarMaximum = 0.2; // Maximum + macdFastLength = 12; // Fast Length + macdSlowLength = 26; // Slow Length + macdSignaLength = 9; // Signal Length + macdAppliedTo = PRICE_CLOSE; // Applied To + stochKLength = 5; // K Length + stochDLength = 3; // D Length + stochSlowing = 3; // Slowing + stochMaMethod = MODE_SMA; // Ma Method + stochMode = STO_LOWHIGH; // Calculation Mode + } + + // + // Validate ... + bool IsValid() + { + // + bool result = false; + + // + result = + // + atrLength >= 2 && + rviLength >= 2 && + bullpLength >= 2 && + bearpLength >= 2 && + rsiLength >= 2 && + cciLength >= 2 && + momentumLength >= 2 && + sarStep > 0 && + sarStep < sarMaximum && + macdFastLength >= 2 && + macdSlowLength > macdFastLength && + macdSignaLength >= 2 && + stochKLength >= 2 && + stochDLength >= 2 && + stochSlowing >= 2 && + stddevLength >= 2 && + stddevShift >= 0 + // + ; + + // + return result; + } + + // + // Retrieve MAx Length ... + int Max() + { + // + int result = 0; + + // + result = MathMax(atrLength, rviLength); + result = MathMax(result, bullpLength); + result = MathMax(result, bearpLength); + result = MathMax(result, rsiLength); + result = MathMax(result, cciLength); + result = MathMax(result, momentumLength); + result = MathMax(result, macdFastLength); + result = MathMax(result, macdSlowLength); + result = MathMax(result, macdSignaLength); + result = MathMax(result, stochKLength); + result = MathMax(result, stochDLength); + result = MathMax(result, stochSlowing); + result = MathMax(result, stddevLength); + + // + return result; + } +}; + +// +// Class ... +class XSCX121OSCHelper : public XSCBaseHelper +{ + // + // Public ... +public: + // + // Props ... + + // + // Constructors ... + XSCX121OSCHelper() : XSCBaseHelper(_Symbol, _Period) + { + } + + // + // Deconstructor ... + ~XSCX121OSCHelper() {} + + // + // Tools ... + bool Init( + string symbol, // Trading Symbol + ENUM_TIMEFRAMES period, // Trading Period + X121OSCInputs &inputs // Inputs + ) + { + // + bool result = false; + + // + mSymbol = symbol; + mPeriod = period; + + // + result = inputs.IsValid(); + if (!result) + { + return result; + } + + // + mInputs = inputs; + + // + ArraySetAsSeries(atrBuffer, true); + ArraySetAsSeries(rviMainBuffer, true); + ArraySetAsSeries(rviSignalBuffer, true); + ArraySetAsSeries(bullPBuffer, true); + ArraySetAsSeries(bearPBuffer, true); + ArraySetAsSeries(volumeBuffer, true); + ArraySetAsSeries(rsiBuffer, true); + ArraySetAsSeries(cciBuffer, true); + ArraySetAsSeries(momentumBuffer, true); + ArraySetAsSeries(sarBuffer, true); + ArraySetAsSeries(macdMainBuffer, true); + ArraySetAsSeries(macdSignalBuffer, true); + ArraySetAsSeries(stochMainBuffer, true); + ArraySetAsSeries(stochSignalBuffer, true); + ArraySetAsSeries(stddevBuffer, true); + mHandler = iCustom( + mSymbol, + mPeriod, + "x-saherelm.x121.xosc", + // + // Inputs ... + // + // ATR ... + "", + mInputs.atrLength, + // + // RVI ... + "", + mInputs.rviLength, + // + // Bulls Power ... + "", + mInputs.bullpLength, + // + // Bears Power ... + "", + mInputs.bearpLength, + // + // Voluem ... + "", + mInputs.volumeAppliedTo, + // + // RSI ... + "", + mInputs.rsiLength, + mInputs.rsiAppliedTo, + // + // CCI ... + "", + mInputs.cciLength, + mInputs.cciAppliedTo, + // + // STDDev ... + "", + mInputs.stddevLength, + mInputs.stddevShift, + mInputs.stddevMethod, + mInputs.stddevAppliedTo, + // + // Momentum ... + "", + mInputs.momentumLength, + mInputs.momentumAppliedTo, + // + // SAR ... + "", + mInputs.sarStep, + mInputs.sarMaximum, + // + // MACD ... + "", + mInputs.macdFastLength, + mInputs.macdSlowLength, + mInputs.macdSignaLength, + mInputs.macdAppliedTo, + // + // Stochastic ... + "", + mInputs.stochKLength, + mInputs.stochDLength, + mInputs.stochSlowing, + mInputs.stochMaMethod, + mInputs.stochMode + // + ); + result = mHandler != INVALID_HANDLE; + if (!result) + { + return result; + } + + // + return result; + } + + // + // Inputs ... + + // + X121OSCInputs GetInputs() + { + return mInputs; + } + + // + bool SetInputs( + X121OSCInputs &inputs // Configs + ) + { + // + return Init( + mSymbol, + mPeriod, + inputs); + } + + // + // Buffers ... + + // + // ATR ... + + // + double GetATR( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return atrBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopyATR( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + atrBuffer, + buffer, + forceClean + // + ); + } + + // + // RVI ... + + // + double GetRVI( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return rviMainBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopyRVI( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + rviMainBuffer, + buffer, + forceClean + // + ); + } + + // + double GetRVISignal( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return rviSignalBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopyRVISignal( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + rviSignalBuffer, + buffer, + forceClean + // + ); + } + + // + // BULLP ... + + // + double GetBullPower( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return bullPBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopyBullPower( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + bullPBuffer, + buffer, + forceClean + // + ); + } + + // + // BEARP ... + + // + double GetBearPower( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return bearPBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopyBearPower( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + bearPBuffer, + buffer, + forceClean + // + ); + } + + // + // VOLUME ... + + // + double GetVolume( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return volumeBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopyVolume( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + volumeBuffer, + buffer, + forceClean + // + ); + } + + // + // RSI ... + + // + double GetRSI( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return rsiBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopyRSI( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + rsiBuffer, + buffer, + forceClean + // + ); + } + + // + // CCI ... + + // + double GetCCI( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return cciBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopyCCI( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + cciBuffer, + buffer, + forceClean + // + ); + } + + // + // MOMENTUM ... + + // + double GetMomentum( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return momentumBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopyMomentum( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + momentumBuffer, + buffer, + forceClean + // + ); + } + + // + // SAR ... + + // + double GetSAR( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return sarBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopySAR( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + sarBuffer, + buffer, + forceClean + // + ); + } + + // + // STDDEV ... + + // + double GetSTDDEV( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return stddevBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopySTDDEV( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + stddevBuffer, + buffer, + forceClean + // + ); + } + + // + // MACD ... + + // + double GetMACD( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return macdMainBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopyMACD( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + macdMainBuffer, + buffer, + forceClean + // + ); + } + + // + double GetMACDSignal( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return macdSignalBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopyMACDSignal( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + macdSignalBuffer, + buffer, + forceClean + // + ); + } + + // + // STOCH ... + + // + double GetSTOCH( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return stochMainBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopySTOCH( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + stochMainBuffer, + buffer, + forceClean + // + ); + } + + // + double GetSTOCHSignal( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return stochSignalBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopySTOCHSignal( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + stochSignalBuffer, + buffer, + forceClean + // + ); + } + + // + // Protected ... +protected: + // + // Private ... +private: + // + // Props ... + X121OSCInputs mInputs; // Inputs ... + + // + // Buffers ... + double atrBuffer[]; + double rviMainBuffer[]; + double rviSignalBuffer[]; + double bullPBuffer[]; + double bearPBuffer[]; + double volumeBuffer[]; + double rsiBuffer[]; + double cciBuffer[]; + double momentumBuffer[]; + double sarBuffer[]; + double macdMainBuffer[]; + double macdSignalBuffer[]; + double stochMainBuffer[]; + double stochSignalBuffer[]; + double stddevBuffer[]; + + // + // Tools ... + + // + // Calculate Values Until Now ... + void Calculate() + { + // + int totalBars = CountBars(); + int calculatedBars = CountCalculatedBars(); + + // + // ATR ... + CopyBuffer( + mHandler, + X_OSC_ATR_LINE, + 0, + totalBars, + atrBuffer + // + ); + + // + // BULLP ... + CopyBuffer( + mHandler, + X_OSC_BULL_POWER_LINE, + 0, + totalBars, + bullPBuffer + // + ); + + // + // BEARP ... + CopyBuffer( + mHandler, + X_OSC_BEAR_POWER_LINE, + 0, + totalBars, + bearPBuffer + // + ); + + // + // VOLUME ... + CopyBuffer( + mHandler, + X_OSC_VOLUME_LINE, + 0, + totalBars, + volumeBuffer + // + ); + + // + // RSI ... + CopyBuffer( + mHandler, + X_OSC_RSI_LINE, + 0, + totalBars, + rsiBuffer + // + ); + + // + // CCI ... + CopyBuffer( + mHandler, + X_OSC_CCI_LINE, + 0, + totalBars, + cciBuffer + // + ); + + // + // MOMENTUM ... + CopyBuffer( + mHandler, + X_OSC_MOMENTUM_LINE, + 0, + totalBars, + momentumBuffer + // + ); + + // + // SAR ... + CopyBuffer( + mHandler, + X_OSC_SAR_LINE, + 0, + totalBars, + sarBuffer + // + ); + + // + // STDDEV ... + CopyBuffer( + mHandler, + X_OSC_STDDEV_LINE, + 0, + totalBars, + stddevBuffer + // + ); + + // + // RVI ... + + // + // RVI Main ... + CopyBuffer( + mHandler, + X_OSC_RVI_MAIN_LINE, + 0, + totalBars, + rviMainBuffer + // + ); + + // + // RVI Signal ... + CopyBuffer( + mHandler, + X_OSC_RVI_SIGNAL_LINE, + 0, + totalBars, + rviSignalBuffer + // + ); + + // + // MACD ... + + // + // MACD Main ... + CopyBuffer( + mHandler, + X_OSC_MACD_MAIN_LINE, + 0, + totalBars, + macdMainBuffer + // + ); + + // + // MACD Signal ... + CopyBuffer( + mHandler, + X_OSC_MACD_SIGNAL_LINE, + 0, + totalBars, + macdSignalBuffer + // + ); + + // + // STOCH ... + + // + // STOCH Main ... + CopyBuffer( + mHandler, + X_OSC_STOCH_MAIN_LINE, + 0, + totalBars, + stochMainBuffer + // + ); + + // + // STOCH Signal ... + CopyBuffer( + mHandler, + X_OSC_STOCH_SIGNAL_LINE, + 0, + totalBars, + stochSignalBuffer + // + ); + } +}; + +// +// Tools ... diff --git a/MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xstr.helper.mq5 b/MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xstr.helper.mq5 new file mode 100644 index 0000000..d1c5446 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Helpers/x-saherelm.x121.xstr.helper.mq5 @@ -0,0 +1,408 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Helper Class Library +// ---------------------------------------------- +// Name: XSCX121STRHelper +// Description: provides all Indicator +// Helper requirements ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +#include "../Classes/x-saherelm.xhelper.class.mq5" + +// +// Definitions ... + +// +enum ENUM_XSTR_BUFFERS +{ + X_STR_TREND_LINE = 0, + X_STR_STATE_LINE = 5, +}; + +// +enum ENUM_XSTR_TREND_STATES +{ + X_STR_BULLISH = 1, // Bullish + X_STR_BEARISH = -1, // Bearish +}; + +// +// Input Models ... +struct X121STRInputs +{ + // + // Props ... + + // + // ATR ... + int length; // Length + double multiplier; // Multiplier + ENUM_APPLIED_PRICE appliedTo; // Applied To + + // + // Constructor(s) ... + X121STRInputs() + { + // + Clean(); + } + + // + // Tools ... + + // + // Clean ... + void Clean() + { + // + length = 0; + multiplier = 0; + appliedTo = PRICE_CLOSE; + } + + // + // Default ... + void Default() + { + // + length = 14; + multiplier = 3.5; + appliedTo = PRICE_MEDIAN; + } + + // + // Validate ... + bool IsValid() + { + // + bool result = false; + + // + result = + // + length > 0 && + multiplier > 0 + // + ; + + // + return result; + } + + // + // Retrieve MAx Length ... + int Max() + { + // + int result = 0; + + // + result = length; + + // + return result; + } +}; + +// +// Class ... +class XSCX121STRHelper : public XSCBaseHelper +{ + // + // Public ... +public: + // + // Props ... + + // + // Constructors ... + XSCX121STRHelper() : XSCBaseHelper(_Symbol, _Period) + { + } + + // + // Deconstructor ... + ~XSCX121STRHelper() {} + + // + // Tools ... + bool Init( + string symbol, // Trading Symbol + ENUM_TIMEFRAMES period, // Trading Period + X121STRInputs &inputs // Inputs + ) + { + // + bool result = false; + + // + mSymbol = symbol; + mPeriod = period; + + // + result = inputs.IsValid(); + if (!result) + { + return result; + } + + // + mInputs = inputs; + + // + ArraySetAsSeries(trendBuffer, true); + ArraySetAsSeries(stateBuffer, true); + mHandler = iCustom( + mSymbol, + mPeriod, + "x-saherelm.x121.xstr", + // + // Inputs ... + // + // ATR ... + "", + mInputs.length, + mInputs.multiplier, + mInputs.appliedTo, + // + // Presentation ... + "", + false, + false + // + ); + result = mHandler != INVALID_HANDLE; + if (!result) + { + return result; + } + + // + return result; + } + + // + // Inputs ... + + // + X121STRInputs GetInputs() + { + return mInputs; + } + + // + bool SetInputs( + X121STRInputs &inputs // Configs + ) + { + // + return Init( + mSymbol, + mPeriod, + inputs); + } + + // + // Buffers ... + + // + // Trend ... + + // + double GetTrend( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return trendBuffer[barIndex]; + } + + // + // Copy Required Buffer ... + int CopyTrend( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + trendBuffer, + buffer, + forceClean + // + ); + } + + // + // State ... + + // + ENUM_XSTR_TREND_STATES GetState( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(); + + // + return (ENUM_XSTR_TREND_STATES)((int)stateBuffer[barIndex]); + } + + // + // Copy Required Buffer ... + int CopyState( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(); + + // + // Copy Items ... + return Copy( + start, + count, + stateBuffer, + buffer, + forceClean + // + ); + } + + // + // Tools ... + + // + ENUM_XSTR_TREND_STATES ToState(double state) + { + return (ENUM_XSTR_TREND_STATES)((int)state); + } + + // + bool IsBullish(double state) + { + // + bool result = false; + + // + result = + // + ToState(state) == X_STR_BULLISH; + // + ; + + // + return result; + } + + // + bool IsBearish(double state) + { + // + bool result = false; + + // + result = + // + ToState(state) == X_STR_BEARISH; + // + ; + + // + return result; + } + + // + // Protected ... +protected: + // + // Private ... +private: + // + // Props ... + X121STRInputs mInputs; // Inputs ... + + // + // Buffers ... + double trendBuffer[]; + double stateBuffer[]; + + // + // Tools ... + + // + // Calculate Values Until Now ... + void Calculate() + { + // + int totalBars = CountBars(); + int calculatedBars = CountCalculatedBars(); + + // + // Trend ... + CopyBuffer( + mHandler, + X_STR_TREND_LINE, + 0, + totalBars, + trendBuffer + // + ); + + // + // State ... + CopyBuffer( + mHandler, + X_STR_STATE_LINE, + 0, + totalBars, + stateBuffer + // + ); + } +}; + +// +// Tools ... diff --git a/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xche.mq5 b/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xche.mq5 new file mode 100644 index 0000000..59e850f --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xche.mq5 @@ -0,0 +1,631 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Indicator +// --------------------------------------------- +// Name: X121_XCHE +// Description: Chandelier Exit 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 X121_XCHE Indicator" +#property strict + +// +// START Constants ... +// + +// +#define ShortName "X121_XCHE" + +// +// END Constants ... +// + +// +// START Inputs ... +// + +// +input group "Market"; +input int length = 35; // Length +input int loopback = 26; // Loopback +input double multiplier1 = 3.0; // 1st Multiplier +input double multiplier2 = 3.5; // 2nd Multiplier + +// +input group "Calculation"; +input ENUM_APPLIED_PRICE upAppliedTo = PRICE_HIGH; // Up Zone Applied to +input ENUM_APPLIED_PRICE downAppliedTo = PRICE_LOW; // Down Zone Applied to + +// +input group "Presentation"; +input bool showLongExit1Line = true; // Show 1st Long Exit +input bool showShortExit1Line = true; // Show 1st Short Exit +input bool showLongExit2Line = true; // Show 2st Long Exit +input bool showShortExit2Line = true; // Show 2st Short Exit + +// +// END Inputs ... +// + +// +// START Includes and Imports ... +// + +// +// Includes Common Library ... +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// END Includes and Imports ... +// + +// +// START Buffers ... +// + +// +#property indicator_chart_window + +// +#property indicator_buffers 8 +#property indicator_plots 8 + +// +// Long Exit 1 ... +#define longExit1BufferIndex 0 +double longExit1Buffer[]; + +// +#property indicator_label1 "X121_XCHE LE 1" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrLime +#property indicator_style1 STYLE_DOT + +// +// Short Exit 1 ... +#define shortExit1BufferIndex 1 +double shortExit1Buffer[]; + +// +#property indicator_label2 "X121_XCHE SE 1" +#property indicator_type2 DRAW_LINE +#property indicator_style2 STYLE_DOT +#property indicator_color2 clrRed + +// +// Long Exit 2 ... +#define longExit2BufferIndex 2 +double longExit2Buffer[]; + +// +#property indicator_label3 "X121_XCHE LE 2" +#property indicator_type3 DRAW_LINE +#property indicator_style2 STYLE_DOT +#property indicator_color3 clrAqua + +// +// Short Exit 2 ... +#define shortExit2BufferIndex 3 +double shortExit2Buffer[]; + +// +#property indicator_label4 "X121_XCHE SE 2" +#property indicator_type4 DRAW_LINE +#property indicator_style2 STYLE_DOT +#property indicator_color4 clrMagenta + +// +// START Arrows ... + +// +// Long Exit 1 Start ... +#define longExit1StartBufferIndex 4 +double longExit1StartBuffer[]; + +// +#property indicator_label5 "X121_XCHE LES 1" +#property indicator_type5 DRAW_ARROW +#property indicator_color5 clrLime + +// +// Short Exit 1 Start ... +#define shortExit1StartBufferIndex 5 +double shortExit1StartBuffer[]; + +// +#property indicator_label6 "X121_XCHE SES 1" +#property indicator_type6 DRAW_ARROW +#property indicator_color6 clrRed + +// +// Long Exit 2 Start ... +#define longExit2StartBufferIndex 6 +double longExit2StartBuffer[]; + +// +#property indicator_label7 "X121_XCHE LES 2" +#property indicator_type7 DRAW_ARROW +#property indicator_color7 clrAqua + +// +// Short Exit 2 Start ... +#define shortExit2StartBufferIndex 7 +double shortExit2StartBuffer[]; + +// +#property indicator_label8 "X121_XCHE SES 2" +#property indicator_type8 DRAW_ARROW +#property indicator_color8 clrMagenta + +// +// END Buffers ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// + +// +int maxLength; + +// +// Working Array ... +double work[][6]; +#define hi1Idx 0 +#define lo1Idx 1 +#define hi2Idx 2 +#define lo2Idx 3 +#define trend1Idx 4 +#define trend2Idx 5 + +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// START Event Handlers ... +// + +// +// Initialization ... +int OnInit() +{ + // + // Validate Inputs ... + if (!ValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + // 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 ... + maxLength = ExtractMaxLengthOfInputs(); + + // + // Define Index Buffers ... + DefineBuffers(); + + // + // Set Indicator ShortName ... + SetIndicatorName(); + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart mPeriod is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs 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 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed +} + +// +// Calculating what we want ... +int OnCalculate( + // + // total Candles on chart ... + const int rates_total, + // + // total calculated Candles on charts ... + const int prev_calculated, + // + // history of Candles Open Time ... + const datetime &time[], + // + // history of Candles Open Price ... + const double &open[], + // + // history of Candles High Price ... + const double &high[], + // + // history of Candles Low Price ... + const double &low[], + // + // history of Candles Close Price ... + const double &close[], + // + // history of Tick Volumes on Candle ... + const long &tick_volume[], + // + // history of Trade Volumes ... + const long &volume[], + // + // history of Candles Spread Price ... + const int &spread[]) +{ + // + if (Bars(_Symbol, _Period) < rates_total) + { + return (prev_calculated); + } + + // + if (ArrayRange(work, 0) != rates_total) + { + ArrayResize(work, rates_total); + } + + // + // this counts Available Bars ... + int limit; + + // + limit = prev_calculated - 1; + if (limit < 0) + { + limit = 0; + } + + // + // Main Loop ... + for (int i = limit; i < rates_total && !IsStopped(); i++) + { + CalculateBuffers( + i, + prev_calculated, + rates_total, + // + open, + high, + low, + close); + } + + // + return rates_total; +} +// +// END Event Handlers ... +// + +// +// START Functions ... +// + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = true; + + // + result = + length >= 9 && + loopback >= 0; + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + result = MathMax(length, loopback); + + // + return result; +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + uint arrowCode = 159; + + // + // LEVEL 1 ... + + // + // Long Exit 1 ... + + // + // Draw Type ... + ENUM_DRAW_TYPE longExit1DrawType = showLongExit1Line ? DRAW_LINE : DRAW_NONE; + ENUM_DRAW_TYPE longExit1StartDrawType = showLongExit1Line ? DRAW_ARROW : DRAW_NONE; + + // + // Buffer ... + SetIndexBuffer(longExit1BufferIndex, longExit1Buffer, INDICATOR_DATA); + PlotIndexSetInteger(longExit1BufferIndex, PLOT_SHOW_DATA, showLongExit1Line); + PlotIndexSetInteger(longExit1BufferIndex, PLOT_DRAW_TYPE, longExit1DrawType); + + // + // Start Buffer ... + SetIndexBuffer(longExit1StartBufferIndex, longExit1StartBuffer, INDICATOR_DATA); + PlotIndexSetInteger(longExit1StartBufferIndex, PLOT_ARROW, arrowCode); + PlotIndexSetInteger(longExit1StartBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(longExit1StartBufferIndex, PLOT_DRAW_TYPE, longExit1StartDrawType); + + // + // Short Exit 1 ... + + // + // Draw Type ... + ENUM_DRAW_TYPE shortExit1DrawType = showShortExit1Line ? DRAW_LINE : DRAW_NONE; + ENUM_DRAW_TYPE shortExit1StartDrawType = showShortExit1Line ? DRAW_ARROW : DRAW_NONE; + + // + // Buffer ... + SetIndexBuffer(shortExit1BufferIndex, shortExit1Buffer, INDICATOR_DATA); + PlotIndexSetInteger(shortExit1BufferIndex, PLOT_SHOW_DATA, showShortExit1Line); + PlotIndexSetInteger(shortExit1BufferIndex, PLOT_DRAW_TYPE, shortExit1DrawType); + + // + // Start Buffer ... + SetIndexBuffer(shortExit1StartBufferIndex, shortExit1StartBuffer, INDICATOR_DATA); + PlotIndexSetInteger(shortExit1StartBufferIndex, PLOT_ARROW, arrowCode); + PlotIndexSetInteger(shortExit1StartBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(shortExit1StartBufferIndex, PLOT_DRAW_TYPE, shortExit1StartDrawType); + + // + // LEVEL 2 ... + + // + // Long Exit 2 ... + + // + // Draw Type ... + ENUM_DRAW_TYPE longExit2DrawType = showLongExit2Line ? DRAW_LINE : DRAW_NONE; + ENUM_DRAW_TYPE longExit2StartDrawType = showLongExit2Line ? DRAW_ARROW : DRAW_NONE; + + // + // Buffer ... + SetIndexBuffer(longExit2BufferIndex, longExit2Buffer, INDICATOR_DATA); + PlotIndexSetInteger(longExit2BufferIndex, PLOT_SHOW_DATA, showLongExit2Line); + PlotIndexSetInteger(longExit2BufferIndex, PLOT_DRAW_TYPE, longExit2DrawType); + + // + // Start Buffer ... + SetIndexBuffer(longExit2StartBufferIndex, longExit2StartBuffer, INDICATOR_DATA); + PlotIndexSetInteger(longExit2StartBufferIndex, PLOT_ARROW, arrowCode); + PlotIndexSetInteger(longExit2StartBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(longExit2StartBufferIndex, PLOT_DRAW_TYPE, longExit2StartDrawType); + + // + // Short Exit 2 ... + + // + // Draw Type ... + ENUM_DRAW_TYPE shortExit2DrawType = showShortExit2Line ? DRAW_LINE : DRAW_NONE; + ENUM_DRAW_TYPE shortExit2StartDrawType = showShortExit2Line ? DRAW_ARROW : DRAW_NONE; + + // + // Buffer ... + SetIndexBuffer(shortExit2BufferIndex, shortExit2Buffer, INDICATOR_DATA); + PlotIndexSetInteger(shortExit2BufferIndex, PLOT_SHOW_DATA, showShortExit2Line); + PlotIndexSetInteger(shortExit2BufferIndex, PLOT_DRAW_TYPE, shortExit2DrawType); + + // + // Start Buffer ... + SetIndexBuffer(shortExit2StartBufferIndex, shortExit2StartBuffer, INDICATOR_DATA); + PlotIndexSetInteger(shortExit2StartBufferIndex, PLOT_ARROW, arrowCode); + PlotIndexSetInteger(shortExit2StartBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(shortExit2StartBufferIndex, PLOT_DRAW_TYPE, shortExit2StartDrawType); +} + +// +// Calculate Buffers ... +void CalculateBuffers( + int bar_index, // Selected Bar Index + int prevCalculated, // Previous Calculated + int ratesTotal, // Total Rates + const double &open[], // Rates Open ... + const double &high[], // Rates High ... + const double &low[], // Rates Low ... + const double &close[] // Rates Close ... +) +{ + // + // Cleanup Buffers ... + longExit1Buffer[bar_index] = longExit1StartBuffer[bar_index] = shortExit1Buffer[bar_index] = shortExit1StartBuffer[bar_index] = EMPTY_VALUE; + longExit2Buffer[bar_index] = longExit2StartBuffer[bar_index] = shortExit2Buffer[bar_index] = shortExit2StartBuffer[bar_index] = EMPTY_VALUE; + + // + int start = MathMax(bar_index - loopback, 0); + + // + // Calculate ATR Value ... + double atrValue = 0; + for (int k = 1; k <= length && (bar_index - k - 1) >= 0; k++) + { + // + atrValue += MathMax(high[bar_index - k], close[MathMax(bar_index - k - 1, 0)]) - + MathMin(low[bar_index - k], close[MathMax(bar_index - k - 1, 0)]); + } + atrValue /= (double)length; + + // + // Retrieve Highest High and Lowest Lows ... + double loopbackMax = high[ArrayMaximum(high, start, loopback)]; + double loopbackMin = low[ArrayMinimum(low, start, loopback)]; + + // + // Fill Multi Dimesional Working Array ... + work[bar_index][hi1Idx] = loopbackMax - multiplier1 * atrValue; + work[bar_index][lo1Idx] = loopbackMin + multiplier1 * atrValue; + work[bar_index][hi2Idx] = loopbackMax - multiplier2 * atrValue; + work[bar_index][lo2Idx] = loopbackMin + multiplier2 * atrValue; + work[bar_index][trend1Idx] = (bar_index > 0) ? work[bar_index - 1][trend1Idx] : 0; + work[bar_index][trend2Idx] = (bar_index > 0) ? work[bar_index - 1][trend2Idx] : 0; + + // + if (bar_index > 0) + { + // + // Calculate Trends ... + if (close[bar_index] > work[bar_index - 1][lo1Idx]) + { + work[bar_index][trend1Idx] = 1; + } + + // + if (close[bar_index] < work[bar_index - 1][hi1Idx]) + { + work[bar_index][trend1Idx] = -1; + } + + // + if (close[bar_index] > work[bar_index - 1][lo2Idx]) + { + work[bar_index][trend2Idx] = 1; + } + + // + if (close[bar_index] < work[bar_index - 1][hi2Idx]) + { + work[bar_index][trend2Idx] = -1; + } + + // + // Calculate Exit Values ... + + // + // Exit 1 ... + + // + // Long ... + if (multiplier1 > 0 && work[bar_index][trend1Idx] == 1) + { + // + if (work[bar_index][hi1Idx] < work[bar_index - 1][hi1Idx]) + { + work[bar_index][hi1Idx] = work[bar_index - 1][hi1Idx]; + } + + // + longExit1Buffer[bar_index] = work[bar_index][hi1Idx]; + + // + if (longExit1Buffer[bar_index - 1] == EMPTY_VALUE) + { + longExit1StartBuffer[bar_index] = longExit1Buffer[bar_index]; + } + } + + // + // Short ... + if (multiplier1 > 0 && work[bar_index][trend1Idx] == -1) + { + // + if (work[bar_index][lo1Idx] > work[bar_index - 1][lo1Idx]) + { + work[bar_index][lo1Idx] = work[bar_index - 1][lo1Idx]; + } + + // + shortExit1Buffer[bar_index] = work[bar_index][lo1Idx]; + + // + if (shortExit1Buffer[bar_index - 1] == EMPTY_VALUE) + { + shortExit1StartBuffer[bar_index] = shortExit1Buffer[bar_index]; + } + } + + // + // Exit 2 ... + + // + // Long ... + if (multiplier2 > 0 && work[bar_index][trend2Idx] == 1) + { + if (work[bar_index][hi2Idx] < work[bar_index - 1][hi2Idx]) + { + work[bar_index][hi2Idx] = work[bar_index - 1][hi2Idx]; + } + + // + longExit2Buffer[bar_index] = work[bar_index][hi2Idx]; + + // + if (longExit2Buffer[bar_index - 1] == EMPTY_VALUE) + { + longExit2StartBuffer[bar_index] = longExit2Buffer[bar_index]; + } + } + + // + // Short ... + if (multiplier2 > 0 && work[bar_index][trend2Idx] == -1) + { + // + if (work[bar_index][lo2Idx] > work[bar_index - 1][lo2Idx]) + { + work[bar_index][lo2Idx] = work[bar_index - 1][lo2Idx]; + } + + // + shortExit2Buffer[bar_index] = work[bar_index][lo2Idx]; + + // + if (shortExit2Buffer[bar_index - 1] == EMPTY_VALUE) + { + shortExit2StartBuffer[bar_index] = shortExit2Buffer[bar_index]; + } + } + } +} + +// +// END Functions ... +// diff --git a/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xich.mq5 b/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xich.mq5 new file mode 100644 index 0000000..724aff6 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xich.mq5 @@ -0,0 +1,836 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Indicator +// ------------------------------------------------- +// Name: X121_XICH +// Description: Ichimoku Kinko Hyo ... +// +// +// 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 X121_XICH Indicator" +#property strict + +// +// START Constants ... +// + +// +// Indicator Short Name ... +#define ShortName "X121_XICH" + +// +// Ichimoku Golden Numbers ... +enum ENUM_X_ICHIMOKU_GOLDEN_NUMBERS +{ + X_ICH_BASE = 9, + X_ICH_GOLDEN = 17, + X_ICH_CYCLE = 26, + X_ICH_PERIOD = 35, + X_ICH_STAR = 45, + X_ICH_MED = 52, + X_ICH_LONG = 63, + X_ICH_FULL = 72 +}; + +// +// Ichimoku Lines Calculator Mode ... +enum ENUM_X_ICHIMOKU_CALCULATION_MODE +{ + // + X_XICH_HH_LL_MODE = 1, // Highest High and Lowest Low + X_XICH_HO_LC_MODE = 2, // Highest Open and Lowest Close +}; + +// +// END Constants ... +// + +// +// START Inputs ... +// + +// +// ICHIMOKU Kinko Hyo ... + +// +// TENKANSEN ... +input group "Tenkan Sen"; +input int tenkanSenLength = 9; // Length +input ENUM_X_ICHIMOKU_CALCULATION_MODE tenkanSenMode = X_XICH_HH_LL_MODE; // Calculation Mode + +// +// KIJUNSEN ... +input group "Kijun Sen"; +input int kijunSenLength = 26; // Length +input ENUM_X_ICHIMOKU_CALCULATION_MODE kijunSenMode = X_XICH_HH_LL_MODE; // Calculation Mode + +// +// SENKOUSPANB ... +input group "Senkou Span B"; +input int senkouSpanBLength = 52; // Length +input ENUM_X_ICHIMOKU_CALCULATION_MODE senkouSpanBMode = X_XICH_HH_LL_MODE; // Calculation Mode + +// +// CHIKOUSPAN ... +input group "Chikou Span"; +input ENUM_APPLIED_PRICE chikuoSpanAppliedTo = PRICE_CLOSE; // Price Type + +// +input group "Presentation"; +input bool showTenkanSen = true; // Show Tenkan Sen +input bool showKijunSen = true; // Show Kijun Sen +input bool showKijunSenPlus = false; // Show Kijun Sen + +input bool showKijunSenNegative = false; // Show Kijun Sen - +input bool showChikouSpan = true; // Show Chikou Span +input bool showSenkouSpanA = true; // Show Senkou Span A +input bool showSenkouSpanB = true; // Show Senkou Span B +input bool showKumo = true; // Show Kumo +input bool shiftKumo = true; // Shift Kumo to Future + +// +// END Inputs ... +// + +// +// START Includes and Imports ... +// + +// +// Includes Common Library ... +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// END Includes and Imports ... +// + +// +// START Buffers ... +// +#property indicator_chart_window + +// +#property indicator_buffers 15 +#property indicator_plots 8 + +// +// PLOTTED Buffers ... + +// +// ICHIMOKU ... + +// +// TENKANSEN ... + +// +#define tenkanSenBufferIndex 0 +double tenkanSenBuffer[]; + +// +#property indicator_label1 "X121_XICH TK" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrBrown +#property indicator_style1 STYLE_SOLID +#property indicator_width1 1 + +// +// KIJUNSEN ... + +// +#define kijunSenBufferIndex 1 +double kijunSenBuffer[]; + +// +#property indicator_label2 "X121_XICH KJ" +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrDodgerBlue +#property indicator_style2 STYLE_SOLID +#property indicator_width2 1 + +// +#define kijunSenPlusBufferIndex 2 +double kijunSenPlusBuffer[]; + +// +#property indicator_label3 "X121_XICH KJ+" +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrMediumTurquoise +#property indicator_style3 STYLE_DOT +#property indicator_width3 1 + +// +#define kijunSenNegativeBufferIndex 3 +double kijunSenNegativeBuffer[]; + +// +#property indicator_label4 "X121_XICH KJ-" +#property indicator_type4 DRAW_LINE +#property indicator_color4 clrDarkSeaGreen +#property indicator_style4 STYLE_DOT +#property indicator_width4 1 + +// +// CHIKOUSPAN ... + +// +#define chikouSpanBufferIndex 4 +double chikouSpanBuffer[]; + +// +#property indicator_label5 "X121_XICH CS" +#property indicator_type5 DRAW_LINE +#property indicator_color5 clrDarkGreen +#property indicator_style5 STYLE_SOLID +#property indicator_width5 1 + +// +#define senkouABufferIndex 5 +double senkouABuffer[]; + +// +#property indicator_label6 "X121_XICH SSA" +#property indicator_type6 DRAW_LINE +#property indicator_color6 clrLightGray +#property indicator_style6 STYLE_DASHDOTDOT +#property indicator_width6 1 + +// +#define senkouBBufferIndex 6 +double senkouBBuffer[]; + +// +#property indicator_label7 "X121_XICH SSB" +#property indicator_type7 DRAW_LINE +#property indicator_color7 clrLightGray +#property indicator_style7 STYLE_DASHDOTDOT +#property indicator_width7 1 + +// +// KUMO ... + +// +// SENKOUSPANA ... + +// +#define senkouSpanABufferIndex 7 +double senkouSpanABuffer[]; + +// +// SENKOUSPANB ... + +// +#define senkouSpanBBufferIndex 8 +double senkouSpanBBuffer[]; + +// +// KUMOCLOUD ... + +// +#define kumoBufferIndex 7 + +// +#property indicator_label8 "X121_XICH Kumo" +#property indicator_type8 DRAW_FILLING +#property indicator_color8 clrAqua, clrMagenta +#property indicator_style8 STYLE_SOLID +#property indicator_width8 1 + +// +// DATA Buffers ... + +// +#define dTenkanBufferIndex 9 +double dTenkanBuffer[]; + +// +#define dKijunBufferIndex 10 +double dKijunBuffer[]; + +// +#define dChikouBufferIndex 11 +double dChikouBuffer[]; + +// +#define dSSABufferIndex 12 +double dSSABuffer[]; + +// +#define dSSBBufferIndex 13 +double dSSBBuffer[]; + +// +// END Buffers ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// + +// +int maxLength; +int mHandler; + +// +ENUM_SERIESMODE mTenkanSenTopMode = NULL; +ENUM_SERIESMODE mTenkanSenBottomMode = NULL; + +// +ENUM_SERIESMODE mKijunSenTopMode = NULL; +ENUM_SERIESMODE mKijunSenBottomMode = NULL; + +// +ENUM_SERIESMODE mSenkouSpanBTopMode = NULL; +ENUM_SERIESMODE mSenkouSpanBBottomMode = NULL; + +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// START Event Handlers ... +// + +// +// Initialization ... +int OnInit() +{ + // + // Validate Inputs ... + if (!ValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + // 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 ... + maxLength = ExtractMaxLengthOfInputs(); + + // + // Define Index Buffers ... + DefineBuffers(); + + // + // Init Handler ... + mHandler = iIchimoku( + _Symbol, + _Period, + tenkanSenLength, + kijunSenLength, + senkouSpanBLength); + if (mHandler == INVALID_HANDLE) + { + return INIT_FAILED; + } + + // + // Set Indicator ShortName ... + SetIndicatorName(); + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart period is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs 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 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed + + // + IndicatorRelease(mHandler); +} + +// +// Calculating what we want ... +int OnCalculate( + // + // total Candles on chart ... + const int rates_total, + // + // total calculated Candles on charts ... + const int prev_calculated, + // + // history of Candles Open Time ... + const datetime &time[], + // + // history of Candles Open Price ... + const double &open[], + // + // history of Candles High Price ... + const double &high[], + // + // history of Candles Low Price ... + const double &low[], + // + // history of Candles Close Price ... + const double &close[], + // + // history of Tick Volumes on Candle ... + const long &tick_volume[], + // + // history of Trade Volumes ... + const long &volume[], + // + // history of Candles Spread Price ... + const int &spread[]) +{ + // + // Prepare Buffers ... + ArraySetAsSeries(time, true); + ArraySetAsSeries(open, true); + ArraySetAsSeries(high, true); + ArraySetAsSeries(low, true); + ArraySetAsSeries(close, true); + ArraySetAsSeries(tick_volume, true); + ArraySetAsSeries(volume, true); + ArraySetAsSeries(spread, true); + + // + // this counts Available Bars ... + int limit; + + // + // Check Calculated Bars ... + int ichCalculatedBars = BarsCalculated(mHandler); + if (ichCalculatedBars < maxLength) + { + return prev_calculated; + } + + // + limit = (prev_calculated > rates_total || prev_calculated <= 0) ? rates_total : (rates_total - prev_calculated) + 1; + + // + // Buffers Copy ... + int copiedTenkans = CopyBuffer(mHandler, TENKANSEN_LINE, 0, limit, dTenkanBuffer); + int copiedKijuns = CopyBuffer(mHandler, KIJUNSEN_LINE, 0, limit, dKijunBuffer); + int copiedChikous = CopyBuffer(mHandler, CHIKOUSPAN_LINE, 0, limit, dChikouBuffer); + int copiedSSAs = CopyBuffer(mHandler, SENKOUSPANA_LINE, 0, limit, dSSABuffer); + int copiedSSBs = CopyBuffer(mHandler, SENKOUSPANB_LINE, 0, limit, dSSBBuffer); + if ( + copiedSSAs < 0 || + copiedSSBs < 0 || + copiedKijuns < 0 || + copiedTenkans < 0 || + copiedChikous < 0) + { + return prev_calculated; + } + + // + // Main Loop ... + for (int i = limit - 1; i >= 0 && !IsStopped(); i--) + { + CalculateBuffers(i); + } + + // + return rates_total; +} + +// +// END Event Handlers ... +// + +// +// START Functions ... +// + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = + // + (tenkanSenLength > 2 && + kijunSenLength > tenkanSenLength && + senkouSpanBLength > kijunSenLength) + // + ; + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + // Ichimoku ... + result = MathMax(result, tenkanSenLength); + result = MathMax(result, kijunSenLength); + result = MathMax(result, senkouSpanBLength); + + // + return result; +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // ICHIMOKU ... + + // + // TENKANSEN ... + + // + ENUM_DRAW_TYPE tenkanSenDrawType = showTenkanSen ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(tenkanSenBuffer, true); + SetIndexBuffer(tenkanSenBufferIndex, tenkanSenBuffer, INDICATOR_DATA); + PlotIndexSetInteger(tenkanSenBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(tenkanSenBufferIndex, PLOT_SHOW_DATA, showTenkanSen); + PlotIndexSetInteger(tenkanSenBufferIndex, PLOT_DRAW_TYPE, tenkanSenDrawType); + + // + // KIJUNSEN ... + + // + ENUM_DRAW_TYPE kijunSenDrawType = showKijunSen ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(kijunSenBuffer, true); + SetIndexBuffer(kijunSenBufferIndex, kijunSenBuffer, INDICATOR_DATA); + PlotIndexSetInteger(kijunSenBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(kijunSenBufferIndex, PLOT_SHOW_DATA, showKijunSen); + PlotIndexSetInteger(kijunSenBufferIndex, PLOT_DRAW_TYPE, kijunSenDrawType); + + // + // KIJUNSEN Plus ... + + // + ENUM_DRAW_TYPE kijunSenPlusDrawType = showKijunSenPlus ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(kijunSenPlusBuffer, true); + SetIndexBuffer(kijunSenPlusBufferIndex, kijunSenPlusBuffer, INDICATOR_DATA); + PlotIndexSetInteger(kijunSenPlusBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(kijunSenPlusBufferIndex, PLOT_SHIFT, kijunSenLength); + PlotIndexSetInteger(kijunSenPlusBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(kijunSenPlusBufferIndex, PLOT_DRAW_TYPE, kijunSenPlusDrawType); + + // + // KIJUNSEN Negative ... + + // + ENUM_DRAW_TYPE kijunSenNegativeDrawType = showKijunSenNegative ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(kijunSenNegativeBuffer, true); + SetIndexBuffer(kijunSenNegativeBufferIndex, kijunSenNegativeBuffer, INDICATOR_DATA); + PlotIndexSetInteger(kijunSenNegativeBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(kijunSenNegativeBufferIndex, PLOT_SHIFT, -kijunSenLength); + PlotIndexSetInteger(kijunSenNegativeBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(kijunSenNegativeBufferIndex, PLOT_DRAW_TYPE, kijunSenNegativeDrawType); + + // + // CHIKOUSPAN ... + + // + ENUM_DRAW_TYPE chikouSpanDrawType = showChikouSpan ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(chikouSpanBuffer, true); + SetIndexBuffer(chikouSpanBufferIndex, chikouSpanBuffer, INDICATOR_DATA); + PlotIndexSetInteger(chikouSpanBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(chikouSpanBufferIndex, PLOT_SHIFT, -kijunSenLength); + PlotIndexSetInteger(chikouSpanBufferIndex, PLOT_SHOW_DATA, showChikouSpan); + PlotIndexSetInteger(chikouSpanBufferIndex, PLOT_DRAW_TYPE, chikouSpanDrawType); + + // + // SENKOUSPAN A and B ... + int shiftSize = shiftKumo ? kijunSenLength : 0; + + // + // SENKOUSPANA ... + ENUM_DRAW_TYPE senkouSpanADrawType = showSenkouSpanA ? DRAW_LINE : DRAW_NONE; + ArraySetAsSeries(senkouABuffer, true); + SetIndexBuffer(senkouABufferIndex, senkouABuffer, INDICATOR_DATA); + PlotIndexSetInteger(senkouABufferIndex, PLOT_SHIFT, shiftSize); + PlotIndexSetInteger(senkouABufferIndex, PLOT_SHOW_DATA, showSenkouSpanA); + PlotIndexSetInteger(senkouABufferIndex, PLOT_DRAW_TYPE, senkouSpanADrawType); + + // + // SENKOUSPANB ... + ENUM_DRAW_TYPE senkouSpanBDrawType = showSenkouSpanB ? DRAW_LINE : DRAW_NONE; + ArraySetAsSeries(senkouBBuffer, true); + SetIndexBuffer(senkouBBufferIndex, senkouBBuffer, INDICATOR_DATA); + PlotIndexSetInteger(senkouBBufferIndex, PLOT_SHIFT, shiftSize); + PlotIndexSetInteger(senkouBBufferIndex, PLOT_SHOW_DATA, showSenkouSpanB); + PlotIndexSetInteger(senkouBBufferIndex, PLOT_DRAW_TYPE, senkouSpanBDrawType); + + // + // KUMO ... + + // + // SENKOUSPANA ... + ArraySetAsSeries(senkouSpanABuffer, true); + SetIndexBuffer(senkouSpanABufferIndex, senkouSpanABuffer, INDICATOR_DATA); + PlotIndexSetInteger(senkouSpanABufferIndex, PLOT_DRAW_BEGIN, maxLength); + + // + // SENKOUSPANB ... + ArraySetAsSeries(senkouSpanBBuffer, true); + SetIndexBuffer(senkouSpanBBufferIndex, senkouSpanBBuffer, INDICATOR_DATA); + PlotIndexSetInteger(senkouSpanBBufferIndex, PLOT_DRAW_BEGIN, maxLength); + + // + // KUMO ... + + // + ENUM_DRAW_TYPE kumoDrawType = showKumo ? DRAW_FILLING : DRAW_NONE; + + // + PlotIndexSetInteger(kumoBufferIndex, PLOT_SHIFT, shiftSize); + PlotIndexSetInteger(kumoBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(kumoBufferIndex, PLOT_DRAW_TYPE, kumoDrawType); + + // + // DATA Buffers ... + + // + // D Tenkan ... + ArraySetAsSeries(dTenkanBuffer, true); + SetIndexBuffer(dTenkanBufferIndex, dTenkanBuffer, INDICATOR_CALCULATIONS); + + // + // D Kijun ... + ArraySetAsSeries(dKijunBuffer, true); + SetIndexBuffer(dKijunBufferIndex, dKijunBuffer, INDICATOR_CALCULATIONS); + + // + // D Chikou ... + ArraySetAsSeries(dChikouBuffer, true); + SetIndexBuffer(dChikouBufferIndex, dChikouBuffer, INDICATOR_CALCULATIONS); + + // + // D SSA ... + ArraySetAsSeries(dSSABuffer, true); + SetIndexBuffer(dSSABufferIndex, dSSABuffer, INDICATOR_CALCULATIONS); + + // + // D SSB ... + ArraySetAsSeries(dSSBBuffer, true); + SetIndexBuffer(dSSBBufferIndex, dSSBBuffer, INDICATOR_CALCULATIONS); +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); +} + +// +// Calculate Buffers ... +void CalculateBuffers( + int bar_index // Selected Bar Index +) +{ + // + // ICHIMOKU ... + + // + double topValue; + double bottomValue; + + // + // TENKANSEN ... + + // + // Extract Tenkan Sen Top/Bottom Calculation Mode based on User Input ... + if (mTenkanSenTopMode == NULL || mTenkanSenBottomMode == NULL) + { + // + switch (tenkanSenMode) + { + // + case X_XICH_HH_LL_MODE: + // + mTenkanSenTopMode = MODE_HIGH; + mTenkanSenBottomMode = MODE_LOW; + break; + + // + case X_XICH_HO_LC_MODE: + // + mTenkanSenTopMode = MODE_OPEN; + mTenkanSenBottomMode = MODE_CLOSE; + break; + } + } + + // + // Calculate Top ... + topValue = GetHighestHigh( + _Symbol, + _Period, + mTenkanSenTopMode, + tenkanSenLength, + bar_index); + + // + // Calculate Bottom ... + bottomValue = GetLowestLow( + _Symbol, + _Period, + mTenkanSenBottomMode, + tenkanSenLength, + bar_index); + + // + double tenkanSenValue = (topValue + bottomValue) / 2; + tenkanSenBuffer[bar_index] = tenkanSenValue; + + // + // KIJUNSEN ... + + // + // Extract Kijun Sen Top/Bottom Calculation Mode based on User Input ... + if (mKijunSenTopMode == NULL || mKijunSenBottomMode == NULL) + { + // + switch (kijunSenMode) + { + // + case X_XICH_HH_LL_MODE: + // + mKijunSenTopMode = MODE_HIGH; + mKijunSenBottomMode = MODE_LOW; + break; + + // + case X_XICH_HO_LC_MODE: + // + mKijunSenTopMode = MODE_OPEN; + mKijunSenBottomMode = MODE_CLOSE; + break; + } + } + + // + // Calculate Top ... + topValue = GetHighestHigh( + _Symbol, + _Period, + mKijunSenTopMode, + kijunSenLength, + bar_index); + + // + // Calculate Bottom ... + bottomValue = GetLowestLow( + _Symbol, + _Period, + mKijunSenBottomMode, + kijunSenLength, + bar_index); + + // + double kijunSenValue = (topValue + bottomValue) / 2; + kijunSenBuffer[bar_index] = kijunSenValue; + + // + kijunSenPlusBuffer[bar_index] = kijunSenValue; + kijunSenNegativeBuffer[bar_index] = kijunSenValue; + + // + // CHIKOUSPAN ... + double chikouSpanValue = GetAppliedPrice( + bar_index, + chikuoSpanAppliedTo); + chikouSpanBuffer[bar_index] = chikouSpanValue; + + // + // KUMO ... + + // + // SENKOUSPANA ... + double senkouSpanAValue = (tenkanSenValue + kijunSenValue) / 2; + senkouABuffer[bar_index] = senkouSpanAValue; + senkouSpanABuffer[bar_index] = senkouSpanAValue; + + // + // SENKOUSPANB ... + + // + // Extract Senkou Span B Top/Bottom Calculation Mode based on User Input ... + if (mSenkouSpanBTopMode == NULL || mSenkouSpanBBottomMode == NULL) + { + // + switch (senkouSpanBMode) + { + // + case X_XICH_HH_LL_MODE: + // + mSenkouSpanBTopMode = MODE_HIGH; + mSenkouSpanBBottomMode = MODE_LOW; + break; + + // + case X_XICH_HO_LC_MODE: + // + mSenkouSpanBTopMode = MODE_OPEN; + mSenkouSpanBBottomMode = MODE_CLOSE; + break; + } + } + + // + // Calculate Top ... + topValue = GetHighestHigh( + _Symbol, + _Period, + mSenkouSpanBTopMode, + senkouSpanBLength, + bar_index); + + // + // Calculate Bottom ... + bottomValue = GetLowestLow( + _Symbol, + _Period, + mSenkouSpanBBottomMode, + senkouSpanBLength, + bar_index); + + // + double senkouSpanBValue = (topValue + bottomValue) / 2; + senkouBBuffer[bar_index] = senkouSpanBValue; + senkouSpanBBuffer[bar_index] = senkouSpanBValue; +} + +// +// END Functions ... +// diff --git a/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xmc.mq5 b/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xmc.mq5 new file mode 100644 index 0000000..61dffd2 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xmc.mq5 @@ -0,0 +1,469 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 X121_XMC MA Cross Indicator +// --------------------------------------------------- +// Name: X121_XMC +// Description: Moving Average Crosses +// Market Analysor ... +// +// +// 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 X121_XMC Indicator" +#property strict + +// +// START Constants ... +// + +// +// Indicator Short Name ... +#define ShortName "X121_XMC" + +// +// END Constants ... +// + +// +// START Inputs ... +// + +// +input group "Fast"; +input int fastMaLength = 9; // Length +input int fastMaShift = 0; // Shift +input ENUM_MA_METHOD fastMaMethod = MODE_EMA; // Method +input ENUM_APPLIED_PRICE fastMaAppliedTo = PRICE_CLOSE; // Applied To + +// +input group "Slow"; +input int slowMaLength = 18; // Length +input int slowMaShift = 0; // Shift +input ENUM_MA_METHOD slowMaMethod = MODE_EMA; // Method +input ENUM_APPLIED_PRICE slowMaAppliedTo = PRICE_CLOSE; // Applied To + +// +input group "Verifier"; +input int verifierMaLength = 50; // Length +input int verifierMaShift = 0; // Shift +input ENUM_MA_METHOD verifierMaMethod = MODE_EMA; // Method +input ENUM_APPLIED_PRICE verifierMaAppliedTo = PRICE_CLOSE; // Applied To + +// +input group "Presentation"; +input bool showFastMa = true; // Show Fast +input bool showSlowMa = true; // Show Slow +input bool showVerifierMa = true; // Show Verifier + +// +// END Inputs ... +// + +// +// START Includes and Imports ... +// + +// +// Includes Logging Library ... +#include "../Libraries/x-saherelm.log.lib.mq5" + +// +// Includes Common Library ... +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// END Includes and Imports ... +// + +// +// START Buffers ... +// +#property indicator_chart_window + +// +#property indicator_buffers 3 +#property indicator_plots 3 + +// +// PLOTTED Buffers ... + +// +// MA ... + +// +// FAST ... +#define fastMaBufferIndex 0 +double fastMaBuffer[]; + +// +#property indicator_label1 "X121_XMC MA F" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrYellow +#property indicator_style1 STYLE_SOLID +#property indicator_width1 1 + +// +// SLOW ... +#define slowMaBufferIndex 1 +double slowMaBuffer[]; + +// +#property indicator_label2 "X121_XMC MA S" +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrDarkOrange +#property indicator_style2 STYLE_SOLID +#property indicator_width2 1 + +// +// VERIFIER ... +#define verifierMaBufferIndex 2 +double verifierMaBuffer[]; + +// +#property indicator_label3 "X121_XMC MA V" +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrDarkBlue +#property indicator_style3 STYLE_SOLID +#property indicator_width3 2 + +// +// END Buffers ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// + +// +int maxLength; + +// +int fastMaHandler = INVALID_HANDLE; +int slowMaHandler = INVALID_HANDLE; +int verifierMaHandler = INVALID_HANDLE; + +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// START Event Handlers ... +// + +// +// Initialization ... +int OnInit() +{ + // + // Validate Inputs ... + if (!ValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + logTag = ShortName; + + // + // 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 ... + maxLength = ExtractMaxLengthOfInputs(); + + // + // Define Index Buffers ... + DefineBuffers(); + + // + // Set Indicator ShortName ... + SetIndicatorName(); + + // + // MA Initialization ... + + // + // FAST ... + fastMaHandler = iMA( + _Symbol, + _Period, + fastMaLength, + fastMaShift, + fastMaMethod, + fastMaAppliedTo); + if (fastMaHandler == INVALID_HANDLE) + { + // + string msg = "Error in Initilizing Indicator ..."; + LogMessage(msg); + + // + return INIT_FAILED; + } + + // + // SLOW ... + slowMaHandler = iMA( + _Symbol, + _Period, + slowMaLength, + slowMaShift, + slowMaMethod, + slowMaAppliedTo); + if (slowMaHandler == INVALID_HANDLE) + { + // + string msg = "Error in Initilizing Indicator ..."; + LogMessage(msg); + + // + return INIT_FAILED; + } + + // + // VERIFIER ... + verifierMaHandler = iMA( + _Symbol, + _Period, + verifierMaLength, + verifierMaShift, + verifierMaMethod, + verifierMaAppliedTo); + if (verifierMaHandler == INVALID_HANDLE) + { + // + string msg = "Error in Initilizing Indicator ..."; + LogMessage(msg); + + // + return INIT_FAILED; + } + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart period is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs 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 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed + + // + // Here we can handle De Initialization Reasons ... + IndicatorRelease(fastMaHandler); + IndicatorRelease(slowMaHandler); + IndicatorRelease(verifierMaHandler); +} + +// +// Calculations ... +// +// Calculating what we want ... +int OnCalculate( + // + // total Candles on chart ... + const int rates_total, + // + // total calculated Candles on charts ... + const int prev_calculated, + // + // history of Candles Open Time ... + const datetime &time[], + // + // history of Candles Open Price ... + const double &open[], + // + // history of Candles High Price ... + const double &high[], + // + // history of Candles Low Price ... + const double &low[], + // + // history of Candles Close Price ... + const double &close[], + // + // history of Tick Volumes on Candle ... + const long &tick_volume[], + // + // history of Trade Volumes ... + const long &volume[], + // + // history of Candles Spread Price ... + const int &spread[]) +{ + // + // Prepare Buffers ... + ArraySetAsSeries(time, true); + ArraySetAsSeries(open, true); + ArraySetAsSeries(high, true); + ArraySetAsSeries(low, true); + ArraySetAsSeries(close, true); + ArraySetAsSeries(tick_volume, true); + ArraySetAsSeries(volume, true); + ArraySetAsSeries(spread, true); + + // + // this counts Available Bars ... + int limit; + + // + // Check Calculated Bars ... + int fastMaCalculatedBars = BarsCalculated(fastMaHandler); + int slowMaCalculatedBars = BarsCalculated(slowMaHandler); + int verifierMaCalculatedBars = BarsCalculated(verifierMaHandler); + if (fastMaCalculatedBars < maxLength || + slowMaCalculatedBars < maxLength || + verifierMaCalculatedBars < maxLength) + { + return prev_calculated; + } + + // + limit = (prev_calculated > rates_total || prev_calculated <= 0) ? rates_total : (rates_total - prev_calculated) + 1; + + // + // Buffers Copy ... + int copiedFastMas = CopyBuffer(fastMaHandler, 0, 0, limit, fastMaBuffer); + int copiedSlowMas = CopyBuffer(slowMaHandler, 0, 0, limit, slowMaBuffer); + int copiedVerifierMas = CopyBuffer(verifierMaHandler, 0, 0, limit, verifierMaBuffer); + if (copiedFastMas <= 0 || + copiedSlowMas <= 0 || + copiedVerifierMas <= 0 + ) + { + return prev_calculated; + } + + // + // Main Loop ... + for (int i = limit - 1; i >= 0 && !IsStopped(); i--) + { + CalculateBuffers(i); + } + + // + return rates_total; +} + +// +// END Event Handlers ... +// + +// +// START Functions ... +// + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = + // + // Validate Ma ... + (fastMaLength > 2 && + slowMaLength > fastMaLength && + verifierMaLength > slowMaLength) + // + ; + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + // Ma ... + result = MathMax(result, fastMaLength); + result = MathMax(result, slowMaLength); + result = MathMax(result, verifierMaLength); + + // + return result; +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // MA ... + + // + // FAST ... + ENUM_DRAW_TYPE fastMaDrawType = showFastMa ? DRAW_LINE : DRAW_NONE; + ArraySetAsSeries(fastMaBuffer, true); + SetIndexBuffer(fastMaBufferIndex, fastMaBuffer, INDICATOR_DATA); + PlotIndexSetInteger(fastMaBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(fastMaBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(fastMaBufferIndex, PLOT_DRAW_TYPE, fastMaDrawType); + + // + // SLOW ... + ENUM_DRAW_TYPE slowMaDrawType = showSlowMa ? DRAW_LINE : DRAW_NONE; + ArraySetAsSeries(slowMaBuffer, true); + SetIndexBuffer(slowMaBufferIndex, slowMaBuffer, INDICATOR_DATA); + PlotIndexSetInteger(slowMaBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(slowMaBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(slowMaBufferIndex, PLOT_DRAW_TYPE, slowMaDrawType); + + // + // VERIFIER ... + ENUM_DRAW_TYPE verifierMaDrawType = showVerifierMa ? DRAW_LINE : DRAW_NONE; + ArraySetAsSeries(verifierMaBuffer, true); + SetIndexBuffer(verifierMaBufferIndex, verifierMaBuffer, INDICATOR_DATA); + PlotIndexSetInteger(verifierMaBufferIndex, PLOT_DRAW_BEGIN, maxLength); + PlotIndexSetInteger(verifierMaBufferIndex, PLOT_SHOW_DATA, false); + PlotIndexSetInteger(verifierMaBufferIndex, PLOT_DRAW_TYPE, verifierMaDrawType); +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + // + string indicatorShortName = ""; + StringConcatenate(indicatorShortName, ShortName, ""); + + // + IndicatorSetString(INDICATOR_SHORTNAME, indicatorShortName); +} + +// +// Calculate Buffers ... +void CalculateBuffers( + int bar_index // Selected Bar Index +) +{ +} + +// +// END Functions ... +// diff --git a/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xosc.mq5 b/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xosc.mq5 new file mode 100644 index 0000000..0f0f9ef --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xosc.mq5 @@ -0,0 +1,721 @@ +////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Indicator +// --------------------------------------------- +// Name: X121_XOSC +// Description: provides some oscillator values +// as empty 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 X121_XAMA Indicator" +#property strict + +// +// START Constants ... +// + +#define ShortName "X121_XOSC" + +// +// END Constants ... +// + +// +// START Inputs ... +// + +// +// ATR ... +input group "ATR"; +input int atrLength = 14; // Length + +// +// RVI ... +// The buffer numbers are the following: 0 - MAIN_LINE, 1 - SIGNAL_LINE. +input group "RVI"; +input int rviLength = 10; // Length + +// +// BULLPOWER ... +input group "Bulls Power"; +input int bullpLength = 13; // Length + +// +// BEARPOWER ... +input group "Bears Power"; +input int bearpLength = 13; // Length + +// +// VOLUME ... +input group "Volumes"; +input ENUM_APPLIED_VOLUME volumeAppliedTo = VOLUME_TICK; // Applied To + +// +// RSI ... +input group "RSI"; +input int rsiLength = 14; // Length +input ENUM_APPLIED_PRICE rsiAppliedTo = PRICE_CLOSE; // Applied To + +// +// CCI ... +input group "CCI"; +input int cciLength = 14; // Length +input ENUM_APPLIED_PRICE cciAppliedTo = PRICE_TYPICAL; // Applied To + +// +// STDDEV ... +input group "Standard Deviation"; +input int stddevLength = 20; // Length +input int stddevShift = 0; // Shift +input ENUM_MA_METHOD stddevMethod = MODE_SMA; // Mode +input ENUM_APPLIED_PRICE stddevAppliedTo = PRICE_CLOSE; // AppliedTo + +// +// MOMENTUM ... +input group "Momentum"; +input int momentumLength = 14; // Length +input ENUM_APPLIED_PRICE momentumAppliedTo = PRICE_CLOSE; // Applied To + +// +// SAR ... +input group "SAR"; +input double sarStep = 0.02; // Step +input double sarMaximum = 0.2; // Maximum + +// +// MACD ... +// The buffer numbers are the following: 0 - MAIN_LINE, 1 - SIGNAL_LINE. +input group "MACD"; +input int macdFastLength = 12; // Fast Length +input int macdSlowLength = 26; // Slow Length +input int macdSignaLength = 9; // Signal Length +input ENUM_APPLIED_PRICE macdAppliedTo = PRICE_CLOSE; // Applied To + +// +// STOCHASTIC ... +// The buffer numbers: 0 - MAIN_LINE, 1 - SIGNAL_LINE. +input group "Stochastic"; +input int stochKLength = 5; // K Length +input int stochDLength = 3; // D Length +input int stochSlowing = 3; // Slowing +input ENUM_MA_METHOD stochMaMethod = MODE_SMA; // Ma Method +input ENUM_STO_PRICE stochMode = STO_LOWHIGH; // Calculation Mode + +// +// END Inputs ... +// + +// +// Includes Common Library ... +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// START Buffers ... +// + +// +#property indicator_chart_window + +// +#property indicator_buffers 15 +#property indicator_plots 0 + +// +// ATR ... +#define atrBufferIndex 0 +double atrBuffer[]; + +// +// RVI ... +#define rviMainBufferIndex 1 +#define rviSignalBufferIndex 2 +double rviMainBuffer[]; +double rviSignalBuffer[]; + +// +// BULLPOWER ... +#define bullPBufferIndex 3 +double bullPBuffer[]; + +// +// BEARPOWER ... +#define bearPBufferIndex 4 +double bearPBuffer[]; + +// +// VOLUME ... +#define volumeBufferIndex 5 +double volumeBuffer[]; + +// +// RSI ... +#define rsiBufferIndex 6 +double rsiBuffer[]; + +// +// CCI ... +#define cciBufferIndex 7 +double cciBuffer[]; + +// +// MOMENTUM ... +#define momentumBufferIndex 8 +double momentumBuffer[]; + +// +// SAR ... +#define sarBufferIndex 9 +double sarBuffer[]; + +// +// MACD ... +#define macdMainBufferIndex 10 +#define macdSignalBufferIndex 11 +double macdMainBuffer[]; +double macdSignalBuffer[]; + +// +// STOCHASTIC ... +#define stochMainBufferIndex 12 +#define stochSignalBufferIndex 13 +double stochMainBuffer[]; +double stochSignalBuffer[]; + +// +// STANDARDDEVIATION ... +#define stddevBufferIndex 14 +double stddevBuffer[]; + +// +// END Buffers ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// + +// +int maxLength; + +// +int atrHandler = INVALID_HANDLE; +int rviHandler = INVALID_HANDLE; +int bullPHandler = INVALID_HANDLE; +int bearPHandler = INVALID_HANDLE; +int volumeHandler = INVALID_HANDLE; +int rsiHandler = INVALID_HANDLE; +int cciHandler = INVALID_HANDLE; +int momentumHandler = INVALID_HANDLE; +int sarHandler = INVALID_HANDLE; +int macdHandler = INVALID_HANDLE; +int stochHandler = INVALID_HANDLE; +int stddevHandler = INVALID_HANDLE; + +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// START Event Handlers ... +// + +// +// Initialization ... +int OnInit() +{ + // + // Validate Inputs ... + if (!ValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + // 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 ... + maxLength = ExtractMaxLengthOfInputs(); + + // + // Initializing Handlers ... + + // + // ATR ... + atrHandler = iATR( + _Symbol, + _Period, + atrLength); + + // + // RVI ... + rviHandler = iRVI( + _Symbol, + _Period, + rviLength); + + // + // BULLSPOWER ... + bullPHandler = iBullsPower( + _Symbol, + _Period, + bullpLength); + + // + // BEARSPOWER ... + bearPHandler = iBearsPower( + _Symbol, + _Period, + bullpLength); + + // + // VOLUMES ... + volumeHandler = iVolumes( + _Symbol, + _Period, + volumeAppliedTo); + + // + // RSI ... + rsiHandler = iRSI( + _Symbol, + _Period, + rsiLength, + rsiAppliedTo); + + // + // CCI ... + cciHandler = iCCI( + _Symbol, + _Period, + cciLength, + cciAppliedTo); + + // + // MOMENTUM ... + momentumHandler = iMomentum( + _Symbol, + _Period, + momentumLength, + momentumAppliedTo); + + // + // SAR ... + sarHandler = iSAR( + _Symbol, + _Period, + sarStep, + sarMaximum); + + // + // MACD ... + macdHandler = iMACD( + _Symbol, + _Period, + macdFastLength, + macdSlowLength, + macdSignaLength, + macdAppliedTo); + + // + // STOCHASTIC ... + stochHandler = iStochastic( + _Symbol, + _Period, + stochKLength, + stochDLength, + stochSlowing, + stochMaMethod, + stochMode); + + // + // STANDARDDEVIATION ... + stddevHandler = iStdDev( + _Symbol, + _Period, + stddevLength, + stddevShift, + stddevMethod, + stddevAppliedTo); + + // + bool isAllHandlersInit = + // + atrHandler != INVALID_HANDLE && + rviHandler != INVALID_HANDLE && + bullPHandler != INVALID_HANDLE && + bearPHandler != INVALID_HANDLE && + volumeHandler != INVALID_HANDLE && + rsiHandler != INVALID_HANDLE && + cciHandler != INVALID_HANDLE && + momentumHandler != INVALID_HANDLE && + sarHandler != INVALID_HANDLE && + macdHandler != INVALID_HANDLE && + stochHandler != INVALID_HANDLE && + stddevHandler != INVALID_HANDLE + // + ; + if (!isAllHandlersInit) + { + return INIT_FAILED; + } + + // + // Define Index Buffers ... + DefineBuffers(); + + // + // Set Indicator ShortName ... + SetIndicatorName(); + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart period is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs 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 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed + + // + // Here we can handle De Initialization Reasons ... + IndicatorRelease(atrHandler); + IndicatorRelease(rviHandler); + IndicatorRelease(bullPHandler); + IndicatorRelease(bearPHandler); + IndicatorRelease(volumeHandler); + IndicatorRelease(rsiHandler); + IndicatorRelease(cciHandler); + IndicatorRelease(momentumHandler); + IndicatorRelease(sarHandler); + IndicatorRelease(macdHandler); + IndicatorRelease(stochHandler); + IndicatorRelease(stddevHandler); +} + +// +// Calculating what we want ... +int OnCalculate( + // + // total Candles on chart ... + const int rates_total, + // + // total calculated Candles on charts ... + const int prev_calculated, + // + // history of Candles Open Time ... + const datetime &time[], + // + // history of Candles Open Price ... + const double &open[], + // + // history of Candles High Price ... + const double &high[], + // + // history of Candles Low Price ... + const double &low[], + // + // history of Candles Close Price ... + const double &close[], + // + // history of Tick Volumes on Candle ... + const long &tick_volume[], + // + // history of Trade Volumes ... + const long &volume[], + // + // history of Candles Spread Price ... + const int &spread[]) +{ + // + // Prepare Buffers ... + ArraySetAsSeries(time, true); + ArraySetAsSeries(open, true); + ArraySetAsSeries(high, true); + ArraySetAsSeries(low, true); + ArraySetAsSeries(close, true); + ArraySetAsSeries(tick_volume, true); + ArraySetAsSeries(volume, true); + ArraySetAsSeries(spread, true); + + // + // this counts Available Bars ... + int limit; + + // + // Check Calculated Bars ... + int atrCalculatedBars = BarsCalculated(atrHandler); + int rviCalculatedBars = BarsCalculated(rviHandler); + int bullPCalculatedBars = BarsCalculated(bullPHandler); + int bearPCalculatedBars = BarsCalculated(bearPHandler); + int volumeCalculatedBars = BarsCalculated(volumeHandler); + int rsiCalculatedBars = BarsCalculated(rsiHandler); + int cciCalculatedBars = BarsCalculated(cciHandler); + int momentumCalculatedBars = BarsCalculated(momentumHandler); + int sarCalculatedBars = BarsCalculated(sarHandler); + int macdCalculatedBars = BarsCalculated(macdHandler); + int stochCalculatedBars = BarsCalculated(stochHandler); + int stddevCalculatedBars = BarsCalculated(stddevHandler); + + // + bool isCalculatedBarsPassed = + // + atrCalculatedBars >= maxLength && + rviCalculatedBars >= maxLength && + bullPCalculatedBars >= maxLength && + bearPCalculatedBars >= maxLength && + volumeCalculatedBars >= maxLength && + rsiCalculatedBars >= maxLength && + cciCalculatedBars >= maxLength && + momentumCalculatedBars >= maxLength && + sarCalculatedBars >= maxLength && + macdCalculatedBars >= maxLength && + stochCalculatedBars >= maxLength && + stddevCalculatedBars >= maxLength + // + ; + if (!isCalculatedBarsPassed) + { + return prev_calculated; + } + + // + limit = (prev_calculated > rates_total || prev_calculated <= 0) ? rates_total : (rates_total - prev_calculated) + 1; + + // + // Buffers Copy ... + int atrCopiedItems = CopyBuffer(atrHandler, 0, 0, limit, atrBuffer); + int rviMainCopiedItems = CopyBuffer(rviHandler, MAIN_LINE, 0, limit, rviMainBuffer); + int rviSignalCopiedItems = CopyBuffer(rviHandler, SIGNAL_LINE, 0, limit, rviSignalBuffer); + int bullPCopiedItems = CopyBuffer(bullPHandler, 0, 0, limit, bullPBuffer); + int bearPCopiedItems = CopyBuffer(bearPHandler, 0, 0, limit, bearPBuffer); + int volumeCopiedItems = CopyBuffer(volumeHandler, 0, 0, limit, volumeBuffer); + int rsiCopiedItems = CopyBuffer(rsiHandler, 0, 0, limit, rsiBuffer); + int cciCopiedItems = CopyBuffer(cciHandler, 0, 0, limit, cciBuffer); + int momentumCopiedItems = CopyBuffer(momentumHandler, 0, 0, limit, momentumBuffer); + int sarCopiedItems = CopyBuffer(sarHandler, 0, 0, limit, sarBuffer); + int macdMainCopiedItems = CopyBuffer(macdHandler, MAIN_LINE, 0, limit, macdMainBuffer); + int macdSignalCopiedItems = CopyBuffer(macdHandler, SIGNAL_LINE, 0, limit, macdSignalBuffer); + int stochMainCopiedItems = CopyBuffer(stochHandler, MAIN_LINE, 0, limit, stochMainBuffer); + int stocSignalhCopiedItems = CopyBuffer(stochHandler, SIGNAL_LINE, 0, limit, stochSignalBuffer); + int stddevCopiedItems = CopyBuffer(stddevHandler, 0, 0, limit, stddevBuffer); + + // + bool isCopiedBarsPassed = + // + atrCopiedItems > 0 && + rviMainCopiedItems > 0 && + rviSignalCopiedItems > 0 && + bullPCopiedItems > 0 && + bearPCopiedItems > 0 && + volumeCopiedItems > 0 && + rsiCopiedItems > 0 && + cciCopiedItems > 0 && + momentumCopiedItems > 0 && + sarCopiedItems > 0 && + macdMainCopiedItems > 0 && + macdSignalCopiedItems > 0 && + stochMainCopiedItems > 0 && + stocSignalhCopiedItems > 0 && + stddevCopiedItems > 0 + // + ; + if (!isCopiedBarsPassed) + { + return prev_calculated; + } + + // + // Main Loop ... + for (int i = limit - 1; i >= 0 && !IsStopped(); i--) + { + // + // Do Buffers Calculation ... + // HERE We Do Not anything ... + } + + // + return rates_total; +} + +// +// END Event Handlers ... +// + +// +// START Functions ... +// + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = false; + + // + // Validate Args ... + result = + // + atrLength >= 2 && + rviLength >= 2 && + bullpLength >= 2 && + bearpLength >= 2 && + rsiLength >= 2 && + cciLength >= 2 && + momentumLength >= 2 && + sarStep > 0 && + sarStep < sarMaximum && + macdFastLength >= 2 && + macdSlowLength > macdFastLength && + macdSignaLength >= 2 && + stochKLength >= 2 && + stochDLength >= 2 && + stochSlowing >= 2 && + stddevLength >= 2 && + stddevShift >= 0 + // + ; + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + result = MathMax(atrLength, rviLength); + result = MathMax(result, bullpLength); + result = MathMax(result, bearpLength); + result = MathMax(result, rsiLength); + result = MathMax(result, cciLength); + result = MathMax(result, momentumLength); + result = MathMax(result, macdFastLength); + result = MathMax(result, macdSlowLength); + result = MathMax(result, macdSignaLength); + result = MathMax(result, stochKLength); + result = MathMax(result, stochDLength); + result = MathMax(result, stochSlowing); + result = MathMax(result, stddevLength); + + // + return result; +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // DATA Buffers ... + + // + // ATR ... + ArraySetAsSeries(atrBuffer, true); + SetIndexBuffer(atrBufferIndex, atrBuffer, INDICATOR_CALCULATIONS); + + // + // RVI ... + + // + // Main ... + ArraySetAsSeries(rviMainBuffer, true); + SetIndexBuffer(rviMainBufferIndex, rviMainBuffer, INDICATOR_CALCULATIONS); + + // + // Signal ... + ArraySetAsSeries(rviSignalBuffer, true); + SetIndexBuffer(rviSignalBufferIndex, rviSignalBuffer, INDICATOR_CALCULATIONS); + + // + // BULLPOWER ... + ArraySetAsSeries(bullPBuffer, true); + SetIndexBuffer(bullPBufferIndex, bullPBuffer, INDICATOR_CALCULATIONS); + + // + // BEARPOWER ... + ArraySetAsSeries(bearPBuffer, true); + SetIndexBuffer(bearPBufferIndex, bearPBuffer, INDICATOR_CALCULATIONS); + + // + // VOLUME ... + ArraySetAsSeries(volumeBuffer, true); + SetIndexBuffer(volumeBufferIndex, volumeBuffer, INDICATOR_CALCULATIONS); + + // + // RSI ... + ArraySetAsSeries(rsiBuffer, true); + SetIndexBuffer(rsiBufferIndex, rsiBuffer, INDICATOR_CALCULATIONS); + + // + // CCI ... + ArraySetAsSeries(cciBuffer, true); + SetIndexBuffer(cciBufferIndex, cciBuffer, INDICATOR_CALCULATIONS); + + // + // MOMENTUM ... + ArraySetAsSeries(momentumBuffer, true); + SetIndexBuffer(momentumBufferIndex, momentumBuffer, INDICATOR_CALCULATIONS); + + // + // SAR ... + ArraySetAsSeries(sarBuffer, true); + SetIndexBuffer(sarBufferIndex, sarBuffer, INDICATOR_CALCULATIONS); + + // + // STANDARDDEVIATION ... + ArraySetAsSeries(stddevBuffer, true); + SetIndexBuffer(stddevBufferIndex, stddevBuffer, INDICATOR_CALCULATIONS); + + // + // MACD ... + + // + // Main ... + ArraySetAsSeries(macdMainBuffer, true); + SetIndexBuffer(macdMainBufferIndex, macdMainBuffer, INDICATOR_CALCULATIONS); + + // + // Signal ... + ArraySetAsSeries(macdSignalBuffer, true); + SetIndexBuffer(macdSignalBufferIndex, macdSignalBuffer, INDICATOR_CALCULATIONS); +} + +// +// END Functions ... +// diff --git a/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xstr.mq5 b/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xstr.mq5 new file mode 100644 index 0000000..bca9597 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xstr.mq5 @@ -0,0 +1,580 @@ +////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Indicator +// --------------------------------------------- +// Name: X121_XSTR +// Description: Super Trend 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 X121_XAMA Indicator" +#property strict + +// +// START Constants ... +// + +#define ShortName "X121_XSTR" + +// +// END Constants ... +// + +// +// START Inputs ... +// + +// +// Market ... +input group "ATR"; +input int atrLength = 14; // Length +input double atrMultiplier = 3.0; // Multiplier +input ENUM_APPLIED_PRICE atrAppliedTo = PRICE_MEDIAN; // Applied To + +// +// Presentation ... +input group "Presentation"; +input bool showTrends = true; // Show Trends +input bool fillTrends = true; // Fill Trends + +// +// END Inputs ... +// + +// +// Includes Common Library ... +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// START Buffers ... +// + +// +#property indicator_chart_window + +// +#property indicator_buffers 9 +#property indicator_plots 2 + +// +#define fillUpBufferIndex 0 +double fillUpBuffer[]; + +#define fillDownBufferIndex 1 +double fillDownBuffer[]; + +// +#define fillingPlotBufferIndex 0 + +// +#property indicator_label1 "X121_XSTR Filling" +#property indicator_type1 DRAW_FILLING +#property indicator_color1 clrBisque, clrPaleGreen + +// +#define mainBufferIndex 2 +#define mainPlotBufferIndex 1 +double mainBuffer[]; + +// +#define mainColorBufferIndex 3 +double mainColorBuffer[]; + +// +#property indicator_label2 "X121_XSTR" +#property indicator_type2 DRAW_COLOR_LINE +#property indicator_color2 CLR_NONE, clrGreen, clrDarkRed +#property indicator_style2 STYLE_DOT + +// +// DATA Buffers ... + +// +#define atrBufferIndex 4 +double atrBuffer[]; + +// +#define trendBufferIndex 5 +double trendBuffer[]; + +// +#define upBufferIndex 6 +double upBuffer[]; + +// +#define downBufferIndex 7 +double downBuffer[]; + +// +#define priceBufferIndex 8 +double priceBuffer[]; + +// +// END Buffers ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// + +// +int maxLength; + +// +int atrHandler = INVALID_HANDLE; + +// +int changeOfTrend; +int startBearishTrend; +int startBullishTrend; + +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// START Event Handlers ... +// + +// +// Initialization ... +int OnInit() +{ + // + // Validate Inputs ... + if (!ValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + // 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 ... + maxLength = ExtractMaxLengthOfInputs(); + + // + atrHandler = iATR( + _Symbol, + _Period, + atrLength); + if (atrHandler == INVALID_HANDLE) + { + return INIT_FAILED; + } + + // + // Define Index Buffers ... + DefineBuffers(); + + // + // Set Indicator ShortName ... + SetIndicatorName(); + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart period is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs 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 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed + + // + // Here we can handle De Initialization Reasons ... + IndicatorRelease(atrHandler); +} + +// +// Calculating what we want ... +int OnCalculate( + // + // total Candles on chart ... + const int rates_total, + // + // total calculated Candles on charts ... + const int prev_calculated, + // + // history of Candles Open Time ... + const datetime &time[], + // + // history of Candles Open Price ... + const double &open[], + // + // history of Candles High Price ... + const double &high[], + // + // history of Candles Low Price ... + const double &low[], + // + // history of Candles Close Price ... + const double &close[], + // + // history of Tick Volumes on Candle ... + const long &tick_volume[], + // + // history of Trade Volumes ... + const long &volume[], + // + // history of Candles Spread Price ... + const int &spread[]) +{ + // + int numOfRequiredAtrs; + if (prev_calculated > rates_total || prev_calculated < 0) + { + numOfRequiredAtrs = rates_total; + } + else + { + // + numOfRequiredAtrs = rates_total - prev_calculated; + if (prev_calculated > 0) + { + numOfRequiredAtrs++; + } + } + + // + // Checking for stop ... + if (IsStopped()) + { + return 0; + } + + // + // Check Number of items Copy or not ... + int copiedATRs = CopyBuffer(atrHandler, 0, 0, numOfRequiredAtrs, atrBuffer); + if (copiedATRs <= 0) + { + return 0; + } + + // + int limit; + + // + // checking for the limit start of calculation of an indicator ... + if (prev_calculated > rates_total || prev_calculated <= 0) + { + // + // starting index for calculation of all bars ... + limit = maxLength; + } + else + { + // + // starting number for calculation of new bars + limit = prev_calculated - 1; + } + + // + // Main Loop ... + for (int i = limit; i < rates_total && !IsStopped(); i++) + { + // + // Calculated Price ... + double price = getPrice( + atrAppliedTo, + open, + high, + low, + close, + i); + // price = (high[i] + low[i]) / 2; + priceBuffer[i] = price; + + // + double atr = atrBuffer[i]; + + // + // Up ... + upBuffer[i] = price + (atrMultiplier * atr); + + // + // Down ... + downBuffer[i] = price - (atrMultiplier * atr); + + // + if (close[i] > upBuffer[i - 1]) + { + // + trendBuffer[i] = 1; + if (trendBuffer[i - 1] == -1) + { + changeOfTrend = 1; + } + } + else if (close[i] < downBuffer[i - 1]) + { + // + trendBuffer[i] = -1; + if (trendBuffer[i - 1] == 1) + { + changeOfTrend = 1; + } + } + else if (trendBuffer[i - 1] == 1) + { + // + trendBuffer[i] = 1; + changeOfTrend = 0; + } + else if (trendBuffer[i - 1] == -1) + { + // + trendBuffer[i] = -1; + changeOfTrend = 0; + } + + // + // Down Trend Starting ... + if (trendBuffer[i] < 0 && trendBuffer[i - 1] > 0) + { + startBearishTrend = 1; + } + else + { + startBearishTrend = 0; + } + + // + // Up Trend Starting ... + if (trendBuffer[i] > 0 && trendBuffer[i - 1] < 0) + { + startBullishTrend = 1; + } + else + { + startBullishTrend = 0; + } + + // + if (trendBuffer[i] > 0 && downBuffer[i] < downBuffer[i - 1]) + { + downBuffer[i] = downBuffer[i - 1]; + } + + // + if (trendBuffer[i] < 0 && upBuffer[i] > upBuffer[i - 1]) + { + upBuffer[i] = upBuffer[i - 1]; + } + + // + if (startBearishTrend == 1) + { + upBuffer[i] = priceBuffer[i] + (atrMultiplier * atr); + } + + // + if (startBullishTrend == 1) + { + downBuffer[i] = priceBuffer[i] - (atrMultiplier * atr); + } + + // + // Draw the indicator ... + + // + double colorIDX = 0; + mainColorBuffer[i] = colorIDX; + + // + if (trendBuffer[i] == 1) + { + // + mainBuffer[i] = downBuffer[i]; + if (changeOfTrend == 1) + { + mainBuffer[i - 1] = mainBuffer[i - 2]; + changeOfTrend = 0; + } + + // + colorIDX = 1; + } + else if (trendBuffer[i] == -1) + { + // + mainBuffer[i] = upBuffer[i]; + if (changeOfTrend == 1) + { + // + mainBuffer[i - 1] = mainBuffer[i - 2]; + changeOfTrend = 0; + } + + // + colorIDX = 2; + } + + // + if (showTrends) + { + mainColorBuffer[i] = colorIDX; + } + + // + // Filling ... + if (fillTrends) + { + // + fillUpBuffer[i] = mainBuffer[i]; + fillDownBuffer[i] = close[i]; + } + else + { + // + fillUpBuffer[i] = EMPTY_VALUE; + fillDownBuffer[i] = EMPTY_VALUE; + } + } + + // + return rates_total; +} + +// +// END Event Handlers ... +// + +// +// START Functions ... +// + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = false; + + // + // Validate Args ... + result = + // + atrLength >= 2 + // + ; + + // + return result; +} + +// +// Retrieve all Exists Input Max Length ... +// use for Start Of Drawing ... +int ExtractMaxLengthOfInputs() +{ + // + int result = 0; + + // + result = atrLength; + + // + return result; +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // PLOT Buffers ... + + // + // FILLINGS ... + SetIndexBuffer(fillUpBufferIndex, fillUpBuffer, INDICATOR_DATA); + SetIndexBuffer(fillDownBufferIndex, fillDownBuffer, INDICATOR_DATA); + PlotIndexSetInteger(fillingPlotBufferIndex, PLOT_SHOW_DATA, false); + + // + // MAIN ... + SetIndexBuffer(mainBufferIndex, mainBuffer, INDICATOR_DATA); + PlotIndexSetInteger(mainPlotBufferIndex, PLOT_SHOW_DATA, showTrends); + SetIndexBuffer(mainColorBufferIndex, mainColorBuffer, INDICATOR_COLOR_INDEX); + + // + // DATA Buffers ... + + // + // ATR ... + SetIndexBuffer(atrBufferIndex, atrBuffer, INDICATOR_CALCULATIONS); + + // + // TREND ... + SetIndexBuffer(trendBufferIndex, trendBuffer, INDICATOR_CALCULATIONS); + + // + // UP ... + SetIndexBuffer(upBufferIndex, upBuffer, INDICATOR_CALCULATIONS); + + // + // DOWN ... + SetIndexBuffer(downBufferIndex, downBuffer, INDICATOR_CALCULATIONS); + + // + // PRICE ... + SetIndexBuffer(priceBufferIndex, priceBuffer, INDICATOR_CALCULATIONS); +} + +// +// END Functions ... +// + +// +// TEMPLATE Function ... + +template +double getPrice(ENUM_APPLIED_PRICE tprice, T &open[], T &high[], T &low[], T &close[], int i) +{ + switch (tprice) + { + case PRICE_CLOSE: + return (close[i]); + case PRICE_OPEN: + return (open[i]); + case PRICE_HIGH: + return (high[i]); + case PRICE_LOW: + return (low[i]); + case PRICE_MEDIAN: + return ((high[i] + low[i]) / 2.0); + case PRICE_TYPICAL: + return ((high[i] + low[i] + close[i]) / 3.0); + case PRICE_WEIGHTED: + return ((high[i] + low[i] + close[i] + close[i]) / 4.0); + } + return (0); +} diff --git a/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xzg.mq5 b/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xzg.mq5 new file mode 100644 index 0000000..d7cde07 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Indicators/x-saherelm.x121.xzg.mq5 @@ -0,0 +1,757 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Indicator +// --------------------------------------------- +// Name: X121_XZG +// Description: Zogzag Implementation ... +// +// +// 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 X121_XZG Indicator" +#property strict + +// +#define ShortName "X121_XZG" + +// +// DEFINITIONS ... +enum ENUM_X_ZG_SEARCH_MODE +{ + X_ZG_SEARCH_EXTREMUM = 0, // searching for the first extremum + X_ZG_SEARCH_PEAK = 1, // searching for the next ZigZag peak + X_ZG_SEARCH_VALE = -1 // searching for the next ZigZag vale +}; + +// +// How to Calculate Up and Down Price ... +enum ENUM_X_ZG_PRICE_MODE +{ + // + X_ZG_PRICE_HIGH_LOW_MODE = 1, + X_ZG_PRICE_OPEN_CLOSE_MODE = 2, +}; + +// +// INPUT ... + +// +input int depth = 12; // Depth +input int deviation = 5; // Deviation +input int backStep = 3; // Back Step +input ENUM_X_ZG_PRICE_MODE mode = X_ZG_PRICE_HIGH_LOW_MODE; // Mode + +// +// BUFFERS ... + +// +#property indicator_chart_window + +// +#property indicator_buffers 5 +#property indicator_plots 3 + +// +// ZigZag ... + +// +#define mainBufferIndex 0 +#define mainBufferPlotIndex 0 +double mainBuffer[]; + +// +#property indicator_label1 "X121_XZG Main" +#property indicator_type1 DRAW_SECTION +#property indicator_color1 clrYellow +#property indicator_width1 2 + +// +// Highs ... + +// +// ZigZag Pointer or Line Indicator ... +#define arrowBufferIndex 1 +#define arrowBufferPlotIndex 1 +double arrowBuffer[]; + +// +#define arrowColorBufferIndex 2 +double arrowColorBuffer[]; + +// +#property indicator_label2 "X121_XZG PV" +#property indicator_type2 DRAW_COLOR_ARROW +#property indicator_color2 clrAqua, clrMagenta +#property indicator_width2 1 + +// +#define highsBufferIndex 3 +double highsBuffer[]; + +// +// Lows ... + +// +#define lowsBufferIndex 4 +double lowsBuffer[]; + +// +// VARIABLES ... + +// +int mRecalc = 3; // Number of last extremes for recalculation + +// +// EVENT Handlers ... + +// +// Initialization ... +int OnInit() +{ + // + // Validate Inputs ... + if (!ValidateInputs()) + { + return INIT_PARAMETERS_INCORRECT; + } + + // + // logTag = ShortName; + + // + // Define Index Buffers ... + DefineBuffers(); + + // + // Set Indicator ShortName ... + SetIndicatorName(); + + // + // Init Succeed ... + return INIT_SUCCEEDED; +} + +// +// DeInitialization ... +void OnDeinit(const int reason) +{ + // + // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function + // REASON_REMOVE 1 Program removed from a chart + // REASON_RECOMPILE 2 Program recompiled + // REASON_CHARTCHANGE 3 A symbol or a chart period is changed + // REASON_CHARTCLOSE 4 Chart closed + // REASON_PARAMETERS 5 Inputs 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 Another chart template applied + // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value + // REASON_CLOSE 9 Terminal closed +} + +// +// Calculating what we want ... +int OnCalculate( + // + // total Candles on chart ... + const int rates_total, + // + // total calculated Candles on charts ... + const int prev_calculated, + // + // history of Candles Open Time ... + const datetime &time[], + // + // history of Candles Open Price ... + const double &open[], + // + // history of Candles High Price ... + const double &high[], + // + // history of Candles Low Price ... + const double &low[], + // + // history of Candles Close Price ... + const double &close[], + // + // history of Tick Volumes on Candle ... + const long &tick_volume[], + // + // history of Trade Volumes ... + const long &volume[], + // + // history of Candles Spread Price ... + const int &spread[] // +) +{ + // + double mZGHigh[]; + double mZGLow[]; + if (mode == X_ZG_PRICE_OPEN_CLOSE_MODE) + { + // + ArrayCopy( + mZGHigh, + open + // + ); + + // + ArrayCopy( + mZGLow, + close + // + ); + } + else + { + // + ArrayCopy( + mZGHigh, + high + // + ); + + // + ArrayCopy( + mZGLow, + low + // + ); + } + + // + int zigZagResult = CalcukateZigZag( + prev_calculated, + rates_total, + mZGHigh, + mZGLow + // + ); + + // + if (zigZagResult != rates_total) + { + return zigZagResult; + } + + // + return rates_total; +} + +// +// CUSTOM Functions ... + +// +// Validate Input Args for Initialization ... +bool ValidateInputs() +{ + // + bool result = false; + + // + result = + // + depth > 0 && + deviation > 0 && + backStep > 0 + // + ; + + // + return result; +} + +// +// Define Indexes and Styles ... +void DefineBuffers() +{ + // + // Main ... + + // + SetIndexBuffer(mainBufferIndex, mainBuffer, INDICATOR_DATA); + + // + PlotIndexSetInteger(mainBufferPlotIndex, PLOT_SHOW_DATA, true); + PlotIndexSetInteger(mainBufferPlotIndex, PLOT_DRAW_BEGIN, 0); + PlotIndexSetDouble(mainBufferPlotIndex, PLOT_EMPTY_VALUE, 0); + + // + // Arrow ... + + // + SetIndexBuffer(arrowBufferIndex, arrowBuffer, INDICATOR_DATA); + + // + PlotIndexSetInteger(arrowBufferPlotIndex, PLOT_SHOW_DATA, true); + PlotIndexSetInteger(arrowBufferPlotIndex, PLOT_DRAW_BEGIN, 0); + PlotIndexSetInteger(arrowBufferPlotIndex, PLOT_ARROW, 159); + PlotIndexSetInteger(arrowBufferPlotIndex, PLOT_ARROW_SHIFT, 0); + PlotIndexSetDouble(arrowBufferPlotIndex, PLOT_EMPTY_VALUE, 0); + + // + // Arrow Color ... + SetIndexBuffer(arrowColorBufferIndex, arrowColorBuffer, INDICATOR_COLOR_INDEX); + + // + // Highs ... + SetIndexBuffer(highsBufferIndex, highsBuffer, INDICATOR_CALCULATIONS); + + // + // Lows ... + SetIndexBuffer(lowsBufferIndex, lowsBuffer, INDICATOR_CALCULATIONS); +} + +// +// Set Indicator Short Name and also we can define Buffers Labels ... +void SetIndicatorName() +{ + IndicatorSetString(INDICATOR_SHORTNAME, ShortName); +} + +// +// Calculating Zig Zag ... +int CalcukateZigZag( + const int prev_calculated, + const int rates_total, + double &high[], + double &low[] + // +) +{ + // + if (rates_total < 100) + { + return 0; + } + + // + // Define Variables ... + int i = 0; + + // + int start = 0; + int extreme_counter = 0; + int extreme_search = X_ZG_SEARCH_EXTREMUM; + int shift = 0; + int back = 0; + int last_high_pos = 0; + int last_low_pos = 0; + + // + double val = 0; + double res = 0; + double curlow = 0; + double curhigh = 0; + double last_high = 0; + double last_low = 0; + + // + double colorIDX = 0; + double lastZigZagValue = 0; + + // + // Initializing ... + if (prev_calculated == 0) + { + // + ArrayInitialize(mainBuffer, 0); + ArrayInitialize(highsBuffer, 0); + ArrayInitialize(lowsBuffer, 0); + + // + start = depth; + } + + // + // Already Calculated Before ... + if (prev_calculated > 0) + { + // + i = rates_total - 1; + + // + // Searching for the third X_ZG_SEARCH_EXTREMUM from the last UnComplete Bar ... + while (extreme_counter < mRecalc && i > rates_total - 100) + { + // + res = mainBuffer[i]; + if (res != 0) + { + extreme_counter++; + } + + // + i--; + } + + // + i++; + start = i; + + // + // What type of X_ZG_SEARCH_EXTREMUM we Search for ... + if (lowsBuffer[i] != 0) + { + // + curlow = lowsBuffer[i]; + extreme_search = X_ZG_SEARCH_PEAK; + } + else + { + // + curhigh = highsBuffer[i]; + extreme_search = X_ZG_SEARCH_VALE; + } + + // + // Clear Values ... + for (i = start + 1; i < rates_total && !IsStopped(); i++) + { + // + mainBuffer[i] = 0; + lowsBuffer[i] = 0; + highsBuffer[i] = 0; + } + } + + // + // Search for High and Low Extremes ... + for (shift = start; shift < rates_total && !IsStopped(); shift++) + { + // + // Low ... + val = low[Lowest(low, depth, shift)]; + if (val == last_low) + { + val = 0; + } + else + { + // + last_low = val; + + // + if ((low[shift] - val) > deviation * _Point) + { + val = 0; + } + else + { + // + for (back = 1; back <= backStep; back++) + { + // + res = lowsBuffer[shift - back]; + if ((res != 0) && (res > val)) + { + lowsBuffer[shift - back] = 0; + } + } + } + } + + // + if (low[shift] == val) + { + lowsBuffer[shift] = val; + } + else + { + lowsBuffer[shift] = 0; + } + + // + // High ... + val = high[Highest(high, depth, shift)]; + if (val == last_high) + { + val = 0; + } + else + { + // + last_high = val; + + // + if ((val - high[shift]) > deviation * _Point) + { + val = 0; + } + else + { + // + for (back = 1; back <= backStep; back++) + { + // + res = highsBuffer[shift - back]; + if ((res != 0) && (res < val)) + { + highsBuffer[shift - back] = 0; + } + } + } + } + + // + if (high[shift] == val) + { + highsBuffer[shift] = val; + } + else + { + highsBuffer[shift] = 0; + } + } + + // + // Set Last Value ... + if (extreme_search == 0) // Undefined Values ... + { + // + last_low = 0; + last_high = 0; + } + else + { + // + last_low = curlow; + last_high = curhigh; + } + + // + // Final Selection of Extreme Points for ZigZag ... + for (shift = start; shift < rates_total && !IsStopped(); shift++) + { + // + res = 0; + + // + switch (extreme_search) + { + // + case X_ZG_SEARCH_EXTREMUM: + // + if (last_low == 0 && last_high == 0) + { + // + if (highsBuffer[shift] != 0) + { + // + last_high_pos = shift; + last_high = high[shift]; + + // + extreme_search = X_ZG_SEARCH_VALE; + + // + mainBuffer[shift] = last_high; + + // + res = 1; + } + + // + if (lowsBuffer[shift] != 0) + { + // + last_low_pos = shift; + last_low = low[shift]; + + // + extreme_search = X_ZG_SEARCH_PEAK; + + // + mainBuffer[shift] = last_low; + + // + res = 1; + } + } + break; + + // + case X_ZG_SEARCH_PEAK: + // + if (lowsBuffer[shift] != 0 && lowsBuffer[shift] < last_low && highsBuffer[shift] == 0) + { + // + mainBuffer[last_low_pos] = 0; + + // + last_low_pos = shift; + last_low = lowsBuffer[shift]; + + // + mainBuffer[shift] = last_low; + + // + res = 1; + } + + // + if (highsBuffer[shift] != 0 && lowsBuffer[shift] == 0) + { + // + last_high_pos = shift; + last_high = highsBuffer[shift]; + + // + mainBuffer[shift] = last_high; + + // + extreme_search = X_ZG_SEARCH_VALE; + + // + res = 1; + } + break; + + // + case X_ZG_SEARCH_VALE: + // + if (highsBuffer[shift] != 0 && highsBuffer[shift] > last_high && lowsBuffer[shift] == 0) + { + // + mainBuffer[last_high_pos] = 0; + + // + last_high_pos = shift; + last_high = highsBuffer[shift]; + + // + mainBuffer[shift] = last_high; + } + + // + if (lowsBuffer[shift] != 0 && highsBuffer[shift] == 0) + { + // + last_low_pos = shift; + last_low = lowsBuffer[shift]; + + // + mainBuffer[shift] = last_low; + + // + extreme_search = X_ZG_SEARCH_PEAK; + } + break; + } + + // + double iZigZagForColor = lastZigZagValue; + double iZigZag = mainBuffer[shift]; + if (iZigZag == 0 && lastZigZagValue != 0) + { + arrowBuffer[shift] = lastZigZagValue; + } + else if (iZigZag != 0) + { + // + lastZigZagValue = iZigZag; + arrowBuffer[shift] = lastZigZagValue; + } + + // + colorIDX = + lastZigZagValue > iZigZagForColor + ? 0 + : lastZigZagValue < iZigZagForColor + ? 1 + : colorIDX; + arrowColorBuffer[shift] = colorIDX; + } + + // + return rates_total; +} + +// +// TOOLS ... + +// +// Search for the index of the highest bar ... +int Highest( + const double &mArray[], + const int mDepth, + const int mStart // +) +{ + // + int result = 0; + + // + if (mStart < 0) + { + return result; + } + + // + double max = mArray[mStart]; + result = mStart; + + // + // Start searching ... + for (int i = mStart - 1; i > mStart - mDepth && i >= 0; i--) + { + // + if (mArray[i] > max) + { + // + result = i; + max = mArray[i]; + } + } + + // + // Return index of the highest bar + return result; +} + +// +// Search for the index of the lowest bar ... +int Lowest( + const double &mArray[], + const int mDepth, + const int mStart // +) +{ + // + int result = 0; + + // + if (mStart < 0) + { + return result; + } + + // + double min = mArray[mStart]; + result = mStart; + + // + // Start searching ... + for (int i = mStart - 1; i > mStart - mDepth && i >= 0; i--) + { + // + if (mArray[i] < min) + { + // + result = i; + min = mArray[i]; + } + } + + // + // Return index of the lowest bar + return result; +} diff --git a/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.alert.lib.mq5 b/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.alert.lib.mq5 new file mode 100644 index 0000000..429d830 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.alert.lib.mq5 @@ -0,0 +1,187 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Alert Library +// -------------------------------------- +// Name: XAlert +// Description: provides Alerts abilities ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// START Inputs ... +// +input group "Alerts"; +input bool enableAlerts = true; // Enable Alerts +input bool logAlerts = true; // Log Alerts +input bool terminalAlerts = false; // Terminal Alerts +input bool mailAlerts = false; // Mail Alerts +input bool pushAlerts = false; // Push Alerts +// +// END Inputs ... +// + +// +#include "x-saherelm.log.lib.mq5" + +// +// START Global Definitions: Variables, Properties and etc ... +// +string alertPrefix = "X-Alert"; +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// START Provided Functions ... +// +// +// Initial Library if required ... +bool OnInInitAlertLibrary() +{ + return false; +} + +// +// DeInitial Library if required ... +void OnDeinitAlertLibrary() +{ +} + +// +// Attach Alert Prefix to Message ... +string PrepareAlertMessage(string message) +{ + // + StringReplace(message, "\n", " | "); + + // + StringConcatenate(message, alertPrefix, " > ", message); + + // + return message; +} + +// +// Logging an Alert ... +void LogAlert(string message) +{ + // + // Validate Args ... + if (!enableAlerts || !logAlerts) + { + return; + } + + // + LogMessage(alertPrefix, message); +} + +// +// Terminal Alert ... +void TerminalAlert(string message) +{ + // + // Validate Args ... + if (!enableAlerts || !terminalAlerts) + { + return; + } + + // + // Prepare Message ... + message = PrepareAlertMessage(message); + + // Send Terminal Alert ... + Alert(message); +} + +// +// Mail Alert ... +void MailAlert(string message) +{ + // + // Validate Args ... + if (!enableAlerts || !mailAlerts) + { + return; + } + + // + // Send Mail Alert ... + SendMail(alertPrefix, message); +} + +// +// Send Push Notification ... +void PushAlert(string message) +{ + // + // Validate Args ... + if (!enableAlerts || !pushAlerts) + { + return; + } + + // + // Prepare Message ... + message = PrepareAlertMessage(message); + + // + // Send Push Notification Alert ... + SendNotification(message); +} + +// +// Alert Sending ... +void SendAlert(string message) +{ + // + // Validate Args ... + if (!enableAlerts) + { + return; + } + + // + // Log ... + if (logAlerts) + { + LogAlert(message); + } + + // + // Terminal ... + if (terminalAlerts) + { + TerminalAlert(message); + } + + // + // Mail ... + if (mailAlerts) + { + MailAlert(message); + } + + // + // Push ... + if (pushAlerts) + { + PushAlert(message); + } +} +// +// END Provided Functions ... +// diff --git a/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.common.lib.ex5 b/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.common.lib.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..0716bd215047c7bce28f370f345829e432423d26 GIT binary patch literal 4744 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 ILe!f72Unud#{d8T literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.common.lib.mq5 b/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.common.lib.mq5 new file mode 100644 index 0000000..634b73b --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.common.lib.mq5 @@ -0,0 +1,5774 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Common Library +// -------------------------------------- +// Name: XCommonLib +// Description: provide all commonly used functions ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict +\ +// +// Imports ... +#include "../Classes/x-saherelm.xmd5.class.mq5" + +// +// Models ... + +// +// Specified Price Type ... +enum ENUM_X_PRICE +{ + X_PRICE_HIGH, + X_PRICE_OPEN, + X_PRICE_CLOSE, + X_PRICE_LOW +}; + +// +// Swing Types Enum ... +enum ENUM_X_SWING_TYPE +{ + X_NO_SWING = 0, + X_SWING_HIGH = 1, + X_SWING_LOW = -1, +}; + +// +// XPERIOD Calculation Method ... +enum ENUM_X_PERIOD_METHOD +{ + // + X_PERIOD_NOTHING, // Nothing + X_PERIOD_AUTO, // Auto Select + X_PERIOD_MANUALLY // Manually +}; + +// +// Available Market Cycles ... +enum ENUM_X_MARKET_CYCLES +{ + // + X_MARKET_CYCLE_UNKNOWN, // Unknown Cycle + X_MARKET_CYCLE_SHORT, // Short Cycle + X_MARKET_CYCLE_MEDIUM, // Medium Cycle + X_MARKET_CYCLE_LONG, // Long Cycle + X_MARKET_CYCLE_HIND, // Hind Cycle +}; + +// +// Structs ... + +// +// Model a Bar Remains Time ... +struct XBarRemainsTime +{ + // + int days; + int hours; + int minutes; + int seconds; + + // + // Constructor ... + XBarRemainsTime() + { + Clean(); + } + + // + // Always Calculate Current 0 Bar Timing ... + bool Init( + string mSymbol = NULL, // Trading Symbol + ENUM_TIMEFRAMES mPeriod = NULL // Trading Period + ) + { + // + bool result = false; + + // + mSymbol = NormalizeSymbol(mSymbol); + mPeriod = NormalizePeriod(mPeriod); + + // + int minuteSecoonds = 60; + int hourSeconds = minuteSecoonds * 60; + int daySeconds = 24 * hourSeconds; + + // + int periodSeconds = PeriodSeconds( + mPeriod); + datetime startTime = GetBarTime( + mSymbol, + mPeriod, + 0 + // + ); + + // + int secondsDiff = (int)startTime + periodSeconds - (int)TimeCurrent(); + + // + int mWorkingSecondsDiff = secondsDiff; + if (mWorkingSecondsDiff > daySeconds) + { + // + days = mWorkingSecondsDiff / daySeconds; + mWorkingSecondsDiff -= days * daySeconds; + } + if (mWorkingSecondsDiff > hourSeconds) + { + // + hours = mWorkingSecondsDiff / hourSeconds; + mWorkingSecondsDiff -= hours * hourSeconds; + } + if (mWorkingSecondsDiff > minuteSecoonds) + { + // + minutes = mWorkingSecondsDiff / minuteSecoonds; + mWorkingSecondsDiff -= minutes * minuteSecoonds; + } + seconds = mWorkingSecondsDiff; + + // + result = true; + + // + return result; + } + + // + // Tools ... + + // + // Cleanup ... + void Clean() + { + days = 0; + hours = 0; + minutes = 0; + seconds = 0; + } + + // + // To String Representation ... + string ToString( + string dayId = "d", + string hourId = "h", + string minuteId = "m", + string secondId = "s", + string idSeparator = ": ", + string separator = ", ", + bool ignoreZeroValues = true + // + ) + { + // + string result = ""; + + // + // Days ... + if (!ignoreZeroValues || days > 0) + { + result += dayId + idSeparator + (string)days + separator; + } + + // + // Hours ... + if (!ignoreZeroValues || hours > 0) + { + // + string strHour = ToString(hours); + if (StringLen(strHour) == 1) + { + strHour = "0" + strHour; + } + + // + result += hourId + idSeparator + strHour + separator; + } + + // + // Minutes ... + if (!ignoreZeroValues || minutes > 0) + { + // + string strMinute = ToString(minutes); + if (StringLen(strMinute) == 1) + { + strMinute = "0" + strMinute; + } + + // + result += minuteId + idSeparator + strMinute + separator; + } + + // + // Seconds ... + if (!ignoreZeroValues || seconds > 0) + { + // + string strSec = ToString(seconds); + if (StringLen(strSec) == 1) + { + strSec = "0" + strSec; + } + + // + result += secondId + idSeparator + strSec; + } + + // + return result; + } +}; + +// +// Describe an Specific Candle ... +struct XOHCL +{ + // + // Props ... + + // + double high; + double open; + double close; + double low; + + // + string symbol; + datetime time; + ENUM_TIMEFRAMES period; + + // + // Constructor ... + XOHCL() + { + Clean(); + } + + // + // Init a Bar ... + // Using Bar Index ... + bool Init( + string mSymbol = NULL, // Trading Symbol + ENUM_TIMEFRAMES mPeriod = NULL, // Trading Period + int barIndex = 0 // Bar Index + ) + { + // + mSymbol = NormalizeSymbol(mSymbol); + mPeriod = NormalizePeriod(mPeriod); + + // + symbol = mSymbol; + period = mPeriod; + + // + time = iTime( + mSymbol, + mPeriod, + barIndex + // + ); + + // + open = iOpen( + mSymbol, + mPeriod, + barIndex + // + ); + + // + close = iClose( + mSymbol, + mPeriod, + barIndex + // + ); + + // + high = iHigh( + mSymbol, + mPeriod, + barIndex); + + // + low = iLow( + mSymbol, + mPeriod, + barIndex + // + ); + + // + bool result = IsValid(); + + // + return result; + } + + // + // Init a Bar ... + // Using Bar Time ... + bool Init( + string mSymbol = NULL, // Trading Symbol + ENUM_TIMEFRAMES mPeriod = NULL, // Trading Period + datetime mTime = NULL // Bar Time + ) + { + // + mTime = NormalizeTime(mTime); + + // + int barIndex = iBarShift( + mSymbol, + mPeriod, + mTime, + false // + ); + + // + bool result = Init( + mSymbol, + mPeriod, + barIndex + // + ); + + // + return result; + } + + // + // Tools ... + + // + void Clean() + { + // + high = 0; + open = 0; + close = 0; + low = 0; + + // + time = NULL; + symbol = NULL; + period = NULL; + } + + // + // Validate Bar ... + bool IsValid() + { + // + bool result = false; + + // + result = + // + high > 0 && + open > 0 && + close > 0 && + low > 0 + // + ; + + // + return result; + } + + // + // Calculate X_PRICE Specified Type ... + double GetPrice(ENUM_X_PRICE mPType) + { + // + double result = 0; + + // + if (mPType == NULL) + { + mPType = X_PRICE_CLOSE; + } + + // + if (!IsValid()) + { + return result; + } + + // + switch (mPType) + { + // + case X_PRICE_OPEN: + result = open; + break; + // + case X_PRICE_HIGH: + result = high; + break; + // + case X_PRICE_CLOSE: + result = close; + break; + // + case X_PRICE_LOW: + result = low; + break; + } + + // + return result; + } + + // + // Retrieve Price base On Series Mode ... + double GetPrice(ENUM_SERIESMODE mMode) { + // + ENUM_X_PRICE mXMode = ToPrice(mMode); + + // + return GetPrice(mXMode); + } + + // + // Calculate Applied Price ... + double GetPrice( + ENUM_APPLIED_PRICE mAppliedTo // Select Application Method + ) + { + // + double result = 0; + + // + // Calculate Applied Price ... + switch (mAppliedTo) + { + // + case PRICE_CLOSE: + result = close; + break; + + // + case PRICE_OPEN: + result = open; + break; + + // + case PRICE_HIGH: + result = high; + break; + + // + case PRICE_LOW: + result = low; + break; + + // + case PRICE_MEDIAN: + result = (high + low) / 2; + break; + + // + case PRICE_TYPICAL: + result = (high + low + close) / 3; + break; + + // + case PRICE_WEIGHTED: + result = (high + low + close + close) / 4; + break; + } + + // + return result; + } + + // + // Calculate Bar Mid Line ... + double GetMid() + { + // + double result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + result = (high + low) / 2; + + // + return result; + } + + // + // Calculate up Price ... + double GetUp() + { + // + double result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + result = MathMax(open, close); + + // + return result; + } + + // + // Calculate Down Price ... + double GetDown() + { + // + double result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + result = MathMin(open, close); + + // + return result; + } + + // + // Calculate Bar Body ... + double GetBody() + { + // + double result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + result = GetUp() - GetDown(); + + // + return result; + } + + // + // Calculate Bar Range ... + double GetRange() + { + // + double result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + result = high - low; + + // + return result; + } + + // + // Calculate Bar Shadows ... + double GetShadows() + { + // + double result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + result = GetRange() - GetBody(); + + // + return result; + } + + // + // Calculate Bar High Shadow ... + double GetHighShadow() + { + // + double result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + result = + // + high - GetUp() + // + ; + + // + return result; + } + + // + // Calculate Bar Low Shadow ... + double GetLowShadow() + { + // + double result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + result = + // + GetDown() - low; + // + ; + + // + return result; + } + + // + // Check Bar is Bullish ... + bool IsBullish() + { + // + bool result = false; + + // + if (!IsValid()) + { + return result; + } + + // + result = open < close; + + // + return result; + } + + // + // Check Bar is Bearish ... + bool IsBearish() + { + // + bool result = false; + + // + if (!IsValid()) + { + return result; + } + + // + result = open > close; + + // + return result; + } + + // + // Find Next Bar Time ... + datetime NextAt() + { + // + datetime result = NULL; + + // + if (!IsValid()) + { + return result; + } + + // + int prSeconds = PeriodSeconds(period); + + // + result = time + prSeconds; + + // + return result; + } + + // + // Find Prev Bar Time ... + datetime BeforeOn() + { + // + datetime result = NULL; + + // + if (!IsValid()) + { + return result; + } + + // + int prSeconds = PeriodSeconds(period); + + // + result = time - prSeconds; + + // + return result; + } + + // + // Find Current Bar Index on Chart ... + int Index() + { + // + int result = -1; + + // + if (!IsValid()) + { + return result; + } + + // + result = iBarShift( + symbol, + period, + time + // + ); + + // + return result; + } + + // + // Check Bar has Strong Body or Not ... + bool HasStrongBody() + { + // + bool result = false; + + // + if (!IsValid()) + { + return result; + } + + // + double body = GetBody(); + double shadow = GetShadows(); + + // + result = body > shadow * 1.5; + + // + return result; + } + + // + // Determines Swings based On this Bar ... + // Calculates Based on atleast 3 Bars Prev ... + ENUM_X_SWING_TYPE GetSwingType() + { + // + ENUM_X_SWING_TYPE result = X_NO_SWING; + + // + // Find Current Index of Bar ... + int barIndex = Index(); + if (barIndex <= -1) + { + return result; + } + + // + // First we have to Retrieve atleast 3 Bars before this bar ... + XOHCL bars[]; + int barsCount = GetBars( + bars, + symbol, + period, + barIndex + 1, + 3 + // + ); + if (barsCount < 3) + { + return result; + } + + // + // Check Swing Start Candle has Strong Body ... + bool isStrongBodyCandle = bars[2].HasStrongBody(); + if (!isStrongBodyCandle) + { + return result; + } + + // + // Check Swing Low Conditions ... + bool isSwingLowOrderBlock = + bars[2].low < bars[1].low && + bars[1].low < bars[0].low && + bars[2].low < bars[0].low; + if (isSwingLowOrderBlock) + { + result = X_SWING_LOW; + } + + // + // Check Swing High Conditions ... + bool isSwingHighOrderBlock = + bars[2].high > bars[1].high && + bars[1].high > bars[0].high && + bars[2].high > bars[0].high; + if (isSwingHighOrderBlock) + { + result = X_SWING_HIGH; + } + + // + return result; + } + + // + // Find Swings (Highs nd Lows) ... + int FindSwing( + ENUM_X_SWING_TYPE swing, // Swing Based On Price mode ... + int mLength // Loopback ... + ) + { + // + int result = -1; + + // + if (!IsValid() || + !IsValid(swing)) + { + return result; + } + + // + int current = Index(); + int founded = FindNextSwing( + swing, + (mLength * 2) + 1, + current - mLength + // + ); + + // + while (founded != current) + { + // + current = FindNextSwing( + swing, + mLength, + current + 1 + // + ); + + // + founded = FindNextSwing( + swing, + (mLength * 2) + 1, + current - mLength + // + ); + } + + // + result = current; + + // + return result; + } + + // + // Find Next Swing ... + int FindNextSwing( + ENUM_X_SWING_TYPE swing, // Swing Based On Price mode ... + int from, // from Bar Index + int mLength // Loopback ... + ) + { + // + int result = -1; + + // + if (!IsValid() || + !IsValid(swing)) + { + return result; + } + + // + if (from < 0) + { + mLength += from; + from = 0; + } + + // + ENUM_SERIESMODE mode = swing == X_SWING_HIGH + ? MODE_HIGH + : MODE_LOW; + + // + result = swing == X_SWING_HIGH + ? iHighest( + symbol, + period, + mode, + mLength, + from) + : iLowest( + symbol, + period, + mode, + mLength, + from); + + // + return result; + } + + // + // Find Lowest Bar Index ... + int FindHighestIndex( + int mLength, // Loopback ... + ENUM_SERIESMODE mode // Calculation mode + ) + { + // + int result = -1; + + // + if (!IsValid()) + { + return result; + } + + // + if (mLength < 2) + { + mLength = 2; + } + + // + result = iHighest( + symbol, + period, + mode, + mLength, + Index()); + + // + return result; + } + + // + // Find Lowest ... + double FindHighest( + int mLength, // Loopback ... + ENUM_SERIESMODE mode // Calculation mode + ) + { + // + double result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + int idx = FindHighestIndex( + mLength, + mode); + if (idx <= -1) + { + return result; + } + + // + ENUM_X_PRICE pMode = ToPrice(mode); + + // + XOHCL iH; + result = iH.Init( + symbol, + period, + idx + // + ); + if (!result) + { + return result; + } + + // + result = iH.GetPrice(pMode); + + // + return result; + } + + // + // Find Lowest Bar Index ... + int FindLowestIndex( + int mLength, // Loopback ... + ENUM_SERIESMODE mode // Calculation mode + ) + { + // + int result = -1; + + // + if (!IsValid()) + { + return result; + } + + // + if (mLength < 2) + { + mLength = 2; + } + + // + result = iLowest( + symbol, + period, + mode, + mLength, + Index()); + + // + return result; + } + + // + // Find Lowest ... + double FindLowest( + int mLength, // Loopback ... + ENUM_SERIESMODE mode // Calculation mode + ) + { + // + double result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + int idx = FindLowestIndex( + mLength, + mode); + if (idx <= -1) + { + return result; + } + + // + ENUM_X_PRICE pMode = ToPrice(mode); + + // + XOHCL iL; + result = iL.Init( + symbol, + period, + idx + // + ); + if (!result) + { + return result; + } + + // + result = iL.GetPrice(pMode); + + // + return result; + } + + // + // Convert to String Representation ... + string ToString() + { + // + string result = ""; + + // + result = GetTypeName(this) + + "(O(" + ToString(open) + "),H(" + ToString(high) + "),C(" + ToString(close) + "),L(" + ToString(low) + "))"; + + // + return result; + } +}; + +// +// Model Support and Resistance +// for Specific Bar ... +struct XOHCLSupRes +{ + // + // Props ... + + // + /// Resistances ... + double res[]; + + // + // Supports ... + double sup[]; + + // + // Constructor ... + XOHCLSupRes() + { + Clean(); + } + + // + // Init ... + bool Init( + double price, // Price ... + const double &pivots[], // Provided Pivot Points ... + int count = 3, // Number of Requireds ... + double step = 0 // Distance between each item with it's Last Side ... + ) + { + // + bool result = false; + + // + Clean(); + + // + if (price <= 0) + { + return result; + } + + // + int pivotsCount = ArraySize(pivots); + if (pivotsCount <= 0) + { + return result; + } + + // + if (count <= 0 || + count > pivotsCount - 1) + { + return result; + } + + // + double lastR = 0; + double tmpR[]; + + // + double lastS = 0; + double tmpS[]; + + // + // Extract Supports ... + // which prices is under low of candle ... + // + // Extract Resistance ... + // which prices is over high of candle ... + for (int i = 0; i < pivotsCount; i++) + { + // + double iFlat = pivots[i]; + + // + if (iFlat > price) + { + // + bool canAdd = + step <= 0 + ? true + : lastR == 0 || MathAbs(iFlat - lastR) >= step; + if (canAdd) + { + // + Add( + iFlat, + tmpR); + + // + lastR = iFlat; + } + } + else if (iFlat < price) + { + // + bool canAdd = + step <= 0 + ? true + : lastS == 0 || MathAbs(iFlat - lastS) >= step; + if (canAdd) + { + // + Add( + iFlat, + tmpS); + + // + lastS = iFlat; + } + } + } + + // + // Sorting Founded Resistance and Supports ... + + // + // Since Resistance Levels must be Increasing ... + ArraySort(tmpR); + + // + // Since Support Levels must be Decreasing ... + ArraySort(tmpS); + ArrayReverse(tmpS); + + // + // Fill Resistance ... + int tmpRCount = ArraySize(tmpR); + if (tmpRCount > 0) + { + // + if (tmpRCount < count) + { + // + ArrayCopy( + res, + tmpR); + } + else + { + // + ArrayCopy( + res, + tmpR, + 0, + 0, + count); + } + } + + // + // Fill Supports ... + int tmpSCount = ArraySize(tmpS); + if (tmpSCount > 0) + { + // + if (tmpSCount < count) + { + // + ArrayCopy( + sup, + tmpS); + } + else + { + // + ArrayCopy( + sup, + tmpS, + 0, + 0, + count); + } + } + + // + result = IsValid(); + + // + return result; + } + + // + // Tools ... + + // + // Cleanup ... + void Clean() + { + // + Clean(sup); + Clean(res); + } + + // + // Validate ... + bool IsValid() + { + // + bool result = false; + + // + result = + // + CountSupports() > 0 || + CountResistances() > 0 + // + ; + + // + return result; + } + + // + int CountSupports() + { + return ArraySize(sup); + } + + // + int CountResistances() + { + return ArraySize(res); + } +}; + +// +// Tracking Times ... +struct XTimeTracker +{ + // + // Props ... + int xMonth; + int xDayOfWeek; + int xForWeekDay; + int xDay; + int xHour; + + // + // Constructor ... + XTimeTracker() + { + Clean(); + } + + // + // Tools ... + + // + void Clean() + { + // + xDay = -1; + xHour = -1; + xMonth = -1; + xDayOfWeek = -1; + xForWeekDay = -1; + } + + // + // Detecting New Houre ... + bool IsNewHour() + { + // + bool result = false; + + // + // Retrieve Current Time as Struct ... + MqlDateTime timeStruct = GetCurrentTime(); + + // + // Check Houre ... + result = timeStruct.hour != xHour; + if (result) + { + xHour = timeStruct.hour; + } + + // + return result; + } + + // + // Detecting New Day ... + bool IsNewDay() + { + // + bool result = false; + + // + // Retrieve Current Time as Struct ... + MqlDateTime timeStruct = GetCurrentTime(); + + // + // Check Houre ... + result = timeStruct.day_of_year != xDay; + if (result) + { + xDay = timeStruct.day_of_year; + } + + // + return result; + } + + // + // Detecting New Week ... + bool IsNewWeek() + { + // + bool result = false; + + // + // Retrieve Current Time as Struct ... + MqlDateTime timeStruct = GetCurrentTime(); + + // + // Check Week ... + // Since Week Starts From Monday in Forex World ... + // we Calculate Start of Week by 1-Monday ... + result = + xDayOfWeek == -1 && + xForWeekDay == -1 + ? true + : timeStruct.day_of_week == 1 && + timeStruct.day_of_year > xForWeekDay; + + // + xForWeekDay = timeStruct.day_of_year; + xDayOfWeek = timeStruct.day_of_week; + + // + return result; + } + + // + // Detecting End Of Week ... + bool IsWeekEnd() + { + // + bool result = false; + + // + // Retrieve Current Time as Struct ... + MqlDateTime timeStruct = GetCurrentTime(); + + // + // Check WeekEnd ... + // Since Week Starts From Monday in Forex World ... + // we Calculate End of Week by 5-Friday ... + result = + xDayOfWeek != -1 && + timeStruct.day_of_week == 5 && + timeStruct.hour == 23 && + timeStruct.min == 59 && + timeStruct.sec == 59; + + // + return result; + } + + // + // Detecting New Month ... + bool IsNewMonth() + { + // + bool result = false; + + // + // Retrieve Current Time as Struct ... + MqlDateTime timeStruct = GetCurrentTime(); + + // + // Check Houre ... + result = timeStruct.mon != xMonth; + if (result) + { + xMonth = timeStruct.mon; + } + + // + return result; + } +}; + +// +// Tracking Bars on Specified Environment ... +struct XBarTracker +{ + // + string symbol; // Tracking Symbol + ENUM_TIMEFRAMES period; // Tracking Time Frame + + // + int lastTrackedBar; // Last Tracked Bar ... + + // + // Constructor ... + XBarTracker() + { + Clean(); + } + + // + // Initializer ... + bool Init( + string mSymbol = NULL, // Trading Symbol + ENUM_TIMEFRAMES mPeriod = NULL // Trading Period + ) + { + // + bool result = false; + + // + mSymbol = NormalizeSymbol(mSymbol); + mPeriod = NormalizePeriod(mPeriod); + + // + this.symbol = mSymbol; + this.period = mPeriod; + + // + this.lastTrackedBar = 0; + + // + result = true; + + // + return result; + } + + // + // Retrieve all Bars ... + int CountBars() + { + // + return Bars( + symbol, + period + // + ); + } + + // + // Check if it's New Bar ... + bool IsNewBar() + { + // + bool result = false; + + // + int currentBars = CountBars(); + + // + result = currentBars > lastTrackedBar; + if (result) + { + lastTrackedBar = currentBars; + } + + // + return result; + } + + // + // Tools ... + void Clean() + { + // + symbol = NormalizeSymbol(NULL); + period = NormalizePeriod(NULL); + } +}; + +// +// Track Value Changes ... +template +struct XValueTracker +{ + // + // Definitions ... + + // + // Model a Value Change ... + struct XValueChange + { + // + // Props ... + datetime at; // Change Time + T from; // Before Change Value + T to; // After Change Value + + // + // Constructor ... + XValueChange() + { + Clean(); + } + + // + // Cleanup ... + void Clean() + { + // + at = NULL; + from = NULL; + to = NULL; + } + + // + // Validate ... + bool IsValid() + { + // + bool result = false; + + // + result = IsValid(at); + if (!result) + { + return result; + } + + // + result = NotEmpty(from) && + NotEmpty(to); + + // + return result; + } + }; + + // + // Props ... + XValueChange changes[]; // Hold Changes + + // + // Constructor ... + XValueTracker() + { + Clean(); + } + + // + // Track a Change Happens Or Not ... + bool Track( + const T &source[] // Data Source for Track Changes + ) + { + // + bool result = false; + + // + if (ArraySize(source) <= 1) + { + return result; + } + + // + datetime time = TimeCurrent(); + + // + double from = source[1]; + double to = source[0]; + + // + result = to != from; + if (result) + { + return result; + } + + // + XValueChange lastChange; + bool hasLastChange = + GetLastItem( + lastChange, + changes + // + ); + result = + !hasLastChange + ? true + : lastChange.at < time && + lastChange.to != to && + lastChange.from != from; + if (!result) + { + return result; + } + + // + lastChange.Clean(); + + // + lastChange.to = to; + lastChange.at = time; + lastChange.from = from; + + // + AddRef( + lastChange, + changes + // + ); + + // + return result; + } + + // + // Tools ... + + // + // Cleanup ... + void Clean() + { + Clean(changes); + } +}; + +// +// Model a Market Cycle ... +struct XMarketCycle +{ + // + // Props ... + + // + string prefix; // Prefix Trag ... + + // + string symbol; // Market Symbol ... + + // + ENUM_TIMEFRAMES period; // Period of Cycle ... + ENUM_X_PERIOD_METHOD method; // Period Selection Method ... + ENUM_X_MARKET_CYCLES cycle; // Cycles of MArket ... + + // + int length; // Number Of Candles per Current Time Frame ... + ENUM_TIMEFRAMES hostPeriod; // Current Time Frame ... + + // + datetime lastStart; // Last Candle Bar Time ... + + // + XBarTracker barTracker; // Bar Tracker ... + XBarRemainsTime remains; // Current Bar Remains Model ... + + // + // Constructor ... + XMarketCycle() + { + Clean(); + } + + // + // Init Cycle ... + bool Init( + string mSymbol, // Trading Symbol + ENUM_TIMEFRAMES mHostPeriod, // Host Period + ENUM_X_MARKET_CYCLES mCycle, // Init Cycle + string mPrefix = "" // Prefix + ) + { + // + bool result = false; + + // + mSymbol = NormalizeSymbol(mSymbol); + mHostPeriod = NormalizePeriod(mHostPeriod); + + // + result = IsValid(mCycle); + if (!result) + { + return result; + } + + // + this.cycle = mCycle; + + // + // Set Automatically Prefix ... + if (StringLen(mPrefix) == 0) + { + this.prefix = ToString(cycle); + } + + // + result = IsValid( + method, + period // + ); + if (!result) + { + return result; + } + + // + this.symbol = mSymbol; + this.hostPeriod = mHostPeriod; + + // + // Find Cycle Period ... + if (method == X_PERIOD_AUTO) + { + // + // Select Period ... + this.period = GetCyclePeriod( + this.cycle, + this.hostPeriod); + } + + // + // Set Prefix if Provided ... + if (StringLen(mPrefix) > 0) + { + this.prefix = mPrefix; + } + + // + // Calculate Required Info ... + + // + // Length ... + this.length = PeriodSeconds(this.period) / PeriodSeconds(this.hostPeriod); + + // + // Update Additional Data ... + result = this.Update(0); + + // + return result; + } + + // + // Tools ... + + // + // Cleanup ... + void Clean() + { + // + length = 0; + lastStart = 0; + + // + cycle = NULL; + prefix = NULL; + symbol = NULL; + period = NULL; + method = NULL; + hostPeriod = NULL; + + // + remains.Clean(); + barTracker.Clean(); + } + + // + // Check Structure Valid ... + bool IsValid() + { + // + bool result = false; + + // + result = IsValid( + method, + period); + if (!result) + { + return result; + } + + // + result = + // + length > 0 && + symbol != NULL && + period != NULL && + method != NULL && + hostPeriod != NULL && + method != X_PERIOD_NOTHING + // + ; + + // + return result; + } + + // + // Update Market Cycle Additional Info ... + bool Update(int hostBarIndex) + { + // + bool result = false; + + // + result = this.IsValid(); + if (!result) + { + return result; + } + + // + // Init Remains ... + result = remains.Init( + this.symbol, + this.period); + if (!result) + { + return result; + } + + // + // Init Bar Tracker ... + result = barTracker.Init( + this.symbol, + this.period); + if (!result) + { + return result; + } + + // + return result; + } + + // + // Count Bars ... + int CountBars() + { + // + int result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + result = barTracker.CountBars(); + + // + return result; + } + + // + // Check New Bar ... + bool IsNewBar() + { + // + bool result = false; + + // + if (!IsValid()) + { + return result; + } + + // + result = barTracker.IsNewBar(); + + // + return result; + } + + // + // Retrieve Current Bar Index based on Host Period bar Index ... + int GetBarIndex(int barIndex) + { + // + int result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + if (barIndex < 0) + { + return result; + } + + // + int totalBars = CountBars(); + if (barIndex >= totalBars) + { + // + result = totalBars - 1; + return result; + } + + // + datetime hostBarTime = iTime( + this.symbol, + this.hostPeriod, + barIndex + // + ); + + // + result = iBarShift( + this.symbol, + this.period, + hostBarTime + // + ); + + // + return result; + } + + // + // Retrieve Current Cycles Specific Bar ... + XOHCL GetBar(int barIndex) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + int totalBars = CountBars(); + if (barIndex >= totalBars) + { + barIndex = totalBars - 1; + } + + // + XOHCL result; + result.Init( + this.symbol, + this.period, + barIndex + // + ); + + // + return result; + } + + // + // Retrieve Bar Time ... + datetime GetBarTime(int barIndex) + { + // + datetime result = NULL; + + // + if (!IsValid()) + { + return result; + } + + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + int totalBars = CountBars(); + if (barIndex >= totalBars) + { + barIndex = totalBars - 1; + } + + // + result = iTime( + this.symbol, + this.period, + barIndex + // + ); + + // + return result; + } + + // + // Create and String Representation for Unique Taging ... + string ToString() + { + // + string result = ""; + + // + if (!IsValid()) + { + return result; + } + + // + result = + GetTypeName(this) + "(" + + "PRFX(" + this.prefix + ")" + + "SMBL(" + this.symbol + ")" + + "CYC(" + ToString(this.cycle) + ")" + + "PRD(" + ToString(this.period) + ")" + + "PRDHST(" + ToString(this.hostPeriod) + ")" + + "MTH(" + EnumToString(this.method) + ")" + + ")"; + + // + return result; + } + + // + // Here we Produce a Summary brief of + // state of Cycle ... + string GenerateSummary() + { + // + string result = ""; + + // + bool hasPrefix = + StringLen(this.prefix) > 0 && + this.prefix != ToString(this.cycle); + result += (hasPrefix ? this.prefix + "[" : "") + + ToString(this.cycle) + + (hasPrefix ? "]" : "") + "\n"; + + // + result += " - PR: " + ToString(this.period) + "\n"; + + // + XOHCL cBar = GetBar(0); + + // + result += " - State: " + (cBar.IsBullish() ? "Bullish" : cBar.IsBearish() ? "Bearish" + : "Neutural"); + + // + return result; + } +}; + +// +// Functions ... + +// +// Validators ... + +// +// Validate an String has length and not NULL ... +bool IsValid(string value) +{ + // + bool result = false; + + // + result = + // + value != NULL && + StringLen(value) > 0 + // + ; + + // + return result; +} + +// +// Validate a Date ... +bool IsValid(datetime value) +{ + // + bool result = false; + + // + result = NotEmpty(value) && value != NULL; + + // + return result; +} + +// +// Validate a Period Param ... +bool IsValid(ENUM_TIMEFRAMES value) +{ + // + bool result = false; + + // + result = + // + value != NULL + // + ; + + // + return result; +} + +// +// Validate Specified Cycle ... +bool IsValid(ENUM_X_MARKET_CYCLES value) +{ + // + bool result = false; + + // + result = + // + value != NULL && + value != X_MARKET_CYCLE_UNKNOWN + // + ; + + // + return result; +} + +// +// Validate Specific Period Mode ... +bool IsValid( + ENUM_X_PERIOD_METHOD mMethod, // Period Select Method + ENUM_TIMEFRAMES mPeriod // Selected Period +) +{ + // + bool result = false; + + // + result = + // + mMethod == X_PERIOD_NOTHING + ? false + : mMethod == X_PERIOD_MANUALLY + ? mPeriod != NULL + : mMethod == X_PERIOD_AUTO + ? true + : false + // + ; + + // + return result; +} + +// +// Validate Swing Mode ... +bool IsValid(ENUM_X_SWING_TYPE value) +{ + // + bool result = false; + + // + result = + // + value == X_SWING_HIGH || + value == X_SWING_LOW + // + ; + + // + return result; +} + +// +// As IS ... + +// +// Determine a Position type is Long or not ... +bool IsLong(ENUM_POSITION_TYPE type) +{ + // + bool result = type == POSITION_TYPE_BUY; + + // + return result; +} +bool IsLong(ENUM_ORDER_TYPE type) +{ + // + bool result = type == ORDER_TYPE_BUY; + + // + return result; +} + +// +// Determine a Position type is Short or not ... +bool IsShort(ENUM_POSITION_TYPE type) +{ + // + bool result = type == POSITION_TYPE_SELL; + + // + return result; +} +bool IsShort(ENUM_ORDER_TYPE type) +{ + // + bool result = type == ORDER_TYPE_SELL; + + // + return result; +} + +// +// Check Expert Running in Testing Mode or not ... +bool IsRunningOnTestMode() +{ + // + bool result = false; + + // + // check programm mode ... + result = MQL5InfoInteger(MQL5_TESTING); + + // + return result; +} + +// +// Normalizers ... + +// +// Check a Symbol provided or not ... +// if not use Default ... +string NormalizeSymbol(string value) +{ + // + string result = value; + + // + if (!IsValid(result)) + { + result = _Symbol; + } + + // + return result; +} + +// +// Check a Datetime provided or not ... +// if not use Current ... +datetime NormalizeTime(datetime value) +{ + // + datetime result = value; + + // + if (!IsValid(result)) + { + result = TimeCurrent(); + } + + // + return result; +} + +// +// Check a Period provided or not ... +// if not use Default ... +ENUM_TIMEFRAMES NormalizePeriod(ENUM_TIMEFRAMES value) +{ + // + ENUM_TIMEFRAMES result = value; + + // + if (!IsValid(value)) + { + result = _Period; + } + + // + return result; +} + +// +// Normalize Cycle ... +ENUM_X_MARKET_CYCLES NormalizeCycle(ENUM_X_MARKET_CYCLES value) +{ + // + ENUM_X_MARKET_CYCLES result = value; + + // + if (!IsValid(result)) + { + result = X_MARKET_CYCLE_SHORT; + } + + // + return value; +} + +// +// Normalize a give Volume ... +double NormalizeVolume( + double mVolume, // desired volume to normalize + string mSymbol = NULL, // Trading Symbol + int mLength = 2 // Length of Digits +) +{ + // + double result = mVolume; + + // + mSymbol = NormalizeSymbol(mSymbol); + + // + // Normalize Digits ... + int digits = GetDigits(mSymbol); + + // + mLength = + mLength == 0 || mLength > digits + ? digits + : MathMin(mLength, digits); + + // + // Normalize Volume ... + result = NormalizeDouble(result, mLength); + + // + double maxAvailableVolume = SymbolInfoDouble(mSymbol, SYMBOL_VOLUME_MAX); + double minAvailableVolume = SymbolInfoDouble(mSymbol, SYMBOL_VOLUME_MIN); + + // + // Validate Result ... + if (result > maxAvailableVolume) + { + result = maxAvailableVolume; + } + else if (result < minAvailableVolume) + { + result = minAvailableVolume; + } + + // + return result; +} + +// +// Normallize Price ... +double NormalizePrice( + double mPrice, // desired Price for normalization + string mSymbol = NULL // Trading Symbol +) +{ + // + double result = 0; + + // + mSymbol = NormalizeSymbol(mSymbol); + + // + double tickSize = 0; + result = SymbolInfoDouble(mSymbol, SYMBOL_TRADE_TICK_SIZE, tickSize); + + // + int digits = GetDigits(mSymbol); + result = NormalizeDouble(MathRound(mPrice / tickSize) * tickSize, digits); + + // + return result; +} + +// +// Prices ... + +// +// Retrieve Ask Price ... +double GetAsk( + string mSymbol = NULL // Trading Symbol +) +{ + // + mSymbol = NormalizeSymbol(mSymbol); + + // + double result = SymbolInfoDouble(mSymbol, SYMBOL_ASK); + + // + return result; +} + +// +// Retrieve Bid Price ... +double GetBid( + string mSymbol = NULL // Trading Symbol +) +{ + // + mSymbol = NormalizeSymbol(mSymbol); + + // + double result = SymbolInfoDouble(mSymbol, SYMBOL_BID); + + // + return result; +} + +// +// Retrieve Spread Price ... +double GetSpread( + string mSymbol = NULL // Trading Symbol +) +{ + // + mSymbol = NormalizeSymbol(mSymbol); + + // + double ask = GetAsk(mSymbol); + double bid = GetBid(mSymbol); + + // + double result = MathAbs(ask - bid); + + // + return result; +} + +// +// Retrieve Point Value ... +double GetPoints( + string mSymbol = NULL // Trading Symbol +) +{ + // + mSymbol = NormalizeSymbol(mSymbol); + + // + double result = SymbolInfoDouble(mSymbol, SYMBOL_POINT); + + // + return result; +} + +// +// Retrieve Point Digits ... +int GetDigits( + string mSymbol = NULL // Trading Symbol +) +{ + // + mSymbol = NormalizeSymbol(mSymbol); + + // + int result = (int)SymbolInfoInteger(mSymbol, SYMBOL_DIGITS); + + // + return result; +} + +// +// Retrieve Entry Price ... +double GetEntry( + string mSymbol = NULL, // Trading Symbol + ENUM_POSITION_TYPE type = POSITION_TYPE_BUY // Get entry price for Which direction trade ... +) +{ + // + double result = 0; + + // + mSymbol = NormalizeSymbol(mSymbol); + + // + result = + IsLong(type) + ? GetAsk(mSymbol) + : GetBid(mSymbol); + result = NormalizePrice(result, mSymbol); + + // + return result; +} + +// +// Retrieve Exit Price ... +double GetExit( + string mSymbol = NULL, // Trading Symbol + ENUM_POSITION_TYPE type = POSITION_TYPE_BUY // Get entry price for Which direction trade ... +) +{ + // + double result = 0; + + // + mSymbol = NormalizeSymbol(mSymbol); + + // + result = + IsLong(type) + ? GetBid(mSymbol) + : GetAsk(mSymbol); + result = NormalizePrice(result, mSymbol); + + // + return result; +} + +// +// Get 1 Pip in Price Value ... +double GetPipPrice( + string mSymbol = NULL // Trading Symbol +) +{ + // + mSymbol = NormalizeSymbol(mSymbol); + + // + double symbolPoint = GetPoints(mSymbol); + int symbolDigits = GetDigits(mSymbol); + + // + double result = symbolPoint; + if (symbolDigits == 3 || symbolDigits == 5) + { + result *= 10; + } + + // + return result; +} + +// +// Converts Pips To Price ... +double PipsToPrice( + double mPips, // pips amount + string mSymbol = NULL // Trading Symbol +) +{ + // + mSymbol = NormalizeSymbol(mSymbol); + + // + int digits = GetDigits(mSymbol); + double pipValue = GetPipPrice(mSymbol); + double result = mPips * pipValue; + + // + result = NormalizePrice(result, mSymbol); + + // + return result; +} + +// +// Converts Price to Pips ... +double PriceToPips( + double mPrice, // the price amount which required to calculate + string mSymbol = NULL // Trading Symbol +) +{ + // + mSymbol = NormalizeSymbol(mSymbol); + mPrice = NormalizePrice(mPrice, mSymbol); + + // + int digits = GetDigits(mSymbol); + double pipPrice = GetPipPrice(mSymbol); + + // + double result = mPrice / pipPrice; + + // + result = NormalizeDouble(result, digits); + + // + return result; +} + +// +// Convert Price to Point ... +double PriceToPoint( + double price, // the price amount which required to calculate + string mSymbol = NULL // Trading Symbol +) +{ + // + double result = 0; + + // + mSymbol = NormalizeSymbol(mSymbol); + price = NormalizePrice(price, mSymbol); + + // + double point = GetPoints(mSymbol); + result = price / point; + + // + return result; +} + +// +// Converts Point to Price ... +double PointToPrice( + double points, // Points Amount + string mSymbol = NULL // Trading Symbol +) +{ + // + double result = 0; + + // + mSymbol = NormalizeSymbol(mSymbol); + + // + double point = GetPoints(mSymbol); + result = points * point; + + // + result = NormalizePrice(result, mSymbol); + + // + return result; +} + +// +// Converts Series Mode to XPRICE ... +ENUM_X_PRICE ToPrice( + ENUM_SERIESMODE mode // Specified Series Mode ... +) +{ + // + ENUM_X_PRICE result = X_PRICE_CLOSE; + + // + switch (mode) + { + // + // High ... + case MODE_HIGH: + result = X_PRICE_HIGH; + break; + + // + // Open ... + case MODE_OPEN: + result = X_PRICE_OPEN; + break; + + // + // Low ... + case MODE_LOW: + result = X_PRICE_LOW; + break; + + // + // Close ... + // Default ... + case MODE_CLOSE: + default: + result = X_PRICE_CLOSE; + break; + } + + // + return result; +} + +// +// Retrieve Applied Price ... +template +double GetAppliedPrice( + ENUM_APPLIED_PRICE tprice, // Type of Price Selection + T &open[], // Open Prices + T &high[], // High Preices + T &low[], // Low Prices + T &close[], // Close Prices + int i // Bar Index +) +{ + switch (tprice) + { + case PRICE_CLOSE: + return (close[i]); + case PRICE_OPEN: + return (open[i]); + case PRICE_HIGH: + return (high[i]); + case PRICE_LOW: + return (low[i]); + case PRICE_MEDIAN: + return ((high[i] + low[i]) / 2.0); + case PRICE_TYPICAL: + return ((high[i] + low[i] + close[i]) / 3.0); + case PRICE_WEIGHTED: + return ((high[i] + low[i] + close[i] + close[i]) / 4.0); + } + return (0); +} + +// +// Time / Date ... + +// +// Representation of Time Struct ... +// struct MqlDateTime +// { +// int year; // Year +// int mon; // Month +// int day; // Day +// int hour; // Hour +// int min; // Minutes +// int sec; // Seconds +// int day_of_week; // Day of week (0-Sunday, 1-Monday, ... ,6-Saturday) +// int day_of_year; // Day number of the year (January 1st is assigned the number value of zero) +// }; + +// +// Converts Time to Seconds ... +ulong TimeToSeconds( + datetime time // Specify time to Convert ... +) +{ + // + ulong result = (ulong)time; + + // + return result; +} +ulong TimeToSeconds( + MqlDateTime &time // Specify time to Convert ... +) +{ + // + datetime dTime = StructToTime(time); + + // + ulong result = TimeToSeconds(dTime); + + // + return result; +} + +// +// Converts Seconds To Time ... +datetime SecondsToTime( + ulong seconds // Specify Seconds to Convert ... +) +{ + // + datetime result = (datetime)seconds; + + // + return result; +} +MqlDateTime SecondsToStruct( + ulong seconds // Specify Seconds to Convert ... +) +{ + // + datetime dTime = SecondsToTime(seconds); + + // + MqlDateTime result = {}; + TimeToStruct( + dTime, + result); + + // + return result; +} + +// +// Converts Time to MilliSeconds ... +ulong TimeToMilliSeconds( + datetime time // Specify time to Convert ... +) +{ + // + ulong result = TimeToSeconds(time) * 1000; + + // + return result; +} +ulong TimeToMilliSeconds( + MqlDateTime &time // Specify time to Convert ... +) +{ + // + datetime dTime = StructToTime(time); + + // + ulong result = TimeToMilliSeconds(dTime); + + // + return result; +} + +// +// Converts MillisSeconds to Time ... +datetime MilliSecondsToTiem( + ulong milliSeconds // Specify MilliSeconds to Convert ... +) +{ + // + ulong seconds = milliSeconds / 1000; + + // + datetime result = SecondsToTime(seconds); + + // + return result; +} +MqlDateTime MilliSecondsToStruct( + ulong milliSeconds // Specify MilliSeconds to Convert ... +) +{ + // + datetime dTime = MilliSecondsToTiem(milliSeconds); + + // + MqlDateTime result = {}; + TimeToStruct( + dTime, + result); + + // + return result; +} + +// +// Retrieve DateTime Structure ... +MqlDateTime GetCurrentTime() +{ + // + MqlDateTime result = {}; + + // + TimeCurrent(result); + + // + return result; +} + +// +// Retrieve Current Time as Seconds ... +ulong GetCurrentTimeAsSeconds() +{ + // + datetime time = TimeCurrent(); + + // + ulong result = TimeToSeconds(time); + + // + return result; +} + +// +// Retrieve Current Time as MilliSeconds ... +ulong GetCurrentTimeAsMilliSeconds() +{ + // + datetime time = TimeCurrent(); + + // + ulong result = TimeToMilliSeconds(time); + + // + return result; +} + +// +// Bar Times ... + +// +// Retrieve Specified Bar Time ... +datetime GetBarTime( + string mSymbol = "", // Specify Symbol + ENUM_TIMEFRAMES mPeriod = NULL, // Specify TimeFrame + int barIndex = 0 // Specify Bar Index +) +{ + // + // Validate and Normalize Args ... + + // + mSymbol = NormalizeSymbol(mSymbol); + mPeriod = NormalizePeriod(mPeriod); + + // + // Retrieve Bar Time ... + datetime result = iTime( + mSymbol, + mPeriod, + barIndex); + + // + return result; +} + +// +// Retrieve Specified Bar Time ... +ulong GetBarTimeAsSeconds( + string mSymbol = "", // Specify Symbol + ENUM_TIMEFRAMES mPeriod = NULL, // Specify TimeFrame + int barIndex = 0 // Specify Bar Index +) +{ + // + // Retrieve Bar Time ... + datetime time = GetBarTime( + mSymbol, + mPeriod, + barIndex); + + // + ulong result = TimeToSeconds(time); + + // + return result; +} + +// +// Retrieve Specified Bar Time ... +ulong GetBarTimeAsMilliSeconds( + string mSymbol = "", // Specify Symbol + ENUM_TIMEFRAMES mPeriod = NULL, // Specify TimeFrame + int barIndex = 0 // Specify Bar Index +) +{ + // + // Retrieve Bar Time ... + datetime time = GetBarTime( + mSymbol, + mPeriod, + barIndex); + + // + ulong result = TimeToMilliSeconds(time); + + // + return result; +} + +// +// Retrieve a Bar Time Structure ... +MqlDateTime GetBarTimeStruct( + string mSymbol = "", // Specify Symbol + ENUM_TIMEFRAMES mPeriod = NULL, // Specify TimeFrame + int barIndex = 0 // Specify Bar Index +) +{ + // + MqlDateTime result = {}; + + // + // Retrieve Bar Time ... + datetime barTime = GetBarTime( + mSymbol, + mPeriod, + barIndex); + + // + // Convert to Structure ... + TimeToStruct(barTime, result); + + // + return result; +} + +// +// Other Tools ... + +// +// Check first Cross Over second at index ... +bool IsCrossedOver( + const double &first[], // the buffer which check crossing over second buffer + const double &second[], // first buffer checks based on this buffer + const int index = 0 // check crosses in specific index +) +{ + // + bool result = false; + + // + // Validate Args ... + if (ArraySize(first) < index + 1 || ArraySize(second) < index + 1) + { + return result; + } + + // + result = first[index] > second[index] && + !(first[index + 1] > second[index + 1]); + + // + return result; +} + +// +// Check first is Over second at index ... +bool IsOver( + const double &first[], // the buffer which check over second buffer + const double &second[], // first buffer checks based on this buffer + const int index = 0 // check crosses in specific index +) +{ + // + bool result = false; + + // + // Validate Args ... + if (ArraySize(first) < index + 1 || ArraySize(second) < index + 1) + { + return result; + } + + // + result = first[index] > second[index] && + first[index + 1] > second[index + 1]; + + // + return result; +} + +// +// Check first Cross Under second at index ... +bool IsCrossedUnder( + const double &first[], // the buffer which check crossing under second buffer + const double &second[], // first buffer checks based on this buffer + const int index = 0 // check crosses in specific index +) +{ + // + bool result = false; + + // + // Validate Args ... + if (ArraySize(first) < index + 1 || ArraySize(second) < index + 1) + { + return result; + } + + // + result = first[index] < second[index] && + !(first[index + 1] < second[index + 1]); + + // + return result; +} + +// +// Check first is Under second at index ... +bool IsUnder( + const double &first[], // the buffer which check under second buffer + const double &second[], // first buffer checks based on this buffer + const int index = 0 // check crosses in specific index +) +{ + // + bool result = false; + + // + // Validate Args ... + if (ArraySize(first) < index + 1 || ArraySize(second) < index + 1) + { + return result; + } + + // + result = first[index] < second[index] && + first[index + 1] < second[index + 1]; + + // + return result; +} + +// +// Calculate Slope of Specified Buffer at Specified Index ... +double GetSlope( + const double &buffer[], // Buffer + int from, // In Past Index ... + int to // In Past Index ... +) +{ + // + double result = 0; + + // + if (from > ArraySize(buffer) || to > ArraySize(buffer)) + { + return result; + } + + // + double toValue = buffer[to]; + double fromValue = buffer[from]; + double deltaValue = toValue - fromValue; + double deltaTime = from - to; + + // + result = deltaValue / deltaTime; + + // + return result; +} + +// +// Calculate Fib Level ... +double GetFibonacciLevel( + double upPrice, // Upper Bound + double downPrice, // Downer Bound + double level, // Level Multiplier Factor + int direction // From Down to Up < 0, other wise Vice Versa + // +) +{ + // + double ling = upPrice - downPrice; + double pLevel = (ling / 100) * (level * 100); + + // + double result = direction > 0 ? upPrice - pLevel : downPrice + pLevel; + + // + return result; +} + +// +// Templates ... + +// +// Retrieve Specific Object Types Name ... +template +string GetTypeName(const T &t) +{ + return typename(T); +} + +// +template +string GetToken(T &item) +{ + // + string mType = GetTypeName(item); + + // + string result = mType; + + // + string parts[]; + int partsCount = SplitContent( + parts, + result, + " " + // + ); + if (partsCount <= 0) + { + // + result = mType; + return result; + } + + // + bool hasLastPart = GetLastItem( + result, + parts + // + ); + if (!hasLastPart) + { + // + result = mType; + return result; + } + + // + return result; +} + +// +// Generate Unique Tags ... +template +string GenerateTag(T &model) +{ + // + string result = ""; + + // + string tag = model.ToString(); + if (StringLen(tag) == 0) + { + return result; + } + + // + static XSCMD5 md5; + + // + result = md5.Hash(tag); + + // + return result; +} + +// +// Hash Specified Content ... +template +string ToMD5(T content) +{ + // + string result = ""; + + // + string strContent = ToString(content); + if (StringLen(strContent) == 0) + { + return result; + } + + // + static XSCMD5 md5; + + // + result = md5.Hash(strContent); + + // + return result; +} + +// +// Check a Value Not Empty ... +template +bool NotEmpty(T value) +{ + return value != EMPTY_VALUE; +} + +// +// Add Specified Item to Array ... +template +int Add( + T item, // item want to add + T &buffer[] // Destination buffer +) +{ + // + int result = 0; + + // + ArrayResize( + buffer, + ArraySize(buffer) + 1); + + // + buffer[ArraySize(buffer) - 1] = item; + + // + result = ArraySize(buffer); + + // + return result; +} +template +int AddRef( + T &item, // item want to add + T &buffer[] // Destination buffer +) +{ + // + int result = 0; + + // + ArrayResize( + buffer, + ArraySize(buffer) + 1); + + // + buffer[ArraySize(buffer) - 1] = item; + + // + result = ArraySize(buffer); + + // + return result; +} + +// +// Remove Specified Item from an Array ... +template +bool Remove( + T item, + T &buffer[]) +{ + // + bool result = false; + + // + int itemIndex = FindIndex( + item, + buffer); + if (itemIndex < 0) + { + return result; + } + + // + result = ArrayRemove( + buffer, + itemIndex, + 1); + + // + return result; +} + +// +// Clean Specified Array ... +template +void Clean(T &buffer[]) +{ + // + ArrayFree(buffer); + ArrayResize(buffer, 0); +} + +// +// Copy Whole Content of Source to Dest array ... +template +void Copy( + T &source[], // Source Buffer ... + T &dest[], // Dest Buffer ... + bool cleanDest = true // Force Clen Dest Buffer ... +) +{ + // + if (cleanDest) + { + Clean(dest); + } + + // + int sourceCount = ArraySize(source); + if (sourceCount <= 0) + { + return; + } + + // + for (int i = 0; i < sourceCount; i++) + { + // + T iSource = source[i]; + + // + AddRef( + iSource, + dest); + } +} + +// +// Copy Items from a Buffer ... +template +int Copy( + int start, // Start + int count, // Number of Items for read + T &source[], // Source Buffer + T &dest[], // Dest Buffer + bool forceClean = true // Force To Clean buffer +) +{ + // + int result = 0; + + // + if (forceClean) + { + Clean(dest); + } + + // + if (start < 0) + { + start = 0; + } + + // + if (start >= ArraySize(source)) + { + start = ArraySize(source) - 1; + } + + // + int beforeSize = ArraySize(dest); + + // + bool asSeriesDest = ArrayGetAsSeries(dest); + bool asSeriesSource = ArrayGetAsSeries(source); + + // + ArraySetAsSeries(dest, true); + ArraySetAsSeries(source, true); + + // + ArrayCopy( + dest, + source, + 0, + start, + count + // + ); + + // + int afterSize = ArraySize(dest); + + // + result = afterSize - beforeSize; + + // + ArraySetAsSeries(dest, asSeriesDest); + ArraySetAsSeries(source, asSeriesSource); + + // + return result; +} + +// +// Retrive Last Item of Specified Buffer ... +template +bool GetLastItem( + T &item, // Holds Result + T &buffer[] // Specified Buffer +) +{ + // + bool result = false; + + // + int bufferSize = ArraySize(buffer); + if (bufferSize <= 0) + { + return result; + } + + // + item = buffer[bufferSize - 1]; + + // + result = true; + return result; +} + +// +// Search Array For Specific Item ... +template +int FindIndex( + T item, // What is Search ... + T &buffer[] // Search in ... +) +{ + // + int result = -1; + + // + int count = ArraySize(buffer); + if (count <= 0) + { + return result; + } + + // + for (int i = 0; i < count; i++) + { + // + T iT = buffer[i]; + + // + if (iT == item) + { + // + result = i; + break; + } + } + + // + return result; +} + +// +// Check an Array Contains Specified Value ... +template +bool Contains( + T item, // What is Search ... + T &buffer[] // Search in ... +) +{ + // + bool result = false; + + // + int idx = FindIndex( + item, + buffer); + result = idx > -1; + + // + return result; +} + +// +// Calculate a Buffer's Average ... +template +double GetAverage( + T &buffer[], // the Buffer which required to search + int start = 0, // Start Index + int count = 0 // Count for Search +) +{ + // + double result = 0; + + // + T tmp[]; + int tmpCount = Copy( + start, + count, + buffer, + tmp + // + ); + if (tmpCount <= 0) + { + return result; + } + + // + // Calculate Summary ... + for (int i = 0; i < tmpCount; i++) + { + result += buffer[i]; + } + + // + // Calculate Average ... + result = result / tmpCount; + + // + return result; +} + +// +// Get Max of Specific Loopback of a Buffer ... +template +double GetMax( + T &buffer[], // the Buffer which required to search + int start = 0, // Start Index + int count = 0 // Count for Search +) +{ + // + double result = 0; + + // + T tmp[]; + int tmpCount = Copy( + start, + count, + buffer, + tmp + // + ); + if (tmpCount <= 0) + { + return result; + } + + // + // Loop Through LoopBack ... + for (int i = 0; i < tmpCount; i++) + { + // + double iValue = tmp[i]; + + // + result = + // + result == 0 || result < iValue + // + ? iValue + // + : result + // + ; + } + + // + return result; +} + +// +// Get Min of Specific Loopback of a Buffer ... +template +double GetMin( + T &buffer[], // the Buffer which required to search + int start = 0, // Start Index + int count = 0 // Count for Search +) +{ + // + double result = 0; + + // + T tmp[]; + int tmpCount = Copy( + start, + count, + buffer, + tmp + // + ); + if (tmpCount <= 0) + { + return result; + } + + // + // Loop Through LoopBack ... + for (int i = 0; i < tmpCount; i++) + { + // + double iValue = tmp[i]; + + // + result = + // + result == 0 || result > iValue + // + ? iValue + // + : result + // + ; + } + + // + return result; +} + +// +// Find a Value less than Specified ... +template +T FindLesserThan( + T value, // Specified Value ... + const T &source[], // Source ... + bool isDescend = false // Find Biggest Lesser Value ... +) +{ + // + T result = -1; + + // + int itemsCount = ArraySize(source); + if (itemsCount <= 0) + { + return result; + } + + // + // Make a Copy of source ... + T tmp[]; + + // + ArrayResize( + tmp, + ArraySize(source)); + + // + ArrayCopy( + tmp, + source); + + // + // Sort Temp Buffer ... + ArraySort(tmp); + if (isDescend) + { + ArrayReverse(tmp); + } + + // + int tmpCount = ArraySize(tmp); + for (int i = 0; i < tmpCount; i++) + { + // + T iValue = tmp[i]; + + // + if (iValue < value) + { + // + result = iValue; + break; + } + } + + // + return result; +} + +// +// Find a Value less than Specified ... +template +T FindBiggerThan( + T value, // Specified Value ... + const T &source[], // Source ... + bool isDescend = false // Find Smallest Bigger Value ... +) +{ + // + T result = -1; + + // + int itemsCount = ArraySize(source); + if (itemsCount <= 0) + { + return result; + } + + // + // Make a Copy of source ... + T tmp[]; + + // + ArrayResize( + tmp, + ArraySize(source)); + + // + ArrayCopy( + tmp, + source); + + // + // Sort Temp Buffer ... + ArraySort(tmp); + if (!isDescend) + { + ArrayReverse(tmp); + } + + // + int tmpCount = ArraySize(tmp); + for (int i = 0; i < tmpCount; i++) + { + // + T iValue = tmp[i]; + + // + if (iValue > value) + { + // + result = iValue; + break; + } + } + + // + return result; +} + +// +// Find Same Values in Array ... +template +void FindSames( + T &result[], // Holds Result ... + T &source[], // Source ... + int verifications = 3 // Number of Consequence Repeat ... +) +{ + // + Clean(result); + + // + // TenkanSen Flats ... + int sourceCount = ArraySize(source); + if (sourceCount > verifications) + { + // + T mLast = 0; + int mVerified = 0; + for (int i = 0; i < sourceCount; i++) + { + // + T iVal = source[i]; + if (mLast == 0) + { + mLast = iVal; + } + else if (mLast == iVal) + { + mVerified++; + } + else + { + mLast = iVal; + mVerified = 0; + } + + // + if (iVal == mLast && mVerified >= verifications) + { + // + Add( + iVal, + result); + + // + mLast = 0; + mVerified = 0; + } + } + } +} + +// +// Add an Item to a Buffer if not Exists ... +void AddIfNotExists( + double value, + double &values[], + double smoothingPoint = 3) +{ + // + double smoothingValue = smoothingPoint * GetPoints(_Symbol); + + // + int valuesCount = ArraySize(values); + if (valuesCount <= 0) + { + // + Add(value, + values); + } + else + { + // + bool isExists = false; + for (int i = 0; i < valuesCount; i++) + { + // + double iVal = values[i]; + + // + double diff = MathAbs(iVal - value); + + // + if (iVal == value || diff < smoothingValue) + { + // + isExists = true; + break; + } + } + + // + if (!isExists) + { + // + Add(value, + values); + } + } +} + +// +// Add a Buffers Child to another Buffer +// if it's not Contains them ... +void AddsIfNotExists( + double &source[], + double &dest[], + double smoothingPoint = 3) +{ + // + double smoothingValue = smoothingPoint * GetPoints(_Symbol); + + // + int sourceCount = ArraySize(source); + if (sourceCount <= 0) + { + return; + } + + // + for (int i = 0; i < sourceCount; i++) + { + // + double iSource = source[i]; + + // + AddIfNotExists( + iSource, + dest, + smoothingPoint); + } +} + +// +// Bar XOHCL ... + +// +// Extract Specific Range of Bars ... +// using Start Bar Index ... +int GetBars( + XOHCL &result[], // Hold Result + string mSymbol = NULL, // Trading Symbol + ENUM_TIMEFRAMES mPeriod = NULL, // Trading Time Frame + int from = 0, // Start Bar Index + int count = 1, // Number of Bars + bool forceClean = true // Clean Result Array +) +{ + // + int mResult = 0; + + // + if (from < 0) + { + from = 0; + } + + // + mSymbol = NormalizeSymbol(mSymbol); + mPeriod = NormalizePeriod(mPeriod); + + // + int total = Bars( + mSymbol, + mPeriod); + if (from > total - 2) + { + from = total - 2; + } + + // + if (count < 0) + { + count = 1; + } + + // + int start = from; + int end = start + count; + if (end > total - 1) + { + end = total - 1; + } + + // + if (forceClean) + { + Clean(result); + } + + // + int beforeSize = ArraySize(result); + + // + for (int i = start; i < end; i++) + { + // + XOHCL iBar; + bool isValid = iBar.Init( + mSymbol, + mPeriod, + i + // + ); + + // + if (isValid) + { + // + AddRef( + iBar, + result + // + ); + } + } + + // + int afterSize = ArraySize(result); + + // + mResult = afterSize - beforeSize; + + // + return mResult; +} + +// +// Extract Specific Range of Bars ... +// using Start Bar Time ... +int GetBars( + XOHCL &result[], // Hold Result + string mSymbol = NULL, // Trading Symbol + ENUM_TIMEFRAMES mPeriod = NULL, // Trading Time Frame + datetime from = NULL, // Start Bar Time + int count = 1, // Number of Bars + bool forceClean = true // Clean Result Array +) +{ + // + mSymbol = NormalizeSymbol(mSymbol); + mPeriod = NormalizePeriod(mPeriod); + + // + from = NormalizeTime(from); + + // + int barIndex = iBarShift( + mSymbol, + mPeriod, + from, + false + // + ); + + // + return GetBars( + result, + mSymbol, + mPeriod, + barIndex, + count, + forceClean + // + ); +} + +// +// String ... + +// +// Convert From String ... +template +T FromString(string value) +{ + // + T result = NULL; + + // + if (!IsValid(value)) + { + return result; + } + + // + result = (T)value; + + // + return result; +} + +// +// Converts an item to String ... +template +string ToString(T value) +{ + return (string)value; +} + +// +// Converts a Buffer to String Representation ... +template +string ToString( + const T &buffer[], // Specified Buffer + string separator = ",", // Specified Separator + bool addIndex = false, // Specified Add Items Indexes or Not + string indexLabel = "i:", // Specified Index Label + string indexSeparator = ">" // Specified Index Separator +) +{ + // + string result = ""; + + // + int bufferSize = ArraySize(buffer); + if (bufferSize <= 0) + { + return result; + } + + // + for (int i = 0; i < bufferSize; i++) + { + // + if (addIndex) + { + // + if (StringLen(indexLabel) > 0) + { + result += indexLabel + " "; + } + + // + result += (string)i + " "; + + // + if (StringLen(indexSeparator) > 0) + { + result += indexSeparator + " "; + } + } + + // + string iItemString = (string)buffer[i]; + + // + result += iItemString; + + // + if (i < bufferSize - 1) + { + result += separator; + } + } + + // + return result; +} + +// +// Converts String to boolean ... +bool ToBoolean(string value) +{ + // + bool result = false; + + // + if (StringLen(value) <= 0) + { + return result; + } + + // + StringToLower(value); + result = value == "true"; + + // + return result; +} + +// +// Split an String Representation of an Array ... +int SplitContent( + string &result[], // Hold Result ... + string content, // Source ... + string separator = ",", // Separator ... + bool forceCleanResult = true // Clean Result ... +) +{ + // + int mResult = 0; + + // + if (forceCleanResult) + { + Clean(result); + } + + // + int before = ArraySize(result); + + // + if (separator == NULL || StringLen(separator) == 0) + { + separator = ","; + } + + // + if (StringLen(content) == 0) + { + return mResult; + } + + // + StringSplit( + content, + StringGetCharacter( + separator, + 0), + result); + + // + int after = ArraySize(result); + + // + mResult = after - before; + + // + return mResult; +} + +// +// Extract Data from String ... +string ExtractString( + const string source, // Source String used for Extracting + const string startString = "(", // Expression Start String must be Unique + const string endString = ")" // Where to End Extraction, usually a Sign +) +{ + // + string result = ""; + + // + // Validate String ... + if ( + StringLen(source) == 0 || + StringLen(endString) == 0 || + StringLen(startString) == 0) + { + return result; + } + + // + // Find Start String Position ... + int sPos = StringFind( + source, + startString); + if (sPos < 0) + { + return result; + } + + // + // Find End String Position after Start String ... + int searchEndFromPos = sPos + StringLen(startString); + int ePos = StringFind( + source, + endString, + searchEndFromPos); + if (ePos < 0) + { + return result; + } + + // + // Extract Data from Source ... + int dLength = ePos - searchEndFromPos; + result = StringSubstr( + source, + searchEndFromPos, + dLength); + + // + return result; +} + +// +// Extract an Array of Contents ... +int ExtractStrings( + string &result[], // Hold Result + const string source, // Source String used for Extracting + const string startString = "(", // Expression Start String must be Unique + const string endString = ")" // Where to End Extraction, usually a Sign +) +{ + // + int mResult = 0; + + // + Clean(result); + + // + // Validate Args ... + int sourceLength = StringLen(source); + int startLength = StringLen(startString); + int endLength = StringLen(endString); + + // + int minRequiredLength = startLength + endLength; + + // + if ( + endLength <= 0 || + startLength <= 0 || + sourceLength <= 0 || + sourceLength < minRequiredLength) + { + return mResult; + } + + // + // Make a Copy of Source for Manipulating ... + string workStr = source; + + // + // Define a Loop ... + while (StringLen(workStr) > minRequiredLength) + { + // + // Find Item ... + string item = ExtractString( + workStr, + startString, + endString); + + // + // Breakout when couldn't find anymore item ... + int itemLength = StringLen(item); + if (itemLength <= 0) + { + break; + } + + // + // Prepare Item Source String for Replacing in Work String ... + string itemSource = startString + item + endString; + + // + // Add Item to Result Array ... + Add( + item, + result); + + // + // Replace Item Soure in Work String ... + StringReplace( + workStr, + itemSource, + ""); + } + + // + // Calculate Size of Array ... + mResult = ArraySize(result); + + // + return mResult; +} + +// +string ExtractSurrounded( + const string surrounded, // Surrounded Content + const string mToken, // Specified Token + const string startString = "(", // Expression Start String must be Unique + const string endString = ")" // Where to End Extraction, usually a Sign +) +{ + // + return ExtractString( + surrounded, + mToken + startString, + endString + // + ); +} + +// +int ParseIntSurrounded( + const string surrounded, // Surrounded Content + const string mToken, // Specified Token + const string startString = "(", // Expression Start String must be Unique + const string endString = ")" // Where to End Extraction, usually a Sign +) +{ + // + int result = NULL; + + // + string strContent = ExtractSurrounded( + surrounded, + mToken, + startString, + endString + // + ); + if (!IsValid(strContent)) + { + return result; + } + + // + result = (int)strContent; + + // + return result; +} +long ParseLongSurrounded( + const string surrounded, // Surrounded Content + const string mToken, // Specified Token + const string startString = "(", // Expression Start String must be Unique + const string endString = ")" // Where to End Extraction, usually a Sign +) +{ + // + long result = NULL; + + // + string strContent = ExtractSurrounded( + surrounded, + mToken, + startString, + endString + // + ); + if (!IsValid(strContent)) + { + return result; + } + + // + result = (long)strContent; + + // + return result; +} +string ParseStringSurrounded( + const string surrounded, // Surrounded Content + const string mToken, // Specified Token + const string startString = "(", // Expression Start String must be Unique + const string endString = ")" // Where to End Extraction, usually a Sign +) +{ + // + string result = NULL; + + // + string strContent = ExtractSurrounded( + surrounded, + mToken, + startString, + endString + // + ); + if (!IsValid(strContent)) + { + return result; + } + + // + result = (string)strContent; + + // + return result; +} +double ParseDoubleSurrounded( + const string surrounded, // Surrounded Content + const string mToken, // Specified Token + const string startString = "(", // Expression Start String must be Unique + const string endString = ")" // Where to End Extraction, usually a Sign +) +{ + // + double result = NULL; + + // + string strContent = ExtractSurrounded( + surrounded, + mToken, + startString, + endString + // + ); + if (!IsValid(strContent)) + { + return result; + } + + // + result = (double)strContent; + + // + return result; +} +datetime ParseTimeSurrounded( + const string surrounded, // Surrounded Content + const string mToken, // Specified Token + const string startString = "(", // Expression Start String must be Unique + const string endString = ")" // Where to End Extraction, usually a Sign +) +{ + // + datetime result = NULL; + + // + string strContent = ExtractSurrounded( + surrounded, + mToken, + startString, + endString + // + ); + if (!IsValid(strContent)) + { + return result; + } + + // + result = (datetime)strContent; + + // + return result; +} + +// +int ParseIntArraySurrounded( + int &result[], // Holds Result + const string surrounded, // Surrounded Content + const string mToken, // Specified Token + string separator = ",", // Separator ... + const string startString = "(", // Expression Start String must be Unique + const string endString = ")", // Where to End Extraction, usually a Sign + bool forceClean = true // Clean Result ... +) +{ + // + int count = 0; + + // + if (forceClean) + { + Clean(result); + } + + // + int before = ArraySize(result); + + // + string contentStr = ParseStringSurrounded(surrounded, mToken); + if (!IsValid(contentStr)) + { + return count; + } + + // + string tmps[]; + int tmpsCount = SplitContent( + tmps, + contentStr + // + ); + if (tmpsCount <= 0) + { + return count; + } + + // + for (int i = 0; i < tmpsCount; i++) + { + // + string iTMP = tmps[i]; + if (!IsValid(iTMP)) + { + continue; + } + + // + int iValue = (int)iTMP; + + // + Add( + iValue, + result + // + ); + } + + // + int after = ArraySize(result); + + // + count = after - before; + + // + return count; +} +int ParseLongArraySurrounded( + long &result[], // Holds Result + const string surrounded, // Surrounded Content + const string mToken, // Specified Token + string separator = ",", // Separator ... + const string startString = "(", // Expression Start String must be Unique + const string endString = ")", // Where to End Extraction, usually a Sign + bool forceClean = true // Clean Result ... +) +{ + // + int count = 0; + + // + if (forceClean) + { + Clean(result); + } + + // + int before = ArraySize(result); + + // + string contentStr = ParseStringSurrounded(surrounded, mToken); + if (!IsValid(contentStr)) + { + return count; + } + + // + string tmps[]; + int tmpsCount = SplitContent( + tmps, + contentStr + // + ); + if (tmpsCount <= 0) + { + return count; + } + + // + for (int i = 0; i < tmpsCount; i++) + { + // + string iTMP = tmps[i]; + if (!IsValid(iTMP)) + { + continue; + } + + // + long iValue = (long)iTMP; + + // + Add( + iValue, + result + // + ); + } + + // + int after = ArraySize(result); + + // + count = after - before; + + // + return count; +} +int ParseDoubleArraySurrounded( + double &result[], // Holds Result + const string surrounded, // Surrounded Content + const string mToken, // Specified Token + string separator = ",", // Separator ... + const string startString = "(", // Expression Start String must be Unique + const string endString = ")", // Where to End Extraction, usually a Sign + bool forceClean = true // Clean Result ... +) +{ + // + int count = 0; + + // + if (forceClean) + { + Clean(result); + } + + // + int before = ArraySize(result); + + // + string contentStr = ParseStringSurrounded(surrounded, mToken); + if (!IsValid(contentStr)) + { + return count; + } + + // + string tmps[]; + int tmpsCount = SplitContent( + tmps, + contentStr + // + ); + if (tmpsCount <= 0) + { + return count; + } + + // + for (int i = 0; i < tmpsCount; i++) + { + // + string iTMP = tmps[i]; + if (!IsValid(iTMP)) + { + continue; + } + + // + double iValue = (double)iTMP; + + // + Add( + iValue, + result + // + ); + } + + // + int after = ArraySize(result); + + // + count = after - before; + + // + return count; +} +int ParseTimeArraySurrounded( + datetime &result[], // Holds Result + const string surrounded, // Surrounded Content + const string mToken, // Specified Token + string separator = ",", // Separator ... + const string startString = "(", // Expression Start String must be Unique + const string endString = ")", // Where to End Extraction, usually a Sign + bool forceClean = true // Clean Result ... +) +{ + // + int count = 0; + + // + if (forceClean) + { + Clean(result); + } + + // + int before = ArraySize(result); + + // + string contentStr = ParseStringSurrounded(surrounded, mToken); + if (!IsValid(contentStr)) + { + return count; + } + + // + string tmps[]; + int tmpsCount = SplitContent( + tmps, + contentStr + // + ); + if (tmpsCount <= 0) + { + return count; + } + + // + for (int i = 0; i < tmpsCount; i++) + { + // + string iTMP = tmps[i]; + if (!IsValid(iTMP)) + { + continue; + } + + // + datetime iValue = (datetime)iTMP; + + // + Add( + iValue, + result + // + ); + } + + // + int after = ArraySize(result); + + // + count = after - before; + + // + return count; +} + +// +// Surround an String by Specific Token ... +template +string Surround( + string mToken, // an String which used to Tokenize + T &value, // a Value for Tokenize it + string startString = "(", // Token Start Content + string endString = ")" // Token End Content +) +{ + // + string result = NULL; + + // + string strValue = ToString(value); + if (!IsValid(strValue)) + { + return result; + } + + // + result = + // + (IsValid(mToken) + ? mToken + : "") + + // + startString + + strValue + + endString + // + ; + + // + return result; +} + +// +template +string SurroundArray( + string mToken, + T &value[], + string startString = "(", // Token Start Content + string endString = ")" // Token End Content +) +{ + // + string result = NULL; + + // + string valueStr = ToString(value); + if (!IsValid(valueStr)) + { + return result; + } + + // + result = Surround( + mToken, + valueStr, + startString, + endString + // + ); + + // + return result; +} + +// +// Periods / Cycles ... + +// +// Converts an String to TimeFrame ... +ENUM_TIMEFRAMES ToPeriod(string value) +{ + // + if (StringLen(value) == 0) + { + return _Period; + } + + // + StringTrimLeft(value); + StringTrimRight(value); + + // + ENUM_TIMEFRAMES result = _Period; + + // + if (value == "M1") + { + result = PERIOD_M1; + } + else if (value == "M2") + { + result = PERIOD_M2; + } + else if (value == "M3") + { + result = PERIOD_M3; + } + else if (value == "M4") + { + result = PERIOD_M4; + } + else if (value == "M5") + { + result = PERIOD_M5; + } + else if (value == "M6") + { + result = PERIOD_M6; + } + else if (value == "M10") + { + result = PERIOD_M10; + } + else if (value == "M12") + { + result = PERIOD_M12; + } + else if (value == "M15") + { + result = PERIOD_M15; + } + else if (value == "M20") + { + result = PERIOD_M20; + } + else if (value == "M30") + { + result = PERIOD_M30; + } + else if (value == "H1") + { + result = PERIOD_H1; + } + else if (value == "H2") + { + result = PERIOD_H2; + } + else if (value == "H3") + { + result = PERIOD_H3; + } + else if (value == "H4") + { + result = PERIOD_H4; + } + else if (value == "H6") + { + result = PERIOD_H6; + } + else if (value == "H8") + { + result = PERIOD_H8; + } + else if (value == "H12") + { + result = PERIOD_H12; + } + else if (value == "D1") + { + result = PERIOD_D1; + } + else if (value == "W1") + { + result = PERIOD_W1; + } + else if (value == "MN1") + { + result = PERIOD_MN1; + } + + // + return result; +} + +// +// Converts Period to String ... +string ToString(ENUM_TIMEFRAMES mPeriod) +{ + // + string result = ""; + + // + string mPStr = EnumToString(mPeriod); + + string mPStrParts[]; + int partsCount = StringSplit( + mPStr, + StringGetCharacter("_", 0), + mPStrParts); + if (partsCount <= 0) + { + return result; + } + + // + result = mPStrParts[1]; + + // + return result; +} + +// +// Retrieve All Available Period as an Array ...s +int GetAllAvailablePeriods( + ENUM_TIMEFRAMES &result[] // Holds Result ... +) +{ + // + Clean(result); + + // + Add( + PERIOD_M1, + result + // + ); + + // + Add( + PERIOD_M2, + result + // + ); + + // + Add( + PERIOD_M3, + result + // + ); + + // + Add( + PERIOD_M4, + result + // + ); + + // + Add( + PERIOD_M5, + result + // + ); + + // + Add( + PERIOD_M6, + result + // + ); + + // + Add( + PERIOD_M10, + result + // + ); + + // + Add( + PERIOD_M12, + result + // + ); + + // + Add( + PERIOD_M15, + result + // + ); + + // + Add( + PERIOD_M20, + result + // + ); + + // + Add( + PERIOD_M30, + result + // + ); + + // + Add( + PERIOD_H1, + result + // + ); + + // + Add( + PERIOD_H2, + result + // + ); + + // + Add( + PERIOD_H3, + result + // + ); + + // + Add( + PERIOD_H4, + result + // + ); + + // + Add( + PERIOD_H6, + result + // + ); + + // + Add( + PERIOD_H8, + result + // + ); + + // + Add( + PERIOD_H12, + result + // + ); + + // + Add( + PERIOD_D1, + result + // + ); + + // + Add( + PERIOD_W1, + result + // + ); + + // + Add( + PERIOD_MN1, + result + // + ); + + // + int mResult = ArraySize(result); + + // + return mResult; +} + +// +// Get Specific Time Frame Start Candle Time ... +datetime GetPeriodStartTime( + string mSymbol = NULL, // Specified Symbol ... + ENUM_TIMEFRAMES mPeriod = NULL, // Specified Period ... + datetime mTime = NULL // Specified Bar Time of Host Period ... +) +{ + // + // Normalize Arg ... + mTime = NormalizeTime(mTime); + mSymbol = NormalizeSymbol(mSymbol); + mPeriod = NormalizePeriod(mPeriod); + + // + int barIndex = iBarShift( + mSymbol, + mPeriod, + mTime, + false + // + ); + + // + datetime result = GetBarTime( + mSymbol, + mPeriod, + barIndex + // + ); + + // + return result; +} + +// +// Converts an String to it's related Market Cycle ... +ENUM_X_MARKET_CYCLES ToCycle(string value) +{ + // + ENUM_X_MARKET_CYCLES result = X_MARKET_CYCLE_UNKNOWN; + + // + ENUM_X_MARKET_CYCLES cycles[]; + int count = GetAllMarketCycles(cycles); + for (int i = 0; i < count; i++) + { + // + ENUM_X_MARKET_CYCLES iCycle = cycles[i]; + string iStr = ToString(iCycle); + + // + if (value == iStr) + { + // + result = iCycle; + break; + } + } + + // + return result; +} + +// +// Converts a Cycle to it's String Representation ... +string ToString(ENUM_X_MARKET_CYCLES cycle) +{ + // + string result = ""; + + // + string mPStr = EnumToString(cycle); + + string mPStrParts[]; + int partsCount = StringSplit( + mPStr, + StringGetCharacter("_", 0), + mPStrParts); + if (partsCount <= 0) + { + return result; + } + + // + result = mPStrParts[3]; + + // + return result; +} + +// +// Retrieve all Available Cycles ... +int GetAllMarketCycles(ENUM_X_MARKET_CYCLES &result[]) +{ + // + int mResult = 0; + + // + Clean(result); + + // + ENUM_X_MARKET_CYCLES tmp[] = { + X_MARKET_CYCLE_UNKNOWN, + X_MARKET_CYCLE_SHORT, + X_MARKET_CYCLE_MEDIUM, + X_MARKET_CYCLE_LONG, + X_MARKET_CYCLE_HIND}; + + // + Copy( + tmp, + result); + + // + Clean(tmp); + + // + mResult = ArraySize(result); + + // + return mResult; +} + +// +// Retrieve Nearest Period base on Given Period ... +ENUM_TIMEFRAMES GetNearestPeriod(ENUM_TIMEFRAMES mPeriod) +{ + // + ENUM_TIMEFRAMES result = _Period; + + // + mPeriod = NormalizePeriod(mPeriod); + + // + switch (mPeriod) + { + // + case PERIOD_M1: + case PERIOD_M2: + result = PERIOD_M4; + break; + + // + case PERIOD_M3: + case PERIOD_M4: + result = PERIOD_M6; + break; + + // + case PERIOD_M5: + case PERIOD_M6: + case PERIOD_M10: + case PERIOD_M12: + result = PERIOD_M15; + break; + + // + case PERIOD_M15: + case PERIOD_M20: + result = PERIOD_M30; + break; + + // + case PERIOD_H1: + case PERIOD_H2: + case PERIOD_H3: + result = PERIOD_H4; + break; + + // + case PERIOD_H6: + case PERIOD_H8: + result = PERIOD_H12; + break; + + // + case PERIOD_H12: + result = PERIOD_D1; + break; + + // + case PERIOD_D1: + result = PERIOD_W1; + break; + + // + default: + result = PERIOD_MN1; + break; + } + + // + return result; +} + +// +// Retrieve Mediest Period base on Given Period ... +ENUM_TIMEFRAMES GetMediestPeriod(ENUM_TIMEFRAMES mPeriod) +{ + // + ENUM_TIMEFRAMES result = _Period; + + // + mPeriod = NormalizePeriod(mPeriod); + + // + switch (mPeriod) + { + // + case PERIOD_M1: + case PERIOD_M2: + result = PERIOD_M15; + break; + + // + case PERIOD_M3: + case PERIOD_M4: + result = PERIOD_M30; + break; + + // + case PERIOD_M5: + case PERIOD_M6: + case PERIOD_M10: + case PERIOD_M12: + result = PERIOD_H1; + break; + + // + case PERIOD_M15: + case PERIOD_M20: + result = PERIOD_H2; + break; + + // + case PERIOD_H1: + case PERIOD_H2: + case PERIOD_H3: + result = PERIOD_H8; + break; + + // + case PERIOD_H6: + case PERIOD_H8: + result = PERIOD_D1; + break; + + // + case PERIOD_H12: + result = PERIOD_W1; + break; + + // + case PERIOD_D1: + result = PERIOD_MN1; + break; + + // + default: + result = PERIOD_MN1; + break; + } + + // + return result; +} + +// +// Retrieve Longest Period base on Given Period ... +ENUM_TIMEFRAMES GetLongestPeriod(ENUM_TIMEFRAMES mPeriod) +{ + // + ENUM_TIMEFRAMES result = _Period; + + // + mPeriod = NormalizePeriod(mPeriod); + + // + switch (mPeriod) + { + // + case PERIOD_M1: + case PERIOD_M2: + result = PERIOD_M30; + break; + + // + case PERIOD_M3: + case PERIOD_M4: + result = PERIOD_H1; + break; + + // + case PERIOD_M5: + case PERIOD_M6: + case PERIOD_M10: + case PERIOD_M12: + result = PERIOD_H2; + break; + + // + case PERIOD_M15: + case PERIOD_M20: + result = PERIOD_H4; + break; + + // + case PERIOD_H1: + case PERIOD_H2: + case PERIOD_H3: + result = PERIOD_H12; + break; + + // + case PERIOD_H6: + case PERIOD_H8: + result = PERIOD_W1; + break; + + // + case PERIOD_H12: + result = PERIOD_MN1; + break; + + // + case PERIOD_D1: + result = PERIOD_MN1; + break; + + // + default: + result = PERIOD_MN1; + break; + } + + // + return result; +} + +// +// Retrieve Hindmost Period base on Given Period ... +ENUM_TIMEFRAMES GetHindMostPeriod(ENUM_TIMEFRAMES mPeriod) +{ + // + ENUM_TIMEFRAMES result = _Period; + + // + mPeriod = NormalizePeriod(mPeriod); + + // + switch (mPeriod) + { + // + case PERIOD_M1: + case PERIOD_M2: + result = PERIOD_H1; + break; + + // + case PERIOD_M3: + case PERIOD_M4: + result = PERIOD_H2; + break; + + // + case PERIOD_M5: + case PERIOD_M6: + case PERIOD_M10: + case PERIOD_M12: + result = PERIOD_H4; + break; + + // + case PERIOD_M15: + case PERIOD_M20: + result = PERIOD_H8; + break; + + // + case PERIOD_H1: + case PERIOD_H2: + case PERIOD_H3: + result = PERIOD_D1; + break; + + // + case PERIOD_H6: + case PERIOD_H8: + result = PERIOD_MN1; + break; + + // + case PERIOD_H12: + result = PERIOD_MN1; + break; + + // + case PERIOD_D1: + result = PERIOD_MN1; + break; + + // + default: + result = PERIOD_MN1; + break; + } + + // + return result; +} + +// +// Retrieve Specified Cycles Period related to Host Period ... +ENUM_TIMEFRAMES GetCyclePeriod( + ENUM_X_MARKET_CYCLES mCycle = NULL, // Specified Cycle + ENUM_TIMEFRAMES mPeriod = NULL // Host Period +) +{ + // + ENUM_TIMEFRAMES result = NULL; + + // + mPeriod = NormalizePeriod(mPeriod); + mCycle = NormalizeCycle(mCycle); + + // + switch (mCycle) + { + // + // Short ... + case X_MARKET_CYCLE_SHORT: + result = GetNearestPeriod(mPeriod); + break; + + // + // Medium ... + case X_MARKET_CYCLE_MEDIUM: + result = GetMediestPeriod(mPeriod); + break; + + // + // Long ... + case X_MARKET_CYCLE_LONG: + result = GetLongestPeriod(mPeriod); + break; + + // + // Hind ... + case X_MARKET_CYCLE_HIND: + result = GetHindMostPeriod(mPeriod); + break; + } + + // + return result; +} \ No newline at end of file diff --git a/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.draw.lib.ex5 b/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.draw.lib.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..53414c485f8d4cd4e3c29a71eef71092ff3c6559 GIT binary patch literal 6512 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 F{{@3xIoSXJ literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.draw.lib.mq5 b/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.draw.lib.mq5 new file mode 100644 index 0000000..2bdaf10 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.draw.lib.mq5 @@ -0,0 +1,2443 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Draw Library +// -------------------------------------- +// Name: XDraw +// Description: provides Draw abilities ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Global Definitions: Variables, Properties and etc ... + +// +// Retrieve Chart Size in Pixel ... +struct XSize +{ + long width; + long height; + + // + int x; + int y; + int w; + int h; + + // + int wStep; + int hStep; +}; + +// +// Define a Draw Specifications ... +struct XDrawSpecifications +{ + // + // Props ... + + // + bool draw; // Draw or Not ... + + // + int width; // Draw Witdth ... + color clr; // Draw Color ... + ENUM_LINE_STYLE style; // Draw Style ... + + // + bool back; // in the background + bool fill; // fill object if supported + bool selection; // highlight to move + bool rayRight; // line's continuation to the right + bool hidden; // hidden in the object list + long zOrder; // priority for mouse click + + // + string label; // Label ... + color labelColor; // Label Color ... + double labelAngel; // Label Angle ... + string labelFont; // Label Font ... + int labelFontSize; // Label Font Size ... + ENUM_ANCHOR_POINT labelAnchor; // Label Anchor Point ... + + // + // Constructor ... + XDrawSpecifications() + { + Clean(); + } + + // + // Operator ... + void operator=(const XDrawSpecifications &value) + { + // + clr = value.clr; + draw = value.draw; + width = value.width; + style = value.style; + + // + back = value.back; + hidden = value.hidden; + zOrder = value.zOrder; + rayRight = value.rayRight; + selection = value.selection; + + // + fill = value.fill; + + // + label = value.label; + labelColor = value.labelColor; + labelAngel = value.labelAngel; + labelFont = value.labelFont; + labelFontSize = value.labelFontSize; + labelAnchor = value.labelAnchor; + } + + // + // Functions ... + + // + void Clean() + { + // + draw = false; + width = 1; + clr = CLR_NONE; + style = STYLE_SOLID; + + // + back = false; + hidden = false; + rayRight = false; + selection = false; + fill = false; + + // + zOrder = 0; + + // + label = ""; + labelColor = CLR_NONE; + labelAngel = 0; + labelFont = "Arial"; + labelFontSize = 20; + labelAnchor = ANCHOR_LEFT_UPPER; + } + + // + void Label( + string mLabel = "", // Label ... + color mLabelColor = CLR_NONE, // Label Color ... + string mLabelFont = "Arial", // Label Font ... + int mLabelFontSize = 20, // Label Font Size ... + ENUM_ANCHOR_POINT mLabelAnchor = ANCHOR_LEFT_UPPER, // Label Anchor Point ... + double mLabelAngel = 0 // Label Angle ... + ) + { + // + label = mLabel; + labelFont = mLabelFont; + labelColor = mLabelColor; + labelAngel = mLabelAngel; + labelAnchor = mLabelAnchor; + labelFontSize = mLabelFontSize; + } +}; + +// +// Candle Draw Specifications ... +struct XOHCLDrawSpecification +{ + // + // Props ... + XDrawSpecifications openStyle; + XDrawSpecifications highStyle; + XDrawSpecifications closeStyle; + XDrawSpecifications lowStyle; + + // + // Constructors ... + XOHCLDrawSpecification() + { + Clean(); + } + + // + // Operators ... + void operator=(const XOHCLDrawSpecification &value) + { + // + lowStyle = value.lowStyle; + openStyle = value.openStyle; + highStyle = value.highStyle; + closeStyle = value.closeStyle; + } + + // + // Functions ... + + // + void Clean() + { + // + lowStyle.Clean(); + openStyle.Clean(); + highStyle.Clean(); + closeStyle.Clean(); + } + + // + void Default() + { + // + // Open ... + openStyle.width = 1; + openStyle.draw = true; + openStyle.clr = clrLime; + openStyle.style = STYLE_SOLID; + openStyle.Label( + "O", + openStyle.clr); + + // + // High ... + highStyle.width = 1; + highStyle.draw = true; + highStyle.clr = clrAqua; + highStyle.style = STYLE_SOLID; + highStyle.Label( + "H", + highStyle.clr); + + // + // Close ... + closeStyle.width = 1; + closeStyle.draw = true; + closeStyle.clr = clrRed; + closeStyle.style = STYLE_SOLID; + closeStyle.Label( + "C", + closeStyle.clr); + + // + // Low ... + lowStyle.width = 1; + lowStyle.draw = true; + lowStyle.clr = clrMagenta; + lowStyle.style = STYLE_SOLID; + lowStyle.Label( + "L", + lowStyle.clr); + } + + // + void Width(int value) + { + // + lowStyle.width = value; + openStyle.width = value; + highStyle.width = value; + closeStyle.width = value; + } + + // + void Style(ENUM_LINE_STYLE value) + { + // + lowStyle.style = value; + openStyle.style = value; + highStyle.style = value; + closeStyle.style = value; + } + + // + void Color(color value) + { + // + lowStyle.clr = value; + openStyle.clr = value; + highStyle.clr = value; + closeStyle.clr = value; + } + + // + void RayRight(bool value) + { + // + lowStyle.rayRight = value; + openStyle.rayRight = value; + highStyle.rayRight = value; + closeStyle.rayRight = value; + } + + // + void Draw(bool value) + { + // + lowStyle.draw = value; + openStyle.draw = value; + highStyle.draw = value; + closeStyle.draw = value; + } + + // + void Back(bool value) + { + // + lowStyle.back = value; + openStyle.back = value; + highStyle.back = value; + closeStyle.back = value; + } + + // + void Fill(bool value) + { + // + lowStyle.fill = value; + openStyle.fill = value; + highStyle.fill = value; + closeStyle.fill = value; + } + + // + void Label(string value) + { + // + lowStyle.Label(value); + openStyle.Label(value); + highStyle.Label(value); + closeStyle.Label(value); + } + + // + void SetLabelPrefix(string value) + { + // + lowStyle.label = value + " " + lowStyle.label; + openStyle.label = value + " " + openStyle.label; + highStyle.label = value + " " + highStyle.label; + closeStyle.label = value + " " + closeStyle.label; + } +}; + +// +string drawPrefix = "X-OBJ"; + +// +// Common Draw Functions ... + +// +// remove drawn objects ... +void RemoveDraws( + string tag = NULL, + long chartId = -1, + int subWindow = -1 // +) +{ + // + // Normalize Args ... + // + if (tag == NULL) + { + tag = drawPrefix; + } + + // + if (chartId == -1) + { + chartId = 0; + } + + // + if (subWindow == -1) + { + subWindow = 0; + } + + // + for (int iObj = ObjectsTotal(chartId, subWindow) - 1; iObj >= 0; iObj--) + { + // + string on = ObjectName(chartId, iObj, subWindow); + if (StringFind(on, tag) >= 0) + { + ObjectDelete(chartId, on); + } + } + + // + // Redraw Chart ... + ChartRedraw(); +} + +// +bool RemoveDraw( + string name, + long chartId = -1, + int subWindow = -1 // +) +{ + // + bool result = false; + + // + if (chartId == -1) + { + chartId = 0; + } + + // + if (subWindow == -1) + { + subWindow = 0; + } + + // + string objName = ""; + for (int iObj = ObjectsTotal(chartId, subWindow) - 1; iObj >= 0; iObj--) + { + // + string on = ObjectName(chartId, iObj, subWindow); + if (StringFind(on, name) >= 0) + { + // + objName = on; + break; + } + } + + // + if (StringLen(objName) > 0) + { + result = ObjectDelete(chartId, objName); + } + + // + return result; +} + +// +// Deselect All Draws ... +void DeselectAllDraws() +{ + // + int objs = ObjectsTotal(ChartID(), 0); + for (int o = 0; o < objs; o++) + { + ObjectSetInteger(ChartID(), ObjectName(ChartID(), o, 0), OBJPROP_SELECTED, false); + } + + // + ChartRedraw(); +} + +// +// Check Object Exists ... +bool IsDrawExists( + string name, + long chartId = -1, + int subWindow = -1 // +) +{ + // + bool result = false; + + // + if (chartId == -1) + { + chartId = 0; + } + + // + if (subWindow == -1) + { + subWindow = 0; + } + + // + for (int iObj = ObjectsTotal(chartId, subWindow) - 1; iObj >= 0; iObj--) + { + // + string on = ObjectName(chartId, iObj, subWindow); + result = StringFind(on, name) >= 0; + if (result) + { + break; + } + } + + // + return result; +} + +// +// Regular Draws ... + +// +// 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 = 252, // 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 ... +) +{ + // + bool result = false; + + // + // set anchor point coordinates if they are not set ... + ChangeArrowEmptyPoint(time, price); + + // + // reset the error value ... + ResetLastError(); + + // + // Normalize Name ... + string objName = drawPrefix + "_" + name; + + // + // create an arrow ... + result = ObjectCreate(chartID, objName, OBJ_ARROW, subWindow, time, price); + if (!result) + { + return result; + } + + // + // set the arrow code ... + ObjectSetInteger(chartID, objName, OBJPROP_ARROWCODE, arrowCode); + + // + // set anchor type ... + ObjectSetInteger(chartID, objName, OBJPROP_ANCHOR, anchor); + + // + // set the arrow color ... + ObjectSetInteger(chartID, objName, OBJPROP_COLOR, clr); + + // + // set the border line style ... + ObjectSetInteger(chartID, objName, OBJPROP_STYLE, style); + + // + // set the arrow's size ... + ObjectSetInteger(chartID, objName, OBJPROP_WIDTH, width); + + // + // display in the foreground false or background true ... + ObjectSetInteger(chartID, objName, 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, objName, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID, objName, OBJPROP_SELECTED, selection); + + // + // hide true or display false graphical object name in the object list ... + ObjectSetInteger(chartID, objName, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, objName, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return result; +} + +// +// 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 +) +{ + // + bool result = false; + + // + // 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); + } + + // + // move the anchor point ... + result = ObjectMove(chartID, name, 0, time, price); + + // + return result; +} + +// +// Delete an arrow ... +bool DeleteArrow( + const long chartID = 0, // chart's ID + const string name = "Arrow" // arrow name +) +{ + // + bool result = false; + + // + // delete an arrow ... + result = !ObjectDelete(chartID, name); + + // + return result; +} + +// +// 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 +) +{ + // + bool result = false; + + // + // change the arrow code ... + result = ObjectSetInteger(chartID, name, OBJPROP_ARROWCODE, code); + + // + return result; +} + +// +// 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 +) +{ + // + bool result = false; + + // + // change anchor type ... + result = !ObjectSetInteger(chartID, name, OBJPROP_ANCHOR, anchor); + + // + return result; +} + +// +// 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); + } +} + +// +// 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 +) +{ + // + bool result = false; + + // + // if the price is not set, set it at the current Bid price level ... + if (!price) + { + price = SymbolInfoDouble(Symbol(), SYMBOL_BID); + } + + // + // Normalize Name ... + string objName = drawPrefix + "_" + name; + + // + // create a horizontal line ... + result = ObjectCreate(chartID, objName, OBJ_HLINE, subWindow, 0, price); + if (!result) + { + return result; + } + + // + // set line color ... + ObjectSetInteger(chartID, objName, OBJPROP_COLOR, clr); + + // + // set line display style ... + ObjectSetInteger(chartID, objName, OBJPROP_STYLE, style); + + // + // set line width ... + ObjectSetInteger(chartID, objName, OBJPROP_WIDTH, width); + + // + // display in the foreground false or background true ... + ObjectSetInteger(chartID, objName, 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, objName, OBJPROP_SELECTABLE, selection); + ObjectSetInteger(chartID, objName, OBJPROP_SELECTED, selection); + + // + // hide true or display false graphical object name in the object list ... + ObjectSetInteger(chartID, objName, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, objName, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return result; +} + +// +// Move horizontal line ... +bool MoveHorizontalLine( + const long chartID = 0, // chart's ID + const string name = "HLine", // line name + double price = 0 // line price +) +{ + // + bool result = false; + + // + // if the line price is not set, move it to the current Bid price level ... + if (!price) + { + price = SymbolInfoDouble(Symbol(), SYMBOL_BID); + } + + // + // move a horizontal line ... + result = ObjectMove(chartID, name, 0, 0, price); + + // + return result; +} + +// +// Delete a horizontal line ... +bool DeleteHorizontalLine( + const long chartID = 0, // chart's ID + const string name = "HLine" // line name +) +{ + // + bool result = false; + + // + // delete a horizontal line ... + result = ObjectDelete(chartID, name); + + // + return result; +} + +// +// Vertical Line Functions ... + +// +// Create the vertical line ... +bool DrawVerticalLine( + const long chartID = 0, // chart's ID + const string name = "VLine", // line name + const int subWindow = 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 +) +{ + // + bool result = false; + + // + // if the line time is not set, draw it via the last bar ... + if (!time) + { + time = TimeCurrent(); + } + + // + // Normalize Name ... + string objName = drawPrefix + "_" + name; + + // + // create a vertical line ... + result = ObjectCreate(chartID, objName, OBJ_VLINE, subWindow, time, 0); + if (!result) + { + return result; + } + + // + // set line color ... + ObjectSetInteger(chartID, objName, OBJPROP_COLOR, clr); + + // + // set line display style ... + ObjectSetInteger(chartID, objName, OBJPROP_STYLE, style); + + // + // set line width ... + ObjectSetInteger(chartID, objName, OBJPROP_WIDTH, width); + + // + // display in the foreground false or background true ... + ObjectSetInteger(chartID, objName, 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, objName, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID, objName, OBJPROP_SELECTED, selection); + + // + // hide true or display false graphical object name in the object list ... + ObjectSetInteger(chartID, objName, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart + ObjectSetInteger(chartID, objName, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return result; +} + +// +// Move the vertical line ... +bool MoveVerticalLine( + const long chartID = 0, // chart's ID + const string name = "VLine", // line name + datetime time = 0 // line time +) +{ + // + bool result = false; + + // + // if line time is not set, move the line to the last bar ... + if (!time) + { + time = TimeCurrent(); + } + + // + // move the vertical line ... + result = ObjectMove(chartID, name, 0, time, 0); + + // + return result; +} + +// +// Delete the vertical line ... +bool DeleteVerticalLine( + const long chartID = 0, // chart's ID + const string name = "VLine" // line name +) +{ + // + bool result = false; + + // + // delete the vertical line ... + result = ObjectDelete(chartID, name); + + // + return result; +} + +// +// Rectangle Functions ... + +// +// Create rectangle by the given coordinates ... +bool DrawRectangle( + const long chartID = 0, // chart's ID + const string name = "Rectangle", // rectangle 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, // rectangle color + const ENUM_LINE_STYLE style = STYLE_SOLID, // style of rectangle lines + const int width = 1, // width of rectangle lines + const bool fill = false, // filling rectangle with color + const bool back = false, // in the background + const bool selection = true, // highlight to move + const bool hidden = true, // hidden in the object list + const long zOrder = 0 // priority for mouse click +) +{ + // + bool result = false; + + // + // Set anchor points' coordinates if they are not set ... + ChangeRectangleEmptyPoints(time1, price1, time2, price2); + + // + // Create a rectangle by the given coordinates ... + result = ObjectCreate(chartID, name, OBJ_RECTANGLE, subWindow, time1, price1, time2, price2); + if (!result) + { + return result; + } + + // + // Set rectangle color ... + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // Set the style of rectangle lines + ObjectSetInteger(chartID, name, OBJPROP_STYLE, style); + + // + // Set width of the rectangle lines ... + ObjectSetInteger(chartID, name, OBJPROP_WIDTH, width); + + // + // Enable (true) or disable (false) the mode of filling the rectangle ... + ObjectSetInteger(chartID, name, OBJPROP_FILL, fill); + + // + // Display in the foreground (false) or background (true) ... + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // Enable (true) or disable (false) the mode of highlighting the rectangle 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, 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 result; +} + +// +// Move the rectangle anchor point ...s +bool RectanglePointChange( + const long chartID = 0, // chart's ID + const string name = "Rectangle", // rectangle name + const int pointIndex = 0, // anchor point index + datetime time = 0, // anchor point time coordinate + double price = 0 // anchor point price coordinate +) +{ + // + bool result = false; + + // + // 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); + } + + // + // Move the anchor point ... + result = ObjectMove(chartID, name, pointIndex, time, price); + + // + return result; +} + +// +// Delete the rectangle ... +bool DeleteRectangle( + const long chartID = 0, // chart's ID + const string name = "Rectangle" // rectangle name +) +{ + // + bool result = false; + + // + result = ObjectDelete(chartID, name); + + // + return result; +} + +// +// Check the values of rectangle's anchor points and set default +// values for empty ones +void ChangeRectangleEmptyPoints( + 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, move it 300 points lower than the first one ... + if (!price2) + { + price2 = price1 - 300 * SymbolInfoDouble(Symbol(), SYMBOL_POINT); + } +} + +// +// 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 bgColor = clrWhiteSmoke, // 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 +) +{ + // + bool result = false; + + // + // Normalize Name ... + string objName = drawPrefix + "_" + name; + + // + // create a rectangle label + result = ObjectCreate(chartID, objName, OBJ_RECTANGLE_LABEL, subWindow, 0, 0); + if (!result) + { + return result; + } + + // + // set label coordinates ... + ObjectSetInteger(chartID, objName, OBJPROP_XDISTANCE, x); + ObjectSetInteger(chartID, objName, OBJPROP_YDISTANCE, y); + + // + // set label size ... + ObjectSetInteger(chartID, objName, OBJPROP_XSIZE, width); + ObjectSetInteger(chartID, objName, OBJPROP_YSIZE, height); + + // + // set background color ... + ObjectSetInteger(chartID, objName, OBJPROP_BGCOLOR, bgColor); + + // + // set border type ... + ObjectSetInteger(chartID, objName, OBJPROP_BORDER_TYPE, border); + + // + // set the chart's corner, relative to which point coordinates are defined ... + ObjectSetInteger(chartID, objName, OBJPROP_CORNER, corner); + + // + // set flat border color (in Flat mode) ... + ObjectSetInteger(chartID, objName, OBJPROP_COLOR, clr); + + // + // set flat border line style ... + ObjectSetInteger(chartID, objName, OBJPROP_STYLE, style); + + // + // set flat border width ... + ObjectSetInteger(chartID, objName, OBJPROP_WIDTH, lineWidth); + + // + // display in the foreground false or background true ... + ObjectSetInteger(chartID, objName, OBJPROP_BACK, back); + + // + // enable true or disable false the mode of moving the label by mouse ... + ObjectSetInteger(chartID, objName, OBJPROP_SELECTABLE, selection); + ObjectSetInteger(chartID, objName, OBJPROP_SELECTED, selection); + + // + // hide true or display false graphical object name in the object list ... + ObjectSetInteger(chartID, objName, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, objName, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return result; +} + +// +// 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 +) +{ + // + bool result = false; + + // + // move the rectangle label ... + result = ObjectSetInteger(chartID, name, OBJPROP_XDISTANCE, x); + if (!result) + { + return result; + } + + // + result = ObjectSetInteger(chartID, name, OBJPROP_YDISTANCE, y); + + // + return result; +} + +// +// Delete the rectangle label ... +bool DeleteRectangleLabel( + const long chartID = 0, // chart's ID + const string name = "RectLabel" // label name +) +{ + // + bool result = false; + + // + // delete the label ... + result = ObjectDelete(chartID, name); + + // + return result; +} + +// +// 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 +) +{ + // + bool result = false; + + // + // change label size ... + result = ObjectSetInteger(chartID, name, OBJPROP_XSIZE, width); + if (!result) + { + return result; + } + + // + result = ObjectSetInteger(chartID, name, OBJPROP_YSIZE, height); + + // + return result; +} + +// +// 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 +) +{ + // + bool result = false; + + // + // change border type ... + result = ObjectSetInteger(chartID, name, OBJPROP_BORDER_TYPE, border); + + // + return result; +} + +// +// 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 +) +{ + // + bool result = false; + + // + // set anchor points' coordinates if they are not set ... + ChangeTrendLineEmptyPoints( + time1, + price1, + time2, + price2); + + // + // Normalize Name ... + string objName = drawPrefix + "_" + name; + + // + // create a trend line by the given coordinates ... + result = ObjectCreate(chartID, objName, OBJ_TREND, subWindow, time1, price1, time2, price2); + if (!result) + { + return result; + } + + // + // set line color ... + ObjectSetInteger(chartID, objName, OBJPROP_COLOR, clr); + + // + // set line display style ... + ObjectSetInteger(chartID, objName, OBJPROP_STYLE, style); + + // + // set line width ... + ObjectSetInteger(chartID, objName, OBJPROP_WIDTH, width); + + // + // display in the foreground false or background true ... + ObjectSetInteger(chartID, objName, 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, objName, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID, objName, OBJPROP_SELECTED, selection); + + // + // enable true or disable false the mode of continuation of the line's display to the right ... + ObjectSetInteger(chartID, objName, OBJPROP_RAY_RIGHT, rayRight); + + // + // hide true or display false graphical object name in the object list ... + ObjectSetInteger(chartID, objName, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, objName, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return result; +} + +// +// 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 +) +{ + // + bool result = false; + + // + // 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); + } + + // + // move trend line's anchor point ... + result = ObjectMove(chartID, name, pointindex, time, price); + + // + return result; +} + +// +// The function deletes the trend line from the chart ... +bool DeleteTrendLine( + const long chartID = 0, // chart's ID + const string name = "TrendLine" // line name +) +{ + // + bool result = false; + + // + // delete a trend line ... + result = ObjectDelete(chartID, name); + + // + return result; +} + +// +// 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; + } +} + +// +// 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 +) +{ + // + bool result = false; + + // + // set anchor point coordinates if they are not set ... + ChangeTextEmptyPoint(time, price); + + // + // Normalize Name ... + string objName = drawPrefix + "_" + name; + + // + // + // create Text object + result = ObjectCreate(chartID, objName, OBJ_TEXT, subWindow, time, price); + if (!result) + { + return result; + } + + // + // set the text ... + ObjectSetString(chartID, objName, OBJPROP_TEXT, text); + + // + // set text font ... + ObjectSetString(chartID, objName, OBJPROP_FONT, font); + + // + // set font size ... + ObjectSetInteger(chartID, objName, OBJPROP_FONTSIZE, fontSize); + + // + // set the slope angle of the text ... + ObjectSetDouble(chartID, objName, OBJPROP_ANGLE, angle); + + // + // set anchor type ... + ObjectSetInteger(chartID, objName, OBJPROP_ANCHOR, anchor); + + // + // set color ... + ObjectSetInteger(chartID, objName, OBJPROP_COLOR, clr); + + // + // display in the foreground false or background true ... + ObjectSetInteger(chartID, objName, OBJPROP_BACK, back); + + // + // enable true or disable false the mode of moving the object by mouse ... + ObjectSetInteger(chartID, objName, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID, objName, OBJPROP_SELECTED, selection); + + // + // hide true or display false graphical object name in the object list ... + ObjectSetInteger(chartID, objName, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, objName, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return result; +} + +// +// 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 +) +{ + // + bool result = false; + + // + // + // 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); + } + + // + // move the anchor point ... + result = ObjectMove(chartID, name, 0, time, price); + + // + return result; +} + +// +// Change the object text ... +bool ChangeText( + const long chartID = 0, // chart's ID + const string name = "Text", // object name + const string text = "Text" // text +) +{ + // + bool result = false; + + // + // change object text ... + result = ObjectSetString(chartID, name, OBJPROP_TEXT, text); + + // + return result; +} + +// +// Delete Text object ... +bool DeleteText( + const long chartID = 0, // chart's ID + const string name = "Text" // object name +) +{ + // + bool result = false; + + // + // delete the object ... + result = ObjectDelete(chartID, name); + + // + return result; +} + +// +// 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); + } +} + +// +// 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 +) +{ + // + bool result = false; + + // + // set anchor points' coordinates if they are not set ... + ChangeFibonacciEmptyPoints(time1, price1, time2, price2); + + // + // Normalize Name ... + string objName = drawPrefix + "_" + name; + + // + // Create Fibonacci Retracement by the given coordinates ... + result = ObjectCreate(chartID, objName, OBJ_FIBO, subWindow, time1, price1, time2, price2); + if (!result) + { + return result; + } + + // + // set color ... + ObjectSetInteger(chartID, objName, OBJPROP_COLOR, clr); + + // + // set line style ... + ObjectSetInteger(chartID, objName, OBJPROP_STYLE, style); + + // + // set line width ... + ObjectSetInteger(chartID, objName, OBJPROP_WIDTH, width); + + // + // display in the foreground false or background true ... + ObjectSetInteger(chartID, objName, 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, objName, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID, objName, OBJPROP_SELECTED, selection); + + // + // enable true or disable false the mode of continuation of the object's display to the right ... + ObjectSetInteger(chartID, objName, OBJPROP_RAY_RIGHT, rayRight); + + // + // hide true or display false graphical object name in the object list ... + ObjectSetInteger(chartID, objName, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, objName, OBJPROP_ZORDER, zOrder); + + // + // successful execution ... + return result; +} + +// +// 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 +) +{ + // + bool result = false; + + // + // set anchor points' coordinates if they are not set ... + ChangeFibonacciEmptyPoints(time1, price1, time2, price2); + + // + // Normalize Name ... + string objName = drawPrefix + "_" + name; + + // + // Create Fibonacci Retracement by the given coordinates ... + result = ObjectCreate(chartID, name, OBJ_FIBO, subWindow, time1, price1, time2, price2); + if (!result) + { + return result; + } + + // + // set color ... + ObjectSetInteger(chartID, objName, OBJPROP_COLOR, clr); + + // + // set line style ... + ObjectSetInteger(chartID, objName, OBJPROP_STYLE, style); + + // + // set line width ... + ObjectSetInteger(chartID, objName, OBJPROP_WIDTH, width); + + // + // display in the foreground false or background true ... + ObjectSetInteger(chartID, objName, 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, objName, OBJPROP_SELECTABLE, true); + ObjectSetInteger(chartID, objName, OBJPROP_SELECTED, selection); + + // + // enable true or disable false the mode of continuation of the object's display to the right ... + ObjectSetInteger(chartID, objName, OBJPROP_RAY_RIGHT, rayRight); + + // + // hide true or display false graphical object name in the object list ... + ObjectSetInteger(chartID, objName, OBJPROP_HIDDEN, hidden); + + // + // set the priority for receiving the event of a mouse click in the chart ... + ObjectSetInteger(chartID, objName, OBJPROP_ZORDER, zOrder); + + // + // Change Levels Of Fibonacci ... + result = FibonacciLevelsSet( + levels, + values, + colors, + styles, + widths, + descriptions, + chartID, + objName); + + // + // 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 +) +{ + // + bool result = false; + + // + // check array sizes ... + result = levels == ArraySize(colors) && + levels == ArraySize(styles) && + levels == ArraySize(widths) && + levels == ArraySize(widths); + if (!result) + { + return result; + } + + // + // 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 result; +} + +// +// 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 +) +{ + // + bool result = false; + + // + // 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); + } + + // + // move the anchor point ... + result = ObjectMove(chartID, name, pointIndex, time, price); + + // + return result; +} + +// +// Delete Fibonacci Retracement ... +bool DeleteFibonachi( + const long chartID = 0, // chart's ID + const string name = "Fibonacci" // object name +) +{ + // + bool result = false; + + // + // delete the object ... + result = ObjectDelete(chartID, name); + + // + return result; +} + +// +// 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); + } +} + +// +// Event Functions ... + +// +// Create an Event ... +bool EventCreate( + const long chartID = 0, // chart's ID + const string name = "Event", // object name + const int subWindow = 0, // subwindow index + const string text = "Content", // event text + datetime time = 0, // anchor point time + const color clr = clrRed, // color + const int width = 1, // point width when highlighted + 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 +) +{ + // + bool result = false; + + // + if (!time) + { + time = TimeCurrent(); + } + + // + result = ObjectCreate(chartID, name, OBJ_EVENT, subWindow, time, 0); + if (!result) + { + return result; + } + + // + // set event text + ObjectSetString(chartID, name, OBJPROP_TEXT, text); + + // + // set color + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // set anchor point width if the object is highlighted + 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 event 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 result; +} + +// +// Change Event object text +bool EventTextChange( + const long chartID = 0, // chart's ID + const string name = "Event", // event name + const string text = "Content" // text +) +{ + // + bool result = false; + + // + // change object text + result = ObjectSetString(chartID, name, OBJPROP_TEXT, text); + + // + return result; +} + +// +// Move Event object +bool EventMove( + const long chartID = 0, // chart's ID + const string name = "Event", // event name + datetime time = 0 // time +) +{ + // + bool result = false; + + // + // if time is not set, move event to the last bar + if (!time) + { + time = TimeCurrent(); + } + + // + // move the object + result = ObjectMove(chartID, name, 0, time, 0); + + // + return result; +} + +// +// Delete Event object +bool EventDelete( + const long chartID = 0, // chart's ID + const string name = "Event" // event name +) +{ + // + bool result = false; + + // + // delete the object + result = ObjectDelete(chartID, name); + + // + return result; +} + +// +// Button Functions ... + +// +// Create the button ... +bool ButtonCreate( + const long chartID = 0, // chart's ID + const string name = "Button", // button name + const int subWindow = 0, // subwindow index + const int x = 0, // X coordinate + const int y = 0, // Y coordinate + const int width = 50, // button width + const int height = 15, // button height + const ENUM_BASE_CORNER corner = CORNER_LEFT_UPPER, // chart corner for anchoring + const string text = "Button", // text + const string font = "Arial", // font + const int fontSize = 8, // font size + const color clr = clrBlack, // text color + const color bgColor = clrLightGray, // background color + const color borderColor = clrNONE, // border color + const bool state = false, // pressed/released + 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 +) +{ + // + bool result = false; + + // + // create the button + result = ObjectCreate(chartID, name, OBJ_BUTTON, subWindow, 0, 0); + if (!result) + { + return result; + } + + // + // set button coordinates + ObjectSetInteger(chartID, name, OBJPROP_XDISTANCE, x); + ObjectSetInteger(chartID, name, OBJPROP_YDISTANCE, y); + + // + // set button size + ObjectSetInteger(chartID, name, OBJPROP_XSIZE, width); + ObjectSetInteger(chartID, name, OBJPROP_YSIZE, height); + + // + // set the chart's corner, relative to which point coordinates are defined + ObjectSetInteger(chartID, name, OBJPROP_CORNER, corner); + + // + // 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 text color + ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr); + + // + // set background color + ObjectSetInteger(chartID, name, OBJPROP_BGCOLOR, bgColor); + + // + // set border color + ObjectSetInteger(chartID, name, OBJPROP_BORDER_COLOR, borderColor); + + // + // display in the foreground false or background true + ObjectSetInteger(chartID, name, OBJPROP_BACK, back); + + // + // set button state + ObjectSetInteger(chartID, name, OBJPROP_STATE, state); + + // + // enable true or disable false the mode of moving the button 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); + + // + return result; +} + +// +// Move the button ... +bool ButtonMove( + const long chartID = 0, // chart's ID + const string name = "Button", // button name + const int x = 0, // X coordinate + const int y = 0 // Y coordinate +) +{ + // + bool result = false; + + // + // move the button + + // + result = ObjectSetInteger(chartID, name, OBJPROP_XDISTANCE, x); + if (!result) + { + return result; + } + + // + result = ObjectSetInteger(chartID, name, OBJPROP_YDISTANCE, y); + + // + return result; +} + +// +// Change button size ... +bool ButtonChangeSize( + const long chartID = 0, // chart's ID + const string name = "Button", // button name + const int width = 50, // button width + const int height = 18 // button height +) +{ + // + bool result = false; + + // + // change the button size + + // + result = ObjectSetInteger(chartID, name, OBJPROP_XSIZE, width); + if (!result) + { + return result; + } + + // + result = ObjectSetInteger(chartID, name, OBJPROP_YSIZE, height); + + // + return result; +} + +// +// Change corner of the chart for binding the button ... +bool ButtonChangeCorner( + const long chartID = 0, // chart's ID + const string name = "Button", // button name + const ENUM_BASE_CORNER corner = CORNER_LEFT_UPPER // chart corner for anchoring +) +{ + // + bool result = false; + + // + // change anchor corner + result = ObjectSetInteger(chartID, name, OBJPROP_CORNER, corner); + + // + return result; +} + +// +// Change button text ... +bool ButtonTextChange( + const long chartID = 0, // chart's ID + const string name = "Button", // button name + const string text = "Text" // text +) +{ + // + bool result = false; + + // + // change object text + result = ObjectSetString(chartID, name, OBJPROP_TEXT, text); + + // + return result; +} + +// +// Delete the button ... +bool ButtonDelete( + const long chartID = 0, // chart's ID + const string name = "Button" // button name +) +{ + // + bool result = false; + + // + // delete the button + result = ObjectDelete(chartID, name); + + // + return result; +} + +// +// Chart Style Drawers ... + +// +// Apply Styles On Chart ... +void ApplyChartStyle( + long mChartId = -1, // chart's ID + ENUM_CHART_MODE mMode = CHART_CANDLES, // chart's mMode + bool mShowBidLine = true, // show bid line + bool mShowAskLine = true, // show ask line + bool mShowGrid = false, // show grids on chart + bool mShowVolumes = false, // show volumes + bool mShowTradeLevels = true, // Displaying trade levels in the chart (levels of open positions, Stop Loss, Take Profit and pending orders) + bool mAutoScroll = true, // chart autoscroll + bool mQuickNavigation = true, // chart quick navigation state + color mForeGroundColor = clrWhite, // chart's foreground color + color mBackGroundColor = clrBlack, // chart's background color + color mUpColor = clrGreen, // Up Color + color mDownColor = clrRed, // Down Color + color mBullishColor = clrGreen, // Bullish color + color mBearishColor = clrRed, // Bearish color + color mGridColor = clrGray, // grid color + color mBidLineColor = clrGray, // bid line color + color mAskLineColor = clrRed, // ask line color + color mLineColor = clrLime, // line mMode and doji candlestick color + color mStopColor = clrGold, // Color of stop order levels (Stop Loss and Take Profit) + color mVolumesColor = clrGreen // volumes color +) +{ + // + // Validate Args ... + if (mChartId == -1) + { + mChartId = 0; + } + + // + ChartSetInteger(mChartId, CHART_MODE, mMode); + ChartSetInteger(mChartId, CHART_SHOW_BID_LINE, mShowBidLine); + ChartSetInteger(mChartId, CHART_SHOW_ASK_LINE, mShowAskLine); + ChartSetInteger(mChartId, CHART_SHOW_GRID, mShowGrid); + ChartSetInteger(mChartId, CHART_SHOW_VOLUMES, mShowVolumes); + ChartSetInteger(mChartId, CHART_SHOW_TRADE_LEVELS, mShowTradeLevels); + ChartSetInteger(mChartId, CHART_AUTOSCROLL, mAutoScroll); + ChartSetInteger(mChartId, CHART_QUICK_NAVIGATION, mQuickNavigation); + ChartSetInteger(mChartId, CHART_COLOR_FOREGROUND, mForeGroundColor); + ChartSetInteger(mChartId, CHART_COLOR_BACKGROUND, mBackGroundColor); + ChartSetInteger(mChartId, CHART_COLOR_CHART_UP, mUpColor); + ChartSetInteger(mChartId, CHART_COLOR_CHART_DOWN, mDownColor); + ChartSetInteger(mChartId, CHART_COLOR_CANDLE_BULL, mBullishColor); + ChartSetInteger(mChartId, CHART_COLOR_CANDLE_BEAR, mBearishColor); + ChartSetInteger(mChartId, CHART_COLOR_GRID, mGridColor); + ChartSetInteger(mChartId, CHART_COLOR_BID, mBidLineColor); + ChartSetInteger(mChartId, CHART_COLOR_ASK, mAskLineColor); + ChartSetInteger(mChartId, CHART_COLOR_STOP_LEVEL, mStopColor); + ChartSetInteger(mChartId, CHART_COLOR_CHART_LINE, mLineColor); + ChartSetInteger(mChartId, CHART_COLOR_VOLUME, mVolumesColor); +} + +// +// Tools ... + +// +// Retrieve Chart Size ... +bool GetChartSize( + XSize &result, // Holds Result ... + long chartID = 0 // Specified Chart ID ... +) +{ + // + bool mResult = false; + + // + mResult = ChartGetInteger(0, CHART_WIDTH_IN_PIXELS, 0, result.width); + if (!mResult) + { + return mResult; + } + + // + mResult = ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS, 0, result.height); + + // + return mResult; +} diff --git a/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.http.lib.mq5 b/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.http.lib.mq5 new file mode 100644 index 0000000..97f7ac0 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.http.lib.mq5 @@ -0,0 +1,177 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Http Library +// ------------------------------------------ +// Name: XHttp +// Description: provide http communication +// abilities ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// START Model Definition ... +// +enum X_HTTP_METHOD +{ + X_HTTP_GET, + X_HTTP_POST +}; +// +// END Model Definition ... +// + +// +// START Inputs ... +// +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// START Provided Functions ... +// +// +// Initial Library if required ... +bool OnInInitHttpLibrary() +{ + return false; +} + +// +// DeInitial Library if required ... +void OnDeinitHttpLibrary() +{ +} + +// +// Convert enum to String ... +string ToString(X_HTTP_METHOD method) +{ + // + string result = ""; + + // + switch (method) + { + // + case X_HTTP_GET: + result = "GET"; + break; + + // + case X_HTTP_POST: + result = "POST"; + break; + } + + // + return result; +} + +// +// Send Global Request ... +int SendRequest( + X_HTTP_METHOD method, // Httm Request Method + const string url, // Server Address + const string headers, // Headers providing + const char &payload[], // the Data which needs to Send + char &response[], // Response of request + string responseHeaders, // Response Headers + int timeout = 500 // Timeout for response default is 500 +) +{ + // + int result = -1; + + // + string strMethod = ToString(method); + if (StringLen(strMethod) == 0) { + return result; + } + + // + result = WebRequest( + strMethod, + url, + headers, + timeout, + payload, + response, + responseHeaders + ); + + // + return result; +} + +// +// Get Request ... +int GetRequest( + const string url, // Server Address + const string headers, // Headers providing + const char &payload[], // the Data which needs to Send + char &response[], // Response of request + string responseHeaders, // Response Headers + int timeout = 500 // Timeout for response default is 500 +) { + // + int result = SendRequest( + X_HTTP_GET, + url, + headers, + payload, + response, + responseHeaders, + timeout + ); + + // + return result; +} + +// +// Post Request ... +int PostRequest( + const string url, // Server Address + const string headers, // Headers providing + const char &payload[], // the Data which needs to Send + char &response[], // Response of request + string responseHeaders, // Response Headers + int timeout = 500 // Timeout for response default is 500 +) { + // + int result = SendRequest( + X_HTTP_POST, + url, + headers, + payload, + response, + responseHeaders, + timeout + ); + + // + return result; +} +// +// END Provided Functions ... +// diff --git a/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.log.lib.mq5 b/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.log.lib.mq5 new file mode 100644 index 0000000..ad34125 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.log.lib.mq5 @@ -0,0 +1,1084 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Logger Library +// --------------------------------------- +// Name: XLogger +// Description: provides Logging abilities ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// START Inputs ... +// +// input group "Logging"; +// input bool enableLogging = true; // Enable Logging +bool enableLogging = true; // Enable Logging +// +// END Inputs ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// +string logTag = "X-Logger"; // LogTag +// +// END Global Definitions: Variables, Properties and etc ... +// + +// +// START Provided Functions ... +// +// +// Logging a Message ... +void LogMessage(string message) +{ + // + if (!enableLogging) + { + return; + } + + // + Print(logTag, " > ", message); +} +void LogMessage(string tag, string message) +{ + // + if (!enableLogging) + { + return; + } + + // + Print(tag, " > ", message); +} + +// +void LogEmptyLine() +{ + LogMessage(" "); +} + +// +void LogError( + int error = -1 // Specific Error +) { + // + if (error <= -1) { + error = GetLastError(); + } + + // + string errorMsg = GetErrorDescription(error); + + // + LogMessage("Error: " + errorMsg); +} + +// +// Logging an Array ... +void LogArray(int &array[]) +{ + // + if (!enableLogging) + { + return; + } + + // + Print(logTag, ">"); + ArrayPrint(array); +} +void LogArray(double &array[]) +{ + // + if (!enableLogging) + { + return; + } + + // + Print(logTag, ">"); + ArrayPrint(array); +} +void LogArray(string &array[]) +{ + // + if (!enableLogging) + { + return; + } + + // + Print(logTag, ">"); + ArrayPrint(array); +} +// +// END Provided Functions ... +// + + +// +// Error Descriptions Functions ... +// + +// +// Retrieve Specified Error Code Description ... +string GetErrorDescription(int err_code) +{ + // + string result = ""; + + // + switch (err_code) + { + // + //--- Constant Description + + // + case ERR_SUCCESS: + result = "The operation completed successfully"; + break; + + // + case ERR_INTERNAL_ERROR: + result = "Unexpected internal error"; + break; + + // + case ERR_WRONG_INTERNAL_PARAMETER: + result = "Wrong parameter in the inner call of the client terminal function"; + break; + + // + case ERR_INVALID_PARAMETER: + result = "Wrong parameter when calling the system function"; + break; + + // + case ERR_NOT_ENOUGH_MEMORY: + result = "Not enough memory to perform the system function"; + break; + + // + case ERR_STRUCT_WITHOBJECTS_ORCLASS: + result = "The structure contains objects of strings and/or dynamic arrays and/or structure of such objects and/or classes"; + break; + + // + case ERR_INVALID_ARRAY: + result = "Array of a wrong type, wrong size, or a damaged object of a dynamic array"; + break; + + // + case ERR_ARRAY_RESIZE_ERROR: + result = "Not enough memory for the relocation of an array, or an attempt to change the size of a static array"; + break; + + // + case ERR_STRING_RESIZE_ERROR: + result = "Not enough memory for the relocation of string"; + break; + + // + case ERR_NOTINITIALIZED_STRING: + result = "Not initialized string"; + break; + + // + case ERR_INVALID_DATETIME: + result = "Invalid date and/or time"; + break; + + // + case ERR_ARRAY_BAD_SIZE: + result = "Requested array size exceeds 2 GB"; + break; + + // + case ERR_INVALID_POINTER: + result = "Wrong pointer"; + break; + + // + case ERR_INVALID_POINTER_TYPE: + result = "Wrong type of pointer"; + break; + + // + case ERR_FUNCTION_NOT_ALLOWED: + result = "System function is not allowed to call"; + break; + + // + //--- Charts + + // + case ERR_CHART_WRONG_ID: + result = "Wrong chart ID"; + break; + + // + case ERR_CHART_NO_REPLY: + result = "Chart does not respond"; + break; + + // + case ERR_CHART_NOT_FOUND: + result = "Chart not found"; + break; + + // + case ERR_CHART_NO_EXPERT: + result = "No Expert Advisor in the chart that could handle the event"; + break; + + // + case ERR_CHART_CANNOT_OPEN: + result = "Chart opening error"; + break; + + // + case ERR_CHART_CANNOT_CHANGE: + result = "Failed to change chart symbol and period"; + break; + + // + case ERR_CHART_CANNOT_CREATE_TIMER: + result = "Failed to create timer"; + break; + + // + case ERR_CHART_WRONG_PROPERTY: + result = "Wrong chart property ID"; + break; + + // + case ERR_CHART_SCREENSHOT_FAILED: + result = "Error creating screenshots"; + break; + + // + case ERR_CHART_NAVIGATE_FAILED: + result = "Error navigating through chart"; + break; + + // + case ERR_CHART_TEMPLATE_FAILED: + result = "Error applying template"; + break; + + // + case ERR_CHART_WINDOW_NOT_FOUND: + result = "Subwindow containing the indicator was not found"; + break; + + // + case ERR_CHART_INDICATOR_CANNOT_ADD: + result = "Error adding an indicator to chart"; + break; + + // + case ERR_CHART_INDICATOR_CANNOT_DEL: + result = "Error deleting an indicator from the chart"; + break; + + // + case ERR_CHART_INDICATOR_NOT_FOUND: + result = "Indicator not found on the specified chart"; + break; + + // + //--- Graphical Objects + case ERR_OBJECT_ERROR: + result = "Error working with a graphical object"; + break; + + // + case ERR_OBJECT_NOT_FOUND: + result = "Graphical object was not found"; + break; + + // + case ERR_OBJECT_WRONG_PROPERTY: + result = "Wrong ID of a graphical object property"; + break; + + // + case ERR_OBJECT_GETDATE_FAILED: + result = "Unable to get date corresponding to the value"; + break; + + // + case ERR_OBJECT_GETVALUE_FAILED: + result = "Unable to get value corresponding to the date"; + break; + + // + //--- MarketInfo + + // + case ERR_MARKET_UNKNOWN_SYMBOL: + result = "Unknown symbol"; + break; + + // + case ERR_MARKET_NOT_SELECTED: + result = "Symbol is not selected in MarketWatch"; + break; + + // + case ERR_MARKET_WRONG_PROPERTY: + result = "Wrong identifier of a symbol property"; + break; + + // + case ERR_MARKET_LASTTIME_UNKNOWN: + result = "Time of the last tick is not known (no ticks)"; + break; + + // + case ERR_MARKET_SELECT_ERROR: + result = "Error adding or deleting a symbol in MarketWatch"; + break; + + // + //--- History Access + + // + case ERR_HISTORY_NOT_FOUND: + result = "Requested history not found"; + break; + + // + case ERR_HISTORY_WRONG_PROPERTY: + result = "Wrong ID of the history property"; + break; + + // + //--- Global_Variables + + // + case ERR_GLOBALVARIABLE_NOT_FOUND: + result = "Global variable of the client terminal is not found"; + break; + + // + case ERR_GLOBALVARIABLE_EXISTS: + result = "Global variable of the client terminal with the same name already exists"; + break; + + // + case ERR_MAIL_SEND_FAILED: + result = "Email sending failed"; + break; + + // + case ERR_PLAY_SOUND_FAILED: + result = "Sound playing failed"; + break; + + // + case ERR_MQL5_WRONG_PROPERTY: + result = "Wrong identifier of the program property"; + break; + + // + case ERR_TERMINAL_WRONG_PROPERTY: + result = "Wrong identifier of the terminal property"; + break; + + // + case ERR_FTP_SEND_FAILED: + result = "File sending via ftp failed"; + break; + + // + case ERR_NOTIFICATION_SEND_FAILED: + result = "Error in sending notification"; + break; + + // + //--- Custom Indicator Buffers + + // + case ERR_BUFFERS_NO_MEMORY: + result = "Not enough memory for the distribution of indicator buffers"; + break; + + // + case ERR_BUFFERS_WRONG_INDEX: + result = "Wrong indicator buffer index"; + break; + + // + //--- Custom Indicator Properties + + // + case ERR_CUSTOM_WRONG_PROPERTY: + result = "Wrong ID of the custom indicator property"; + break; + + // + //--- Account + + // + case ERR_ACCOUNT_WRONG_PROPERTY: + result = "Wrong account property ID"; + break; + + // + case ERR_TRADE_WRONG_PROPERTY: + result = "Wrong trade property ID"; + break; + + // + case ERR_TRADE_DISABLED: + result = "Trading by Expert Advisors prohibited"; + break; + + // + case ERR_TRADE_POSITION_NOT_FOUND: + result = "Position not found"; + break; + + // + case ERR_TRADE_ORDER_NOT_FOUND: + result = "Order not found"; + break; + + // + case ERR_TRADE_DEAL_NOT_FOUND: + result = "Deal not found"; + break; + + // + case ERR_TRADE_SEND_FAILED: + result = "Trade request sending failed"; + break; + + // + //--- Indicators + + // + case ERR_INDICATOR_UNKNOWN_SYMBOL: + result = "Unknown symbol"; + break; + + // + case ERR_INDICATOR_CANNOT_CREATE: + result = "Indicator cannot be created"; + break; + + // + case ERR_INDICATOR_NO_MEMORY: + result = "Not enough memory to add the indicator"; + break; + + // + case ERR_INDICATOR_CANNOT_APPLY: + result = "The indicator cannot be applied to another indicator"; + break; + + // + case ERR_INDICATOR_CANNOT_ADD: + result = "Error applying an indicator to chart"; + break; + + // + case ERR_INDICATOR_DATA_NOT_FOUND: + result = "Requested data not found"; + break; + + // + case ERR_INDICATOR_WRONG_HANDLE: + result = "Wrong indicator handle"; + break; + + // + case ERR_INDICATOR_WRONG_PARAMETERS: + result = "Wrong number of parameters when creating an indicator"; + break; + + // + case ERR_INDICATOR_PARAMETERS_MISSING: + result = "No parameters when creating an indicator"; + break; + + // + case ERR_INDICATOR_CUSTOM_NAME: + result = "The first parameter in the array must be the name of the custom indicator"; + break; + + // + case ERR_INDICATOR_PARAMETER_TYPE: + result = "Invalid parameter type in the array when creating an indicator"; + break; + + // + case ERR_INDICATOR_WRONG_INDEX: + result = "Wrong index of the requested indicator buffer"; + break; + + // + //--- Depth of Market + + // + case ERR_BOOKS_CANNOT_ADD: + result = "Depth Of Market can not be added"; + break; + + // + case ERR_BOOKS_CANNOT_DELETE: + result = "Depth Of Market can not be removed"; + break; + + // + case ERR_BOOKS_CANNOT_GET: + result = "The data from Depth Of Market can not be obtained"; + break; + + // + case ERR_BOOKS_CANNOT_SUBSCRIBE: + result = "Error in subscribing to receive new data from Depth Of Market"; + break; + + // + //--- File Operations + + // + case ERR_TOO_MANY_FILES: + result = "More than 64 files cannot be opened at the same time"; + break; + + // + case ERR_WRONG_FILENAME: + result = "Invalid file name"; + break; + + // + case ERR_TOO_LONG_FILENAME: + result = "Too long file name"; + break; + + // + case ERR_CANNOT_OPEN_FILE: + result = "File opening error"; + break; + + // + case ERR_FILE_CACHEBUFFER_ERROR: + result = "Not enough memory for cache to read"; + break; + + // + case ERR_CANNOT_DELETE_FILE: + result = "File deleting error"; + break; + + // + case ERR_INVALID_FILEHANDLE: + result = "A file with this handle was closed, or was not opening at all"; + break; + + // + case ERR_WRONG_FILEHANDLE: + result = "Wrong file handle"; + break; + + // + case ERR_FILE_NOTTOWRITE: + result = "The file must be opened for writing"; + break; + + // + case ERR_FILE_NOTTOREAD: + result = "The file must be opened for reading"; + break; + + // + case ERR_FILE_NOTBIN: + result = "The file must be opened as a binary one"; + break; + + // + case ERR_FILE_NOTTXT: + result = "The file must be opened as a text"; + break; + + // + case ERR_FILE_NOTTXTORCSV: + result = "The file must be opened as a text or CSV"; + break; + + // + case ERR_FILE_NOTCSV: + result = "The file must be opened as CSV"; + break; + + // + case ERR_FILE_READERROR: + result = "File reading error"; + break; + + // + case ERR_FILE_BINSTRINGSIZE: + result = "String size must be specified, because the file is opened as binary"; + break; + + // + case ERR_INCOMPATIBLE_FILE: + result = "A text file must be for string arrays, for other arrays - binary"; + break; + + // + case ERR_FILE_IS_DIRECTORY: + result = "This is not a file, this is a directory"; + break; + + // + case ERR_FILE_NOT_EXIST: + result = "File does not exist"; + break; + + // + case ERR_FILE_CANNOT_REWRITE: + result = "File can not be rewritten"; + break; + + // + case ERR_WRONG_DIRECTORYNAME: + result = "Wrong directory name"; + break; + + // + case ERR_DIRECTORY_NOT_EXIST: + result = "Directory does not exist"; + break; + + // + case ERR_FILE_ISNOT_DIRECTORY: + result = "This is a file, not a directory"; + break; + + // + case ERR_CANNOT_DELETE_DIRECTORY: + result = "The directory cannot be removed"; + break; + + // + case ERR_CANNOT_CLEAN_DIRECTORY: + result = "Failed to clear the directory (probably one or more files are blocked and removal operation failed)"; + break; + + // + case ERR_FILE_WRITEERROR: + result = "Failed to write a resource to a file"; + break; + + // + //--- String Casting + + // + case ERR_NO_STRING_DATE: + result = "No date in the string"; + break; + + // + case ERR_WRONG_STRING_DATE: + result = "Wrong date in the string"; + break; + + // + case ERR_WRONG_STRING_TIME: + result = "Wrong time in the string"; + break; + + // + case ERR_STRING_TIME_ERROR: + result = "Error converting string to date"; + break; + + // + case ERR_STRING_OUT_OF_MEMORY: + result = "Not enough memory for the string"; + break; + + // + case ERR_STRING_SMALL_LEN: + result = "The string length is less than expected"; + break; + + // + case ERR_STRING_TOO_BIGNUMBER: + result = "Too large number, more than ULONG_MAX"; + break; + + // + case ERR_WRONG_FORMATSTRING: + result = "Invalid format string"; + break; + + // + case ERR_TOO_MANY_FORMATTERS: + result = "Amount of format specifiers more than the parameters"; + break; + + // + case ERR_TOO_MANY_PARAMETERS: + result = "Amount of parameters more than the format specifiers"; + break; + + // + case ERR_WRONG_STRING_PARAMETER: + result = "Damaged parameter of string type"; + break; + + // + case ERR_STRINGPOS_OUTOFRANGE: + result = "Position outside the string"; + break; + + // + case ERR_STRING_ZEROADDED: + result = "0 added to the string end, a useless operation"; + break; + + // + case ERR_STRING_UNKNOWNTYPE: + result = "Unknown data type when converting to a string"; + break; + + // + case ERR_WRONG_STRING_OBJECT: + result = "Damaged string object"; + break; + + // + //--- Operations with Arrays + + // + case ERR_INCOMPATIBLE_ARRAYS: + result = "Copying incompatible arrays. String array can be copied only to a string array, and a numeric array - in numeric array only"; + break; + + // + case ERR_SMALL_ASSERIES_ARRAY: + result = "The receiving array is declared as AS_SERIES, and it is of insufficient size"; + break; + + // + case ERR_SMALL_ARRAY: + result = "Too small array, the starting position is outside the array"; + break; + + // + case ERR_ZEROSIZE_ARRAY: + result = "An array of zero length"; + break; + + // + case ERR_NUMBER_ARRAYS_ONLY: + result = "Must be a numeric array"; + break; + + // + case ERR_ONEDIM_ARRAYS_ONLY: + result = "Must be a one-dimensional array"; + break; + + // + case ERR_SERIES_ARRAY: + result = "Timeseries cannot be used"; + break; + + // + case ERR_DOUBLE_ARRAY_ONLY: + result = "Must be an array of type double"; + break; + + // + case ERR_FLOAT_ARRAY_ONLY: + result = "Must be an array of type float"; + break; + + // + case ERR_LONG_ARRAY_ONLY: + result = "Must be an array of type long"; + break; + + // + case ERR_INT_ARRAY_ONLY: + result = "Must be an array of type int"; + break; + + // + case ERR_SHORT_ARRAY_ONLY: + result = "Must be an array of type short"; + break; + + // + case ERR_CHAR_ARRAY_ONLY: + result = "Must be an array of type char"; + break; + + // + //--- Operations with OpenCL + + // + case ERR_OPENCL_NOT_SUPPORTED: + result = "OpenCL functions are not supported on this computer"; + break; + + // + case ERR_OPENCL_INTERNAL: + result = "Internal error occurred when running OpenCL"; + break; + + // + case ERR_OPENCL_INVALID_HANDLE: + result = "Invalid OpenCL handle"; + break; + + // + case ERR_OPENCL_CONTEXT_CREATE: + result = "Error creating the OpenCL context"; + break; + + // + case ERR_OPENCL_QUEUE_CREATE: + result = "Failed to create a run queue in OpenCL"; + break; + + // + case ERR_OPENCL_PROGRAM_CREATE: + result = "Error occurred when compiling an OpenCL program"; + break; + + // + case ERR_OPENCL_TOO_LONG_KERNEL_NAME: + result = "Too long kernel name (OpenCL kernel)"; + break; + + // + case ERR_OPENCL_KERNEL_CREATE: + result = "Error creating an OpenCL kernel"; + break; + + // + case ERR_OPENCL_SET_KERNEL_PARAMETER: + result = "Error occurred when setting parameters for the OpenCL kernel"; + break; + + // + case ERR_OPENCL_EXECUTE: + result = "OpenCL program runtime error"; + break; + + // + case ERR_OPENCL_WRONG_BUFFER_SIZE: + result = "Invalid size of the OpenCL buffer"; + break; + + // + case ERR_OPENCL_WRONG_BUFFER_OFFSET: + result = "Invalid offset in the OpenCL buffer"; + break; + + // + case ERR_OPENCL_BUFFER_CREATE: + result = "Failed to create and OpenCL buffer"; + break; + + // + //--- User-Defined Errors + default: + result = "UNKNOWN Erro ..."; + break; + } + + // + return result; +} + +// +// Retrieve Specified Error Code Description ... +string GetTradeServerReturnCodeDescription(int return_code) +{ + // + string result = ""; + + // + switch (return_code) + { + // + case TRADE_RETCODE_REQUOTE: + result = "Requote"; + break; + + // + case TRADE_RETCODE_REJECT: + result = "Request rejected"; + break; + + // + case TRADE_RETCODE_CANCEL: + result = "Request canceled by trader"; + break; + + // + case TRADE_RETCODE_PLACED: + result = "Order placed"; + break; + + // + case TRADE_RETCODE_DONE: + result = "Request completed"; + break; + + // + case TRADE_RETCODE_DONE_PARTIAL: + result = "Only part of the request was completed"; + break; + + // + case TRADE_RETCODE_ERROR: + result = "Request processing error"; + break; + + // + case TRADE_RETCODE_TIMEOUT: + result = "Request canceled by timeout"; + break; + + // + case TRADE_RETCODE_INVALID: + result = "Invalid request"; + break; + + // + case TRADE_RETCODE_INVALID_VOLUME: + result = "Invalid volume in the request"; + break; + + // + case TRADE_RETCODE_INVALID_PRICE: + result = "Invalid price in the request"; + break; + + // + case TRADE_RETCODE_INVALID_STOPS: + result = "Invalid stops in the request"; + break; + + // + case TRADE_RETCODE_TRADE_DISABLED: + result = "Trade is disabled"; + break; + + // + case TRADE_RETCODE_MARKET_CLOSED: + result = "Market is closed"; + break; + + // + case TRADE_RETCODE_NO_MONEY: + result = "There is not enough money to complete the request"; + break; + + // + case TRADE_RETCODE_PRICE_CHANGED: + result = "Prices changed"; + break; + + // + case TRADE_RETCODE_PRICE_OFF: + result = "There are no quotes to process the request"; + break; + + // + case TRADE_RETCODE_INVALID_EXPIRATION: + result = "Invalid order expiration date in the request"; + break; + + // + case TRADE_RETCODE_ORDER_CHANGED: + result = "Order state changed"; + break; + + // + case TRADE_RETCODE_TOO_MANY_REQUESTS: + result = "Too frequent requests"; + break; + + // + case TRADE_RETCODE_NO_CHANGES: + result = "No changes in request"; + break; + + // + case TRADE_RETCODE_SERVER_DISABLES_AT: + result = "Autotrading disabled by server"; + break; + + // + case TRADE_RETCODE_CLIENT_DISABLES_AT: + result = "Autotrading disabled by client terminal"; + break; + + // + case TRADE_RETCODE_LOCKED: + result = "Request locked for processing"; + break; + + // + case TRADE_RETCODE_FROZEN: + result = "Order or position frozen"; + break; + + // + case TRADE_RETCODE_INVALID_FILL: + result = "Invalid order filling type"; + break; + + // + case TRADE_RETCODE_CONNECTION: + result = "No connection with the trade server"; + break; + + // + case TRADE_RETCODE_ONLY_REAL: + result = "Operation is allowed only for live accounts"; + break; + + // + case TRADE_RETCODE_LIMIT_ORDERS: + result = "The number of pending orders has reached the limit"; + break; + + // + case TRADE_RETCODE_LIMIT_VOLUME: + result = "The volume of orders and positions for the symbol has reached the limit"; + break; + + // + default: + result = "Invalid return code of the trade server"; + break; + } + + // + return result; +} diff --git a/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.xtrade.lib.ex5 b/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.xtrade.lib.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..ec043982c601e8b07b61fb57ad41f46018a8836c GIT binary patch literal 11090 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 literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.xtrade.lib.mq5 b/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.xtrade.lib.mq5 new file mode 100644 index 0000000..dcf66ff --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Libraries/x-saherelm.xtrade.lib.mq5 @@ -0,0 +1,3820 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Seriallize Library +// --------------------------------------- +// Name: XTradeLib +// Description: All models related to Trade ... +// +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// +// +// Global Properties ... +#property library +#property copyright "Copyright 2023, SaherElm IT Center" +#property link "https://www.saherelm.ir" +#property version "1.00" +#property strict + +// +// Imports ... +#include +#include "../Libraries/x-saherelm.common.lib.mq5" +#include "../Classes/x-saherelm.xdata-collector.mq5" + +// +// Definitions ... + +// +// a List of Used Tokens ... + +// +// Common ... +string XIDToken = "ID"; +string XTicketToken = "TK"; +string XModeToken = "MD"; +string XTypeToken = "TY"; +string XPeriodToken = "PR"; +string XProviderToken = "PRV"; +string XProfitToken = "PF"; + +// +string XTPToken = "TP"; +string XSLToken = "SL"; +string XTimeToken = "TM"; +string XEntryToken = "EN"; +string XVolumeToken = "VL"; +string XSymbolToken = "SMBL"; + +// +string XSupportToken = "SP"; +string XEQMSupportToken = "EQM"; + +// +string XActionToken = "A"; + +// +// Available Order Modes ... +enum ENUM_X_ORDER_MODES +{ + X_ORDER_MODE_NOTHING, // Nothing + X_ORDER_MODE_MARKET, // Market Order + X_ORDER_MODE_STOP, // Pending Stop Order + X_ORDER_MODE_LIMIT, // Pending Limit Order + X_ORDER_MODE_STOP_LIMIT, // Pending Stop Limit Order +}; + +// +// Select Positions Type ... +enum ENUM_X_POSITION_SELECT_METHODS +{ + X_POSITION_SELECT_NONE, // None + X_POSITION_SELECT_MAX, // Max + X_POSITION_SELECT_MIN, // Min + X_POSITION_SELECT_BOTH, // Min and Max + X_POSITION_SELECT_ALL, // All +}; + +// +// Signal Execution Result ... +// note that some of them must be handles in +// EA's ... +enum ENUM_X_SIGNAL_EXECUTION_RESULT +{ + // + X_SIGNAL_EXECUTION_UNKNOWN, // Unknown + X_SIGNAL_EXECUTION_SUCCEED, // Succed + X_SIGNAL_EXECUTION_FAILED_SPREAD, // Spread more than Max Allowed + X_SIGNAL_EXECUTION_FAILED_NO_EQUITY, // No Equity for Trade + X_SIGNAL_EXECUTION_FAILED_PRICE_ERROR, // Price Error + X_SIGNAL_EXECUTION_FAILED_MAX_REACHED, // Max Allowed Positions Reached + X_SIGNAL_EXECUTION_FAILED_INVALID_PARAMS, // Invalid Params +}; + +// +// How to Manage Signal TP and SL ... +enum ENUM_X_SIGNAL_MANAGING_ACTIONS +{ + // + X_SIGNAL_USE_NOTHING, // Use 0 index if exists and ignore if not + X_SIGNAL_USE_MAX, // Use Max Value + X_SIGNAL_USE_MIN, // Use Min Value + X_SIGNAL_PARTIAL_CLOSE, // Use Max as Regular but Partial Close at each Step + X_SIGNAL_TRAIL, // Use 0 index as SL and Trail Stop on TP Levels + X_SIGNAL_PARTIAL_TRAIL, // Use 0 index as SL and Trail Stop on TP Levels and also Partial Close on TP Levels +}; + +// +// Structs ... + +// +// Model a Signal ... +struct XSignal +{ + // + // Props ... + + // + ulong positionId; // if Executed this filled ... + double entry; // Exntry or Execution Price ... + double volume; // Position Volume ... + + // + datetime time; // Issue Time ... + + // + ENUM_X_SIGNAL_MANAGING_ACTIONS action; // Signal Managing Action ... + + double tps[]; // a Collection of TP(s) ... + double sls[]; // a Collection of SL(s) ... + + // + string symbol; // Trading Symbol ... + string provider; // Signaller ... + string comment; // Comment ... + + // + ENUM_TIMEFRAMES period; // Trading TimeFrame ... + ENUM_POSITION_TYPE type; // Long (Buy) or Short (Sell) ... + ENUM_X_ORDER_MODES mode; // Execution Mode ... + + // + XSignal supports[]; // a Collecion of Support Signals ... + XOHCLSupRes supportResistances; // Support and Resistances ... + + // + // Constructor ... + XSignal() + { + Clean(); + } + + // + // DO All Calculations and Normalizations ... + bool Normalize() + { + // + bool result = false; + + // + // Normalizations ... + symbol = NormalizeSymbol(symbol); + period = NormalizePeriod(period); + + // + entry = NormalizePrice(entry, symbol); + volume = NormalizeVolume(volume, symbol); + + // + time = NormalizeTime(time); + + // + int slsCount = ArraySize(sls); + if (slsCount > 0) + { + // + for (int i = 0; i < slsCount; i++) + { + sls[i] = NormalizePrice(sls[i], symbol); + } + } + + // + int tpsCount = ArraySize(tps); + if (tpsCount > 0) + { + // + for (int i = 0; i < tpsCount; i++) + { + tps[i] = NormalizePrice(tps[i], symbol); + } + } + + // + result = IsValid(); + + // + return result; + } + + // + bool Prepare( + string mSymbol, // Trading Symbol + string mProvider, // Signal Provider + ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame + ENUM_POSITION_TYPE mType, // Long (Buy) or Short (Sell) + ENUM_X_ORDER_MODES mMode, // Execution Mode + double mEntry, // Entry Price + double mVolume, // Volume + double sl = 0, // Stop Loss + double tp = 0 // Take Profit + ) + { + // + bool result = false; + + // + result = + // + IsValid(mMode) && + IsValid(mSymbol) && + IsValid(mPeriod) && + NotEmpty(mEntry) && + NotEmpty(mVolume) && + IsValid(mProvider) + // + ; + if (!result) + { + return result; + } + + // + if (tp < 0) + { + tp = 0; + } + + // + if (sl < 0) + { + sl = 0; + } + + // + if (tp == 0 && sl == 0) + { + action = X_SIGNAL_USE_NOTHING; + } + + // + type = mType; + mode = mMode; + symbol = mSymbol; + period = mPeriod; + provider = mProvider; + + // + // Normalization Values ... + sl = NormalizePrice(sl, mSymbol); + tp = NormalizePrice(tp, mSymbol); + mEntry = NormalizePrice(mEntry, mSymbol); + mVolume = NormalizeVolume(mVolume, mSymbol); + + // + entry = mEntry; + volume = mVolume; + + // + Add( + sl, + sls + // + ); + + // + Add( + tp, + tps + // + ); + + // + result = Normalize(); + + // + return result; + } + + // + bool PrepareLong( + string mSymbol, // Trading Symbol + string mProvider, // Signal Provider + ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame + ENUM_X_ORDER_MODES mMode, // Execution Mode + double mEntry, // Entry Price + double mVolume, // Volume + double sl = 0, // Stop Loss + double tp = 0 // Take Profit + ) + { + // + return Prepare( + mSymbol, + mProvider, + mPeriod, + POSITION_TYPE_BUY, + mMode, + mEntry, + mVolume, + sl, + tp + // + ); + } + + // + bool PrepareShort( + string mSymbol, // Trading Symbol + string mProvider, // Signal Provider + ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame + ENUM_X_ORDER_MODES mMode, // Execution Mode + double mEntry, // Entry Price + double mVolume, // Volume + double sl = 0, // Stop Loss + double tp = 0 // Take Profit + ) + { + // + return Prepare( + mSymbol, + mProvider, + mPeriod, + POSITION_TYPE_SELL, + mMode, + mEntry, + mVolume, + sl, + tp + // + ); + } + + // + // Market Mode ... + + // + bool PrepareMarketLong( + string mSymbol, // Trading Symbol + string mProvider, // Signal Provider + ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame + double mEntry, // Entry Price + double mVolume, // Volume + double sl = 0, // Stop Loss + double tp = 0 // Take Profit + ) + { + // + return PrepareLong( + mSymbol, + mProvider, + mPeriod, + X_ORDER_MODE_MARKET, + mEntry, + mVolume, + sl, + tp + // + ); + } + + // + bool PrepareMarketShort( + string mSymbol, // Trading Symbol + string mProvider, // Signal Provider + ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame + double mEntry, // Entry Price + double mVolume, // Volume + double sl = 0, // Stop Loss + double tp = 0 // Take Profit + ) + { + // + return PrepareShort( + mSymbol, + mProvider, + mPeriod, + X_ORDER_MODE_MARKET, + mEntry, + mVolume, + sl, + tp + // + ); + } + + // + // Stop Mode ... + + // + bool PrepareStopLong( + string mSymbol, // Trading Symbol + string mProvider, // Signal Provider + ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame + double mEntry, // Entry Price + double mVolume, // Volume + double sl = 0, // Stop Loss + double tp = 0 // Take Profit + ) + { + // + return PrepareLong( + mSymbol, + mProvider, + mPeriod, + X_ORDER_MODE_STOP, + mEntry, + mVolume, + sl, + tp + // + ); + } + + // + bool PrepareStopShort( + string mSymbol, // Trading Symbol + string mProvider, // Signal Provider + ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame + double mEntry, // Entry Price + double mVolume, // Volume + double sl = 0, // Stop Loss + double tp = 0 // Take Profit + ) + { + // + return PrepareShort( + mSymbol, + mProvider, + mPeriod, + X_ORDER_MODE_STOP, + mEntry, + mVolume, + sl, + tp + // + ); + } + + // + // Limit Mode ... + + // + bool PrepareLimitLong( + string mSymbol, // Trading Symbol + string mProvider, // Signal Provider + ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame + double mEntry, // Entry Price + double mVolume, // Volume + double sl = 0, // Stop Loss + double tp = 0 // Take Profit + ) + { + // + return PrepareLong( + mSymbol, + mProvider, + mPeriod, + X_ORDER_MODE_LIMIT, + mEntry, + mVolume, + sl, + tp + // + ); + } + + // + bool PrepareLimitShort( + string mSymbol, // Trading Symbol + string mProvider, // Signal Provider + ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame + double mEntry, // Entry Price + double mVolume, // Volume + double sl = 0, // Stop Loss + double tp = 0 // Take Profit + ) + { + // + return PrepareShort( + mSymbol, + mProvider, + mPeriod, + X_ORDER_MODE_LIMIT, + mEntry, + mVolume, + sl, + tp + // + ); + } + + // + // here we Can Modify TP and SL and also Action ... + bool Modify( + ENUM_X_SIGNAL_MANAGING_ACTIONS mAction, + double &mTps[], + double &mSls[] + // + ) + { + // + bool result = false; + + // + result = IsValid(); + if (!result) + { + return result; + } + + // + // Only Position Manager works on Market Execution Positions ... + if (mAction != X_SIGNAL_USE_NOTHING && + mode != X_ORDER_MODE_MARKET) + { + return result; + } + + // + int mTpsCount = ArraySize(mTps); + int mSlsCount = ArraySize(mSls); + + // + if (mAction != X_SIGNAL_USE_NOTHING) + { + // + if (mAction == X_SIGNAL_USE_MAX || + mAction == X_SIGNAL_USE_MIN || + mAction == X_SIGNAL_PARTIAL_TRAIL) + { + result = mTpsCount > 0 || mSlsCount > 0; + } + else + { + result = mTpsCount > 0 && mSlsCount > 0; + } + } + + // + if (result) + { + // + double defaultValue = 0; + + // + Copy( + mTps, + tps + // + ); + if (ArraySize(tps) <= 0) + { + // + Add( + defaultValue, + tps + // + ); + } + + // + Copy( + mSls, + sls + // + ); + if (ArraySize(sls) <= 0) + { + // + Add( + defaultValue, + sls + // + ); + } + + // + action = mAction; + + // + result = IsValid(); + } + + // + return result; + } + + // + // Tools ... + + // + // Cleanup ... + void Clean() + { + // + entry = 0; + volume = 0; + positionId = 0; + + // + time = NULL; + type = NULL; + mode = NULL; + symbol = NULL; + period = NULL; + comment = NULL; + provider = NULL; + + // + Clean(tps); + Clean(sls); + Clean(supports); + supportResistances.Clean(); + } + + // + // Validate ... + bool IsValid() + { + // + bool result = false; + + // + result = + // + IsValid(period) && + IsValid(symbol) && + NotEmpty(volume) && + NotEmpty(entry) && + (ArraySize(tps) > 0 || + ArraySize(sls) > 0) + // + ; + + // + if (!result) + { + return result; + } + + // + // Validate Actions ... + + // + // Only Position Manager works on Market Execution Positions ... + result = + // + !(action != X_SIGNAL_USE_NOTHING && + mode != X_ORDER_MODE_MARKET) + // + ; + if (!result) + { + return result; + } + + // + int tpsCount = ArraySize(tps); + int slsCount = ArraySize(sls); + + // + if (action != X_SIGNAL_USE_NOTHING) + { + // + if (action == X_SIGNAL_USE_MAX || + action == X_SIGNAL_USE_MIN || + action == X_SIGNAL_PARTIAL_TRAIL) + { + result = tpsCount > 0 || slsCount > 0; + } + else + { + result = tpsCount > 0 && slsCount > 0; + } + } + + // + return result; + } + + // + // Check Signal Executed or not ... + bool IsExecuted() + { + // + bool result = false; + + // + result = + // + IsValid() && + NotEmpty(positionId) + // + ; + + // + return result; + } + + // + // Generate Comment for Signal ... + string GenerateComment() + { + // + string result = NULL; + + // + if (!IsValid()) + { + return result; + } + + // + if (IsValid(provider)) + { + // + // Generate Provider Tag ... + result += GenerateProviderTag(provider); + } + + // + if (IsValid(period)) + { + // + // Generate Period Tag ... + result += GeneratePeriodTag(period); + } + + // + return result; + } + + // + // Check this instance is Same os Given instance or not ... + bool IsSameAs( + const XSignal &value // instance for Compare + ) + { + // + bool result = false; + + // + result = + // + type == value.type && + mode == value.mode && + entry == value.entry && + volume == value.volume && + symbol == value.symbol && + provider == value.provider && + positionId == value.positionId && + ArraySize(sls) == ArraySize(value.sls) && + ArraySize(tps) == ArraySize(value.tps) + // + ; + + // + return result; + } + + // + // Find index in a Collection ... + int FindIndex( + const XSignal &values[] // Collection to Find + ) + { + // + return FindIndex( + this, + values + // + ); + } + + // + // Check Items Passed Specific Filters or not ... + bool IsFiltersPassed( + string mSymbol = NULL, // Trading Symbol + string mProvider = NULL, // Signal Provider + ENUM_TIMEFRAMES mPeriod = NULL, // Trading Timeframe + ENUM_POSITION_TYPE mType = NULL, // Long (Buy), Short (Sell) + ENUM_X_ORDER_MODES mMode = NULL // Execution Mode + ) + { + // + bool result = false; + + // + result = + // + // Symbol Filter ... + IsSymbolFilterPassed( + mSymbol, + this + // + ) + // + && + // + // Provider Filter ... + IsProviderFilterPassed( + mProvider, + this + // + ) + // + && + // + // Period Filter ... + IsPeriodFilterPassed( + mPeriod, + this + // + ) + // + && + // + // Type Filter ... + IsTypeFilterPassed( + mType, + this + // + ) + // + && + // + // Mode Filter ... + IsModeFilterPassed( + mMode, + this + // + ) + // + ; + + // + return result; + } + + // + string GetToken() + { + return GetToken(this); + } + + // + // To String Representation ... + string ToString() + { + // + string result = NULL; + + // + if (!IsValid()) + { + return result; + } + + // + // For Modeling a Signal we Only Used: + // - Period; + // - Provider; + // - Type; + // - Mode; + // - Symbol; + // - PositionID; + // - Entry; + // - Volume; + // - TPS; + // - SLS; + // - Issue Time; + + // + int iPeriodInt = (int)period; + + // + string periodStr = Surround(XPeriodToken, iPeriodInt); + string providerStr = Surround(XProviderToken, provider); + string typeStr = Surround(XTypeToken, type); + string modeStr = Surround(XModeToken, mode); + string SymbolStr = Surround(XSymbolToken, symbol); + string positionIdStr = Surround(XIDToken, positionId); + string entryStr = Surround(XEntryToken, entry); + string volumeStr = Surround(XVolumeToken, volume); + string timeStr = Surround(XTimeToken, time); + + // + string actionStr = Surround(XActionToken, action); + + // + // TP ... + string tpsContentStr = ToString(tps); + string tpsStr = Surround(XTPToken, tpsContentStr); + + // + // SL ... + string slsContentStr = ToString(sls); + string slsStr = Surround(XSLToken, slsContentStr); + + // + result = + // + GetToken() + + "[" + + // + periodStr + + providerStr + + typeStr + + modeStr + + SymbolStr + + positionIdStr + + entryStr + + volumeStr + + actionStr + + tpsStr + + slsStr + + timeStr + + // + "]" + // + ; + + // + return result; + } + + // + // Parse String Model and Fill Available + // Items ... + bool Parse(string value) + { + // + bool result = false; + + // + Clean(); + + // + if (!IsValid(value)) + { + return false; + } + + // + // For Modeling a Signal we Only Used: + // - Period; + // - Provider; + // - Type; + // - Mode; + // - Symbol; + // - PositionID; + // - Entry; + // - Volume; + // - TPS; + // - SLS; + // - Issue Time; + + // + entry = ParseDoubleSurrounded(value, XEntryToken); + volume = ParseDoubleSurrounded(value, XVolumeToken); + positionId = ParseLongSurrounded(value, XIDToken); + + // + time = ParseTimeSurrounded(value, XTimeToken); + symbol = ParseStringSurrounded(value, XSymbolToken); + provider = ParseStringSurrounded(value, XProviderToken); + type = ((ENUM_POSITION_TYPE)ParseIntSurrounded(value, XTypeToken)); + mode = ((ENUM_X_ORDER_MODES)ParseIntSurrounded(value, XModeToken)); + period = ((ENUM_TIMEFRAMES)ParseIntSurrounded(value, XPeriodToken)); + + // + action = ((ENUM_X_SIGNAL_MANAGING_ACTIONS)ParseIntSurrounded(value, XActionToken)); + + // + // TPS ... + ParseDoubleArraySurrounded( + tps, + value, + XTPToken + // + ); + + // + // SLS ... + ParseDoubleArraySurrounded( + sls, + value, + XSLToken + // + ); + + // + // Validate ... + result = IsValid(); + ; + + // + return result; + } + + // + // Select Regular SL ... + bool RegularSL(double &sl) + { + // + bool result = false; + + // + sl = 0; + int slsCount = ArraySize(sls); + + // + result = IsValid() && slsCount > 0; + if (!result) + { + return result; + } + + // + if ( + action == X_SIGNAL_TRAIL || + action == X_SIGNAL_USE_NOTHING || + action == X_SIGNAL_PARTIAL_TRAIL) + { + sl = sls[0]; + } + else if (action == X_SIGNAL_USE_MAX || + action == X_SIGNAL_PARTIAL_CLOSE) + { + sl = GetMin(sls); + } + else if (action == X_SIGNAL_USE_MIN) + { + sl = GetMax(sls); + } + + // + return result; + } + + // + // Select Regular TP ... + bool RegularTP(double &tp) + { + // + bool result = false; + + // + tp = 0; + int tpsCount = ArraySize(tps); + + // + result = IsValid() && tpsCount > 0; + if (!result) + { + return result; + } + + // + if ( + action == X_SIGNAL_TRAIL || + action == X_SIGNAL_USE_NOTHING || + action == X_SIGNAL_PARTIAL_TRAIL) + { + tp = tps[0]; + } + else if (action == X_SIGNAL_USE_MAX || + action == X_SIGNAL_PARTIAL_CLOSE) + { + tp = GetMax(tps); + } + else if (action == X_SIGNAL_USE_MIN) + { + tp = GetMin(tps); + } + + // + return result; + } + + // + // Retrieve Entry Price ... + double GetEntry() + { + // + double result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + result = GetEntry( + symbol, + type + // + ); + + // + return result; + } + + // + // Retrieve Exit ... + double GetExit() + { + // + double result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + result = GetExit( + symbol, + type + // + ); + + // + return result; + } + + // + // Get Spread by Point ... + double GetSpread() + { + // + double result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + result = PriceToPoint(GetSpread(symbol)); + + // + return result; + } +}; + +// +// Model an Open Position ... +struct XPosition +{ + // + // Props ... + + // + // Magic Number ... + ulong magic; + + // + // Ticket ID ... + ulong ticket; + + // + // Tradinng Symbol ... + string symbol; + + // + // Trading Period ... + ENUM_TIMEFRAMES period; + + // + // Position Type ... + ENUM_POSITION_TYPE type; + + // + // Take Profit ... + double tp; + + // + // Stop Loss ... + double sl; + + // + // Position Current Profit ... + double profit; + + // + // Position Open Price ... + double entry; + + // + // Current Symbol Price ... + double price; + + // + // Position Swap ... + double swap; + + // + // Position Commission ... + double commission; + + // + // Volume ... + double volume; + + // + // Position Open Time ... + datetime openAt; + + // + // Sifnal Provider ... + string provider; + + // + // Position Comment ... + string comment; + + // + // Constructor ... + XPosition() + { + Clean(); + } + + // + // Initializers ... + + bool ByIndex(int index) + { + // + bool result = false; + + // + static CPositionInfo mPositionInfo; + + // + result = mPositionInfo.SelectByIndex(index); + if (!result) + { + return result; + } + + // + ulong mTicket = mPositionInfo.Ticket(); + + // + result = ByTicket(mTicket); + + // + return result; + } + + bool ByTicket(ulong mTicket) + { + // + bool result = false; + + // + static CPositionInfo mPositionInfo; + + // + result = mPositionInfo.SelectByTicket(mTicket); + if (!result) + { + return result; + } + + // + swap = mPositionInfo.Swap(); + magic = mPositionInfo.Magic(); + openAt = mPositionInfo.Time(); + sl = mPositionInfo.StopLoss(); + ticket = mPositionInfo.Ticket(); + symbol = mPositionInfo.Symbol(); + tp = mPositionInfo.TakeProfit(); + profit = mPositionInfo.Profit(); + volume = mPositionInfo.Volume(); + comment = mPositionInfo.Comment(); + entry = mPositionInfo.PriceOpen(); + type = mPositionInfo.PositionType(); + price = mPositionInfo.PriceCurrent(); + commission = mPositionInfo.Commission(); + + // + period = ExtractPeriod(comment); + provider = ExtractProvider(comment); + + // + return result; + } + + // + // Tools ... + + // + // Cleanup ... + void Clean() + { + magic = 0; + ticket = 0; + tp = 0; + sl = 0; + swap = 0; + entry = 0; + price = 0; + profit = 0; + volume = 0; + openAt = 0; + commission = 0; + + // + type = NULL; + period = NULL; + + // + symbol = NULL; + comment = NULL; + provider = NULL; + } + + // + // Validate ... + bool IsValid() + { + // + bool result = false; + + // + result = + // + IsValid(symbol) && + NotEmpty(ticket) + // + ; + + // + return result; + } + + // + // Retrieve Entry Price ... + double GetEntry() + { + // + double result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + result = GetEntry( + symbol, + type + // + ); + + // + return result; + } + + // + // Retrieve Exit ... + double GetExit() + { + // + double result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + result = GetExit( + symbol, + type + // + ); + + // + return result; + } + + // + // Get Spread by Point ... + double GetSpread() + { + // + double result = 0; + + // + if (!IsValid()) + { + return result; + } + + // + result = PriceToPoint(GetSpread(symbol)); + + // + return result; + } + + // + // Calculate Age ... + int GetAge( + ENUM_TIMEFRAMES mPeriod // Calculate Age based on this period + ) + { + return GetAge(this, mPeriod); + } + + // + // Check this instance is Same os Given instance or not ... + bool IsSameAs( + const XPosition &value // instance for Compare + ) + { + // + bool result = false; + + // + result = + // + type == value.type && + magic == value.magic && + entry == value.entry && + ticket == value.ticket && + volume == value.volume && + symbol == value.symbol && + provider == value.provider + // + ; + + // + return result; + } + + // + // Find index in a Collection ... + int FindIndex( + const XPosition &values[] // Collection to Find + ) + { + // + return FindIndex( + this, + values + // + ); + } + + // + // Check Items Passed Specific Filters or not ... + bool IsFiltersPassed( + string mSymbol = NULL, // Trading Symbol + string mProvider = NULL, // Signal Provider + ENUM_TIMEFRAMES mPeriod = NULL, // Trading Timeframe + ENUM_POSITION_TYPE mType = NULL, // Long (Buy), Short (Sell) + ulong mMagic = NULL, // Magic Number + bool mFilterByMagic = true // Get Only Self Open Positions + ) + { + // + bool result = false; + + // + result = + // + // Magic Filter ... + IsMagicFilterPassed( + mMagic, + mFilterByMagic, + this + // + ) + // + && + // + // Symbol Filter ... + IsSymbolFilterPassed( + mSymbol, + this + // + ) + // + && + // + // Provider Filter ... + IsProviderFilterPassed( + mProvider, + this + // + ) + // + && + // + // Period Filter ... + IsPeriodFilterPassed( + mPeriod, + this + // + ) + // + && + // + // Type Filter ... + IsTypeFilterPassed( + mType, + this + // + ) + // + ; + + // + return result; + } +}; + +// +// Model an Order ... +struct XOrder +{ + // + // Time of order placement ... + datetime setupAt; + + // + // Time of order expiration ... + datetime expiredAt; + + // + // Time of order execution or cancellation ... + datetime executedAt; + + // + // Order type ... + ENUM_ORDER_TYPE type; + + // + // Order state ... + ENUM_ORDER_STATE state; + + // + // Type of execution by remainder ... + ENUM_ORDER_TYPE_FILLING filling; + + // + // Order lifetime ... + ENUM_ORDER_TYPE_TIME lifetime; + + // + // Order ticket ... + ulong ticket; + + // + // Magic Number ... + long magic; + + // + // Position id, that is placed on order, + // when it is executed. Each executed order invokes a + // deal, that opens new or changes existing + // position. Id of that position is placed on + // executed order in this moment. + long positionId; + + // + // Initial volume on order placement ... + double initialVolume; + + // + // Unfilled volume ... + double currentVolume; + + // + // Price, specified in the order ... + double openPrice; + + // + // Current price by order symbol ... + double currentPrice; + + // + // Price of placing Limit order when StopLimit order is triggered ... + double stopLimitPrice; + + // + // Take Profit level ... + double tp; + + // + // Stop Loss level ... + double sl; + + // + // Trading Symbol ... + string symbol; + + // + // Signal Provider ... + string provider; + + // + // Order Comment ... + string comment; + + // + ENUM_TIMEFRAMES period; + + // + // Constructor ... + XOrder() + { + Clean(); + } + + // + // Initializers ... + bool ByIndex( + int index // Fill By Index ... + ) + { + // + bool result = false; + + // + int ordersCount = OrdersTotal(); + if (ordersCount <= 0) + { + return result; + } + + // + static COrderInfo mOrderInfo; + + // + result = mOrderInfo.SelectByIndex(index); + if (!result) + { + return result; + } + + // + // Reading Order Info ... + magic = mOrderInfo.Magic(); + sl = mOrderInfo.StopLoss(); + tp = mOrderInfo.TakeProfit(); + ticket = mOrderInfo.Ticket(); + openPrice = mOrderInfo.PriceOpen(); + positionId = mOrderInfo.PositionId(); + currentPrice = mOrderInfo.PriceCurrent(); + initialVolume = mOrderInfo.VolumeInitial(); + currentVolume = mOrderInfo.VolumeCurrent(); + stopLimitPrice = mOrderInfo.PriceStopLimit(); + + // + symbol = mOrderInfo.Symbol(); + comment = mOrderInfo.Comment(); + + // + state = mOrderInfo.State(); + type = mOrderInfo.OrderType(); + lifetime = mOrderInfo.TypeTime(); + filling = mOrderInfo.TypeFilling(); + + // + setupAt = mOrderInfo.TimeSetup(); + executedAt = mOrderInfo.TimeDone(); + expiredAt = mOrderInfo.TimeExpiration(); + + // + period = ExtractPeriod(comment); + provider = ExtractProvider(comment); + + // + result = IsValid(); + + // + return result; + } + + // + // Retrieve Specific History Order ... + bool HistoryByIndex( + int index // Fill By Index ... + ) + { + // + bool result = false; + + // + int ordersCount = HistoryOrdersTotal(); + if (ordersCount <= 0) + { + return result; + } + + // + static CHistoryOrderInfo mOrderInfo; + + // + result = mOrderInfo.SelectByIndex(index); + if (!result) + { + return result; + } + + // + // Reading Order Info ... + magic = mOrderInfo.Magic(); + sl = mOrderInfo.StopLoss(); + tp = mOrderInfo.TakeProfit(); + ticket = mOrderInfo.Ticket(); + openPrice = mOrderInfo.PriceOpen(); + positionId = mOrderInfo.PositionId(); + currentPrice = mOrderInfo.PriceCurrent(); + initialVolume = mOrderInfo.VolumeInitial(); + currentVolume = mOrderInfo.VolumeCurrent(); + stopLimitPrice = mOrderInfo.PriceStopLimit(); + + // + symbol = mOrderInfo.Symbol(); + comment = mOrderInfo.Comment(); + + // + state = mOrderInfo.State(); + type = mOrderInfo.OrderType(); + lifetime = mOrderInfo.TypeTime(); + filling = mOrderInfo.TypeFilling(); + + // + setupAt = mOrderInfo.TimeSetup(); + executedAt = mOrderInfo.TimeDone(); + expiredAt = mOrderInfo.TimeExpiration(); + + // + period = ExtractPeriod(comment); + provider = ExtractProvider(comment); + + // + result = IsValid(); + + // + return result; + } + + // + // Tools ... + + // + // Cleanup ... + void Clean() + { + // + tp = 0; + sl = 0; + magic = 0; + ticket = 0; + positionId = 0; + openPrice = 0; + currentPrice = 0; + initialVolume = 0; + currentVolume = 0; + stopLimitPrice = 0; + + // + setupAt = NULL; + expiredAt = NULL; + executedAt = NULL; + + // + symbol = NULL; + comment = NULL; + provider = NULL; + + // + type = NULL; + state = NULL; + period = NULL; + filling = NULL; + lifetime = NULL; + } + + // + // Validate ... + bool IsValid() + { + // + bool result = false; + + // + result = + // + IsValid(symbol) && + NotEmpty(ticket) && + NotEmpty(positionId) + // + ; + + // + return result; + } + + // + // Calculate Age ... + int GetAge( + ENUM_TIMEFRAMES mPeriod // Calculate Age based on this period + ) + { + return GetAge(this, mPeriod); + } + + // + // Check this instance is Same os Given instance or not ... + bool IsSameAs( + const XOrder &value // instance for Compare + ) + { + // + bool result = false; + + // + result = + // + type == value.type && + state == value.state && + magic == value.magic && + ticket == value.ticket && + symbol == value.symbol && + provider == value.provider && + positionId == value.positionId + // + ; + + // + return result; + } + + // + // Find index in a Collection ... + int FindIndex( + const XOrder &values[] // Collection to Find + ) + { + // + return FindIndex( + this, + values + // + ); + } + + // + // Check Items Passed Specific Filters or not ... + bool IsFiltersPassed( + string mSymbol = NULL, // Trading Symbol + string mProvider = NULL, // Signal Provider + ENUM_TIMEFRAMES mPeriod = NULL, // Trading Timeframe + ENUM_ORDER_TYPE mType = NULL, // Long (Buy), Short (Sell) + ENUM_ORDER_STATE mState = NULL, // Order State + ulong mMagic = NULL, // Magic Number + bool mFilterByMagic = true // Get Only Self Open Positions + ) + { + // + bool result = false; + + // + result = + // + // Magic Filter ... + IsMagicFilterPassed( + mMagic, + mFilterByMagic, + this + // + ) + // + && + // + // Symbol Filter ... + IsSymbolFilterPassed( + mSymbol, + this + // + ) + // + && + // + // Provider Filter ... + IsProviderFilterPassed( + mProvider, + this + // + ) + // + && + // + // Period Filter ... + IsPeriodFilterPassed( + mPeriod, + this + // + ) + // + && + // + // Type Filter ... + IsTypeFilterPassed( + mType, + this + // + ) + // + && + // + // State Filter ... + IsStateFilterPassed( + mState, + this + // + ) + // + ; + + // + return result; + } +}; + +// +// Model a Deal ... +struct XDeal +{ + // + // the ID of the Expert Advisor, that executed the deal ... + ulong magic; + + // + // the ID of position, in which the deal was involved ... + ulong positionId; + + // + // Ticket ... + ulong ticket; + + // + // the name of the deal symbol ... + string symbol; + + // + // order by which the deal is executed ... + ulong order; + + // + // the time of deal execution ... + datetime time; + + // + // Deal price ... + double price; + + // + // the financial result of the deal (in deposit currency) ... + double profit; + + // + // the amount of swap when position is closed ... + double swap; + + // + // the amount of commission of the deal ... + double commission; + + // + // the volume of deal ... + double volume; + + // + // the deal comment ... + string comment; + + // + string provider; + + // + ENUM_TIMEFRAMES period; + + // + // the deal type ... + // ------------------------------------------------------------------ + // DEAL_TYPE_BUY => Buy ... + // DEAL_TYPE_SELL => Sell ... + // DEAL_TYPE_BUY_CANCELED => Canceled buy deal ... + // There can be a situation when a previously executed buy deal is canceled. In this case, + // the type of the previously executed deal (DEAL_TYPE_BUY) is changed to DEAL_TYPE_BUY_CANCELED, + // and its profit/loss is zeroized. Previously obtained profit/loss is charged/withdrawn using a separated balance operation ... + // + // DEAL_TYPE_SELL_CANCELED => Canceled sell deal ... + // There can be a situation when a previously executed sell deal is canceled. In this case, + // the type of the previously executed deal (DEAL_TYPE_SELL) is changed to DEAL_TYPE_SELL_CANCELED, + // and its profit/loss is zeroized. Previously obtained profit/loss is charged/withdrawn using a separated balance operation + // + // DEAL_TYPE_BALANCE => Balance ... + // DEAL_TYPE_CREDIT => Credit ... + // DEAL_TYPE_CHARGE => Additional charge ... + // DEAL_TYPE_CORRECTION => Correction ... + // DEAL_TAX => Tax charges ... + // DEAL_TYPE_BONUS => Bonus ... + // DEAL_TYPE_INTEREST => Interest rate ... + // DEAL_DIVIDEND => Dividend operations... + // DEAL_DIVIDEND_FRANKED => Franked (non-taxable) dividend operations ... + // DEAL_TYPE_COMMISSION => Additional commission ... + // DEAL_TYPE_COMMISSION_DAILY => Daily commission ... + // DEAL_TYPE_COMMISSION_MONTHLY => Monthly commission ... + // DEAL_TYPE_COMMISSION_AGENT_DAILY => Daily agent commission ... + // DEAL_TYPE_COMMISSION_AGENT_MONTHLY => Monthly agent commission + ENUM_DEAL_TYPE type; + + // + // the deal direction ... + // ---------------------------------- + // DEAL_ENTRY_IN => Entry in ... + // DEAL_ENTRY_OUT => Entry out ... + // DEAL_ENTRY_INOUT => Reverse ... + // DEAL_ENTRY_OUT_BY => Close a position by an opposite one ... + ENUM_DEAL_ENTRY entry; + + // + // deal reson ... + // --------------------- + // DEAL_REASON_SL => The deal was executed as a result of Stop Loss activation ... + // DEAL_REASON_TP => The deal was executed as a result of Take Profit activation ... + // DEAL_REASON_SO => The deal was executed as a result of the Stop Out event ... + // DEAL_REASON_WEB => The deal was executed as a result of activation of an order placed from the web platform ... + // DEAL_REASON_SPLIT => The deal was executed after the split (price reduction) of an instrument, which had an open position during split announcement ... + // DEAL_REASON_CLIENT => The deal was executed as a result of activation of an order placed from a desktop terminal ... + // DEAL_REASON_MOBILE => The deal was executed as a result of activation of an order placed from a mobile application ... + // DEAL_REASON_EXPERT => The deal was executed as a result of activation of an order placed from an MQL5 program, i.e. an Expert Advisor or a script ... + // DEAL_REASON_VMARGIN => The deal was executed after charging the variation margin ... + // DEAL_REASON_ROLLOVER => The deal was executed due to a rollover ... + ENUM_DEAL_REASON reason; + + // + // Constructor ... + XDeal() + { + Clean(); + } + + // + // Initializers ... + bool ByIndex( + int index // Deal Index + ) + { + // + bool result = false; + + // + int dealsCount = HistoryDealsTotal(); + result = dealsCount > 0; + if (!result) + { + return result; + } + + // + static CDealInfo mDealInfo; + + // + result = mDealInfo.SelectByIndex(index); + if (!result) + { + // + return result; + } + + // + // Reading Order Info ... + swap = mDealInfo.Swap(); + magic = mDealInfo.Magic(); + order = mDealInfo.Order(); + ticket = mDealInfo.Ticket(); + time = mDealInfo.Time(); + price = mDealInfo.Price(); + symbol = mDealInfo.Symbol(); + profit = mDealInfo.Profit(); + volume = mDealInfo.Volume(); + comment = mDealInfo.Comment(); + positionId = mDealInfo.PositionId(); + entry = mDealInfo.Entry(); + commission = mDealInfo.Commission(); + type = mDealInfo.DealType(); + reason = (ENUM_DEAL_REASON)HistoryDealGetInteger( + ticket, + DEAL_REASON); + + // + period = ExtractPeriod(comment); + provider = ExtractProvider(comment); + + // + result = IsValid(); + + // + return result; + } + + // + // Tools ... + + // + // Cleanup ... + void Clean() + { + // + magic = 0; + positionId = 0; + ticket = 0; + order = 0; + time = 0; + price = 0; + profit = 0; + swap = 0; + commission = 0; + volume = 0; + + // + symbol = NULL; + comment = NULL; + provider = NULL; + + // + type = NULL; + entry = NULL; + period = NULL; + reason = NULL; + } + + // + // Validate ... + bool IsValid() + { + // + bool result = false; + + // + result = + // + IsValid(symbol) && + NotEmpty(ticket) && + NotEmpty(positionId) + // + ; + + // + return result; + } + + // + // Calculate Age ... + int GetAge( + ENUM_TIMEFRAMES mPeriod // Calculate Age based on this period + ) + { + return GetAge(this, mPeriod); + } + + // + // Check this instance is Same os Given instance or not ... + bool IsSameAs( + const XDeal &value // instance for Compare + ) + { + // + bool result = false; + + // + result = + // + type == value.type && + magic == value.magic && + entry == value.entry && + reason == value.reason && + ticket == value.ticket && + volume == value.volume && + symbol == value.symbol && + provider == value.provider && + positionId == value.positionId + // + ; + + // + return result; + } + + // + // Find index in a Collection ... + int FindIndex( + const XDeal &values[] // Collection to Find + ) + { + // + return FindIndex( + this, + values + // + ); + } + + // + // Check Items Passed Specific Filters or not ... + bool IsFiltersPassed( + string mSymbol = NULL, // Trading Symbol + string mProvider = NULL, // Signal Provider + ENUM_TIMEFRAMES mPeriod = NULL, // Trading Timeframe + ENUM_DEAL_TYPE mType = NULL, // Deal Type + ENUM_DEAL_ENTRY mEntry = NULL, // Deal Entry + ENUM_DEAL_REASON mReason = NULL, // Deal Reason + ulong mMagic = NULL, // Magic Number + bool mFilterByMagic = true // Get Only Self Open Positions + ) + { + // + bool result = false; + + // + result = + // + // Magic Filter ... + IsMagicFilterPassed( + mMagic, + mFilterByMagic, + this + // + ) + // + && + // + // Symbol Filter ... + IsSymbolFilterPassed( + mSymbol, + this + // + ) + // + && + // + // Provider Filter ... + IsProviderFilterPassed( + mProvider, + this + // + ) + // + && + // + // Period Filter ... + IsPeriodFilterPassed( + mPeriod, + this + // + ) + // + && + // + // Type Filter ... + IsTypeFilterPassed( + mType, + this + // + ) + // + && + // + // Entry Filter ... + IsEntryFilterPassed( + mEntry, + this + // + ) + // + && + // + // Reason Filter ... + IsReasonFilterPassed( + mReason, + this + // + ) + // + ; + + // + return result; + } +}; + +// +// Model OnTrade Event Handler Result on XCTrade Class ... +struct XOnTradeHandlerState +{ + // + bool hasNewDeal; + int newDeals; + + // + bool hasNewOrder; + int newOrders; + + // + bool hasNewPosition; + int newPositions; + + // + bool hasNewHistoryOrder; + int newHistoryOrders; + + // + // Constructor ... + XOnTradeHandlerState() + { + Clean(); + } + + // + // Tools ... + + // + // Cleanup ... + void Clean() + { + // + hasNewDeal = false; + hasNewOrder = false; + hasNewPosition = false; + hasNewHistoryOrder = false; + + // + newDeals = 0; + newOrders = 0; + newPositions = 0; + newHistoryOrders = 0; + } + + // + // Validate ... + bool IsValid() + { + // + bool result = false; + + // + result = + // + ( + // + hasNewDeal + ? newDeals > 0 + : true + // + ) + // + && + // + ( + // + hasNewOrder + ? newOrders > 0 + : true + // + ) + // + && + // + ( + // + hasNewPosition + ? newPositions > 0 + : true + // + ) + // + && + // + ( + // + hasNewHistoryOrder + ? newHistoryOrders > 0 + : true + // + ) + // + ; + + // + return result; + } +}; + +// +// Model a Position with all of it's Supports ... +struct XPositionPack +{ + // + ulong ticket; // Main Position's Ticket + + // + XPosition position; // Main Position (if Exists) + + // + int supportOrdersCount; // Supported Orders (Untriggered) + int supportPositionsCount; // Supported Positions + + // + XOrder supportOrders[]; // Supported Orders (Untriggered) + XPosition supportPositions[]; // Supported Positions + + // + // Constructor ... + XPositionPack() + { + Clean(); + } + + // + // Tools ... + + // + // Cleanup ... + void Clean() + { + // + ticket = 0; + + // + position.Clean(); + + // + supportOrdersCount = 0; + supportPositionsCount = 0; + + // + Clean(supportOrders); + Clean(supportPositions); + } + + // + // Validate ... + bool IsValid() + { + // + bool result = false; + + // + result = + // + NotEmpty(ticket) && + ( + // + supportOrdersCount > 0 + ? ArraySize(supportOrders) == supportOrdersCount + : true + // + ) + // + && + // + ( + // + supportPositionsCount > 0 + ? ArraySize(supportPositions) == supportPositionsCount + : true + // + ) + // + ; + + // + return result; + } +}; + +// +// Use for Manage Positions ... +struct XPositionInfo +{ + // + // Props ... + ulong ticket; // Position Ticket + + // + + double tps[]; // Un Touched Tps ( not include regular TP ) / For Managing using XTrade Class ... + double sls[]; // Un Touched Sls ( not include regular SL ) / For Managing using XTrade Class ... + + // + ENUM_X_SIGNAL_MANAGING_ACTIONS action; // Managing Action + double profits[]; // Check Postion profit + datetime times[]; // Last Times prfoit Checking + + // + // Constructor ... + void XPositionInfo() + { + Clean(); + } + + // + // Fill from a Signal ... + // The Signal must Executed ... + bool BySignal( + XSignal &signal // the Signal which need to use + ) + { + // + bool result = false; + + // + Clean(); + + // + result = signal.IsValid() && signal.IsExecuted() && signal.mode == X_ORDER_MODE_MARKET; + if (!result) + { + return result; + } + + // + ticket = signal.positionId; + action = signal.action; + + // + // Select TPS and SLS from signal ... + + // + double sl = 0; + bool hasRegularSL = signal.RegularSL(sl); + Copy( + signal.sls, + sls + // + ); + if (hasRegularSL) + { + // + Remove( + sl, + sls + // + ); + } + + // + double tp = 0; + bool hasRegularTP = signal.RegularTP(tp); + Copy( + signal.tps, + tps + // + ); + if (hasRegularTP) + { + // + Remove( + tp, + tps + // + ); + } + + // + return result; + } + + // + // Fill from a Position ... + bool ByPosition( + XPosition &position // the Position which need to use + ) + { + // + bool result = false; + + // + Clean(); + + // + result = position.IsValid(); + if (!result) + { + return result; + } + + // + ticket = position.ticket; + + // + datetime time = TimeCurrent(); + + // + Add( + time, + times + // + ); + Add( + position.profit, + profits + // + ); + + // + return result; + } + + // + // Tools ... + + // + // Cleanup ... + void Clean() + { + // + ticket = 0; + + // + Clean(tps); + Clean(sls); + Clean(times); + Clean(profits); + } + + // + // Validate ... + bool IsValid() + { + // + bool result = false; + + // + result = NotEmpty(ticket) && ticket > 0; + + // + return result; + } + + // + // Check this instance is Same os Given instance or not ... + bool IsSameAs( + const XPositionInfo &value // instance for Compare + ) + { + // + bool result = false; + + // + result = + // + ticket == value.ticket + // + ; + + // + return result; + } + + // + // Find index in a Collection ... + int FindIndex( + const XPositionInfo &values[] // Collection to Find + ) + { + // + return FindIndex( + this, + values + // + ); + } + + // + // Retrieve Token ... + string GetToken() + { + return GetToken(this); + } + + // + // Convert to String Representation + string ToString() + { + // + string result = NULL; + + // + if (!IsValid()) + { + return result; + } + + // + string ticketStr = Surround(XTicketToken, ticket); + string actionStr = Surround(XActionToken, action); + // + string tpsStr = SurroundArray(XTPToken, tps); + string slsStr = SurroundArray(XSLToken, sls); + string timesStr = SurroundArray(XTimeToken, times); + string profitsStr = SurroundArray(XProfitToken, profits); + + // + result = + // + GetToken() + "[" + + // + ticketStr + + actionStr + + tpsStr + + slsStr + + timesStr + + profitsStr + + // + "]" + // + ; + + // + return result; + } + + // + // Parse and Fill from Given String Representation + bool Parse(string value) + { + // + bool result = false; + + // + ticket = ParseLongSurrounded(value, XTicketToken); + action = ((ENUM_X_SIGNAL_MANAGING_ACTIONS)ParseIntSurrounded(value, XActionToken)); + + // + ParseDoubleArraySurrounded(tps, value, XTPToken); + ParseDoubleArraySurrounded(sls, value, XSLToken); + ParseDoubleArraySurrounded(profits, value, XProfitToken); + ParseTimeArraySurrounded(times, value, XTimeToken); + + // + result = IsValid(); + + // + return result; + } +}; + +// +// TypeDefs ... + +// +typedef void (*TOnDealsChanged)(int count); + +// +typedef void (*TOnOrdersChanged)(int count); + +// +typedef void (*TOnPositionsChanged)(int count); + +// +typedef void (*TOnStopLoss)(const XDeal &deal); +typedef void (*TOnTakeProfit)(const XDeal &deal); + +// +typedef void (*TOnTradeStateChanged)(const XOnTradeHandlerState &state); + +// +// Classes ... + +// +// Create a Signal Specfic Data Collector ... +class XSCSignalCollector +{ + // + // Public ... +public: + // + // Props ... + + // + // Constructor ... + void XSCSignalCollector() + { + // + XSCDataCollector mBase; + mBase.Clear(); + } + + // + // Deconstructor ... + + // + // Tools ... + + // + // Inheritanced Functions ... + + // + // Cleaning Store ... + void Clear() + { + // + XSCDataCollector mBase; + + // + mBase.Clear(); + } + + // + // Collect All Store ... + int Collect(XSignal &result[]) + { + // + int mResult = 0; + + // + XSCDataCollector mBase; + + // + mResult = mBase.Collect(result); + + // + return mResult; + } + + // + // Add Item To Store ... + bool Add(XSignal &item) + { + // + bool result = false; + + // + XSCDataCollector mBase; + + // + result = mBase.Add(item); + + // + return result; + } + + // + // Add Item(s) To Store ... + int Add(XSignal &items[]) + { + // + int result = 0; + + // + XSCDataCollector mBase; + + // + result = mBase.Add(items); + + // + return result; + } + + // + // Remove an Item from Store ... + bool Remove(XSignal &item) + { + // + bool result = false; + + // + XSCDataCollector mBase; + + // + result = mBase.Remove(item); + + // + return result; + } + + // + // Custom Functions ... + + // + int CollectSignals( + XSignal &result[], // Hold Result + string symbol = NULL, // Trading Symbol + string provider = NULL, // Signal Provider + ENUM_TIMEFRAMES period = NULL, // Trading Timeframe + ENUM_POSITION_TYPE type = NULL, // Long (Buy), Short (Sell) + ENUM_X_ORDER_MODES mode = NULL // Execution Mode + ) + { + // + int mResult = 0; + + // + XSignal signals[]; + int signalsCount = Collect(signals); + if (signalsCount <= 0) + { + return mResult; + } + + // + mResult = ArraySize(result); + + // + // Now we Have to Apply Filters ... + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = signals[i]; + + // + bool isFiltersPassed = + iSignal.IsFiltersPassed( + symbol, + provider, + period, + type, + mode + // + ); + if (!isFiltersPassed) + { + continue; + } + + // + AddRef( + iSignal, + result + // + ); + } + + // + return mResult; + } + + // + // Protected ... +protected: + // + // Tools ... + + // + // Private ... +private: + // + // Props ... + + // + // Tools ... +}; + +// +// Create a Position Info Data Collector ... +class XSCPositionInfoCollector +{ + // + // Public ... +public: + // + // Props ... + + // + // Constructor ... + void XSCPositionInfoCollector() + { + // + XSCDataCollector mBase; + mBase.Clear(); + } + + // + // Deconstructor ... + + // + // Tools ... + + // + // Inheritanced Functions ... + + // + // Cleaning Store ... + void Clear() + { + // + XSCDataCollector mBase; + + // + mBase.Clear(); + } + + // + // Collect All Store ... + int Collect(XPositionInfo &result[]) + { + // + int mResult = 0; + + // + XSCDataCollector mBase; + + // + mResult = mBase.Collect(result); + + // + return mResult; + } + + // + // Add Item To Store ... + bool Add(XPositionInfo &item) + { + // + bool result = false; + + // + XSCDataCollector mBase; + + // + result = mBase.Add(item); + + // + return result; + } + + // + // Add Item(s) To Store ... + int Add(XPositionInfo &items[]) + { + // + int result = 0; + + // + XSCDataCollector mBase; + + // + result = mBase.Add(items); + + // + return result; + } + + // + // Remove an Item from Store ... + bool Remove(XPositionInfo &item) + { + // + bool result = false; + + // + XSCDataCollector mBase; + + // + result = mBase.Remove(item); + + // + return result; + } + + // + // Custom Functions ... + + // + // Protected ... +protected: + // + // Tools ... + + // + // Private ... +private: + // + // Props ... + + // + // Tools ... +}; + +// +// Tools ... + +// +bool IsValid(ENUM_X_ORDER_MODES value) +{ + return value != X_ORDER_MODE_NOTHING; +} + +// +// Ages ... + +// +// Retrieve a Position Age ... +int GetAge( + XPosition &position, // Selected Position ... + ENUM_TIMEFRAMES period = NULL // Dest Time Frame ... +) +{ + // + int result = -1; + + // + if (period == NULL) + { + period = _Period; + } + + // + result = iBarShift( + position.symbol, + period, + position.openAt); + + // + return result; +} + +// +// Retrieve an Order Age ... +int GetAge( + XOrder &order, // Selected Order ... + ENUM_TIMEFRAMES period = NULL // Dest Time Frame ... +) +{ + // + int result = -1; + + // + if (period == NULL) + { + period = _Period; + } + + // + result = iBarShift( + order.symbol, + period, + order.setupAt); + + // + return result; +} + +// +// Retrieve a Deal Age ... +int GetAge( + XDeal &deal, // Selected Deal ... + ENUM_TIMEFRAMES period = NULL // Dest Time Frame ... +) +{ + // + int result = -1; + + // + if (period == NULL) + { + period = _Period; + } + + // + result = iBarShift( + deal.symbol, + period, + deal.time); + + // + return result; +} + +// +// Get Oldest Deal ... +int GetOldest( + XDeal &item, // Hold Result ... + XDeal &items[] // Source Array ... +) +{ + // + int result = -1; + + // + int itemsCount = ArraySize(items); + if (itemsCount <= 0) + { + return result; + } + + // + int tmpAge = 0; + XDeal tmpItem; + for (int i = 0; i < itemsCount; i++) + { + // + XDeal iItem = items[i]; + + // + int iAge = GetAge(iItem); + if (iAge > 0 && + (tmpAge == 0 || tmpAge < iAge)) + { + // + tmpAge = iAge; + tmpItem = iItem; + } + } + + // + if (tmpAge > 0) + { + // + result = tmpAge; + item = tmpItem; + } + + // + return result; +} + +// +// Get Youngest Deal ... +int GetYoungest( + XDeal &item, // Hold Result ... + XDeal &items[] // Source Array ... +) +{ + // + int result = -1; + + // + int itemsCount = ArraySize(items); + if (itemsCount <= 0) + { + return result; + } + + // + int tmpAge = 0; + XDeal tmpItem; + for (int i = 0; i < itemsCount; i++) + { + // + XDeal iItem = items[i]; + + // + int iAge = GetAge(iItem); + if (iAge > 0 && + (tmpAge == 0 || tmpAge > iAge)) + { + // + tmpAge = iAge; + tmpItem = iItem; + } + } + + // + if (tmpAge > 0) + { + // + result = tmpAge; + item = tmpItem; + } + + // + return result; +} + +// +// Get Oldest Order ... +int GetOldest( + XOrder &item, // Hold Result ... + XOrder &items[] // Source Array ... +) +{ + // + int result = -1; + + // + int itemsCount = ArraySize(items); + if (itemsCount <= 0) + { + return result; + } + + // + int tmpAge = 0; + XOrder tmpItem; + for (int i = 0; i < itemsCount; i++) + { + // + XOrder iItem = items[i]; + + // + int iAge = GetAge(iItem); + if (iAge > 0 && + (tmpAge == 0 || tmpAge < iAge)) + { + // + tmpAge = iAge; + tmpItem = iItem; + } + } + + // + if (tmpAge > 0) + { + // + result = tmpAge; + item = tmpItem; + } + + // + return result; +} + +// +// Get Youngest Order ... +int GetYoungest( + XOrder &item, // Hold Result ... + XOrder &items[] // Source Array ... +) +{ + // + int result = -1; + + // + int itemsCount = ArraySize(items); + if (itemsCount <= 0) + { + return result; + } + + // + int tmpAge = 0; + XOrder tmpItem; + for (int i = 0; i < itemsCount; i++) + { + // + XOrder iItem = items[i]; + + // + int iAge = GetAge(iItem); + if (iAge > 0 && + (tmpAge == 0 || tmpAge > iAge)) + { + // + tmpAge = iAge; + tmpItem = iItem; + } + } + + // + if (tmpAge > 0) + { + // + result = tmpAge; + item = tmpItem; + } + + // + return result; +} + +// +// Get Oldes Position ... +int GetOldest( + XPosition &item, // Hold Result ... + XPosition &items[] // Source Array ... +) +{ + // + int result = -1; + + // + int itemsCount = ArraySize(items); + if (itemsCount <= 0) + { + return result; + } + + // + int tmpAge = 0; + XPosition tmpItem; + for (int i = 0; i < itemsCount; i++) + { + // + XPosition iItem = items[i]; + + // + int iAge = GetAge(iItem); + if (iAge > 0 && + (tmpAge == 0 || tmpAge < iAge)) + { + // + tmpAge = iAge; + tmpItem = iItem; + } + } + + // + if (tmpAge > 0) + { + // + result = tmpAge; + item = tmpItem; + } + + // + return result; +} + +// +// Get Youngest Position ... +int GetYoungest( + XPosition &item, // Hold Result ... + XPosition &items[] // Source Array ... +) +{ + // + int result = -1; + + // + int itemsCount = ArraySize(items); + if (itemsCount <= 0) + { + return result; + } + + // + int tmpAge = 0; + XPosition tmpItem; + for (int i = 0; i < itemsCount; i++) + { + // + XPosition iItem = items[i]; + + // + int iAge = GetAge(iItem); + if (iAge > 0 && + (tmpAge == 0 || tmpAge > iAge)) + { + // + tmpAge = iAge; + tmpItem = iItem; + } + } + + // + if (tmpAge > 0) + { + // + result = tmpAge; + item = tmpItem; + } + + // + return result; +} + +// +// Check Filters ... + +// +// Magic Filter ... +template +bool IsMagicFilterPassed( + ulong magic, + bool filterByMagic, + T &item + // +) +{ + // + return !filterByMagic + ? true + : !NotEmpty(magic) + ? false + : magic == item.magic; +} + +// +// Symbol Filter ... +template +bool IsSymbolFilterPassed( + string symbol, + T &item + // +) +{ + // + return !IsValid(symbol) + ? true + : symbol == item.symbol; +} + +// +// Provider Filter ... +template +bool IsProviderFilterPassed( + string provider, + T &item + // +) +{ + // + return !IsValid(provider) + ? true + : provider == item.provider; +} + +// +// Period Filter ... +template +bool IsPeriodFilterPassed( + ENUM_TIMEFRAMES period, + T &item + // +) +{ + // + return !IsValid(period) + ? true + : period == item.period; +} + +// +// Type Filter ... +template +bool IsTypeFilterPassed( + ENUM_POSITION_TYPE type, + T &item + // +) +{ + // + return type == NULL + ? true + : type == item.type; +} +template +bool IsTypeFilterPassed( + ENUM_ORDER_TYPE type, + T &item + // +) +{ + // + return type == NULL + ? true + : type == item.type; +} +template +bool IsTypeFilterPassed( + ENUM_DEAL_TYPE type, + T &item + // +) +{ + // + return type == NULL + ? true + : type == item.type; +} + +// +// Mode Filter ... +template +bool IsModeFilterPassed( + ENUM_X_ORDER_MODES mode, + T &item + // +) +{ + // + return mode == NULL + ? true + : mode == item.mode; +} + +// +// Entry Filter ... +template +bool IsEntryFilterPassed( + ENUM_DEAL_ENTRY entry, + T &item + // +) +{ + // + return entry == NULL + ? true + : entry == item.entry; +} + +// +// Reason Filter ... +template +bool IsReasonFilterPassed( + ENUM_DEAL_REASON reason, + T &item + // +) +{ + // + return reason == NULL + ? true + : reason == item.reason; +} + +// +// State Filter ... +template +bool IsStateFilterPassed( + ENUM_ORDER_STATE state, + T &item + // +) +{ + // + return state == NULL + ? true + : state == item.state; +} + +// + +// +// Find Specific Item Index inside a Collection ... +template +int FindIndex( + T &item, // Item to Find + const T &items[] // Items for Search +) +{ + // + int result = -1; + + // + // Check Item Validation ... + if (!item.IsValid()) + { + return result; + } + + // + int itemsCount = ArraySize(items); + if (itemsCount <= 0) + { + return result; + } + + // + for (int i = 0; i < itemsCount; i++) + { + // + T iItem = items[i]; + + // + // Validate Item ... + if (!iItem.IsValid()) + { + continue; + } + + // + bool isSame = item.IsSameAs(iItem); + if (isSame && result <= -1) + { + // + result = i; + break; + } + } + + // + return result; +} + +// +// Tagging ... + +// +// Generate Specified Tag for Using in Comments ... +string GeneratePeriodTag(ENUM_TIMEFRAMES period) +{ + // + string strPeriod = ToString(period); + return Surround( + XPeriodToken, + strPeriod + // + ); +} + +// +// Extract Period from a Tagged string ... +ENUM_TIMEFRAMES ExtractPeriod(string value) +{ + // + ENUM_TIMEFRAMES result = NULL; + + // + string pStr = ParseStringSurrounded( + value, + XPeriodToken + // + ); + if (!IsValid(pStr)) + { + return result; + } + + // + result = ToPeriod(pStr); + + // + return result; +} + +// Generate Specified Tag for Using in Comments ... +string GenerateProviderTag(string provider) +{ + // + return Surround( + XProviderToken, + provider + // + ); +} + +// +// Extract Provider from a Tagged string ... +string ExtractProvider(string value) +{ + // + return ParseStringSurrounded( + value, + XProviderToken + // + ); +} + +// +// Generate Support Comment Tag ... +string GenerateSupportTag(ulong ticket) +{ + // + return Surround( + XSupportToken, + ticket + // + ); +} + +// +// Extract Support Positions from a Tagged string ... +ulong ExtractSupportedTicket(string value) +{ + // + return ParseLongSurrounded( + value, + XSupportToken + // + ); +} + +// +// Generate EQM Support Comment Tag ... +string GenerateEQMSupportTag(ulong ticket) +{ + // + return Surround( + XEQMSupportToken, + ticket + // + ); +} + +// +// Extract EQM Support Positions from a Tagged string ... +ulong ExtractEQMSupportedTicket(string value) +{ + // + return ParseLongSurrounded( + value, + XEQMSupportToken + // + ); +} + +//

    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 S0iIS1Q!l159tGTLk@{-gqxt{< literal 0 HcmV?d00001 diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine Stoch.mq5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine Stoch.mq5 new file mode 100644 index 0000000..4eb1a89 --- /dev/null +++ b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/DarkCloud PiercingLine Stoch.mq5 @@ -0,0 +1,687 @@ +//+------------------------------------------------------------------+ +//| DarkCloud PiercingLine Stoch.mq5 | +//| Copyright 2024, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2024, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" + +#include +#include + +#define SIGNAL_BUY 1 // Buy signal +#define SIGNAL_NOT 0 // no trading signal +#define SIGNAL_SELL -1 // Sell signal + +#define CLOSE_LONG 2 // signal to close Long +#define CLOSE_SHORT -2 // signal to close Short + +//--- Input parameters +input int InpAverBodyPeriod=12; // period for calculating average candlestick size +input int InpMAPeriod =5; // Trend MA period +input int InpStochK =47; // period %K +input int InpStochD =9; // period %D +input int InpStochSlow =13; // smoothing period %K +input ENUM_STO_PRICE InpStochApplied=STO_LOWHIGH; // calculation type +input ENUM_MA_METHOD InpStochMA =MODE_SMA; // smoothing type + +//--- trade parameters +input uint InpDuration=10; // position holding time in bars +input uint InpSL =200; // Stop Loss in points +input uint InpTP =200; // Take Profit in points +input uint InpSlippage=10; // slippage in points +//--- money management parameters +input double InpLot=0.1; // lot +//--- Expert ID +input long InpMagicNumber=120800; // Magic Number + +//--- global variables +int ExtAvgBodyPeriod; // average candlestick calculation period +int ExtSignalOpen =0; // Buy/Sell signal +int ExtSignalClose =0; // signal to close a position +string ExtPatternInfo =""; // current pattern information +string ExtDirection =""; // position opening direction +bool ExtPatternDetected=false; // pattern detected +bool ExtConfirmed =false; // pattern confirmed +bool ExtCloseByTime =true; // requires closing by time +bool ExtCheckPassed =true; // status checking error +//--- indicator handles +int ExtIndicatorHandle=INVALID_HANDLE; +int ExtTrendMAHandle=INVALID_HANDLE; + +//--- service objects +CTrade ExtTrade; +CSymbolInfo ExtSymbolInfo; +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { + Print("InpSL=", InpSL); + Print("InpTP=", InpTP); +//--- set parameters for trading operations + ExtTrade.SetDeviationInPoints(InpSlippage); // slippage + ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID + ExtTrade.LogLevel(LOG_LEVEL_ERRORS); // logging level + + ExtAvgBodyPeriod=InpAverBodyPeriod; +//--- indicator initialization + ExtIndicatorHandle=iStochastic(_Symbol, _Period, InpStochK, InpStochD, InpStochSlow, InpStochMA, InpStochApplied); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating iStochastic indicator"); + return(INIT_FAILED); + } + +//--- trend moving average + ExtTrendMAHandle=iMA(_Symbol, _Period, InpMAPeriod,0, MODE_SMA,PRICE_CLOSE); + if(ExtIndicatorHandle==INVALID_HANDLE) + { + Print("Error creating Moving Average indicator"); + return(INIT_FAILED); + } + +//--- OK + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- release indicator handle + IndicatorRelease(ExtIndicatorHandle); + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- save the next bar start time; all checks at bar opening only + static datetime next_bar_open=0; + +//--- Phase 1 - check the emergence of a new bar and update the status + if(TimeCurrent()>=next_bar_open) + { + //--- get the current state of environment on the new bar + // namely, set the values of global variables: + // ExtPatternDetected - pattern detection + // ExtConfirmed - pattern confirmation + // ExtSignalOpen - signal to open + // ExtSignalClose - signal to close + // ExtPatternInfo - current pattern information + if(CheckState()) + { + //--- set the new bar opening time + next_bar_open=TimeCurrent(); + next_bar_open-=next_bar_open%PeriodSeconds(_Period); + next_bar_open+=PeriodSeconds(_Period); + + //--- report the emergence of a new bar only once within a bar + if(ExtPatternDetected && ExtConfirmed) + Print(ExtPatternInfo); + } + else + { + //--- error getting the status, retry on the next tick + return; + } + } + +//--- Phase 2 - if there is a signal and no position in this direction + if(ExtSignalOpen && !PositionExist(ExtSignalOpen)) + { + Print("\r\nSignal to open position ", ExtDirection); + PositionOpen(); + if(PositionExist(ExtSignalOpen)) + ExtSignalOpen=SIGNAL_NOT; + } + +//--- Phase 3 - close if there is a signal to close + if(ExtSignalClose && PositionExist(ExtSignalClose)) + { + Print("\r\nSignal to close position ", ExtDirection); + CloseBySignal(ExtSignalClose); + if(!PositionExist(ExtSignalClose)) + ExtSignalClose=SIGNAL_NOT; + } + +//--- Phase 4 - close upon expiration + if(ExtCloseByTime && PositionExpiredByTimeExist()) + { + CloseByTime(); + ExtCloseByTime=PositionExpiredByTimeExist(); + } + } +//+------------------------------------------------------------------+ +//| Get the current environment and check for a pattern | +//+------------------------------------------------------------------+ +bool CheckState() + { +//--- check if there is a pattern + if(!CheckPattern()) + { + Print("Error, failed to check pattern"); + return(false); + } + +//--- check for confirmation + if(!CheckConfirmation()) + { + Print("Error, failed to check pattern confirmation"); + return(false); + } +//--- if there is no confirmation, cancel the signal + if(!ExtConfirmed) + ExtSignalOpen=SIGNAL_NOT; + +//--- check if there is a signal to close a position + if(!CheckCloseSignal()) + { + Print("Error, failed to check the closing signal"); + return(false); + } + +//--- if positions are to be closed after certain holding time in bars + if(InpDuration) + ExtCloseByTime=true; // set flag to close upon expiration + +//--- all checks done + return(true); + } +//+------------------------------------------------------------------+ +//| Open a position in the direction of the signal | +//+------------------------------------------------------------------+ +bool PositionOpen() + { + ExtSymbolInfo.Refresh(); + ExtSymbolInfo.RefreshRates(); + + double price=0; +//--- Stop Loss and Take Profit are not set by default + double stoploss=0.0; + double takeprofit=0.0; + + int digits=ExtSymbolInfo.Digits(); + double point=ExtSymbolInfo.Point(); + double spread=ExtSymbolInfo.Ask()-ExtSymbolInfo.Bid(); + +//--- uptrend + if(ExtSignalOpen==SIGNAL_BUY) + { + price=NormalizeDouble(ExtSymbolInfo.Ask(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price-spread, digits); + } + else + stoploss = NormalizeDouble(price-InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price+spread, digits); + } + else + takeprofit = NormalizeDouble(price+InpTP*point, digits); + } + + if(!ExtTrade.Buy(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s buy %G at %G (sl=%G tp=%G) failed. Ask=%G error=%d", + Symbol(), InpLot, price, stoploss, takeprofit, ExtSymbolInfo.Ask(), GetLastError()); + return(false); + } + } + +//--- downtrend + if(ExtSignalOpen==SIGNAL_SELL) + { + price=NormalizeDouble(ExtSymbolInfo.Bid(), digits); + //--- if Stop Loss is set + if(InpSL>0) + { + if(spread>=InpSL*point) + { + PrintFormat("StopLoss (%d points) <= current spread = %.0f points. Spread value will be used", InpSL, spread/point); + stoploss = NormalizeDouble(price+spread, digits); + } + else + stoploss = NormalizeDouble(price+InpSL*point, digits); + } + //--- if Take Profit is set + if(InpTP>0) + { + if(spread>=InpTP*point) + { + PrintFormat("TakeProfit (%d points) < current spread = %.0f points. Spread value will be used", InpTP, spread/point); + takeprofit = NormalizeDouble(price-spread, digits); + } + else + takeprofit = NormalizeDouble(price-InpTP*point, digits); + } + + if(!ExtTrade.Sell(InpLot, Symbol(), price, stoploss, takeprofit)) + { + PrintFormat("Failed %s sell at %G (sl=%G tp=%G) failed. Bid=%G error=%d", + Symbol(), price, stoploss, takeprofit, ExtSymbolInfo.Bid(), GetLastError()); + ExtTrade.PrintResult(); + Print(" "); + return(false); + } + } + + return(true); + } +//+------------------------------------------------------------------+ +//| Close a position based on the specified signal | +//+------------------------------------------------------------------+ +void CloseBySignal(int type_close) + { +//--- if there is no signal to close, return successful completion + if(type_close==SIGNAL_NOT) + return; +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalClose)==0) + return; + +//--- closing direction + long type; + switch(type_close) + { + case CLOSE_SHORT: + type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + type=POSITION_TYPE_BUY; + break; + default: + Print("Error! Signal to close not detected"); + return; + } + +//--- check all positions and close ours based on the signal + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + if(PositionGetInteger(POSITION_TYPE)==type) + { + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Close positions upon holding time expiration in bars | +//+------------------------------------------------------------------+ +void CloseByTime() + { +//--- if there are no positions opened by our EA + if(PositionExist(ExtSignalOpen)==0) + return; + +//--- check all positions and close ours based on the holding time in bars + int positions=PositionsTotal(); + for(int i=positions-1; i>=0; i--) + { + ulong ticket=PositionGetTicket(i); + if(ticket!=0) + { + //--- get the name of the symbol and the position id (magic) + string symbol=PositionGetString(POSITION_SYMBOL); + long magic =PositionGetInteger(POSITION_MAGIC); + //--- if they correspond to our values + if(symbol==Symbol() && magic==InpMagicNumber) + { + //--- position opening time + datetime open_time=(datetime)PositionGetInteger(POSITION_TIME); + //--- check position holding time in bars + if(BarsHold(open_time)>=(int)InpDuration) + { + Print("\r\nTime to close position #", ticket); + ExtTrade.PositionClose(ticket, InpSlippage); + ExtTrade.PrintResult(); + Print(" "); + } + } + } + } + } +//+------------------------------------------------------------------+ +//| Returns true if there are open positions | +//+------------------------------------------------------------------+ +bool PositionExist(int signal_direction) + { + bool check_type=(signal_direction!=SIGNAL_NOT); + +//--- what positions to search + ENUM_POSITION_TYPE search_type=WRONG_VALUE; + if(check_type) + switch(signal_direction) + { + case SIGNAL_BUY: + search_type=POSITION_TYPE_BUY; + break; + case SIGNAL_SELL: + search_type=POSITION_TYPE_SELL; + break; + case CLOSE_LONG: + search_type=POSITION_TYPE_BUY; + break; + case CLOSE_SHORT: + search_type=POSITION_TYPE_SELL; + break; + default: + //--- entry direction is not specified; nothing to search + return(false); + } + +//--- go through the list of all positions + int positions=PositionsTotal(); + for(int i=0; i=(int)InpDuration)) + return(true); + } + } + } +//--- open position not found + return(false); + } +//+------------------------------------------------------------------+ +//| Checks position closing time in bars | +//+------------------------------------------------------------------+ +int BarsHold(datetime open_time) + { +//--- first run a basic simple check + if(TimeCurrent()-open_timeAvgBody(1)) && // long body of the white candlestick (long white) + (Close(1)Open(2)) && // close within the previous candlestick body (white) + (MidOpenClose(2)>CloseAvg(2)) && // uptrend + (Open(1)>High(2))) // open above the previous day's High price (open at new high) + { + ExtPatternDetected=true; + ExtSignalOpen=SIGNAL_SELL; + ExtPatternInfo="\r\nDark Cloud Cover detected"; + ExtDirection="Sell"; + return(true); + } + +//--- check Piercing Line + if((Close(1)-Open(1)>AvgBody(1)) && // long body of the white candlestick (long white) + (Open(2)-Close(2)>AvgBody(1)) && // long body of the previous black candlestick (long black) + (Close(1)>Close(2)) && // close within the body + (Close(1)70)) + { + ExtConfirmed=true; + ExtPatternInfo+="\r\n Confirmed: StochSignal>70"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Check if there is a signal to close | +//+------------------------------------------------------------------+ +bool CheckCloseSignal() + { + ExtSignalClose=false; +//--- if there is a signal to enter the market, do not check the signal to close + if(ExtSignalOpen!=SIGNAL_NOT) + return(true); + +//--- check if there is a signal to close a long position + if(((StochSignal(1)<80) && (StochSignal(2)>80))|| // 80 crossed downwards + ((StochSignal(1)<20) && (StochSignal(2)>20))) // 20 crossed downwards + { + //--- there is a signal to close a long position + ExtSignalClose=CLOSE_LONG; + ExtDirection="Long"; + } + +//--- check if there is a signal to close a short position + if((((StochSignal(1)>20) && (StochSignal(2)<20)) || // 20 crossed upwards + ((StochSignal(1)>80) && (StochSignal(2)<80)))) // 80 crossed upwards + { + //--- there is a signal to close a short position + ExtSignalClose=CLOSE_SHORT; + ExtDirection="Short"; + } + +//--- successful completion of the check + return(true); + } +//+------------------------------------------------------------------+ +//| Stochastic indicator value at the specified bar | +//+------------------------------------------------------------------+ +double StochSignal(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtIndicatorHandle, SIGNAL_LINE, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the iStochastic indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ +//| SMA value at the specified bar | +//+------------------------------------------------------------------+ +double CloseAvg(int index) + { + double indicator_values[]; + if(CopyBuffer(ExtTrendMAHandle, 0, index, 1, indicator_values)<0) + { + //--- if the copying fails, report the error code + PrintFormat("Failed to copy data from the Simple Moving Average indicator, error code %d", GetLastError()); + return(EMPTY_VALUE); + } + return(indicator_values[0]); + } +//+------------------------------------------------------------------+ diff --git a/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer CCI.ex5 b/MQLTestWorkspace/BKPS/Old/Experts/Free Robots/HangingMan Hammer CCI.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..3a35ed2573a144160a195f760cfcca08f9156a1b GIT binary patch literal 49422 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