From 420192d339c7a93b771d44e7948e5516326ac047 Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Wed, 7 Feb 2024 14:46:54 +0330 Subject: [PATCH] add contents from MQL5 ... --- BKPS/Projects.7z | Bin 0 -> 206198 bytes BKPS/Temp/XEmptyPreparedProjet.zip | Bin 0 -> 184021 bytes ...-saherelm.xau5.provider.indicators.lib.mq5 | 9556 +++++++++++ BKPS/Temp/xau5.indicators.provider.txt | 8161 +++++++++ .../Classes/x-saherelm.class.lib.ex5 | Bin 0 -> 11268 bytes .../Classes/x-saherelm.class.lib.mq5 | 10316 ++++++++++++ BKPS/XAU5-0.43/Classes/x-saherelm.nn.lib.ex5 | Bin 0 -> 4062 bytes BKPS/XAU5-0.43/Classes/x-saherelm.nn.lib.mq5 | 258 + .../Classes/x-saherelm.provider.lib.ex5 | Bin 0 -> 15486 bytes .../Classes/x-saherelm.provider.lib.mq5 | 4430 +++++ BKPS/XAU5-0.43/Experts/x-saherelm.xeu5.ea.ex5 | Bin 0 -> 468098 bytes BKPS/XAU5-0.43/Experts/x-saherelm.xeu5.ea.mq5 | 347 + .../x-saherelm.xama.indicator.helper.lib.ex5 | Bin 0 -> 8874 bytes .../x-saherelm.xama.indicator.helper.lib.mq5 | 607 + ...x-saherelm.xchlh.oscillator.helper.lib.ex5 | Bin 0 -> 10028 bytes ...x-saherelm.xchlh.oscillator.helper.lib.mq5 | 1032 ++ ...x-saherelm.xchma.oscillator.helper.lib.ex5 | Bin 0 -> 10674 bytes ...x-saherelm.xchma.oscillator.helper.lib.mq5 | 2229 +++ .../x-saherelm.xfi.oscillator.helper.lib.ex5 | Bin 0 -> 9288 bytes .../x-saherelm.xfi.oscillator.helper.lib.mq5 | 358 + .../x-saherelm.xlh.indicator.helper.lib.ex5 | Bin 0 -> 8762 bytes .../x-saherelm.xlh.indicator.helper.lib.mq5 | 668 + .../x-saherelm.xobd.indicator.helper.lib.ex5 | Bin 0 -> 8912 bytes .../x-saherelm.xobd.indicator.helper.lib.mq5 | 249 + .../x-saherelm.xrsi.oscillator.helper.lib.ex5 | Bin 0 -> 9218 bytes .../x-saherelm.xrsi.oscillator.helper.lib.mq5 | 433 + .../x-saherelm.xtd.oscillator.helper.lib.ex5 | Bin 0 -> 8984 bytes .../x-saherelm.xtd.oscillator.helper.lib.mq5 | 931 ++ .../x-saherelm.xtm.indicator.helper.lib.ex5 | Bin 0 -> 9044 bytes .../x-saherelm.xtm.indicator.helper.lib.mq5 | 598 + .../x-saherelm.xts.oscillator.helper.lib.ex5 | Bin 0 -> 9788 bytes .../x-saherelm.xts.oscillator.helper.lib.mq5 | 1179 ++ .../Indicators/x-saherelm.xama.indicator.ex5 | Bin 0 -> 17156 bytes .../Indicators/x-saherelm.xama.indicator.mq5 | 353 + .../x-saherelm.xchlh.oscillator.ex5 | Bin 0 -> 53266 bytes .../x-saherelm.xchlh.oscillator.mq5 | 753 + .../x-saherelm.xchma.oscillator.ex5 | Bin 0 -> 58818 bytes .../x-saherelm.xchma.oscillator.mq5 | 1153 ++ .../Indicators/x-saherelm.xfi.oscillator.ex5 | Bin 0 -> 15794 bytes .../Indicators/x-saherelm.xfi.oscillator.mq5 | 317 + .../Indicators/x-saherelm.xlh.indicator.ex5 | Bin 0 -> 18434 bytes .../Indicators/x-saherelm.xlh.indicator.mq5 | 346 + .../Indicators/x-saherelm.xobd.indicator.ex5 | Bin 0 -> 22676 bytes .../Indicators/x-saherelm.xobd.indicator.mq5 | 390 + .../Indicators/x-saherelm.xrsi.oscillator.ex5 | Bin 0 -> 22526 bytes .../Indicators/x-saherelm.xrsi.oscillator.mq5 | 397 + .../Indicators/x-saherelm.xtd.oscillator.ex5 | Bin 0 -> 23850 bytes .../Indicators/x-saherelm.xtd.oscillator.mq5 | 465 + .../Indicators/x-saherelm.xtm.indicator.ex5 | Bin 0 -> 17794 bytes .../Indicators/x-saherelm.xtm.indicator.mq5 | 349 + .../Indicators/x-saherelm.xts.oscillator.ex5 | Bin 0 -> 40706 bytes .../Indicators/x-saherelm.xts.oscillator.mq5 | 558 + .../Libraries/x-saherelm.alert.lib.ex5 | Bin 0 -> 10278 bytes .../Libraries/x-saherelm.alert.lib.mq5 | 200 + .../Libraries/x-saherelm.common.lib.ex5 | Bin 0 -> 6556 bytes .../Libraries/x-saherelm.common.lib.mq5 | 4429 +++++ .../Libraries/x-saherelm.draw.lib.ex5 | Bin 0 -> 9812 bytes .../Libraries/x-saherelm.draw.lib.mq5 | 2345 +++ .../Libraries/x-saherelm.http.lib.ex5 | Bin 0 -> 4306 bytes .../Libraries/x-saherelm.http.lib.mq5 | 177 + .../Libraries/x-saherelm.log.lib.ex5 | Bin 0 -> 8660 bytes .../Libraries/x-saherelm.log.lib.mq5 | 261 + .../Libraries/x-saherelm.models.lib.ex5 | Bin 0 -> 5794 bytes .../Libraries/x-saherelm.models.lib.mq5 | 438 + ...-saherelm.xeu5.provider.indicators.lib.ex5 | Bin 0 -> 42320 bytes ...-saherelm.xeu5.provider.indicators.lib.mq5 | 13599 +++++++++++++++ .../x-saherelm.xeu5.provider.inputs.lib.ex5 | Bin 0 -> 29352 bytes .../x-saherelm.xeu5.provider.inputs.lib.mq5 | 280 + .../x-saherelm.xeu5.provider.lib.ex5 | Bin 0 -> 42792 bytes .../x-saherelm.xeu5.provider.lib.mq5 | 1370 ++ .../Classes/x-saherelm.class.lib.mq5 | 10316 ++++++++++++ .../Classes/x-saherelm.nn.lib.mq5 | 258 + .../Classes/x-saherelm.provider.lib.mq5 | 4430 +++++ .../Experts/x-saherelm.xau5.ea.mq5 | 395 + .../x-saherelm.xama.indicator.helper.lib.mq5 | 607 + ...x-saherelm.xchlh.oscillator.helper.lib.mq5 | 1032 ++ ...x-saherelm.xchma.oscillator.helper.lib.mq5 | 2229 +++ .../x-saherelm.xfi.oscillator.helper.lib.mq5 | 358 + .../x-saherelm.xlh.indicator.helper.lib.mq5 | 668 + .../x-saherelm.xobd.indicator.helper.lib.mq5 | 249 + .../x-saherelm.xrsi.oscillator.helper.lib.mq5 | 433 + .../x-saherelm.xtd.oscillator.helper.lib.mq5 | 931 ++ .../x-saherelm.xtm.indicator.helper.lib.mq5 | 598 + .../x-saherelm.xts.oscillator.helper.lib.mq5 | 1179 ++ .../Indicators/x-saherelm.xama.indicator.mq5 | 353 + .../x-saherelm.xchlh.oscillator.mq5 | 753 + .../x-saherelm.xchma.oscillator.mq5 | 1153 ++ .../x-saherelm.xctimer.indicator.mq5 | 206 + .../Indicators/x-saherelm.xfi.oscillator.mq5 | 317 + .../Indicators/x-saherelm.xlh.indicator.mq5 | 346 + .../Indicators/x-saherelm.xobd.indicator.mq5 | 390 + .../Indicators/x-saherelm.xrsi.oscillator.mq5 | 397 + .../Indicators/x-saherelm.xtd.oscillator.mq5 | 465 + .../Indicators/x-saherelm.xtm.indicator.mq5 | 349 + .../Indicators/x-saherelm.xts.oscillator.mq5 | 558 + .../Libraries/x-saherelm.alert.lib.mq5 | 200 + .../Libraries/x-saherelm.common.lib.mq5 | 4429 +++++ .../Libraries/x-saherelm.draw.lib.mq5 | 2345 +++ .../Libraries/x-saherelm.http.lib.mq5 | 177 + .../Libraries/x-saherelm.log.lib.mq5 | 261 + .../Libraries/x-saherelm.models.lib.mq5 | 438 + ...-saherelm.xau5.provider.indicators.lib.mq5 | 12330 ++++++++++++++ .../x-saherelm.xau5.provider.inputs.lib.mq5 | 283 + .../x-saherelm.xau5.provider.lib.mq5 | 1373 ++ Projects/XAU5/Classes/.gitkeep | 0 .../XAU5/Classes/x-saherelm.class.lib.mq5 | 10316 ++++++++++++ Projects/XAU5/Classes/x-saherelm.nn.lib.mq5 | 258 + .../XAU5/Classes/x-saherelm.provider.lib.mq5 | 4430 +++++ Projects/XAU5/Documents/.gitkeep | 0 Projects/XAU5/Documents/Reports/.gitkeep | 0 Projects/XAU5/Documents/Settings/.gitkeep | 0 .../Documents/Settings/xau5.longs.vbb.set | Bin 0 -> 7568 bytes .../XAU5/Documents/Settings/xau5.xsi.vbb.set | Bin 0 -> 7584 bytes Projects/XAU5/Experts/.gitkeep | 0 Projects/XAU5/Experts/x-saherelm.xau5.ea.mq5 | 395 + Projects/XAU5/Helpers/.gitkeep | 0 .../x-saherelm.xama.indicator.helper.lib.mq5 | 607 + ...x-saherelm.xchlh.oscillator.helper.lib.mq5 | 1032 ++ ...x-saherelm.xchma.oscillator.helper.lib.mq5 | 2229 +++ .../x-saherelm.xfi.oscillator.helper.lib.mq5 | 358 + .../x-saherelm.xlh.indicator.helper.lib.mq5 | 668 + .../x-saherelm.xobd.indicator.helper.lib.mq5 | 249 + .../x-saherelm.xrsi.oscillator.helper.lib.mq5 | 433 + .../x-saherelm.xtd.oscillator.helper.lib.mq5 | 931 ++ .../x-saherelm.xtm.indicator.helper.lib.mq5 | 598 + .../x-saherelm.xts.oscillator.helper.lib.mq5 | 1179 ++ Projects/XAU5/Indicators/.gitkeep | 0 .../Indicators/x-saherelm.xama.indicator.mq5 | 353 + .../x-saherelm.xchlh.oscillator.mq5 | 753 + .../x-saherelm.xchma.oscillator.mq5 | 1153 ++ .../x-saherelm.xctimer.indicator.mq5 | 206 + .../Indicators/x-saherelm.xfi.oscillator.mq5 | 317 + .../Indicators/x-saherelm.xlh.indicator.mq5 | 346 + .../Indicators/x-saherelm.xobd.indicator.mq5 | 390 + .../Indicators/x-saherelm.xrsi.oscillator.mq5 | 397 + .../Indicators/x-saherelm.xtd.oscillator.mq5 | 465 + .../Indicators/x-saherelm.xtm.indicator.mq5 | 349 + .../Indicators/x-saherelm.xts.oscillator.mq5 | 558 + Projects/XAU5/Libraries/.gitkeep | 0 .../XAU5/Libraries/x-saherelm.alert.lib.mq5 | 200 + .../XAU5/Libraries/x-saherelm.common.lib.mq5 | 4429 +++++ .../XAU5/Libraries/x-saherelm.draw.lib.mq5 | 2345 +++ .../XAU5/Libraries/x-saherelm.http.lib.mq5 | 177 + .../XAU5/Libraries/x-saherelm.log.lib.mq5 | 261 + .../XAU5/Libraries/x-saherelm.models.lib.mq5 | 438 + Projects/XAU5/Providers/.gitkeep | 0 ...-saherelm.xau5.provider.indicators.lib.mq5 | 12330 ++++++++++++++ .../x-saherelm.xau5.provider.inputs.lib.mq5 | 283 + .../x-saherelm.xau5.provider.lib.mq5 | 1373 ++ Projects/XAU5/Settings/.gitkeep | 0 Projects/XAU5/Settings/dev.set | Bin 0 -> 7732 bytes Projects/XAU5/Settings/longs.vbb.set | Bin 0 -> 7732 bytes Projects/XAU5/Settings/shorts.vbb.set | Bin 0 -> 7732 bytes Projects/XAU5/Settings/x-au5.set | Bin 0 -> 7716 bytes Projects/XAU5/Templates/.gitkeep | 0 Projects/XEU5/Classes/.gitkeep | 0 .../XEU5/Classes/x-saherelm.class.lib.mq5 | 10316 ++++++++++++ Projects/XEU5/Classes/x-saherelm.nn.lib.mq5 | 258 + .../XEU5/Classes/x-saherelm.provider.lib.mq5 | 4430 +++++ Projects/XEU5/Documents/.gitkeep | 0 Projects/XEU5/Documents/Reports/.gitkeep | 0 Projects/XEU5/Documents/Settings/.gitkeep | 0 Projects/XEU5/Experts/.gitkeep | 0 Projects/XEU5/Experts/x-saherelm.xeu5.ea.mq5 | 396 + Projects/XEU5/Helpers/.gitkeep | 0 .../x-saherelm.xama.indicator.helper.lib.mq5 | 607 + ...x-saherelm.xchlh.oscillator.helper.lib.mq5 | 1032 ++ ...x-saherelm.xchma.oscillator.helper.lib.mq5 | 2229 +++ .../x-saherelm.xfi.oscillator.helper.lib.mq5 | 358 + .../x-saherelm.xlh.indicator.helper.lib.mq5 | 668 + .../x-saherelm.xobd.indicator.helper.lib.mq5 | 249 + .../x-saherelm.xrsi.oscillator.helper.lib.mq5 | 433 + .../x-saherelm.xtd.oscillator.helper.lib.mq5 | 931 ++ .../x-saherelm.xtm.indicator.helper.lib.mq5 | 598 + .../x-saherelm.xts.oscillator.helper.lib.mq5 | 1179 ++ Projects/XEU5/Indicators/.gitkeep | 0 .../Indicators/x-saherelm.xama.indicator.mq5 | 353 + .../x-saherelm.xchlh.oscillator.mq5 | 753 + .../x-saherelm.xchma.oscillator.mq5 | 1153 ++ .../x-saherelm.xctimer.indicator.mq5 | 206 + .../Indicators/x-saherelm.xfi.oscillator.mq5 | 317 + .../Indicators/x-saherelm.xlh.indicator.mq5 | 346 + .../Indicators/x-saherelm.xobd.indicator.mq5 | 390 + .../Indicators/x-saherelm.xrsi.oscillator.mq5 | 397 + .../Indicators/x-saherelm.xtd.oscillator.mq5 | 465 + .../Indicators/x-saherelm.xtm.indicator.mq5 | 349 + .../Indicators/x-saherelm.xts.oscillator.mq5 | 558 + Projects/XEU5/Libraries/.gitkeep | 0 .../XEU5/Libraries/x-saherelm.alert.lib.mq5 | 200 + .../XEU5/Libraries/x-saherelm.common.lib.mq5 | 4429 +++++ .../XEU5/Libraries/x-saherelm.draw.lib.mq5 | 2345 +++ .../XEU5/Libraries/x-saherelm.http.lib.mq5 | 177 + .../XEU5/Libraries/x-saherelm.log.lib.mq5 | 261 + .../XEU5/Libraries/x-saherelm.models.lib.mq5 | 438 + Projects/XEU5/Providers/.gitkeep | 0 ...-saherelm.xeu5.provider.indicators.lib.mq5 | 13610 ++++++++++++++++ .../x-saherelm.xeu5.provider.inputs.lib.mq5 | 283 + .../x-saherelm.xeu5.provider.lib.mq5 | 1373 ++ Projects/XEU5/Settings/.gitkeep | 0 Projects/XEU5/Settings/xeu5.longs.vbb.set | Bin 0 -> 7584 bytes Projects/XEU5/Settings/xeu5.shorts.vbb.set | Bin 0 -> 7584 bytes Projects/XEU5/Settings/xeu5.vbb.set | Bin 0 -> 7566 bytes Projects/XEU5/Templates/.gitkeep | 0 Projects/XTEST/Classes/.gitkeep | 0 .../XTEST/Classes/x-saherelm.class.lib.ex5 | Bin 0 -> 10152 bytes .../XTEST/Classes/x-saherelm.class.lib.mq5 | 10316 ++++++++++++ Projects/XTEST/Experts/.gitkeep | 0 .../XTEST/Experts/x-saherelm.xtest.ea.ex5 | Bin 0 -> 38456 bytes .../XTEST/Experts/x-saherelm.xtest.ea.mq5 | 572 + Projects/XTEST/Helpers/.gitkeep | 0 Projects/XTEST/Indicators/.gitkeep | 0 Projects/XTEST/Libraries/.gitkeep | 0 .../XTEST/Libraries/x-saherelm.alert.lib.ex5 | Bin 0 -> 8690 bytes .../XTEST/Libraries/x-saherelm.alert.lib.mq5 | 200 + .../XTEST/Libraries/x-saherelm.common.lib.ex5 | Bin 0 -> 6510 bytes .../XTEST/Libraries/x-saherelm.common.lib.mq5 | 4429 +++++ .../XTEST/Libraries/x-saherelm.draw.lib.ex5 | Bin 0 -> 7534 bytes .../XTEST/Libraries/x-saherelm.draw.lib.mq5 | 2345 +++ .../XTEST/Libraries/x-saherelm.http.lib.ex5 | Bin 0 -> 4024 bytes .../XTEST/Libraries/x-saherelm.http.lib.mq5 | 177 + .../XTEST/Libraries/x-saherelm.log.lib.ex5 | Bin 0 -> 7472 bytes .../XTEST/Libraries/x-saherelm.log.lib.mq5 | 261 + .../XTEST/Libraries/x-saherelm.models.lib.ex5 | Bin 0 -> 6612 bytes .../XTEST/Libraries/x-saherelm.models.lib.mq5 | 438 + Projects/XTEST/Providers/.gitkeep | 0 Projects/XTEST/Settings/.gitkeep | 0 Projects/XTEST/Templates/.gitkeep | 0 227 files changed, 241969 insertions(+) create mode 100644 BKPS/Projects.7z create mode 100644 BKPS/Temp/XEmptyPreparedProjet.zip create mode 100644 BKPS/Temp/x-saherelm.xau5.provider.indicators.lib.mq5 create mode 100644 BKPS/Temp/xau5.indicators.provider.txt create mode 100644 BKPS/XAU5-0.43/Classes/x-saherelm.class.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Classes/x-saherelm.class.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Classes/x-saherelm.nn.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Classes/x-saherelm.nn.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Classes/x-saherelm.provider.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Classes/x-saherelm.provider.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Experts/x-saherelm.xeu5.ea.ex5 create mode 100644 BKPS/XAU5-0.43/Experts/x-saherelm.xeu5.ea.mq5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xama.indicator.helper.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xama.indicator.helper.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xchlh.oscillator.helper.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xchlh.oscillator.helper.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xchma.oscillator.helper.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xchma.oscillator.helper.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xfi.oscillator.helper.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xfi.oscillator.helper.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xlh.indicator.helper.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xlh.indicator.helper.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xobd.indicator.helper.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xobd.indicator.helper.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xrsi.oscillator.helper.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xrsi.oscillator.helper.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xtd.oscillator.helper.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xtd.oscillator.helper.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xtm.indicator.helper.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xtm.indicator.helper.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xts.oscillator.helper.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Helpers/x-saherelm.xts.oscillator.helper.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xama.indicator.ex5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xama.indicator.mq5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xchlh.oscillator.ex5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xchlh.oscillator.mq5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xchma.oscillator.ex5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xchma.oscillator.mq5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xfi.oscillator.ex5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xfi.oscillator.mq5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xlh.indicator.ex5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xlh.indicator.mq5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xobd.indicator.ex5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xobd.indicator.mq5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xrsi.oscillator.ex5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xrsi.oscillator.mq5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xtd.oscillator.ex5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xtd.oscillator.mq5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xtm.indicator.ex5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xtm.indicator.mq5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xts.oscillator.ex5 create mode 100644 BKPS/XAU5-0.43/Indicators/x-saherelm.xts.oscillator.mq5 create mode 100644 BKPS/XAU5-0.43/Libraries/x-saherelm.alert.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Libraries/x-saherelm.alert.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Libraries/x-saherelm.common.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Libraries/x-saherelm.common.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Libraries/x-saherelm.draw.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Libraries/x-saherelm.draw.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Libraries/x-saherelm.http.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Libraries/x-saherelm.http.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Libraries/x-saherelm.log.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Libraries/x-saherelm.log.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Libraries/x-saherelm.models.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Libraries/x-saherelm.models.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Providers/x-saherelm.xeu5.provider.indicators.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Providers/x-saherelm.xeu5.provider.indicators.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Providers/x-saherelm.xeu5.provider.inputs.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Providers/x-saherelm.xeu5.provider.inputs.lib.mq5 create mode 100644 BKPS/XAU5-0.43/Providers/x-saherelm.xeu5.provider.lib.ex5 create mode 100644 BKPS/XAU5-0.43/Providers/x-saherelm.xeu5.provider.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Classes/x-saherelm.class.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Classes/x-saherelm.nn.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Classes/x-saherelm.provider.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Experts/x-saherelm.xau5.ea.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Helpers/x-saherelm.xama.indicator.helper.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Helpers/x-saherelm.xchlh.oscillator.helper.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Helpers/x-saherelm.xchma.oscillator.helper.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Helpers/x-saherelm.xfi.oscillator.helper.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Helpers/x-saherelm.xlh.indicator.helper.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Helpers/x-saherelm.xobd.indicator.helper.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Helpers/x-saherelm.xrsi.oscillator.helper.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Helpers/x-saherelm.xtd.oscillator.helper.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Helpers/x-saherelm.xtm.indicator.helper.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Helpers/x-saherelm.xts.oscillator.helper.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Indicators/x-saherelm.xama.indicator.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Indicators/x-saherelm.xchlh.oscillator.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Indicators/x-saherelm.xchma.oscillator.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Indicators/x-saherelm.xctimer.indicator.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Indicators/x-saherelm.xfi.oscillator.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Indicators/x-saherelm.xlh.indicator.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Indicators/x-saherelm.xobd.indicator.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Indicators/x-saherelm.xrsi.oscillator.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Indicators/x-saherelm.xtd.oscillator.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Indicators/x-saherelm.xtm.indicator.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Indicators/x-saherelm.xts.oscillator.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Libraries/x-saherelm.alert.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Libraries/x-saherelm.common.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Libraries/x-saherelm.draw.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Libraries/x-saherelm.http.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Libraries/x-saherelm.log.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Libraries/x-saherelm.models.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Providers/x-saherelm.xau5.provider.indicators.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Providers/x-saherelm.xau5.provider.inputs.lib.mq5 create mode 100644 BKPS/XAU5-14021118-Full/Providers/x-saherelm.xau5.provider.lib.mq5 create mode 100644 Projects/XAU5/Classes/.gitkeep create mode 100644 Projects/XAU5/Classes/x-saherelm.class.lib.mq5 create mode 100644 Projects/XAU5/Classes/x-saherelm.nn.lib.mq5 create mode 100644 Projects/XAU5/Classes/x-saherelm.provider.lib.mq5 create mode 100644 Projects/XAU5/Documents/.gitkeep create mode 100644 Projects/XAU5/Documents/Reports/.gitkeep create mode 100644 Projects/XAU5/Documents/Settings/.gitkeep create mode 100644 Projects/XAU5/Documents/Settings/xau5.longs.vbb.set create mode 100644 Projects/XAU5/Documents/Settings/xau5.xsi.vbb.set create mode 100644 Projects/XAU5/Experts/.gitkeep create mode 100644 Projects/XAU5/Experts/x-saherelm.xau5.ea.mq5 create mode 100644 Projects/XAU5/Helpers/.gitkeep create mode 100644 Projects/XAU5/Helpers/x-saherelm.xama.indicator.helper.lib.mq5 create mode 100644 Projects/XAU5/Helpers/x-saherelm.xchlh.oscillator.helper.lib.mq5 create mode 100644 Projects/XAU5/Helpers/x-saherelm.xchma.oscillator.helper.lib.mq5 create mode 100644 Projects/XAU5/Helpers/x-saherelm.xfi.oscillator.helper.lib.mq5 create mode 100644 Projects/XAU5/Helpers/x-saherelm.xlh.indicator.helper.lib.mq5 create mode 100644 Projects/XAU5/Helpers/x-saherelm.xobd.indicator.helper.lib.mq5 create mode 100644 Projects/XAU5/Helpers/x-saherelm.xrsi.oscillator.helper.lib.mq5 create mode 100644 Projects/XAU5/Helpers/x-saherelm.xtd.oscillator.helper.lib.mq5 create mode 100644 Projects/XAU5/Helpers/x-saherelm.xtm.indicator.helper.lib.mq5 create mode 100644 Projects/XAU5/Helpers/x-saherelm.xts.oscillator.helper.lib.mq5 create mode 100644 Projects/XAU5/Indicators/.gitkeep create mode 100644 Projects/XAU5/Indicators/x-saherelm.xama.indicator.mq5 create mode 100644 Projects/XAU5/Indicators/x-saherelm.xchlh.oscillator.mq5 create mode 100644 Projects/XAU5/Indicators/x-saherelm.xchma.oscillator.mq5 create mode 100644 Projects/XAU5/Indicators/x-saherelm.xctimer.indicator.mq5 create mode 100644 Projects/XAU5/Indicators/x-saherelm.xfi.oscillator.mq5 create mode 100644 Projects/XAU5/Indicators/x-saherelm.xlh.indicator.mq5 create mode 100644 Projects/XAU5/Indicators/x-saherelm.xobd.indicator.mq5 create mode 100644 Projects/XAU5/Indicators/x-saherelm.xrsi.oscillator.mq5 create mode 100644 Projects/XAU5/Indicators/x-saherelm.xtd.oscillator.mq5 create mode 100644 Projects/XAU5/Indicators/x-saherelm.xtm.indicator.mq5 create mode 100644 Projects/XAU5/Indicators/x-saherelm.xts.oscillator.mq5 create mode 100644 Projects/XAU5/Libraries/.gitkeep create mode 100644 Projects/XAU5/Libraries/x-saherelm.alert.lib.mq5 create mode 100644 Projects/XAU5/Libraries/x-saherelm.common.lib.mq5 create mode 100644 Projects/XAU5/Libraries/x-saherelm.draw.lib.mq5 create mode 100644 Projects/XAU5/Libraries/x-saherelm.http.lib.mq5 create mode 100644 Projects/XAU5/Libraries/x-saherelm.log.lib.mq5 create mode 100644 Projects/XAU5/Libraries/x-saherelm.models.lib.mq5 create mode 100644 Projects/XAU5/Providers/.gitkeep create mode 100644 Projects/XAU5/Providers/x-saherelm.xau5.provider.indicators.lib.mq5 create mode 100644 Projects/XAU5/Providers/x-saherelm.xau5.provider.inputs.lib.mq5 create mode 100644 Projects/XAU5/Providers/x-saherelm.xau5.provider.lib.mq5 create mode 100644 Projects/XAU5/Settings/.gitkeep create mode 100644 Projects/XAU5/Settings/dev.set create mode 100644 Projects/XAU5/Settings/longs.vbb.set create mode 100644 Projects/XAU5/Settings/shorts.vbb.set create mode 100644 Projects/XAU5/Settings/x-au5.set create mode 100644 Projects/XAU5/Templates/.gitkeep create mode 100644 Projects/XEU5/Classes/.gitkeep create mode 100644 Projects/XEU5/Classes/x-saherelm.class.lib.mq5 create mode 100644 Projects/XEU5/Classes/x-saherelm.nn.lib.mq5 create mode 100644 Projects/XEU5/Classes/x-saherelm.provider.lib.mq5 create mode 100644 Projects/XEU5/Documents/.gitkeep create mode 100644 Projects/XEU5/Documents/Reports/.gitkeep create mode 100644 Projects/XEU5/Documents/Settings/.gitkeep create mode 100644 Projects/XEU5/Experts/.gitkeep create mode 100644 Projects/XEU5/Experts/x-saherelm.xeu5.ea.mq5 create mode 100644 Projects/XEU5/Helpers/.gitkeep create mode 100644 Projects/XEU5/Helpers/x-saherelm.xama.indicator.helper.lib.mq5 create mode 100644 Projects/XEU5/Helpers/x-saherelm.xchlh.oscillator.helper.lib.mq5 create mode 100644 Projects/XEU5/Helpers/x-saherelm.xchma.oscillator.helper.lib.mq5 create mode 100644 Projects/XEU5/Helpers/x-saherelm.xfi.oscillator.helper.lib.mq5 create mode 100644 Projects/XEU5/Helpers/x-saherelm.xlh.indicator.helper.lib.mq5 create mode 100644 Projects/XEU5/Helpers/x-saherelm.xobd.indicator.helper.lib.mq5 create mode 100644 Projects/XEU5/Helpers/x-saherelm.xrsi.oscillator.helper.lib.mq5 create mode 100644 Projects/XEU5/Helpers/x-saherelm.xtd.oscillator.helper.lib.mq5 create mode 100644 Projects/XEU5/Helpers/x-saherelm.xtm.indicator.helper.lib.mq5 create mode 100644 Projects/XEU5/Helpers/x-saherelm.xts.oscillator.helper.lib.mq5 create mode 100644 Projects/XEU5/Indicators/.gitkeep create mode 100644 Projects/XEU5/Indicators/x-saherelm.xama.indicator.mq5 create mode 100644 Projects/XEU5/Indicators/x-saherelm.xchlh.oscillator.mq5 create mode 100644 Projects/XEU5/Indicators/x-saherelm.xchma.oscillator.mq5 create mode 100644 Projects/XEU5/Indicators/x-saherelm.xctimer.indicator.mq5 create mode 100644 Projects/XEU5/Indicators/x-saherelm.xfi.oscillator.mq5 create mode 100644 Projects/XEU5/Indicators/x-saherelm.xlh.indicator.mq5 create mode 100644 Projects/XEU5/Indicators/x-saherelm.xobd.indicator.mq5 create mode 100644 Projects/XEU5/Indicators/x-saherelm.xrsi.oscillator.mq5 create mode 100644 Projects/XEU5/Indicators/x-saherelm.xtd.oscillator.mq5 create mode 100644 Projects/XEU5/Indicators/x-saherelm.xtm.indicator.mq5 create mode 100644 Projects/XEU5/Indicators/x-saherelm.xts.oscillator.mq5 create mode 100644 Projects/XEU5/Libraries/.gitkeep create mode 100644 Projects/XEU5/Libraries/x-saherelm.alert.lib.mq5 create mode 100644 Projects/XEU5/Libraries/x-saherelm.common.lib.mq5 create mode 100644 Projects/XEU5/Libraries/x-saherelm.draw.lib.mq5 create mode 100644 Projects/XEU5/Libraries/x-saherelm.http.lib.mq5 create mode 100644 Projects/XEU5/Libraries/x-saherelm.log.lib.mq5 create mode 100644 Projects/XEU5/Libraries/x-saherelm.models.lib.mq5 create mode 100644 Projects/XEU5/Providers/.gitkeep create mode 100644 Projects/XEU5/Providers/x-saherelm.xeu5.provider.indicators.lib.mq5 create mode 100644 Projects/XEU5/Providers/x-saherelm.xeu5.provider.inputs.lib.mq5 create mode 100644 Projects/XEU5/Providers/x-saherelm.xeu5.provider.lib.mq5 create mode 100644 Projects/XEU5/Settings/.gitkeep create mode 100644 Projects/XEU5/Settings/xeu5.longs.vbb.set create mode 100644 Projects/XEU5/Settings/xeu5.shorts.vbb.set create mode 100644 Projects/XEU5/Settings/xeu5.vbb.set create mode 100644 Projects/XEU5/Templates/.gitkeep create mode 100644 Projects/XTEST/Classes/.gitkeep create mode 100644 Projects/XTEST/Classes/x-saherelm.class.lib.ex5 create mode 100644 Projects/XTEST/Classes/x-saherelm.class.lib.mq5 create mode 100644 Projects/XTEST/Experts/.gitkeep create mode 100644 Projects/XTEST/Experts/x-saherelm.xtest.ea.ex5 create mode 100644 Projects/XTEST/Experts/x-saherelm.xtest.ea.mq5 create mode 100644 Projects/XTEST/Helpers/.gitkeep create mode 100644 Projects/XTEST/Indicators/.gitkeep create mode 100644 Projects/XTEST/Libraries/.gitkeep create mode 100644 Projects/XTEST/Libraries/x-saherelm.alert.lib.ex5 create mode 100644 Projects/XTEST/Libraries/x-saherelm.alert.lib.mq5 create mode 100644 Projects/XTEST/Libraries/x-saherelm.common.lib.ex5 create mode 100644 Projects/XTEST/Libraries/x-saherelm.common.lib.mq5 create mode 100644 Projects/XTEST/Libraries/x-saherelm.draw.lib.ex5 create mode 100644 Projects/XTEST/Libraries/x-saherelm.draw.lib.mq5 create mode 100644 Projects/XTEST/Libraries/x-saherelm.http.lib.ex5 create mode 100644 Projects/XTEST/Libraries/x-saherelm.http.lib.mq5 create mode 100644 Projects/XTEST/Libraries/x-saherelm.log.lib.ex5 create mode 100644 Projects/XTEST/Libraries/x-saherelm.log.lib.mq5 create mode 100644 Projects/XTEST/Libraries/x-saherelm.models.lib.ex5 create mode 100644 Projects/XTEST/Libraries/x-saherelm.models.lib.mq5 create mode 100644 Projects/XTEST/Providers/.gitkeep create mode 100644 Projects/XTEST/Settings/.gitkeep create mode 100644 Projects/XTEST/Templates/.gitkeep diff --git a/BKPS/Projects.7z b/BKPS/Projects.7z new file mode 100644 index 0000000000000000000000000000000000000000..fd63b493f87768948412837131d01a4753caa2fb GIT binary patch literal 206198 zcmV(wK3vl(B?ABe0000b000000002up9ojz$(_IyT>uyEL=6RS z`$qCfftDUTSU<4Hd8;wd{cRGR+S3Ne_$0#Y;7{&Gb1@XXr7O2+(ik`w$&N=aofmFX z0$L2qlo84DF)B>ltqoR6V2M3?IpzfWB?}7jC(v0R-JIE~Yc-d^E3TBQX!4&p7+s1s zou+W9ahDHz;VRc|+J411x~n1z4aIW;2&A4O!N?)H;OB~~OrbW!IqVrH%3lz>WfMUf ziP)=^6MRC@=oRbBUpelV7Wo zO#r91MepAllRoAIoY|=ci9zw|6?N`4m(S^)I8IiI!_=&9k_nh&qos|*=QrDZmkR`sS*sTs;pOd(n59UF%0^>uC`;6A7x zQ0Nls-XkxS&3Cu7Q<|v(Ay~Druq;wUA_b!6{!>Udh(SrU_1;{Xa4>L2oV3Ni{JZ2t zA_5|-UU=97A$C(^ZnLTo8YsVh3Spfx0?$hHLJgOS;cV|1hRKoc69c>U)Z+|h-We-s zpAzxfipg8ba#gzySa)Iq8k|I-1DBtZcF?>I5>9{x=!^SJ#?v0drHie+*KkWm1=n>| z3uPmCBRclbY9ZD>W538?(*%~Pw!PPiIRUXoFIvoNqV?`xK{gXS`Nb+{uJd`+o3+vC zx?Na1H#JBcA}C2bzJ+ya54rb%4=L!HqWmu2$q`Rygi@ z#ERG9xWH6=c1}Nm1b$>7gCyYqvRCeE8~Z))(38ky#^y;)w{wsan4haQ3RN^(SQzOh z#`&;tmUr~t-dE+LRdQ$t$Y(~-Y)@*2Y^!RbL#DJ!6f^!yg1#$6M^~7I`|;=NnR?|e zXsQ_(RqjEfD_=7Sk*!JU6hxwf`%vL)bdHpIk?sGQm9R-%<+z1x7@m3l7Xd`o%$`)i zL9rWT9=f~xPwj(g28eE53*5{*(?&Amj-!+CsQyONCqT(|%UCm%fn2$DNGUpV@8r@0 z?4vj)NSLpbmW1@v7KdlyY$y@sZSk+k5elt23PdFVE8!pRI;dp3paG_L?Ze5BaZ)RZ@1ros(a72L)U6~xFzzs zcrO|@qdi8xvPeW~=~6iE^qi~+n-3jIkiY-<8z5&FRss_TEU=5Y0$dmXnRWi|WC6s1qU)}}sc74$PGkYp2BnV4&$U*sSyc`2bGYfoGn zxT+WDT7S&f36Y(52@M(+C7siK*^gs1dG81~6n8mTEu}usi9wV_727n-vaEP5)?+s~ zqm`8G)CF>SF>OYP?OF}~)<`^mkyX>C((}MZ8sWO10T-@w@s{EtD?J8rVRM$TuP2^^@$u^uOcBv5#$NIkV({;wTMQs=`NK9Td_zb_^u@@AOfYuKLJBK?ztyisxwRQ zEOL46!ai_mt4=Tnjf_sXeDJT`F3;S&o5!xY;Bp;b>BCp*F7hTCi_f*#!vzP0D7I(y z>3%JT1UE^6XLO9?bhZ^_VEUX=dYwsslp9mmM|t)NdS|v_aghmarLRfwnL;;IX0xsK z%h{J5<18Vh0S*V`0-!reBvH~}Vi9R;Pjw_)ozKL``IbrSD}}!tSLoZP=Q183cA^ZO ze;S@Ny0_xakMhy@b|;cU8&h{^g?-QN=%>qTD)T)`DT%MA)E9egNTYq*PL;8CO)o6L zf`CT{nK#kM%sd(%peW6b-HS5W2AXt7Vk~UYO}Z=yCW)xH6u#GT?l*O5TpurWlvKMj zXDSu$u@vasVn8#S%L0LibhHZ3^SO>@CV$^o9&<%IC>xmRH51_mJ_jK?^*pn5zFcAZ zuhH_9_z4IE)=NbJ#1kSQKa!vQP0BxboEncZ)L(8Bn12AnnA{eEA0@C{JhJ4|l{kU? z{^Or}9#IpqwV=6%kR{qqvbJ~Q(_xCZ>l@5rRBT$$e_kpq%i)-=DM#rK4`3>nH3}Gn zvBQ8mZQcrQfSS;VZQD3mf<6ppt&i3c?3Bb|jmv;H3mM^OcV>&;DxdIgQ9~h7pfa&S zFq`pJzyIL0d0GItER2M1#r~fjMJ2+{v=-|QV4@UX8VNPx{4;N-iHfwlK19kUHjXbQVBGcSe_nG z2Wjm%gs@wM4$3Vx%sSWZc5XeEpAvf-&}>f8W^t*%SDBpX7npBV!66;;NM4FWY9Zgs%ty)sQF z&j}}EYO={XSvC*8vXlgTMM9&X@p_7>rYOHWFFj7$cF5DL7 z8`TIo3MvehQXub|1;-$a3SN`C-RHI%JdHxzR!n^$&;i-W?9mtBv@>QtIeYasEm#dD zOI4ElSowtaDibZHsSKlCCf)xA5`G0Ite~O;4B6;0yg@+md!}-Z{A&-#yw{;11ASHi zc*Ei0;>^j$(Mn!^ZLErYvgN#|tgz{0=1qiRYfsLW1}H&C>_~M7c#p!PqOWwgeRnoS zg4M8BmA-bW4i)M^1&bbcI>l4drP43_(*}U244?SyS%4$j*EUrxx?@9tZ62^hsESp- zZYf8P`Srvv?5-P$uyKofYP*_jgFe~iAr=*^F-IXt|yFZ{1d& zHh{gE4pbtEs!pTaChJ2Y-4@xWCFnHpt#tEhFmY*H@D7d32FpMR_-NZ&J^qni)cp)N zC<#mRTrl+;Nn;dT?qD5->aMh(pr*GuG9Bh>=0(ITN0!K_S+$7w-iO1uov9?aS4n!? z7qKfPMNI#Yfg(eFj#Fl!0Hob78sV$P(4W$*ftZ0lUBn?0XPg7$K}-c0g*lz3p@C3i zrPrDLxT(0mT7B&^tFlB!8*4{obqc7^o7j-AI0Y6SLlmhC>%p;&qwRx)3;jA7 z7&^R``@k}4U>lh@()#CwyNSMdR9~q@c>61!>b}LRq~QsKN0dO(!akAEbZXKenmw@6 zU||Z4x3QhmSlkluO%*pW_P(Au0G7>W^RWi7{I#Rm+T4%UR-wSB7;)cd#@?Htz!$3c ze^z(15_78sAK-+A^Jj(JH~F;@a0=_q<&^fqh!{g+3Of@4<7LTitiUY!Ha}?R|Ix}y z**u1MmKiSwNV_+JUZvIhR>y)dMBmDPGCXZUf>w0g5yqo@)vr}1=>gchCH|X+)wwMp zG2Iw^M-{uOLNVbaFOjXwlbH%Pn|1OuJiQV5{2i7>i`#u=7R7ga(d)TH8E^!+LkHAw zj0e$oH9B{R#&TkcM^viIChhFYTH%HB%8b_sa22$*?qhd3mfx}#=cfbSfsMmFujZFt z4Z%+GJ@KINnD%W6xmMtMXdHI)=NpzCj%Gn>T&Szz^jQnelETy3>`AJ<#|quiUQB)7 z3m^Zq!Q3=nU{~euY@>cVN#hlxFvRrugX(%|``ly+icALYV+fBAc|ya0IOc3!PdQ%@ z+Hp=TKRlc^6+a_vvfWLz1&#Zaawz0T4t19V3bt_qAA{vzC_Q2=xrgGrJ*)TAh!H2c z1{NC=V=-KsUR?`w)31qZ=t=CnE{#|WZ=6Vef9U=nD<*lPP4aFlqGX8lALrAUX_V4g`NztjmfEp14tVb#w4(pKygzNQ9yD?{q3P5?-7g6vKSoOV7`M z&O&C!{JL7=Z(!<`)c8o%t+=5s-7)@f?o_1=|01U&aOXD62CteTGl4vWA1JDf4))_ z50@s03rJ~28RVXAI*9G0qsPR8HrH@%(6VyuOHf)QMRl{NlEGqfavuo-Sk*yi7ViZs zavcrdIww%|E8VC}<>R83eB}&SX-3QU38CEDGN+C`hOJdagxT4|Nl2U6f$&}ukTQtsQ#RoC;d2I%cUwbIr-z}31xUFDpWqekhr%z_sG#j+^D zyIFi@D))wZ`*35Bf9yoc(oJbVXphUuqJQ!Kz9?QR^(G)2Mp-igwU*!k^zVue$V=1$ z!QK-78DAWGv!ecxJ2c6zBzXVNKoqoMa7NURg!#lUn2mAU7tcnf zRT=1jjqV+whzr&`$7A=B3?d$~&(VMU6^@k7SVSkSv0_l>(MYe6C*|Q~m&T`xb6US@ zTrL7wL2!88b*R4daN!WP$WKQtcf#Y4wsj^+!p63GCMH%#f;MhiB`acb)Q$zV=!o(8 z_3q?~mn5&Xp8+^f`BxNJ3b5HQNSQUPyTK;^ePbnMp1O$Ld8=n{K|cT3${ytj_%1Se zx|}^P$6?&c$Jp@DG#CoejBu$&UK01+E9b=_LH^*N3h!GkmJT3T#l%i!IQ?$;=M@9t zJt}vI=rtvJfRw{G5NLeuw}8V=OG;SB8ae7CI*BE?P;DYuCpvz1zTzZ=OqvcwU?+74 z;1*x#^iX85i>aZg5S>hyvXCFvPHu(F9k90|DgzL}K_Gk!UuCEbGv&=6j!5h0hfXh>pDf$wbyZY-kt~V z6?cEU_=rZ3z@Z}?;7^W)Cj!UfNDZl(=f#z(s`_pGZTm^fNR{`!*CW&*0Lvj)_N|{y z9JkPCuytt$UWJ~e4=OCkH_y(ThSxV`pmlHbGjRf6f1Y)9rxS7EaQBKaXuczGb(=TA ziFiMdph;efXhHV_kg|HMG{n0gm@$0}Jp=w)Gy=hZUdKB8K7C4y|^< zD+6tOg%aJHvE3$bW-ezM`)Epy-I>fQ!6xs74G}wKqUv-KX(m_M*xl_0-IiZ{dFSkU=ka{Eg z$~qc*fHbh~Aibp3^y|$kH!l+Ar^1J)dyA|>Mhv~~T45MpAnP;)qhXjnt?JxwT!|Hx zbqj_i!`S~x#CAX-a#~UjEk|%7Rjr+H_k{_cg(Ew3T7AiY0bSBnv+PDbx)Kg}GW+v> z%|yvi=74odQR{U-fnQa=ugMG4Dsg{QV&hOicF?ne|4Nel3$Wkc%SPKJs%_eHm_YJO zsT*ayfdgJ%WJ&q}=2$@sG82!5D-e*$)79(GM{O~Q0+C!Srhl)^w$_Hx*n>|GHUPv( zmSo>FO$+VTdt}VU5-D}y^9=Y8rqX{oI88Q}nS(Kx7BQRDBHFm|=cx2qSL znSIU;<|$@6E9~ye%YM##7h?wgWR4XPwqXy)z)(*gmh|j}neWDOHq%qM^DKMHTi8kS zuOBVi4kyrYLDR8o1;!Ot&FT-}y%?6EDDNqVIy|idnx)EPWLJ9wd3e9ZXDaPd*y=At z`{XSkcOaw!u2d-_@y7#PM5cT((-(YxaIGM{Z&ua!ojRZwTF~fBz?fiX2~0-ht`2Y)95;!D0kn1B_M9sHkpIkN#hb_JOLr*`ybX1R&p90vGH)cvlh;Gr;ka))9ny{;lr3r-7HtIH$qiTA#3EUm;H z#9FZA*DSXu&*u%Q@B51wNMVg72=cMtuP{NYmX!Ip-ALiZwb9{9i`-v<8e#A_#fETH zOPqy6l*3EdzCu>o*rCorAH0o1(t zOyK7tlQGTS&Oqa2pvP?088XcVP_SL)fIyTCprf zZfeBqtK~uv;6zwN#-iu(NNmpy(7v;jPacy#B*5aynYq>!PAQ0dha#3aHr!i%FJSRO z1&3weKi)w)kA*09yU8aH2_>+eVMC=`$pBQ;A^&l4OcB&`&{dcfLm%ez?6b+hTm2aj z?|z@*q9B?3K6Ee7n-xhES8+;#+f(1CA|(uQmRZ!_5YffpOKa1DfzWei77x6bIhnlA zu91?5zwdK6Np*c&tWyO328*y`-hwpoUs0;%AJ< z9?#=VdH{jTEQac2-0Dc01fg=fkK-+iV#fQ-l<)*avFe_5hT#fZNxCXh(f*S?i|*{y^W~GJN&d76=t^VeoZGoGF9}Wca>aVd!Q946)Z{m3zl2coC?GnnSi~7D33!lG zB>ka4C6?E}Fe+>00b*wrIWqDsYT-I7-$^b(xuqkV+Wl<-9^3rT7V~qziC-X-D+_n+ zp-6eXlgLC+vUqHNUG1>_v3n_$sRBm=H}H>i)`r*yH}ybXZif@nP>N~!g*_HSL#yXg51xhz<48G25w;^=uo*q7t@vir&qLe>(F@MChK@k z;zBXPUV)+#o{IS)c!c2TJ)ZF4a$e&WeP?waI3-iSG#2fddQG|~cMg>a_hmQgzlR$| zYyv5=pN^zJZOppF2bIurMw8S^LteswFLe%{vncBe7LOHeWof zYxF&!VZU`ng8y)&?fR<`9Da&M3sHd@!^}?-@efzBbb)_axP*(yc1Km3?M>@~EzE}m zm$_{s0HVXKnlN!;36ChoJX6u(`+Dr$(4qoF40Tx^6DE zJ*pEN>E)X;Ujex>t(gNaMv^{qwPaMs#b+hk`{R1(vdQIL>pWkm1D0A}R}}s3b3uV& zmJr@@=aJK32XP)j76I+{dByAJ|JHA#$tmO61II9^gW`Cs5^bbR4SL#81Bk7}G@-DI zuQyTV)iDNaBsL-cqtvS)170Rs&6sn-cqV{s;Mhf+Yaa8@wDzv-U}dBWrkEDX8L)+T zxGB;2FS_pga|rwt4*kIyNOBo4WO1301!IXRj5AIe5Q!Y$ISsIAwkmgeXm@3- zH4=Na2Oltj(pD&mM8LfZSXBTJ^&cuEhbv8P3i5Q~!WKZdOFB!Q(0h$G8#~|$xrFbH zk1YmH3c4*!28+BbW$PRqvvNi>OazI~q>h%?ofQn#QhgKhE-R9O*Du6P&qW8fx5b@> zmRnZe^KCjnedTTxyJ2NlKWZPq+*Tk@Pa(UvUCg&TSdxCd5t-&!3@nZU4KNd_a6MCDdUF_8N%oXzngPl*89FeM(EaP<0Le+ys zgUJ0eZ9FZK{Dl=gO8TP^=Sf-BR3^0nrr6zg=reCrg=^e7TY(v?)* z;1vGkaTM__MKAaU6P0otE5b;CMkS~EIx~LqRQ_j`^r&$t56n?J}r%lY3 z+m%5rDiX_nYpb&l5@wqejw?jr_hLxM5_nw_vynlroit1@YDx7tylslT{uAmODbGnK*8gmD!bVVWk%Svz9)3eT=+Wc0FaE{G5ORaK zprq~47KNg*!1zzxrOf-2PN;&XMpIFR5z?m=m{S^u**gsYHHTQ~GFg%yuNFIML6-9s ziv%ZcP#H8o$Ga)lloiw0=lb$2OmW=&ci*O=Z}xL%fM5`cp(Lwj2L5KD$5bxj?7d}n zjz?lhp7u{;HiJ!%DtCfn`*q&xxpZ(6`j|M=6JJUpsLZH_5T@9!k4d^t;HG??$8z5w z_LJB&U`$kh0ZSGhjs@~HbIUj62`BP8-Hc^_p6jACgC1TkJaaf3@V@T{c^FjbDqH6- z`#&m^l3V=2u3dOZYC~~GuE}TI=?@brI3+6oL}~pLdZQ&Wj20;GCcw)L`x@uWQ;fi- zD54-W$JY5jQB^aCd$O!0qOJiS)wu}bXqa;4)NkC+AQ8v>GiLoC{}Ei?a$HKJz1;~q zO)~Zj;cC`y-Xc`eT0+(&+Md^?A{euhf1;uXdiYT@;m`nnhTnqw8g*fjskM977LP;A z&+168VCO86ce(aWS0b%P>a{2!_&*2w^oP2PTJ~MVS3?wQ#FZb$e`)t}0lsuwd#O&H zs7?YgBAxWop@Iruz!sB;v7e?^Q}#5KQot_^;C@vdaKw^VmST z#%L>mi|;T?3nnQUGID{HFKAI3 zgBX1$jZQ$L8{=B{PBP%Xe&B#sWvjHk%#_(^-;(%Fj^mo|64t3vSoeov?YJr|KaQy1 zjpZPqCZw1*f!rpqHOHgeW68U*bD@x(AP$#*p&vo9BTX!Im;aOSrgJ@rQwm7Uuqp`rmbP~P+i9GX&7I|W$NfPMuvepBy zezrNb;KuyaQRQs;V~J)Dz$q}Rw$v|N@i~%FM^*n`46_5H9FlI}RSMjp{eqzgkB+mA zwWRQN2l8ymtG%jia9gp0A4f=fIeb;uAz<0=C*UL}d-Yt-Y$_3!t5h1&fm!1Jr4MUE zfFhZP_dsj_DjAA{+rf>Wzy9?g-y_|$5uN2(SKpbC4(Ql}440oI1{4%6E6Sk#Ni}Is zY;0AeURT8fdU^l}@Xr>DR2Q$%kb2j4W`mhHGqu%w=I-QxNOuK1GBb5EIo)Xp(-LRL z$tP9U-z$^nNgh6WVm{jkKYpQQUa`r4{Hn2eNH5iV|({Fl(S@Tb$Q~fg zcMubiz4Zg#yBFatDrO%ZNR)D~dtrQRdvhy4c~I!r_#@WRU*;z+J8DQUj@AJJqV?4r z^HdiApr6>N;tgUI`K6{rgG`Jx#l$yJ$E@JnO+b`Cz(80blcEJ4(ZehMu+{lkvDz;y z$%=f^K1sTXC|oy6RT};04R`FcgA}yB))-`^fvq%a|LvP8-rAM?Xo>mbO&tSbSe}=^ zddqJjGSDl;#57qtnNNak?dQxDZ|7i%kAnR4_@e{~MmcW3R~iFtxqAKCX$WrDq@(A^ zm%?4naV%suKQa&5Tp-3<`=G&dLo+`qlKam=m}Q%H9;w>^Ii-zVxhscnay=~&WeYcp znkFH7QuQgU?kfsj6OMk2LZ!YV(JOnYl=3_Uu;Hk>T(hiwi)JdusV*^(|u0^7)%3}frH;H#)IY>^b4gC&H%i`syH&Oj#367RL$}Q zRXPhGkPl00V+(yQoOiTU*?9f%3!w?_&9)HwhGPG17%EXK5@?>!1B!p4!OiJp`O8U$T25Y>=~a?ZMeG z*kCDJfPOP6lii-ktEO%Svp*|aOtKpcgd01BYeqy!~K^1wI zJ)hFnNt=6eaiRX^EgFX1<^Ra%;c~Z{ga5v8Y|%Vw^0+W8aWr2gjKk7G<>juSFV-c$ z*k3a;Sc<@7g8^ux<-{_+|CiJsbBw}gGV9{(L zpw-B>VV0%Z{>}&%4#ZWk7~7lcA3z@%T5ONvLJ5<`Ns0B_5Lni#6+$OR=tL?=?m1G~ zhfFG{Ux&#}N~M)P-qO^Pg5hR$EY!HxOjR6^*Dr=0^7Q>!;ylNbt$Y+eVE?E5sSXnL z7H8p(z zyd`>#U<&__dA=~vf=U54sST7_t)E!n>lr@N`BJc6FVvp3fSRszZ9xb85A4Y{&AlS_@3irhlx15r{!G-CapU3}M?+w)Y zSz*qE8)AGoU)WokMxRL;|J~Bw$Gx z#)t4$s?NW@--w!!itAi5+{HKBh}G= z?a5V*aIsUj0YzDM1=;!-+QprdmN%}0$lo<|$^&tu0WdD8d+DdaHv4UqT4TB=&g+Qr zXr;z5a1gaVbz9X|Nla4n1q5JzU5;oKqNHe1SB-KJK5N6DNTLd4syBdNvoI7T4vDHl z`{dP^-=wa(EeVF-C92fr*h)qL;vA0N(I0Px@85$^d^IQ-!|znzVfdcL|@+@Dm**0r5mxstn&xt@IT7^b{~p)fwDqyW+|1 zP3X0~k50TmQnRMzx^oF2jj3@SPt{R7Rb>u!7cuFZ=4KEpfjq?JtmgN4w;2f=O$0`< zOL+b7R{$uii{eZ-2Dq;>*`PtEiwnIW460X2SBe)aqe%+;uI5zhuYVkh7FUH-(%5$b zE68(H#~arTT_ad;qbq5JakuLhoUmg7X+YfCHb~`@%iqN{l1)dsL-KXS4}fmZUlRI! ztiq32JE>U_g;XiKUlZPYpT#Ei;y%#2Lwv%i5(F?j1t^wvm;XMwKaP%mV<5F*)la8 z-&&Pe(9i$$fWbYkzYx+j@hQLUO8j^^I8`CIv33lZ0(9POE{Q9edsHVPKF@vt9?)OG z8lZrcV~w7Uc0M9ZC--8PXTB1PLhIvF`J>^Mb6wT)^!{dXm6JF5^PZ*)2}*zASJ!r{ z4v&Ix9d!F14RiW`OwMJy)E_`wIrF3*4l{IStELUlJWi^a-0~)L!C9W`Kk7nK1EHv0 z{xT^opufBJrHTn&6eUAIa-SBg0y06r?nkhYLSs^IbNsVa%RFSTJJP5uB78a0#=IP$K^96>u>hqWxz9-%XGyHpe z=m8=`gHfPvA=rMB8`kt%MIaAt$uP_^X-dh@79mm^$i1u`V<+HK+YYlokA1L6G)eOD zFdUdqkI&xmGt+*W@eM{6cU*53@G_WGDq4UJwJUGecSnO5`}ub2di^f1h^%`X5CTBH zOM(WhS)vTrO@cIBycxob-Z{nC&qEOFFTwRHA*Xq1Y|LJq-uT?GbCgoP;vM$st)o(R zG=wXROP@xUvi}PVsG3tzHW0gX*h1Qk%D3g3JzrWQ;J1XY~@7U~}oGS)CWIPUojq($l*K@a;rV zJLb`SN1J^d$A;yK*@|zzsrV2rzttzUnD8noAr*v!H`u`a*iBbv+QIBpU4f45}ZUpo{tgt(wv z`dpY9`}tx@`p`RJ6MBzjwF2HyY%H}DVJ*Bi*h1(8$l9u zLM^Q)KDP$!>YP?X4XbiXKnqQWah`vpyKr3t2N(;X^{##~9#<%C9vwdmaYD%ow=>#HzXT-#HbpJ{f@3 zfFs^TdS=FF8+gnIEQ>9L^d%7>u_=;?pAZ~5aiBH-l%)2Uz(!q#*HNt-@=S-EV+W`V zy}RjGA@&x-m~|ci1fo_s+YY?o-{;joz>nU`?78jM9$X0I8$|GC`1BAME_2kIv=XO} zW64LZ`3tzfuD>_5kfe*FQMKX>KV+z;`wiEhw|V5u%O$tT}7|TnqORFael!<`+?w=SU5i; zrX)yy-<-mY0QR|f0k&UsThDK<_SNz&x|A>!(4$=1$zgaE43MP;`44Qz!7Xw5RmWi! zS|L2f_pQBKvP7*Kp3L3Ot#Y$~<)l!%6e68~@>u96mP~lHh~U7I2l^l(o5{ zsCuTI*ciSMmN4y-;RISEmzio(Tk%U`FkU`SF&Y(zWQnz9)pqAE_?i$k??%9tMtqj7 z{_)%hQ+_$Y8F8Wy@^zzzR6@^yqU>#Ss(OM?pAN!sxv(6DsM=a*eD0P?e zm7kl;@^bB&;Ket;?@d<)>@$=_AoZ=y!9vRhGf!@w{HZh>O9}M6(2mR*-f2~7#`@L4 zTLz9z67uO?3U!tp=l5#krT}8*U&d4phB&Ti|S9OZCRG}pY;bd=qy|JU*EDg5MGf) zDT{X=U|Gi&x9$}1)$vC{XYRlk^cSZw5wAl1Ge%)QJytg00`!y^wHJ0G`BuXllT`k! zkn-(rV&VWB#d)@Tze7TXS_%3yF1@$yAi=V67Y~}G0`t*|58QF3`xmzbBntz%35qbn ztdI@iNO{9!&c+o4BSN;6Pk{V5$pL%Om$_vMBwfp}xM#ew#s4b5ZuPR*w;ZwU2*UVg zfw26s86%=^wu+lyO&5coKdk~^ntl7(ruoLrWXuy6Micre9J9ZoN&S;eBsmxYhw%$l z?$rGwo#7Hw)I<&S_$Z)_o3Q_AW>8fE^UQ7@{26ZJdC&odF98l&p>ZH(b1)(r|4kqhry!J4yu>9^8b_j zh3H4|g4&V#b@#ij!a=KLd53Q$meH@h_LosaVTvIoRS^15`8SCo2&^O)jH(OhR8SXP z9Z)gdA`&VqGD=t2i&a8Bfz_Kd^P4-Wnp}4gEz`w@KdL{wq@>+@`V^-p)0%sK;hCA2 zU#P*NufljU17nqbSad+tzQpA?!kswYUDGVZ9Xkpf07ik$`z7f6w{X~~Y%WGJhQdHz z;VxabN5wxyw3jqb^r=VH``3G>H~T)sZ;puzVD)~tmUkb_J6-Stvx#q3F^f04DO&#Z zMMS7=`#pJqrPs5IDy6XyitbfZ8hL7?4aKf$h`rnrFA1WXZdT|SjwSfimeQ!0MM$K8 z)+7kWksnPj530$ixK$M<>3uRZa#A47r(o+KH9?;4?3hMTiPi4!)%iW5j>SdqB%bkk zQb6G(cxVk)oVkey|M&{1Q8RmWDCCw06p8viZJQ8dW!`QH7^{2w%Xeua|1{Pu>4Z8z z7|pgQ4d#5DLRYzVN-RgI5f6XQY7xQAOWZCd4ztrjoA{fc5RZLO?A_w-0R=fCB*QV7 z!bjZBE=z!UOW~nT)D0Vvrh0cy??$-y51_lgQg${oX(1jluL29i@9&!6@I6pN4=X~T zqf7fv?3sgQvG_4N(R}PcW96gVvnn9dA?=UT6kXx#%7Jzn%ofNVf5kCxcLt6b#xWH8 z@T_koJYMnQJ3*qS&AwgmokbhvQGn0{XDaKe&G@Q}0v&+jYZ~!sy@>(x^GUfmU_gk8 zNKPT@m@dWIJJcv;P?Q^O4)qaE0mi>iqcU@)<1?MLT7}jCfzT8&$uM;8kQ{|ySZ7tzm*@HakcWL42+k1??MZq{%pYB9}FG? zBUm=+uAE$N60vN}X3@g4X5(_bLfW{FCG&E$ea8RFO1Q@J?0%nmIOsxP~{%qe5= zd1n*OgB%<=D2>FAWBz92_I9*6^v^wlzyd`CGvid~yHtz&quR5-P5luE&K&lw(S_-2 z6`0?M&nIa)_e>G{rP=C{*{poAAbYr!m`kVm(>}V-l%|$g3`?_CbD@}wZ7!uqyp4rg7R&%kG@+ygf ze%uUNrdd4oyYk~E?ZKN^3ysKJ?a}U=N-ME*mV_><}LVocQ%#qO7`P_Od7+ z{)3Y-;(!Nei@5+o92R!^(m%C?a6B1zIjcdKt&cI#y?uxY- zpI;F;OEsQ#5+>j;kh#<77hZwbpZ2?UGvGEea) zvN&(Z&Tj8#T85O+PE7gmk)(JofR>E~5~2qZ>^qQC)F{YL!^a$ZNNx6vG9PGyQ{gvl62EH|+FN{HQ)hRUkZB zb#*hBfHD@pt3$suqlyPjf*JQYsgvD^&)7D&i5@TSa=|4Bg>GO3B6_|JXWYEr*V7xs zK%^Z{a?Q&zZB2W8s6#P)Ygv1)*WN(yH7&5{Nfy}CiXj@8PG6q0e8;3lLG{(uZk7lW zl9#~@YdLM2+l6@5)wWe7v4sWREFLs6n2lna*Ul2@TDxPN<&!rTt9~G#bsZjkzNevv zkr7j}|0fH@B8`mH$1f`|rL^CJIS-rz5Z^pyjftF11*})k(6qId1+b#HMB^D|cU7{@ zFinL5udsU7xBc%+qm2BrlpnEx2b_VCvP1tXJMN@Ej{j z6`tBV6q~F=QtfDxg&eAdav=A;F=l~L?&(uG3kp_gfPV$h3aeIvDEIN~FN{GkBbv?I z&#;Y-;hjQ-j9eqAk5(aDnv1uw%3o%nQ3;6`uDrV|tha*`VUNg0g>ZNAf#tRHYv#LR z5Hsw)U-my0(?j1z$YcfMH7~P={_j_O%%%ww3`3pxh}?CO8~_i~mm$pzGYSz#g^Fk? zu(EY}d{AGTxo0;!m$G72Ff!fQK!y;lB^YiM{QAWox*IW#A|Y`tE!G=X*9vG{IGY$l zel8m0z)Eig4QDUeI%I|052>E3a5_j!j4>}Y+nkes6M(&<#9pW|MlGRDP>EPw?sG%#c0k5Y}hKc`x-Xp!_ ze^_9J(5$+s2pw8^9wjk}=z;(-DnQ-s35UmQy%w!6v^%+^=MVe(Ul7s@rVuJUj+a50 zp2$e2+JjPuikhJ)I5V-sa;`i+jpPeMQ~7|Z3C*X75v1u{{3!Ogjk8V7_x~yRjy;%A z;sU{EzjqTD-;ZA^v)iKXRb~E69`TNyB$2 z`!D7+_B>~Zb?;@!IFt0}dSyu}*j1)L$(Ip8OC;>U_Wn}zOI=gSjN*@go~*Ikpm8Pp zXXI@D-qfatdkY#_Q2;A4Oo96=9}x$K0ccYsK^%4d3aIWW;r}5W7OrxP z0xB~V)?<*)(EKno7lTj+_ARZZ(lk1xOt;jLi(K5LP_g7yV>V(oYAoL(6#l;gS%)lg z^}|ih?b23VBT=><-};)-NRVyqJ3c(>_47U*6#%6DQiF}%I8ruQ1q}lrJf&96XVfvF z7jTSItF+=j{4jp)7f#6%dWs>e=zCmSdnJ#|t@%>R1}XzQa!U0+V#EU z`7qGHWgMgFq1%*T6cOV)e3@@@(r-g$q3tpZ9bMBlWfLS$Pc+D)7;2$N2}{T+mL!Ah z+q+oSpf1)g#zF;^m7ak|PdAbRQF3omm&uvwMS&Pl$NSbxTb}ru0Z~oS>iz+VWzI-b z)#-Trr!32beNd2!fU2_NDO-(1Q!&p@%2xk=4vBzj@&6Mp_8aznSK(oB9uixxKN1>& z{z~qrTg18yq;4ZK7l^{lr;v?aPt+U4|SIC7zr{qZ`Gkj#-5c5 z2H$=g5)Q4oJ9nY=DVC@ylYAz5=zX1l;k+RmA6_d9L9ZsD|C-<&Tcc#%EJ@^gHC!_Tf1xRLV9eOayms z=`gU}T(3*Oi!~;}vE|e7LLf*lFg;H51#`5EWA z(@*qxo?+GF?Y^g)=`o*MeU4#{fvjCSSY#VaqkzyS5S@O`sKBYHDwH}rT&HOvSwW6= z^Mhc6AHF6#n|quhRY?&DN9jDY6NXuizwxPebLszk%?# zThZ;DMUdrSF4q-!tiI9+p3LIK2wKvlgJsShsDr%V+=I9&SB) zm`9PW$0bl)aRR1)YqHvvNf|!;$<%3VpjN1E?x!J6;x6{04>c)|`fzNfbzrF{yQnrs zK3TGau_c^VR~vu?5!f67fyi3TcW_Md&>a0-!g(Mt(0h!+k{nm1o#dA&$F;EzM$tt&;vbHfn)d;-}x_|2GRUHJoU|O68O3rxFs(56;p6^Cp<{U22*gSmA^e{js#V?rx;R` zyIr_;V)h()6|nt-(9Le;=}V0u{p$d*#IiqiHvBDstYrX_h0oh{KRr+gK?JS;k2n?B z$>8ZKa27MMjhQx1i?bMQe`Vd6vEPdH(~D9_ddczSVLzi;_X;L5+kBG5>!Og=JFDcj zY={CY%{+$(4j4KGChcP!hP_ajJTv^1p(8j?bA?A`UoRdySk1_NS&JsU1jo^N{hErE zM%Z+S8-7cb9plzldGT7f*$@Y@h3%Nc!s zHG!hX=oCW6y_v4kO=DszE33b$)>sJjFSF57Nz5ua+)zkebwTDw| zT-?7A?)@o0xX&!3`@U(%v|NUf0kD3+We_#|#9$dRorw=Hk2bomP?z_PzIB~GhdZ38 zFh|{wPf(SHSA98mJi^(Gpt=3FvUT5FD%Sc|=@sv;?|s92#$foxxrDW8sT*;dE@K%< z(;gPsp)9^H>)$zNh^F-M^m>ySJXVjYGR%(=ji|^M=q;i@n`%&Z{~Zf%dRW^oG05M! z3S<@hqGLT#+%To6V>Uz|g4!+0op%@;eyH&@{n(e=z&32(N#U=o^#Oe9hN@ z!b?WYU^=5Y)RYEk^;kvwjW(rvM%vWd8j##el6)QvsF_@c(1uxV(({<$s!if|sMNvi z)H5gg!y=OvL~O?zjY!q1@k^IF#qZAP%OAz)uOy)0atmyQLB~8N$la$oVOQz6Yo1M? zbFC7wS+Kr>hD@Gy+36OQ=F7zLAmwV#&AVu z(FQ=@zD(k=SFlXK&XFnMV zuXKhqW;G8C{!2ZHW)=}{0k4m%+Mg}s<_jCib~U&!cp0d?zZnKa00%{e zmBin6C7I$iXEID(+Ju5f+4S;LCgnqXQdfoH6UKM;$I}%S2Ku{0&&6Kc9Wj|x`#B@# zg*4C(O7%+yx$_GOun&_F6Xcl&#!rfHEb(DEe3|WN@A!10ys4PI6~^JGQQy=!+{w*E z7uyd*`c?;tqkVXZ;0SE}UP$5fj);yA%|T-_HvzOPe_9ZvU z&%`Hhc}Bbc8y<{Wy;AA_aph=-VqFoNjr4ViMboc7t8feHVxa9(3LOZ;Y87)OMox&` zP*CtVRH5DMp;1gaAt|yl>OsAz=UhHC){hDF2`qW6GCNX0=OA{E1 zQe_zjRVjrK9y^%erjlu;H9ol}H;=s~q#BjMz}{5UTW68+2m#>97yD|`kn3%YjH z`h9o|)1g{6ce1`!?YX^7)Y2Z;aG^|wp}NejhnomUNWQ|dwFSpffRFS15;mS2zoVZ9Kal?$FlSj;5vjv;i; z1gLZSY7alskCY$R*N$Uy6fYg*1zlGn`yCup=-Xe%7! z>SeuT876UJO6J}2)jA6NV_iSVfn+S{AE{1842fyd8onBDQ7&lAP7J#gtS-Rv5&8y> z)HG5szAAlP|C14? zl9mx|mmA1C)H`L^SOd1Tmk!S+6d1U4Q%%&Ol6I|7>4v?Q_JRe(z2Suji`;~}h?yh; zUNYOZb?)kD-RNtx`P9VpKX2NTpmy7YZcP>17U5?y*T(n$)-rkb_y;w`353#e%li-O zMwJbbS3UBJd0^Yo5cnj3b+St|E^-8itsz!~yU@0F&H|5ZBn=PgFKGlu8Kcykx2+r* zD7coGpCE6vibzJMRQvx(Ayixw&wRu2$h;9s>xPF7tRRum_7riq=bCviluVuRG$bs8 zawzPvRkhV=vdI3e=%SCuky_03%Mu4n6Rtt+^!#xK;@}QxC2Hjx||Vs?uz%PkwCXDCxHVrJt~{dfAEFNaW_FG&g7Kw&ZoHwu`9aiWNE- zhZc&ae@WOne1{nOhPx3$=CT^2#-maE04F^dtSV1nWP#)rhhZxpk0VsWpO%HJbHm6$ zXD~QAH>koescW>r*JCgAL6@&dho5^HP26LM#?OnhXtm2~j!|wbQagqCnt+32AXaZHbp{(x)@u z%ZUD^8BYz7KEu4YrkDT268BhR=Zrgo!I|_kj5=LEyqjpSlq-5!xrCSrXDL9HZ@&2r87<;QsTl5vRy05GJ?S(*J?4 z!I*nL5{UPIOr)>WIAChiu*~(&opbLyGg1tyXzP2Xe|jnyPib|GHI2!Ck%F$`J$`3R z^dHL?CPbV5iOp;vYiNRfZ`0Ntw{mqn9I7kIb5$R zRMB!ET-E@?si03Nw&%!oa{xNK(+T=N3|HX0@_Sn$1ObM$dKMoI9qxlv<$_(Q4{_(h zKZONdt6CDYDx|_Jocv&);TYt-`;u|QFRDDf#Fb})1)(CoTz z%#WeNnjA3(={b``7uamF1lR7%xJC}XbJkVSV@L95;T^bNtN(*Q^}}UjkU}=)A;jCX z!f1rM<1Eq(M^8>!Q41@|)JgUQm{^X$=mLVkl0?POnrSut9^r|Ah>ZBcXO3Z*OWIYS z($`ub?MQ0YGHXBqm#wN2%VrVciSt7933k=KM@cZ4ycD6g#(=}l@s;=(s1Z=6qjNYN z;9-RV$qDSdW7biEbt0A#8a1`=L~%V$Ne_Ui^U3FUKx}jUfK|N^l~qEw!V>P0?Z)swO$JD)e#-eY*p^|n4OGc! z062cBQKvOeUy9TsK3_KX+jqW8Yq~En{JM;s7soEx09g76F;}@f*HG74GQahz>urlq6v$oWy#&^^HBDVQ=W)2kN_3{(&rmTfh=z(t zXU~OF84!`aIEibMXpd3pnUqVlU})8JeDnTLA9LgXt;*R8N}UNmF6 zGU(h-rb;g4Qyu(V<`}dX^}^R~bHJu2#akxkooV_jjFJ#MFstA13!atYKk7_sUN_Dv(EQ47N_s+k>W@ zLw>iF$?$P%ZN!ggu&5;(8}1q)F(?7E{0fvU#4woJe;X5%i)X-8ApG#si4~x>t+(sh zSs$1gFFq`_Duo#9#n+w_HNh{7 zpJJ7aa|CI(JT0|u;W}%R^^untdkXge+PqkB&HDG3jxTq2ill=)Kdzf_hQW$uWqD2A z52W%eUsw0vld5lqOpr8djnGWQy-&~wOOtX{{-PJ_f6|k0cSX}NN0N^MU%$$9kk>A} zsCAaT0}lsU1gGmm7-W!YB5A?rAH0LBvCPd37o6@bIo&gPDCl3@!x^lmwGoq}6~i}l z4O=-1Uae9bhvx;Tf8R7%9t^>LIX_`wYW+n@0C{;z*@*c#MXn3mgra*$ z>c#DoIJ{_Nhg{&}X9nF8^fPZxd0c*47r#hW4(;q^wOq4BmwfWl#p{Pmtzq-{C-BV%>^uDjncB$* z(+-1Hrz$lr7yS7Zys9|-TKi<`%A(+rQt3vBGF{_r?ug}WGYfm*R5_ppL60`x)0 ziFAqUBP+c?wSIG?Lp$5_U{sqBP3l%FZotkHkPXN%-f|ckNdk4Ai(mZHxw9tBqO{qv zn55KDprffUp3rkjWW6WRZdw=~bRl~e{zYsA$$8`EQH%y%YrydldYFv&{29CLnz|uM z0MQj)m5+-52<;OCatlOOTntL7|SW#e-SimK$3cohBv4tj8ff8+GC&!sH5dV+zf(^ zaIt%b+nZM^OnP^fGmOvWaV-VkB6?5<9sKVMLC{tIQ!r?^906Ot}dOn^^XdI?Gu5f!by%j5iOCphLQHj^={H;kXQf zf{OldfImnh+&5XAL4}+OO+4MZ111!2X-EbK79XbcTY@x5Lwl zOcOlg+sFsLQzEl*mlKjz-9|KWxZ1rM1y)tp4)!B@h>kD1PhytyZD_`+!2+g*CG8vd z>tV%g?7v;vA`QV=j!EIEsi6I3nzn)uMcgRG6}Ft3##Puw{Cvq>$1|6Bc>dHQP-vzE zHY3J#Ac3Kbo97FKk95^(ZI*3rZ%5(OTh z&_*#c&IK`7as$e`(sF`C-v+oFUlc7_&S@0!W$S*cu!Ub@k(4*?*>qu^+Cr^q#m5WU zQH~lML9~8x1r2GOf|3sa;y)^?Fa&)Sw{pwZ;2{{-ian5AbSEXcfMDfJ@Vet%dFNrh zvi$h^6dOSY+;D&0bAHkz29`ik(P;cSS^>2AZsZG^q5$bn7wC5stQe(^cfcc_N5s+Q z%2dLjmiuEq_9reVVBKfmN&x5pYyl{n5h^$oQBg|!;$w_7PhNd2b8b?S%yt%qD?z3J z5|nz~#mdf%JB>t#mU+w7@%5TfggO!3=4vPI`Hc~FMdz{tt!gz0Fa<68zhF*^f?@+? zQCxANq_WoTl6Qf@&6#zG2%Ga=$$iAFd7*E?myOg8x5j3vd~O`SpxmX-i@Q)Cd-k`k z>Lcw0lFHblOCX0Ad!j`5w3A@B$7TTvQ~no+cS3JB=XLW$b4);IM7z8IocISmL=?nrdohQ~_wdhF|4A3;#LR?k+Jdc4!4 zC6Q_kPVFs=PJT}S8+N}BhMIHA-?^c7qXy5*2f}&55}8HotapfFx8h09BUVl9M7vI8 z5?I%S9xGt7y%TL=?r#d%x%j1>r95f1@NbGQ-z0ZU2$y0NtMOG6tO@S7*RPyk5AB1p zbIph>rurlrZD>bD786z2!K<;XkFi1owHz|1)=R(jA{d{PFgdj^Y$oZj9Vnf$-TzPT ziBn2gS{-W%DQr>+uTxIkIeSbD@FyMH*<_cEI%m0s9}TB@G)Tjc3pn}%>))?_d3zN) zz^w0FHGbyB%IX|w%aB0Ol2*_JR{8GceguCmmmUtAq}?YzQM`u1@)y~`c~cIVX(A!! zH%@uMO57xJ+m51u8i2Xtb>%AK7ob%xtx~Zngjig+!vwTA8%6q5YFD|)7zxk!fo%&! zU?m*nngE1_{*7*!XX__S(*A*sb)awKsNhkV2ufjuPySR#QE(M^R7y_4|`0Zl3<-z7x zz;q9DpRAi}ri0vd$aj8~Uh|;icMzYB|Hp^qA!5@*_n8dB{NrFKS@4*knfhA`yuf83 znV~=uX)Qu<;g}E6TBKoq${TEsXly}Yc9~UjK7)2NX@R0ecBblvUE!|0`Nx_%1S*4^ zPUHk9MFrA1dz;7Wdin zEOB%f+JJ_?k@(7tG&rr%OYji7BPAKV;m1Pr3S3D~)`yu+r69K8mg!q#St14nMZW2R z*%xNCkzfd&NsjBwyZWKse8$+)*}*ut?di)3u*^{LL>}bub1A>t)_pj!)!E#R(Yeyxi89+foC*Kk1sxA^ZJR9-0djR?h!9~O} z(_RYj>NxVk6bsiHj7*GS2Yqv>U;o^PjT`+t$#GXgabV2R=^?%fv16`Cg_|Kviiq7! z25YikEW!FfYA@N;#niV$l`oYgb z8ygWTKjcv4!OuVcSW{ew3$4~Eg5vMZrBBh#7uYA;6HBCRvyNu?P3ARQV#|Hh?4J8^ z-`=w04I%wPuz1^^kQ4kI8Pf;(2W8S5{b{L9;e9TS0lG-U6q<=|JBs^}@dvhk;@OJL zKfr=cdGBD^o``JhM7&)#4R?8x($bGw3arX}l|+TJ4JU5MbQ2vPV22fWo=`b$XroxG zwvc@E7s9sLi8iD%(oY(1wouE`1SCXsK2;VRe_8fsiZfzR0tH5XBB&8518cMDothG! zV1VKPvj()@>$WZz*26Ta7-?ji@7rz5D;LId#X*V)x|DgV3^XY+ZjjA`tDO|W*}Z1x zS*TLz7$$n1ZGR#G*Fx%ftE3fOle=kStd@11)sP+X0`_aM>%n}W6lIhznMgrO@4CE6 z>(K4)lCL7^_`i#t0KLpW6x@<0i|aHk`=dXt-f&Vvt9C>DZ~9>V><$#Dtr0%j%Rcg4 zui_@nNBB8xts>`ZBhS~uXoZ{njYp%|@VvAi`!KjyE_5(NMi{a@`Nx_XZs%f6bHm2s z!5X^822B1f1!-P+B(w*R_%&1Kb+q>KkSr~rC~nZ~n;P2^@&o4VAqiasWfgshMgc-a zrG)+si;a7lM)~N?XL}-@86!Bq!sllRdKB}Y?IOSUwu#2=X~VA}9WC5Xn2hII1DVVT zF&Y+0{QrOgt-vNu*l7StdbX{nGB++IklgDkkBVU9zOx}xD)NH-5@&BUi4b){7*ASi zH(Z8II6nLxQNLG@x{VMW8)YjbDEM)%ZTwjO;qKu-)NwYmh(*_`0TJrkX31EkOehRy&B?be#k+X>K!AUe+1(uAc<7}Rdb_13qi zR&DChzt5bJRpimbjI&{ZQJOI20V}n!;@OEH^%_eA)U3y`dBjWF#F9k%GZmgxPl%lf zSXf|7{GKc{*eJRL^8p5H6kU3Y;lpVP{PRl9$pSJ4o1+()Xyyk&&R^ZM`j;gsI$0Z5 zotEy_j&dFI9a{lg2u4ZqSORSZMI3I|9Jzl-i7Z*L6%1MPudBG_UucpI-aiV4>V3eRhcGlac=_dz+^iOtT|N z;&j`SlAw*kLujs@Ij%D2{{SScE9+ouS2u_=I2k%~qpTACbNQOJmy`@l-ap3}-dZ9M zH%b3zMrBUziHOg-EBnZwfEa;kH<&sp%J4_nyYLpq4^_7<9j~hXMLG?L`+AeM9wVE^)ahIs)0&JYAF8qu1Oecp1a_gdYWL059nPuY ztr0KtNFYxnm|i53_9fwfN*2Q%CN`vlDL{^~dd!7gY1ZiW5snM@TXFCT0FR~-awb=- zNNO$i)0GN2i(3{Q${#)HZoA+4BB&@FR8To{8F~3;=Nxt!T`P)1lRm>hJJ7|)s4}cGqd0|720pBjXy>do zN%w16a~YNs$6B`06KIbGPW=U$SAvMMl1BhIA4TXT#)}7euD5Bv_`$%(L+tJ`_6kla zrbpu}^0$`u&Wjo>S=?*##ulr^26bt~N4N2nHG=>#IUa3~ym&i+bjqImjg)?e7(w8-0WCPnFvJf8CMy1Kp&wslzd#oy{mqfKu(SSrA= z1aT!_?JMNbTL{wq7M?#}^lu*-v+Witfs`gJa zP0ASZ*%w&uPx^Al*TT~}YqVKLUOB9n!8gFiBr$AlMGhelC3 z;fTsMw#OMGSM$D{V-!!aPEHTqPU=B5Gie_Wf#>scS>)D-EI|0;PaC+S?)IkU(#^N6 zcb$QgrKz1Mo0nFEpCYRTA(MOnA?rl3H`R)L*aQ;lh#a*zJ#Mags=abev-1SNng6rR ztR5zsSrjMcXe|)traXH zUw*)z*=ybo;pF3ZBaz9@OQX-ZtvZ;df!r;s}G%D6%6$avO-jCyXb+`jTWeubl@hPUuSeNT4J9g;E^w-^WzK<>d-up0 zi>a{7daaq7>f{2U2~O`d8>IBs*XT z-dicj-F%ei<6W1Xw2{^nE%&7g^GaOeqKH4!CR-%;H* zo&dI~{AX6q7Gq;*3asCxb%w#~?@$z`^-U-#15|o>@vo2sf|H1#k@A*eU-ezQA;jKT z3tMgaO#>@GrKPg%=E(_cJaR+J-0+IYxF(l^^;t9;f-Qfp-p>SH zyZ>4tl)$Re9ZYe(3I=b?3n)q~9MF}E7v3IwgO-5*oEpHgGW#YP0bF?SJwjyx_)y1*FsISJw;!SVP2V?b5HJ( zLBin?QsA1GzOn+a5>v=B3U*{T-$G>DP_oR5O;=Xk(onOKglSsfa%F;Hfl>QYWNfT6 z4Z}%j12FrKO;Ht^NqF2GN7syS=!jKTqn6^)11;5oe(y=Zg39m3531)ks%;cbb=}+> zg3_;~K^2VXsq>wR3>4)8kF)g74O4I;bTFlayOrDjD-J>Q_zF$(& z{H*Zjdp3J?!uj}at71akMggfi0Q@!^d^C&{_lRXRvmDU8wKJL2)NUrF+ zqCY$^uNY5!4AcWS?kmw)~DXO3C5S#C=|_MUna?)qJ} zuT?JJs`+dD(eMiLreN6#A|Kl?2iBFPmEZWAibX~hA;}NOHzEMM-mY+I#=`JFu$@6A zoX`E5OC#eMsA>*{rNIWn|1t^D_^%AvnX&kQ|8g5qkq_8SFtO$2-bJqim<{g-H@!9gp*mW2r+0w@On_wUB5t05?(+9t%qrJqvOXQe<$SXY>Rxb~La_|DQe9<@0G>zS@e^La;_A zeK|WusL|5UGslC{F8r`q)!NCy?9F4XF!T7SyuqgL%yR*JOQZH)@fh^co+c=)Wg!q! z2+qq=jMaHM|6AIv(L+ss$WS0X=j-P8YUh$I4kV&RBBhI}$h0-v}q2`e0aS zMDoc-8RbXeUsqS+4O*)p=$@PrE8aJd1)fUxy+IbLtTv7Z+zNG*7lkJ>T1^Ymsb+k4 zMW9u|eBHV6rho~mYYsnZ$R~##KDbyNE7|CHDU%~H>^T|Y8+~qmAtz_3helsFl0@&X=Je`>*xap|I9HU9f%0ic^9 zzUH}RM*~fDYP`>QnES_&uhKhd5~g+a)IBY^?T08j$9R!xpNSnR;kyh@7aIcBs^-u;m%>UKrX z(Zyo$YNBI}V;#3qtEKV=I$m74>EkQIi$NBXJT#ImJ!c-FCgRASWSq$+ zv;?%+xG3_VkliMBicU@D=MadkzM=h zAj>+EM`3ax?OStae7K0LWK!oK)8Neu+GKS!xR}ksxbGXu5$+Mtys$w@wPYBg%Qq}b z`;8_}h`5YeCk|zzWj=1^DAc_L(~GcRb{)k)*g?vvy%uZ>NSzl76jv#fD^t3c1pO9; zG4TfSQg}>u6Nk<{c0KaDwARK6Jdq|a7N|L?QzF%@+aS=ipKU=K1{HwoWi0v_Mq#R( z(PU%OvIoKv(A3uOzdz|Gj`6ZXfPz>kRWMcXlGjyKk{Vp5jSiAFLZj8?K_7w7f;>BduE*;-3 zMD%SDU9+gkQW#bO_k;bzp+FsZWJM3A;$i5`DVuh2j@_;ZKJ_z;$s_xOx4Di|yVTfMMIPAgOz(yUu!XkCk4G^&^2CkQ|R!%w$XQWvU)vbJQMzAs;CpQ3IerhWE6 z!lqVb<_bPosi$j#)4NV+eifp;B;UZF=;=MrbrF)}xOK6=xeu1LPi$8Q(+|s0QWK+@ zB~jUUvD!El=-88x8UndE&3PPhu1qRZ%L1|8$F(s=1<&kq47!%|6#9WL4H5* z2AvXCD|XW^pnwLx-Zz~Zy|a#F_Oead;~kme$OvIEHPE@@g@H;G?*EMp4}~3k;NPxN z^i7W8_xQ}YRw_vg9=u0Kqqnegb&)vim$W9itOBEc(h1qZMDC7JQ$;}etZ)Ax!h$z!!axYG43G#NYQO-<+%r|rbFsw7-A z;=hr-*A3-C6L#$M{J%))vCH7T+^IPJ5GjTMBir|33OoHlY*`>=gh)q1TrBK@1S;5j z)Oiba|7%%d(%<;a2RQ1Av3EHdm_D>CSICV;qg>(we(`od6667lHoYr=q+@DFMcRK) zR`K`EGOeKLm{p^XXT02Lm>j4X$J(~JrWLa1f{_=m(Ph$VvA;3jm(mfqjUeH*1)j{N zAkI%k*EY|3r0z#*+Q?b6%vp^Bwl4!dtoBCq)`wGk$(cS{{F6JO+49jNqT$zxk&a?# z*b^GI$CEJ(q$0*ptr-n*EJGsVU6to7;U%-Rsxjace*ugx7P>U5B!q);AZ`2I`dT z6|C2e$W=c|#(R}j4e4#Y=A&tG7UTh^t6L0O;uYzhZs~L@2FH%EhJ#?I2H?r?Qy~gP zw_x1yj?1TS`?p~W4rYeAy$G|mRCv>v=V)5vOWmzNtSEssBf54?$CQlY9#U5q5yJe) z4B;!<=@nZOSInu*v^a2?q7epb6QCEJbk*uL2@eX3@@&$%5f1Mcct|Wn;mOOq!|V%( zAF?>!r@CRmLus$6ar5~+R7p$-R>gMRr4C+}GxW{wW4xF%rZ^3vSwtOcSK9MI^=2qXs7GAvAS@Cvj3klS7^y4M zjdnhp%bDVRv|d)TXol_TWLjEErkK`-pr-n;mThkw2dmwhHG9*1{(O(+;_GAkkB~o> z@-yORo^snNVS#puDC-+SWb_Jz&q7+6)ZnlRQglMMb^NK3F|-^wum4D3<^fz^L$_to zyQjetR905hOnFS9&P)=01SU+D-;%nLni*O8aqt%Nxip_SJ9`d2FRQU)sRfkqY#UnT z*~NKhsrq9#v9CTvBzfi`bKq#f=G$KLku6XcmWg<6z)_+&?EUPY%?Ws;mKw&%JZmT3 zY@yvyxDwkZ@h)37s>x5^^D-qr4`?0YZwbTZL_m(Iuc|s;xHb03 z)(qb8CU5U6e5TFTgmdjt34<=;&f`{9ds&!*Il!W0d%<@*GMyaYP3Vr&7U zVmITQG3hP`5`i^u^{rFhsGC^hW!DPyhsm~{H4+u2;HkiYT)jw%Hl%QEwcouYpgRd* zQ~ZnIz3nNh5xW}#oX@>r5u`N;Z^gn6G4`IK@fN$UxaK7+UZW0)jX+)d( zvKXkpTbsEKBfAtD8Gh_k8~qS7C51;-qkd9`n^EQwiX%i}ebtY{A2V z|9N0p&;j?Dv|a_KDFwm`;f2%1$gSefW6Bg52G}v+L-s06;9E*W+hDsLlFi}-nEG=j zf}hCMlsN`SHP3)PZT6mk-sI{$zgY8jM=wA*wc}E5168YEwl@l<*fI)@6dH5Fjy?k^5}Xaj-56`Jq0ajyMeFok%l1>xmI+_xRj zb##Ode(&)fI*H1M4FcNDK=?P?6vo?Dv4fNGQ-MLgTVe{U{xD@k)2O$-)ZARfz4YEt z;s*0!Vg~>^GT$%0{O?BVzRh2@#OLbvL~Tp-&&lvEgq7JUoHRu^7kS}d1z)Z~9WZHV zhyz0kbBc(kEj9kBe}`Wx>oczZC`T*6w?5k&*2mh|hIgAlrTS=*^C}g36#ZqLaod-; z`NPNygN%c&T=MeWC&3VpwQv`e(HK&rEsp8gil*|&chEF_`(e6s{o@U>1SMFCSef&V4x*|Fk8%2{!p{c%uSCw0g{jVZqkq1=Ki2Z!Jj3WmJypqW6FI)L9! zAT$mTj=ySv)0*zu?yc7buRvu$v(auOSo%I-#vFVxII)c6SnRCb>OO<1Z;8XC=WeR3|oeI%k!fiDvG zU*GN6biW-t6mOst$`WG&Gzh8#28!hgiARSFpqpC_oVtedLfB*f_?dos66ajS&o6z3 zXD)6b4KQ2vIOt`5=L)g*WT+Xb62q`f>R}XB!bU811bs$}0hI#Ms&PU76lMp@+ z@%8^6)nEK}D3$6kN-bB3%(c=Fg(m;NX@Mhfa1Gp+RfplyQk_BdsgXvbN+9S^)bYXzfCDbmhp4Hh6aFXZz*#B-(Sl1j3K#`i5mbiNgYYP5~fYvEa zT?rzSci6>*QM=(kLzO`;J2NC?lEt(^juUZznd1PrmIvGeE8%2jPvq8+Ew}6%p|O~@ z!}rA;$f5>P1D38r`1F^6gh@P@d;M&_Bm$l1Lkikrfi)ol^5;kHf;~zt^cRGxw>jY} z!2Fb~1c4u(XFmSaxEVXyB2hvSHAj+=bFm3UJt-5*Bl|1rInk`rw1!f_$GY6d`sm4-&OMcW#n2sQL)}B&h6PFGd1NIUlOC&7=`xr-oLBuU^+3ry zNtmTnKuA45q1T;<#utM)m_1n$`cqrM%}pa|<4LBA7-S^b(+rM@eZnCMcrnEbx;+2Wg2Hr~+bSu5&qHB%&%kR!=3R$UH5=@Oy4ND^US&n@PofYaV0q&X@?rEZnYXqUd$q9Y9lIfZ~{p0nOPY>z>1-yaXaD2wE-m?2c%*YUeB3I@{dOLf$B=J zLAeBnv#bcyp>pk7wC_uhILiH%-!yV^RBYH<k?mJF&W<6h_b}07{O?R zbyxwY7Kt4EX9qPa#q)H`WM*E*CECo3-DAJca&^F%eKs*^$$^#(zF68dEL21lw{{Un zN`C*Ay(Lb}_j<^R%>zA|oiEP>G?T3+D&DJ>^v4yZ zaqRnzUEudIAHv8^Fdtw~e?~g}IxLI9^i>5$GEydza-u{rf&x8Z^Hi6vFOaKsFy}b& zKd?TrM?Lk|XB}S*l0EhkO;(3?Tyu)%5dqZX@!4H6Tr-$(mn~o!O!n;+3CH=FsR#*s ztuBrs;P^kOKg$GPhzxW}8$%vQbEyP7gzi!0#K6k$TPme47y-Di{|FXO%lTe27B4Nudg@xIk7zj)^K6g#cjC<&#e_4ZP4wUXOIg!GZvB*|F~eOe<+?YPiwP#Jou6 z{|Q+(Ju0afFEnx69?*s@{1R{QZ>G$;jLfb!t z4RSFhI25y-{o7m2!-*WRk+%c4mFKE3(+H}%w2V-a5) zqP2*cqEPXu-5--~oG)UgxOS`hNATEfZWuPMUVyvHzQSl3VJGvbB1GBTp^kDmu$uPoe}I9aJv2=o4~UyBGbJF%F9&FV%STArfCF?+ zFi)>U70Kc8-3Tut?Ig>qXrA{&viH&KCHQsEZhQ7Wy-m0&DO&gT^Bm=*nlIltsO4q9 zLX41aYqN*|=I`N^vIR*2IN{Es;NFE$qp|F)F<*z#GqT=hxAa25{)!-^ff>bqbR=s0ze$Sc&_zatZ;plTjGa> z76^$n(bCYSj7s6kd@ppUg9H1cOjdH0IrGQ!3^jKDc&8S8KtrTvs|_(*0SdzVD#dVY z!@@B7sl{XcFUQ*>kLjJ1dua6}h}JU`c?{2phF!Bcbu3!*eQ5n2E zr1i3D|LDp|DTyAFPMj<`$p=ha{PbEDY*lTVNV-Mrt+$e#K<$WjTN3S$yuw(}H@*xx zvll>J;}d^q(GowKHW;G|h5C@|X8o;id^a534&A%0k#VJ#k8Y`2wc%izDd7DXxD8@J zNvNs@Z=+J zRn$k|w*gxOKWGJ?P5R{p-uo=!*ZWz6+O{G~j>_+pydV}ep~p^s+&Og(i6MR0D^Z$t zsnR6|q(OP-^#q64Jt)tC41lDmuQ3Z2Nj1!l{f}Y<2+_k6-Upt8o1%vacW)z!N{o9a za5a$a@A@6wrTM-_LpFPJ#C@X`WBy1T#nXT+hpz&q?urp}(S4b!GurPHzsDU)c6| z(=~?XsFux{NR@}@BCRCB6frQV}$n-<-7g$#6lg8E6GmPkHAOb7_gZ%8lFE;$(`VH|)(ky0NfZkxej=-(v3D~zI_$IT z`l4xa*un}SrXqRzMfU2STvV&Qa)Wp*j9(3c;)othMkk^vm@Mbc=+ ze?X*}rMQ+d2gedosZM20G3LxPugw6OyonQ-eD+rmwhL~n%g0|VxB{r$#1SE|%z8Xb zvA&9iB!wKr$O5-N%fiS;J$!zAJgI+s$*~m*pUIW$x0zYi~Z{PV~JzYWuYM>?wm%GQ4_SI zDtQ&;!0)~~fXXYY&ubW%A=jq{j;rlb#lD%%U8n>Ivqs96XCzhM+8}J}+sgg<^HVSjjzRk#R?61}cO$0KGjHc8|KcQa zDlsRJ?)SkE6p^l!u{ZD@(%7^~&b!?M*oeDgk4TUN=Ay%RUi5~)LFLx};(p6ku-dzD zzAJF)9`#x6!7^kTfHJIM=OTSdgGpB&22%hY=b!r{n9hH`1;b?vPFn*yZ9G#lL7y}| zpTD%}L4f~; z@ySux6u$=~%yRY=Xu!XdO3pl@^_|_$s<6uf-VH&LLIeag`^OZTegcJiaQff~GlsI_ z{voP&GF*dh1C9lrn@TqwJhVR|tazkr`9E@)ry3DW2A6sWHw4 zcXn3Q4GQGcs)N2vUmXW^1@V9@FSBUJCKfGA9nwDbLoWtiOFY5)gY3UWkSM2oQ_u!7 z1_Pbcz9n=WQ4J}aSV#5hU4T)eIx{4L_!rVnj>{=_ll9DO$k7M{Fhc1ORMK_$;ftPs zCUa-OQr_XeUm&RyeGr{2Uq+c5VjAt^^&+LTT(*(A1PD`NEMmfxP|PM#TI)9I`1Hg`B)WNfKb|tX$juCNvgRfQ16m!{2i(ebT$bX`Oc(CFq9v z(=x>6u^;)E7!iY2-yQxnmfcx1&EOcjIiX~JQ$$-(W2u3I$1g%JzfDV7`ZMB|K|r<^ zkjqq$5l4Jh)WB>MmgPwr-ij0*jS0d>?M^rv#k zC$5seIRyvOXJ&RwXy=?8{Nee3LWw~{(M7#Ldc(buvOB#Z1y1jgVS=o;0MJ~yAak!gM$d}{5445PAlJ|sfYonOWmN&KH zFdoN7VB;I+ZFNJ#R;jayY=<9H*}%5N2!RfLt_3ldyUszss)wX5dNUcZ@KogV5#ppnK3G^L94NC!Z|A=A zkHKmU14eHzEmeVr&|Fo#P}QN z406|UtDjYFC=aS6rNL=Y z0}{l^z9Lf$%5O0hSe7I&SA+kqnJBL*SBjN)BLGkQIbgXNfVkI5%MT@&02PM>5nF*w z8T*S`k$A1JlE@PFRminV#A-H?w%9XZnD+hDjS8tUC^Pi{=QdJQ5+2+3P1GEPa;Nb` zWQmsG3ot6woE|n9(l=#0aaz<&^EL^!BtlOjUm{du|2~Fe1Oy6oopGkRd0sE{E8))< zXp8q@;s!r%@>C28W6pQv)kg!SIF8Z8giwK-2=iwX%VrQQIswM>Lw>lCT`k}_x@j79 z*8>*mq@ zq5FYVVX8hEyk=-%L{7BxW#XmO@x+DK)?gjfiz#(2Ww-lCGI>FgbsPTkSzpD)6IGZlEuLlJK0XznY=uYjUF+dz%W@XV6Z z_jDm_HmfF}i1!m6;y;1tt7OSA$(z0rU?zuJ-F;Z-f0AfhHWulw&zN~Wv(W`64%Zh> zw#Jd<(0><+d2TpJeX$miz?a~6h8#$f&`Hn0DU`BbxxtS3#{@Vj>;*Sbk8{=ALu2Ygw zmp~~qTJ&R(C1?+h9g+DWt_q%jMTeQrJRRaz3zJOo^^h0<8`rG5!**Cv1*;Uc5U7?s z*b6<3iaiek9QhD`6#fehb&DbsqNVxNrrMZgDz$S85T*alZIRr)u>sW!7|xMUP!K&H zfIECDm)&y|N$*nn`Ex&E*_DZwVzGqB9G;fZjJ#5h6jVW;_OEBK6Wd|AwkXA4DeY4t zW}5-4Ilm&afO#-W4 zea5+oNyWFsjXJ;6JL+E!#1EBMj>iR#hyeFP@jh_XI^Ckn#qA9=-iw^HgAwF@f%Gc!P_n-Eua#_+Y!Jgu^v^EZIu{)fED+g{OyWF*YN=7CTc@@^fBv*T`dg zipd^cx(DM1;3Np=4}&-HW|8m+qNy;hM>g&@LC}wVjDZ(xCPu_y2nc z?hD+iTQ%o13PEJcawwAYgyntnPXNPwU3K-V&y+#*#=MGFZ&;k4j=O;L_fD#=xh-uo z6M*B36oIQW8BBS1@vryAdApG6Mi;uqp$mlc7;wPGdwT_|wN%#?kpP$`Ag8zOtd@vk zaE5uKvW+->J6(f702&r0&{wN;eU)iNFI_WMn7L9_26~7&DVOhgdasxYV|pNWhn}89 zpCb2k3IQ6^;YnR&D}BSgrJ!45u5z@;wHfb~xJ>s3Do#vluWad>xBvW`*_zE?1tC|F&=zVcD%2oDwbs$;eJkbd9#=4td4AiX$$XIib*o=; z8vQm0#Fad19V#$VL6->uZiNZ=RMi%z}Vc~I-e4-)#_R##N(LFTrnp&p7NskG5BKGe6~%Y>=y+<0e{&3tYA;YQ zhlpV^75ks6ozPezddEJD;$9ZggKJY}ZCw7=#3*-#z{`B_9;(-{A@x7_@NV_7A{myYJhf2^0Xm@nK zt=VfZM#+^F_nHn!xS)Oj8#(T5=}MQFtFt$U*lT_9s5MHDArEQm_cZ4+LY5rXMy7LI z8Cfp4sOZl}Hck>Q6I8k&W2jyHDPG=7XFKgVSDco~21_?9|5>)7sM_ziM{@hvtlIpNy!Ts*PbLq8i%buFsDkR2gZ&Tj#a-QZWyYbY#4AtIbY zdwjp4T6ok##f*7}Ysw+KSDs3F3Hni8W_#5#6-hgyyY%Gsy!^DF>ZOLOB`_5Ofl_(d z!=Rm@@y7{#$+e;vY(cw!Pld?}Eox4gMHi*yH#ijSRwNu*GGOi4dRbH`r&+P{F@3@v zt%SR!UO<9t*Qy=@COTjVPH%WyGvyrj?hz`)SQrstu-bY-!bSTaNGzQjT^Mv#T+UoH1 z3XL$V4xs@0R`8tS_bYbWn!d*KVyyZXT}S&|T&xdB(C@=(VF6h}Bnsn3=fK>u>F@19 zW23cl*2J+w)PlO~8fX{pD<$}{zy~A7?x}V%i&@!?S_$jJsKOcnVdIPBO;Uq6rR1vA z3j&oImic@pm8WqpMA;K96b5#Wq*2M!;AOE>{-J>bp$8M^;W#>obN@!j@t5E}5p~n- zzyy%`;(D=h)d-ew0(ltWO0=Dra2SYPjbR;ua?FP*ark)H*om4A+TcI}i>Oe#eaU+t zyFxbu^5z4z{nV#q=N5->B8dPWq7!-=IAT2tH1(CBW)uiFw~fLO%{#yvyeboS@W|n2 zels;zSunSani(t7nHHYQxZQea&;|^W6}dxeGyEINaa3K(_7RQJBNN$+pqmH9d#Dv6 z@x_=IUN!!Q3j1Q|k%(6J$MWq%_bUs?S-Qb} z-Cg#m^3IZkHhw4>(XqAE6y}KUwz3+$TNrd&WmvlOkDHWY?-@N8o+||gjdYX4?_}zH z6bXd+>E3ye{hH<&0(}VKybb8GmytDCV~~n+JH}32zz!>bVO?csimOF=YN;SHaTJ>u zEMb|f<#i2y08oI4N`bW+QsNw`W%T(m^jZL_pX0K+EM|{JvAgH?H55gKM5!u#y+;^YGa{Wo5 z^Cwp-7}V)I_qEL1V0!UA=8F5KX+l?=p{Hi~9`4t_>$zvF9h=(oMOXrDK{CHIUy@q- zYzA?{BWSZ69z7#m%yfG?tNW%GjZu3?035{{eV(_m^zF*LhZV^qziK~XtOKXeXi|{{ z;UcZGOfp+L`>+IOGpRo}srw2Jj$pN|&sGmkLjq!U^p3z+U;-VTTqF8;78$vyPmb&DeIUFic&vJZ}o*&O)w}s))C?q49 z?4D?Jo1jOPrRO;aF{uH&MJZIzK=j{o#kaC-#C??H#woAQFNW}U616Krs>>R8h<{K8 zraX84LVi`nOyUAgsg5^Ns`DWRsoA`Bgm3>>@Cbltc_H9M8P(BMV5~jNj8IK-asS@T z{?*&xOgupfAz59=v|4$_?Zu#FT#FF6wNYip0VuV=IGQ=Lx z;Fn`NyqTTCR0*9#Fy6ql=2hzok;DUddL?RWy!6Pl(ANIM`nUopTaIx`=QW23s7h~~ zBNicQSP1SbRX7NAWt&Da{;6t$-dGQKUKr22YBu5gd&7(o-`BDk1R?MyrM5pkrl0{O zsmZl@=gw~n32{09BOklJUNe%)w~Ijmtu<)j^D`40rUU0wFKa4vO?3F1Zo_`F(4G=Japx zDdR?6b;V(w+jStCc=da7W>Z;bDt5qc5xSy!V`|u5nN;y{Xz|Y}V&xZL`;V}i{oAD& zTq^-#;LoH+M7h|%AjU>$@8Tn4-M1nW2x^?_tn~5ro>}$~%5X;)=-2#LhF;sT^xqMt zM(+EM^$WqVi9}wQ)|%f;dUl>a?{fyrOWke}0ZfD(zJiU5irKO!TT<@Dqyoc@ADqAi zD_&ga!S5Rde)zCjPb7fJeWML*^E)^$aZ&26qvjjowF>zYFhas~`Ch16!84;zm-WK^Zq@-qFQBFz4UB ztrpO4N!sxpByl;f8$Gq$@Ueg$V?PExRMP=z-HEhVGTOswu#>ABye4mBS8lAg((<3z zwSJz0gA*r}n0hG9RSMGM;|LZZz}}1i>=IL_5aNNBvVieIhQV1qoXR37NhHb9yXjX! zkbA4b!vtbpmOW@L6QC3;rhtVssqV35*Zu~&{^)BDN7=V_xa4?NuKPCbXhH0a#^)cK zU_rj}Byf6+M_zr0mo!Hx{J96E!= z{+hVC2;eFBd)nuR>9wgEzfNuagjXgCJqK9>z#I_`x2lZ7X#MJ>de5+bD>3?{74~!X z04>g;FXx81^0+u$3P58*LBRza2~O6Qk>Sns8p_strFqcA7hi?${Pp|B1UT-g@bKI0 zCT7|JgyPu_W;d6PM{7K1L4aA|v>0*UrbU3dX#KR!Xl$GI0ln!p&r%q~z|jUY8%n|; z36nN<4-~`yizOr!`spFQUNzY1j#LJO{K>yO-I#x50I^w>Jmb#TT?Ocq=yKL5^UHOs zfBz&Dnwas`O~HS`LL9A~Qac1zF?>;Q-D35)#cq3>8IvF)+Yke*d_vO=Uy%HloCSDk z0+mltEnhJwzo5k^2=5^FJ#1^uwop>RRQO<@urB$~w_slfzl7;#qz7ca8dqt$j5ST1 zE3Kqv%(ZYy_x8Rk!zGf>uR}T3NEM)@THFS4nmO!q7=5bn1dp&Yl8FQ77p=H|>B;<@ zs-^a=n_*WW;4g@Ir(1_52PMVHqT@sar}b!X-kol5F7(}w`?>Xw5}A>o*^9@=rXV}k zu8xwIz;K(yPf;BCS-x#qZfR!dj5YFh+z65+V|FFV&33gkje-`!U(8(3=v;B zM`hbnt$nETVn#Z6&`=}IV4A^dLT}0jTY_29M%H8}?+4s7Ov1~C%Fa9n&>gVh)cFl^ zhrk+WnrRm?*%d9YzPtdpc&6dC%Obl`f(>5LkFD!wfQYUj2EoX%aW&w7lvXw5vT{u} zXR?r(egKcChwLzJinMOkqvFd|yapH<=TbEFMTcM{?{>fcE!UOtO7SG3$Hrv6sB9BA24cJa}npezu{0}UGMMyre*yT6MLOk?bD zqOl(zBz-{HtJNxv*lTCjkAt(=?bd{aCajnkM7dc|7_?bjq5#Bu=FWFf_r{))if8%G1Gz;nm^)g+ufg-=?wi*C^Deoo?Ss z_A%-)xbr6{-n4kmEFm?wJ9dC}2U@1vcL^*-dmKKa2=#B&+T3{_o6U^}~bYp|sOdX22e)OvF z+0i}hwM?F90p=ieK#curq6x#hCotCCOCS#1`vV_0P@GxJ%RdAVw>JwR=%u#7kAvQ$OOHtfRnO zn@F=Lzf>4z>N9qH6LiI_s0R+7VM+AlI6^~L0uq|9dY{#W!S4pY@63)W>A%A~I1QWm z$=gEdl4*~ZTU=f@(Kpn|lL#F_)|N8YKvE7Cqt-Zt9FhP7#f$>Ett<0^Tn&g?V)Rgp zY(1~A66G!@q0r-ns2+(S{R%MgS(0{p$a*f)bZaWq$A=RrGK4J#QKdKdB?vqpYS}to1 zWm?fJ4fx&pwYz=?iNn&Tc=N|U)sq4|2kOVoM`eGWeeN=QROCK&(qL+EidZO!oJV@J zF0yIT->Yp-VraWlBMWIWn#n>qqdQq_C{TO3&|@ClKzU`ySVi~h0S@-?4RT9-^g`&g%vk; zr|T8A4f*4MnX4qvA|m6Ed$Zk2L9u*~;&~#xX2Q!6&zgr@STZ}#RkKw?9DvZ=QN0Rz z_z*cOSqnS9WJAfpL@x9)m`hl)&K#gc^$}ddkc%W5Ve|RvSj;Wp)9T}ThOJk($`ePO zM5=kb3O_=zJ*4w@XvSkgO>v-Ef<~35c0>bFLBdYuz5WrV-IJ^UKUQ*~3@VXBm;)d#!iZW84)$uMCF= zp6!SL1)T;}Ia%}RRIm%{tcA!M_ujm!#>qVukHfgxc@>NNsy}0*$Bok$ir>~XY*M8# zHHQ>vWHv`+9jtwyxG5?*Jl3D!Ndc(LSHY<}lR|%|fkBz588jN`nV?{9`_Tra2^%|g51Uc}Fm zRk%!;cKJDFUg}p1{k!L;TYt5W2Kli1o)7*vhooH$m*+NdjgUDg9;`r`aQ6it(^zJt zWCp7{|Jb7~%`sH4e*_jtj!@bAok4Qt4a55M83NaOz;xl70P_Sea0&)_0(9LPA6>)2 z#9zZ?kPl8on)*N*RGVHVvM&E)VXb96@i$s!yFyZ%6|np+FhSTwQ8vM~TR|e{Ss@Jq zaa0&+uN0XHMS+}@wsnfbpM4iZwwF!C1n$kfr2eC*d@(?!4SdG$vSFJkRx{=+GNvUD zi_XiXTA%B{&?|v;2LfUk0Mi{!^pIfTPsHSX31r&~`NzYgjaP!9y$;h%G!DS~ogY6EY0HBGW zJrqZUEY3=dW&}e8vvAH5jEJ5^^L*0RWoxWOs__h(PB80~dcDFDmGEchMkCan zYsT{h&VjnJH*0Xijmq|fcaz2wOa8IympB;;z|^qP@t_W*@d-*jpL_^`x^cY;e$2YBLpD~* z#dL$6HbT#Hk3j>AFyYatuv(>gW8%8sOOkk~sb*8KAKPTsuGxtzoOH(GIV}9)(SNY{fIG5 zp*LS9NKkf<^Csm(CG_DDRQs#mC)s&-vJN9K;kXx)5cF?z>zxa&^_6jT-Mj-%G`&CbU)xYQ z@^lRQBuqjng|K0#YFUhpd!^p72t@5pUeHqrM+x)$e(>)c44OQJ$(L#|bwCyMnCT_w zaV>u?_{K)dy}2g_Gzr6j3TlB`@X=+1l5Z|xK@Xa${40Ar#=)H2tlymcCI7)Vqg}+i zE8Rh#7zZxnP|57#)07tdboOg9WC2#t!>6VzW{1uV+7CeU`ZZpJi8{p#Mg!E^IfU)X zl@KMYgq{^aZt?;l5i@eNYyQ}@e602i!F=OCwuVc1N=72H5-EFeX~>uX6PQQL1IG3% zN4V}VnSd0sxqLHRsqO)^X~)_&0}@2hMAa6>b&hKqWoG$`=jVSyqp7_;+c(7Y>l$P% zmuv0&TZgWWm|v5TkQoNkO-SqveWx3uXT2DOlhrLY^G!?!KY&%q4Y6iKkBss7^aLP$Jz3iaGF~EBP$tSmF`_YqEB@lrIbT(O_)Ee z7Gr{rM-@-agmNqcW)es}X^8WjQ>zW|%w{Je&S-RHQ_v-*-xk!OI}71xmx4~2jdNED zJcbS*vKDcO=DAYNyQ#LeZ67>k#2Z+h8A8`k?}#c0e5?q=aAF+gt0V%zYj`HEfsF@s z!Z+(-)P}F?M8-n383~G!%HM230+0@*B_Sx_r#z2dax32nf>@Cda!558v8a~qPeB2` zNdsTjT<#zoFSveGVh|Ao85rtEs8DhL^dz|&#B4WO)`S%qC zvC%@%t%fS@qps?jp+@dr-(%r#N2=g$awh*@J}K1h=ay%(pnw8)i@qTQBBkXM1>@4J zl9phtsg9lNMXoE2ak5P+wp+&pX%?0Fv+6(GIRBbKp?5U4snViqn{7%|eWs1z(|JM6 zHpPoo4@{W*96|Fh=aWN}>8z6gj~yvTcMz?x0`P&XL2ghvsU%o>FGpdw73^$z4L0KU zHJf(kE)w1rKi(9joPS}dec(kxl?RX7AN$4@7*NVn;^eMz7@ytGAe8eq9PmUPo**8O z_$)D$?(gpz5xV)_bk`Jf4h=370dLO}y8WK2P9RfY$^x3H?AU!joHJ?+;sF%$0lo;{ ze2slX{DyXXE4?&i<%9k+N3ou4AyTQvEnf&-=E*jLB%?C6aq+@Vva4@&x}N1k=mJa9 zvyxdnhfdr6e7BkMw-8?hGoV5*mI4B|LzcE?@Vv za>rVR#&DcD->4{%H-oDk>A$xTxT-|;+OrQnjH);W)n`H+6nFZQeo{Ossr91i%9lGN zdlBVyn6NFp`xzwAlWoAUPs82i{NI4j%Jlj~OGcy$djBkV*@f(q31R#=>_`L_#Zqny zOfms$FV|c!a~xEqUnB*l&dD0m=!1BeXMnX)nIrAiBh(}_SU{M3vKVC5tN zrN5){pvLu@Njwd|&L938CT)eg566Zr-i!NzTj_fmsLEcRD%~ycKqUSgNc*wA)#uCL zT8U!;ZSlI+)GoOodHE=`UtRb_v8n2AMKV7y`Z##4&V}_X&ISjwcjhE9twUM%Q*UTl zXb0#(aby9ntZyK%9DA04>-M7gid6X6>**~_YC-4wz>YUDb}+z>SNyoqJe2^1J8=1kxHQnKyR z9LULlQkNwHV?O1@*5@>lTlf5YEuHy3oc_b*=2aD~U~Q&%X_LA1-|>;dcKArBWMSwN z1hPisZrVHMh57QQzUDyVxEsX{8T5_bNj2L@V@`~1K{62}_Po0*a&jMGX8xj8~Qmo6Lt|^SN|s2NnCIO;%fJD&DQ`Z`3?V_Jl9~}FwzTjxn0<6*%VF7 zic4##p7<~5Mx{MAFspPqXPT2qO4;7|^P$NkR4xA()#{4>Z-3tdC~LSDgH9^J#T3*Y zmi))g>}I6>%Dc9k7TWPKg=dThjINp*T+FkwQTdmT9 zV<8H#E{kWK*KSw95Mj@OPp~Pg*OPfa&ZYj86(Z}thL1`J0A8HMD;D-qGqJ_RxD%or zf)?#V7}0|;=A1oH;*`5M_V9S_%Pv!ZXrF!-pqd@UFVzA%va^&`{Aqn+nmCe&Mi z-kf+J(KSGZu=TgQ+RcgQDn=zFUO`7Je?N1hn2-GE(K-F~4o6AsX*uVY{4P&$+N2-5 ze8(I>$5qjKjz56?@*SP41*ci7F2oZzB_k#+ZR#$(s^$7`^e28LM8iwbyyE#olM1Q| zNPXMmbt$eK*9TL82b+gj>-{YQGbxtWv6P45HR0EJC}QBe?tE;zD8ACfy~+Jjt@D`h zx>8#2#-IC424C%X7Vifel4~gw+u%Av^-+SFmJvn;zg0PC#_u zXl^7D+TYRs-3K-B59XVeJ*PSve|OJ!Xi}nU0DI#ny^}tbd_cpi(Ovdsbm4Yrlqv4Z z)=Rc)khEtge|Dl64Xlb;dn7LG!8eyhnT66kl39BTho85764Ct`Wcg{uMK`5>efIk+ znERBPE4%U#7hH(9{UNo59K{e09;dt;bgLCa&t$o+zB{8*B@7|f+A|DUR+pL*Vf2{L z1I0J|l!#y7rZ!rgz|3ZA#@I`RfOfNmpY95Fy3m#J%_TLNwgn<~$Mlw_O7?i;9n<)2 z`R8NMdQkchY1)!%+wyPmjU%vxcDKN2cN%&Xo(elw;_;C1> zBiB2^AQv275Ws4HXccmSw>4;f6Q_c>OCY9F6*NSpy;^n%ylUXMBZJT?#!rdXY)UMs zk=#BR-y2e-5IJPW(_34njK*51XQC&=m>M+hV5IphLBU|?4B$&Je(%y z?uspft86oDlXV=RDI=*U{e%>;i|2fB9l#ZJrEkUqc`xp?Rh5b$+AusJYH&!;Vi1W_ z(1;zJ^)wD2I4n;`-E}VR8)ubj#`YZg5M%Sn$FhtAt3_PR5t=!SNHdBpJr)16uR<-u zLiXASPbnh?fC`A4L@W0Sn;FxEATzWR1G(F(7%NWI85Y!W94toZ=X|m%=+rZF)O@C+ zbAd3M2QT|v5*jx!)gC|)3K>HRnHR|z`i7cKRs+vz&hJX*q|=yhgHzj3+wB{a!K%|i z{Nn>Ik5Bso^*chbvVbw<{3Oo@hU<<9@E?3s0p=@R+t+nL!F2owsNn{%WqvhvusVHk zxTFdrk3`-NA$DnKZzvdryKXm#%OVN*x$mAd!Nwcs*dG*VyKz2OWEw&tvce?KSTh(S~9bBN9!EG?HFgU>xsKyD1Zw6rsXwHVQ9g^)MiQBm9d>FPA720@u zPHFz|P&CE0dnMX7R%Lk=O&Vege7QA;GwB03{mIv-aj8Aa9?XTp$#^S6yZ)Op054N# zD|gZ$^wc(Eo6Zu8N9cb%Q#4??_*G%3H3G)C{z&}@M)t{RmnxQb%M9ZUV>`moOjOqZ zg+HA*$B$Gn;Dv_)xL{Vd(=Y0Ui-(b4kkQjO9zJwoq<8UYk}y@ecnWYWpna59mX7PE z{0}*vO)&74H|ry!w7UqFYE}*

ah&80fxb{aKF+ZaJPsj_~orzE~aZOL8xPt_T@&8w@6^4fHM zrLP2lOy|ZQaSH_j@$vWkbd_Hr2_6__ozCAR^x#ySS&jpjDp%Y6w$^3xP;VPzf-;zx zHfg@s9Jv4p2zEbcAR|sxFyJ}bKu!|*9sCrVVV~PAXj_ZK=Mi#LL~f5$GWFt_^nT~L zfkk|QsOv!ULn=cb$C;k2bWA~@L(r$Japht7)R?q?V8pJ^`95u1I^PLqw>E5?QDYV zOm5XdS?rbTw{)4ntI~OA(p-JcQPijq1;eIiYfx5se)lt@?-}Xa7nNe`c?0hh7_7m* zX}18q3`;JQ4Cy|ZfxyH1g7%JQBP|W&!`CSMnqo}a+3csw9hhqb2QROcF;9CVH99d+ ztCL}#7GBPzgYRzDi+qoqQ3M+yg_4V&q=@wLhmnI{JF2?gWMKomSM%54Bj*&BBL;3q zRvKxB-0^5KWu3LF{AWxb(xI3n!vHGuIn7(*!h5cj-h46q;k6%Ubh7XGNND8Tg87=1 z>tEMj8SZZHvLhq(?Qv&EziDbp3y{9_oX|~mSKSiA@$m7q`p{GAhP&;>%HHV=qJ5n+ z_hnKbkkp=H_qzpDdb=j~tVR!<=9UP~|R zOOr^SLU!1}|Hx_^sjufem#Gf2@q(@XL-MX+BvP?lK6I9}kPQ=}N!P02zxsoc(17>Cs{D;j) z+Fy{M14$fDI7~~lx@4T2k9v5UEz7vutde$x%sB1I)W7yQI2FIns@gL(K` zu<8m#8GT%$`9~el(_J#@^SRzOgeDeaxiwD6jv#MBgoAMf3PV?AdHYt#4~bW~|2 z#t0ht(>kWKr7DnaWNU0dav-rxizmJ1c~G_8%k3xUstx18l_@1~)6N7X|D>tHeo7 z)Zp}>H=tF{Ksk2|EC4w`#=nY2=rYN87+bn@BjwsRm7P<#SO&HUqpR$4GrRoW+bE4vSfi-uGoF~){GeqDHagDTENW`+ZPNRftf%z9ZqLu90I{3C3>w3 z-36%BNj&-Pu3IJeGEDWalYH92b;?gWVMafTNW_0_Fs~EU4F6@zzWp*JA)uuLxvSDi zBQTtWK9|)mUBP3=v_9ES!Ol4^Ee8sfIR#AJSX|Wiv6HB0gh7w1gT+dE#+xyUp}8cL z3*AKJ-X1edEd1Hz5zclFLud$-Yi{ViG$+cQB#7KYESmr|+@Wfc8{JgjTg7U}Aumr5X>e2|_k+(f&6%Yo++( zZcN^d3lRJT)3MhxTg2Hn|HY&9OC!$e_yLpDHyDF39$>)7j7nobNqMT9Hm$(IkuE7F zA=(QGja_(DKsCx9hw81{|Ad%zc4l%}+gz#~TJ)*d*LUWsmBCl2IiWj*u9jv zR=CPi^Fup-bV=X;ut|440MH3cigAa<8ApMQQ{t6UtucN_?9OBT)QU)GMG0iNUD)Bs zoIArSR(ghDk1Q55k+k$gHdBU5cSeGfxo>9|x&SX|a3#2Ag??40iGLQ&rzd*}^VK0WsT1r=Q zuF%|PuNz7S-jV2D^c|OH=@lx;P#9ox&(}hcmx^~hO>2xn@gKWTdEb2RS~ibzKfpH$ zB}h6QKbGp<#f%%!SL~$_F#6&E!9<=C+Ok0#ea~jM42Sv|r0EjL5m!NG8Ckt8i|<3@R$6&2EG>9oHlZXoJb?;VMh}N*9FNt zV54moSyAaRvL-+<0BOM%mW;m0fAoCFH_or5%4sermQ)(HqFWbK5&bLE7p{Hvdl2i! zO?jr7)hwmtsV;iKle{K;dZ7rGZw(i!PWO9j!~Krz?^UhuuUNtj=>IN+IE@3&98U1t zNIbkSu0A0PXJ&8}W+6x;y5%Tlk^C;y!2bz4d1HQ@7Td{8N`bkNcB++B_GN|J(`jlv zkd?b&85HEgJ=l=H+^6NBwqh7YSE#SfjU|whEfq&$+Y$a=34TsLpqSLHeA~afj1;dD z-wrG1I+!mnZOL%gq0F&;{=V4x;C0H?>cG?XpwQe6oN;`i{hr5ypaK>If8z<#UW1 z06zCNVpU(v74gi(M8xjIFKR~B7C0wZc#QM6}$p?(@%vGH!3bTzTZpY)0nO&Gp^&mm1k(mKWm0kdnC~%|RsGkaT8@ z=+sXV;h7gC(x3(A-~DO4;E0s9YJ<{f}2*wrUJ~OZ;1t@;@ z{ejvWn7CTZHFs>+7cW9|D*R>X#D%ARD@(Tv?rg->3;}cB0EH$NW^UpCVP3wc)wR%Q zvn3q!(N6Gr2H5}9XVZ36+NSrJU997W@MvcLtMUg6QRC|pkDwPI)-gbY#4Z8et2FzG zEVmENzwrAv?l*d}N+sTNBA2LAKJguaA@xgeUynP6e`<@pRT*^_ ziE}sC|Mq%~7;V6Mm%PEyKnh4-9n>Qc0UotU`I<@xmr3oG{x~vX(P}PuDK?{_6bJl` zP~ylnE4U`b(AdNj5)yfj$fy(f#Ohmjh`14;J=%8selc3nb$iZ-vA9CP86cDz$5nvf9KYX zTmZQ-ql!&&Um!aNbo>eSnC{K+eQIhqt~4pH=$^2B4l1?m#<7{MNTmQMk+v|PtiLLN zvHIMh z|3{K_grzmjBeLe#pS;jNbyn-A6lQx9fayrPYu!X4Q0{U`h*^)-Cw9tE9$jhl|n-g;6c*T&{~c!$m( zvG0YY;l|>e-=PUuDeL@@NFG9~n|U#Nyjr4Epe=`jfMyR1)(h?2Wz7Sn#>+Ay3ldjA zn*9>ZFp+R3KRXh&BC5Le6*n!oowuojnu}k%2CAnCrpa)KiNs#ya6ybKpYxNGghPl- zN@OU;+smXLyo~bW^sr4n<8JQS18G>ArY)-YV#~#+Xm*ES648S;9@s$ zJZgzAgLkqv`V)CeQS!fQ%grA@YZZm0ten~>Gq|6lJGukoDeo`(@Nz0~nryX_{bX^Hg#~x`{Hgau z5v*R%ss6$EuqOWlv_v+aA&b;k3=d3xPek1h>~PUIshU5a+101999c}#ArOGb6y=(= zJ!DJ`wVE6!JoLxQAUto52nrjbEX1dWfj06LxZyD`3oTkXhzOG~Jgd79#P0wv-D;?T zm2gcj)6GB>A%3oJ@|GN1j&+WUtF&R5_OFW_h3X%E6IPwOG(g<(%j0lRIjUdKUfsTi zA37b47#2v^?PPpZ2Lmxv-Rsxwn8X%aoF-p~q8BuUl{A4gSQ{u7hYNy%2i3<&j(naG ze%x{30kOYz>rDlMeMsecUP}E3js9l#)U#xaTuN)Md%8AdH{?rWjwnilJ94PaG!M1M zD4^w5^J4B$TKmI+)@c+MY-tCx@xZd-%8HrJx#H;tQY@(UXJ>x0+Qf{n$@2Hy;2>3snX!hEOtYm4^KKivD+lIGQY0c@5-3K)A94$k)WE%M^)J45k^-!VzJ zc>~-@`z^@8rxW_NVJmQ+Ye zi0(10sx&TQ?k*CCt0*DwJyt+GzzPs|*DR7ohXR@PD-V!`e4A z4pY=DvX*K|rzEZCT?{EKMG;7^|3DJgxjQvwAh{#JE}EvlvKQW$^RUjf(EB@~+P@E} zpF>fsK0OE%liH1TNJZ6V;yYR)$jbjRhPI+Bqagf6e(`+Z7GNWkXB*mAN6}QwERrEW zuu7FH0ZF6m5Y8BAaQ)+DVeAh*L;IBY?)e>7GvGIA2B^PyD0>jVM4z$;Eu3eK9HjHW zGv127v5wL7Fvi8q!4*vy(B${?T~Zqb9@#mMxdq-MfXIYdu2opmbza~}b_oF?kn_@3 zQD(zhV|-v_bZ|Ue51A~`G@2c3$$yuVyYLqr z>6HhDG%q*jTa?96T*K@1H?cn1aZiZypH_`vSK4BCo^&5u4U@9dI#PDTRt+kYvaC2w zJfgW6V&D<(nL*TwxoEA~mp_Wfdq>C_XY%GYM;>q@I?<`qhsbTLvxnFe_|U+%+9c`^tlr!57O6Vlt$X}X2z#xKAPr$)DU`oB#bs6Cr3QE>jU2Zln^eG&-KYigp z4(fXJ7_U~22NLVRNfcrqK*@wkpY)xPFvv zvTJ*qZsMOx^X=qzF$qL@R_dAQoUeHha>eo)x4vw#Q~E@(duNpN9yz`rcH#q}d6S7n z2?NHjBxsoyo3auHUX>Ho_r%K!N!pd!$sUtB(dm)&Mc26 z0x6>sCH@G?Er7vghCm{l3=nOl2bp~}Mk$g+7qIgomKAiMV+Uq-AX1ylHycn~#bXhgmX^HU=EV;(WO{ ze=iZ*3M2)zO!q5_F&8dRltN~mEMW z+89Dk-h$F%5W_JuS`bfKby4NvH%gu_XrdYUm@K#U4KC&zpkV+s)J=6-LZ8x~SXc9? zWvV13#}eAmAp)@2(a?A({1TViH`7$^c#*uymqOlNc!GPoAo<~)-{IDc z9X~HSx*6Esk!8q7f@19QVCGQ~J_bIM?_c}}^WyzSbdY8a>vtMJ<7YN1`I`{5`oovzdDKUzvxN1gd`rBVhr9U@<=-sx<)%m9mm6miLzl z*FDs2fgRi&+u_|CtpuHg+PH3)@O_a|3(?Z< zzWGsJkyl96b8+?X!KM+4l!g|BI^cj5U75A*0z`${gf&IYXJuIznsZ=Nv^(w*a(vCI_O-`2MDdXge~$s5Vb3{ zv{Mq3lCf{vwjvo!|3PBpr2zNKHfk#3`}XT#zGUp1?)A>|*m1ihoHU<<+#MqR9#59m z4=yNa&C7!8WP`Wya_te21WOI5C^=IxhjU?&Mq%!q^|=P3u5Ph_#OZb8Ej2MdMG^{+ z(!UI-+H)3Ij!I2qO7#0He%48h1jCp@4knJcZC(%^;Q>fcYD3Z(I17(yy|8lg)Vi+b zpZxat$z3BxENlhBTC`Baf4lgLZsS$E!*T?nn8#{&D7WPxHH2<2XEF zgjN8U)3$7C0UO$wt zx?)zZ#p%CrLFwHApt1O=vf6{hYmEVZ*1PYSM3Zjd{JDS)gao&;=UEj{21$kR=<6QE zKrDz-VdiJ`fs7X@oC>TskByL?fV}a=NOL;2rKb|r6+o*$iJ^1?W#A$2e=v0bHwOWL zjE*xECThN5oQ1mdw&5d{lJbF&%VJPfYRrm-M8`;u^9eES$ZUwqr{&{;daOxR=VSI5 zD{aMZYtAy$qpkSNN5a!P_2|bGwiyt0jYLJ^>-Qx0m!G2{za$t*!)3gQViux1TFFw( zI)qhAq?$KulDND4K=pKztrwGskK!yt-&T7_lQOS{246>E}fFqC9tzIP{DEZXMj=T~6>ZvN%o8EmA_VL&=Y4}|GUjI`(7 zdu+)K*bOQD3NruC%-k;1o!n_Gd0+#c z0?;-hNbpgX@Ow{IwF`;k6yPaZXdS~dYcE3d$T(R%cXo570Qja4V z6-MU^FYCu@kW>^I<+OMLN)-(=_LtPJ7SQchYp{<&NQ^t@EAZ72ml0R@G=OF~G{U+b z*bHS8HU5v1=G-eUw?Dd0*D77GC6)*@v1MssL)%l+k|xb!San2MGv$jfazevqft6tX za-J%Y8xK{%WtBAM%WOg?+*dLsHK>F*o*`utbv*2(UKFLsb=z(3-Rd&8ipKEh?aySi zP+AOsGmUgU7A=!O@;(d}VuNp=$?yZ}Zw+jb@62<~uTyI5bAt?nLGzS;R17&aoJ_I) zR(q9WU%*)^5uPLYqAI`vj4Q9BeUUfONC?oOtwk9l7Dgi6@)>f3e4o@ysz!#qbNkn) z6^Sn1_1DSKMM-{Ovt-ifjQ4c`5XxaB3w5Lum~wq0T#IGx*sem%!lnq36v-*x_#UQ9 zXf7&DFlEo|Bs+5DYSn6Ty_<4qjS|BnEt~m?!>K_F`&=%%F1h7`HK6yf({l;v`p-3+A-$o=Yd z!0)i?DkO7%pc<(u1$Csw1I7SU^0Z5%GHaDo&a?d+D6{DWOjJ1`*k&=O(+QMOBP^EX zV`l8&Qzj2~i?k|Cf(?LcK+BpAhDa;tDdv4U$*;(iKEi3lgiH9l&UgshA)E2D4a-k-;_)`oFNi zH_%$qa(oWsB)AY^SG*AV^g?!X1u}&GrqBM z?11i;mUHpjj{L7KgFYKNDA>#cu5h8*>*vdBG#g$)!^K7!*QI^IppJb zKTK`R+P*PMh`Ua4gvd8Fp<^=_+hoq$WvjLBL1DKu!MD}@lsZcV)|hBp;|Q+HU(7PA zwEIsTo7F%(ONSjL)bvZX4n;>6iZd|p@tQAa%%FYEZf3C0w4-e?KY~(%yPxR28Fy`^ z25<{&b92#8(~qLy^twTPDVqstNoD&dRCWBIxY0k$!~u_KQ4}hOY$254Y7EO-Gc-nQ zOa}L+@w*++J`(jrmBwO9OK`KD4H)<*n;yb<=XurUdni3+l=X`u%;-L%uA)YGy$x!O znZ(OZRDT2dx13?;t800OW0Y%zKc1fEb3>Ot{jq1;@Gz4Gu9c+Wlf&DPyr)xs0FLMs z&~N1`sSQZi{9rIdfcaKBl*#}-!yiH2$$*A9@fF9!2XE%!PHSPNaCNkb;3*zhRjr!o zAsN&$qO>ku78<(y;LUchKM~7c-l_oXZNspg7Se`aeG7lXw8#`@(dMB@;EkeBL2^&tN5-z1@~gFEb486ZxDF(xAM!^c!?-M&+9Z`#A$>XfkEN z94kH{C7vM+F_ZX0|1;rgM$BqD;)qg=%DAzBa~L+b`COY23FOI7ABjah!rOHH>z3A5 zKh&_7w~VOvjhXX8zN$iLJyWZK;)4SFN@VpaHYvVyW<#;z14#y_bHR$n^IHkRJD%i_ zQ~gcJ7}&?=`kSHXJ-{GpiJh}E1Z$-8)%slm94f0?;WE)W`KyUWHG~EHoDTFBVp>p2j5Y@t8K(_Vnb|F zpO7Nd*?=?_s z_;*ya?^!lk+(ly_rI=)aO_hdob=|>vziiApvoCA`&E>4Vp9!ttIHc7fg0gVFP)ZF+ z(p3d`NO7vpLxe`F=GnmqD~893TqK~B|G0WO34T;}O~lKbSMW~I<;me@P!#ybe5vt-|_YEDxzu zozp1acvc)9!aFP0(nD_g&G}-U=EXtL{^&1b}$BKfYrq_I5x>a5+ zC?pTkAT{05F&wXJy&;QK6;zmNFqZ zP6r=foe$r?5j%F8{wej39o6inUP+%QTMzr|;AOFfy>O7p1Xen4#3rzSRId1@LM)Q$ z(_mF_wG64lD#bBt4xvzSrJg_%;`}5G4GCDN!%>}j`m>hZglzOwCn!I7rPFRA7mkI- zy9d;42FzD;QTG1^EhhN4(VTn}!9Pxmk|@?G0A4AGnX6gAc55=A3TDk5fv#TK40u~` za`*P?ZN+N9c!5 zhq{OI74j)u2Wx|~mZ|-!Nj{TBW~-N{(RbN4@5#s))T3wr>~(Cd$Vaus?^{PwSvNv0 z{mNCgGVb%7l5zOcz%kd`(qctx#EcO~I&(t$??$KNf#6MW=M^Yi;#0Tdf)3L@5x(O6kz`R9jI~mJXo;aC0t=Qp9b`U1we3jWIVu7);&#`MP`x z4(D#`SX0=?1sOrg8>vVN(dv{gSI>9_qZ^Z!^=oHo7h-00sx05oVV`uIQi|hQPK;}n^6n3sOO?d zwi*n$BIYy8$=cQthbs9A=HtJ|YMG^ONN$Os!fwOmjMN&|Opt~}2sZ%Czeik!+l8(A zn=B+cZ$VFGyGhihvq)Y9ai2ZmixcAM4AdPxz6@X}jmc*V>OY)5-c?sGi8HBd9+=^C z0HLwKq6RhTr&cY|JuOCeUQJ*$koc-f`V^rthcshs{lP0%rvEN*wBi`;p2|xP_x)M^ zz*|;GsX>cFP+|=G4@_02v9y+QtX3q=W<$R{W-ftD0}DicXXB)?yPjNgBA7d>&*7YD z2GJISA-+Y9k2R#@??$~mjcr^nPqg`B*!)Z(_6ulvA)3LNT3cIwa}4lPO}YEn$VKd9 z2(ULyajwD8obKqCln*spAGHve>y_ZG7er2sH(>C4gFB=@nBVkAawxL*SmEk)O~c3^ zfUP@-bp|qW;9#{ms2RcDuM?pJv3+Ks*67oQ)I9LHoUpygU32yDDFPaX6?++Ce!DAe zETzz>G$90>(37L#*rB* z|I^5z#?4~zy}6}h)*xEdd~$peV+z+t>J z{0A-Zg(7;-&z%p?jt+d@4;uIbBTu95|1*KsZuQ8PTmJM}Y;d=q0O9}b(j%VTS#`9Y zy-dkcpjVxut>U?AP$(RYnxjrx z#&AhT*eXW^zTN(viB~MzEC^In>2o_HiX}1InjE9YB+ak+oRYNUA%D$H-FBqYqidyy zN6>O(3wo*UDAF;+xw&D}=HzTcR%@wI@OJRjOS5})RX#&-{83oER5n|b@b8r9J}WTE zm7X6Q?a=!RVq?MgTJS=4oJ4rCKget5bJvuG9U>r zH9H{g4{PtRgG)yQh2Njr=62V{sS#Fh>XlL7cnT`o%&8}pTk|MD3q%abPC>4iK3Eyi zoiP}fXA-6fO@GESuf<;9sF(Y0MAC~eaTJ!9g9O0J0>E<6n*!ZjyPTo%zgZoW^~KhO z*g04&f-EB>iJ#d5(l214<5?*Mxk@Rzt&$J1m&N3mx(d`V!{G)M-TVyt*EV$k8w(Nf zZjQ4koJ0Dp9bS3}Rv2#gOGuLpZNzUf6&AU2(Y(?7eh)bkQcEsyG)|!f30C$iog4r(QkP?W=kx2p>x~ z$(~k9@H)%>5h_7|3lSkDqd}N#wsodP34+@s?C>ese-Q3PygAGEDt)8xjA$r>eca3> zVCtE5nnAJ&T5}MNT7i+-!Qpn@H?G}6gb_D=5!<=xzEkJuw7=o2yfECKn_68xthGw+ zMju7yphwBA6q65r+n~e!OWQ|PQGXfv7oLUJt=BSB^oc5D9zYA*p^R=<3~&{S?J8ii z_?Fw!cZ*wCzW9NA_-FDc?W9Ahnx{Y*UJCV@dKTEm7G+2yzMH zs6ecqq}M4nYPOqZ>;Vd9i>D&LiUztlrsa}`NnVhZ#qm6ImwB{$=?9}n$C606cbsR- zGx4c;8{k^ido+J_s;YpxdZ+xrX{%f1|v>_&`t;Tsh8 zJJW}+2w%~p<=qlAM`=V(bTWq4+_pDSYngs5*A+)3@^L08j77o3vX0P2k#o!T`_f9I zNn9Nuk||O@MsE)-a%p(kyoyBi&kP0F%`gqg!P~-WTlG#p;{I&$d3SbmUjkK~j01-h z;?q6WYO>{4vH7!rn7DSbs2rMNZctfd#^pO+Tvakzq|0wLb#$&gaYt|c4TzU=)DeOZ zoVDDgdkIn39Vh#WcJ-fSusWhbO`?K^tg{}v?o?{`p|Ft0N*QF$2ysBur0@??4!hFB^`Dr?y6utzmGcwsqVRX;*#|G zOpt_rdAjd}01wBmWPj{x{fG3$zcGP&&_^Jnou#hqF$NU{!J0;~;7Jpc}G@n&Q9yt40@NlkEJki0{?yoZ( zuGF*>cX$$bc-t@S@J-EZl`NyGE%dM1VC9!YRg>?exGmwYK%HEDzR@0?>qgJGT2Z6l zCBpcyBp2wEi2x9EGn=KAzqu!2TZ>GY;?a6y^|*qKd=$a)}sA==Yw4!ui+Sv9RF$>~MNRLg2v1r~{t z#;W2Dy~v*zA`?HL6U*V^A9wDiK}V0jomRk^oOu&fOyJadyCD`BJZnr-|?V@3VK2?{4ZQcjL{FS0d$BP z0+H;cSZFh>dcX$(_Z9rrQc2P;JkoL?3x~At!mjC1xiNrp^xB{0@a3W;MN#g0>6&OZ zRs?7F<|N*tx6T74ALGu@&lGgt(l1OOb88qRNGNOfOY(x?v7&$B#FcS0e9XY)B%D=c z6?D|`(fNV*3DfOYg$7w*4z5g_8-9>pBoqIR5i^_8)iWKcj zDv`Y8mPzrS-cz`{i=H`W%arl?)2ij|Ll0z(-Ae&*@=X#e`o9kztKd*>M;&O!ZgAB_ zNPHcb1x$J~^UqP2xG!*J)%%3r-M{KJF~ zWued|%VkD+A0f(g#$=MlSZC;Ij_kI_|Js9gVT$i(Q&ij~=0WxhN}JS*o%gXEbR`37 z_h6>x0%`8C7ChmUYrxOk#<8N`2gj-y@a8yW!zC;8^uHRZJph81)%OERMEb~a9BMlY zjL$~!z3iY^Gta2@z6$ZUTe+naxkyM4LZgn(l&QJ)GrFoMRhRC|RwE;oAZwaru{Qy0 zx2uHbbA69PBfYY{gLbJ*loGfY1bj4nk_`d)9Jezfg8sP9@P!#~ef0drP7H%L|??T#e9l~7lOOX))Mf>@0e-&WyiXUd<)e3k&=oSZe86CenjPoYf^ z$ZUAF0OpJuev{{UGcqP*+w|2FP9Yt)*Wd!Gly5|?HN7`=7aPwvejtouQUQ)Tpcua`$csu^|Dftikm+y15fpBPi+u;{a}vR5B9lbTGEQ+31IQ|wUR5dE^y8bc{GbA`K50V z!FlslK9N=kQUm>SRpJNczFT)PCZD&5!!`_uQeEL`5+e80UvEzHCO6|4z=XT2W(8z(Vo|HZ;`6nemrCMCcj9G7xnDNQ~`NT zlxl?@;8=1hUp{B~30;CGgIX<~uvLBDxAo?xV60j7ao|2dMrnN8jv{#{F_(t+`SrPDQKR2S;sywyuo1^@txBNE z8n2*RIMJB6WUM}Kc+=I0xy%TzPPGR|2u5G^u8XDZ1E9dPM_R@Ihd)uSw;VL->H%yW zlEd3=zN1UpLhL_0zQ)vy!*^ma^%Y>-gA~Ms5maQ;le!Y!y5#sLNz|H)L9-|PZc}oG zD5O_8dU`X&70TqJKr%hNFt#TZ%7jydzNLpcq3md+8IsAYLiJ>I5Ym5R-UzO$Tg?s{n2jesGOXL+z8?x+`l-c82x@$*DLxgu>JrU zu+I6v_~HPMCfWB2S2xArkK=@-7`!s6%1Gx|8CF>z5-^3*Z}gIQL^5KhjB@ zWhK{dEeFCBC+YP$sfc%}zP15yEOhV&ga0V>NPF#Pd9o(r9K&(0x3WDg5@DA}aWR&zUiRt8zl>59@`Bjl1q$`J;*?exbMR%hZC z$~O&5$l|^zi(J*_BS(;c03)5Zpg-mLLdKs?$+@;_+QuRIVgedZRN`M?AEbK*d#Su_ zNqW(q0R=|dgrZxGn=$&vnE#)-q^B?+ewRO`#0);SV#r1EBtcoZ}o*~?m-nseZ6OC9;odu6^16%t-$-)8*sKHswVM9y7+At-~xDkK?DW z2!{{%$APGNb+5C4*<26tcovlH^9BkgQ91&z&k0HFy1U!6U`Yu&cM7ih0IXjlG;M~O53M#&esgn|_ zykx$wI&1*7*WHdFnE#+IB2P()-}PMRvG!pFU#Ti3(_O12>hcP*xTicPv;i!nN@g1{ z2v!fKFd9rXQ4!sLc)m1mlr@0FD$l468MY312q?qg7PkXG47<6HlxNXq2hi^L#N7?B z*g5KQq1gmRKX;>VHFJ6qBiMtxPW23Xrj%}J_4_|;*im>3eK`aRRCKv>h47oG^%!3X zE5}~Sv@7RkKj*+)7IMf8L%?}5iw&Fmm$bgy!F+_%#G-90h#;wxPY(`~ML;9EVLYhd{Dr5q%yxoY`Sq!m<~wB@{+_0=SAT@ zf}c9a4K=t7Hdx-w;oT!=KUj5Vu{pnEd^|6dKmQbrmWh=N5xg6iaqdor+{i{@PS}Rg7>y!E!Gt zsV$HOM7JuBxY(V$v<6j^pkn766lu10UNPf$km&Ag<3{vr8bB^ojv!Xr(?&qco75(* z%=3MyEo(ppBi)H!=7O}4b^ljWKEp!mEOn$?5^Ph>`$}2{n@srTlXqahS!6kgMRd^P z!pRr!KEWg47T#5(31M@XF{PK|=LO?6sro^<8<&2I85%M8+AR}o&bom9299aZMW$Vg z+C_Pb>cKVV1T*ma;|H*+XSDRCeS{9dqM~;nICLYv54?XW%eXw2W}=#(3WU#VEyB+V zlF~i0yeMFtM2xi{Jn*vA1RtP8Ui;Y26H+M%(lUCBf}|`iJ!~tSe1F{*Gpb}C#IuuI zeF-R^*|&^Br0`=h)k{Tau^LOviHYYv3m#3elYR#GLYP|L3O_d_^jD&&Ipa@wcXmzR z18V*H0sQH|Ip#*TJ!wujiJa`p02-fXzLPm3em}}#+VZSU>DQP(BRXQN)9pO3=KFtNVdy@_oc81z(ZGwvhX2 z8f~&uN%pIwF5;Gq;4I=ykr>w`s4~a&Eh-<8y>hlIZNXE+PDO^w8C1>J8bxW2a*oKW zBj9lGKC`_yXa3&E`Yw@F(j<0fL@p173S%O#8p`)<*=Vg6cVj($PMRT=69JlUYZMF} zIj%PK$8-+={!obGej#%1&P@1`r1IW@Kpj7Ey+ zAf@P%S)dn}O6zp9;?UGu8nV77qdvEsZ1nbGBgRsaHy#ykYmK;?_Y#;#?v$_K+? z?f-wna9C7BHx^Cunr7d=-}9NKtlm*^N#O)8;O9zWIWfdHU@imVNHO&;e3p5Z6aEW#(Rge;n zAoqaX8ru~LxPA*!8U!utI_6vJJ03U(N!krbATRGq`ock5c|3Fye_>BtrkWH^udI@J z&)Xv+4+0v*TALayvr#FVd;}Ggv8T23*{21^zioIt8Bb_pUvN#_L^ni~>Agw_*SWCl z^NJlkw2u^Fa`#5fctk}L$da-DIZkY+E|X=c^_%pO1-twMAQe_Oaj5G1Vqn@3)*3ZtLjhTf;#n0 z>xCvrpF8CN0sLq2yIj$?a_lnzBJ8TO>h6?sAN+|=eV)Nj`OZ`a>eo6nHt>8O8g-Mo(D643y+hnqyxHz zmTFya;;%Jnd@cnz5AbJYaYO;2 z2t!~@3XJE09l_hj|2@(W>cIl|*0p$AN5adg^Rv^;&wq$m0DGfW&9r>d4B)|XDUVOM zL%1A$vx#i(lN!VL1HHgB*DgdByw3EmVt6_zKxW*I?(bgHgy#KJAGrXgIOI;5cm*so zmdm;Z?Q=VK*(NnK&*G)vVKW*arN$*8+_JA4Z22+r6jRk8-rX*YShXIg0ooCrqhR6f z>QTV^sMq7qTTjbbbYG9tpC)y!}|S5G?qa zUXI+o=1_NMr` zKz-~!gGp9U+Tf#6s2;xc>A1I`ged{?MyJ59G=}OitWL(7!P8&qrrUiZZ!bKsRif># zp#WQBxB#&mrI8))1w((XgyDh0MvN5ruZe>@7NNbNCLa0zM6QC4F`cemLwCivlrYN4LVwC9pJEw?tbc{?no zz_8X+aA4<}mACg$=M^?#_wPr&mIvCk`l09;rI9AkL5*UgS!>~HwZo)gCoob`yh#$}>N$KVM8~{!8EI#qvL4DCr1N>3 zHW8;Gyfe&7DGAdl${PWSHbluhVI>V^XHZ$`G*rXXJgFNfujG8%regc?ET%h|Lzpmp zq(yH@^$acEA?1U#@h90rsZan;G8y%Z*zRqP{PkHqZyfXi)BYRZ7b7_#I5PqhW4jAS zOZ>Z&8KW>WzOz-I4RgUx8xKQs1$&I=+Kxm2M2os1QXw}=IFLR|I|~Ai6xAYX|0ZK0 z%E*cQ%wcpKW)5HlxA!_ZqLv0E54AzLva*sP$jyBK+$B7BjEGhqc)(%FGKgL#lM{m3$rp?gpESDnE~JG9OT zy9)agDbIctx~);}p_eKgyVxDCki)#z46#RtDLVsqZu)H=kp`}bmF5Z$0RM06kE$4F z7_to5zEd5(9VjlwdcjkHCr{WHFdH(4TUVwd*I(p~j40p;0rdng+ucj@G4_3Br5!o! zUZER#Q{|QE#P_oz`$8&UJbg$eE_8Srx^5&F5oXRSgpGRs$!6> z677;2vmKFA9Xs{JmV65MQ#} zhegXODdR9;A+zWd=LN#s5`qJ8!ZL|GgjDsomqv-{Y79>QsM06H|Ci2gK ziXjxX<+V@QzuVsi5<=&UVrIS)Ga|*Wa{pYStuEArnC-~GbB+JVHLu9|@MwCs177FDq)^0tcxkJxN6(e#GWwd-oy7xYyKbjgQvdLjICU0R zFe~z9*bv1E`{rc*EY~Fv#tN(=S42Cs0O&O}43{M5VJ6cc%_45obX+VFTii*r1u2`j zOmZ0cRx5cnR_v})u`gyHofyryrWa~|Fu{paEbrP5T}HpAePxq=YnOMp)k$gH?jguz z)Pr-}(ay9H(|BX2aq%?VcUT7vF>m?^03^Mj9osOMW)IDCe|db8uEIOeoR3$Zd7DYq zkxv6vL(MowO*x`5-da>*wGt*q-Sf4+wA|QEOnLepf=1{W;-)0Y;EP7Ug-KvAL5Niw z4J<*;+DZNx``qDPqjJYmlZHtKOKrS--1g48I8~vpc<<9U!OIvUNS!IDwjz2TIqte~d;m{=;#^{HnF?26@OPS?76nBrW^edRkS2sG9G)rqIO z+XFn-oTGcBe*w#`)Z^lLpA2-j3qhMs<%2EhDL4cs55w##UZ`y*v~GL06DRV+<~yvA`QI+vqJ z9@3}ph!UI($~26L(tb|NgMD@vKMS@&p{gx zf_t0Ns%H9K+3A@f5TVue2Zov-P*d$3?eWbf z4jc5DP^SYwTg`)fY>ze!e^HWIXk^4y;F#g83I6=D|QBF&Coh4_-Dtl9U4t$jJS_I?#O9wK$uRdFGnS0M^j3xQ# z4&nw=vXZJne6cr#0k6wq9GkDbI>6od-Z7O6rCJdT#P`zdJng>-$pIuH_(YD`0wpRn;CbxoK!7{)CsAfQjSP;y?fBy&g{*Ht3Kv+qmRL z_&Y1Wfm$+$%P>wfn~XyrmMcy+09y8A7Yp$cP?fk?du2*XKvX5osoDy_)&+I$lr(8X zg_eWQ_Cd}xfU1< zC#-BHdt%wbu-m44ew~i$;K9(~CP!nqvVZ^CUfBY6<&%$*vM-@ttJ(V2y`=;2{5a8R z(LDs=z1~>VNahX(SwEZ{r<5%#@_VbFy`I6<&b}HU2nm4pMf3SDJ3VeAs8dgUn+Ify zseFU!1Oke%s71~E>((8iJ^4v{JP~u%Zl;jrN+6C&UXz-l@iV`U@<>pM1MhP4{=VOv z-S9xQhe@roP==G)1`51UBPE{le< z#L0YrC5XrQ)@T@Yg@#9hVMO&!GicD2JTj)x`$dfz(b!}IiI2e#Nr#pU3bEz1MxDGb zRX8vXYlY%AgUSYJ6;#J`wtv`t4j!(GqN-M3c$Vr`6(S6YtIr$x*#ivJc2t z(UFWG#elEd8wqoE*%;7;(*FyqsnwVuSd|aw>>Sy7J7i1mU^b7V?-5p-8A9N}wPdXd zIS8x;dlf=fR%XGtl@r$WipzMo6uEzMfn=EfI8m(IuhEDoTNC8~b2o%x;cDCCSmo@( zn|L@e!F5YeVs$JHZ?4C}7d=E$RPLh*XkKAUdt<d>7K5Z-(MtFe7wSYNpEx}M z>1;D?b4r`TSOJjqP5MD~)KK@f+Yc?~v<>Wef>MxBRJ&nKBg_~kn1}IYQAor31m=vo z>i?PwSYUCwOaIuhef~uHzhPi*I1Fe-X%~|PSw@G z=^iQx#hI8ohP{9lw#ebHTJmf|yh|A!a~)#VN49u7j*f8c%bybWYwxVJMZwi~wyj;cxI(H{Q;))y!NXHybBscuqfcSsIALs<%~?Pd;zW0V z8e!8{+K&G~XINfhSrdt&&QsD06#0QOxv!yrV^bC?C8{&1Hthw)YW?O=oTq1}WY>&3 zk{3J$>UK_3_eHf)9;;KG@l-YlNYcfoKQ)Bf4rgpj1~f)bEv zO*&aB2B4y6$OXhw^#D_L0CKUu6IMxM%dQU5RbMhHHdlw|cF0UP6-_R}c9>2uEm-=5 zWm%jaWm{3rcxwmGT}B=kd8L2KIn*?pF=^_iWqU$3LaFtB5h2kxG=|b_*XxD>k~>62 zIzpWY8^(B{vyx=9!q;DE`y4=;b7nx0-coeRF=T$v9z^}Kpo>LXLcnMu19b&h?FzNxnwh1h%0b1Ca?x zK##80Ai1f8Im~aYN>&(#z&b}z+nlf08#F>;9d_L1A7|D6T=r3do5cvx5Dcb8${Vp` zW$gH^=A~EY=^X7>X@f320q;*H_u;Nb?l8Bdqmm`|5`-n7C4uO4%zOo%{H5F|H?I9O zDp7}sOjXK7op1zdz3~B=ze3k)uh>$&Zict4G~J9zAUS}i*nu~uH?OTD-d?+n3Gbc3 zD{Hsk3fK37h1RG*A`16{0;rG5^JkO655?1b5XDZ{5Q{k+X;E-Kqee*q51j%7fvwkToDoZk94cs){aQY3cvWrLWiotxpv~fK2d|QRk zl}6>tI{qp=sMpyDTq4#zy!NpZTlC1y0)>HZG=X9VJbiO6A>t*(3 zIZ%!pTCq%M)@YCWX5d)7C=cAc$-lL_L`RgNyrBZZuasFSAEcwlO(rYDfXTI7!gODX zHs&&TX%q6w!Y-Sy)Ztoe0ICJWz-Py{BmM~LuAWD~vpf-f0Z>c_{q2G+G2!7}RWNiF z49)2&oyQnV)COWMjynyXSK-z6mTV_8S<&+G#ruTT1F+#E14_2!!iWV^yJuuxtK?a3 zJ=p5iy@UFP+8TEcA7xdQ)W7Q*$&&f~!5yI`z|w|%_PjsyEbv-Fm?0ZhIsR5vEjGK_ zAL(}(0(Dco6I25yz%zx-FdMPq3)Ng`M|}M2K(_N6*207#o1#Xd*F&q=2q}$HbfL27 zJ{e$eK#|OoX_-cHi!dXAKkG<4laMyuzV zusI;}M}M*fQXO;;<1RRW^hDLp!k*IDAf<(O3ta3mi9;;NS}D%m%T8UtkDH+30kpBt zn_(0vZ-rCr{ygVnQVKy^aK`AUzZV{MACf!5GEjjP7)-8MD1koGgWcIk$h?*1?a zb1PJR`pyUbYK!iiK~+6)y)2K6Krv$b0in{Sj|^t7YWXx1)RAGtb%`U1Q{k*3h?+61 zFR$dG1MHuO+W7ljb^!WeG^&n`*|5=P=U|NcU#~T)7ABf(KiRya3HJY%jJl6{qmEM%=c0SBTy2%M}-SjxYpU<-J0A#m%hQv=6*eYhy^9aUzI5{H4m9pgph= z($PaFiEC0vvm#G5brx{ZZ3Y0FS)aRjjPV->O0%<;^RHgx!J7bg!sch>j2qU3wk@Xp zF!^a!S_bJ+nf_4fzlOL$>gY#%Dg=$ew|EpywJ*KTZeKPDSqtVho#A~IvUYQRMYU8X z0Q4}|>0!U)%Sku#^xJOrEn&_EPYw?tmwJ4ldG?5$2;Snh9|$lmEK~MWm;1!;nC6-cTVRbGVc`HQrI)nd=)$AHG8)0pyMEzCstSWS8Th^$*> zi1~}NhB1tF4>+?O+ioY&TZa*xgq1%5LUr*qjLtzm&ynP& z%rXqhI`&0l5nHdy#?X(@I~f+v8A(1IynPE#<69Iy}U4PF9o=2EiN>^t8U+OTG?oGKlOX7uQ7zCb4mWEqO8$=Y>|lS9QE&U8!UE zhk*w)Mg%i!Z)PCW+yP?V{ibHagb%o@skASSrBJW80lllz8=W(L=KfSMWIuLb^+Zy_ zZMf{co(g-297PO=;-h`u5M85G>5wIGNrevb&f~GM{R~T}y%Wq-%D<42!%RMiTlP&J zdfg%g`9RTHHgug_F>}<8y7jxllQI_q*x>0X@Gb@#mU#Ouew<6ydZq>H&w`D2(4DET zs~EiX^FL7X!Rt2I?Bon>vji1BOHTQ*&_(=jF&%;fa`az{eXCl(?9{oCEK+})IXOLa zZI=^f%Wh@YG1+*aDB-(r2Gcq|Cflw;jP-}Myy`MFa*OlIveZOMjU=2H50n<+7)0MH zosxhd`hQ5xh|)I?YIoDGHF#p7pHXWDct}OQDiX!OgD|`Fw4#fpYXyg#&zOq@PP5>L z2R>4m=Ecq`>R@0pM981JkY|WRGr+L`$HIuTa1TzB^^a zZ=oN`nNS-)1_86YNp!0U$F}V}TckiDzQ-K44an zrS;`A*zSp z9>xYcI|Y)gbgxxN^1#nLT+zqUUF)c!@_cp`__kVdFY{I~N_+!^QBEH9zS?fI4FKrX zxlXa2?c8qE4LvkdG2*Mt4mt;ZsH0rS_JrDgw~lKHI0{c^nCC3=acW{K;#fgPb)Z+T zh~7b@E8QY^1|%JJWh;W+26wMF1?A@vF=<|QaE}VSN=yE0_|>dNF$<7ZyZpWJGqc!1 zxEWi-tZ(&qVr)iVTO<-AfBcI@#8CQ~lOu%TEPZ%-Df?Kp9*kP_Qd?ffuD2pcVX>&5 zk};LV4tO|RDK>Xo(jS+5bk@ZqOvLGV!nw&)vKfs{?OyL#%FmR20WmE4rnSJH-OKH0 zigcFYrj?iyJtjr%N5UEnrANg-tE4=oi=%Qp_E7{vEpgA;+3q$>E7)Y; z*hx4-G4Pxt;e{@viuH{rA4L)d?_bE_IQig9lTbs<) zk)W(}!y*n98ar?orBT|&*#aB#F*dll5xpLp!2Adx+|9l8#e+G??I#n9VzffXcYOa# z2q1$1CAcl?zk+}_1h|Jd^iLFV>#d?2A@n~A|Z1kvx)^J=qw-Q(*M zbgb9uUiU9Xq)P+_Q0ie-L`RcJt7eO6`vPc+n7~caxVX8zM?(S*`$xXz;nE@wyjhbW zGrOJpjw1&Tb~&=go45Wd^^1N9|9D|MeKUndRhe4-2iZ7Z=B;R=qJ40kZu0^#YZkMS3>*F1 zSG*z)iNV;1w(rsncuJzSdd)qhpP z6<_zemP|%Hs*&e^$vghC{yjB>OvUF~pUe)$Oc;-6%81-`1^j1uN_N7VWOn4!^l)bv z$CzHn;gJ|Th}9wv!<9VoP5{X+5?sq9x#zfjuHpLU%5{Mf__XM-9Xen#=dSR@-pWHm zPtF^pfIvO)9im)~d*5z#b7yNLnvO;Qvyaf!evIJIH>u}=mwv2mOSl9|PVLqvrQF*3 zj=sc&P^RjPc2u7ewmRz;`Gh*$wt%QEbF;3ZJ0-1ht+FU+n7kKZz7DE9P$Dx!J zF(kprr&zhNk{ZBXZEOOyQT+8Cb#`pIcbOA7M39eof{pyls&icDc3UC@?V-`E>=rI$ zf8#E!4&{yx6VE%=aroc18@I&4w&HUJUf{ORYTD>BMt4#J-;_mFx3ZNy_V2ixEB@)U zX{Vq#>{Yu}mFzQvkOOH13F6ljTN>d*Q#NjDkV=6O;=cC?Q=tvzc97h|h3Q{{|8N9*VM zSpA*zyYQQK#@>40A@OoWH-+jHvacQKl|aiDM^`fV8OSl~9K0+(!xhzi%s&O2k&`z| z@ZYF>6k6ilrk?QRc#9HBx?*@}#hv^azOM6n09HQAWip*k~mk0!)|hagSjWh!&CHexGImT9rWoxj3n)bMe8 z2o^1=Ln?qRal^q9Ba^h^Z66H+1k|nc6NM2rwP?)ITUKy)<9^)Le`zg->hSke7Uh}- zwZ67p)mgf{_4By(&E(YuX*##F-TXBJCl_L*`ITsVoL(LY>N8M_dEL%n+n@uDSw_3J z{09Dgkr?s*-Er4@$NP^g9FLxq%$7T7{ZjpM(a%J2p(oUDk>{kHI16y_Jb3W($}wa9wZNI? zsh&slNVlFoHM<(8jG&SEAN>!UU%1MSTx`h6UqBIi0 z?d;pm>qDpKT+Vzt1Ewbxo?Jz43hWfn*;4hG3%U;RWp-%Xv=}joPMu-OWWLD!3J#dH z5B07p<~B3+cuv+$VxQhYmWsqK&&1_Q0oFV#%5+MMA0dPv|4~8y`Ul&0nN$2_{N2^d zU=I3te3hR{WHUnqMSc&PN3g@R0i(GOG?4oC-6Z%Sw||gI|1F?KxsJDobhUNV7JaO_ z%_w>O>JXPdO{O&@m{^1rUse3O0gN9J3Wu^Y2!dOhX!o+yb-Y>68ABz;)tiPp8eT4q zWl;I*cn{-n!<@I}&laCclyu?nIP2@iub}j}3rOoOg*+6aurg8M_+*x{u44u!u+24g z0-Ievs@#j;nN&So!lY#u55-RAjX#-F+$3Z_)w-yW;>5|4ZBDRLoIPEl=sCM^5C0~X zpj5qa#caWr0Y0Fkus!_37s&lwRN-rFxSJ9-XK{1OXfF}^C7Z~i)0UTUEYI@G_(+P! z{GdL`%JG(@8G<*P7aM$4Ebu^(-9F~epj!1*G$PGNe%>)hME_S-glk|k$(?9X-uk(q zlzJ;p!%u)GV|1ven{|3jlK1YB-v>w=xwH&K67MD=`Z~vGTwvWFrYL9(a0?QsZMi^( z**DL93d10yN{;Mf(-|9#KWN<~G%k%CAoMP)o^dI4=95-q9)ll_OXMQ*v%_EDiSsN! z-a-Pp<}&$n1A6pIt!aVTDxRNM0UY(ezsIgZ=T5)!DJvbLIA9$+S>N{m*hMUmxc zLsF%W6*22R)A&J}Fp{{vfjd-1ZE9kA2VpJsI|$p|k@#*GuVjbcN8sZ#^3Pti!ggmu z?wW#s!km$QSpCy^=`U?{J3Zj%(oYuk`PL+N8Sph>UOJM&ApHw4Y;O=l)Vs^ACAaci z-;=w}A5FuQo#I4YD1xEeD~45O)0bmjlB8S$%!0J+Sc)-j*CMe)X*s|8*R3|xqsZs? z=$my6_xaqk;HFRyd~!1S=`)DcD1BmX!}MMM0_Ur%;jmYSGSkWE>vuE6U*Clb0SZXkrb7Egg6dxbjiB>*EM z082_iqsYAvbH;ijZSi&Vn|r#9qumzDMmwdHzPQmPg199L)^qaU3^_v0E5ORy=N7UB z>}Gel7i~Z9WRy*yDibuH48sm&g=r8*!5Qoe(3+2J=s;;BC8;MiT-3014bPpqwY-DQ zD!PM-01mt@;wAt&SB?vWXOFjrc07e20!=frH@?LT8AyqqzTw7j0aX#zGu&+#Ms+19 z4IMTyI#Uv~Dz6b}>_vILG5$5v?;7-U#xq3^t}e2$c^d#7EJEO<&QCMR8NJRh3AvZH z&cYX2*g&z1y1su?IGSs>!74`sCq}lfNgo2b&=3i}y;B7P!f}&GG&mw{pB49IOw|T9 z@RKC*4#Lf~-^(1JcV**L@L~Iwjs@@IA;KKsj;HNHG=goMrda5z#jmvE*|$>a6_?qL z=8n=io`Yq>^B+d2iE$B0+fEC4>LzSx8Z6Txk+RFiI7YBYE?V!5QT`RiNj5JfE3X8f z%S)k2=Ez3R=xn`=)(9_mipx|MJlJbfMB2&xMQ1h$fA$l+5up9WmQgM=fmh8(O*WT3 zgaA5`Oeoxh=m_1(A9q^?9Mso6=JC698>65?_>rq?0-F3q4&r)}A*h8U zXx~-Zx1X_Wo@UU;3@i2_*|Lj&;gs+vR#{gzHThx*L@9iMp(mcwAV)TQvN}yQ6m<@{ zyyd|Un1*CN0_^LC8o9)NwOc+N9#d8r-Q8Hy8X zx2c#k`!}kI1|RDVKn7H`>}_dH;Z9hx?D8W3lzsgdqtvo{ELmsqW#d%$V4ZS#Bk4e* zKMOy!)7UBQ7=_%>%LQ7AZNbMmg(g8;>Z=?@Bppa_u*D(=LWM+|Ly3{&PpU??z$T(6 zTNkGqJqrUjaU0JD*ui-{Nj795NNeBlboz+hScV#T!aWZ-u~|>Bijei`(`GjF}G3g+87BVpt!X}M4W%J5C<5IkX4unRh4gds8s>WnisJL;hUc)n> z^VytUIKcg{R*r-LmO2T#YKljJX-p`Q1(E7>rCA7X1b5w%JVAXU#OoSXzY3(J*G}6?+Er z675O?Od;Siu8{+`6+<)nILTF(&oc40M2`fOjgE!*aM;gfzH>z++1tS@Kl+; z4E@y-B4BYnd*YIkYYP-@)UXWCL#E>ye!Ow$w3&)|HOS@oo7FkQ8COeA$aAvHKKEMl z2xz7j^;Qqy;Z}No$n=Mi?TpAt1YG9KI5OR^?(3#S7Cv%P9}#j9eS#_Og4~{*Y3^kebAY%+f&S_>tEBpvTY6>IkAv2l0d$@?Om@{N(NI-l#zTbH=9oi7ORd6U(2F)}_!V*64_){Y`OhQ2C{ z8i<8aTJ~ChNCSxAEBtxIIb*~}xABil5SY0}&@*nbip^PP*k4kW_@ zq!)qF+8xG#&|SS<CmwS2gp z%(bHM_g)bDILrH$RN2?IPwb2P0#u2vm4so=hfui?s`)Ps0;h_IQ1z&#C3O?B&OwnpxvncU!n_F@*T;?_3eT*k>Isjd&q@| zLBECS!CI8irLJ~FjraZrV?^^(HoFq+*=Y3l4$^IWqbU@M*_$YLS+jv{o4ERIAKc(L zO|tBteS_toh)75E7(t9l`yTr@`u4vb_3xUO?kSiD4Z|n3^7TvVJkhug7owR5c-K{- z%AhSgUlG8cMBLu91bH}gcE$9vGi0Va(=V*WH5O9#pPO(Rng<44*cP^IqMtg z&_PO)^v-e^Zy1x_+!J3K5OY~M6~1eDIn#(p`3JY=&7qh?GG$mYAXTJ}JFo%+egR)h ztFCIJpG4J`oY`A=C?wW3QnoN#3m?RE@anuRMV_E2n6H^`({UU`ghw^0P%o7sK^;Rx zGo8N$h5JAt%07Ey2k0=I5oMtO;OQe6>BR=`5UJPnWY;J{!RNdIbda7w%esV@nzh@}F| zG~a#;#3uo+^iDW^Rq0RbHG`vPKV3~q+sQ0pU5}h|Eg!O&(FL`lypkcJB>>3%M`zFg z5z8jQ>ztAfey*@i^9Bl-wi75Ny*oK{d)nYwa=Xr0WWYZLZn#+ELiP9{bhBt-Z|CSM zF$UosD~-3?m|!Eq(7E`1mnQ!rhO?Ky$`z49W@B(pXLNy$t0ifU1vA1rz5H<63pO|) z4YQSfu`b%@xaM`mQfITF1lq+7Ou&Qna6rtk6u4+NI8t->C{TEd&o&|mW_syzN!TOFISpjow)0B{ z+zJNAQ(gu}P^?QhCb^(e)-K1-79fBlJZ6@Xan2sS#nY3do#{Ei?h5u`?BqsHh&K@o1#Vebp(Jn-Jm~(iSwiX;cJ;w_K;Itc%x+DM;UXG%BmE~g3O;dXL8`>%_#I=pkiL{ z`PZ!7pUB)XZz-JuHu0Jd!XWAlJtrNEBI?dfkIRg}aXBNb)lQa&bM6tH2Ms7TT+M{BIf(EKa!SFZ$*M80|fNJ5b*8k4<`VSTA z1G3Ijn~by#MaDDTn`-m0YO*IByx!uF_NZnlnyYZ3Q`{3kjRE7$4+#)XMM9(bMPuw8 z_1aE$rPst9O=_PS{`WS{*RGEfwGENhfyL5vFr4Fp-hz&DMNppA&)m$texY4BdHc~8 z1RyVLj{jeh5{qa9eRHZF4xy8#duNPb?IZlo#uX>-4WiKWAZlZuc4#-nbPU-UDXRsx zQiHL>WGJ2rKpCq$Osw=%88lFW0!|B94C64(-mj@>mURw`)>?oj6yEnJtS#KAixY>l zh(AnyB>1--|=hzdPtg&mj!)kf#7B;Dyqs<7YAvtb` z#E=JAf76;aFjq}x``9IRXS;{^tfI@OT3((GfIHC-hF1#SXn@qd+ENZYSC77z)X) zCzQl8(TwJMeI|Y&fliS9doYp!09IKI8S<9=WhuDy$}vK-JOUHJ+n*12)JMU_97kQw zFV4E5tbJcAUXjg>u1i+7s-Cy6B<7gwyL@%f*{v_<-DJW+HYv5HQDld5h>7uKh87m$ zExH`D#LwfPm}+TSytE>kSRR!cNY0OT>bMDn{kENoVTLcZ-Uc1UeE;=4!-@as5J7~& znTHofo-A-$`UE7G5)0T|9awgrO6KlzCvQ-<8<-a1ezIF~rujX&Ki%~BfHf6P$(F}o z%kQ!?N~4zkH)ASdRe@A(x*j(Zy3D)c4#T@%~Kcp0ubuu!O?bZHbgW$lDr@ZLDc zN17+=9cMV#!xnjODFg>y1GP5AIj+@$-0jGYu+Z^8QIO@4aA!JQn$Q}@R3DU`b%lif z$$rR^$6Sf>s*Y!hxT>ZjWKd*!u_9uMdr)TUr4`%_%c}g4DLO=1cNgI7wuy%i5ksSu zgmKOV5lUc>*vPTVVyNC5mYc?aX4ADrd{g%KL#@MC1IU8#iM`@UAwF~9#Ap`6h;_k7 zjSDH7yyuH6E5(Fe*hwKfEyx)))2T5Tt-3)IP@C?Otiv+bjRl?MK?jYs4r)OlAoFYb z7=LBmAt>wA0$~GjC;~>xDr1PN%&W|&Mx~i5{Z?FTq@55aWy8Qa_9gm+bLWCJ;53)H zAO#r!NBI%M%10w=6m=g^+tMHr40D+p50zHpR2)rFLsHa~DV;J$otf@H^-z}LL4{bE z+gcmdsVBP7+8q2P4~@cqen~TN@>gKa7+%a0!s&-19x@ip$}4R|N36B8Nb@j8!({R3 zSFnfwrXaUO#N<2}3P*EU!}*^*h@NO#Pd{C3RXMlMC3a+GPl0sbpTU;;%Ch{NGtU^p}ai z4ZIhIr3X8rB{+yI>zUWDdbh5Ux#|r*N|-Ch5+@OQ1q_oHLdHiX+hFJb7<45~%kXI_ zRm~{recN#wM?FM+Uqa^BoZq~j8+iY8OSHckDGv1&_!)JA9Y3(G-* zXBA_e>TYs!P(=j>L43~}50sVMJ82JZX2o;^+v~u2ba|(O)!#_Iudi~ZN0fZrDt*uV z=(97mXX#tvLe!4Zk=_#I>vsJNwYSy#Ojj0vycHdsmrw1YzmqE%HdMJI;h~ESJ!8!6 zW!Z}lE9?~o2-tBuum%gM{U}jO0RaOBi}CUkDrHFkxghoQX&I(`O3Bu^SB?$Cci2tdMB} zM;EWJtm`oFdPg~2_KI+(k!wSOfSeNiBoQH7afh5_GXcnzM~3oZnqT5UCm^@EX>@_d z@l?P#>#@tw>QTvK$w{Q{_;1RzvQ;m2H1Gbqc+~(y4E8$szL*h(1h{b9X}RWmtU|ou z_b??=|8%>DgLN3wH9L4vkT>c5J=Ag8p5w#PoSi=eDr_ol$ouw&)}24BrHH_h(dAwM zXQtO-EgQr~ecdSbfv7^tr6VS6PdW|sAcuicETg~AN?wl)o4{p+TFjZ1ymvIem+lM} zTBLc)iKqD)?MO#lMGuxmG(;)9ob9Dstj->SLprkbIgy|HZpBvdZNTWAt5Y32=%a4fI1#csE-ib z=KhLhgh!721ds(V=Uo;Boy3&yl2Tds2w=Xm7i+uOh|=5Aazw`{EJb=d$B$34uo|%NB$b9 za)(0s+~Ql%dXd)=c#a0DD#jgUB3y)o;)tX7uI__updwfHDuIBVeu-fbTtW6<7A#tY z1hjO>5}j)xs0#;AW%WgB+sRg+Y3xv1^dxx|Rh_|MrAZCz7hWT`qe@6CP&s|bDW%rE z^^EKOmW$L4viDz|Dx_4P_ik^3Prdezk$?p(pJgVtp2qq$$$m zuZ|WV+u!8YYu_!^gi+et$E#(M-4U4P#je2Kf@D)FBhTZoC3ij;ukYeG;lqW#vgs%z zYwOG?-7Q2sedQ$g2qx4C7a1P4Qw)oj=82XVO>OBNNqQ?kHahDX#GJ6$)z>E#aOKjX z4Kt;jH|JCc3~w_RExIqx6JrKGfpQvOV*m>kYylClUyX$8h|)MQ6Gzi8aSQd?Q;;z{C*aZa4*Vb1;@Za8G|$Ibu0*o-tchkl`pgAsbdRM!(&74M8|9v z)ESK$d0U7%fq-sKSx8R`y_q=`3)=tp4|BSNlRmAR-sx_}>$6N0!Aex+&z`5r>K6R^ z7}iBCM1Lh+W(WPDO;MU30p9{o7=oResQcN43fsKV=(AqM zWvAq4l>Rns4&FXlR6iM3OE0wcwA8$dz|fb9(q?bQ`Fax#^6j@*xf;1s-(V)kaqC~aw!f(*B6Kqwt84Z`B4cMy zkyz1VST)AS2X{mwM61**Be+R|`8fZWa3f>J4QWC-Kl?nf{_?^rX{}cvdd;h^>A#^P z>%d$uka_VbB3F`_cq5`(OqBY>A)L{>Dqty68#{*ZMuyvItm@9w+@nuEBLB&u7^4DG z7l+g)q4of6Vsg?oz&zF7$6?TFOBlr<(#+jyM92w520%Nf1@!PC57#`(%m#U&74vA4 zvO{8nk6G$5 z^+7y8xFa#~lvqR}I2QKa6F|@40f^{vldA42JwKs^=fWtMc&>`T9eJ}Ix?y~Vs`(?& zDzH3Vfu01lke-ss{@TgO(iU6YM_RSp*ywuVkqSK38qo>8x|UAvrC!PU3gjfL-FnYN zp%CMtTEC_dHd-5_F>VjfLd-TYe*s%{tS9tX-Ni~5bdUID|5um`6~XoxXrwbCu`E-s z;(&8Y9i%doC}CLKmBEw~*q~nbB};Tszg!~Xi#CsO(<*RO9S$dE1W97WWE*t9%zp3H zTN)}y2pEm-k_f^4x0X%}BINH7fEEyfHMY3* zFjbxV(9z|GPYb9&b363(2*=vUGN!=bU2(-Elp3>=djmmfdmF*@^gh;<jO*!2K zJHYvJv?vO+A9;zc>UIdb9XLebDW<~*R7U?hODm;41dA|9|A~0umPlK*g#1@BDz(4! zlB3%Ie~;{~OtEU>6agdrq<3JvPxDX9S;x5^J|4`l<~B>f5KAfaY1ZiJLwHA=ZyED0 z1V6nq*UY?gbEq(5qZU3c|`GcG30-JF{oWFS3kT)5dDO47ARubqDm zkOp`{jw@7^3!G`6E%vFY+4L!}8o11b?#*|t6})Qf$o3K0!&@TvcutEhJ9m?8R%tBu z^RH3@os0)fppEWNfkE1EgMtO&1*?}p5`?f)W#n}=Em%hgaA=&l9P-b-S;-7+;wI9D zqM>QC0Ew`fl3H4Onewt`#hrYb?3fob3I6g4pepPnG9dVJS1t$HPff zDmua+R=#AVF@gWBmJy%G>o3nmbV8=zGD-cA7l*AK)K^AL`-_9-S%bLNxV$>sa;P{$ zet=Ss+eC3CCh&4Gw9mwX5AW1cScGMfMF^cnGCc!GF=WiPd|bNo@0cXRgp$b{m_+6N+ z86b*)V@NZPlm_Z`j$+BHXrjRNdF#{scH7}xzmj@>M>%9uWjYS>Br%xNB5lunx_|ZT@znO`n7J5(zkhs;qN#-ki`{;t{I?&&wFtD zEwM&}Ww{DB{|Oshp9p^4YG5g*@Yo~(ZXU5Y*;MreM}1Iu*vX-V{6{jIjS5UVKe91= zNA`u+x2E0j1UVm0Q(%=l;3*03=LixzExlzwBcY*9?MZ$OtAX22wjVYR6XE+XsZEXR zQlQTa_-dUa;C0?o6od#~$0OQdKEzB^k^@3G`t;(ZiOkZ^%z-is#TA(78p&83F9?IV zAEu>=oqDphL_-sAE(OFnh9Q$5ngIB^E73uHU(3GaD`6|s4xazHXj3EJ-^LGyY8V|$ zw{c~;b&8z3v^qr--&9`I%f#;2T)SmF512+GP`aW>3{!aKa`Xn$U2lnRf(?sLC`yqp z=K{?KVU+dPU5}iTlPG)qnA%%$km6X^xjF}XQ9K;h^uh#i(X?Mdkh?DPPo$A)U5}B% zi5os$`#DhaVsnJ`#NFnGFO{Un5C?QUi3+s5QhZbG$tGeh`w>8 z9tBO`ML`zCQ6o%@uXHT z)cWPg%Fp~g88HzDO|d8a_YbrUZv4p!VK+)10@ge4^J<%>WRRDXY@vXLA}M}7!cctZ z#v+~_RU(+l$U7Ix@lUX6g%gj~_cITbl;H0x*Scip6{#Q?m`?T}1=_1$w3pbo2}F!j zGg_;T$WFB-WE@@+*b9a5meU``WkRD*K6uAAO!BYbwR<6Xv^+GY8hJvyTqNS!Y84g! zW*W=4C@=gu-9ZMw_Py{DAEzO%7ySc3RjipAiYtS21J}(nB6bTo3iGY+KXWiQqaz;1ILV+(y6Oo ziPKD2k%~oly;y@w6z3-HpUI8gt%v4?hYeU_Jc_%=)rO>OX%|0h$+lhB=qL5Lb`&;F z_dMfc)=sT=m^pngJ8nnOI$0HX2&?qma?+~0=&Kpaw#ihfI=9De4 z?}-L#wdRk%Cv9f2aGhZ^4<$t)fwde~;3%CaX_k!hp|U8)L!u%7;~u^zLwb^W141W* z6|noqr*uTelkyS`dR9UO)4NX+5?Nr=Oz`qB;AH2EfwTrg*JeS@ox=wc6W= zIafX8YnAL|+%<2|zg^v<(jzg4BsFW;N+&$j@#TbpXw(` z&b*3~DdK9gmrW-V8+ttMtDo~s+nr*S+olW3r*&~{caNsV!kebJftnLP#fOVbT&1Qm z14u)?rA%T3j>FLQKljMWE=2% zqRUZZ8MJ}ivJ05i6EGM^cg;9(WgJtx0+OoD8Tliz)+wI z`;R@vc*FG(0A62Q;+T}w%A>L|15|pWC`Qk(!XfLrrW3L$V=P~-Dj zJZtFRH`q$t^2=J7!WkU4TU1hhVYI&phpz%QEmNpra7^({d>;0mFI^BrC|zA?$)pg* zPs9r{OHkV6kJS%Wkuw$5>f9LTCr%)AgJ(SWOyNsx3p_Bc8kq-R1mKXRcTKWvE318e zSv%O~ee#08z5Q0a>72DlO$wOTiiLfT+9DO8=QDRe&Sc=uneGLh<5E6Mce5M!SmPX7 zQV=aC!E~&C>m|!QkY9rJ2@=A1Ey%Eecp|%H_4+U0e9#6_VNfOavBzhfA!zD`mj6nl zFn9iZ;WabN5PW-mb6iV-LjbP%e0z>)YECV}swMUa#T=5R_1$6hxrlLq>GqX70(8NY z`%l%96sNpCks>L35g&!d@%Go76n9Ze!G-rs{=muIm(Bd(>)vP=f6)?9J~h~jieYnK zF)5{sbr*3DSjKkU$1Q6dyza<2y~a1Ya?VwcH^a2%o83Z7!xyDND0THS*#M;|+8>sy zw2?zXd&F_rkLxhlB1~c|k&r&Yv#X@lEbDcwk45SxYT)&_arGTVBu8fKxP&AI;7OjV zgKV~2CKIw8qq}7Lp))kwkk(4``C9ljqY$5~InMTa1%C^1MPkd%nz7)IGckyUC)F}B zS%J_7r87ffWzmu;IxWg~Q_(GH7U;Q4weSdRapS;)_wrW+NN$w?R<2#nxM8-_fkO*> z;3R(d$O|E08RPWuK1u3a5?2lCjk7r;3*j94qy$pVw=?7V0}M#>XU;Q5@TBVM{?OT8 z7aP8q9@Dix@KXuxXGE$hYWuKGg>GkZW4F%*+Nl=TrnHT$2m9gLToC}c+Ykbv7=HKG z0M$+#V{8Of%&Hd2Rhko`uPJG*gM#STX|8`_ZF23fmvc@U=;pp0DFNE(z+2a5YqFJ> zsYHOT-a+0}?F2uy#{%91RxhL)a^89)?pAHamgn_e3K5Rd24K4!imh(Y*|{^3>p?dO zR4sfRxS*(gDqc=dhOYkqw)`#1nVq`I-*y2=y+5Vidyz^VS$kL;krZq)dl9KLibuA+ z2xf0Z0L{UDp$xd&2n^B??I9CmQZoDdYe9Yt?^K(w1UoRVQ4h--F?f$s=vSS1sXT$> z6_pUdH^ed~rNc?MMXxr(=-bK^>RmO9ll$HK={j5?vH&^>zHiEbXq_HeJ*@T#C@u2o z6}e=r2YqKsL48)^i85k_#eGwJI_ z>n(CXcwv@sO9g0fa^{v#UcZEJ-xqV>uB+Rb&_4P!Lc8DH(#%WbU;1gs4X7|_!99GZ zWZMPkC-xrT^FiXzgcW(=)IqvR4?u@EhRePX$L+oKtmcx3cQozvM! zqo?~X5N{&n!!=L7-{=7x>KOZ5Z8d7A6EekTQqk0Ze_K2 zLocDN4pYu`=_9tkOEJope>s0GXw|;e<(u$9#d(`rgtz$wQ4~o^DZ>B-n$0F6@$l~+ zMAu#*g=NX>0Z{KJCH-o5He*w=Cx*6QCZTEhQ2-DKqG?Rysfx@$n%%HJ$i>*;K*c=2(2J+ZlDR zHO$j%z;UnV9UUG;ub%cN&Ym!F-~5h@EV1EeU4tqM6^7-?MChBQq+nDijvb);_)cDD z!6Zpydl*xWtpV9pRxh_8xzs`v3Nr+hrNabI8%rp=4K%`YBAa&x~3T_i&@;_IWqvnG658;7fbg0V&K=7n6lBoGhpY$%U@ zTjI}yt{z7A13@btCsc*fApgJ^2EIrNFAVM>$cTJ|%kkEstN!`d% zwGI@w!>>{01`dv+vVJu_MN=1UHSm1XmTDLGKUV+6cWYchUSp4FogVG_tGVu(j=4S$ zlx1o7dpg+?Cj$S_1iRDA7V?NQBS=-~H@)Ik4SBM!It*QF{dVadgvP8;UY0BnX_!7A zMZSmd{JQk99kNbO-#U)iOpeSOw@ZOXx?T}q&pM@BWF<7YVSfqzR1>8s;zL7j<(+5@ z+9-}dN{N{*cJ8hbsX|*5l4fGRtvsSS6DUwd85rEISFv;CAVW^-DV9DG6J?R_f_2c< zN|Qez!VI^`-nRd2I-dN8Q+j55t?aAPEkISJxxFl^#X5hMg&CJz9u2GKX#of}#AeuR zt8alH&)+;2i1l2q&G#Vpvh3|>6g6Rr6rdzRs_&;Ut1PdgRpECNQ(spBH50s!{ zd6A!lm=p^TRV)^T`y{v@-eLRArb#=fprlb0TlD3~O228>yKfYaqea z;bPQGREb8*bx!d~8cPb*1Q(g_eg(b6omqam2mucIU1QbkL8nkXN79dD(-q^b)?`%J zE~;a#V-J>J<%jV}^AnF*BtAz7n{WBp*7&VNvn-rOs+;fqQOCznD>>FSQSRg#Qw zLIMNT7L^whrG1X}^RL;^=4dh{PZ=mXG1>r9(Y~%VhRf)BiG)P+hCYh{+IF`d&ejKD zLbQ$~xE+9l1H!f9*)IR(Uef(QG5*KjuTPm_0df>TuzYT11#buEbtv!fde?4rcU*k| zuT0hN0nV<~wTgiub0tG-%&*QTXgH>iIe`@f+$f7K(l2oIur@1-=G&k2(*nRKNOvW3 z_%WTyMoPgYYUjQ87VjbYY=J_xP|zD`nk1P{#O2(wu3(~^g2(Sh(}#ROx3xD6t#&Z^ z>$#Gfn|@YcXeJ}U>wDoeP~lxZg+-=6=qU-m{GeVDR&vkhP%xknj#_O^$4GCtKvPK0 z^ndN+xQp;u7eBP`=xtKvos_evb`$QGngD;Xb1^^?=R91T+h@KEE?%bB{m+EVGH~um z#};xzuSnNXLlJs^Tp?TqpmNQF4DP}V0y07pZ`TpqvbLnmp7_U;(@(cX!b1;>xZs&Q zrKns!&evRib_ir2XaJ*ciX)yAIogk&pWs?uhebPxVooqS6n1?2&c1!clIH$<<}L}A zMO`uu1iQQvW}^Cf8$(p-)0ycjP)Ttt{_p;}_EnRN$O7mW;-$X~U~kmA50kmt2_pn| zmU7KKpyXvvm(cnGK9!h; zFPpdLdi(7An9{(>r@jX9nm&m;X?I^?YsA{*0K4|H&TmBq6G#`h4<7F1vjxqF+UH5~ ziD^l7&c19wM;ql>d|4Z;WJ_v3s&&v)RWvn~A4S7{4VyvAI1f(mOKtQ zl!&~){IxB4+TBWVX#WS<+X*oH(ScSYIb8xz{!-0hi^<_V;d}lk1&iWRaV>q-axAuN z+vqe;f}aEr0hlC;5TjfE&7-j(HoW-wzuK18^TA;Y6#R`|Iny0np6}wiyMJtpx-~>x zj;2VpxFYH13e96?dlla+do?PlFQ_$l)Xam5=?9Ikn0_ACKHo%M)oqx36ri{V>T@j{ zH21nXDPN-V?KpfbSSG==Q(}W-BbBM?=9~N0Z8{YKTfgvw?3B8+K%p7j)*4jlTvC<` zZ}gE04S{=8Sq2R788%rmM~~fd$H0Lc1Lh66uWA0xSIKOH2FP`D16IvuolpMJ}Kja%jIQ@52C2rZXVH{pe z3sFcVv^%t_Q#Z%X#yVD>vM|aG-(2%4VfJB1I8ya#U6Y}c@xTwqL(M8iE>PB|+IdKE zcmfmu`c0wqJ=%_0C(4Ulz-=D%APk`yZWyZEp(3?B)47aALCZ!|X|guSRjnkD_OA z{N^`XWV!6r`*T|C#&i8@A6$2$4C%}!5*hVyS)fvHbNNGU!=_MDr^HnCuW|ed$k#DU zx()9)%#t}6Q9d{>IdplNN7GQ~n%u+P9~&Iyu%)h0ls*VSi9hlX{ysH6BRxOxa_~yt zo=2%<4qrY(KP>6K$eDp#6<+Gt%qq+rws;t``FZZipSpEXNwHLzXOSS3{Q5__%u!V@ zIk6glVl-Zdex(;o6Q>@C2@s#+{9(`-WK0TZSLFEi8;Kj*m-YUHC`cfwII9xQ)ej7V z)p#4&x0Z()uQz!PDt<{pos)QNGGxm&SO#5sv)wp1Gkz!F24zo0;Hm{LMza4%t&8_kO}N|qgiOLhOzCOZvm{*T>0`s#}! zvqdA43MPRxh%%5Ss2s4 zPTV`l&&D%xn{CR9FG!4NKBVe`=!Udg*@l!m&^1$3A2 zOugIqOu3JRIfE3FG|$GTk-2IgCFApotSUs(5W&#mArhlSfz{awY5RIv6Me?wSVLD) zxji_)9X4>rw^jGGcmQ$qrnG#Zv9LkK2EMAT2KQ*=+AJ^|-2fP*-3S1E`k#^oT;YAK zusB{j)XSGS5Oe_T=yXbt%}V*atntlH^>)&K=;`e*C5#Ub*Zl^#)fc)kq&O7-_Dqy$ z)P79&C|$n`HynYWp*myX@?haq=cT(2^Jv9h_y50W$%VEP>DxcHn7e3X^Z79L?v%~J z$DI;*KoxW)^fhsYPI*-wIHj>J)V}<8%nkm?4e<87!NFn2b*`>$Fu0fd4|oS7l9%gM zw)dLhC&>>~+GM7Zx3ovXh%m>%>L$apcobz9MF_g1b{#mlCy zPI?;5>SN5G!uQo7VaJJ?8DBGL==H8%V)jAw#b4wr6X@dX(6OIcGHJG2lsXCQ^8zR~ zT-CbrlrF`zHbd#pBKL;=p%MgNU!?@75<-!bi#}fMzsM&>i5h4^rG%mD`J{Te(Q+or z-zD8kJI}k2Ev<)}RGIt~Vc;N>e|aZj1xOEdlGsroHWJT)Q2N|d5p%S@At@{S>Y3lk z5sIgtft3jv*f)_GAjiz9iOyKL-ycr>hZUw~ewXfhBi@C4v3_$G@yV3yOnt7#IfIr@7*|0vRxfVuV<#X>Sb48 z!CjGA{5ty+>D>GKCHowQ8R?zWQjP2PwhYJT8bgaDD0Qus)MT_qe^*E)sCd-tAOILu zXtY86!87lOLRs<8OJ^m3tFTk_0i?1*a2&k^dEFj)8xkrZ7XuB_T!R^3+(rcKWJ{oy z^7(}evFbkY#R4w|PskN&5}fykQ?2V5!^j2%5qtK?T>zBs>~>XiAckJlbSM?Se123{ zH6W>0@wlU`t*7yh6n6PNi>Q*rG88O(Fp;>oNhZWfSC>sOeI`Ga1|k`m%UKdQ7{|1|Bg06k{0~ zY%d0eimzTn2gAE=QYY93#k4mhdg7;a18r1*@r|DQaawqfnBZBv&V}xlku^#(;P^sNA<4dkG_S)NT8pGlDNKkc>!V? z;;=1)@#%=MvCD24C8TamFJr<1OdRRSKto5?;zjX_ibXt##UhCHE>rngirm39q_0Ph zC^mG8t7Nj?cja7R@@awtCDL})uC~{1Qo9qF-=2Pkkf3@cX&3$ZV|5}J?gbYu^32!h zq(a*D-J91VQUqb>`emM1OHZ1tsCXt`Z5bC`CFU_x3+WhT1nonFzl@+ zT7iOPNsG#eKVG%Y`fCltt!1v4;I6cRrJNQ7L%>HqOUB#J(QHohDH2aFQi{U< zW+r8}srXM?rKOeUjp1%nBC_V_)Css~^}d;Pq{qK?$GPX9;GfL%y}2bz%1;Xn9Y635O#RX%w?v<4kv{jcqv+L+#_!>LCo9 z3N(c_c_?mn!=8kJv6#I@|JG~g=x=Y)bniU_^;@uO{rH&`l~Dz3mEVH7xS|mLyLR$e z-e$SF8?G>aR}6Bi!;}19_Dzr!eS0oCbE*sTq(&|wxi z+!fQ3H*(fTqRB~T2MmL=Lgw=1gJ86XE#G6+{xYX<=}jzGE2M~^nJsQF(=GmCmj(l0 z$#6Rqz%n;ll{(yeFS1f7kkDORg%$dnHn*4ZhYS#RHwYCKPtUl$W)Y`IYO%p@pMBa8 zNVAj%_b=)F%FCVECE+yGA>j!2|5P(W)aE$qTWpYW6nps)D&uA-;P}mBKE7~vEIkuh zeyT6ySY_obcWJ~@7?i}~vf&YxhS3*%OFVr4P;wPMzz}}zh>`m0_u6_Kzk)tVsuvQW z1oo$X@p~;g7M~JLWBR`&8DR;D-H>NX`!fS4N$3kq(0FHETDcRuD284NJeX>&qtV85 zRTf7h5zvJJ+EGWcKT*zKL6;!@Lw2B=A53X>Q_p~04qYY7)FDG17NLiHblhw)mAbR$ zh8b%+h&3Jm+QWj81CN{5o^|>to*dks3-l77tQ@cKJYDFr z*w^G>mC7b_JP2Vbq??P%UuI5u^+To}Q&tw9T`rR6rJv8iBec7nh&`t&ghX9fxfcW= zPc=K=MXQ_H&mZPR`vANa`(OSlM&;tc4=-Lfe-a(qKeFIUrx+3g-TQTXj^5!w7x9>> zV`JnLnof}qjKGVP;fgvPBT5xE_A1IEi<(MNw#}sagp^*U^DYQ6VBifn{4FlkMB}?$ zq zT~CB)T(hOR))7Vu5PGlb{zvvamPbu**O97gh4yQO_L)%~u`W#6PUtem#z5K$6F;K< zd^q*I6Ia8S{=(SxwW~;a=GNE|TJR;iNz-u!tnb6s_k)$8F+YRf0nf)Bc;N|aJd(F_ z^OcdC-}UD26}IQ|oIfPz;wkRMDbFe4oHn0GuQ%0HuBBMu}&3`^06=U5$?v;i_IZ_OqqXh1yCcCiD#d8?3e} zB{PCUyc0txI>(bgUrfMDy$HBUP{MTN#{xn?RH}p3VX{k1u#4Q@PL>Qh=7!-J_`_^3 zmfA@s**sKl7)&Fz4F>zuG_=w-bQpZIC}FGso~%PM@r=huuM8C58^7(bT`8hLZF41_ zq0V7=4gx|*dRO}w(gB1ieoq>SG?IxzbeiyX#e5gf(+V*qB45&%4FAK_#Q?^|@|x$5 ziX%j`DD+{CfBmJsvb_#jaWhQ(T_pSk_cy2P;)b|{@>H;REJOOBV~32{M@LMK8>&Z+ z6fae|TR9qA03;L83>pNEsK>3w&LtjTV&Q&>?Qs-UV|Ekz41PRwdqvK5Cq%5a&{%dT z_hU9W0sW1(|5f8;HQHhh_-jc)d%yB}PX8XP8_w*OK zv)EzAFg!~qa&&!_ZQi~|f1D74YNV6AfB>3J*Mq#S*HY3vWO|1I#9eMYj}s!ioZ|Rz z1SC{c>@9tx(twjhDAbpa3x~K~G%ReQ#Y~fjUw#m+T}3hPesrc=Srg^oeT8z^Id2O- z+b}DjXinO9Zt=^ zInfe;71liwP24BMM0$3&88jhMs>+HPSEIci{~fC)pdC7L;;!;GOmp?}#qT%AN#OmK zrKV$IyVf~mSyFSeJ8D9X8Y|>f$yHz2t*~x>1O%Y5U-9Bhx{*oGLBUvjFW?d|0R4zu6ZCYL27+@kpvo2O16m>` zP1vGTITsP|l-Ej<(hxCb-;ikB+k+kFrrV5PBT)g9OiTr|_eJM(u3ShBsROV?jT?hL zCB~0XP$Ta5>j(88D&udfoldDNzi%pOAmyJBk>ng*W^yC{f~_JSXOE+cJHw4w5uXQv?uT29$-el;I&qLreHBgYvU z!8zS3Mox2^Ib#KhPye$NH)?_M!?X#~_t?~f%A$&su58@Uv&Nq)lpJN&LCh3XmF1B1 zoK)G@VuBLKc1e|!x%}5w@Z8_xe33qbdHd}~&MSr{=w(-w*YaKsOP*Uev%YA4-OQxb zgR`sK(n`_UW(ej4ahWJ?Kw4VpL~uDIG|s(4rOJd8cNCc}6?zN>``fcZ7?i~Wt&>`x zVim_g1egbYx<(ttm**)I=0qo(sX@**fRHlbPlPJVPSVQ^@BtZMX4*ovIg3_F101QK z=HX5Mbm^je$3v9Jr?NEu)%E$_`j}9>5eX6e4j9j=l3_8U_0@(>`6_sj7lSve7!!}7 zj2P&%XeM|IOw)0w8QywQ*k0!=yTxz=Yft$TOAJ%Ce?!6Jre*6zd>l;QdD*7w4Gpo5 zX4Xk&OJdeA0zvS;avQIxyU2SX>`(QNQelenYYiY61_vw`lOLo|Jq0}Zn?{+Dl)VZ< zG<)iHpH(7M>dieH!HKQ!n9@mwS^G6IUNuEAsh;jw5j)i;i@ep8y(*M zwNO@YYmi{;Q}!t50gh>@`Ef>WcO1(Vp-t$S{SB${Rtr>tY7y%fjmwJJG;0oFmZHc9 z?jT}NlwxL6#4ac>3Z{aE2-n5gCv|#wmLnX0EL#^j-AuSMx6u3Buwx#7D@!RY6ArFxl_RlS?=}y%5GDk-n5O!vGGFiQKt5%OaSc z%#5)T2O79%nqQTJa;x6Wtx&-4mN)m8zU9u*g0q$FmWzdB@tlL<5~jeKPQG80?WrDn zsDesBf;0#ftW6$2AJ{W&KgP{G=I7~P?o+u#e(Vsb(o_;*gzZFs>#RG1i1nBVBG&wJ zsGz{S`wq@)wt*(yVVw7Vm$}v9u37ixvGWA=|MG5f*SMnPCXxoqHO^-Bm>RPWQQU!z zVAUj(`Ei^hKpr>Rofj$U>Zj#0htEdQKnCRa+S@4{4=MZTy@ z=(u5{5l{lmEaB_dg0FV-INPw=Ab5m#U?DLdq2Y=I*|Dl=O7jS0(4O4crftAg??uG$ zVM=PgU;Lg-%)sZ0?k{fuW+T{iKalOLQ*H~2albuvFE&Dc0&a>JQi8lP*vva8NJG!I z=Bd#4S0$46F=ib_8aKL%PE${gmjFNvZT=6<&!p|JO(I)dhH6kj=)b^JqVjzoH7x2n zww(93BMJ zbA!g^J5;-WkvQv#3M0cTJI;?a3M|sqF8Bj1ML4&aXva{AHf*KKkkr$(zP}%(WF(|( z)B>RR7ybjLKg(MOMt#UaG5ejC;xSKqjA}{~K$JV3?cS`Qz|9#NsLDW>$A)?GfpI&7 zY=CpnSNK~46(y~}Fw>i1h&ZihLu6W{x|9OUf1(Ls!k{D z0vIxC9x*LwmjZ%se=D+&g)a^gv0Ar9mz)V`gooDg{@E7B2l94f_wSjNtcqW#+5qWcB9Vb zI-c|gR^eE3qjaAtDHIy#+rbb_i>pKz^mT(>-Pdl%s-oDGKcZ2Bq+JcyOAXE=_om`Q zYg60M#fn-uaIVSTi`FJYzK+<*=Q3Wwa3}9D+Z$(1kmc%JLKT@f**{j`(3FF)Mq?3_ zSQ2dBoSQ0;(^88NT&8iLfC5BJeP$&XJQm92K|?wK{h5&QJiH*bz>Ld`NKR<5jZvgH z{^PvG2ileP3Mg#4YAGIt!3T3Z?}UOHew8fhmuFZ({q>Oar{;*^U4(aEY}m0}?x9Ca z0i4FIuVsmQ6>)%?hr(;tRHJyT>&4{Ef~6F#9Qjvw8@zrYS0YX1t?M7itVSjF9T4hu z^ocZQ+(~&56B<0%N1Npd8sK88%Qz-laJV=R)F)VR?qMqM%2pU-WfX~z-{AtmW(&t; z{o9aKS=xLR@y3tw0=A3;D?KF&2Ao3PB?))4cmR$c&NgtjB#xJR=#Tkm^)X^O5cU`t z-aJa3m~m=oAr^@(a>BZ`0nKj@UhA_4iQLBz3D2A70@CbCJTJuyH_TdY7JUZJxPiV+HQKT6#TJ=E_-z-eBk(JNKfYf%YR5S~`w^czegqtaBf$%Un3pDsV%3`pcB)o{E|V5$Y(_^bt~fz300PWIaO;+^mA$=ExHH_C3bFRub@d zQ^wEZYVXO=Vw5U-$IV?AqDT)}&}V-J0X1c9{jEvOyBoPTOBZYpViFQ*hLEeBK!XMm z`3f0vec}z41;TaMwfVT0?;pB??P<-Bk<#G5nWL$P|Y$ zRnrMu+{Ih^M>e&%;@6Iu4ecWPIhr4u$mK4lhVDi7QI%zBy@8Xa`M6SZq-_{Y7O|sG zgMCf4JYPD2d-e2GtM5@S_<4+9d$JFK5=fAboj_7b&I(R@P{U(v`ki)C&;~x!heHQq zY~8^oS?~+;39t5W06A7b@69%~YC3gdgxCc7ru2P+@Y%j+hMr$DmL#5Z2M)(JiZoC}-WV5z~ z7_mI7+oAaBb_N^1t4LrL?66X8(M}AA?G-xpRrt;vDC$87*0e#kg$zj0B?YB?D7#1W zja||lx(vFDOVoVCQ?74#tU^5U4iVIit^iuT>t?2&}3}ntU?g|M4 z+NReBc@aQI)Tv0s24W`j+OlbID|KA$j#YrlYf=eEko&hR+dG~_weIQEp-}%u)Hp+- zT8`$@KYIDM8xIC?N$#NHUFt~y7CaFl?{qSSf+>;lv&Dpn>2-_1fr&1ROHnF&Cs#!| za7E{=?XfB76NuZ8vK!W*Aqks!IJd#8zQ81d%4v@_hiX1k0Kmff0Xc=XTM9RH0R@2q>VI&Vra_GjKpx4%?UmEXN;}tnH5)tUGA)qD`ox|K z_UcwDZ0g?X@I>wFRa)5gj(fDgMn{&*Bv|DeCXd-YW~a*;F)hRD8HWTw`gajL;Lk}F z{d!S@ABepmxoYt1+88}o@_Ell1O;f_6L{jh9k?U=+{*q-r}%S)u5)bBY0il_Q5lrS z8i!!7ym3>O+Y&F0`U%USL>ZRxVOjW=Bl0r`2gPQ-><(fhO`D~GTf*S3I$syu!Tr#N zRI8=A;xYTa$=}RW8OEoVfT%AcsZ)n6n8B7E91P7fQXAvShNsEov$xN92)gG5%l;XV z6mo&%d?z5bsX+paD$7vwpmJvq0h(UcB!k(-LG>cqAE=2$YIJHQ+UEY$s~>_sXlE2Q zSt$@bT9gWQ93WbfPU6jE0B);sj`EHsRuLO;1=NudZSD044hcLd9U4F!K~8sLR`Hl` zGG#(wgC^X($p9XP+?Xt6`O^@DS3iu&3xZL3vkd#q$~d-+AAIOpnQDf0;s*N=DR_0? zZKe;8%t;kw!NSLD09M^JcSgo+71lmjy3MvFHK!!lAsVD)^+dP1T5Pd2mIPeQ8ZbDO zcWF@2zU%La6hx`Gc!dIH7=z=E8?-K`?Bv7b&$d<>z`dD!3{74A9spOWJ1%fH_0>N6 z%Z(~IfqI6GM^mo9|HX!V&9E9t`x|zjyQ<}V>N8(Y7a!O^7w)$iv&dCfN}|k0Gvnbx zYlc^RFd3r_nd;GyI>-V&y{k*L3s*76X+iBJc}ue?}biSVv23H)O9#P>e$0L z9B_ro#TkpiNdGoZ&wJj)`MMkw+H^aut&1^WXb@Nj_<1rDOswEr`k-cTEY!WY(6bUtT(kMYZ#{KBu z3i9)Hv{=b}PmM_q{<9Pi1^p~mNH~r_FbOGi`DK3Zg*2}2J~{I3l6#%X0$1ycwl?~2 z3B-V_xFskK zs}7DXdoj!2q9rdgPMQd>J&QA;KF==Oc`Z|u+c|wnhMME~g}&f&D0L2?yC$MoF9MC5 zE@a-a@6AD6{Vw%Sat0IXSY31qRRDP)6OAuu+9Zo&>sRvb0V5dW)$|9$_^zo(a&CJ2 zARTH0D&nDmyODtfm<&keuKJ-&vrE;}uCxEVCnzx5&Vvu#kBsP64F`97)3tb2+eq*V z7rSjHYCSjksSovy=Q?1L>m+Q*h6@{;_c9TP7$?&|!uRv>CgK?YpL zSlr+x?-IHADnUvMytjA5#p@D=RHMjAl)z9xN}i&5kYBsEzH5b&mRsc3(eW=!B111( z({wkj0wPY)lx^bw)iFsyynA^>9l4LmK)wKkDWp?Qa;8|F z^6j!{Nkff~D<|sc8Rp5)c^qD*PgDwi{NavqhN%QtOT(z#jHQQYX&!r3DRIS#t*%> zJw{gUNRGGXtntMXZs5cmq{KM^`d2gy+(;-oV7cK0;HJre5rDTipM@v3!OfxaAt0=e zeqR5t5=k@(0V{cq?*w>|Z!75D$>Tp!%0$h)n~5hSSxw0zSP_XEvo9fY{>5%PrUHtH zbZegq>IU!Pn5en)d#ynA?(3)5W1S6Kvkl-LbP?I1m_>OH9ir6{@8s8b?1Gg%S*IpIzj{g^f~@= z$I|Gsc9N1!W;Y0Lu9!!BC$m&$>H{sW7Z zP3_}6Gpi%mx(U*l7a6u;`>sp*hX(PhAeH+}dGEtl&tmFPsS(vpe)ImpsV^RVgK<3N z3Tr*ByA$HMYC)F5g6&W1_XEy^pA6o$|7*ekjI^oqrmMA1Ut9}_+&bT$Wy}mxL3)Jl zNay%_-91#*9bVM{s$PXxWpq5ndajE%`wZ=O4=_Rp)( zffa_8n-t%AWpdd>QpS#fd5rQEvd6O)2H%*;xaoa)mZ?sE( z8Y3{E+gDGC>HmMn8^FBoe0S`=U2>Z9y`~<0A(kgh{ly$>E2EiAr#ii+VBBktU@LBi zQ>dj-4w{7%AY#^@*IiDv!d)SVq0%PDsIta3VAo%rtIO2?+(c*BJWR9BWAs=8_Dz zsayy3qv4D(sqUZUR)hxzc?b3oQUxj;LQSs&l5*y^y@5hcY*EXgk<4qyG!I{13h4JvwCME)fYVmX^Q@i1WRboZjcKjr1IYZ5cK0RB zy#l*<5Vgs&O+u}ooL&j^onB6leeD{e>7gJ zp1??6SiT3JU{;vzyjp3hm*VUlMW{}GKBZkoW87@0D6~KMqyPkdcv)kV22Z20$7`z^5%QFm3K-BO{=3tTi`9<$shzN8 z*UM(i#53Zm6HqR%@Z%_jc;U#+iU3(aroUS4BLiXY+2fwcoYTmUJ3>QjlF!I7kF%DP zZm15bVeEJrTVVd~!GcA0;5LdP+Ll|lh?tr9p&w4Gh6{k!D(TSt0n3HScicfQXhCg;bTkCe5Q zNl5@(e`GYcf#naJy&>7xl)4hYENYcMS0mTBr{_*~tAS_XlXVrecc!|M{rRc|+yAIg z4TkiG6=JF9OD^N@F*fpwDOzS7rg8=N#N>Eo6VAIh!&0UoEmAVWT(uPcFQivt{*^a7 zPuck=D3e)**Cks5f206+Tbks@wmm)A|p>-t63%YiCF<)Ugf9a=pWU6@Dt zHb!8ysdAs^BfvANq)}1Ner7V2kisgM(Y9YXhNgX!Ya?-H_WmCfX@5zE2Ry%FwL#DY z|NG%oC85<7Uabe5YEbRS)!mzYg2y0;<;awW*gI&t~uOqh2?}x z_%d;awHZZ+iH{Bt5W7H<^TOmodmzt<-~!sBX>a zVp9^ONY|AE6^uwJSrYj{>j;5{BnGla3^INKRHsMN$19&uHk*Y}AUt9exOZ(zV-z)~c zZXa4{=4!DbkP`|U&~GtjD+iR-pNW9$O$$)=lL}06SWpz%`^+f3^UG!jWAgG++IMmJ z$*13N#4EfXdh@ENqreScoxLUa_Fq>w-`K-n&J3v zlT^)d)EwIP*zDnNR%p`vLi3q3=`PI@jSkpl$%>0|tv0m>2aDDR?X62PTE)k zgHjhqxHxF)c#&ruV3$Tb9a!Hy`*F_u;@r^;9XEi=*1iiz3tUZb7)_>)a>unF>`Eb< zB>@R4>gY*9;G&jJRI;B9A!tX2xh+4guxl)x2k4GEkAM8xOXbclP=~(xUJGjmd4!2f z_6cj0rz6!pKntM_R1vUzOoEH{Kdn^dcIca1Tvp$TsMe1(iZ66uEx{~pc7Coca`NBB%bqU#?ATGB`xsx%9X*l1(7d&gD+BKk;L9O@A};j5I3Su%~HMkg;+ zjQ?D*axV=PaQ6=|8;OO4^yl-^GHugUhaJ8-jcZSN{eZmsK{|~gBdb?f|uX~!;`Qa34Edv_b)Txij%G#`GVX?=lp07k@#Wrjg=~Z|J z%)>t!Z2Zh}=`Gm03i(Er8sd)MfW*i1D~=BH+hEY3$LqivXVHP7@v^3|Bpo5JS!op3 z`FC{Jh(I*P19L84V*YcD9P3oYR9XdTQ)Fu&{H>a#8EF)}A~261MH6sGj4SzfXqe=+ zg+51ADKd??-#V0qWNAuJ39RIdyPHuwJvnB^b1voh8tgO3$4c!5+%-baZ`s>|Hu{%V zNMAGsj8J74`E(Ar96{CdN4_GF0z-Jm#Rxq4Ee#vafYo{a%P&ppy=peb>{?sl`o4v6 z?z_vTz?<5o&j4ZZ<@yCxcve!q&UQ4rW;>^la_uclO#uHCb)3OE@0*Tc{HGq))MHMI zbzY<3YGv`rdUlKYNS9_?z-=z2)G?KII1!um00XY5)b&_%0U1*GOuChVecIM{F}WGk z*3_-t;`h4rNhCyKuIJ<;Y>3W0`jIiXs)?J}N?vPjsV6AwcIW9D174LLf&fGGuZ)`O z@QGJR*mMIVR%}+!9kMa_fNt2fbGtXd7A0?g>T#v!l_Na6e=Ikfc}3}FY(R21!E7Op zWLK9^K{{&wdW)?j3dNFp0?4zD-G$x{F@a}0T&Qjx{N$a8T}JW|*G`+~B4U_-G*nI- z;9f3gUdqhX)m3`7bIP{(l`F0zkKcxH&V znC{E3LAX#zN4Knhn;2K802gBG@7Aye+a+&ll@YC`8vmZlpoCV<>d#lRQ+q{$QQ#ME zruD!3;W_iS?rvDaRuIf>(|qqH>cJjm`3BNyJGzqNai|WhZ6w%~1+_a2kT%`A1TWsnffvb*liH&HE3U3eKqf?i~|C7NhX+EDi%MpJ$kRx zwz?==t9<%VXDEfg%p@8&=nWa# z*@J)gC4l*Ka77G(v!ZWatqySld5fngh<&I7q{k#3sTW1GM?0?CHa=Trm70Rue>J;d zuUvSH{R#Yq;(GWSP2Pzo+O`ocJ2%$X^vE0Td>FLD1RtLY_^iDp3Q;FEss@UhhYsAh zT}^QO&lebjgaojH_~kdMJER`LKv#r{^OAI$0{94Bj<8&BHp9Hg@{8w z3ZS)OnyJwD=jlVB045}(o=D2ZB|&<_VH-YZuOH5U0Lz&`JX}@w9edum#A3x?kxU=k zoDR%J?%2#;#p^*NV73T5WwU`5q_s}aNuP)j9# ztaWNO;IdK!nofA+{R|ejLvJ8|hl5~PUg>`oW+~I8TkQCk?~)=2`(OqJ{dL0)9yvui zDX)WPB#u||;jNTVVC*d592%Ej?ejMD{<#l)`x!Q>&55<4>7#qTLKbX+@QixIpH=MF zS-<%Zkts_$>N{4qX|P?S9<#;1_DMm^qjF;S#3w?$gP%oy z@^qj_5pC@>Vo{?`I#LeAuY|k|8t386Z!feSO~h~-$=q!_1hR(yH6|*3&28M>th&8F zocyq@wtBsFV?}5*xi!}WI$^R2jdCUU=RpS7t^h=RM3HPy`63ft;EsD(Mg(EaAn4`T zeHv;)(=y6k2ja_;UL?us5S*X$Mq?(e^wp#Xvawe?V}~q0xY~q)D~?qFWJy_~ORtNL&d}=d~3NcITwcayomypa!Fo zEg{mJ&UN&09b^AmsZaA*7RSmrb;I{T=uBfK&v3DC7(G6Qksbw@&1p4VHuE{SVv0WM z^5c-jpXemG7&T*9LzRlNIlW z%C^tIze*|OtZ=i!{^F5&lxKyR6)!qw;M_H)+C5g+KL#}TVlog+HP+; zXOGE`!oP}ZSz7!x^Phqf{|^zo12RVt0pLi_i%@M>>m0Z+gr8=Ii2ci(b&BWT=q(E= zC-{K%5}*)18Lq`$vcIJumE6-!_?USo!(1f|6MG`CEh#Tk_cd0qc)izak~UTR9GD?R z@>38_#vjodAjX=~H^n}8jD~Q=fx!5UKIU$SRk3ZH)vgzno;di5uUsEny>9|+EBOka z+J+>ZtTiWgTz~OdleT#5zXq;;a9%uMHv>hutG}ZJlW`l~y)8TPnE>KZ4X*Thak}ZVbfSFD!3{uSXxXic<9#)4gDz}d-|3myKx4`E zkgF~T5l&Hc5JI?Jv@$6)UCaoE?_Dj%5zgn1s<_bh;2-v+3UQG7iKdIWuwac6v>2j5 zG^c{PyR6PGh-R7@a_f2gjn9uV&we1LWubeIMk<}=h;>H?j`T=(Im+b*v4A_HBaWNF z$fmMs8W6x3Xcm<7J+jg2xkWdq8v})RX+nw!E0N&j z&J!qR%8DrP9UxuZ{#jAs%;Uu27Ez~X;m0AKZAXapYa@chuGVj3N`bfzMkr>|K}HX% ze+`ohk56C(rL7&VVY>|6h00Lm25Zpv_UV^Z!KA0&U^5(=!_GihADi8%D55fHO71P3l6Hjzf7cS- ztQ_)j{7EId^qIC^bdX*9MUYhi3uC5vem*S^*V@*e{a5*^r3nD-t@qBsDWGOK47hX& zMRm88&X{UjPVmDlL`Uw*%2V>BZ|gfwxiH(2TCXk(zhF%3U6pX<_}+yCgLJ1J5%jd`e0H&SDgC}AYhK_HOGkGtN<+~>BrVU|@fg{hSqSa1C6^km3 zt_FxQYYC6PdEKj6DaK$!W3<+m@NK(8@t|NBCu6(lmxL*+`4 zuW+a6Auie-`?t!H!Y-w_m`qZjePD0lt$)zw22a+f#N7ZvwCgO12wfqQ13_zH#FU=_ z3^b4aTvA2N8H@;Sx$k7r2zIZAko0%MxukH@@Z@g-egO9Oupnwgg=QE8SEJ^Gwy!oF zXaXCj{2QVCCvpPw3M8RO;w!4UA{PRl>5oad1CeY8n(?0G)b{!Y-82c&<;#8d$|M8t zY^p&J#7Jcur~J3=;mD-vG--xO_bdt-9WmEr!U@0uXH~P#y$N+=@Rn{>w9jM~Yplay zrD+;&t}o1*yG%d*hPCqT83cSj6@}Rq{-3ZJk8n6^9`m}3GyfhVf;y0feHMJ=R>-}5CMp_pH8fWmLzmO`tR3W?6m zZk9mFK}yTCkwRmE2i@~VyW-1Vh!lO{?Lx{iCB6utqq8=jjSbGjAfp zZ=o2f`w@k_R3fg0vc=Z&8F;&=c>ZB@F?KszKlB|d62uDn;A9N!x4X<*#CXwN)w7cm zyV}vE=IKxY7pLKjHH`h;Uk4CE;N<3`K!O(^vS&K*WrOxvmk14$I8{ZyXS9e?gM z(G7;U%rP=B>Ix4+D0(&&DW6+sf4Zc~pyEvIp~UPU((SOA+QP7_f|D>~X_#b4k2|jp zlRSa$B#QvUa}Vg=pujeLM7lc?Fx|0M%!HLXG%1XsI9ySd=l-ffb3sScm5IUm(KA;~ zkCX=Aqk!}jFTJIe{nRiarRwL_)*gbA{jfX0lAtEfA!-m`^^KZs{XWc{eRBW>V-gt; zI2E)Ni=kQF!t7A%*TrL4!`6veD@zzm7U8T}%jguG~vc8TqMe3r3Q2ep}mv%G6gtb8p_rkGZ!_VJuYqW!`lMYT(MwPo3n z4=a4bc1QYzhT^^$e*UkyyH}$7r+VZgi;Q318qLV%T57j{hImQ`)QR?#5ATh%oa2(6 z_u>FLZVSptmMy1F)>f$%oKa)BAq3^M%x+G`;svWHd0`@&6EHn7A%L9<#hbUC!kVj* zxR@gQpixLqXKc!;O=vTQGn?2e+a7H%oP)72y7FFlxSy=`UO-5$nF}$&acYz!lNxG3 zNTejZ*=3aZW7orPi{>v^m_KPz6}8Jt48*$IlvS3biqhNRJJk%6?nqtNVR44alU#$ zn0<(XIe5PR8c311p!c`x-7Ww3gT91d(&gWI0p=F~FeO>zt%1GLMEiBD6>-PCM5aEe zS5gPs{AtnNZF9$la$>*d;`lIn9aTz8w#_zS90a$9Se=v7i%dsHk(K@)-q75I+rWD&om3}XuV!Ei6mbl5 z#qwV-B3cvPT4gEN$weoS>-d;Ug+g20e@}&*@0D5QE3^r&8P^Ii~gth_A!Dn2U?x+TNjj3G%4(y9d@Oz-Gt@cWFkQL?N^7=_5U3+F+T`)06Sg+A$C8j(-rk=HptMe_1Z| zTzK$^-fm;zUro^jzsz};^?AJLYMYMY3mvYW;)S}!VMPXXLnr1Aoh@E(%(jB*mz>F2 z>Hcv?sBC#kU?mRpJQI9T6Z?0=Esl-9rP7J|E^8apK!qt_!!Qf;2bARaOvj)?n(gMf zLi#H0r*LEF{cNdkM#tDR>~F&#q)jQkp7r6Nx!LapFauYOI?hv!plBE%g4+;1hdNYi zE~95`qXyLM*EJ=#06!dij|^2wzvZmJZ;lr)uL}jJ88%yRp-Cxx!@RmeJ^R({sOeD6 zU%MK0#9NKM7@Jkrnt2)EAco^DF;4^DT)qE_!lSSO>7x`A@ZCN07it#OX!_7F*pE4d z8XFfD7}wrQeKeqeNV1$Ef|zTs!%X|#>{S@xquM%}2MbukioFW(xoe9-8^)qM1s=z| z-m*f%ZjTKUZDez{gm8zK7?hUgq=_bjkN7=Y=|Lyt*s7hnNMEIB4(J({R%fin;v8M$ zOXRDxwm^)6Xk2T=na@d{_!afg6}y@lwG+eu50bfUmhw=L_nHA=P)VnmOD=DO3t(^x zPD#WKlQ|GB4|f60bsV5bglyX;YXhWe->aAqBQX*y6vyTASa^yLR>Zg;ExQJ{-TLpS z8uu}HQ&?SMy_f)W_E*Rm-OJB!5x(~hc(+U~|CbEzKBZMiN>+B^3+Ap|t>JWKVW!Mi zz7;#_y*!BdgAA(q*@S9u^Pma~t+tZOl7?TjmesS;#X7IwwFzKChlOo*&GD~NpJB31 z-5G`arkL~F+9%0y(|FZ|)(qq$N~svMd}FB)P;G5?Eet#AAoj^M)%l}wgT5mWaUNID zfa;q7klabs{YU_xt*Z+2X88V`e^}k3|Dn1wtoGjKb!s&hJwg#1`VOPk1VuD;5kd!B zVG7bX7PsHz!q|D?e+^E$*Ki{D)tuD+Ay88xCbhwMA-1F&EM5@ zDjZK=8ozg6@p`1x+yr<3>x}C0l-ym_KPhf#&SGeRRk(#8MZS7~(^*|^8WFpI_htPd z)&iLyzKXwfcjX|hH)u#%$VcrrIN&;7p=6K2wyO) z#=IamHN%XMr=pXhACDUBj8hJ56HBP>rYX{aYkSWfzv)x4)R|;SZ4bStXEd!`h^N5H ze*JQt>SOOgeoM{#ctnzB&Gh_XYB!-Ktr3(;-A$TF_4i_jXNrdv1V+*S)i=_hlFib# zoDGV#$92T;07C0B^6EaN@GZ5J3}du<3`}*N->ajaYzyU7fk(!dw#bR5-QW4V{80~U zZbg5^RIs-LIe#_#jw)O8|3`;_u+%O8up`)uF_JZqz3t*p$j(3SCNb0Ve{^Bs4SmlW z(jA(}XXQM)%Iz*V9<>5dRkPhuvE|pwZrl1R1(?C3O>!^6*(7pi(u@TQR&-8>foA=w z?Oc;G-E@#T24B3Q70lq0jZ-YK^B`@P!fyivGDWE)h@XNkc%dw^nCu@&Jl7PXdlrFv zp3d-s7$*3q>IisZfm-nlR@P8$XI(`HU6kW-BKG>js(g0Lv#dlC+*UqYBl(5-OrYvz zvL8hZd*QSBU*jEn0#vk*W;UUx97*xvgER9_+OCf?wdF{iuo$W|V4asilbvVa7p{_7 zw|X9gU0Xu;4UXPADM6(lsIxC=EaW(!!AfGiq>p$TV~9#ud-LB^$v2j`4y8y=-bhe5 z05`&X`+fkq6<&Ej&k3Jtr4-8rm(W*1)XmRLD89F_6$DxIjNc_`#vm3*=CfG23XN>^ zMnXfwn6e z&p?!`(-jFS{}uv_NLqq5MCh@PxIA0n?X5P1j(Q?xDQyw`$ON0_TQQL`DMocx9aiMU zk?CoYzY}q&2j8mHFN03C$b0Dgq7L^r~|fN`AhM8eB+vG-f#+&%%W^ zK*r3AD7$2o<)h@swFsN%*@dMH;wy4UHg~!KAN52E`+XdN^KX!hP#i{ z?F)#qY=E)QCvXjlB^y;k3^Ssr@e5uiBMTCVj?xp-TVdkb1F3M4Hv9kGvYa)q?DP+u z>nFL2pveRQ<>DWu3;GUEdlE9`;ZmSugXpyq;VE|#i|KGIWTU1S&Cx%pdU<>MV_RUO z9h&b2)sPic{sxj|bT`y75DHSWDA@WsUYDttfLU(k=NxmtSw(D=Tz1Iv+PgG6cI%HT zMiH_NwrczHTn+JT(M|oSXaXkq%usv)z31!$J{kN>N`*ronYq>mDK;McgRY0H!pa5zffE2)6ask!eiTmmUsGW(hD`g zxST2Ra6$#hy+c;y^x$Na7~1dn7O!6A6?EBiNj*=6$2J|)4XW)II$Xj%HVpvOE+xSl z%%Wjr--A3&EEIf%Zvl4n?Q)Te(-FJ>qNipxp}zx+DSsgGv2YpD6~b7`x*_&m{$32b z`ShoWXOJ{Qa$k?^b)qA1AMI!R%mL@afaqBl*l7aywk6jDDtbloa3X~n?KR6nVRR=; zl<=Bop8YPO(Q0k(g)J{+;h8VfIwB+xdEnfp*prT@FWWSypNlmQ4e?}BY zLYy%r9FEMzLPYm;sqo(BCJ{VRo)fqov~70z^~-fNe~sS8t;B}MwWdpZ+NZ1CfyEwW z8TN&41@p&NFuD&W^jIR4DtoJLpBOCsTPI#ASP(y+A#i2GohDpmmv+1I6Z=mr89Ng$486H&y+r=1X1v7TnqS)2Rb^BT6U#Neok@eB* zS7ErOn-jHRXPr*@ydUN#Cmc}TYs{0)w!2lf0A(>EPEVY&9Kizy(Li**e1VceIR#w@m0-@z47MBsqzCp&fOs zle2E+Ec|86mu=gk6HWD5G+$=EjjLF&TPD%x+V-+9cRFhxh&D%Li5`@LVZD2MMl>Ow zOFx4rqW{A0Hi2}ASwDcHXjsOB5@Wz7BVw#DLfzbIXDYc;%kGfEaI`suD~uwHlA0f4 z!Z@Bg0aVf=S~@(LWCsuaVc_NA*n46Vc^9s^OX&~DEl1x6XQY`puFZ8!6C-tON41jcCGKN?@ha@&AmFy`&TGWF&CGKpjA%mDTro&Tq7cMR}qe8rpe zhexOafoHj%=@n976R9BQvpmprFvOzo%3nx)z8Ff*BbwALPlq$c4>xva{H?#+w(c{- zU#}tpz){-omMaV7Zwc>8w;$r7D$%lqo^f~$PDJ}o4@JeZ233AAcUt@p&d}~FWeM`U zbyLRC;iDu*g49cyfkPyusm_cN{P*le? z#}8esskm{0bAMM6R4VrC?!h?C$rZVyXM-MiX2AW$v2Z=#Ef)y=m&)#unZGZ@XWBDI zT;wgc*~@-&v^3HOfLDx{x;R_ZwIOf@VdcTo%KkK1FfMqp*Q29oAXEMVTJ7gP6-`g& zx%%_&V2s9^y<65uSBh`Vk?XU~Tzc3U-wm#tLKpfTy=;fCPW+Ssb<(hQmSCQ>*~ST{H*km? z1~asbYW@fO?&}PZ(X4UyiWTvc?s%RRO#SZ%B-uLroke`rUF(F<9Z_GBf3Grui^lyv zOJ+il6Au3nllU;e=Yx0XNWSl!iB-3*#mgAEU=Qwce8*!lI>p4Y`*tK8bIj?a~@;3GfCCUwAE79Z98EhXKMx%OXg zox^z62yy~GWojgem8i?r?aT6LpVTanux2e1E!1yNF!RM(adj6+Ei9{%?UKUG*?uP^ zx9F8N3Uh?(-~tNCqLVi0e=Ma>tElY)AVm2(zWw>&pBuuCo{E-)g04HC2Zk!;lX_F; zd6|9e&WZ9MN}y1k5HLQN z>02c?HNVjPNOu{KD+0EEDk#KerK0Xi&;9~Tot_m;{qF}P**g54MSRs=>xM!Sqr#^J z17!)%PUN^v^F9<)Vs@-qHj_t^E5^D|F2sTOdOD&lMOdNgU0RY1yk4deibN zg8$+y`J|9+^MQY$>tLLSNU6us;RwFnj_*#qju%F`j#yvk&@I$asx&m{e1f3DAv@1S z`nN|RboICXuPv6CW%l$WOGC`@WAq%(@qytJx~gH{qmYaS6mby5wHJd^G$Qw1ChCIz z@{-w^-Gwa0y5v-G*O!XR#t|4_>#7&WY(?(lK`FvYWRV~*)6*3C0Gn?yZ){Z3BzWk3`Okf1%8cYTm zs0w}{YB=$&Y4T$YFEn|VSOi6!M#ouB*uOm^k!-Y11(QikA4)>oj337ppe9E}vT`-1 z1f7Q>A=laZ^K|~c)YC;ul}Cn4Sa#<=r7{ETB>SJLLrEqX5yqe${oT@i!TCvkEKqpb zFV48&rZ=~<6Qx$Ok?v(CoxVLEtcJwwB1ONH_6_Lba*81t>id)3CyT>6R3m?5Ow%f4 z?=XqkzfxrNFX)s)p!8W{3maq7j7<<+inW;6piFmWDQH;Tob?80flcc2TNkI^yc?ox z5`CRIf4!Sl+RcO-L>0>RJXE@y%|G1dzR2mXI=Lw4$NiTTh7+7DU1-IrvC8NAd8BHb z%uV@`1VRulE7rch@J3=0l-q8dPaS5YPC4sMLdxU3sa7|5sasFGyWT{zWh>j#%hKA* z;hi{ zgY~Ur;ndN2J7ue!Xf5)+%iOlUe|;s>D(YnSVe{ke{7^40;9OAR2OktwZNk=JeV}yR zj-YaNZhjnckN!86ciLVSgv%@ORkC8SgMq_1h=r&i)s9K9v@M?NMSDuWY!toay)`l4 z@geQWgUS1Mj&bJsjd1`E{O_`EN zy;{`N_tmwFnxeutbWFebG?np$iiP~^0s11{?St;h1lf(ldI190fGZf~s*~RlPj59u zJ?FK@$c-a)}xl~+)+gQm@CsG!y&Q*82rR(7%8cX4hmY0zaV>e zUky8iEzY;n?q>3Z#HXAv4MR{iqL;i2>=S0b;F8l7b}8{*G)gd&di{s1+$PWczm&}_@L@LO7&4u zv>cIC3)<&ce~PRr(@5Uy&3a{X{=Z;-i{k)}_9XMQS_X)C6s=5~!aW?1&ZZ{F;@NE{Kxv zWh4W-f}EYW&!i|)n(l&4BmtIA716o8uNd_uad~a4s`+5N=%}Lyo^zu+dD=js-MS^@ z%jiLL5p1ou1vW>Iymuh zWU8i9*3e`yA1u`sG_9oHQm+HiqX_`^FJ&{-)drSuge;nDf1*AmY zCo?07zl>M>V>?lDp&(*Kz?tvvO$rLq2iG)IxMZ$vFJ`bjP-7WZzpw`}V7=V_Mmf(G zd1!MUuvJV!GtWGWq4Vs-6j?UK$|(1j>rQ+bnTS(2t?%yo1ggAz5eD$+JQa}ve~7Cz z?8oB$a3xwHG?S`oq;2;G6#Y3r@_{+*#U5!iIL+EPGk7;bDjIx7dG-nEQUTvcH5gjw zdeug|;%wY<=*g$fMH?o}`ZS0;6f&&co9TH=J?3qtQmjG-vZ#*b!;y`z%E-kBZNoVWwPosG+f_$VR7iP3#XJO!LuN;19 z^YBPjI+;8DOqq5ZGGr$t_R7-=WW%-kICKY9ERiuDskZOSaKGo3ePuM^7zD43 zL;7@auZtAv4Ikr{?P_Ebn%P&59OTaPZnFOjpvW%Yz8! zq2`rrec5{*bSF$0wmh~wcgpzi(3_WH#*)pLoKQ%eK14Q&=7Ai!(z~0!a6r!v5!&Z0`5{}c z`V`^!l>zgA;Lc2t+tchOpwt#XIjX;*f&1qs#~ejn4vV7zQb`%7S-)~Nr_?No#Pv1d z`1%h0gJCtS(T*qph@F7<#%N!6EjPb;!$Wn{HCjNd-)hut+bol0BdR(ILv>|Vw}1WB zbNQ}J?xa$SWnEb=Gi|FZAO+*k-2zlq-6tcJd}Vf&4&^6j^25!b@SV3d26fe%9ykR{KtL7XR`Y6SUXC?;mE6`1`_BS zMsCZqUKWUD#_xL;n?sHf2YD))LA<`+TQeOLsDuC{7v*Y+guI6P5K``(F@ z>!70hts4{aPKfwbH0~k*>YeOLTf59t|ArnUt5{^F9lT@isO~U(8&vKWUNBqt*R;Pg zFqH3`o8>d-Z@9FVA%x#8l9LEILQu5)PJ}P^hjADRuC~mcz@)zXAp{b`^YfH!MDQ+r z4b=67Ha3`fKFfwhr`wf{3xx@Q5MP#Tc`ojI8oEWOJ{ZSC;XEf$X09) zx{uSMvDkJ_4TF9PDMAtl+4YX!xvpJp^NA2*nMzyYnIU#Pt~-B=-CYFm8ibrJ+~~n2 zPe2`4{@KIq4Tu+B-&$6DxLZTn0|4sE;z!~SNOek2MWl*@>8Ci6sZ zM_EdgnvOo~m6`D0e@??{5*N5rGwH3HpE$+@ux%v_1giV3CN$n1uhlg4d8#7ne*FJE zLm_4uc-n4vCZS5d3Q&YXjmLRZTWkaZ_jQA3#dzG-faV1o0peHT!M@ybtzPDDs!Sh| zcFT7U96$5h+xZkE(tRf4l=2GvVZG)7OT$$_ZjMzpIIYNJ@N)3ufq?P@kMju(O*EG^6nAX6>9EEw_Alt7Abn{ z_l+M^2v|dMW87Mux(QaM52-vMMHEfgiTdyv)g?8ndL5nx?GK0w6&-5D++>>UZsYDK zyd$j&k@Mqajie_qW{nOqsg;CiQhkTfH;G9K9m%i|I-;$J?LoBGk&{Bch+7YSA@E1aCi zZCWHno&w6gnmG7Aj=5&AGr|_DqRYkb91vg^_Y%-zR^;Ch6g5=pbGzljq`1)i6Y25~ za!boz|1hp`K{z#!v_ysTO87+BwK(C%Ryq-GyeGmD4uHsdrq^LGv|c?*tCgLc?sx~~ z9@zh7ZMi7~-ylcKX*c>6LoX| zC}=(B%0z}t2e|HG2qV^o2*e)~ZGqLL?tJGEDD>Eqdt&_*hmTfS zjfz+tZyp30IXoA&HU8diq_999h;&vs>Q`v6(>f>&VgMrSx1m1papRGJP4lSiMJy!1 zA{1bZ&YUORHDqh49iIo5HPl(|+ijpk>}7L+lOVCyasbl7!u{ev<7F7;jlu2>^pZL8 z+%DWuiH;r2VD4|HB_tj3cw`+yN15=IhMZ7+1l|&HWula^5&2MGgOciphc^h%r;SG# zmr^0^t_rk^vLq7{DLH&e(Y1NahZ*kxUHT~f&?gznNb0e!CoAnI6W(1j$S5tqeTl`f zEn1i?@jnJYwh6*#wPrmniu#}9tU3UKJ1h3@tRJ^(&I_$oE!8GTSyery@je7F?{^~8 zi`Xo-+2^&3{PmyY{de$)QYroSoI&8|HGyD{Bg6vLv4%@@ zj5&NzpRJK&Gw|`@|1b50&dxs5Q30+2!&{7|BqexQkXn8&po0d?U2>~TbmnZk6@7S{ zh#X>gM9wAeHJ5c;!9?w^7CVUYW($;2vtm(I(Kt@Iz7j-#@xmnZPNI*f$0wh425Lat zl90u`yCX2$sv_BIdJHnhRrwO|%YEYKeN;0;GUB3xGRJLj2j+a~^95TdkeSGGLz>3J z>HtjrFX1J#=4(CrpXw0AUl5^aT!wtRdy1r7$;VuhAK4qPnKx4A+8bcWQCldB*3Zt} z_B~y6ihDj-kN`_M;2~Y0_o3}-?-fss2z%D zrp2}v?Dq3s-p7t6t(zzFPvNyFU@MNI6Lo;keh5+f{>Rl#${})uT{ROzYX79Ir;t+S zrj~U4)eJ2^;TJ@W<7mU<18gw<($1EuVla!t&l*%>?{;iUXe^to2wI|{kQSvjR`#w^ z@deaeW`OJUm|AGO#E~xthmQ7I>RPnaj5q2yxy=ViruWPOosav)EL{er69YR1v@@9q zWFNf)B7#EfC)!D7m1p2tB(NNczJY{hFRzzKAbpx}7?p72$G(2)59=A}ub{HthS>vW zBzXUjK?8RULCA&%Pazw3x!J9@)rC~{dZs>k?Q|6W-`K$AYV>yDfR<_0t%k8`o&lWVYFTp=iZ+FPmIO1 z6DDoy{yX;bgNbI63XqrJDNHNJlZY2BLsY@a$fhsgBQ|i;qDDUdRB_y?50;|9HPO^X z46i4%B5h#9(VEt4)5iY9Q<(6nKUe1{|!U{ku7`r z)?s1!lf}I`ZJ$&Cs2lIj;W0$F>NmQLu65ays%lQVNG-TgD77;0 zD4V!oWYn*dAuc=8(WrGhhz$gh1yNZT3_b^4UF~4f=Qvu!8I@z^)NTBcAx1{j z8lBI4)hp|-6)JGzuyRX%LtJs{4Ff^oK&Ji+}T;Rb;Y*qHB^0p%ig^>l zLmd&FP&s3ZY5?baKmEJ&093=<}9`@}? zPA(1p>D_W*Ay*DwvyY7i?1;<7i@Fk7;o=Xm#~px^Uz=pWB*fSm{g)wZIw<2$7fFv= zuh*L=oujS2LyX>FO>Qu4;6)B=)4!=Rjcu~^(}D!jJuC4=paHC<_J#TN{@fnfVW_B(2%uy61EMg{)@u12_OP##n3&ECrJD)4LZJV8I_;%fPhm;DDdoVf5Uui1EcMu<2b)H%#*aJd=6UEUwlQg=}lmIeC+5W51yB zpMIRtCtKUs8O66Xf1q9%Y;Mj?F9@w_pTRl9)W2Y%JMX1&4Ih>WUaYkQUNQIjsTo>w zzy(s4zj}gm;w$ntGR@Sn>cCyfr zs^iw3IsIwi{W;6g{DA2-sD=c%tItGVJB1c(%hi4 z+0rtlN%~m79bqk-G6}K_y1k_$^)Aor=Et(ry-Lj@hDst?-NhJ3z$0G46*p&#@w8X$+wSl_|5&vIBu)SK4~954c*ZuiOpp z%pf4#2x-e&G(Dm}Z40%9|K#2dR8y0JYM&3cWvfyF<`@+Pt}T#@4dq})r$gk1ANO^m z)spauj>Q(Pt1_L`JJzd_5}Jg@3KS91aOl{=ktZ}J49+M@mLtyq7Em$omxULgQ96!<4 z#~ww1jhWTZVibsYl$5V5;XI2?MorZw597g<$`SG`9^AIA3D-@gXh8r3j-N53TktJt z$eFA&IV~_;o&(0lfJiN1x&1>S_a$_I=U6RTo!(cI4QYJKe8?VaR0t-N&cVQM3mk8c z?0U-p3sn;x#_&ze4z{G+cxpje<%8TM%ayW)&9}m^%|B#HejPiUxk5oQNmWZ~nam6c z1Hn0%Jc>U*)$pocaH7dsfhE%0~}4c=EO_k z8|+IH!mUa~GxWcHt4p+#r0Vbqc8J(j#8G@sgw#+)e@g|U%_dhwH5t&l`UPcHtIh@4 zsh;_Q7jB%F()detQMPcpX|9-W7Ipo$3=3|d3m(q{voo|0G_0))ja|kWolsczM$gIO zpmf4hcIR;nPyR&`Gu`Nu@90NK(TQp7iDhsfN5G6AY8RHq2C<`y2bUquu-;lRkW4+b z5Q)IA-OV7B6kF_{(#{Ue_sK9lVi=cuM2KRY56u5l{Y}c|if=$<>GWx;;QGsvk8ZMe zL|sP|zgPmR4-HQU+GeFvE4Z~VL7SW(0cGk4KnE+^d<=;5bVUCr`AIqScR0GI`0^HX zBiZF6kSyi7XOguL^C{YyvI!mgj6 z!JNHUar1osy|DoUKl=rF3%kde@HPv_5_>VBt3uY*2AWsARLb86`-6{v<-N?O@Wb0e z(2*eo-Z`jJ8ES!Ld*U$6o1*#ZQa*i?y24yv1p#$0Hrqm@9O_jJ{XIU#sJy>lXQ`2} zPn+8W{?AsIwr=|T8D7x|q*x+?_^y-n zfp-PY7`g^UP6;R%bDdfLUnDDq?t`_r?ClPDsrmujy^c^f+-xWUFhfJB7B$;-haJIC zQS~>v^9Y)PG6zrKuR}vMIIN1Dks;uP%8vF#rdlXfLXRI<2(-sgYhE!wk{i*8o7Hcb zrktW@5gn|t(>`2k5_W5~jb4b}uvbL~R>%x0CV|1# z04>Xu0=(OuSMf9fe5PFx+I=3he}r#R{ghKs4)qDZTnq7@BO4f~<Eq8K2I)oV43+A@N4&bA(1<1p#DIEH zV^YOkENy~Zz_xLT{WEQf;V85K>Lm{E?S6fp#zC+PF3>tN7lza!A9mc+JD$B`K9U4A z-#X}dQsiK-xYceo-?jXfC2OT7K1o5?*|QhGa|;5AEjJSS>5sW%46w-{!pe)7i?~d> zS|S&1V|lBHPAjr?95Jl*BJ_#za!ta;L~G=ca*fLv#$4^s>rV`pI=C)~SoV3wWczo8 zKerp$>lrlLSu+Beg^^S8uz-9&7_r)ml0pEoyvO79?x!Pv5g%b`wc(U>8}Ntt=|Z|+ zkOXksSH(08cxqn#J#Fo9rsRp&^THT;Uayzdj!MWP;`*%l*gNY<3IdJGvm%Y(4ss&^ zrR`B3(x`pJnC(IvS}k&;fyfpfWz1nhY$&TlG@}{$fp|@-^<4f%Uko~lnZDI|{;Jj( zi}NDRPQo-diLJtcl>ukfMrAPsmNLZXy9w*EuF1yUjK|Ka-jWu4cUMjZ5^<--ur<); zvihbuC23b!GeZT?^J7+Cdcdqd-_LO+8{Pb(J)%y-wJKeFcM4r~^%6d8v{6lx9Su(s zkI_H23N=LdhoUH^4`7JvJ3VP@)U;=OBcZN7qk2n;H*<$6j%A_G=Z`m+TFU3azT~}) zw$Cq9d$F~u$X%<3FkA^dsungyuC#2gTxpysmhPie)005HEcP|!!64Mh0W%*{d zrlz(@y{*=j4tL;!+E5zNRHImUxu3-=m7vk9L!I!q*LCD|C;ARmdFZVaduRopN!#0( zwJIbIBPfo!&JcN{>F1X@C{*7`LcUXsNo)fdRU!RRDNFhfjC?a^K?oH`s1w9}KAi!Z z)>HIJk4ZwqJ@Q>-`0E76(`898eksb=FX%x{jc^8q4sMGarn#ZK!OFDXsW@RdG%!4rT5(;2Sy>oZ zTu?)BX-hajw^fomkXOyGdEgQ#_QEu zb+e`gyvC5rT@|xUBjr<4cpK@x|C8n0MkNPBDYrF|y7%dm;;Sc7wngYB^gt5yE6t*| zXbhr+@PR99K*RW$GW$8g--vXoKgt5KM1+W`j1OeS3yFicv=dBdbecBTXE;L^w) zMIlRaiw{tcps|4qZ@6$o3ose5?iojKUKcLw#n|$Uteu5r|I^PEldak})SaA%5#&v^g-kpmkNWWCYS5 zo|__+aZyS@p(QHWJ3h@VlG@F9Tf}fk;pmcSi&_FC=;);c? z%C&WgL*`Ck(7`!%KAZ0FIkay5iE_9##g&Vq8(JxmXeK_J&PCHi$b}BA}hG9)}S7oDq~Q;KW*@r$403KgCXMT%o0?lCJ4^$6wU?7S0GdEapt;V zQQL6w6H={!nCm>cJg&kYu}40YDO)5gwab+{cb1l)HW(26O_cI6 z-%#e>Ab|#|Aat@`!%&>q*9yes76c9ENxL~14LYpm7SEtRi6!Q76O*bn76hQ7m1V-d zWlUAtrOVKBrI+G^;9BTtpNY;P+x@lAqLM>CmQ!XTmQ`-S31qA8sRym()CA4R!WwGv zQw;mj=f;WUnyMZv=XR2;&F(aHINxCkq6hvbB8m;ostm@)SBFcEGqjg;wcR_WZ_8kz z#k=Cv4gWD;oDG_1asCed$!ArQCpo(6L7?0F0;M2%9%a)pbr%0@Je;!nO>8tUy`!rK z7RgC7B!vbJF&85cl%dWL$Y=xNeWB-OInEgEudq~9#mxn2$?_!m5w;^5R9Ag{_fRd= z&%e~DiMwnRA@l-`3%Wmv;oWeQ`A3O2|IAu8=`R5GfeHE*Ryu7~^gm?lknRkz|0h}6 zR!Po^Ahb<|hG73lkR=%|#_B_F4g(oMl(5`$Fg&;vZ1%OlZokMsVx zS}64-7|x%$&V+3ls`g=8A0B-0ASOwyozii@MdpUny*i49kHYe|B(U&2;gM;-&_$8q z^Ga}LcmjO~J;>(0ww8oY>3WL|eRTdWKoAt#?rczrn-&}7*#Z~cP(?Vr=mGhi#DTuN z!P*`~|Ien;MP1m9DqM4*F}QDxX3}z^>$_P$;t3*}bOrf21>|S$wo_q#cvg#Xp-61RIX!urzMD;|`sIRI9&|NLa!ZD6-v4Dr%PUv^^-iSOI>S$J6%e5kz zn-z9pst>+1k-aT)09BZ{d@w-wII-jz>JzP2KO<5B-RMxtyMP*<3n6bI@wGQ)K*30z zJLSdDAz^s1A7H^mSR~V_v>tMd`KA}=?OqT*TwBJj_uf6T3>T6!JkDZQJksjxt5Aat zu~jPbDW4mNPU9ZkaC`YEG`u3gu%B-Ld5kAI=#O5;MzJ+*dV*P~#0ptE=b|^TW7HmV z6N3@&kX!^c0c{LfB1n-*x_%81?=fFbvZMVB%?Vu=rR0uwZG|L6-v@wLAe1Ud?d*Lvj)Xz8sJP}g*z@^E7V5c*aY@%fKK&Lpv^t|>9%N(%(B`8N$}S-S7M^vE|62Xa&mq-)>=B*H)>VDzhCL!8jBPo5a~ z4xVtvDMZ^Gf49`(%P2(%fXY}ch`#BJk?5%cD=oM11}i`mpv8Uvk*hUi$&1U0ci%s_ zDRusuHvfm&R$t1mhFpY5O1ZTn4SJ9dV_Z!ZZ&ED`@{4NWJ4mx-PO5_5l-1Wb;tDp_ z%i-iY!}wX3T3KuZtPsVB_=qwM4boRTj^$@hlXq$yjPiMO4zxcvPIfvUz{w!o`qjww`YaM?b zH5wOST!Fm9{_xu@`QQ$G?h{zpE=1L6o{2R>4<=0quiSgDc=Xr$V9vqglej*~;uH6(?+=86X*S>S|Faqcu*>5qz|DvQ*bohcvc-XhjX zR1ff6$;8$%7e+M73%d7^qq3z4 zZekB%p3Cc8pCt6G2>OwS>#Fd#VS;82Ql41SLaPJiMpB=;62D)hd0I84uO)@n(IWQf zyI;S_HVS;6$%V+%v3hk}4W+QXmrKa1IP{m`yn-ADrZFmPy};eBFB?fVh+nCv3;%-V zgii((Y&Dxo%l`3p0Zpy>>3OahAl6*ezt55;+x?tT{J1+q(eIKo!4_vlGc%O+?nG~jlAS)C6%buz2~2+li-jUV0_zrE z5^-?Ktwk>SCg;6%jU>Ixdc~rmwkQX&ui8e;P*b}~dJvcj->5_hOwxKsk^|-j={qST z?SL{LKM7iPTSzA3cB=1F0naU*pOqknn}Gjsxm7sz-K7}+{j#?}2om@6*NMN_-xE+C z9M9@T)&4Gnb@;yP~4>faO9IqELijuLf=wk6!3jzN}N|~KX{Y!;_$L9ZQ0mQ zJdN~GdL0oPU8ci(6hI?qo#oq~f#%TNimhy(@l=ZTxquyzQ#Zu<9S(IEnfpgQpQvDM z^v3)tj!1w96u|?*jECk^<4l1Omt+}K=*jKqgKV^hU)tq+7Ex~3@$`9~2|bIkY7OxW z=qx&2@*H$XmbExv2bUcPB9}2=CIEf*_&1PxsCV=^Do}d>6Zj_kZl;0Gn697ztwdEi zw`#af(1OFQ>Y4T+zkTo7CT%gpr@^-Cm@TC2b}vOb|8z@l=k!Zkn!CIaZZExKt7k%W z8e?6XC{ab#T8romyq8zZK2T@_FtMA|A2Zz)21rD@Cj_zEj<%_-(qv?AQw%AW-m5Jo1K(m;jXL}9#7)~?#6=jN_H>3ZW(hd(b|&pTsxO%YgkNhjaa@n zfsa|G5!rO3pQEjJ12_)sKAg~w&aPvJ^p)YeWnk+QIfwJ{LQf(9h&6KW5QI)gh;_Nu zj8lxm9cZX2EDx`mRaGDHng30NZhx-B+|{`RZtBx74mQjZGa^v=1?p<(cNbD>w!@kj zKPa_Z)dtL+?Xq#`>V$kPlF=)Y6om{u3raA%A1%`O^Y-E_f;9l$5X22FP+{&$fG`>* zXAI&j+n!|*2(>5{_Ixj48l7s^0yKt1-(cr*r5!Vj2M1x!Ket&1f|S+iYT187I6}|! z59TDCfcP(Z#*F!{JN5{Dq=EK^+#c_^V6NeNI4?!%DgczVflC@M9RTHUFKoWCQ+IPW z*|=>I^+3P7YBR=(pOi3g55Mi)G!ADTfBzrmI`R{)HtvYg+*CjjO;~uqS$b_M!6u(Gfm8g~57El(Cm za-P;G4I!sqm3MZmY*NvA;x!?ZDj6ThanVj-$vdFCoWtyfkH16X?`;GIZW0)YLn|3N z8C15*-AJ-nf|i^-7)|-e^um`2%&iC6+?$yHM^1v?Iog!F{Lo})O4@$`sqC&Q1!n0b zjAK!a5oWt1X*bNezfb8#7Uyx>8`R|x0P@?aUT+Q5sY3dsxk}3%+7}o&t9E`-i13-W z`g9k=lp%1r$oo~WXp4Drp#NpycNW}ZG#dh~2BV!mi6z>ekk3I<-MY4ezf?tG-Bg?P zI*6d@CD|YHl*s94kXey_{+RW^9n*>voyN4A@S8;?eMcxNoGn{%l9(R5i=U~@9E1B^ zpvz_!t7~5jTj}FaQs+Nk13yYr^}>4}z6^ezSoqUt;XhUF#}8yy7|7^t$eVARrr<;* z8;=+gX$M!3hwXtRq)Cz-L9UjSAi&$wBq4&6ZceX@-_W2&Siaqb2{j?0u32-eW)0I&N+Gl_96-UkVnsv^Z4N|;a&FFex2Qo!eq4UZe&7-1Yo%V*T+iX3w~KtW;jy`M9#2K0!o{s8_76y@Ihy zIwtJ$ks#vl?(_{<4n$dkZyq>(1xT6nk@A+t-c86B@Fs!CM{s*tyXbtZG~CTd@WBo} zkqa#Yukdlo-|cUXns%nfFIGSyliYfGs3NJ38+pmcnh@s#83NgnshgPP5x+^tF+NyW ztXMg{r=JuHP(kETg+lx(msbsq28AqaZ=NeKJ{>X28_ z4tjALI}@5yn>%r~&3HZ0^Mbdgf*au&Dkn}$j!d{6Le99JepB*3qAcTdvgCso{>UG= z>fPH)6v-zs4V%Pe=AR!2z5QzmgkCYpB0KINLpS3$3sdejF(7832WKOQ^t+3dq(+T#e4NgD+O>?HbJP^&z;j zubXox#6C>UoO1-G+dltXwwuZP-jHh+GlZsl5c@iV1G!_7AyRZ*t0ra{KT<tk? zC(98$S=uQRPken#Y)%g?HSj|bBdbeQA=%%NV>~3FuYVeOCY9dz%wEvzLSuTru0NY9 z^$G$dS9Z!kZ|sMzKlLSXq}9TtulOnla*124dle+L;+8@MWmKtvE0 zP}=jWotuv;vh~X(2V?%s4_Yu(K3jpfO|+&ee??n=E6w>a>8g~*Bjz~3)lSO(nu~l< z6+T6-rY?J|giGox@kOhKu8pDFIzgOq9r!j*D<^WY4G}^GKrx4UK7GLk_uIwJK^%<6 zZ#tCK1-%mABO5t?FGf=krHbl>b5J?WNl<^~v997B^D5aL&H7TbD6W@=!cxINS*cxYtD5#~{H*+kW!$)fh&&r2vQZn(7!uJg$KH+<|z; z?NW8V(`ucb$@hnfw-=VbT`6*vN~3}cC^LxG-fpJuTIENI#&{rH_w>JjyY*caloTMR z1R@*lzzaw1Ym3i{pl>b8@#3GzXd4XEuQETM^W!}#(=rTgiS*)K%tvMpAnn%)xRCs0 zetYD6NQ1eOEOlGsOV!WCFmUxkckYUsgU!oC!~uVZ3smD~a;!OhZMLF8@5lj78B5H<-u(}AACw1>@_ z-HSfO2p7B*CW5CSA^BRnJq%s~=wpq`?*l?4wSgdX0jItBQspD1wVf-7*Ow4*T{O_} zgg~ROFD!MpELvD?QP&Fg=)gTiQIHqbKO^Q4-P)n}COLBuZpJb!bIUXifopD;EI=Bt zC?%NFsg;UrL^geB()RzthS&$ms(SOdiX?LJTnd-utE_X@)k9QqXhv=?>_yqkep+>p(de(%aG zPGF)*mZwo{w{{)V!%&7y3lwrzATwj8TzgS~kKIJe`Qi^)s9<351|o0K&&$D}h)g;C z={3fEI*TBJH4%MQMN_u zzSsbvM}1JUg3-Z7)w4zlo?QRG!Ze}{u}3KD##4oC?>S>QZISQ#@@R*&zF4*ErjL9g zm*WNHfZ3DB{g?CL3WUx&pbOC3DJI1vD+6Qgo=?%77>yjSn(F>P(9oZ(Krm-4TIFC4 zfp~LohiR9q$2H6=yZ|Pb%Oy`TK@BDX=6i$c$&jzw0a=bTAbxW0v>pI;TIB}T9ie}1 zq+s~tAA#FF8qIg&ST6p`kR?T&Bm(N{8+B~mB&oMEdV8wh;RWQDnh}t83(u&G6f81W zkc*+(_(3RvSOz#l>>zau(hHivx8MYw(q-LDKsKRdleoz?8IBSTm1z}MuU;XiZ6x3A z%mFd0RkpKk1b&qNs{Mt_*uMpuV`Jq=gd^Yk%I1(?q8J92tj4K+%A^%>iVX!L{tt#}jY;P$!3K%-G|9nPuz2G>he3qyElm6Gh2K*CF?7Plsf)Od3FR{nM z??7l9;^zC0qj2CH`4W-*w}y<2YC{O*ntx;RsWzg&X_zf^xYEYO|T$I<+Te@LBut0 zRj87V7NhFjf!|;Ez7GvE)rfE`g(uwlV%j~sKiBrRjp=)T!w44!*f`ioxgpb~KA3Hw zyLRVtXdY;&BLIJ>g;1a|s_unr8Guks%bbzX1_}ngx8+k^w`{pZpPR(RvrY|PqF-jr z!uC#dhAaB@cEBMWtt&h9?Tu(nx|2(i=2Og1f>nw1CgdSF9mb(phfnliQaGE()S6D- z(3g2dfu5aMl9#R7Wjuj~XVeQJORlYM!M{8mXpio<9Uh7S+}Hd|Z+MD^*aO>E+6dA3n9 zJLBbb!yTpIv|@k(NZ?Nkt0N3wJixKU>vy)Tl9cZ!-gicuyn#Wbr?MX{;?j$otcE7m zFFhavut0bkgVZk1?4O0~nEANfpf_rxNPB+A9Q2z0`{&uS0yDcuR#Yh7|fhCDkVtm&pe z>k4*Kw_L54Oa)8wp0=4P-q^hKm{(IL>5dZR8Ov9elDqx`)EWJb`+B<&jz&xh@nJ1G z??*;Gt_2qMm?jw(4`5!;<1!5g9$h_Z{1J`wzb;_)0@r$lTW!VxBE3=V9oQX(emBLe zYm9xE^us07%pllA5qt}2vA?WV)(P_AaFPx;zyLBRE!N^AKgZ?G3E3jRa3<&>(WEm9V9j5nmTMg?u`7}qkQoasTjhH>ce)!6p)T= zvE{c1JWGkWv*W)d!c_nmJZ)-bbNfQ8VmSWC#7`+AKDUj!q-VcwBN4}LB=g;oHYDhc zp$vxgbImp28SmfZZ3YOvTo@1ee09njco%658+>d%KuJ)t?mqgZ0KHHuo(~L#;&6~B zqgks_quBuRFHod}2XDm5uLZV0uZsdr4LfZbZQWP9QGrEGjrw-7j&!cQMk)r6WL*XC z+91!HZB)=7KO}A{~DKO3U0WR*j!t{&e`jJ8a z6W6n6xlI)~gc*W7yo0%u)j@&bYeO?Km8aCa*pJDeoW&#l(t>K!2X8caGn3N@CvM;X=0Nxf^u(Ro_}6<(XtCcF+&tQAkyFI?*WBznwn4)Ha}vP=J3CaiJ{7LupFIgcda zaGs|XA6I^f&+D0V&(~3(&ZVxD(TW|)X)-*0UvPO1PCj@nsI+$?L?-3RV&}7a~dLA5el6CqFm{P>7`>Gi3je{ax<9U^;y_t{t$?pP$Ja z$SBnB|K5@rul|_|J>fm)cSf>d?lcjD4pxsP#Z4B4i^=M2SU$8Ngt{A@ja()X3EHMf z?eH2P2DHSJ$M)&@0H^=%60s&+RClHZ_8N9WLJ5$-!X%2-1@`eSBCKfRXHCsP0E7S| zxZg)`K!Adk0ds>Yg67TgtLNMD<_Ymrk8A*(>L@&ihJ+#w9YbcgxH=vYj%}Rg0EoEJ zShS-v`yGeWTv|(S6xZcn?)$iSaw0@sUA$iyvi;P4<{S_gq4miX(6$sISR16lIO{xG zy^I|G<>_7@v}4lw;>gJI)35}Fv&)J}SA4i{egy;<>hltPKLpTD=rTe_EdQq)Pt0(Z zL07)b3qT>l6Kp2TWl>>zW+Z774Ltg@tEZ&1`eCZNwUxB@=v%Es;z5E*gQ)0EKB)*< z(T#G>97|;q6`>|?&Hj6w>~s&v!6r5F2C905d4Q$3YapERa^2+v3^s~t6NDNCPc!ji z;H%C@;mI){gyo~0N^_ECZ-z1EcOd$b5A_c)N1LwW_T>FcN(XqaYffPtJGet7y0n{@ zl3s5IPU^XX)MVs0$IQv)brrc}v<0h)sYtS(`jA1#EYg*$b%ROV1!9>Ov%1HmM6-PV z2kcq;!q+O0Pmb9l0j`0Y?{Y&3qaeDfPVfSiz7V%OQ9X`He*)2dGJ^SRi}OuJsh@D8 zu9nGYJ>8_~!N$$vLQ}W=*s7)tA}ZUFOP2a(jNV*<>@UacE4VJ^@oN|n&QZBJy=z-y zbB9>l%%t>V8x<8|+$6M*OOa2=pa81=fcrh(miCAx5`3+xUpb_gE4^R1AQF!et(d_4 z_P4$y^83I}w-}tz6q27z4pXT71XqgZ%x>qt#}P^C*Q#ciqaj%~ZpJ;!hyn%~vw#uY z1STKuElonFwqc zEZt%mEM@GVzQdfHK@Ud2HPP)2Vp;UP`jmj&wNpm%bPYsXC7lTANTyBX9vv zCyQ6*L=pH@w4%~W8X+N}cRp8D1(JS2A@^E6gC_1dU?bG>BIz6*;xJX43}2LxzD|!Z zOq;q|UBM>Zh$`3_2`h2-W(d?ScZ2@{{~%C?-y8^0gUxk^sW~|-x~0>cHeK~<9^Hph z5LJ^)%VWUjNd_KU9z+dTj`|Qoms_0jWpzykYBCu}h^(zmx{B43Y5 z!0pP`^z~@V-<;*73Z%3s+UwA~&3b(|MI{?$Bg6g_>OSsi=|i>Kc7p);Ztxp`6J~{1 zyFN~3-StJPeeZ%m|B*$v`8NN9nqA#57#gUkfh!p3Idhs6GEMS!a(n&7 ztWw0eea?yH=6>VG`P~91er4H~Nul?wl;1lF{GjqffM#!?b~vkl&(XGeoZ_th zQ3tm#u<>_>1e))CL+45uZ%cpA%w%Olf&9c+&gOIEN+U#F1$eUIVaK$7Vf=)c;CghAJ>Q7QMh>{*q8Zqd3!s86 z0@^|F*{`mZxoa2uZTgq-dYd=2{jgtJqQbm`)lc^4DY0rLdITk=v|dIBKP(YbAu zaN#2oPSlLCN%DQy;y8pQ>}d=c(4y_b-cP|zr7qtjJ)jfRmh*^w!4yO+B5kr&$JbFZ zXJz{Aasq{!K|yy45E=)C$_MCzCnTKqJ&GU_+gX?O)ZQFi3*}2~p5< zM%Z)J<7Sx(r*>56gzPeF;f7t{?5~|s#U%W*x6flse4VjN>{hP@or6+@l2^Z!e2xkN zv3as6;QLX(P66xZ?kaw67n`5hDsb-<1ItLBPyI{bp~b9RutB=gx58@YOx>kdgpjRO z&Mni;G>Wn3v?YlQa9WW&*&S5{Aiy9emQE+V$Oz&g*={mv#TMFkAELo*M@j0byg+`j z57Y4m)#Q|=cu#Z{ua^uuSvx|k!osJlt;E@<-rvd*0K9V$W*do^TR6kKC*}%Z8ZTvn zV62HX^Fjs$?D3j9QfZn+8Y{pO@Z=~`)$H&T*Ini&T(z{ulDV|-oS~Hd*0g*6Vae-4 zdfcfA2bz{p3kk)l_CD-XvH(r&56uQu{eD|Xbu0@LZ@gQ06SHgkMp z$-`y8=54_AfOo_<6wp*{U%>WHY|9t&{sSoYQQAl#io0`R0k|q;835|kh+10#_I|4% zS)$#*$W`8g4>eS!e9Fo>DE?I=c|Q~ywx0@H)0qOfs3M6PhvUj$YKd*Q@4r~@WrxR3 zMLY!X9quqEC?y3TwssPZi0piM`s`RhlG30Ku;G#$9<+SPgwKwnP8deGpV&_%OC_Tz z8eh>5ZUjEh=5j(xfTrd&0AW+T;{C?2VvE4{h%Tla0ZdB7Snn=w=RM+VV2CK-_!0 z(Rt0VRA)mc*`gmg)stBYu_ZV@#65*dv*W%i0Dl3z&*kT?Wg#j$PqOdzLjnGOTp;11%uvQX%3ErCG>M%?2R3%6nEl zy3MoF?LkL^mjeQdv_u;po{jOY`qB2@bQlln{F#A9!^w%SIJwyiO@`xfDT0{MfmZZW zKtG~b)GbLpru^3XSN@cg7K4$D3ph{ZcvVT;epnc$Djj)3e%UF4BPnpvkAkjfDD=B}X2H1`Y)Yrt>bG z6RDsNPi7EL@MQus$YjyGHoQwJ(ry*j+r;M(psbz58N{A2pBlVlS}yVPZuGU&lb*HI z%do-2l*(`WvIMYQN!O0sPJ2R}@s7fE#lWzAE+VU5jQcWX27H>T_0Y7hnCTe5CAtV~ z%eMwt%X+5>XO-ObM_D-xrgds22H|HRO?=%)EQ!vcjyI(X^v7qx3|eNjvqfSjDI{?- z_{-ThT*Z;ND+C91y;_#wi=HT!ufm}NyG2))rbx^NZz&m^8RCEy(OsZC(7^9?I*CoE zhpR3u4&mzj#F-MkwiusBK6sa)S*vpMVf-DJ1y~E)U;d|s!dz0{su_>IrLWTFvxZIi zEBLy-`83|BW-k%<&I>n?hU0n3MHzJ$bPoHb2d9(@m}GuesM`CZSV^vb|Ht zYPiR9Zb#qz0uu{DQFxVFX-%DrcQ7|{NFLOKdcW-S%7KUSUIk;RZ;**n@8Hccy$@g3*K~8P3aJ1~9Tn-CeYQ+f=jMIB?Fg(dK zs7!im^?kW#3P5}?PHmuz(3)leV9kn?@&Y$NVc-J4?fnBN_4eU)WPjw%Bfu)B;^{)q zb^3Sd3-0z&^dy9}s*sjL7+cgtrY0DyCr-9$tv zU*_Jj*Ar7KH8EVdtVG4^v8?wtmjYIdmrmQUW2K{1;R~K$ zE@`4_dLI*OvyybLb#^LPIi+1xsVt=Z`l-ur~v5@2(aT%a`F);&pbR zf}~#Wyw7>?FclZI7ag2UM?nB_NAj5R@u%z%j%6{MMFvFWg}5^=cw2qkJetAb%%IqT zWq;`uv0{NIUh8>3#E;VCpEXYFP;hb2M znOkH56|ajkhcXQ(KN>|Fd3-5+)X8xxjG`>g{g9)(0YRe09sn}pvEFG*3=8AK^Ik^6 zRjU%>Q8zDW<*<4rz8xqt!dxV*4yPu7+{}GP?^qlnR^o`xu|NP|S{AiA_h2 z`YKaW96HW8st`7mXE`|cx^;sRnLlZfxL%hNDZf=&eZLLT4x90PM)E2ruu-@8)b&u{ zJ{|L2Oio#|`{?sw1kPa3Ads?y?Tiyvb&o15lyT%FQzigT78XFPtRogXguYW_MwSWf z1<0u24VZ*xGIYaD$i^H_0%d=XO?ASwI{@LBkaLHpOEr;#O3REjbZx_@W_-=4__?L- z1!>~P*i@R@*SQi(4AZmW({1Vf;A?Ajp%M9?KXWO=IN)>`z>ib2_DKKcs1Z8!%$IQx z_pmFc|9s~97hjvQBYAR@fDJ6Z_}1x8(gmo40;&rUdgjOb82w<<5_i_%auPeOqLm-Xc2tdRy01pt+y4m=6DuRC9v9dzL+ z+Q%C_HP@XuDXGj8W07{6dbq=}HSTCV%1L;m1y>jhc#UfA9K48@pPtqqgu7@6X7-x_ zi{N9y0`wKt;mGt@--9^F$f1k3DvW{{X+_~3@Q6IRCz;}RUq@J@wKz)fx+}AOJ^!mC z>|%B`(vugZj0|7gszg%`uLjLxai+>3ZjGxtA2>B*y5WulNjkqQPY!aTBlmED38;jD z^^sHZ(R0d14apZ6hugge6Qa;5lx!LgA(*WyTk`W0nVN!na_$i_flDyWwYUd~Ku9M||gVcYX2S3?PSxm;l zeYiE3@NXyC3`_6t7k6dnB1hPUP$^a*O9!Tm((9a>@(sJY2iHIa9Fh9VJ+;1Gg+Dz7 z$uwEWaQm4*DP=`NGtTIaydw!PT=l@tI8P{aN|v3r-2x)57r(u?mt&B)4+iRYs_X~{ z)e6vjv@4MmR%5>=R&)C>nV`L8G^qwc#R62Te{=7Ei=rhwxIdb#%Uz*(r;t^A ztS=HS-hHKC`pkfSrJOWSdg?QSCY+Dd@kN7{R3)Y+tsGZwOH@NB2Zuu4z7x`wA_ErI z>mtDid=JhwNL6;_sw92o!Zd>Mp;6|P#kPwuci^}tT8H~K{bG>b)h|4Cx^E7=Tx9Gl^(sozPs89KX;7;#0xpJ!3}%1huD9l$!(PkUU>Pk5 z7ngJsg~08PD{N{O_E%*d8d3;L{QQ`zVFAtYQ2)+n_0?a7n1&3)m~U2{w{{=O{L^dC z5?=n%!_Wq{fVs?Q61qjq-LJ&OZDG)w?S0?UI<=p`B(4r^gz#S3X}5kxfrVz1HgdIM zqUQ>Qr^W%@(i&*$aMtx?^s|x+){Sn7owLeSrYey-_U<2E9rgVEBMk4#RY_Vb!+nOY zPRJ+67}?gV=!E$dBXH!5ZoEb-g1>3pKdylqqHe!}o5ci$Y=#s{59t~&$?YBH$U`3$ zdb|&<>Q9)}`MGv0ob%LrlUu48VZCS^RqJhG8*Gv+R3EAhWOX6}Ei80Vm*d+d;-h0Q$Mm-$D$qd#gC|$SQ+*nJ5&($9o0ihD08rIN6BN?O_2NkuSw*VD}uhk*=b5^^k-7q96Wvz+N4iWif5wM7V4j?q$KS7kVRd8v1N}7z zECmtd!H|#RJjex_5+&UC@*u~IFNZ{UFPG^8z?9QZQ^vl!F`OE+Eh44)x_Qq+spsxO z1HlQ*EQ~m|@er{F4m=^rmrwW0{CAwQ|r~f4Ww>(64YuB}EK=?^Mt;ls*m6vZ>ePnwe4K30R zBVFMm3eqK%4$m#dV!2vQ|2e#Lc>f%=sD4=NJ&d7<9a zaZM0CI^Zbts@^*(Vt56%EpH2rR}!_lkz5S}JX>xRVn*%I`D3qimPg)o&Df=6ff9u|v5OL#|*ERShBOm`69 z;dL3=PaauO*pdS5;|~IpFU($+avTHQNY=U0JrdUB@mo3)Q zWAUUwk2o&m0F^hXOC>K6nY7cJ3E`7Ly(fLkb4M`cP$3Fnc^4c9odW0xo;Q)$ z9wEy}YZ^q9oe<-;ng2sQ4Hxl+YQ6`-=Cn{q*I^~`d!RR&V&Gs?D*J%r|5c%jpY*g1 zEGRjee`i0w2}-iL(a{Rf)_m;koaV}_Ko0MHDU_7TWX6kRm(h)|Z`XWSuU>Xpz$Viy-b@mT0Adw5z;3VRs1(wPI=IPg_uAbVzV27$O#=_Oo6`Erq`idxYF;IG7ZC)N8>co9yD|vT z-*!7rf6jx6#CaHpA(kbkJ;~bbPBKe^Gu|~MRD~jz6tvh-5WCd8Dp+Gv6f07|XxPS( zdqfP~NX@HB#q_c+uJNO#B)-?tQ23M@MKks1eBF7SOsm7n4NFdm3|N`bvy7J0ZyCqy z0WO?0n5uT!gd{cl+>2!?jb3EKtF39x{Ni?J5a+Oas<8ljZ(eSw-um<9&1P8i3|N&% zGz4sOkdItmlIJaPF1OmfBGs=x%eO`=)7+XD(h=c2ws=5l|CLlGbk2<)R4s>tv+ly= z_~YM-8pSe%+e0Lr@$hw0EkiCYAUM?`=(v93|`s1^Lk;3}~Y)@s?oP^zO2{B#k+?p3AppqvX;#)P9 z6#nSU5BZRE=pkWRGi%bFBT-HL7O55QTI?iy^3ao0WD2lA38X;um6W;-I~bc1rQfRKRGf_Pc|vhRn%K<;;BQUn0#It z>I#-&29vumJ*?P{JBh!=u96|^($TPWiT}}5`@)!(*>4g? zMbzON2P=G$GrYGwHQ<^W64sWNh_TW^!Y?I9wA-+_UW%72HoY9@HJCl5bWO54FdQSn^A7VC% z)%LrKcM8Q!zd*f!@GckSHd25M1sD9B?jNFl8RiiGDIYKR+X-T1+gXt~CV6E-8B&lG z#N4b*U!P?)p1u-r1nF#SE8FsySrs>n$?mmU`7!kHNu?(?omV6&{!{UU$DLcL^eUe; z@T}q*AMV+Vk4pPuM0HLa>{d%Jp!fd?YuGC^)}&z4`fx$XGKll(0Pa+ew?DNn&)SEs ztF;7J{|fuXJa)K!qWneREERHPnn!-F)3V3oT4o=6a8qFR|BX1yHlUz>`|6&YkGx&; z)smL`5-c)9rtGd_$(GyK?Sg#WiZ|t0{FaSs{9*$CuELDJ#oF`uhT1blUD`5B$)|gy zzanE5_HuXfIc$k!Fv0ne@a=L7j|VnMjD;;flJQvzE4#<$Ng1FE`>q&d#qv1 zvWRNJzhCoG5KtEsx%{q=Y?A6;eo#BG>wY<(AWnt?jt^!mkN1sG$a!IoNJ<^F{NF_0 zee(Gp3gk=5G#7pF`^7KF7F~SC$^3Uc0SB|a9vSXC21#=cqT*isAZ$!drPmxMXP( zP_V6^3rn_D&rgSZ1Ho$8=Jqb;Fa1w|O+rry;^fYX!cR7pObm^888%1i1#l>GUv0Sq zIasBDUJXB=i8CESM#n30Rq^@ye6Xg=O(WxeWG2eEU>VU)R|_Sk6J9>!!HNf0XNOnEwQIS)JJqZuCPfG# zUnL-`o2t;O{B)j_XsvHy+%mr6_g6N|iW((6+;dcO2$g7?Ue#O5t(MUJl#X8I#jo7K zc$Wzj58Cgfbzx!+yg>)_5ASde1o9y6^=?LbMh2j z2(>M!Yz~Z3O|Vs=p{#=`m!faXSKHLlXpmO{X>!7M&$R;;)P(8zyIaR+XmN518i2$u zhv_tyWB(hmtx9bP8*b!EURX`E zSIioY^|ec(yLU`ce|WVE>`J@Nwn1~nAQSmz`yb%27f|od)A<(Jm@lsm`<2(eTC}(e zlyLK$7^RZkqKz&J3}?j zDIORPvznW(3w4n%ZqXbmweMS$NdVa!HTZh)QZTmmg*}y$UTXzK+eaC{ao^RZOQ)hX zcG^d=yeqKKcFIUrj40-t=p@83h3|1|GjWV)p9JRA97U9EV6a@)vtZC_vX<+;34omrWWoN-e+&pP81QkXzK zQ-JtO>p4&a8jn~1D_xXv|F9|Yyl4DtZ@q@>`zWTdP zV=ZBFr-Rsp#cOuKZyuL{XslTIC?GM zU>)KKNHP)5Usxxm6-1~){zYQf@;eUz%@wA4HRLrfL`Wih6B@3)~&0)4~G!9Qq+|ua=*#a`CA| z5p1LPu4+sPpwLER(!eU3se5X)s3z#q@;&0-`?w!nc1iD}e34;Nzx*ci17XvjQ{3r$ zf76{KaU9o4T$?MF633#3mO2D?Kc<^m91Zz`9WAtl9&?!5$^***jnS)B>Qmnfab~3 zf&h&h6QN$|19w73%n{1DYEynL(-sq*^ol(%1elZhisL~S-{_fvB$ zfCajsn7D(L(WzlyG2MG=YI(N_h2-UkoRLJ+k3Bhp(xMgaH()6R?kRWt6*8%QR+F}+`0Se6VEZM*iO%rM-=0&e>TwNU3<2`wY zY+-fA^3bI5?x$WYPI!Ti>Wm%H?s-w>+u;kiNUP-|dh3oV0LhE?bwsP>D|ti^I&vVH zu_)otx$jYVfL(!F7so#X$ca@_7hxz0d7|**(t6$W!2>PwOBBbDNxMD8eP<^i-r^=x zgdBjg8;uTN9ycbjCfuX&4X)D&t*o*y$NU*G|IB;Kj?q=$`HU~QRz~m9!?ZVyVIU7~Yp^d?w3f@+4b41UWRsoatz8=v3z zbiyNA4ltfPMWb?cXg@*Js0QAyb%43Zbz2lWy<@^KnEbI@oVUyTe-^0P$P5Mi#-r86 zwZS<(_v`ukOXcNa8xIl3x?a#|F8=-PNCf?cY9Lmqg@>io3u66(b!LCJv3}9YjLb_f zWNY#i&zi^C&HrS0L4~Bp#pDK?OS=|l{nSj8-s)}=Fmk6bm@lZdhAevBT$nQ1vum%Z`z#tVc|f_AC`&|_Dk5OiTBcxdjm7h(ncPy=i=9zP%GdkT0lXGw^eKq^1b+Mzk{)tbVq};geLGr$kie{N*tABAWL7b@K$EIhLvMr zzn*A3=|f^{Pe}-LkS%NT`Poj_>Z$WNzlwJTnU?#bALapyc%Gz1kne!Hzx0Y3KjZlA*sLf4SGT zuh5ShR6Q%IsD|7RtC-G4$8DXk3mkcb^)FQD2F24mK^&?U3h}``xH{dlt!5uB4`W3GCRT zdJF1PoYzu)KoE2AaxSB_m3EGkFh&9X5@I0y2RWl>m&b{iW`Z(`_k|ARnS-|EB`>1Srb#o1Mv$k+BRj&2U*UZ-KAiGzA4MR%=48H7<` z^*h-kKB!e0S@`)zY$H=Pvdxn5psj~Pp}f*vOh?2#Lm@3CR>kW!ik@jo4x zx1NcjQYVD9L>FIqE&3K+sxa04y!=ZB_!MI@#Eo@yB*9D36(<1Fb6k#X;z%R#_L&`q z$il#Y+KH7T1l zw2a?FsQMy_xE3z$Xn)O89TbCg!E{D6_6Fa%U!oH8FlYASeKxCS_kGiVh3lS-KgNB5 z1Q_z9!KCCRN%p?6gqNH!TNCH0OPl&Xch}c|#!k=ykQ~5+c71X3NF;tLC@v7b!9Se@ z1q0E%Txk2eEy-s-H+^&?mV7?7M(;?Y+u=P!w>&U9CnOQ-`$tqY7L0 zQN1Fj>|Zo$BZX=_4W5YzOe!{9I;M3%TGU3A3P$uL}czc6B+uvC%YQfwMHA z`RJ@?<4zrCXj`CF2-LynfU!}F!|U2jvue890crn4>BE$rSIE{eCoOj# zoqfsyF$BqfaK+?hrfBcDC_QunI4vRrPWsAn1X~qc*?=@8BZjYMk_{J8%6Yr%CeBFM zk~n+Y1IwAe>}b!$#$H0zS+ zp=iLfLr)MH_k4y3I-6LRC5ZTJYG4-T{eVkHni>DOSfsZmc8xwzJ;8Ezv?;w5S&;t= z=gVH)UlLUz(rbMrNwey~q@>C`!A&8A@sRZJ%2ji?;6EaNoe2ro2~k+f+32$(H>~=M z3o#e&k;ckd_s3^uB+tigzws?dJ0n&yG8lv7A?PhDs)EzI!g-O-Xhfl*TD24ObGjN2 zb1*w1lS3%puxv7t`|F0q+t%iAG^S=ctHnrdA#+Zty~?j{$o)MG<{gyW_%|Mde~PW2 zTppBW2P6xN+>CFG2-*eD2gaaMmrkT*m+q7}wZcQHQ%unA`#&NlB2`-eVj!pKssM_$ z0FJ2_jcJ?I#Uvr6Pf^gcO-V}gC4eb+{7qs*xi@x3_@rttwyrbor`(pZF-;d=1z1G(9^_h^89 z+tTfHK&@({XM7x$E4n3Dd;VbZPuVGBwppyKc*rd5g9axML*Ixh{zU^m?$Y^&gm1z; z$KxNoL#Q%`z@OHmg^7ubS;eV3xHdTWO9Pj~sHP4!31sRbjKzD(fKgjyh{7-Q5(^l z`rtK33HbK@0=e5IOFcZ3A-6g=fQK!B8}c@`%!$E5YdjQ3A3N}m5N~NY6*5#L@>h!9 zuh!Lo+A`aHp#e|lXJ>r=o{^?(|7)oUFG+TDXQo~tWswyX4uMMW70__+LEOFCh%y{F zF`a6w_EMwYK5Yh~9*?7Fz^RFA|1BRfV{S}UE{w->1WJF5CptUpnX(pDyyxBn;hmz{ zHJAZ3-!%aFbYa|?T3dYM!*+uId~B+q{J6S|_=x6fEiwa4F!{ ztvkiau~i+YoI8UI9Z5drQws`$U7VW}eIL)(-=Rg}Z#vYdNvZ#5eb#{Quz8gPggJOB zfLZ+0C?b#u9Oi0vltXJ8DN`x9Vxu3ev8Q-Z&&Mfi-W!9g|>C@kf8&Q7OI zKMQ?_jvcHuLIVcuwq-C0&zLZJ@v#eSVBjiJdPji#9>eC|9#AJn5ApT}w4k9YDLsJs z{kZARLGG#!GFFI|sxq&BO&>6y!)@3r56X;%AVY<@)C4Gz%4|1f+*j3#N5&1QgIs&B-q z){m((p2J4^=Cxr&KNc}Db%@N|ECm+0nr=4OKa3^Z0bjWQ5E{mFKT+06er48Z^`d_U zWDp_NjZ|WA$!~+%Y0d6#09pkiLSikJ{4=D?*Cf*k#pyOU$_UkLC zdZ^dU4%(=naBJV>U9h2eJ_Lq`bVc;U`ycj550{Rtu9BC7Nx&Sow*>5|fV)j=GER?YPX05dSnaFRKFPhK2x9oHJag z{>|E^3I>EIob$3??ix+=OPGtBt;nZ6T7JXD1!coYRaj}^#$Rp*Gdvj@@DV`Y{!Wrz zEvTneJB~xj>1q|sL7Az7zj}LS{hA9UQUM+e6)%jSTjzf%ot!Mrd`X=4cJ)OPEJ@U} zx~Bi=Gd3hCeEJ?S&B3225E85HnP=`N7 z*D45)N|xRg+Hi%xbz5tIxysB5gjk!CZWRFMXe6_>%LG9kyVp}_WUr%-<#$5YV0h!X zx}>VPEP2ZvxPqF+P1?yTm>kJPfWv444opIsMQEpArqYG*81Zn%YgrH449+7CdUToG-$uzY)%M4Fz{jlI_++Zlm^&U(oWGYCQcJMND%@Ba7^RIeS#S zJSNDWOPnaS9#nZJFQyI~Vnm2R844 z3aUy2SR<-=+F5eZX7dLvVNg z7LMrhPAViH0L)_EKM-mEH=XU5BX#N8tEw85`89uIJrl#ilxlidqR{JL^h=hHygt(L z{fuoK5XQ4mUz4x(_sGt~6Y%t&#q*QxxajCj`HVo5u0#RBK!uSZpUOvt&nIAdN0aH6 zj)9x@hj@R+VdZtY`*2OCpYW>MdnL_Qvr`|}Ltg}~W*tB={5F;Mq&K0(Oc0;gI+!Xw zuG3{2NKQIzN~rXpcnTQya3&L^EosS$B9XQ)GRg#6pV?M!{c)74uv>N1T4+-$fN zwgT)r-gbe#k@Zx0c=LCnMwwE)_hL)xlXxz=sC(Sr(q7NRVisu}L{{<6i%1>OM-RNO9t-Lb`yscbB^>5H+kGcSqgTJxA}e~1<&W_S8he5q3PkfIdc~(ZAF51_$3j!#>xlK;be9oM`=N{$}1OxRL$CwNY zW#Cg7kwL3PHkT9(*ARm;SoL0Iv+H^kbZSmmJ#JbN^R*sABODiQ)?B{yjzk~oAXjrG zVtv};@#fZUJvR~jIptH&3VFjul#i3Y_KJ-aU@pRrNCs(_fTu+U^)g`h)G$SeL50aR zBN{qkf&;&cQ&!at*V5YL_gxw)*NP60J-(Avst8Qa=I$CkaJREezaze!v7$mQ#!7^L z_B$CHUEnuoK{NIV0C-*}-{KzD=9fjR512!{vSQ~?nt`Occb>GhIOl_rZ7RS7CG{Ta z(sQM;ms=pQMK~CwI#ImNkSf1VVcKM65g6Y-KD$Lbx_#c>q4cxTn?r~`xh%l>RvEq% z!i*-q3lH{=i7pE+FlJ)DgN&U>1>S&D*eO6Nk}TAl+VFIbZ#MWv(E8hgBu{YYH^sdK z%An81AjI0DHXMSJ>SY1q=l&!4q93KTjB>6x5d}f>RZAL3Kn5-E+SP3W5q}hIxo^>c zd_e`4U{%IfzQDjcf+f?H^dERJC$3_|q9^~Z-}Ac4gZn;QozighM`I>t)cjj-W>_t`7^GbZ6P`zrb|r5gPNG>mnZ3J(}gY{0|rnAQ<#2F3kuABB{he*ZlQn zJ!{}MjFWStfiwvDIl)uMbL@~oEDBpv(zlT1%%W8lsj0r#j zT{~B`^fMm9Q`b8ag7eB5nHX3PU&xkB%pnCsR+-bQeALyIqpO?dY+PF6@#%E^Kr_lt zHz;hLKXs1p9q|!lalk-Ke^d`*dpU;ik8=Kn-P0p`xha{c{X`tf^!dEPgCC!X4Al*g z^gkW2?rto9XNcnl3_oWol_)-ax;C}vxSP$jNrbG#akZOHQokih7EN}U^7oKipCt-CM!1>qUZ}<%yLjGHk(v~Rb`KWa!;5E3q1#KW# z%s1)@INMOpg3S)J&i5cw#1*f40uSr~y?tgPX8pX_B_GaldpYp(7cnXP7=LTDII|3D za~vBG#%lkRxIe8YWOxSw%)9Y+k~bU7EK75;r4Y)LU+}>kqRa)9m3TIs$JD*m$Z4Vy ze>B3I{ctB>SuXPo>QlMf6uF-|vq`KHOiZ2@R9-0A0&)maJw|DTbiBSQd#Fx`wf%O9 zjV^xQMuPCio>OF0+A*Afk|v}1_)t{DL<3m-BGAwpqYe+FVKmfT4ZVHen5^>FQHO!Z zeI7oYM}qly_I0nBsas$sLNy2`@Txg}?^>o4JQ6LDM5u-!xBSQPu&gU(M6`q21}Y9u zc*Fk8+|NTmn61`J7F3qJYrNvyL0|7A2Be$mX<{$MT_0J?3vFI>0)_;Cs29`ct!5x< z%gtxL&oma5Esg9JKtA{g(X96R z4Jo@H?K4u`rbYx{UJF>HDn6MhEWUr@6%45OjtNpyDFjJ4#n@;pD3I~3geZUP@uiL|1@A+3dDr+JKrlBZWbNwxzI>u^K>_ABWXDvShv!Xpv zf}nyyuuZs$TnM}h>Wp$@_9}13*A@UYMHUt&*d%>6D51D*%;Y))d)YCLZKqn$v6Q4> zL%bE#kF?03Qk-iW3-b{Ik1{NOV~8eZ2t%oGux1ts4Mu-}@^}+42mssgxmhm7Ruc5JK56>7|$~M&Rs`(I8bE zuS~Y49IO^ZsTvHIo*0FU}R2>Abm=p5(Y*cE7;;ftlS_umQ8sGg9-fMsO|M>M}C+g6?@| zOp?;~tOMN+!XzrEM7e$L)I7{)Y|?lRi=aqRUFOt+ZnNb}Tft?Hn0tx{Jt7-Ydlxkw)5Oir;qDwzC*dA;oci#w#qpB;P_fs&h0 z0HlqI0CBP_7;D!=+M9d*W5_aNEdg5@h(P1%*B#@%Wi;C@tYS4&DRXXN=^u6#NzD zI!!iu0$jm|*`2)2kX@2WeIFw{?@gH1)#kElc!(|yG*bUB95LD?&hosam06mdLu~c@ z^zM9FYOT@~iT+6{K_Y>g36D5WCYrQAlYpL`4rLQkIm}TQBGP$3_FSTIYZEGa&p(di z659dLG#ebEx(z;Yd+6u~Fz!SiVpBtC^R;vnl2;-k4clO>s-3dF;z7M9B|6AGFl#gW zwOvi3EYAdxf-^mSPYtY?^>NKw3nR?`htuijuSSoJXplMB{<12|@BEVKYe4Y#2IZp^ z$*l#03WC%${i*}s60s+Y62ozeHjoqo>k9nQ0(HycJ>ieCciwB7n16p-|R*ZAt}6c+RS zg371Y3h#Cd7$U3Zbnzv<9cHpTC`5RrkXl>%a@3E zA;X4O*y=*xfRy-(je27rlm7%<0VbqoAoU?wW2w@MM!{=p?RI<6Inn0F zFu7g{wRJJAm1PP=4E)mMbNS<|UMVM5qXyOFi{k{&RV7(w>-gG5tdoDJEdP~)JS~uE zaaTDeTOCr)e$kWjt3~^S*e%F%)3qZFf>2~Cwo1QwkXsd zTz5d#`-9yW6Q&P3Nc`nnHhEoPRzA#21{1oAF#vrw^%xF$qaFBR* zWqY_hj;r?dXD+U^<3aeL@0nl^D=N2NT9*7S+eKAmY*9%up4Dym*#BIRK78bTD#*@p zm@n+zy3TXAx=VwBOd{5&j*ocJXiJvS>^Nwk1IldW?ZG)~7gPXPLUsQkL4t5X^*9K6 zLf_6Aoo;>*Ma6!E=$(8w!lIzh9-|%k_yQww93CiHb+oV#MU`!Un#;bdQnRV+ShC0k zfH0Q|!HI8YW?uhl&CV}g zA_6ygbk^kdtq5j0On2lL{UXDS0YQ+a&jJI?HfmQDrXl$TaY&m{Fa)C;9^)dchIjrX z(CP(RhVr3Q(x9PIjA(TweqrLB01^>Nx>8nJZ<84+QHCY}#RPD#I7Ihsndd?lggMwJ z(*DYM(3`{(FgvmrH~Ojo)Bn$GVf#ro*DJ7Pn53hBk=G<8Wj5hEbpnDb{T-pQQqu!! zM&YD82muIs7t312QUMa;C=T|xIAOCggv7y&TUUco!b6P=)4)EzHicVcn{WTUJhFXscWb6s z+9>f&!5C?>(1g8ih9VcWpIUg>T8(~|s78oO zK6kyA3F`JYbDl@E-K7tBx+XvJnnubi>~{8H*3XiulKB&Lb=d%0L;C1ghvgwuD?vA< zrmCt|cQfY1*ku6d2La~@xur?OLl1BQd@naeD1LkO)I><7tn%NBJnkU5P=` zM~|HQ<5u})sJGOxX5G>aawzOjtk*EVk9RYId;M=CTdo1L1*KYi{t5@9nbH?FE-BsA zX@G~O6!>-ozd+_G_S5CgdYKcpN-;RmQxEX4PrN9TRjbNb{&g?1r2v@NdF;3dy}>PTnKc{*5oChiPP=Ha-lT&rz- zmcsEkWOfuM&Beq#SaZ9>i?0?#Uq}pc5$}*oQ4%836A)O8W8mtpTNieEiqr#?2Om%C zs@(TxoXI(ozsX2N6MNkfVIrxZ;i9qwjB@~sXr}GoTl3Tl?l$= z4LfoI14jmXP7@s`uqB+buwb%mxI`LZ{!$! zpJ{)k7KSi|i*&T@0-S?ivF|rhRT}GZ&Ims7f4FA zIM8ml7yXL$B#^@to*xDUL-UOk;gBxQZcH?9TZ7 z|2&K617=hAMO8_gUJy7g?`NN`{);W3LlMEGL?%&3Idn-u%XzrYJsQ($d}I{80AV8F z9!>2w^-;3nf}%D@N2~9W-8UI6Py=6isOxSW-IM-^;S4KleQ!hb_R?BgEWSLFKQIj; zEwT${FKa2W(AIuX#B zF!A%=N!@&+DzwV1g3OYhYhw{`r!sKO`iS4zO}7a$a6JS zvk;e^fKv?GRS~Fo-~1!-PE;f@?e9&g*>dM_T#hgQ)`fyTS`GLNXSrZb&-q3V^JoTd z7|ju?S;{j#nRA=L*%WKR54>_+W1)M zMvQkK6p+Qed84bSP5Sse0df-%W5QfO7ijtqL;JUpXCrLO zVJi5;cUM*E&?7UV8?IhN2ghf}y#lr_opsQusQeoAJR>=zidsxwIEY)(#xc%&^o~>$ zwJT_l*m#ibkYXR_sa5f+m^4oI=ttm(c37GKynJ)z-%B=69EBpY!n!of{6cJFXl(3V z^4Aeqd=gE6NjmwLGL6a!RrVVEn;fxDp4m{(CHFN1-)%Cjf4WQ*2@%7o|XE1&WP56qk&BcYcc6EZN?d2WhyQm3LZ`lOKk`4>#6l35$yWNJ$^_&sYh1 z7UEqeU3%*HtVoSnqKo@;3>p3Rc?6vf5J`0<$@9V?gUV$M4km+LZ8N<3-YM{Z_T-Ah zZjJ)FPw%|n5f5(pIA#9QuD>i7ZYgwANA`QaQe0-N9bex$?M@}nSQomUP&m6*^p1$T zRw6_$SsB|;zQG3zMrxU8s>q^D`oRUpPA$f%9HX~YhnsFf$NqLyM!-P*9RtI@*{rRT zsRh=plNhQgEJq?C9S6yq&EkMY3Ft7llf>k*JEsI+t2tOQOC4S6KBUO3HxhN~Rluiw z&dnKgdCA+ESncvFHwERc=6@Q<)g{pOO56vz)gGHZkEoI^(F!fPUM@#d8nQSWNlIgP^9Bt zNbob)(2_d7eDciWlwBFl@ePp~2WsnHD_EtNPi_1(4dc>j9ExKT&*SH@Rx&-dds2si z!kvy{cL*s0P-UQ*+Qle+s^BT}ot}^Gj#X3@n}WLwPmo#5N&BY{|LgJSu&YHr*mFAW z@|kA>z}?gQP5dF zmRk(5!sFd|8qbS~*@ijy&Ui^kQp9+H0&Y{EHbcxx3ZVVc_6JK_9H8TjuX*VF#G z_n7pp;GXd1@Z6QGdrYSJ3oTU-aC{wz|3j|h7N!Md*pU_S(jPI49NOl$6MyUrR2#(( zt+XN=i4&IaC;@BI@|p4?NOFjGf~efXy8D9@vMacl{4??ZUPx5T$c`Nak2!X4+LBi1qI#2J5w`Po1GbLJ1{cFHAgj9OP8vgV1DA; zYtu4NYe58(vus@|#*YgOOG6MRV}+7bdetWMlEft^_Wwh@YB2c9kCCVMxv+@0y80A; z_`T0BTQMAt<1ax=xH!aouw(!m&9L{<^0(Uu4*M84LUr##&tH)|wm!x0vre3yEh~_a zmjVH?96((!fmbVn*;V*#Nz?J1^x#U^Y`=5EV-}Y^8k5R=8M=^Tn2)8Ng1g)@Sk}&-y=K9JrU7Wx%Q^-2*-0&YJbm6l6)t-T zVC#6w(6yy``>VDT{7O2AFSj&JfGNC`(Osr zQ#!DYimD{i9b*{qE#LS5uwids3F%gzh?AI$6-&T$;@o&Nh=a#z#_%SU7WyL>Js(j; z;~f!063md*MOg=?F8;w9%MNkGu~D^Fp;Bmdi}gzn!Avl7qnU|7-Bs0Yi;tgohopmc z9!?`~R>b4@Vv}Wc!YI+#D5{P?E}DSko5}lZb%H2gMj|MfCx4y$CH;~a%K})Fie}JU zCqf}AQ7Jv^sL$m=^0VYCfIMqH$<1+2hz@5=Y>S=V2s$@sH3BMR_TpkUcUS0gUugK6 zym^vTOLFU{1B<{J$gohU;zMz@V$b@D6DXOwBvc*#vsp9Qm~&ji{ml$Pt?lua=<%6O zg7Ht94VpKqRYev8_ax_9-9W|Cg!otZ9;nqcXT0zaz-dmoIh4AxxL)#j0qE0l8Aq{^ zVxi_=6Pre@0`)n5@w9q}NY^D19hY6%)pkwqPpa+sQK+w*RAw2VN0!Rdepk7NzripSWLs;)(B@haE`3b>%fD_koYrBqrerl*^ zu4_I)tZEZ=J$=nz{>E7{Em-K_bP5{U%|O@itt1G=d{wc>Q+GakUs(^HQUK}mYfz*Z z6@L9quDv=mhH4=MspkZ*kZ(}dz3O%|M=7PyjB_jORu~B`dmg{jXgLk&^vT0FgFZyB zPy%|I9n0wF{W4tOcb7POk4eot7u^-U& zXpb!-b$E>68tlSMiRS7>HAR22Mn8vEEv=Npf~fjG-c*3KA2gE4|?miv2n^9o9s{6yXmu$N9`j|dmymAbh0;_-{6mYS+BzYkJJbK zR)a;-V=#k&p}+(H)Dmfzbtn>FP+>^w4w;N_dRVzr0xZ6%)oL;Fj6Zy*Cy;~Y{_ARm z{%Ny?(8Nh~jgAKB@s`t@*rl$ze4$=!aQ!YTpowi80o-RqaZHqS5Z-N`V%*2YmF3*aFnZ%=ynNNd|)p zYnT+?oj0d2(!f@4hX+lZdyXN6B!UvuQj8id_r(miqOjYjM2*zBDy$-CwWXqIc-%_! ztWO7ICR}~k*%Yl>U`0#H6y^EYcLPn?m}!@8cp88(6?DoOjE&FHDZ)_kpPb{2U59+V zZZM7%kGVNFxz&7Ft>+GL`>qW7Nb}^awkDp*QeEtuE|rtR@vO7!u49m>@^w7G@;-pn zp8QMj%O|i%F67dXpYdr_laRQCG3ID|(yMj&;5er@AUoG;Q!hgiKQhAX@X-&Vqyt21 zP1h3ZhDFhsc%&Jg3ETREjjMVg4~D~B;2ojsL{QNB4L+5?WBUM0K(xPEr6-z5=H%6i zKy}fwo@4*7YnGypbdFVG(#P9^wkJkEo0TLixBrF3yhwX%D4~|ecY^nV2qi3LYsJmo ztrmbvrB>)M!zrvg*Psy`&PHb&E<{qs>o(K~C%vT0J6$Ej`ru(Ft5#%z|9(_*QoVBXMvH6-I+hXi))YycZ8}=iDp*NN)?oY(%r>qYmd&9y0Y=Ir5z^3JhX*J>Zm^V zfR+LawtAf?`K%}%nCPc?3=_jIhjAka#GE4zDx&o>9!{?;W~YCS1;%<=;q^jWXEsfW z-*(BLJOxDxiCuFrS9Z((-eG_rw)a(?{)id?3n60p79?d*FU1Z^_mEytJVed0YbkXs zNvGN_89K2yC;b?Be?i*G+Eaa&?(py23oDbg20qckrmtX>0Tt!6?uo3zbSI*r{#Iyk zJuCzlm`4+ZjyMJrDIN>w!d-09#3JO@04>S(mTB@6%nO+XSs39u2s zj`a4nYm^(m1BE9c&7W*W{ z^@yM&<~$m8uucfW()3@?pz+=Rox<0Mfw?)ey3HnspJs)b!-7c9cvd>^{bA+xXz=c8 zYI-Or;|yWloTX#P{pl2J@>v=?hpbKG8vfJ`WDxI8lw`m-XFw zOjzW2n}*lQ9HX7eQ?@lSg}{6v7FkI$&222YT_br^-VmSY2nPtkaE%9e*DlMxP*>w! z8TfNOx<&$HUrs~|DpLwaKko1=ElOwUw!d~jEQEAEkTzgdHXjVL)WsTsgiP;JYY%~L zVNb0b90!)u*5qyL%PfF*J~u0{@4k|Ft?_)tbvb|ZNCCs-__7f6mW%%y^+VU(L`qGH zL>!+xXzl;TW~{?i0bkW-NDccrPvOKNzLMyD;y+y4o>yQ0^ocbrOnri&jsvTZI& z|K8ZgA)z5|n6XUe_moJ58Z8AOF90~Z5(%Lw>_-jkstSJ>HXt%84v*pfg$O;YgSZ&@ zdSW$WW3Q@V(UGVh((wL_$qlIPy&33kKK3bCMGFgS49c}07z|qMhPf#6e_FWUQh`<= z*u<*_JZaV$u!FXC>okCM2IP(V+v1|t1zCDc;3H)d*6VEVsF?XMV#k$@x3y9cVrXcx z9&NgBGOrVFHt8pip$z85er8ey5gR*<5C$T@-%cFG-w@0rJi$DX@Q7QLT8!|*VLRbX^8#Kelr;x{}x?= z&1T7$Qy;ynlDj#`S9zlAs5HZ0O$I-n#{dG8%8Z#Y5ObMcR-$&%QdA-Jf1zhX>(pONi;qtY7Cu?uh=&6O((Ff(z^IWV0-otw(|IX|ZGhGW{Y;e8)*IFSe1EOo(- zHotGCRP-)KkX-<9x*NU*gz?;X_ab45EyU+|KTRZYUoGx ze`*=R+>xNZA6V;>n_cFqj7!J|tczP-aY(D`5Lcj%Lbo$3v<4!C5E5*npG_?lOfNK7 z*6tM5Q{fBCv0|JMN&Fa73gh;}9L?XC=i6tb=g8plC1A8rpBdx3C=Y@d_MCd*zpTii zb)l!v)lLJ&YY4@ka~eE0nA5Wa@Nx^3bw-7TidJLcRodm704Qc@Kmz zr&VPr0%IHcuslYgSo9b4#MkcQhG*6mcjMU>czbzNQ`*-Zbo5+c8cElsBCIy_Niv`Z zPB{GsK)7&;yD2uYab?|fgdSMPHe)v1F&u2?gV8ofDExTr_$VDs>Rs4?tLg)6B9PvI zIgxMFVg&SOx}^V=G->rTEZPH6u$rRF1Ljl7YOkVeryHdCHYG*-OIHO=WFDynPT7GQbB7oUZwyQlG1 z=M<&x$iiBd=0N6=-Yf)?4ddS9B}>8wV1LHa>&To7NGTG8u9$aWIPgRUc--*qV|+13 z9+xFLS7-EzR3YZS@hUXYw$1?aj-kp(Lae&d(jW{ijzGYmzrYx@&8}W6f(6|pKqjlc>&5YrtR{nrM&0^$+{w)0p`snVLdm!hO%x4#sI{47o=7p9TM(w9bp}fEx zi#`kgFWeINE@f)P(z%98dz)?Igbp@ckqts{9M=P1o)DJPQ;l5TRpr=jUK^{ZUsLzjVAc_kk1F7NfTdt(U< zk0f^HkOmaF%CKnmI(+wJ&}2|RY1^dT_ae{U=c3vSU32H7AiU1YLL$TKzVilRaL#3~ zj6e>7>8G#v&1M_HWqc^~j@iuHmFq3TU1XaCy3HmULwne!(p!3Qxt7a0*DsjcxsN|3 z!Bv?W^&GlQ?SjR8Nb7Mt*f~3j4~^SdKYb-iMkqDRVg#bNNd<_c#9RkN20w*&rh6W& zO>h#m%^d=@e=NEa_2QB={PSI+cfp?gCGep7HDzNy>R*^y)(cx?-Q2Q$`8n7 z>pP}t>+ooBvaK)Edvs))hCdEa*cq6P*$7UQuwNX!kPb0ni28m9Aw}|gR zX+(gvKLAE?P&Px+$%K6?PaBjh#E5ZatJ^b-_+l^BKvEtu^R@us3XbmAt$|aJrAi|b zO=qd;@17)*CbCG#?a`*i0^l05u5zz2_LO)rpzFo6TQZd~Ql}>llT3F*{2Y|*q@^YA zlX5F8Mqt}Y{%rfh3+wi;*`TN(p z4URD;Uw+drE!EoJuW2MXJQ+zZf9z5R7rClGn|F}3D(J}7P#!QT*=dBQjxjm028{Yt z&|f=-{9-C+YDJ9cQxGl;cEwCPq*mnf{qRMDu6>5~Dr42JhH4K~`Uk{jX+Ej1$2|L1 zS~<*jQXdehV-Z}c`XgLM2xE&U_Rw6?xHk(w_)@OL}b*ZDBuInxNFb6qY-k1X!fqW6oNCK&0|7xkks+{>fNV^R>)mmU#9 zYN#q?;WE>g&&b3AUZG5%^K&7Zw*!UaOMFzHLaD2d!?63}giM1;d3>*;a4r#}*k8Bw z^Z3a<^qD4kZ_Q%vX3FlPu#FuaG9kBnO_Id+MZWw$NCOoX6@ZlS4aeNi8PKaKDSEI~ z-zY>f+$t71N{;q>3Lug`Dt|yegfM}xNu@5?ZDv;kpXk)UGcuB!_B}v82-4T`))kyh z>o^^M+I>dlzZezo@9hik_Qjdkx3?4!?<_ zmYtH5de0b+e=UHwoNpu1IBIIvRk1hPO-~H$tkI1-ZOT3@@`@o5 z8?L0!^gfVY?Uza1nLRtwDYB$hc$xqETBY}74F$2c=oCx-C}4Q9qd~P38zjo}&%;D#8qdlC3!5IFW%sNjoy7eJ zKgrOD2vjQ6DiS)G3I&b48sG-F&Wa^rGwg7KRoeKT_*(Gz0Zx%>7hfsqi(RSU*u7-HZi1yPLbhSj2*?twC;P= zS;=UHkq8MRBlna2m(GL%oX)^q3RfMXl4_7!=#gxqGf7tX{uqfGtcV?m6TUE6aA*V9 z=soByu7#fw!P=5gEd{l8Rd0o`2-|S&`e4*Qqq4+-c>_N7s@*_<^GHWpzO#rJ&}Fm& zkBVs!+~K$ zpruJtm!o@<4931+Ri_;+VFT*G=`wJ1n_`80|C1{gyqZmxBPZs3H7gNA)4%k*yheC9 zTwpc8UQmmedX%z;jr{L{uigH2s=RZh5X#aJq=U zY{@j_y~H;UJQzYYR6_>XRy_tpN5mgr^0vvGFry-z`YTAfi7^dpafd_FLiA;lbd`z* zEw{mY0kodS0JoK}riz9&WPvsWQi&}D)RW;y`@!VwP$f*9Dh%ob8{Tqig(UcQ@KWDi zxYrOiAc4wB5>UVzO``|N&=OkRygN|Uzfqv_44r~O&~vyP{V1E1X9Ms9BuwP$LTW>V z4k|8DQTa>Wk+=PoR_Bxa_fftR?c_D;6$r}@GTxXVOB_{PH^o;HRRiY774BlT=$?dHv( zXtF8VOhtRmAMGaEy;hTN>9M~mbVK+PY@TsvBCxi`me=TKpA> zL7hG1v#s;G(Lj*tG~V|=X%Qg<*I;%Q6EgI9-2k-CCz)qn9;}3iTk~b>auxW{45=!W z35L{%XY@63@_R)fh!3-CWh`;lkK@E`-v9QyRRhvL-6&_65#12R{&xVpF8b#Mp$W1? znt?88ielK3sPd^#Sn1sf2I1^{D7^X?2Oa6(vT_POY^?408$*a_;(guf5``?9NovlL zv^9+@`RmC}& z*a9|le0B8gDGC}be#sUGyo|2~4ANuVtu3$IXf(ULbB&lbcU)$&BVLz3e13_nQ>v`S zi$KQ8%Ccq0ZaVF6m4)J>&QWoXL7vVdtL!J8Pe_hr1kP=^oLGe^lj?_G60FR^rGN_~ z^jL_kSx0{;`0&1WcPV<8s#hOor+-*3oL;M0<;wwGtk@4C&=JsB)foOp5N1{6Jb!h< z@7jpbh?NHI#brk~79JK+%Qm=25Up-t3&c=Qp*?D|{HFeD>jX&(8jQL}!3 zFv15C?rOz-1?Wm6wJ*+^eekhC6_Uxz7DxG4UPKtWG8Zh1ies&L4NG3N)}A&}3l)HS zr1F77&jjPtme~awMdtG?Qo`rn$%(Z{(xGzZLiQ@Lu|ypE^t%d1FelUUv0O7xnAH%T4{m0E z%}lRb>6sycow!l0#B9I2e8eCvG?5cr27}%+HGkW^jFkI)%7sj@>U-!N+WL4sYqZ4c zYn~Jt@&PIumsUV#@kVDeFN>z-u88{po3s7W$=-~H=GADzJ&0KpW6kr2t>H(J)8}aX zeDmTIkk}XnD5J6dv(d50D=^?;f2x03S0n7E3hFnjLRHNViWG^`Owz3(!HL=<^?;_Z zJ~^*-f-0n}>J}Uz>{W#leGSm5-_}qI_zN^MDVF4+0TeWV6u-F!U)r^KZZO$=eTi76 zwo3L?85vLbr(zNEjS%t3x@;4>y@GM!7i9u9Kr0l6QPTb~U%(Es3aOz^<(gi4D|`a! z>VU8DUL-PMDhe!19akPPPOTSG5fyoZ9q&6lBu6avXbHz+MyaT%o{U)z)CK=?JK{gD zSIf@Pul$u!iiJaTN}amz;=<6P2kxM4j%}NNBHJHfxw*UA1i9LH$Jo)bv0|zfUIXZ; za0|r!lOG5IrVBk*6XB7&&H}0{>y{VHe5hIalX3i};hXgQBzS<~g2bB0D8=ys%K27A zdzrz$0p``XbuFHh+@P8SnE~Et!2(Hx$t(Tib#k34tU%Yv>FomTb}mZURrD`-Ln7DP zl$%JE7XkwF?iF?Yb*K8^MKs_o0NZibjL!Tex8AZrDltnvt5@rS483V8PAj=Qos^{x zLvTY7BK?vTBgoCL)y97Yc$t<$8eqUMrZoqT0VJp$WsT4J0ZZIaIRH!*%HJO+OadX= zr>PVQc;}BVri39j9l9lW_c1>MJoaFn%h8=D=CZA42{J71Pt(r1-|r~N-krQF73;$A zML!Jm)LiOsIIljl`k*(@=vAe0Kv_P6v#|I3Dy_){Xu@YeiWAP=%l0C?3{2em0NEpM4t;4?7PLn-5^%nC$9(X}dV=c#R)+zFe;;)BpN z|2WQ<5Ka~b#xJxy9GPtCY+3lw$@OPzutO~-i^lv4IhBM&DW|@DArS0LQ8nON>A06vJwr~But2H zs-}fOp1P*tN{N%l9(fwFURIXl<*|6z-aa7+$|Q;eG%at zw_vs(Z)M>#d3F|jY+f8k={QtnxiJE2XxUCtD2PK&KhH}2k8KFjcQ&h4zd(%E%21%$ zSKjf?Y)U;9wg`d~rFsuoR^nF%HA?ju3TQY3gOcx4_;o$`bz$fa$);DrI=@05#1Fvq zcgqqTiL}aEF|H)7$^7-y^VhiD4y}pd1Z}h@!6F> zSKTw5;9m^JJp;~{XBYgU$+yx@)vU{w@pOOU+rsU!EJpMEdo>DR%p{lC;#6*UQRbiG zx*O`gAAIF>Y4UJ%s)aKvR#+7GEYDYD-ti9h9WATZ&7^MC@1zi^UH3pOEBnN~$oGVm z-c3vIhvF<~t0WkZ`!~5gR^@Lt7v86!h$7f|${sH#+#?%0=LS>qO!N5aM9?*7MnM@8 zs;G3+Mv8jwoWvHXBXH%Z#d5iwg*jJ7b5_~`Xfcfvi8{+zEuB($Z_pb-|5SEZMw$ks z%DMyu@!shW?F23BqhAXo&#F0){NhVvXnEksZ2)K4efdux`qA7lE!WbEZ|s7xnc|4H zc!Y|O7L3lQjJd0M2%cRmw5lLGEEX`TGn#ofq_;`CaR(1< zo18&eNpLqlT{u`R0Q7i2PjGCrVKFz4uEK8H3%*o|>303e;zT7hTx^wB#E`9C3^|OH z4T5Y$fv$JeOP1GcE>j8Tf?kSiGULd%LucwHJ$o3PkqAzh%+5j#)I1AOjf{L2WaVKR zs{;@=aH|IIA0~^tMVE4RQr>HDqJQcuGVa*-J+3Z6nIGV|@_fg(ID5|w>AiP#uo``| zozQBBfz8LogIfl=+FLR%)q%t;+yOSkR9m;n5t_UeX7)^)d^M1%8t`C9fHL;E>n)#q z(1pID5zrQttvrKss>f>#UP0HFzT{`+_THT$3HwBIr*A$oCg>_`>{|!uF$R*y&5JU( zVRfAY=TUprwCC2Jlqd)g>_>r%21!@h$Md<3wuL*xbZX}z;JmLP34DM4+Ltf^98X5J z5Hc@pah!ca$)hAq`ZZbkN7m3@75I{yyVd9 z+xcg|oOo4yU*;O;-l_#`nY(3>myUQ{l#Q{x z1)L`ncmCB9FIx~V$V6Gu^5oQ+s)L-g$C$3J?%#hXD+7_N6Q|k&JLVxh)0!;q36OPT zLe@B$(#?lMm#xwm_syVMk6tZ0s2gjMpEKDXk&&sQX9T7o4)nDLvMW0~Q2e(E~W=N^=xxU!FJ*3S-HLR86VIFhy*J0DV2| z_vBQNH6L-P_`V#@pxk=N;%<``EZ4I+X<1!7rH9?I+IC&g_D~m@L_Jbi$uY zXcafH(Zq)Dz^B-v(3bxn;{C|2_tIzAFuXKFCE~3c;$@ldF9|6;O-B$Nn|=SeuI5}Y zJUcpAsc>pbvMDQ9#SW?zz@HSpeN|i4GIjJ4OyK3qlDAmE9Kfye;K~DYPb1xXt_$Uo zjFVlv-V5TkE4Z|xol~`S?*plKspoBVP1md&5X1!k>_jk-(!WsBidBEf3Hb>*wJBK+ zx@ejG^XsgHUATr6)K$>FRuS@iA&{m!c4WpSO9{;L3wIs%b&@ zs%&&dF#X zE(3~2gq0HA$Z^}n9E)$h@OX%q2Q&hNN|?f|un8?$tR)LeRo4A5(Q(CSX)n@3<=bXy zblCa&VCX3c2KjZv8S}lJP`eZM8^0Sw_uj8Y_3W28?WH%h>!K#q9^1T$U&s$aCV2MUMAEQj7{n4p zS;;nMRFC{QBeA`qe>SEY3uIx{m;0(2RN=4{8fY}GSrMAn?nc2GkU2YEBM>X+KAp$f zk=bFE`I%WSBzvov@WSOmc>N+38av-_$n&S3y+aM+>Au zYvAwlKMByiGS)hv9v5fAu;d&G?Jur*i24R7#D+HdbyTYc*f7LdZkzzaLW`Q(Y1AJJ zP|+>>4LD}WL>YPwAbb)|;JB;p)#okHr4P&t294;18GUYE8Lm19La~6kUUqrXjKxL% z7K!hEFET|%UdEB04@fc#inp8=DJsrCdb>5zd~^vSesbVp$53`c&y~#^fk4l+ai+Vf zuj!$QJXh)2Tq%FGM3NgN)OxA6soVcM(;F3&NM~GeZR<|+slUpP^^}U@hP=7E@;UQ=)$AHC5VO3A7eJdH&oXAsfhD-hBA|=e?H#e!8YUvDmQWDziT(YQ|d7TSET*@G(c#D{g_5?^lZXr0+3|I z%w#CO{x|mD>(<(J;9E}MC@ISs)y0EwFyqTqIbX@kuUT|z?I_~C<2T#VYy@efQ5Lj# zH3;l;+7%jRN%u z2)YzW)$S}{Z9pw$fb$Hz9Kr+bOL^j@m6A;~GPO7r*i@zcfg3>4%_Q06W6eKZ_yf8+ zYu>DM$M&#|9*6p+$*6IoQ;0In}!I`}AkzDkQ z^3a6>P~L|;Ae82VKJ^PS^oIst2SIM8Z)|cEr8SLzn%V{E(59MRMy07ZHk>R%sC?g; z<%Aq!w8J8Hp_g9(BCLNeE@v6h0nR2=J`)jm;Rh5R)qoiiP<`&PbD%_pzws5Wm+K>4Vhfy-3tfM9 zI>|&2TUifrlEX9_|FM1Ne6)IOFrsiy=Isa=uQ`sAjU>T58h4YlqSE!G9`k-Viun!( zDSoi8<=_bu%Moo~@xV`**IHbP+ItFNbuEKA=OCI5=UIIlPfLpZ?*T09%XPKWS-OP% zO{S{=Z>i6~CsQN8g{|BCu1(;=>)Mtu=x{7gY4NQkNrhoQ8Juy)*Yb6tZ#C2gqJy+o*o(CaRtle=a*O(|n?o{{{pyT3aZ*RMuW+#3I8#9Q|#C?8} zj;=L$6#OVe-DUY1_MN1Uv1C7_B(TRP4s=oEAhBQ`)`0%FsWJHmV2B9#z$G8X{ z4iVBB%Aahynm0elx#h2x>Zo|xB+Su!sjg3BKlj(0&V(Nt7g64@SQ63mTxjo#3WD%+ zFQY?lcj~?XjN+M;Bt_z^RC4a>bD}48D2i_!Sf8&Ws)>6d>H*j9K(oE}_~S6E;8&5| zp9z5zLFG0nl6#rXN9${$}%^y$ljTZ(u?$p%7M5=iePSXn`WUwByZfx|~mr$1f za#Al04^F$ZlX!OyDo4?Sr=Bm(d4&jzob1vv?HbVXZuwptLmuIBNr3dymLy@&ImT7lGiAKx>%m|+Tv<_Zi#l;>O*Ol=2nAUC$#WX(4I?t&n zlT|FWjb%@vM>jrF;?<=vRKG3ebU|2@NtURFB7#7)C6ok9j5u?tO|`^P4g|jMh*CAW zdy~&e!+-*@#2woI9_N^Jz#>_Y!|YU{_01X!={`@e(4WGx`kQPRilhSsnsr=(t=MFz zm!Q>0T+l0}7LH{Px(Y$)ydHf_0l(^{G*NvhWRh%MLOAL{OZ(xdE!7+*nV=K;< zONn}mlkDhga0e@gq^jC&#BzN3q2E|Ja8f8Mhn}V~)OzY`s&&|Z-VGST0Yq?bapfzu zmy3acyV+W6^V(czPJ-6MG4kN?3*xn?0G;@&^JCMj-N7qLorw=l1VaFrHKb?BwMt%S zMVILdTCvYdMJ{S*vt)Q_{IpRVt2q#wPG_ADhhPgL?;|{%!6>TJ)yY@O(17`4cZs&J zM=Mf3%1NFjPbN0ELg-zm)P23d!O`)6cbwg;R-)0jYv`{nvhRkOFglkwcnZ)EJAeeB z5Slf>bzv=iQ-V-uOw1-!vrv@)qW9p?l`a{XxmDq;!v4|jb2^%>^3~1nfk~rzH@wu$ zjLsnVneH-AYU}1FI>H096Sfpdz*NZjrvi2*tG1GZRNJ_@zJf9Cd%LiÐh$wQ2$5 zf&IW(9NeYvN^?_?Grx+v?rha;7n6-EuKiUG@UpAKRWnX-m{BFC*U;blt1uJEYM^kr zoJfYpLNVY|O2uD{V`~Tn%ZQ*bMgXT4$>vUyf&KmS{tGFQ?UCb+WxUEK~KJ}C`Ce12U>>b&>1@o#NI)Q zMUN}=av$ZuBZpe`gKiv6PkwE=Yz>JR&09qr)j$cm4&O;o4q#zHeaJxGN9{4$ebs%6IDqab6HoQxLEv9YX12lh z-+E?%E2~bSNja8!zI?YbR;9SqlETEG^n3Dz?bN?*`j*f*#Qi0o?sP04xTEw#6D3~_ zbNSkJf$xW))DcdH>r4u%S{QM>Yi^f}FD1~xh;dt=KSz#HT1RUba?l=X1}`(b(xuUM zm?l7xSGY$5wesU7lE1VOF~%3j5>qMtU;MZubNWnW*{8#(Ki~S6!*_R*|Hk`Bot;h& z8Y8GNeyGBo5Q+_N@xJvk5`D<79&XS0rCc4HW?1ahM{OIG%uWOAHB-Tj^5mE&_ch?) zGNW&Pba|v+af!%rrnZ`e`xDU1lr1@6ds&%Jv#8GNo&C;VBFN6R>d~Qni!Lux^+*1T`6>6IJLV9H^1?>+`&HSl4bG3eNe2h#^tPR8`n?{m_+}j#t?TX74inM#&0Dx

;JU7Y0ZAf&(D$qI|~NY|au$Mh{V2&xH4#o%W|Kk63tR|ZnXw-R zuClFgD=HfbqtvvMp>jzQfK+h%zf(rFd&vS8C?QI?x^;mm;SWLI7Z)4Z=9q7oV7m95 zmzo%Irq^nH%>C4A^W;N!x*BeT3#M=`3rO380aRUgB8(p@CTTg-mL^O|$03NqB$@gif3wH^}a*$3@bJ@R?s# z4x-X#cP_S)EZSLcE+L?aVb{Z7R0k0YPN`AS-sh=XdVTYfbP8_OR}~coU!Jp z?Gq_K;5KY=$#Yj72=#!NUH}?e_Jz>*`-lH91ihi*EdfgSq~?k(9{t?d@e%7&&%|W@ zo8B~muX8KFJMDIUx+HL@*Iax2;fY+A69JCY9xcRVhlL(gvQOePKX+UwRn?2_aBHooe*}7aNjfw!cJu zGb_om2+KlL`Pvhi<2;T&Qg`)(NuV~rQ&OQALNz*OU|>ti+eyf{a1my_n69dxccDU3rIE`n*8S$CX+`op_zaaUy(nH0cFxgJPfEJHu#7Y^Btsnxk7t!x4CH71emw{6JoAP3J4^L>ftOaPweLO6(y;s=9G1pbR zry&Ucye#d*R(xkgKQjw@t?yx|MQadF-{A~Uq_tOua^>7;ZaH9ia^G*ktK!7vbEeMXV@g;A05 z>R(wZDt7L%^@jNKjdAE{Y1ywWTRaBk$7UI?U2fXC=Zt)hBJe?KGugP0$j9EaB|Idj zRd@LoUg^EV2L0faz^^D?%*HSDXBEzPd43uChCqI)1BL2Z|EJH$h7`0iF9F@LxNGqmmTakcKzDSwu_ohnG7yN@bA&k=kgrMUe9xKlQ4!hrSMc8w#b3CsW z#+ndN(PsJLhyC(7+`U`|tK15}*}kM&3lzlUeUI{?=R1C57Ce8Y0v42s>VtPMA+IdM zzfx(%)c$?bNg{?xkTOZ$Ns(zR*MoLiT$?^KTb5UKK)dBQ^BrE zvtA>Q>Fsz=ugnB`lRPqy3s6J)hV>AP|Jd5V<^*MBJad|dNFjE9+U=YD3SxbKu7ts} z{|{&2_hL{dv1Uyf&xjh7-9hs!!~ZP~3g#@*lc|KPLIH>sz&xX5b5M$8y~?>NiIn^EU_9uN8uj|Ra(tIUMa_{|VW~bP z&fG;_6TOj2$9OPzoeG58V9Oq`0*9Kzbr&IVnwy${^-sdBZb6LgGmAAO_iL8~3g=(Y zRS9vMC@PY$h>dd7_=R@?pEiGRT$QJef8nsShvkO z?qZ;nK}3tCYv76tRTRoDXU(IEo#`=3a zWPY)V0~v*tWZWj_$D=Ir94HbQ%0s}MX7k+xpT*lhdGj`fC#LyLS+B{yem|O$E39xo zxa~>!I;6R=zt;jtgm#U)t}fpG2AG0W@XpbEbFP1Y>w=#gSGH8EBt}KU@YlGvC@;AL zwG#0rVXgd=VlkKEvR^aPoUgi>z^2jQ=s{Yqh}pK}FvhKfhRNZqjyvd%7=lwRLUKtD z{%sPoTXfkONjpX?3(GcSHsfW$kve3LyvFm6xZd+l& zlD(pR>BCo`ZtJf_`OkJg&q~!aINp)>y#iIF$Z3cS4YGy{X;bXPgy3uJqu2NB8O}_a z1HJG&54_%fVzZLZmueN58@6Zm+qD7e4EV= z`ZK{U-+_sGH*}QJT!~@jcOB?H00f5^@SoQyVC2yNHmy;5S0acwhg_aOQboLj69sB% z02{NO^8bFGgW*d=%vx(rv#DaM1i!7T01|2E*pL`V<82C>t+jWGR5!@jwL^|&WL(L+ z=S>lGpemrfdsjst!h+rQtv)^S3cd!}5k*y49Z@^jE<5#R90XZrI#Cn$3dsLnYJ5eg zF`&2GWRtsOEY>f-BJdO<%qx7=^pnQ~O3G0Hg&X(3-w-3zkk>5CUQ4e@T%@NO6r7Thp<`e7iVgS9D~Bi`Nc&c#r_S6Wacm%k+l|LY@Q=BLf_RV9>abm*v?ZZVS4aloeR=iBhU< zc473agxVnWQHpGcC(UUOm@^jbTCMwrbF~Rsu4x3qKsk@o8>kM z?jTriaxJNy7%d90SqM9hN;3p)TKn*pey^MH*S#=^m1FaoeiL1VzxUHQZI1WCwwbtT z{Ko@~`Z5nliI&bir3Qzec=9X2KewusA7!jwkt}9(3%Kj-^XWP^uDT$8&bZkElLnK5 zqU*;O>~iH5&ZN;|uchNy(Hn|6Q!|7aMh{EY&TtqqJ7QP#nfpbNVm-tUEanuw2W$f4 zFT7g8P22*sJ=VwNQr2p!nFyNp72oInDLPO7Rq{6{Sne4-k11w&HXPS%uS9ZY9V6qC z%@43&xD(U6sG%32`302A?8B}Xb&sQ6Q2qFZ#*)TS*?UoMx{SZjnQePEx_>n@dGeW6 zCx%?%HEi?TxABr|3A>tS}SFSXxY@?mA%Qcmdk|IQ4C-zH47(XY5 zW`p{))UBzsJV?Gl1uL|{w0Z``)XEf>q^4$20FP*`4iFc)ZU}Rj#j>p9FNVkE-@4=0 zwLp<4K#=HWAnQT8K24k8_4~j(?(I6(bluic-qPXVjPA|>J;qg zB_@BI4(CVSlO3;>q6lkNey16)tZOS_-b%IF2KT>D=72%V@@TTezy-e>!%R)JYqtEO zi@slt5$h>eA*MFcN?rTfrZIi{W7Lk&*pkZVcdu%N=cm69mp=oFmGQ-QfTyQ_3i zcyVPJK}TbHBzYEN8^$j@)-T0$WqmVmRF2`K1`Y6Z_YB|DPtzSFlUmp%yqLO$aQ zZ~gFM>!6=c!{{d&RQzfDxh|suiCOACvM)n;2G`9}Ah>@~vJ~-JY3(trGy{}=;^IAM zU25}dM=QYqPQcZ~cb0y7!zjJCfFNJAsJ?0KAue`3Vqxz0&=i|r++)VNsTQ7n>&n4t zkHu9WOwMBMxgKDf<8?r1*b?A;YNOfnPM_Vfe6}aEi#>rmy|{MNxYtJg6Ty2-Nf}IW zYUj$!;%G+d@fUSxlXiW+%Om|*=Jo1@n!y1zPe`B|_ z6&GLl?o!<2C;7tZ!5Sp=*NMJj>3bWbbOro5MTml3V9anRth?l%Zu%6F!4_3`&)9Adh>$r(JmW+JB~q&DG#^^G&gfj-=c| z6O$XISF23l1a)Wg@dT_rciyTC{|d-%*|>xw?$Wu7t}P-=o!%a^<{Np_8=Z*YlGN3l zP_}Wb1f}`W_wVw!go>EWno{-vv~B@TO;Ysin)>hs#~vv;C>0_8cYx&^q_Lv`iHX6Z zmE}-QtWZdD;Hx9=lYZg&K@N>S@VjX=wwX7H?&sLkYMkkZ)4(xRmsxA9%p%qbuhZJyHZG2~U0$VGyANF@;9K<;V4ulTYSqF>+pORTz=I!{*Q2{8 zqz?e{S7)2EnmyrTjJE?_1{Iw#cwYTjYJ5HCD3R6OQpIud<0G;hY?lwaQZ^GOMry*Nx+&nc>ow^7~2TV4PpRYiwRvLMqAWs-V*F$ zQ6;-yq8b_VyahauVH;E5ISE}EJ6dI0)t6st#tKsbuVpf`9@RBn-kvWUy9_sK1~9!y zrPcBTOn0@hRLlJmP;hXg@@l6cHqpaAxQM}yCgAX$O87H z=Yy|ut8zHJx=YV!s(;#e_{Yt{o1vvmf<(PqOL=7D=oPe!SM#|00#8}a6 zOFxyVgLxcfw*dkNFb0ffvwwDm-9Z@y$SGC=0PKSlg<}rW?+Za2`)2O@jQ*pl$R)HX z06GS2K_wkWcu3wT;Z&$f+5-~(lT7@-PXEGZmBmT?>RCA5J3xsYL#iQo(J>XbUjs;S z8MR2;anSTO&|)?XXn;16in^n*fUA?a{}9JbPVJDIh-RX4iW+E8_WLSZXd*E3#d zqE9t$MXU1jgfE;{ko?rb(u3y??40d3qT?~*(3BAhiE3{VsB$u<@0XQH){Yt*ktOim z8%r1gmJoO2SY`iYjvnBMmkD8USRC?gVV<^w8+)?!{H z7kB6By`yX>Sum6Lq;S7iL!oJXNRal@C<>ljI^2#N0I+Q0wFTvEj64${X8`S4z|nL& z3+z@AZG%~`jk_^-d6){mk$bNo*Z1LkvV;tx`0meYB#?>|i^U*G=9HUBiWY2EcmoYASG$vGa zxgg43Lxybf(9;;z_P};9U+*$MA?&5ST_96eCKBwmta^WsvNR+>1a(Ct2#U{|nhD*+ zdw1LE5&|-2L9Gw-1@LRU!fv2$@;!*4z-JTzg@cg7N+AB^La4ti-WN*8RF`M7$*d$} zb2O)u;eqfGEb8~bXwZjnZMjHEc*AfGCmLK@^n+rRWY< zieCgmiMaf;1`Jx_u^e&r0?6NX5V#r~tjXY&aWN&*m7YzYy2I>Hn* z`xJiH`^LXDP~S9o+n5H`v&AfA0Ap6*-w7+!HCC(Ar=|#8XN@leaxqt~efgWk7;9bO zX8?fr$;FDAIq&k2P(h~ZV2%XZ6iTnZ>96^|oFGWzkABThYP~ABHu(sB=C&@DM*A+P}4;wOh>qsxAgHh=Lt(fGb$3I}rVoRqmw^;)% zRRTrqSN)fd;q}&gI1g_IpK=%hCEt6aDnMOF2aRYY@ysAn8&axL{wZg#YLex!jD0f% z$&QFld+Vu{F^q|}C;&A19U-#+3`ZG4*H+#op6l|=((9Onm8JZ9dkP^p;+Qs#x>B*Ry9tmh=IX0UeCgRo*NI42v6evEV?i5cUrA`AK+N&r)oxn1?aD zCA_b%WK9r?PF7gMoJRSHFB;LAuetq{dS_fELWg&738>J8D)fbv`!byPPzww|LPIor z&V$jSC>P|>XGLgjuO7vffiC0tvH^kCYR(QMECMr>+ta>1ghUFSGOtfI|2hy;RH78m z1+m?1CrF0?GECW5oi~F#D#{$$5&YY!B>C;0Y@PsLtSFijuCP>VqPp6xe=31^r};mcvNJ={4(aKJUp z-{^5~eIkQ{?SIyAu8}iAb36@PeyblrLijW&ZF!y2#`-EM5ETko<`NHLJ~BA9m^VphcaaOg z0F9u*cQNq1gvLho{souWJ9`v-G|bF+*@hyUux)TF^;uZM)U^)m2_a;ykKi<>-w|hF zu|RA7yxJhJ<;nW<>l95g%svfEG~lt33j`nGS2&Eruk~voyMZ9lp$; zD${{lAun*?GCV>x{vezpo;@X{m-$+5mSRa~C|^YAy4a|#($&tgX$sw8l?>GZjNLb> zd*Ni2ZZ&;8h4d;}gzANY88+r!ONJ`znghuT+Ht$^Y-nzBXJ8f$UxnSe#Mm zSc4jeqFv9gqWCWJ(;IHYX!4sT3l)q@4nMu_*o~&=6@I{;SEGG52&Mvwmv<*{9jKX! zQ{xu`oI^5A;zTUn)WoSU#s$L8ofCCGuaeS-<*_^2@__4oa6QJP=W0TB>=+mf3cuOm z#+)^%jc6cP^l3mgWv#RtMTkYL#29u!F+RhDh;45t z={uC@DS_$28E`JGc}2K&!lJ2{vRcqxw6D4MG;gy$ij8D(Vn72aEZZ2#6}e28I>fYv z7QoRS4u2E@i(xEmta6-xxGRrogy-E5TI6xC`k)Rd?ho;`8%8j;dv5oDNHNh zPS&=w3Lfb4r7!cUCr(vSberEB$NaQ7&KK30_1Myxk?dO359_zq>_$<4{>|~;V?)N( z0pYAlORX(N$R5u6c+>?57zJWmM2*Q_rM*c)qJTnS-u z&0LysUYc{kpN*!SfQ~|}s-abK4?l-N730?Q>1N}`v&C)hWgSg`*$`szD*rnaXef(XNn?PvPtUW|?tKy5O#Kn0tjc+}QS@en{UI2FeJ5e; zl+8gI;DV1FD=cu={Jj6ibJwTG%%o%`t=ov9d+Sf>S29gH=I`*6ai5 z#q{q4PAT8(zG4fNjH!8p3F3aC6hb{ zOH5O6!lnhw6_*r^5~`OCG13xh6c-v|xUO-^uSx7`n?oqx(Hh}tF@)IPJTL+rye4%h zBW z@a}Nrh(I_80wH4?fCm_Akmo1PXSBEL-eOwJLTQ%gx;VTG}d;vkl?vDR2_SzL%MpKF%6ZdiM07rLS8m_^Jyou ztngc8i8UH+Ok_w#10&@ju7|2G8)O=dRQE7&gF}4~L}TJZx@56pN7t})oXB1qJusw> zkwHO)3XbX_>%maUiN?)agTFWSPr`1!_~&o}pZNNZr@W7SFQM%kOmX?!0I_zzg6!FU zts0Uux+sH&eGv+$Q#IU7G@juxoD*`UASOKNtk^d5FoXv6U^Boc2T|mvaSHt{0`LS4 z&5A}?K5Af&rjM;(Lg@bh4k+>q=3MSDW-D3{jRUci>uA|%u7HdD1>!`Aq)#tnGo}v7 zC+h=jhmRyXk(ipxT6gj+*=mspG76|jEB8)4D;@a01$Xb7s;)*TP4?97b4S1jGDPy{#*2O$?(WI zZ+p;y(_D{~uZ6OckYik4)I5wnqTRCTqxH|do>66&MysUhpa8sFoI)8oEG^#54Z5g^ zfdiIqLV(B)nQye61iL8As)o4Ri2q?`RNQmNTOQZpHAmaJ`%A=?i}V7b>KG|t66HI| zf}0DzV6LymAta}r2nrT*Kx1h8uN|+bTxC7> z>)xmU!hWcrT(_jNuLRER=HNtO5%_DcOhN!dn(gr3{OM&y8fqFH7s7e0|LkS?Px{Tq zN_;_?tnh11M+rCHowrniq4~|MJ;X^-^~K~1|2Sg5xuXXn%I@CZdwF!Ep6s|5u8~_+ zr|v%ceV2<-axp(7bqJX02Z+ZNq8q*kwMTmTug6a^;eF;WxG*_i44tiwRsD?>CzFaY1hgdM70Vozi))RI2I=`O(s-pTr`;6 zfdU+zdZ_q}`Tk{cKv3aC&+ekq*@bg702T*DPjL};iW$;{b1f<7NE0C|k}H>?H+c)| z&s}OwFUBFYG`UuU5o28mKZ4Ncx5ncLGezCF7zc$E3G#4kLz*i)O$6v_=fZ3blu32j zjvkMfR=9-~hKE#&Z0UM`x$Dhs+|hO2)*r{jNO@y6EdUT z4(9|+`6Da+C*m!Zh^iMjod#LG5``bX(}3nJe#!D1#!<~7Nr8I~Etete|M>SSE*=iF z;)<^s)WvVJ6J}n-ZTiw_j_Vk*4m4Z15a{oMu07^zh(G3kab7FbYoep6_%sOi!FKC? z_Hn3yVbgF>*{Wc};;Tr<6m*RPN=)=P`&Lf|qv&D)ZS!RUV=|4RQE3;0hykWQ zSwOdW&2tCgT?f{C70W&sOL8uX(qMj-l%7^O4Dt?gm=>z7)owj2*~E3pA}hc&0n>~X z;dmnsJ5huw?lH^V77R~WW1>rq@d0TLH=oKvYbcG_O0B){N#;5sVZH@P#kcjKNap7s zd6$WA;X&!_b@@h3cCOYf5?D79Ei9MG<3Z%MR`)j@8*8&BI0Kx%%tWc4JIg{*e`?w4 zGqFP=05n!0XIaLR;S&mQ59czLPfgdLq4C0V)Y|^Tfyx@|F-;XB%Z1v@0Z36|kZv;y6H(S+$ zgPtc}J>fm)w<~iWKWNtL*)aLQ6pQT|LdJ5a&u{1125g15CxOgF@1dKW@9 z?QzDt7PJ)j&sIICw8>Zg>51Kz<5GuRub_qqEX3|SIKO}htvb*?jz8fi<~iktY*Sj= zR}F4kH24q|5RlJ{`REQvsfht%KQ(TLOzD$KuGJR(d=#A%uQ)|>y6qogH^G=!@uicMMnmc1 zXobU|;p<`*wMS(eC0dm1!Lq@Urs2X`-s5`Jo^nd?vTi*KKf=>%BY}4W~j< zX~&AhkMKvTVap%^1?M&)-OpNW!OiZF%KPmnH z(rpfCeX`KZs1@X=OMPGSI4=YsM|udg-)@KQMykN>ZK+aCQfzz{wFMH6xl-=)c9x;F}jXO9H@e#cY zg@U&-QpV}BO0RuP2T$_J_- zLZ1EuG|4-N%549mE77M3fp;jB>G1hmNL9QlU(&ba zUEfKwe|J>Tz)iMYbJ7Xa@-XS^`EYi}2<$RO;5ffcNpChyHyC@T%C1N2P@r#DQD`Nm zUz5@*noFNF?Z{*NMm<}=3lJ(2=HaG-E_zJy-D1zbjHu}dPl2Mv{HdDm9Lg$B8lH5~%rhGLQ+|vx$Xij{)aMJrKB%FROY$t3G!8d zXjiLNLB8kj`QJx$=j%QX_tBOz{V=v`-I7RmoBBeI0B{={_f|X@PD6 zR`SwuiUEO0uLO_~`IKzSy$eoeP@bn0YVI^$-o=Taz@tcG{gj?2Ae6R07e0Z4mHrV|TY+(KR*#UIUU_%XhTRFeEEK`-0&9#snBnx!{obtm5QskGY+ssOYpaNhsS-sEYO~XF6oZ( z{|Euj=RVR{XC%!YZCpFwCiwfGa^L2z7BgaOLF_vDfps{jZ$z1Xzi8NfS!7@VtXT^fvk0-icO2(DPZn3rtYGgGkk`!==fUM{f}oZ)@j+)d=!4 zYNv$_zBpJ-^~9W&!kl{7wz>n>&jue4^L+g=>zYPL?NH`SNRI>(qk3U;IH>*d6JqT1 z1a>4c)wsM__B)Q9&_RtzpBJZ-dUmkhxu%svNLjm{sAL#J z@}!B433rAfXJ<&Do~=%&)tVT$3BSCuAK;jAkN`PbaY}!`tM;WR95^(TF9+qBEkR#-4z^db zCxf!IQWC!Ju>%;y4NK{0#VITMGHsn%|N%Wlr;3}NKzg%%d%L=OL_UqAy6THf@|zpg^Xcb zFF`X>OX8#4@Rn;#Wn<)b7q`3#bgGsw0yKI#eMI^;Yh1cRZ4~u%M)7LjD@?HycFU2E z@q-CQV_k5$puB}Bry>~lJDp$mz{!Xt0fw;c+wSf#659&tS!lP>{;-cffNzhFW>ESB zRX?V~m{_G79+ja#w=u7$OE-oPjWHue=1#f6Wnurq7ZvvoA4$ok_A0t9_M<4KNV)XIyE9?) zU*J>43v%ztP4L-=#+!6Nl7Z|VkkM94Xo;z94q$M*#x)B3}2oL}egqH0q%}TiH8=(Dj;idFY zI9#b!SwO3VlJJwRw~JcYWYc|VI#0kJM@!EM4Ktq~aIhF>25L=Gn{WOVADl7-NmKp< zW1tK>t_j=(av}bsY#~keR8jxG7I%fxnC~TWXmWy!j6N3?X<@xd*HdnNx%8ODYR(fL z=<2FgW8yVR0X9=McL(CT*(`tVDFXx?l>d>YC0>Sc&FoQKVD% z$YtGGJGO%X_apv>8IE4naY+}-8q)3$oGr?74A|bn)%;;68P}?!UQl6AsoTtSy&ght z-;}j$i5>`Rx*j_#2ed``8O}ApR;jwVX(vOc@`Mh{Yz4^eTh_ zt#?ProIV4es<%YPKi8^fvS;V{ur+zS33?&8zh1T-N$hNEMlmY&y|i`$4?+Ty(v4Tzg1{$9jj zG#KrFe9B)V;wSsIdgMM3zF@quzA&2ig8)yQ$4^Ks9zu1WQ8B0gRj!c}zdJ&oXNok( z;l*5j4B#ROk&6i;U*Y-)x1OvFo#-6#UHr~;%Lv@>(-@DvxbOA&plbpRgb}qAp%(`> zrYuR9TvCqr9%@A1V}SRznKX6BMa^4^_(`@V=5q~o1t-yVYlpj7e|x;xvm-|&7GKzA zntm@dv|D;6F@v5?d$YhkVVl*g{XbBN$;cS0S$*7=c?kJ*{~4{H&Fv?woef~UEDBcp zT52w<9TOWT8TPph0M$#K_ezn@z2?Fvi6o=WGrF}vmk7B35vx9J)@>x&<^INGR>{DD zSgb%=9(CyKat11LdDjaHdo6#!f13(GC*I`7o*_*;I7EK|+*?4iNGfqpY^wt>?mXc9 z^~fnO;_MQJhDk(p>dbyu-gns1^>iL_gu#lVH>$n>N)VjryP9(*4*ZmrNnhIj2pe8E z##KIJYVKCyHf~ho)qSFNhEIAW8J3|qk6dSxFVBfw!PS%6o-^V!8_fNl<7eFtWv>xJ zH6)i8OxHYypcKl7HUn_Yn_2KXsVOme?Q(l_^Jh2prmk&)p&if8X46S<{6zCVJL$T{ zD8wk4dwKM|WY-L!NTAmY^^QVus<>eD1Zv^KP6Z984`#)ub0;7E7)ETKrl1Cr4G8iH z%vR&$z*0j}<047UwCtcg!7NmBi(2ybZ!L#aReJ@@ zP!~VY=3LAR7Z3OIOB(iQF9vx~Zx+su{LWM`(rbeCltJgbs?bL(!>W*rB)K>A)@7os zKDx*ha-Xv0zC|l6X-SXN5316Rlvx+Kq}p*8oS-q=sqStswd<&HeD3Sljc>VX-NMD| z*I`_hoxrj;P{4R^`3L==W(dI*+IXRZn^#|TK^t@D8lRdvW-K-1c8w621#KZKn{aZZ-v(5kzaXi*~K(xsz5y619XF1N3HA#o7ETCze>EzCZu-^UM7B>YD zC7hYjM4D|<4|icTIZ(-fR*m7o(2tSXSwNMwgW#~PI1XhFA~W6Yr5)tuLPJF^3to{; zwAUVB`RG@Fjv3lk@D;p|&};GjHe_g{=h*irGzkdVFlWCuyet*gW6J z{<>>BtgD+)RD~(b<6s>+D{h!|r{Uh}TK4f|8NV`%pLWwSH6$rBlBUr6Ersl8K7!{y z_hu~GW)?zW-Ir7^k5L>6?>FE6ht%y6VM2UMF)2Bls$!!ezrBgxv}%AA2%Oog-M>my zz)01xCi>4%u(G*`jH1Um=hCb#7%#^*J3Ww+FEj)$5^wf{rDG+^>~Z_)KBP8)S*~^H zD$LO!aGhPNIHHsrk9`FnP<6$U5HVC>lmxs09O;w~=Ml5O=4-ce!qO5i*B^_@%%gW! zG9t-@%a;weQ&jNZhIh1lqlE5UE6)jLrV*CVRFrACZiFN7ol4C^*-As2i{KN6J#fsz z?O~es)I^FgU%BGyb+TNvip#G*N>gz@-@(ZaZ}#%iJBJVq*qrZq=n2}3{VS%!C%&n{f55)nF#lvoP~KBFF;Y}M~ObxpBU06}ICg<_fb^~&rp z=b(`9*l#`8M)U%Nat~Wsr)zQwYDU{QZv$!s?bzSS(h^+(&=JWS?1|PoJ9yl!{eLCS z|9Ol3|JwQe9jYIt49h45>w5;{#DF9aKLS@GbDTg?W4AMI+vS|@o-!>* zF`U3Cfx?hst~x5^Pmc0zi0B3TwTS#AaX>O&t}krs|E6I^P+%BhC`>RcqBI=aROehm zUkq2o&V3pstiMy-;T_=C)d0v5`)rlKEY7EqdO?4V^0pXJo(vm~CFkT^A&8U5kQ=0=T z>#Fay+&aKeBjaEWyme;-)2C@EX9x=#HK+b|Mo~?={gc)HL|5+~ajce3bw>9#ZaVy6 zC__@NpqSh}5SFv@02R>1;xp3AG&by?JE4GyLf}LBbU<%Fb~u0LZOdUtX$XILUOJB+ zugTMxitIVtT#dAmVv=nc8D~a~egY;s#f}+_aWu210YzyKRh2-+u+-p$_&cK2HFVkD z|Jr7_v4G{%eGlUzK=)suQc|_Nsx;vI`h-H0Qg=#7Ywumfc}Y#7r9RzgTKY{5){7k} zLcQRtq_jr$7{L5QpNgU#ba8m%WM7`ku^8VX1e(pFtd~JSre(#3-znQd(@sSpzLhZX zH1Fudkl3%Y!eKKLDpxe~8ods1v4u$K5?@;Ot{N2tWC;BEk)Z04tEfQ{ZAOpX zCY5mxsAfy&f>&l{Hx2=F=XtM!`ns9WXnH;?#1$dG)`*jw#l*}m#Z0}VZX{w&q0 zQWYn0pdWD*GttOh=xY|^xe;Pqq{YyrBGM-O#5DAqImaTFwt1P2zwshzSDlOP6kliW z?jxK@Dt{A+#73`AJV&kd#hgLOF>HH)_|3{I+I({62lNee7LyQZ<8dvi8Wo;#4_mFD z2QBoTjN{uqg4yWp?8O$^r0oAgo4g^ZcLHcC9ZH1Vs<8;{fQ zrVj>In$Oxbjz`&2=I;5S%MAZtx9SszGK4<{wOhB7yT5JzK-l+1_;~uakSmMPBFV1= z&0czT}3XqXAviQ-^F&}>Mboj3L4)pvs* z{V6kt5_0O}TETMh4pzq{n%gpmIQ!4Ijt!t=C726wa?Jg{7}c(`AFVes`cIGRC-i;fw1MLl6;42;aq-!|0izX((->Y#HWg|~cVpK6+=d4A|Qv+x<04y*T&UcbRkrI!$qRVCH4 z20qL+3S)H~S1Befd>gWf5uQhw8#%T>W?dzJkOd30`*0thG)ty_M4AH{#<}C9tOFv`Ua=9`B;7Yye^_Rz{;HN@0P%X`1)>oJ)kFC^D}=nH$zx zjC6;yar>DDs3vU9(5mjh>ehw~x=IgUI=rYgUg^RN29+$(!DcIGn~_09FO)!<$1=3m znD4_`df<3xA{4gMB2px0aHJtXGpULyIm(k&%F@b*p$_OnrpCOBO~1!$t4d~X>!ICp z3MojRj&{UJS-65Np7q_=U9<%~d2$!OtqIiyrQg%bQ?6UQxK3slZcKAe8~`!*QA)2Q z&l|mC|EiJ`5o{pmjxMi(()ZrI2FAt@ZXXJ{W(02eIf;)-@;2)ffb$uXhGs2g=@|Cf z`2~cb(VY-^Pf)w;G&j?Ka?URAiX66lTNzjJk>vU3PCSy)RPd-y09AA+pB%7JW!4E; zvQO^;$G9)7MiH&0mUa`q^jSh|ngGy^4s}}efFP2SYXP0tk*Ie90c4}mLW6QPb|T-I zw>yEB377AS#3xQXl&psig*}WMY0KF8vXxp{ph2%P_lJ*)z%sZZ zoccnqPp$ydNJ=n*DzHF>nfTefA5nFLIx6(%ncFSHcp(v zL!Qu-Q%~qBokdP59Qlt%;((p=+hy^=h2nxMGSe2QTsgbf3cY?|n~s~DwCW#Q8t!P& zgxd9;j1{K9=)@`N5wiWI97>jc1=C<(i-|a!k1~@G&`jN)@N}%a#V+Z|1Gt!7n~O

B}(j&J7ih>d9!cz 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 literal 0 HcmV?d00001 diff --git a/BKPS/Temp/XEmptyPreparedProjet.zip b/BKPS/Temp/XEmptyPreparedProjet.zip new file mode 100644 index 0000000000000000000000000000000000000000..8ba604e3f85f91b8e2e91b4041a44be1a6788f7e GIT binary patch literal 184021 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šQmW9*j$k}rn(7bRLRds%^r9#95` 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 aHvaAb1W;N604%_NN5F+k5Adx3!2bX;9s&~p literal 0 HcmV?d00001 diff --git a/BKPS/Temp/x-saherelm.xau5.provider.indicators.lib.mq5 b/BKPS/Temp/x-saherelm.xau5.provider.indicators.lib.mq5 new file mode 100644 index 0000000..cd1bb2a --- /dev/null +++ b/BKPS/Temp/x-saherelm.xau5.provider.indicators.lib.mq5 @@ -0,0 +1,9556 @@ +/////////////////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 XAU5 Signal Provider Indicators Library +// ---------------------------------------------------------------- +// +// 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 Define Enums ... +// + +// +enum ENUM_XAU5_SIGNAL_PROVIDERS +{ + // + // XSP Expert Support Mechanism ... + XSP, + // + // XTD ... + XTD, + // + // XTAM ... + XTAM, + // + // XSI ... + XSI, + // + // XSTFI ... + XSTFI, + // + // XOBDLH ... + XOBDLH, + // + // XCHMACC ... + XCHMACC, + // + // XCHMACMN ... + XCHMACMN, + // + // XCHMACMX ... + XCHMACMX, +}; + +// +// Represent Market Conditions ... +struct XAU5MarketConditions +{ + // + // XTM ... + bool isXTMPeak; + bool isXTMVale; + bool isXTMBullish; + bool isXTMBearish; + bool isXTMNeutural; + bool isXTMEndBullish; + bool isXTMEndBearish; + bool isXTMStartBullish; + bool isXTMStartBearish; + bool isXTMEndBullishByNeutural; + bool isXTMEndBearishByNeutural; + bool isXTMStartBullishAfterNeutural; + bool isXTMStartBearishAfterNeutural; + + // + // XAMA ... + bool isXAMAPeak; + bool isXAMAVale; + bool isXAMABullish; + bool isXAMABearish; + bool isXAMANeutural; + bool isXAMAEndBullish; + bool isXAMAEndBearish; + bool isXAMAStartBullish; + bool isXAMAStartBearish; + bool isXAMAEndBullishByNeutural; + bool isXAMAEndBearishByNeutural; + bool isXAMAStartBullishAfterNeutural; + bool isXAMAStartBearishAfterNeutural; + + // + // XLH ... + bool isXLHHHIncreased; + bool isXLHHHDecreased; + bool isXLHLLIncreased; + bool isXLHLLDecreased; + bool isXLHLowAttachedLL; + bool isXLHHighAttachedHH; + bool isXLHHHSameInLength; + bool isXLHLLSameInLength; + bool isXLHPriceOverSignal; + bool isXLHPriceUnderSignal; + bool isXLHPriceInSignalRange; + bool isXLHPriceCrossedOverSignal; + bool isXLHPriceCrossedUnderSignal; + + // + // XTD ... + bool isXTDSignalPeak; + bool isXTDSignalVale; + bool isXTDBullishPeak; + bool isXTDBullishVale; + bool isXTDBearishPeak; + bool isXTDBearishVale; + bool isXTDBullOverBear; + bool isXTDBullUnderBear; + bool isXTDSignalOverBear; + bool isXTDSignalUnderBear; + bool isXTDBullCrossedOverBear; + bool isXTDBullCrossedUnderBear; + bool isXTDSignalCrossedOverBear; + bool isXTDSignalCrossedUnderBear; + + // + // XFI ... + bool isXFIPeak; + bool isXFIVale; + bool isXFICrossedOverZero; + bool isXFIOverZero; + bool isXFICrossedUnderZero; + bool isXFIUnderZero; + + // + // XTS ... + bool isXTSAllSame; + bool isXTSCurrentMin; + bool isXTSCurrentMax; + bool isXTSCurrentOverFarest; + bool isXTSCurrentOverNearest; + bool isXTSCurrentOverMediest; + bool isXTSCurrentUnderFarest; + bool isXTSCurrentUnderNearest; + bool isXTSCurrentUnderMediest; + bool isXTSCurrentCrossedOverFarest; + bool isXTSCurrentCrossedOverNearest; + bool isXTSCurrentCrossedOverMediest; + bool isXTSCurrentCrossedUnderFarest; + bool isXTSCurrentCrossedUnderNearest; + bool isXTSCurrentCrossedUnderMediest; + + // + // XRSI ... + bool isXRSIPeak; + bool isXRSIVale; + bool isXRSICrossedOverLongExit; + bool isXRSICrossedOverLongEntry; + bool isXRSICrossedUnderShortExit; + bool isXRSICrossedUnderShortEntry; + + // + // XOBD ... + bool isXOBDSwingLow; + bool isXOBDSwingHigh; + + // + // XCHLH ... + // + bool isXCHLHSameHHs; + bool isXCHLHSameLLs; + // + bool isXCHLHSCMCHHSame; + bool isXCHLHSCMCLLSame; + // + bool isXCHLHSCLCHHSame; + bool isXCHLHSCLCLLSame; + // + bool isXCHLHMCLCHHSame; + bool isXCHLHMCLCLLSame; + // + bool isXCHLHMCOnTopOfLC; + bool isXCHLHMCInBottomOfLC; + + // + // XCHMA ... + // + bool isXCHMASCOverMax; + bool isXCHMASCOverMin; + bool isXCHMASCUnderMax; + bool isXCHMASCUnderMin; + // + bool isXCHMASCCrossedOverMax; + bool isXCHMASCCrossedUnderMax; + bool isXCHMASCCrossedOverMin; + bool isXCHMASCCrossedUnderMin; + // + bool isXCHMASCPeak; + bool isXCHMASCVale; + bool isXCHMASCTrendsUp; + bool isXCHMASCTrendsDown; + bool isXCHMASCFastOverSlow; + bool isXCHMASCFastUnderSlow; + bool isXCHMASCFastCrossedOverSlow; + bool isXCHMASCFastCrossedUnderSlow; + // + bool isXCHMAMCPeak; + bool isXCHMAMCVale; + bool isXCHMAMCTrendsUp; + bool isXCHMAMCTrendsDown; + bool isXCHMAMCFastOverSlow; + bool isXCHMAMCFastUnderSlow; + bool isXCHMAMCFastCrossedOverSlow; + bool isXCHMAMCFastCrossedUnderSlow; + // + bool isXCHMALCPeak; + bool isXCHMALCVale; + bool isXCHMALCTrendsUp; + bool isXCHMALCTrendsDown; + bool isXCHMALCFastOverSlow; + bool isXCHMALCFastUnderSlow; + bool isXCHMALCFastCrossedOverSlow; + bool isXCHMALCFastCrossedUnderSlow; +}; + +// +// END Define Enums ... +// + +// +// Include Provider Inputs ... +#include "x-saherelm.xau5.provider.inputs.lib.mq5" + +// +// Signallers ... +input group "XAU5 Signallers"; + +// +// XTD ... +input group "XAU5 XTD Signaller"; +input bool xAU5XTDEnableSignaller = true; // Enable Signaller +// input bool xAU5XTDEnableTPSL = false; // Enable TP/SL +input bool xAU5XTDAllowLongSignals = true; // Enable Long Signals +input bool xAU5XTDAllowShortSignals = true; // Enable Short Signals + +// +// XTAM ... +input group "XAU5 XTAM Signaller"; +input bool xAU5XTAMEnableSignaller = true; // Enable Signaller +// input bool xAU5XTAMEnableTPSL = false; // Enable TP/SL +input bool xAU5XTAMAllowLongSignals = true; // Enable Long Signals +input bool xAU5XTAMAllowShortSignals = true; // Enable Short Signals + +// +// XSI ... +input group "XAU5 XSI Signaller"; +input bool xAU5XSIEnableSignaller = true; // Enable Signaller +// input bool xAU5SIXEnableTPSL = false; // Enable TP/SL +input bool xAU5XSIAllowLongSignals = true; // Enable Long Signals +input bool xAU5XSIAllowShortSignals = true; // Enable Short Signals + +// +// XSTFI ... +input group "XAU5 XSTFI Signaller"; +input bool xAU5XSTFIEnableSignaller = true; // Enable Signaller +// input bool xAU5XSTFIEnableTPSL = false; // Enable TP/SL +input bool xAU5XSTFIAllowLongSignals = true; // Enable Long Signals +input bool xAU5XSTFIAllowShortSignals = true; // Enable Short Signals + +// +// XOBDLH ... +input group "XAU5 XOBDLH Signaller"; +input bool xAU5XOBDLHEnableSignaller = true; // Enable Signaller +// input bool xAU5XOBDLHEnableTPSL = false; // Enable TP/SL +input bool xAU5XOBDLHAllowLongSignals = true; // Enable Long Signals +input bool xAU5XOBDLHAllowShortSignals = true; // Enable Short Signals + +// +// XCHMACC ... +input group "XAU5 XCHMACC Signaller"; +input bool xAU5XCHMACCEnableSignaller = true; // Enable Signaller +// input bool xAU5XCHMACCEnableTPSL = false; // Enable TP/SL +input bool xAU5XCHMACCAllowLongSignals = true; // Enable Long Signals +input bool xAU5XCHMACCAllowShortSignals = true; // Enable Short Signals + +// +// XCHMACMX ... +input group "XAU5 XCHMACMX Signaller"; +input bool xAU5XCHMACMXEnableSignaller = true; // Enable Signaller +// input bool xAU5XCHMACMXEnableTPSL = false; // Enable TP/SL +input bool xAU5XCHMACMXAllowLongSignals = true; // Enable Long Signals +input bool xAU5XCHMACMXAllowShortSignals = true; // Enable Short Signals + +// +// XCHMACMN ... +input group "XAU5 XCHMACMN Signaller"; +input bool xAU5XCHMACMNEnableSignaller = true; // Enable Signaller +// input bool xAU5XCHMACMNEnableTPSL = false; // Enable TP/SL +input bool xAU5XCHMACMNAllowLongSignals = true; // Enable Long Signals +input bool xAU5XCHMACMNAllowShortSignals = true; // Enable Short Signals + +// +// Imports all Indicators Helper here ... +// input group "XAU5 Provider Indicators"; + +// +#include "../Helpers/x-saherelm.xtm.indicator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xama.indicator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xlh.indicator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xtd.oscillator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xfi.oscillator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xts.oscillator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xobd.indicator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xrsi.oscillator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xchlh.oscillator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xchma.oscillator.helper.lib.mq5" + +// +bool xAU5IsTestMode = true; +int xAU5MaxLengthOfInputs = 0; +int xAU5CalculatedBars = 0; + +// +// Signaller Variables ... +// +// XTD ... +bool xAU5MXTDEnableSignaller = xAU5XTDEnableSignaller; +// bool xAU5MXTDEnableTPSL = xAU5XTDEnableTPSL; +bool xAU5MXTDAllowLongSignals = xAU5XTDAllowLongSignals; +bool xAU5MXTDAllowShortSignals = xAU5XTDAllowShortSignals; + +// +// XTAM ... +bool xAU5MXTAMEnableSignaller = xAU5XTAMEnableSignaller; +// bool xAU5MXTAMEnableTPSL = xAU5XTAMEnableTPSL; +bool xAU5MXTAMAllowLongSignals = xAU5XTAMAllowLongSignals; +bool xAU5MXTAMAllowShortSignals = xAU5XTAMAllowShortSignals; + +// +// XSI ... +bool xAU5MXSIEnableSignaller = xAU5XSIEnableSignaller; +// bool xAU5MSIXEnableTPSL = xAU5SIXEnableTPSL; +bool xAU5MXSIAllowLongSignals = xAU5XSIAllowLongSignals; +bool xAU5MXSIAllowShortSignals = xAU5XSIAllowShortSignals; + +// +// XSTFI ... +bool xAU5MXSTFIEnableSignaller = xAU5XSTFIEnableSignaller; +// bool xAU5MXSTFIEnableTPSL = xAU5XSTFIEnableTPSL; +bool xAU5MXSTFIAllowLongSignals = xAU5XSTFIAllowLongSignals; +bool xAU5MXSTFIAllowShortSignals = xAU5XSTFIAllowShortSignals; + +// +// XOBDLH ... +bool xAU5MXOBDLHEnableSignaller = xAU5XOBDLHEnableSignaller; +// bool xAU5MXOBDLHEnableTPSL = xAU5XOBDLHEnableTPSL; +bool xAU5MXOBDLHAllowLongSignals = xAU5XOBDLHAllowLongSignals; +bool xAU5MXOBDLHAllowShortSignals = xAU5XOBDLHAllowShortSignals; + +// +// XCHMACC ... +bool xAU5MXCHMACCEnableSignaller = xAU5XCHMACCEnableSignaller; +// bool xAU5MXCHMACCEnableTPSL = xAU5XCHMACCEnableTPSL; +bool xAU5MXCHMACCAllowLongSignals = xAU5XCHMACCAllowLongSignals; +bool xAU5MXCHMACCAllowShortSignals = xAU5XCHMACCAllowShortSignals; + +// +// XCHMAMX ... +bool xAU5MXCHMACMXEnableSignaller = xAU5XCHMACMXEnableSignaller; +// bool xAU5MXCHMACMXEnableTPSL = xAU5XCHMACMXEnableTPSL; +bool xAU5MXCHMACMXAllowLongSignals = xAU5XCHMACMXAllowLongSignals; +bool xAU5MXCHMACMXAllowShortSignals = xAU5XCHMACMXAllowShortSignals; + +// +// XCHMAMN ... +bool xAU5MXCHMACMNEnableSignaller = xAU5XCHMACMNEnableSignaller; +// bool xAU5MXCHMACMNEnableTPSL = xAU5XCHMACMNEnableTPSL; +bool xAU5MXCHMACMNAllowLongSignals = xAU5XCHMACMNAllowLongSignals; +bool xAU5MXCHMACMNAllowShortSignals = xAU5XCHMACMNAllowShortSignals; + +// +// Funded Next Resolve Guards ... +bool isXAU5OnFundedNext = true; + +// +// Here we Define some Global Market Variables to Analyse MArket Conditions +// using them at each time ... +XAU5MarketConditions xAU5Conditions = {}; + +// +// Validate Indicators Inputs ... +bool XAU5ValidateIndicatorsInputs() +{ + // + bool result = false; + + // + // XTM ... + result = XTMValidateInputs(); + if (!result) + { + return result; + } + + // + // XAMA ... + result = XAMAValidateInputs(); + if (!result) + { + return result; + } + + // + // XTD ... + result = XTDValidateInputs(); + if (!result) + { + return result; + } + + // + // XFI ... + result = XFIValidateInputs(); + if (!result) + { + return result; + } + + // + // XTS ... + result = XTSValidateInputs(); + if (!result) + { + return result; + } + + // + // XOBD ... + result = XOBDValidateInputs(); + if (!result) + { + return result; + } + + // + // XLH ... + result = XLHValidateInputs(); + if (!result) + { + return result; + } + + // + // XRSI ... + result = XRSIValidateInputs(); + if (!result) + { + return result; + } + + // + // XCHLH ... + result = XCHLHValidateInputs(); + if (!result) + { + return result; + } + + // + // XCHMA ... + result = XCHMAValidateInputs(); + if (!result) + { + return result; + } + + // + result = true; + + // + return result; +} + +// +// Init Indicators ... +bool XAU5InitIndicators() +{ + // + bool result = false; + + // + // Make it Enable when we need to Log Market Conditions ... + // xAU5IsTestMode = false; // IsRunningOnTestMode(); + + // + // Check and Calculate Max Length in Inputs ... + // + + // + // XTM ... + xAU5MaxLengthOfInputs = MathMax( + xTMMaPeriod, + xAU5NumberOfItemsPerTick); + + // + // XAMA ... + xAU5MaxLengthOfInputs = MathMax( + xAMALength, + xAU5NumberOfItemsPerTick); + xAU5MaxLengthOfInputs = MathMax( + xAMAFastEMA, + xAU5NumberOfItemsPerTick); + xAU5MaxLengthOfInputs = MathMax( + xAMASlowEMA, + xAU5NumberOfItemsPerTick); + + // + // XLH ... + xAU5MaxLengthOfInputs = MathMax( + xLHLength, + xAU5NumberOfItemsPerTick); + + // + // XTD ... + xAU5MaxLengthOfInputs = MathMax( + xTDLength, + xAU5MaxLengthOfInputs); + + // + // XFI ... + xAU5MaxLengthOfInputs = MathMax( + xFILength, + xAU5MaxLengthOfInputs); + + // + // XRSI ... + xAU5MaxLengthOfInputs = MathMax( + xRSILength, + xAU5MaxLengthOfInputs); + + // + // XOBD ... + xAU5MaxLengthOfInputs = MathMax( + xOBDLength, + xAU5MaxLengthOfInputs); + + // + // XCHLH ... + xAU5MaxLengthOfInputs = MathMax( + xCHLHLcLength, + xAU5MaxLengthOfInputs); + xAU5MaxLengthOfInputs = MathMax( + xCHLHMcLength, + xAU5MaxLengthOfInputs); + xAU5MaxLengthOfInputs = MathMax( + xCHLHScLength, + xAU5MaxLengthOfInputs); + + // + // XCHMA ... + xAU5MaxLengthOfInputs = MathMax( + xCHMAScFastLength, + xAU5MaxLengthOfInputs); + xAU5MaxLengthOfInputs = MathMax( + xCHMAScSlowLength, + xAU5MaxLengthOfInputs); + xAU5MaxLengthOfInputs = MathMax( + xCHMAMcFastLength, + xAU5MaxLengthOfInputs); + xAU5MaxLengthOfInputs = MathMax( + xCHMAMcSlowLength, + xAU5MaxLengthOfInputs); + xAU5MaxLengthOfInputs = MathMax( + xCHMALcFastLength, + xAU5MaxLengthOfInputs); + xAU5MaxLengthOfInputs = MathMax( + xCHMALcSlowLength, + xAU5MaxLengthOfInputs); + + // + // Validate Indicators Inputs before Initialization ... + result = XAU5ValidateIndicatorsInputs(); + if (!result) + { + return result; + } + + // + // Validate Signallers ... + + // + // XTD ... + bool isXTDEnable = + xAU5XTDEnableSignaller && + (xAU5XTDAllowLongSignals || + xAU5XTDAllowShortSignals); + + // + // XTAM ... + bool isXTAMEnable = + xAU5XTAMEnableSignaller && + (xAU5XTAMAllowLongSignals || + xAU5XTAMAllowShortSignals); + + // + // XSI ... + bool isXSIEnable = + xAU5XSIEnableSignaller && + (xAU5XSIAllowLongSignals || + xAU5XSIAllowShortSignals); + + // + // XSTFI ... + bool isXSTFIEnable = + xAU5XSTFIEnableSignaller && + (xAU5XSTFIAllowLongSignals || + xAU5XSTFIAllowShortSignals); + + // + // XOBDLH ... + bool isXOBDLHEnable = + xAU5XOBDLHEnableSignaller && + (xAU5XOBDLHAllowLongSignals || + xAU5XOBDLHAllowShortSignals); + + // + // XCHMACC ... + bool isXCHMACCEnable = + xAU5XCHMACCEnableSignaller && + (xAU5XCHMACCAllowLongSignals || + xAU5XCHMACCAllowShortSignals); + + // + // XCHMACMX ... + bool isXCHMACMXEnable = + xAU5XCHMACMXEnableSignaller && + (xAU5XCHMACMXAllowLongSignals || + xAU5XCHMACMXAllowShortSignals); + + // + // XCHMACMN ... + bool isXCHMACMNEnable = + xAU5XCHMACMNEnableSignaller && + (xAU5XCHMACMNAllowLongSignals || + xAU5XCHMACMNAllowShortSignals); + + // + bool hasSignaller = + // + isXTDEnable || + isXTAMEnable || + isXSIEnable || + isXSTFIEnable || + isXOBDLHEnable || + isXCHMACCEnable || + isXCHMACMXEnable || + isXCHMACMNEnable + // + ; + result = hasSignaller; + if (!result) + { + // + LogMessage("XAU5 doesn't enable any Signaller ..."); + + // + return result; + } + + // + // Initialize Indicator/Oscillator Handlers ... + ResetLastError(); + + // + // XTM Init ... + result = XTMInitHandlers(); + if (!result) + { + return result; + } + + // + // XAMA Init ... + result = XAMAInitHandlers(); + if (!result) + { + return result; + } + + // + // XLH Init ... + result = XLHInitHandlers(); + if (!result) + { + return result; + } + + // + // XTD Init ... + result = XTDInitHandlers(); + if (!result) + { + return result; + } + + // + // XFI Init ... + result = XFIInitHandlers(); + if (!result) + { + return result; + } + + // + // XTS Init ... + result = XTSInitHandlers(); + if (!result) + { + return result; + } + + // + // XRSI Init ... + result = XRSIInitHandlers(); + if (!result) + { + return result; + } + + // + // XOBD Init ... + result = XOBDInitHandlers(); + if (!result) + { + return result; + } + + // + // XCLH Init ... + result = XCHLHInitHandlers(); + if (!result) + { + return result; + } + + // + // XCHMA Init ... + result = XCHMAInitHandlers(); + if (!result) + { + return result; + } + + // + result = true; + + // + return result; +} + +// +// Release Indicators ... +void XAU5ReleaseIndicators() +{ + // + // Release Handlers ... + XTMReleaseHandlers(); + XAMAReleaseHandlers(); + XLHReleaseHandlers(); + XTDReleaseHandlers(); + XFIReleaseHandlers(); + XTSReleaseHandlers(); + XRSIReleaseHandlers(); + XOBDReleaseHandlers(); + XCHMAReleaseHandlers(); + XCHLHReleaseHandlers(); +} + +// +// Handle Reading Buffers ... +void XAU5HandleReadingBuffers() +{ + // + // Reading Calculated Bars for a Simple Handler ... + xAU5CalculatedBars = BarsCalculated(xTMHandler); + + // + // Read Indicators Buffers ... + XTMReadBuffers(xAU5NumberOfItemsPerTick); + XAMAReadBuffers(xAU5NumberOfItemsPerTick); + XLHReadBuffers(xAU5NumberOfItemsPerTick); + XTDReadBuffers(xAU5NumberOfItemsPerTick); + XFIReadBuffers(xAU5NumberOfItemsPerTick); + XTSReadBuffers(xAU5NumberOfItemsPerTick); + XRSIReadBuffers(xAU5NumberOfItemsPerTick); + XOBDReadBuffers(xAU5NumberOfItemsPerTick); + XCHMAReadBuffers(xAU5NumberOfItemsPerTick); + XCHLHReadBuffers(xAU5NumberOfItemsPerTick); + + // + XAU5ReadConditions(); +} + +// +// +// START Combination Functions ... +// +// + +// +// Can Open Long Trade ... +// this is a Function will Check all market Conditions and get all +// Strategy requirement Verifications for Long Signals ... +bool XAU5CanOpenLongTrade( + XProvidedSignal &info // Retrieve Signal Additional Info on this Object +) +{ + // + bool result = false; + + // + info.tp = 0; + info.sl = 0; + ArrayResize( + info.signallers, + 0); + + // + bool hasSignal = XAU5HasLongSignal(info); + + // + result = + // + hasSignal + // + ; + + // + if (result) + { + XAU5ClearConditions(); + } + + // + return result; +} + +// +// Can Close Long Trade ... +// this is a Function will Check all market Conditions and get all +// Strategy requirement Verifications for Long Signals ... +bool XAU5CanCloseLongTrade() +{ + // + bool result = false; + + // + return result; +} + +// +// Can Open Short Trade ... +// this is a Function will Check all market Conditions and get all +// Strategy requirement Verifications for Short Signals ... +bool XAU5CanOpenShortTrade( + XProvidedSignal &info // Retrieve Signal Additional Info on this Object +) +{ + // + bool result = false; + + // + info.tp = 0; + info.sl = 0; + ArrayResize( + info.signallers, + 0); + + // + bool hasSignal = XAU5HasShortSignal(info); + + // + result = + // + hasSignal + // + ; + + // + if (result) + { + XAU5ClearConditions(); + } + + // + return result; +} + +// +// Can Close Short Trade ... +// this is a Function will Check all market Conditions and get all +// Strategy requirement Verifications for Short Signals ... +bool XAU5CanCloseShortTrade() +{ + // + bool result = false; + + // + return result; +} + +// +// +// END Combination Functions ... +// +// + +// +// +// START Combination Signaling ... +// +// + +// +// Read All Globally Required Conditions ... +void XAU5ReadConditions() +{ + // + XAU5ClearConditions(); + + // + xAU5Conditions = XAU5GenerateMarketConditions(1); +} + +// +// Cleanup Conditions ... +void XAU5ClearConditions() +{ + // + XAU5MarketConditions mConditions = {}; + + // + xAU5Conditions = mConditions; +} + +// +// Generate Merket Conditions for Specified Bar Index ... +XAU5MarketConditions XAU5GenerateMarketConditions( + int bar_index = 1 // Specified Bar Index ... +) +{ + // + XAU5MarketConditions mConditions = {}; + + // + // XTM ... + mConditions.isXTMPeak = XTMIsPeak(bar_index); + mConditions.isXTMVale = XTMIsVale(bar_index); + mConditions.isXTMBullish = XTMIsBullish(bar_index); + mConditions.isXTMBearish = XTMIsBearish(bar_index); + mConditions.isXTMNeutural = XTMIsNeutural(bar_index); + mConditions.isXTMEndBullish = XTMIsEndBullish(bar_index); + mConditions.isXTMEndBearish = XTMIsEndBearish(bar_index); + mConditions.isXTMStartBullish = XTMIsStartBullish(bar_index); + mConditions.isXTMStartBearish = XTMIsStartBearish(bar_index); + mConditions.isXTMEndBullishByNeutural = XTMIsEndBullishByNeutural(bar_index); + mConditions.isXTMEndBearishByNeutural = XTMIsEndBearishByNeutural(bar_index); + mConditions.isXTMStartBullishAfterNeutural = XTMIsStartBullishAfterNeutural(bar_index); + mConditions.isXTMStartBearishAfterNeutural = XTMIsStartBearishAfterNeutural(bar_index); + + // + // XAMA ... + mConditions.isXAMAPeak = XAMAIsPeak(bar_index); + mConditions.isXAMAVale = XAMAIsVale(bar_index); + mConditions.isXAMABullish = XAMAIsBullish(bar_index); + mConditions.isXAMABearish = XAMAIsBearish(bar_index); + mConditions.isXAMANeutural = XAMAIsNeutural(bar_index); + mConditions.isXAMAEndBullish = XAMAIsEndBullish(bar_index); + mConditions.isXAMAEndBearish = XAMAIsEndBearish(bar_index); + mConditions.isXAMAStartBullish = XAMAIsStartBullish(bar_index); + mConditions.isXAMAStartBearish = XAMAIsStartBearish(bar_index); + mConditions.isXAMAEndBullishByNeutural = XAMAIsEndBullishByNeutural(bar_index); + mConditions.isXAMAEndBearishByNeutural = XAMAIsEndBearishByNeutural(bar_index); + mConditions.isXAMAStartBullishAfterNeutural = XAMAIsStartBullishAfterNeutural(bar_index); + mConditions.isXAMAStartBearishAfterNeutural = XAMAIsStartBearishAfterNeutural(bar_index); + + // + // XLH ... + mConditions.isXLHHHIncreased = XLHIsHHIncreased(bar_index); + mConditions.isXLHHHDecreased = XLHIsHHDecreased(bar_index); + mConditions.isXLHLLIncreased = XLHIsLLIncreased(bar_index); + mConditions.isXLHLLDecreased = XLHIsLLDecreased(bar_index); + mConditions.isXLHLowAttachedLL = XLHIsLowAttachedLL(bar_index); + mConditions.isXLHHighAttachedHH = XLHIsHighAttachedHH(bar_index); + mConditions.isXLHHHSameInLength = XLHIsHHSameInLength(bar_index); + mConditions.isXLHLLSameInLength = XLHIsLLSameInLength(bar_index); + mConditions.isXLHPriceOverSignal = XLHIsPriceOverSignal(bar_index); + mConditions.isXLHPriceUnderSignal = XLHIsPriceUnderSignal(bar_index); + mConditions.isXLHPriceInSignalRange = XLHIsPriceInSignalRange(bar_index); + mConditions.isXLHPriceCrossedOverSignal = XLHIsPriceCrossedOverSignal(bar_index); + mConditions.isXLHPriceCrossedUnderSignal = XLHIsPriceCrossedUnderSignal(bar_index); + + // + // XTD ... + mConditions.isXTDSignalPeak = XTDIsSignalPeak(bar_index); + mConditions.isXTDSignalVale = XTDIsSignalVale(bar_index); + mConditions.isXTDBullishPeak = XTDIsBullishPeak(bar_index); + mConditions.isXTDBullishVale = XTDIsBullishVale(bar_index); + mConditions.isXTDBearishPeak = XTDIsBearishPeak(bar_index); + mConditions.isXTDBearishVale = XTDIsBearishVale(bar_index); + mConditions.isXTDBullOverBear = XTDIsBullOverBear(bar_index); + mConditions.isXTDBullUnderBear = XTDIsBullUnderBear(bar_index); + mConditions.isXTDSignalOverBear = XTDIsSignalOverBear(bar_index); + mConditions.isXTDSignalUnderBear = XTDIsSignalUnderBear(bar_index); + mConditions.isXTDBullCrossedOverBear = XTDIsBullCrossedOverBear(bar_index); + mConditions.isXTDBullCrossedUnderBear = XTDIsBullCrossedUnderBear(bar_index); + mConditions.isXTDSignalCrossedOverBear = XTDIsSignalCrossedOverBear(bar_index); + mConditions.isXTDSignalCrossedUnderBear = XTDIsSignalCrossedUnderBear(bar_index); + + // + // XFI ... + mConditions.isXFIPeak = XFIIsPeak(bar_index); + mConditions.isXFIVale = XFIIsVale(bar_index); + mConditions.isXFIOverZero = XFIIsOverZero(bar_index); + mConditions.isXFIUnderZero = XFIIsUnderZero(bar_index); + mConditions.isXFICrossedOverZero = XFIIsCrossedOverZero(bar_index); + mConditions.isXFICrossedUnderZero = XFIIsCrossedUnderZero(bar_index); + + // + // XTS ... + mConditions.isXTSAllSame = XTSIsAllSame(bar_index); + mConditions.isXTSCurrentMin = XTSIsCurrentMin(bar_index); + mConditions.isXTSCurrentMax = XTSIsCurrentMax(bar_index); + mConditions.isXTSCurrentOverFarest = XTSIsCurrentOverFarest(bar_index); + mConditions.isXTSCurrentOverNearest = XTSIsCurrentOverNearest(bar_index); + mConditions.isXTSCurrentOverMediest = XTSIsCurrentOverMediest(bar_index); + mConditions.isXTSCurrentUnderFarest = XTSIsCurrentUnderFarest(bar_index); + mConditions.isXTSCurrentUnderNearest = XTSIsCurrentUnderNearest(bar_index); + mConditions.isXTSCurrentUnderMediest = XTSIsCurrentUnderMediest(bar_index); + mConditions.isXTSCurrentCrossedOverFarest = XTSIsCurrentCrossedOverFarest(bar_index); + mConditions.isXTSCurrentCrossedOverNearest = XTSIsCurrentCrossedOverNearest(bar_index); + mConditions.isXTSCurrentCrossedOverMediest = XTSIsCurrentCrossedOverMediest(bar_index); + mConditions.isXTSCurrentCrossedUnderFarest = XTSIsCurrentCrossedUnderFarest(bar_index); + mConditions.isXTSCurrentCrossedUnderNearest = XTSIsCurrentCrossedUnderNearest(bar_index); + mConditions.isXTSCurrentCrossedUnderMediest = XTSIsCurrentCrossedUnderMediest(bar_index); + + // + // XRSI ... + mConditions.isXRSIPeak = XRSIIsPeak(bar_index); + mConditions.isXRSIVale = XRSIIsVale(bar_index); + mConditions.isXRSICrossedOverLongExit = XRSIIsCrossedOverLongExit(bar_index); + mConditions.isXRSICrossedOverLongEntry = XRSIIsCrossedOverLongEntry(bar_index); + mConditions.isXRSICrossedUnderShortExit = XRSIIsCrossedUnderShortExit(bar_index); + mConditions.isXRSICrossedUnderShortEntry = XRSIIsCrossedUnderShortEntry(bar_index); + + // + // XOBD ... + mConditions.isXOBDSwingLow = XOBDIsSwingLow(bar_index); + mConditions.isXOBDSwingHigh = XOBDIsSwingHigh(bar_index); + + // + // XCHLH ... + // + mConditions.isXCHLHSameHHs = XCHLHIsSameHHs(bar_index); + mConditions.isXCHLHSameLLs = XCHLHIsSameLLs(bar_index); + // + mConditions.isXCHLHSCMCHHSame = XCHLHIsMCSCHasSameHH(bar_index); + mConditions.isXCHLHSCMCLLSame = XCHLHIsMCSCHasSameLL(bar_index); + // + mConditions.isXCHLHSCLCHHSame = XCHLHIsLCSCHasSameHH(bar_index); + mConditions.isXCHLHSCLCLLSame = XCHLHIsLCSCHasSameLL(bar_index); + // + mConditions.isXCHLHMCLCHHSame = XCHLHIsLCMCHasSameHH(bar_index); + mConditions.isXCHLHMCLCLLSame = XCHLHIsLCMCHasSameLL(bar_index); + // + mConditions.isXCHLHMCOnTopOfLC = XCHLHIsMCOnTopOfLC(bar_index); + mConditions.isXCHLHMCInBottomOfLC = XCHLHIsMCInBottomOfLC(bar_index); + + // + // XCHMA ... + // + mConditions.isXCHMASCOverMax = XCHMAIsSCOverMax(bar_index); + mConditions.isXCHMASCOverMin = XCHMAIsSCOverMin(bar_index); + mConditions.isXCHMASCUnderMax = XCHMAIsSCUnderMax(bar_index); + mConditions.isXCHMASCUnderMin = XCHMAIsSCUnderMin(bar_index); + // + mConditions.isXCHMASCCrossedOverMax = XCHMAIsSCCrossedOverMax(bar_index); + mConditions.isXCHMASCCrossedUnderMax = XCHMAIsSCCrossedUnderMax(bar_index); + mConditions.isXCHMASCCrossedOverMin = XCHMAIsSCCrossedOverMin(bar_index); + mConditions.isXCHMASCCrossedUnderMin = XCHMAIsSCCrossedUnderMin(bar_index); + // + mConditions.isXCHMASCPeak = XCHMAIsSCPeak(bar_index); + mConditions.isXCHMASCVale = XCHMAIsSCVale(bar_index); + mConditions.isXCHMASCTrendsUp = XCHMAIsSCTrendsUp(bar_index); + mConditions.isXCHMASCTrendsDown = XCHMAIsSCTrendsDown(bar_index); + mConditions.isXCHMASCFastOverSlow = XCHMAIsSCFastOverSlow(bar_index); + mConditions.isXCHMASCFastUnderSlow = XCHMAIsSCFastUnderSlow(bar_index); + mConditions.isXCHMASCFastCrossedOverSlow = XCHMAIsSCFastCrossedOverSlow(bar_index); + mConditions.isXCHMASCFastCrossedUnderSlow = XCHMAIsSCFastCrossedUnderSlow(bar_index); + // + mConditions.isXCHMAMCPeak = XCHMAIsMCPeak(bar_index); + mConditions.isXCHMAMCVale = XCHMAIsMCVale(bar_index); + mConditions.isXCHMAMCTrendsUp = XCHMAIsMCTrendsUp(bar_index); + mConditions.isXCHMAMCTrendsDown = XCHMAIsMCTrendsDown(bar_index); + mConditions.isXCHMAMCFastOverSlow = XCHMAIsMCFastOverSlow(bar_index); + mConditions.isXCHMAMCFastUnderSlow = XCHMAIsMCFastUnderSlow(bar_index); + mConditions.isXCHMAMCFastCrossedOverSlow = XCHMAIsMCFastCrossedOverSlow(bar_index); + mConditions.isXCHMAMCFastCrossedUnderSlow = XCHMAIsMCFastCrossedUnderSlow(bar_index); + // + mConditions.isXCHMALCPeak = XCHMAIsLCPeak(bar_index); + mConditions.isXCHMALCVale = XCHMAIsLCVale(bar_index); + mConditions.isXCHMALCTrendsUp = XCHMAIsLCTrendsUp(bar_index); + mConditions.isXCHMALCTrendsDown = XCHMAIsLCTrendsDown(bar_index); + mConditions.isXCHMALCFastOverSlow = XCHMAIsLCFastOverSlow(bar_index); + mConditions.isXCHMALCFastUnderSlow = XCHMAIsLCFastUnderSlow(bar_index); + mConditions.isXCHMALCFastCrossedOverSlow = XCHMAIsLCFastCrossedOverSlow(bar_index); + mConditions.isXCHMALCFastCrossedUnderSlow = XCHMAIsLCFastCrossedUnderSlow(bar_index); + + // + return mConditions; +} + +// +// Check Market Conditions by Combination of Power of All tools for LONGs ... +bool XAU5HasLongSignal( + XProvidedSignal &info // Retrieve Signal Additional Info on this Object +) +{ + // + bool result = false; + + // + // XTD ... + bool isXTDHasSignal = XAU5XTDHasLongSignal(); + if (isXTDHasSignal) + { + // + Add( + EnumToString(XTD), + info.signallers); + } + + // + // XTAM ... + bool isXTAMHasSignal = XAU5XTAMHasLongSignal(); + if (isXTAMHasSignal) + { + // + Add( + EnumToString(XTAM), + info.signallers); + } + + // + // XSI ... + bool isXSIHasSignal = XAU5XSIHasLongSignal(); + if (isXSIHasSignal) + { + // + Add( + EnumToString(XSI), + info.signallers); + } + + // + // XSTFI ... + bool isXSTFIHasSignal = XAU5XSTFIHasLongSignal(); + if (isXSTFIHasSignal) + { + // + Add( + EnumToString(XSTFI), + info.signallers); + } + + // + // XOBD XLH ... + bool isXOBDLHHasSignal = XAU5XOBDLHHasLongSignal(); + if (isXOBDLHHasSignal) + { + // + Add( + EnumToString(XOBDLH), + info.signallers); + } + + // + // XCHMA Cycles Cross ... + bool isXCHMACCHasSignal = XAU5XCHMACCHasLongSignal(); + if (isXCHMACCHasSignal) + { + // + Add( + EnumToString(XCHMACC), + info.signallers); + } + + // + // XCHMA Cycles Min ... + bool isXCHMACMNHasSignal = XAU5XCHMACMNHasLongSignal(); + if (isXCHMACMNHasSignal) + { + // + Add( + EnumToString(XCHMACMN), + info.signallers); + } + + // + // XCHMA Cycles Max + bool isXCHMACMXHasSignal = XAU5XCHMACMXHasLongSignal(); + if (isXCHMACMXHasSignal) + { + // + Add( + EnumToString(XCHMACMX), + info.signallers); + } + + // + result = + // + isXTDHasSignal + // + || + // + isXTAMHasSignal + // + || + // + isXSIHasSignal + // + || + // + isXSTFIHasSignal + // + || + // + isXOBDLHHasSignal + // + || + // + isXCHMACCHasSignal + // + || + // + isXCHMACMNHasSignal + // + || + // + isXCHMACMXHasSignal + // + ; + + // + if (result) + { + // + // Only Log Signals Time Market Conditions if is in Testing Mode ... + if (xAU5IsTestMode) + { + // + string message = XAU5GetConditionsString(xAU5Conditions, "\n"); + + // + LogMessage( + "Long Signal Provided by: \n" + + info.signallers[ArraySize(info.signallers) - 1] + "\n" + + "Pusher: " + (string)ArraySize(info.signallers) + "\n" + + "Market Conditions: " + message); + } + } + + // + return result; +} + +// +// Check Market Conditions by Combination of Power of All tools for SHORTs ... +bool XAU5HasShortSignal( + XProvidedSignal &info // Retrieve Signal Additional Info on this Object +) +{ + // + bool result = false; + + // + // XTD ... + bool isXTDHasSignal = XAU5XTDHasShortSignal(); + if (isXTDHasSignal) + { + // + Add( + EnumToString(XTD), + info.signallers); + } + + // + // XTAM ... + bool isXTAMHasSignal = XAU5XTAMHasShortSignal(); + if (isXTAMHasSignal) + { + // + Add( + EnumToString(XTAM), + info.signallers); + } + + // + // XSI ... + bool isXSIHasSignal = XAU5XSIHasShortSignal(); + if (isXSIHasSignal) + { + // + Add( + EnumToString(XSI), + info.signallers); + } + + // + // XSTFI ... + bool isXSTFIHasSignal = XAU5XSTFIHasShortSignal(); + if (isXSTFIHasSignal) + { + // + Add( + EnumToString(XSTFI), + info.signallers); + } + + // + // XOBD XLH ... + bool isXOBDLHHasSignal = XAU5XOBDLHHasShortSignal(); + if (isXOBDLHHasSignal) + { + // + Add( + EnumToString(XOBDLH), + info.signallers); + } + + // + // XCHMA Cycles Cross ... + bool isXCHMACCHasSignal = XAU5XCHMACCHasShortSignal(); + if (isXCHMACCHasSignal) + { + // + Add( + EnumToString(XCHMACC), + info.signallers); + } + + // + // XCHMA Cycles Min ... + bool isXCHMACMNHasSignal = XAU5XCHMACMNHasShortSignal(); + if (isXCHMACMNHasSignal) + { + // + Add( + EnumToString(XCHMACMN), + info.signallers); + } + + // + // XCHMA Cycles Max + bool isXCHMACMXHasSignal = XAU5XCHMACMXHasShortSignal(); + if (isXCHMACMXHasSignal) + { + // + Add( + EnumToString(XCHMACMX), + info.signallers); + } + + // + result = + // + isXTDHasSignal + // + || + // + isXTAMHasSignal + // + || + // + isXSIHasSignal + // + || + // + isXSTFIHasSignal + // + || + // + isXOBDLHHasSignal + // + || + // + isXCHMACCHasSignal + // + || + // + isXCHMACMNHasSignal + // + || + // + isXCHMACMXHasSignal + // + ; + + // + if (result) + { + // + // Only Log Signals Time Market Conditions if is in Testing Mode ... + if (xAU5IsTestMode) + { + // + string message = XAU5GetConditionsString(xAU5Conditions, "\n"); + + // + LogMessage( + "Short Signal Provided by: \n" + + info.signallers[ArraySize(info.signallers) - 1] + "\n" + + "Pusher: " + (string)ArraySize(info.signallers) + "\n" + + "Market Conditions: " + message); + } + } + + // + return result; +} + +// +// +// END Combination Signaling ... +// +// + +// +// START Signal Providers ... +// + +// +// Disbale All Signallers Longs ... +void XAU5DisableLongSignallers() +{ + // + // XTD ... + if (xAU5MXTDEnableSignaller) + { + xAU5MXTDAllowLongSignals = false; + } + + // + // XTAM ... + if (xAU5MXTAMEnableSignaller) + { + xAU5MXTAMAllowLongSignals = false; + } + + // + // XSI ... + if (xAU5MXSIEnableSignaller) + { + xAU5MXSIAllowLongSignals = false; + } + + // + // XSTFI ... + if (xAU5MXSTFIEnableSignaller) + { + xAU5MXSTFIAllowLongSignals = false; + } + + // + // XOBDLH ... + if (xAU5MXOBDLHEnableSignaller) + { + xAU5MXOBDLHAllowLongSignals = false; + } + + // + // XCHMACC ... + if (xAU5MXCHMACCEnableSignaller) + { + xAU5MXCHMACCAllowLongSignals = false; + } + + // + // XCHMAMX ... + if (xAU5MXCHMACMXEnableSignaller) + { + xAU5MXCHMACMXAllowLongSignals = false; + } + + // + // XCHMAMN ... + if (xAU5MXCHMACMNEnableSignaller) + { + xAU5MXCHMACMNAllowLongSignals = false; + } +} + +// +// Enable All Signallers Longs ... +// Only if they are Configured as Enable at Settings ... +void XAU5EnableLongSignallers() +{ + // + // XTD ... + if (xAU5MXTDEnableSignaller) + { + xAU5MXTDAllowLongSignals = + xAU5XTDAllowLongSignals + ? true + : xAU5MXTDAllowLongSignals; + } + + // + // XTAM ... + if (xAU5MXTAMEnableSignaller) + { + xAU5MXTAMAllowLongSignals = + xAU5XTAMAllowLongSignals + ? true + : xAU5MXTAMAllowLongSignals; + } + + // + // XSI ... + if (xAU5MXSIEnableSignaller) + { + xAU5MXSIAllowLongSignals = + xAU5XSIAllowLongSignals + ? true + : xAU5MXSIAllowLongSignals; + } + + // + // XSTFI ... + if (xAU5MXSTFIEnableSignaller) + { + xAU5MXSTFIAllowLongSignals = + xAU5XSTFIAllowLongSignals + ? true + : xAU5MXSTFIAllowLongSignals; + } + + // + // XOBDLH ... + if (xAU5MXOBDLHEnableSignaller) + { + xAU5MXOBDLHAllowLongSignals = + xAU5XOBDLHAllowLongSignals + ? true + : xAU5MXOBDLHAllowLongSignals; + } + + // + // XCHMACC ... + if (xAU5MXCHMACCEnableSignaller) + { + xAU5MXCHMACCAllowLongSignals = + xAU5XCHMACCAllowLongSignals + ? true + : xAU5MXCHMACCAllowLongSignals; + } + + // + // XCHMAMX ... + if (xAU5MXCHMACMXEnableSignaller) + { + xAU5MXCHMACMXAllowLongSignals = + xAU5XCHMACMXAllowLongSignals + ? true + : xAU5MXCHMACMXAllowLongSignals; + } + + // + // XCHMAMN ... + if (xAU5MXCHMACMNEnableSignaller) + { + xAU5MXCHMACMNAllowLongSignals = + xAU5XCHMACMNAllowLongSignals + ? true + : xAU5MXCHMACMNAllowLongSignals; + } +} + +// +// Disable All Signallers Shorts ... +void XAU5DisableShortSignallers() +{ + // + // XTD ... + if (xAU5MXTDEnableSignaller) + { + xAU5MXTDAllowShortSignals = false; + } + + // + // XTAM ... + if (xAU5MXTAMEnableSignaller) + { + xAU5MXTAMAllowShortSignals = false; + } + + // + // XSI ... + if (xAU5MXSIEnableSignaller) + { + xAU5MXSIAllowShortSignals = false; + } + + // + // XSTFI ... + if (xAU5MXSTFIEnableSignaller) + { + xAU5MXSTFIAllowShortSignals = false; + } + + // + // XOBDLH ... + if (xAU5MXOBDLHEnableSignaller) + { + xAU5MXOBDLHAllowShortSignals = false; + } + + // + // XCHMACC ... + if (xAU5MXCHMACCEnableSignaller) + { + xAU5MXCHMACCAllowShortSignals = false; + } + + // + // XCHMAMX ... + if (xAU5MXCHMACMXEnableSignaller) + { + xAU5MXCHMACMXAllowShortSignals = false; + } + + // + // XCHMAMN ... + if (xAU5MXCHMACMNEnableSignaller) + { + xAU5MXCHMACMNAllowShortSignals = false; + } +} + +// +// Enable All Signallers Shorts ... +// Only if they are Configured as Enable at Settings ... +void XAU5EnableShortSignallers() +{ + // + // XTD ... + if (xAU5MXTDEnableSignaller) + { + xAU5MXTDAllowShortSignals = + xAU5XTDAllowShortSignals + ? true + : xAU5MXTDAllowShortSignals; + } + + // + // XTAM ... + if (xAU5MXTAMEnableSignaller) + { + xAU5MXTAMAllowShortSignals = + xAU5XTAMAllowShortSignals + ? true + : xAU5MXTAMAllowShortSignals; + } + + // + // XSI ... + if (xAU5MXSIEnableSignaller) + { + xAU5MXSIAllowShortSignals = + xAU5XSIAllowShortSignals + ? true + : xAU5MXSIAllowShortSignals; + } + + // + // XSTFI ... + if (xAU5MXSTFIEnableSignaller) + { + xAU5MXSTFIAllowShortSignals = + xAU5XSTFIAllowShortSignals + ? true + : xAU5MXSTFIAllowShortSignals; + } + + // + // XOBDLH ... + if (xAU5MXOBDLHEnableSignaller) + { + xAU5MXOBDLHAllowShortSignals = + xAU5XOBDLHAllowShortSignals + ? true + : xAU5MXOBDLHAllowShortSignals; + } + + // + // XCHMACC ... + if (xAU5MXCHMACCEnableSignaller) + { + xAU5MXCHMACCAllowShortSignals = + xAU5XCHMACCAllowShortSignals + ? true + : xAU5MXCHMACCAllowShortSignals; + } + + // + // XCHMAMX ... + if (xAU5MXCHMACMXEnableSignaller) + { + xAU5MXCHMACMXAllowShortSignals = + xAU5XCHMACMXAllowShortSignals + ? true + : xAU5MXCHMACMXAllowShortSignals; + } + + // + // XCHMAMN ... + if (xAU5MXCHMACMNEnableSignaller) + { + xAU5MXCHMACMNAllowShortSignals = + xAU5XCHMACMNAllowShortSignals + ? true + : xAU5MXCHMACMNAllowShortSignals; + } +} + +// +// Check Market Conditions is Ready for Long Signals or not ... +bool XAU5ReadyForLong( + bool checkXCHMAMin = true, // Force Check XCHMA Min State + bool checkXCHMAMax = true, // Force Check XCHMA Max State + bool checkXCHMACycles = true, // Force Check XCHMA Cycles State + bool checkXCHMAPeaks = true, // Force Check XCHMA Peaks State + bool checkXCHMATrendPowers = true, // Force Check XCHMA Trend Powers + bool checkXOBD = true, // Force Check XOBD State + bool checkXTS = true // Force Check XTS State +) +{ + // + bool result = true; + + // + if (checkXCHMAMin) + { + // + result = + // + // XCHMA MIN ... + !( + // + (xAU5Conditions.isXCHMASCOverMin || + xAU5Conditions.isXCHMASCCrossedOverMin) && + (xAU5Conditions.isXCHMASCUnderMin || + xAU5Conditions.isXCHMASCCrossedUnderMin) + // + ); + } + + // + if (checkXCHMAMax && result) + { + // + result = + // + // XCHMA MAX ... + !( + // + (xAU5Conditions.isXCHMASCOverMax || + xAU5Conditions.isXCHMASCCrossedOverMax) && + (xAU5Conditions.isXCHMASCUnderMax || + xAU5Conditions.isXCHMASCCrossedUnderMax) + // + ) + // + ; + } + + // + if (checkXCHMACycles && result) + { + // + result = + // + // Check XCHMA Trend Bullish ... + ( + // + // All Cycles Bullish ... + ( + // + // SC ... + (xAU5Conditions.isXCHMASCFastOverSlow || + xAU5Conditions.isXCHMASCFastCrossedOverSlow) + // + && + // + // MC ... + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow) + // + && + // + // LC ... + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow) + // + ) + // + || + // + // Two Cycle Fully Bullish ... + ( + // + // SC and MC ... + ( + // + // SC ... + (xAU5Conditions.isXCHMASCFastOverSlow || + xAU5Conditions.isXCHMASCFastCrossedOverSlow) + // + && + // + // MC ... + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow) + // + ) + // + || + // + // SC and LC ... + ( + // + // SC ... + (xAU5Conditions.isXCHMASCFastOverSlow || + xAU5Conditions.isXCHMASCFastCrossedOverSlow) + // + && + // + // LC ... + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow) + // + ) + // + || + // + // MC and LC ... + ( + // + // MC ... + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow) + // + && + // + // LC ... + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow) + // + ) + // + ) + // + ) + // + ; + } + + // + if (checkXCHMAPeaks && result) + { + // + result = + // + // XCHMA Check Peaks ... + !( + // + // All Cycles Peak ... + (xAU5Conditions.isXCHMASCPeak && + xAU5Conditions.isXCHMAMCPeak && + xAU5Conditions.isXCHMALCPeak) + // + || + // + ( + // + // SC MC ... + (xAU5Conditions.isXCHMASCPeak && + xAU5Conditions.isXCHMAMCPeak) + // + || + // + // SC LC ... + (xAU5Conditions.isXCHMASCPeak && + xAU5Conditions.isXCHMALCPeak) + // + || + // + // MC LC ... + (xAU5Conditions.isXCHMAMCPeak && + xAU5Conditions.isXCHMALCPeak) + // + ) + // + ) + // + ; + } + + // + if (checkXCHMATrendPowers && result) + { + // + result = + // + // XCHMA Check Trends Power ... + !( + // + // All Trends Down ... + (xAU5Conditions.isXCHMASCTrendsDown && + xAU5Conditions.isXCHMAMCTrendsDown && + xAU5Conditions.isXCHMALCTrendsDown) + // + || + // + // Twisted pairs ... + ( + // + (xAU5Conditions.isXCHMASCTrendsDown && + xAU5Conditions.isXCHMAMCTrendsDown) + // + || + // + (xAU5Conditions.isXCHMASCTrendsDown && + xAU5Conditions.isXCHMALCTrendsDown) + // + || + // + (xAU5Conditions.isXCHMAMCTrendsDown && + xAU5Conditions.isXCHMALCTrendsDown) + // + ) + // + ) + // + ; + } + + // + if (checkXOBD && result) + { + // + result = + // + // XOBD Check Swings ... + !xAU5Conditions.isXOBDSwingLow + // + ; + } + + // + if (checkXTS && result) + { + result = + // + // XTS Check ... + !( + // + xAU5Conditions.isXTSCurrentMin && + // + ( + // + // All Under ... + ( + (xAU5Conditions.isXTSCurrentUnderNearest || + xAU5Conditions.isXTSCurrentCrossedUnderNearest) && + (xAU5Conditions.isXTSCurrentUnderMediest || + xAU5Conditions.isXTSCurrentCrossedUnderMediest) && + (xAU5Conditions.isXTSCurrentUnderFarest || + xAU5Conditions.isXTSCurrentCrossedUnderFarest)) + // + || + // + // Pairs ... + ( + // + ((xAU5Conditions.isXTSCurrentUnderNearest || + xAU5Conditions.isXTSCurrentCrossedUnderNearest) && + (xAU5Conditions.isXTSCurrentUnderMediest || + xAU5Conditions.isXTSCurrentCrossedUnderMediest)) + // + || + // + ((xAU5Conditions.isXTSCurrentUnderNearest || + xAU5Conditions.isXTSCurrentCrossedUnderNearest) && + (xAU5Conditions.isXTSCurrentUnderFarest || + xAU5Conditions.isXTSCurrentCrossedUnderFarest)) + // + || + // + ((xAU5Conditions.isXTSCurrentUnderMediest || + xAU5Conditions.isXTSCurrentCrossedUnderMediest) && + (xAU5Conditions.isXTSCurrentUnderFarest || + xAU5Conditions.isXTSCurrentCrossedUnderFarest)) + // + ) + // + ) + // + ) + // + ; + } + + // + return result; +} + +// +// Check Market Conditions is Ready for Short Signals or not ... +bool XAU5ReadyForShort( + bool checkXCHMAMin = true, // Force Check XCHMA Min State + bool checkXCHMAMax = true, // Force Check XCHMA Max State + bool checkXCHMACycles = true, // Force Check XCHMA Cycles State + bool checkXCHMAVales = true, // Force Check XCHMA Vales State + bool checkXCHMATrendPowers = true, // Force Check XCHMA Trend Powers + bool checkXOBD = true, // Force Check XOBD State + bool checkXTS = true // Force Check XTS State +) +{ + // + bool result = true; + + // + if (checkXCHMAMin) + { + // + result = + // + // XCHMA MIN ... + !( + // + (xAU5Conditions.isXCHMASCOverMin || + xAU5Conditions.isXCHMASCCrossedOverMin) && + (xAU5Conditions.isXCHMASCUnderMin || + xAU5Conditions.isXCHMASCCrossedUnderMin) + // + ); + } + + // + if (checkXCHMAMax && result) + { + // + result = + // + // XCHMA MAX ... + !( + // + (xAU5Conditions.isXCHMASCOverMax || + xAU5Conditions.isXCHMASCCrossedOverMax) && + (xAU5Conditions.isXCHMASCUnderMax || + xAU5Conditions.isXCHMASCCrossedUnderMax) + // + ) + // + ; + } + + // + if (checkXCHMACycles && result) + { + // + result = + // + // Check XCHMA Trend Bullish ... + ( + // + // All Cycles Bullish ... + ( + // + // SC ... + (xAU5Conditions.isXCHMASCFastUnderSlow || + xAU5Conditions.isXCHMASCFastCrossedUnderSlow) + // + && + // + // MC ... + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow) + // + && + // + // LC ... + (xAU5Conditions.isXCHMALCFastUnderSlow || + xAU5Conditions.isXCHMALCFastCrossedUnderSlow) + // + ) + // + || + // + // Two Cycle Fully Bullish ... + ( + // + // SC and MC ... + ( + // + // SC ... + (xAU5Conditions.isXCHMASCFastUnderSlow || + xAU5Conditions.isXCHMASCFastCrossedOverSlow) + // + && + // + // MC ... + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow) + // + ) + // + || + // + // SC and LC ... + ( + // + // SC ... + (xAU5Conditions.isXCHMASCFastUnderSlow || + xAU5Conditions.isXCHMASCFastCrossedUnderSlow) + // + && + // + // LC ... + (xAU5Conditions.isXCHMALCFastUnderSlow || + xAU5Conditions.isXCHMALCFastCrossedUnderSlow) + // + ) + // + || + // + // MC and LC ... + ( + // + // MC ... + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow) + // + && + // + // LC ... + (xAU5Conditions.isXCHMALCFastUnderSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow) + // + ) + // + ) + // + ) + // + ; + } + + // + if (checkXCHMAVales && result) + { + // + result = + // + // XCHMA Check Vales ... + !( + // + // All Cycles Vale ... + (xAU5Conditions.isXCHMASCVale && + xAU5Conditions.isXCHMAMCVale && + xAU5Conditions.isXCHMALCVale) + // + || + // + ( + // + // SC MC ... + (xAU5Conditions.isXCHMASCVale && + xAU5Conditions.isXCHMAMCVale) + // + || + // + // SC LC ... + (xAU5Conditions.isXCHMASCVale && + xAU5Conditions.isXCHMALCVale) + // + || + // + // MC LC ... + (xAU5Conditions.isXCHMAMCVale && + xAU5Conditions.isXCHMALCVale) + // + ) + // + ) + // + ; + } + + // + if (checkXCHMATrendPowers && result) + { + // + result = + // + // XCHMA Check Trends Power ... + !( + // + // All Trends Down ... + (xAU5Conditions.isXCHMASCTrendsDown && + xAU5Conditions.isXCHMAMCTrendsDown && + xAU5Conditions.isXCHMALCTrendsDown) + // + || + // + // Twisted pairs ... + ( + // + (xAU5Conditions.isXCHMASCTrendsDown && + xAU5Conditions.isXCHMAMCTrendsDown) + // + || + // + (xAU5Conditions.isXCHMASCTrendsDown && + xAU5Conditions.isXCHMALCTrendsDown) + // + || + // + (xAU5Conditions.isXCHMAMCTrendsDown && + xAU5Conditions.isXCHMALCTrendsDown) + // + ) + // + ) + // + ; + } + + // + if (checkXOBD && result) + { + // + result = + // + // XOBD Check Swings ... + !xAU5Conditions.isXOBDSwingHigh + // + ; + } + + // + if (checkXTS && result) + { + // + result = + // + // XTS Check ... + !( + // + xAU5Conditions.isXTSCurrentMax && + // + ( + // + // All Over ... + ( + (xAU5Conditions.isXTSCurrentOverNearest || + xAU5Conditions.isXTSCurrentCrossedOverNearest) && + (xAU5Conditions.isXTSCurrentOverMediest || + xAU5Conditions.isXTSCurrentCrossedOverMediest) && + (xAU5Conditions.isXTSCurrentOverFarest || + xAU5Conditions.isXTSCurrentCrossedOverFarest)) + // + || + // + // Pairs ... + ( + // + ((xAU5Conditions.isXTSCurrentOverNearest || + xAU5Conditions.isXTSCurrentCrossedOverNearest) && + (xAU5Conditions.isXTSCurrentOverMediest || + xAU5Conditions.isXTSCurrentCrossedOverMediest)) + // + || + // + ((xAU5Conditions.isXTSCurrentOverNearest || + xAU5Conditions.isXTSCurrentCrossedOverNearest) && + (xAU5Conditions.isXTSCurrentOverFarest || + xAU5Conditions.isXTSCurrentCrossedOverFarest)) + // + || + // + ((xAU5Conditions.isXTSCurrentOverMediest || + xAU5Conditions.isXTSCurrentCrossedOverMediest) && + (xAU5Conditions.isXTSCurrentOverFarest || + xAU5Conditions.isXTSCurrentCrossedOverFarest)) + // + ) + // + ) + // + ) + // + ; + } + + // + return result; +} + +// +// XTD Long Signal Checking ... +bool XAU5XTDHasLongSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXTDEnableSignaller || + !xAU5MXTDAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + xAU5Conditions.isXTDSignalCrossedOverBear + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + XAU5ReadyForLong() + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXCHMAMCVale && + xAU5Conditions.isXCHMAMCTrendsUp && + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow)) + // + || + // + (xAU5Conditions.isXTMBullish && + xAU5Conditions.isXCHMAMCVale && + xAU5Conditions.isXCHMALCVale && + xAU5Conditions.isXAMANeutural && + xAU5Conditions.isXLHHHDecreased && + xAU5Conditions.isXCHLHMCLCLLSame) + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXCHMALCPeak && + ( + // + (xAU5Conditions.isXTMNeutural && + xAU5Conditions.isXAMAEndBullish) + // + || + // + (xAU5Conditions.isXTSCurrentMax && + (xAU5Conditions.isXCHMALCTrendsUp || + xAU5Conditions.isXCHMALCTrendsDown) && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + || + // + (xAU5Conditions.isXTMNeutural && + xAU5Conditions.isXAMABullish && + xAU5Conditions.isXTDBearishVale) + // + || + // + (xAU5Conditions.isXCHMAMCVale && + xAU5Conditions.isXCHMALCVale && + xAU5Conditions.isXTDBearishVale && + xAU5Conditions.isXLHLLIncreased) + // + || + // + (xAU5Conditions.isXCHMAMCVale && + (xAU5Conditions.isXCHMAMCTrendsUp && + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow))) + // + ) + // + ) + // + || + // + (xAU5Conditions.isXCHMALCVale && + ( + // + (xAU5Conditions.isXTMBullish && + xAU5Conditions.isXCHMAMCVale && + xAU5Conditions.isXTDBearishVale && + xAU5Conditions.isXAMAStartBullish) + // + || + // + (xAU5Conditions.isXCHMAMCVale && + xAU5Conditions.isXCHMAMCTrendsUp && + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow)) + // + ) + // + ) + // + || + // + (xAU5Conditions.isXAMAVale && + xAU5Conditions.isXTMNeutural && + xAU5Conditions.isXTDBearishVale && + xAU5Conditions.isXAMAStartBearish) + // + || + // + (xAU5Conditions.isXCHLHMCLCLLSame && + (xAU5Conditions.isXCHMAMCVale && + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow))) + // + || + // + (xAU5Conditions.isXCHMAMCVale && + xAU5Conditions.isXCHMALCVale && + xAU5Conditions.isXAMANeutural && + xAU5Conditions.isXAMAEndBearish && + xAU5Conditions.isXTDBearishVale && + xAU5Conditions.isXLHLLIncreased) + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + ((xAU5Conditions.isXCHMAMCVale || + xAU5Conditions.isXLHLLDecreased) && + (xAU5Conditions.isXCHMAMCTrendsUp && + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow))) + // + || + // + (xAU5Conditions.isXTSCurrentMax && + xAU5Conditions.isXLHLLIncreased && + (xAU5Conditions.isXCHMALCVale && + (xAU5Conditions.isXCHMALCFastUnderSlow || + xAU5Conditions.isXCHMALCFastCrossedUnderSlow))) + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + ( + // + (xAU5Conditions.isXCHMAMCTrendsUp && + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow)) && + ( + // + (xAU5Conditions.isXTMBullish && + xAU5Conditions.isXAMANeutural && + xAU5Conditions.isXCHLHMCLCHHSame && + (xAU5Conditions.isXTDSignalOverBear || + xAU5Conditions.isXTDSignalCrossedOverBear)) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXCHMALCVale && + (xAU5Conditions.isXCHMAMCPeak + // + || + // + (xAU5Conditions.isXTMBullish && + xAU5Conditions.isXAMABullish && + xAU5Conditions.isXTDBearishVale) + // + ) + // + ) + // + || + // + (xAU5Conditions.isXCHMAMCVale && + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow)) + // + || + // + (xAU5Conditions.isXCHMAMCPeak && + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow)) + // + || + // + (xAU5Conditions.isXCHMALCPeak && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + || + // + (xAU5Conditions.isXTSCurrentMax && + xAU5Conditions.isXLHLLIncreased && + xAU5Conditions.isXTMStartBullish && + xAU5Conditions.isXAMAStartBullish && + (xAU5Conditions.isXTDSignalOverBear || + xAU5Conditions.isXTDSignalCrossedOverBear)) + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXCHMALCPeak && + (xAU5Conditions.isXCHMALCTrendsDown || + xAU5Conditions.isXCHMALCTrendsUp) && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + || + // + ((xAU5Conditions.isXTSCurrentMax && + xAU5Conditions.isXTDSignalCrossedOverBear) && + ( + // + (xAU5Conditions.isXTMStartBullish && + xAU5Conditions.isXAMAStartBullish && + xAU5Conditions.isXFICrossedOverZero) + // + || + // + (xAU5Conditions.isXCHLHSameHHs && + xAU5Conditions.isXLHHighAttachedHH) + // + ) + // + ) + // + || + // + (xAU5Conditions.isXCHMALCVale && + (xAU5Conditions.isXCHMALCTrendsDown && + (xAU5Conditions.isXCHMALCFastUnderSlow || + xAU5Conditions.isXCHMALCFastCrossedUnderSlow))) + // + || + // + (xAU5Conditions.isXLHLLDecreased && + xAU5Conditions.isXCHLHSCMCHHSame && + (xAU5Conditions.isXCHMALCFastUnderSlow || + xAU5Conditions.isXCHMALCFastCrossedUnderSlow)) + // + || + // + (xAU5Conditions.isXCHLHSCMCHHSame && + xAU5Conditions.isXCHLHMCLCLLSame && + xAU5Conditions.isXLHHighAttachedHH && + (xAU5Conditions.isXCHMAMCPeak && + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow))) + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + (xAU5Conditions.isXCHMAMCPeak && + xAU5Conditions.isXCHMAMCTrendsUp && + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow)) + // + || + // + (xAU5Conditions.isXCHMALCPeak && + xAU5Conditions.isXCHMALCTrendsUp && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + || + // + (xAU5Conditions.isXTSAllSame && + xAU5Conditions.isXCHLHSameHHs && + xAU5Conditions.isXLHHighAttachedHH && + xAU5Conditions.isXRSICrossedOverLongExit) + // + || + // + (xAU5Conditions.isXCHMALCPeak && + xAU5Conditions.isXCHLHSCMCHHSame && + xAU5Conditions.isXCHLHSCMCLLSame) + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + (xAU5Conditions.isXLHHighAttachedHH && + ( + // + (xAU5Conditions.isXCHLHSCMCHHSame && + (xAU5Conditions.isXCHMALCFastUnderSlow || + xAU5Conditions.isXCHMALCFastCrossedUnderSlow)) + // + || + // + (xAU5Conditions.isXTSAllSame && + xAU5Conditions.isXCHLHSameHHs && + xAU5Conditions.isXRSICrossedOverLongExit) + // + ) + // + ) + // + || + // + (xAU5Conditions.isXCHMALCPeak && + xAU5Conditions.isXCHMALCTrendsUp && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + || + // + (xAU5Conditions.isXCHMAMCPeak && + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow)) + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XTD Short Signal Checking ... +bool XAU5XTDHasShortSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXTDEnableSignaller || + !xAU5MXTDAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XTAM Long Signal Checking ... +bool XAU5XTAMHasLongSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXTAMEnableSignaller || + !xAU5MXTAMAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + (xAMAMaBuffer[1] > xTMMaBuffer[1] && + xAMAMaBuffer[2] > xTMMaBuffer[2]) + // + && + // + !(xAMAMaBuffer[2] > xTMMaBuffer[2] && + xAMAMaBuffer[3] > xTMMaBuffer[3]) + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + XAU5ReadyForLong()) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXTDBearishVale && + xAU5Conditions.isXLHLLIncreased) + // + || + // + (xAU5Conditions.isXCHMAMCTrendsUp && + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow)) + // + || + // + (xAU5Conditions.isXCHMALCPeak && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXCHMALCPeak && + xAU5Conditions.isXTMNeutural && + xAU5Conditions.isXAMANeutural && + xAU5Conditions.isXTSCurrentUnderMediest) + // + || + // + (xAU5Conditions.isXCHMAMCVale && + (xAU5Conditions.isXCHMAMCTrendsUp && + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow))) + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXCHMAMCVale && + xAU5Conditions.isXCHMALCVale && + xAU5Conditions.isXTMNeutural && + xAU5Conditions.isXTMEndBearish && + xAU5Conditions.isXAMANeutural && + xAU5Conditions.isXAMAEndBearish && + xAU5Conditions.isXTDBullOverBear && + xAU5Conditions.isXTDSignalUnderBear && + xAU5Conditions.isXCHLHMCLCLLSame && + xAU5Conditions.isXRSICrossedUnderShortExit) + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXTMBullish && + xAU5Conditions.isXAMABullish && + xAU5Conditions.isXCHLHSameHHs && + xAU5Conditions.isXTSCurrentMax && + xAU5Conditions.isXTDBearishVale && + xAU5Conditions.isXLHHighAttachedHH) + // + || + // + (xAU5Conditions.isXCHMALCPeak && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XTAM Short Signal Checking ... +bool XAU5XTAMHasShortSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXTAMEnableSignaller || + !xAU5MXTAMAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XSI Long Signal Checking ... +bool XAU5XSIHasLongSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXSIEnableSignaller || + !xAU5MXSIAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + xAU5Conditions.isXRSICrossedOverLongEntry && + xRSIBuffer[3] < xRSILongEntryValue + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + XAU5ReadyForLong( + true, // XCHMA Min + true, // XCHMA Max + true, // XCHMA Cycles + true, // XCHMA Peaks + false, // XCHMA Trend Powers + true, // XOBD + true // XTS + ) + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXTMVale && + xAU5Conditions.isXTMBearish && + xAU5Conditions.isXAMABullish && + xAU5Conditions.isXTSCurrentMax && + xAU5Conditions.isXLHLLDecreased && + xAU5Conditions.isXCHLHSCMCLLSame && + xAU5Conditions.isXCHLHMCLCHHSame) + // + || + // + (xAU5Conditions.isXCHMAMCVale && + xAU5Conditions.isXCHMAMCTrendsDown && + xAU5Conditions.isXCHMALCVale && + xAU5Conditions.isXCHMALCTrendsDown) + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + (xAU5Conditions.isXTSCurrentUnderFarest && + xAU5Conditions.isXTSCurrentUnderMediest) + // + || + // + (xAU5Conditions.isXTMVale && + xAU5Conditions.isXAMAVale) + // + || + // + (xAU5Conditions.isXCHMASCVale && + xAU5Conditions.isXCHMAMCVale && + xAU5Conditions.isXCHMALCPeak) + // + || + // + (xAU5Conditions.isXTMVale && + xAU5Conditions.isXCHMASCVale && + xAU5Conditions.isXAMANeutural && + xAU5Conditions.isXTSCurrentMax && + xAU5Conditions.isXAMAEndBearish && + xAU5Conditions.isXCHLHSCMCLLSame && + xAU5Conditions.isXCHLHMCLCHHSame) + // + || + // + (xAU5Conditions.isXCHMALCPeak && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + (xAU5Conditions.isXTMVale && + xAU5Conditions.isXAMAVale && + xAU5Conditions.isXTDSignalVale && + xAU5Conditions.isXTDBullishVale) + // + || + // + (xAU5Conditions.isXCHMASCVale && + xAU5Conditions.isXCHMAMCTrendsDown && + xAU5Conditions.isXCHMALCTrendsDown) + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + (xAU5Conditions.isXTSCurrentMax && + xAU5Conditions.isXTMStartBullish && + xAU5Conditions.isXAMAStartBullish && + xAU5Conditions.isXCHLHSCMCHHSame && + xAU5Conditions.isXCHLHSCMCLLSame && + xAU5Conditions.isXLHHighAttachedHH && + xAU5Conditions.isXFICrossedOverZero && + (xAU5Conditions.isXCHMALCPeak && + xAU5Conditions.isXCHMALCTrendsDown && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow))) + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XSI Short Signal Checking ... +bool XAU5XSIHasShortSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXSIEnableSignaller || + !xAU5MXSIAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XSTFI Long Signal Checking ... +bool XAU5XSTFIHasLongSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXSTFIEnableSignaller || + !xAU5MXSTFIAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + XTSGetMinValue(1) == xTSFarestBuffer[1] && + (xAU5Conditions.isXTSCurrentOverFarest || + xAU5Conditions.isXTSCurrentCrossedOverFarest) && + (xTSCurrentBuffer[1] < xTSNearestBuffer[1] || + xTSCurrentBuffer[1] < xTSMediestBuffer[1]) && + !(xAU5Conditions.isXTSCurrentUnderNearest || + xAU5Conditions.isXTSCurrentCrossedUnderNearest) + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + XAU5ReadyForLong() + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXCHMALCPeak && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + || + // + (xAU5Conditions.isXTMStartBearish && + xAU5Conditions.isXAMAStartBearish && + (xAU5Conditions.isXCHMASCVale && + (xAU5Conditions.isXCHMASCFastUnderSlow || + xAU5Conditions.isXCHMASCFastCrossedUnderSlow))) + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + (xAU5Conditions.isXTMStartBearish && + xAU5Conditions.isXAMAStartBearish && + xAU5Conditions.isXTDBullOverBear && + xAU5Conditions.isXTDSignalCrossedUnderBear && + xAU5Conditions.isXLHHHIncreased && + xAU5Conditions.isXLHHHSameInLength && + xAU5Conditions.isXCHLHSCMCHHSame && + (xAU5Conditions.isXCHMASCFastUnderSlow || + xAU5Conditions.isXCHMASCFastCrossedUnderSlow)) + // + || + // + (xAU5Conditions.isXLHHHIncreased && + (xAU5Conditions.isXCHMALCPeak && + xAU5Conditions.isXCHMALCTrendsUp && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow))) + // + || + // + (xAU5Conditions.isXAMANeutural && + xAU5Conditions.isXAMAEndBearish && + xAU5Conditions.isXTMStartBullish && + (xAU5Conditions.isXCHMASCFastUnderSlow || + xAU5Conditions.isXCHMASCFastCrossedUnderSlow)) + // + || + // + (xAU5Conditions.isXCHMALCPeak && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + ((xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow)) + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXTMNeutural && + xAU5Conditions.isXAMANeutural && + xAU5Conditions.isXFICrossedUnderZero) + // + || + // + (xAU5Conditions.isXLHHHDecreased && + xAU5Conditions.isXLHLLDecreased && + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow)) + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + (xAU5Conditions.isXCHLHSameHHs && + xAU5Conditions.isXTDSignalVale && + xAU5Conditions.isXTDBullishVale && + xAU5Conditions.isXLHHHIncreased) + // + || + // + (xAU5Conditions.isXCHMALCPeak && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXTMBullish && + xAU5Conditions.isXAMABullish && + xAU5Conditions.isXLHHHDecreased && + xAU5Conditions.isXTSCurrentUnderMediest) + // + || + // + (xAU5Conditions.isXCHMAMCPeak && + xAU5Conditions.isXCHMAMCTrendsUp && + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow)) + // + || + // + (xAU5Conditions.isXCHMALCPeak && + (xAU5Conditions.isXCHMALCTrendsUp && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow))) + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXCHMAMCPeak && + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow)) + // + || + // + (xAU5Conditions.isXCHMALCVale && + xAU5Conditions.isXCHLHSCMCHHSame && + xAU5Conditions.isXLHHighAttachedHH) + // + || + // + (xAU5Conditions.isXOBDSwingHigh && + xAU5Conditions.isXTMEndBullish && + xAU5Conditions.isXAMABullish && + xAU5Conditions.isXTDBullOverBear && + xAU5Conditions.isXTDSignalOverBear && + xAU5Conditions.isXCHLHSCMCHHSame && + xAU5Conditions.isXCHLHMCLCLLSame && + (xAU5Conditions.isXCHMALCFastUnderSlow || + xAU5Conditions.isXCHMALCFastCrossedUnderSlow)) + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + (xAU5Conditions.isXLHHHIncreased && + xAU5Conditions.isXCHLHSCMCHHSame && + (xAU5Conditions.isXCHMALCFastUnderSlow || + xAU5Conditions.isXCHMALCFastCrossedUnderSlow)) + // + || + // + (xAU5Conditions.isXCHMAMCPeak && + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow)) + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XSTFI Short Signal Checking ... +bool XAU5XSTFIHasShortSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXSTFIEnableSignaller || + !xAU5MXSTFIAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XOBDLH Long Signal Checking ... +bool XAU5XOBDLHHasLongSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXOBDLHEnableSignaller || + !xAU5MXOBDLHAllowLongSignals) + { + return result; + } + + // + XAU5MarketConditions xAU5Conditions2 = XAU5GenerateMarketConditions(2); + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + xAU5Conditions2.isXOBDSwingLow && + xAU5Conditions2.isXLHLowAttachedLL && + xLHLLBuffer[1] >= xLHLLBuffer[2] + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + XAU5ReadyForLong( + true, // XCHMA Min + true, // XCHMA Max + false, // XCHMA Cycles + false, // XCHMA Peaks + false, // XCHMA Trend Powers + false, // XOBD + false // XTS + ) + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + (xAU5Conditions.isXTMVale && + xAU5Conditions.isXAMAVale && + xAU5Conditions.isXCHMASCVale && + xAU5Conditions.isXCHMAMCVale && + xAU5Conditions.isXCHLHSCMCLLSame) + // + || + // + (xAU5Conditions.isXCHMALCPeak && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + || + // + ((xAU5Conditions.isXCHMASCFastUnderSlow || + xAU5Conditions.isXCHMASCFastCrossedUnderSlow) && + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow)) + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + (xAU5Conditions.isXTMVale && + xAU5Conditions.isXTMBearish && + xAU5Conditions.isXAMAVale && + xAU5Conditions.isXAMABearish && + xAU5Conditions.isXLHHHDecreased) + // + || + // + (xAU5Conditions.isXCHMALCPeak && + xAU5Conditions.isXCHMALCTrendsDown && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + || + // + (xAU5Conditions.isXTMVale && + xAU5Conditions.isXAMAVale && + xAU5Conditions.isXCHLHSameLLs && + xAU5Conditions.isXTDSignalVale && + xAU5Conditions.isXTDBullishVale) + // + || + // + ((xAU5Conditions.isXCHMASCFastUnderSlow || + xAU5Conditions.isXCHMASCFastCrossedUnderSlow) && + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow) && + (xAU5Conditions.isXCHMALCFastUnderSlow || + xAU5Conditions.isXCHMALCFastCrossedUnderSlow)) + // + || + // + (xAU5Conditions.isXTMVale && + xAU5Conditions.isXAMAVale && + xAU5Conditions.isXTMBearish && + xAU5Conditions.isXAMABearish && + xAU5Conditions.isXCHMASCVale && + xAU5Conditions.isXCHMAMCVale && + xAU5Conditions.isXCHMALCVale && + xAU5Conditions.isXFIUnderZero && + xAU5Conditions.isXCHLHSameLLs && + xAU5Conditions.isXTDBullUnderBear && + xAU5Conditions.isXTDSignalUnderBear) + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XOBDLH Short Signal Checking ... +bool XAU5XOBDLHHasShortSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXOBDLHEnableSignaller || + !xAU5MXOBDLHAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XCHMACC Long Signal Checking ... +bool XAU5XCHMACCHasLongSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXCHMACCEnableSignaller || + !xAU5MXCHMACCAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + xCHMAScFastBuffer[1] > xCHMAScSlowBuffer[1] && + xCHMAMcFastBuffer[1] > xCHMAMcSlowBuffer[1] && + xCHMALcFastBuffer[1] > xCHMALcSlowBuffer[1] && + // + xCHMAScFastBuffer[2] > xCHMAScSlowBuffer[2] && + xCHMAMcFastBuffer[2] > xCHMAMcSlowBuffer[2] && + xCHMALcFastBuffer[2] > xCHMALcSlowBuffer[2] && + // + !( + // + xCHMAScFastBuffer[3] > xCHMAScSlowBuffer[3] && + xCHMAMcFastBuffer[3] > xCHMAMcSlowBuffer[3] && + xCHMALcFastBuffer[3] > xCHMALcSlowBuffer[3] + // + ) + // + && + // + xAU5Conditions.isXCHMASCOverMax && + !xAU5Conditions.isXCHMASCUnderMax + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + XAU5ReadyForLong() + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXCHMALCPeak && + (xAU5Conditions.isXCHMALCTrendsUp || + xAU5Conditions.isXCHMALCTrendsDown) && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXTSAllSame && + xAU5Conditions.isXTSCurrentMin && + xAU5Conditions.isXTSCurrentMax) + // + || + // + (xAU5Conditions.isXCHMALCPeak && + xAU5Conditions.isXCHMALCTrendsUp && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + (xAU5Conditions.isXLHLLIncreased && + xAU5Conditions.isXCHLHMCLCHHSame && + (xAU5Conditions.isXCHMASCTrendsDown && + (xAU5Conditions.isXCHMASCFastOverSlow || + xAU5Conditions.isXCHMASCFastCrossedOverSlow))) + // + || + // + (xAU5Conditions.isXCHMALCPeak && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XCHMACC Short Signal Checking ... +bool XAU5XCHMACCHasShortSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXCHMACCEnableSignaller || + !xAU5MXCHMACCAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XCHMACMN Long Signal Checking ... +bool XAU5XCHMACMNHasLongSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXCHMACMNEnableSignaller || + !xAU5MXCHMACMNAllowLongSignals) + { + return result; + } + + // + ENUM_XCHMA_CYCLES cycles[]; + Add( + X_XCHMA_CYCLE_MEDIUM, + cycles); + Add( + X_XCHMA_CYCLE_LONG, + cycles); + + // + double xCHMANonSCMax2 = XCHMAGetCyclesMaxValue(2, cycles); + double xCHMANonSCMin2 = XCHMAGetCyclesMinValue(2, cycles); + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + xAU5Conditions.isXCHMASCCrossedOverMin && + xCHMAScFastBuffer[2] < xCHMANonSCMin2 && + xCHMAScSlowBuffer[2] < xCHMANonSCMin2 + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + XAU5ReadyForLong( + true, // XCHMA Min + true, // XCHMA Max + false, // XCHMA Cycles + false, // XCHMA Peaks + false, // XCHMA Trend Powers + true, // XOBD + true // XTS + ) + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + (xAU5Conditions.isXLHLLIncreased && + xAU5Conditions.isXAMAStartBullish && + xAU5Conditions.isXTDSignalUnderBear && + xAU5Conditions.isXTDBullCrossedOverBear && + (xAU5Conditions.isXCHMALCFastUnderSlow || + xAU5Conditions.isXCHMALCFastCrossedUnderSlow)) + // + || + // + (xAU5Conditions.isXCHMALCVale && + xAU5Conditions.isXAMANeutural && + xAU5Conditions.isXTMStartBullish) + // + || + // + ((xAU5Conditions.isXCHMASCFastUnderSlow || + xAU5Conditions.isXCHMASCFastCrossedUnderSlow) && + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow) && + (xAU5Conditions.isXCHMALCFastUnderSlow || + xAU5Conditions.isXCHMALCFastCrossedUnderSlow)) + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXTMBullish && + xAU5Conditions.isXAMABullish && + xAU5Conditions.isXTDSignalVale && + xAU5Conditions.isXTDBullishVale && + xAU5Conditions.isXTDBullOverBear && + xAU5Conditions.isXTDSignalOverBear) + // + || + // + (xAU5Conditions.isXCHMASCPeak && + (xAU5Conditions.isXCHMASCFastOverSlow || + xAU5Conditions.isXCHMASCFastCrossedOverSlow)) + // + || + // + (xAU5Conditions.isXCHMALCVale && + xAU5Conditions.isXTSCurrentMax && + xAU5Conditions.isXTMStartBullish && + xAU5Conditions.isXFICrossedOverZero) + // + || + // + ((xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow) && + (xAU5Conditions.isXCHMALCFastUnderSlow || + xAU5Conditions.isXCHMALCFastCrossedUnderSlow)) + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXCHLHSCMCHHSame && + xAU5Conditions.isXTDBullUnderBear && + xAU5Conditions.isXLHHighAttachedHH && + xAU5Conditions.isXTDSignalUnderBear) + // + || + // + ((xAU5Conditions.isXCHMASCFastUnderSlow || + xAU5Conditions.isXCHMASCFastCrossedUnderSlow) && + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow) && + (xAU5Conditions.isXCHMALCFastUnderSlow || + xAU5Conditions.isXCHMALCFastCrossedUnderSlow)) + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + ((xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow) && + (xAU5Conditions.isXCHMALCFastUnderSlow || + xAU5Conditions.isXCHMALCFastCrossedUnderSlow)) + // + || + // + (xAU5Conditions.isXCHMALCVale && + xAU5Conditions.isXCHMALCTrendsUp && + (xAU5Conditions.isXCHMALCFastUnderSlow || + xAU5Conditions.isXCHMALCFastCrossedUnderSlow)) + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XCHMACMN Short Signal Checking ... +bool XAU5XCHMACMNHasShortSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXCHMACMNEnableSignaller || + !xAU5MXCHMACMNAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XCHMACMX Long Signal Checking ... +bool XAU5XCHMACMXHasLongSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXCHMACMXEnableSignaller || + !xAU5MXCHMACMXAllowLongSignals) + { + return result; + } + + // + ENUM_XCHMA_CYCLES cycles[]; + Add( + X_XCHMA_CYCLE_MEDIUM, + cycles); + Add( + X_XCHMA_CYCLE_LONG, + cycles); + + // + double xCHMANonSCMax2 = XCHMAGetCyclesMaxValue(2, cycles); + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + xAU5Conditions.isXCHMASCCrossedOverMax && + xCHMAScFastBuffer[2] < xCHMANonSCMax2 && + xCHMAScSlowBuffer[2] < xCHMANonSCMax2 && + MathAbs(xCHMANonSCMax2 - xCHMAScFastBuffer[2]) > MathAbs(xCHMAScFastBuffer[2] - xCHMAScSlowBuffer[2]) && + MathAbs(xCHMANonSCMax2 - xCHMAScSlowBuffer[2]) > MathAbs(xCHMAScFastBuffer[2] - xCHMAScSlowBuffer[2]) + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + XAU5ReadyForLong( + true, // XCHMA Min + true, // XCHMA Max + false, // XCHMA Cycles + false, // XCHMA Peaks + false, // XCHMA Trend Powers + true, // XOBD + true // XTS + ) + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXTMNeutural && + xAU5Conditions.isXTSCurrentMin && + xAU5Conditions.isXAMAEndBearish && + xAU5Conditions.isXCHLHMCLCHHSame) + // + || + // + (xAU5Conditions.isXCHMAMCPeak && + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow)) + // + || + // + (xAU5Conditions.isXCHMALCPeak && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXTMNeutural && + xAU5Conditions.isXAMANeutural && + xAU5Conditions.isXTDBearishVale && + xAU5Conditions.isXCHLHMCLCHHSame) + // + || + // + ((xAU5Conditions.isXCHMAMCPeak && + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow)) || + (xAU5Conditions.isXCHMALCPeak && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow))) + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XCHMACMX Short Signal Checking ... +bool XAU5XCHMACMXHasShortSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXCHMACMXEnableSignaller || + !xAU5MXCHMACMXAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// END Signal Providers ... +// + +// +// START Utilities ... +// + +// +// Converts Market Conditions to Specific String Representation ... +string XAU5GetConditionsString( + XAU5MarketConditions &condition, // Specify Conditiond + string separator = ",", // Specify Separator + bool ignoreFalses = true // Ignore False Conditions +) +{ + // + XAU5MarketConditions mConditions = {}; + + // + mConditions = condition; + + // + string result = "\n"; + + // + // XOBD ... + result += + "| XOBD |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXOBDSwingLow)) + { + result += "isXOBDSwingLow: " + (string)mConditions.isXOBDSwingLow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXOBDSwingHigh)) + { + result += "isXOBDSwingHigh: " + (string)mConditions.isXOBDSwingHigh + separator; + } + + // + // Separator ... + result += separator; + + // + // XTM ... + result += + "| XTM |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMPeak)) + { + result += "isXTMPeak: " + (string)mConditions.isXTMPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMVale)) + { + result += "isXTMVale: " + (string)mConditions.isXTMVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMStartBullish)) + { + result += "isXTMStartBullish: " + (string)mConditions.isXTMStartBullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMStartBullishAfterNeutural)) + { + result += "isXTMStartBullishAfterNeutural: " + (string)mConditions.isXTMStartBullishAfterNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMBullish)) + { + result += "isXTMBullish: " + (string)mConditions.isXTMBullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMEndBullish)) + { + result += "isXTMEndBullish: " + (string)mConditions.isXTMEndBullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMEndBullishByNeutural)) + { + result += "isXTMEndBullishByNeutural: " + (string)mConditions.isXTMEndBullishByNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMStartBearish)) + { + result += "isXTMStartBearish: " + (string)mConditions.isXTMStartBearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMStartBearishAfterNeutural)) + { + result += "isXTMStartBearishAfterNeutural: " + (string)mConditions.isXTMStartBearishAfterNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMBearish)) + { + result += "isXTMBearish: " + (string)mConditions.isXTMBearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMEndBearish)) + { + result += "isXTMEndBearish: " + (string)mConditions.isXTMEndBearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMEndBearishByNeutural)) + { + result += "isXTMEndBearishByNeutural: " + (string)mConditions.isXTMEndBearishByNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMNeutural)) + { + result += "isXTMNeutural: " + (string)mConditions.isXTMNeutural + separator; + } + + // + // Separator ... + result += separator; + + // + // XAMA ... + result += + "| XAMA |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAPeak)) + { + result += "isXAMAPeak: " + (string)mConditions.isXAMAPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAVale)) + { + result += "isXAMAVale: " + (string)mConditions.isXAMAVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAStartBullish)) + { + result += "isXAMAStartBullish: " + (string)mConditions.isXAMAStartBullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAStartBullishAfterNeutural)) + { + result += "isXAMAStartBullishAfterNeutural: " + (string)mConditions.isXAMAStartBullishAfterNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMABullish)) + { + result += "isXAMABullish: " + (string)mConditions.isXAMABullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAEndBullish)) + { + result += "isXAMAEndBullish: " + (string)mConditions.isXAMAEndBullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAEndBullishByNeutural)) + { + result += "isXAMAEndBullishByNeutural: " + (string)mConditions.isXAMAEndBullishByNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAStartBearish)) + { + result += "isXAMAStartBearish: " + (string)mConditions.isXAMAStartBearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAStartBearishAfterNeutural)) + { + result += "isXAMAStartBearishAfterNeutural: " + (string)mConditions.isXAMAStartBearishAfterNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMABearish)) + { + result += "isXAMABearish: " + (string)mConditions.isXAMABearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAEndBearish)) + { + result += "isXAMAEndBearish: " + (string)mConditions.isXAMAEndBearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAEndBearishByNeutural)) + { + result += "isXAMAEndBearishByNeutural: " + (string)mConditions.isXAMAEndBearishByNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMANeutural)) + { + result += "isXAMANeutural: " + (string)mConditions.isXAMANeutural + separator; + } + + // + // Separator ... + result += separator; + + // + // XTD ... + result += + "| XTD |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalPeak)) + { + result += "isXTDSignalPeak: " + (string)mConditions.isXTDSignalPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalVale)) + { + result += "isXTDSignalVale: " + (string)mConditions.isXTDSignalVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullishPeak)) + { + result += "isXTDBullishPeak: " + (string)mConditions.isXTDBullishPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullishVale)) + { + result += "isXTDBullishVale: " + (string)mConditions.isXTDBullishVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBearishPeak)) + { + result += "isXTDBearishPeak: " + (string)mConditions.isXTDBearishPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBearishVale)) + { + result += "isXTDBearishVale: " + (string)mConditions.isXTDBearishVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullOverBear)) + { + result += "isXTDBullOverBear: " + (string)mConditions.isXTDBullOverBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullUnderBear)) + { + result += "isXTDBullUnderBear: " + (string)mConditions.isXTDBullUnderBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalOverBear)) + { + result += "isXTDSignalOverBear: " + (string)mConditions.isXTDSignalOverBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalUnderBear)) + { + result += "isXTDSignalUnderBear: " + (string)mConditions.isXTDSignalUnderBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullCrossedOverBear)) + { + result += "isXTDBullCrossedOverBear: " + (string)mConditions.isXTDBullCrossedOverBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullCrossedUnderBear)) + { + result += "isXTDBullCrossedUnderBear: " + (string)mConditions.isXTDBullCrossedUnderBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalCrossedOverBear)) + { + result += "isXTDSignalCrossedOverBear: " + (string)mConditions.isXTDSignalCrossedOverBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalCrossedUnderBear)) + { + result += "isXTDSignalCrossedUnderBear: " + (string)mConditions.isXTDSignalCrossedUnderBear + separator; + } + + // + // Separator ... + result += separator; + + // + // XFI ... + result += + "| XFI |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFIPeak)) + { + result += "isXFIPeak: " + (string)mConditions.isXFIPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFIVale)) + { + result += "isXFIVale: " + (string)mConditions.isXFIVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFIOverZero)) + { + result += "isXFIOverZero: " + (string)mConditions.isXFIOverZero + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFIUnderZero)) + { + result += "isXFIUnderZero: " + (string)mConditions.isXFIUnderZero + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFICrossedOverZero)) + { + result += "isXFICrossedOverZero: " + (string)mConditions.isXFICrossedOverZero + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFICrossedUnderZero)) + { + result += "isXFICrossedUnderZero: " + (string)mConditions.isXFICrossedUnderZero + separator; + } + + // + // Separator ... + result += separator; + + // + // XTS ... + result += + "| XTS |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSAllSame)) + { + result += "isXTSAllSame: " + (string)mConditions.isXTSAllSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentMin)) + { + result += "isXTSCurrentMin: " + (string)mConditions.isXTSCurrentMin + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentMax)) + { + result += "isXTSCurrentMax: " + (string)mConditions.isXTSCurrentMax + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentOverFarest)) + { + result += "isXTSCurrentOverFarest: " + (string)mConditions.isXTSCurrentOverFarest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentOverNearest)) + { + result += "isXTSCurrentOverNearest: " + (string)mConditions.isXTSCurrentOverNearest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentOverMediest)) + { + result += "isXTSCurrentOverMediest: " + (string)mConditions.isXTSCurrentOverMediest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentUnderFarest)) + { + result += "isXTSCurrentUnderFarest: " + (string)mConditions.isXTSCurrentUnderFarest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentUnderNearest)) + { + result += "isXTSCurrentUnderNearest: " + (string)mConditions.isXTSCurrentUnderNearest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentUnderMediest)) + { + result += "isXTSCurrentUnderMediest: " + (string)mConditions.isXTSCurrentUnderMediest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedOverFarest)) + { + result += "isXTSCurrentCrossedOverFarest: " + (string)mConditions.isXTSCurrentCrossedOverFarest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedOverNearest)) + { + result += "isXTSCurrentCrossedOverNearest: " + (string)mConditions.isXTSCurrentCrossedOverNearest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedOverMediest)) + { + result += "isXTSCurrentCrossedOverMediest: " + (string)mConditions.isXTSCurrentCrossedOverMediest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedUnderFarest)) + { + result += "isXTSCurrentCrossedUnderFarest: " + (string)mConditions.isXTSCurrentCrossedUnderFarest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedUnderNearest)) + { + result += "isXTSCurrentCrossedUnderNearest: " + (string)mConditions.isXTSCurrentCrossedUnderNearest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedUnderMediest)) + { + result += "isXTSCurrentCrossedUnderMediest: " + (string)mConditions.isXTSCurrentCrossedUnderMediest + separator; + } + + // + // Separator ... + result += separator; + + // + // XLH ... + result += + "| XLH |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHHHIncreased)) + { + result += "isXLHHHIncreased: " + (string)mConditions.isXLHHHIncreased + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHHHDecreased)) + { + result += "isXLHHHDecreased: " + (string)mConditions.isXLHHHDecreased + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHLLIncreased)) + { + result += "isXLHLLIncreased: " + (string)mConditions.isXLHLLIncreased + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHLLDecreased)) + { + result += "isXLHLLDecreased: " + (string)mConditions.isXLHLLDecreased + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHHighAttachedHH)) + { + result += "isXLHHighAttachedHH: " + (string)mConditions.isXLHHighAttachedHH + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHLowAttachedLL)) + { + result += "isXLHLowAttachedLL: " + (string)mConditions.isXLHLowAttachedLL + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHHHSameInLength)) + { + result += "isXLHHHSameInLength: " + (string)mConditions.isXLHHHSameInLength + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHLLSameInLength)) + { + result += "isXLHLLSameInLength: " + (string)mConditions.isXLHLLSameInLength + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHPriceCrossedOverSignal)) + { + result += "isXLHPriceCrossedOverSignal: " + (string)mConditions.isXLHPriceCrossedOverSignal + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHPriceOverSignal)) + { + result += "isXLHPriceOverSignal: " + (string)mConditions.isXLHPriceOverSignal + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHPriceCrossedUnderSignal)) + { + result += "isXLHPriceCrossedUnderSignal: " + (string)mConditions.isXLHPriceCrossedUnderSignal + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHPriceUnderSignal)) + { + result += "isXLHPriceUnderSignal: " + (string)mConditions.isXLHPriceUnderSignal + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHPriceInSignalRange)) + { + result += "isXLHPriceInSignalRange: " + (string)mConditions.isXLHPriceInSignalRange + separator; + } + + // + // Separator ... + result += separator; + + // + // XRSI ... + result += + "| XRSI |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSIPeak)) + { + result += "isXRSIPeak: " + (string)mConditions.isXRSIPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSIVale)) + { + result += "isXRSIVale: " + (string)mConditions.isXRSIVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSICrossedOverLongExit)) + { + result += "isXRSICrossedOverLongExit: " + (string)mConditions.isXRSICrossedOverLongExit + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSICrossedOverLongEntry)) + { + result += "isXRSICrossedOverLongEntry: " + (string)mConditions.isXRSICrossedOverLongEntry + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSICrossedUnderShortExit)) + { + result += "isXRSICrossedUnderShortExit: " + (string)mConditions.isXRSICrossedUnderShortExit + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSICrossedUnderShortEntry)) + { + result += "isXRSICrossedUnderShortEntry: " + (string)mConditions.isXRSICrossedUnderShortEntry + separator; + } + + // + // Separator ... + result += separator; + + // + // XCHLH ... + result += + "| XCHLH |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSameHHs)) + { + result += "isXCHLHSameHHs: " + (string)mConditions.isXCHLHSameHHs + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSameLLs)) + { + result += "isXCHLHSameLLs: " + (string)mConditions.isXCHLHSameLLs + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSCMCHHSame)) + { + result += "isXCHLHSCMCHHSame: " + (string)mConditions.isXCHLHSCMCHHSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSCMCLLSame)) + { + result += "isXCHLHSCMCLLSame: " + (string)mConditions.isXCHLHSCMCLLSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSCLCHHSame)) + { + result += "isXCHLHSCLCHHSame: " + (string)mConditions.isXCHLHSCLCHHSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSCLCLLSame)) + { + result += "isXCHLHSCLCLLSame: " + (string)mConditions.isXCHLHSCLCLLSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHMCLCHHSame)) + { + result += "isXCHLHMCLCHHSame: " + (string)mConditions.isXCHLHMCLCHHSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHMCLCLLSame)) + { + result += "isXCHLHMCLCLLSame: " + (string)mConditions.isXCHLHMCLCLLSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHMCOnTopOfLC)) + { + result += "isXCHLHMCOnTopOfLC: " + (string)mConditions.isXCHLHMCOnTopOfLC + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHMCInBottomOfLC)) + { + result += "isXCHLHMCInBottomOfLC: " + (string)mConditions.isXCHLHMCInBottomOfLC + separator; + } + + // + // Separator ... + result += separator; + + // + // XCHMA ... + result += + "| XCHMA |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCOverMax)) + { + result += "isXCHMASCOverMax: " + (string)mConditions.isXCHMASCOverMax + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCOverMin)) + { + result += "isXCHMASCOverMin: " + (string)mConditions.isXCHMASCOverMin + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCUnderMax)) + { + result += "isXCHMASCUnderMax: " + (string)mConditions.isXCHMASCUnderMax + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCUnderMin)) + { + result += "isXCHMASCUnderMin: " + (string)mConditions.isXCHMASCUnderMin + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCCrossedOverMax)) + { + result += "isXCHMASCCrossedOverMax: " + (string)mConditions.isXCHMASCCrossedOverMax + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCCrossedUnderMax)) + { + result += "isXCHMASCCrossedUnderMax: " + (string)mConditions.isXCHMASCCrossedUnderMax + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCCrossedOverMin)) + { + result += "isXCHMASCCrossedOverMin: " + (string)mConditions.isXCHMASCCrossedOverMin + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCCrossedUnderMin)) + { + result += "isXCHMASCCrossedUnderMin: " + (string)mConditions.isXCHMASCCrossedUnderMin + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCPeak)) + { + result += "isXCHMASCPeak: " + (string)mConditions.isXCHMASCPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCVale)) + { + result += "isXCHMASCVale: " + (string)mConditions.isXCHMASCVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCTrendsUp)) + { + result += "isXCHMASCTrendsUp: " + (string)mConditions.isXCHMASCTrendsUp + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCTrendsDown)) + { + result += "isXCHMASCTrendsDown: " + (string)mConditions.isXCHMASCTrendsDown + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCFastOverSlow)) + { + result += "isXCHMASCFastOverSlow: " + (string)mConditions.isXCHMASCFastOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCFastUnderSlow)) + { + result += "isXCHMASCFastUnderSlow: " + (string)mConditions.isXCHMASCFastUnderSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCFastCrossedOverSlow)) + { + result += "isXCHMASCFastCrossedOverSlow: " + (string)mConditions.isXCHMASCFastCrossedOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCFastCrossedUnderSlow)) + { + result += "isXCHMASCFastCrossedUnderSlow: " + (string)mConditions.isXCHMASCFastCrossedUnderSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCPeak)) + { + result += "isXCHMAMCPeak: " + (string)mConditions.isXCHMAMCPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCVale)) + { + result += "isXCHMAMCVale: " + (string)mConditions.isXCHMAMCVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCTrendsUp)) + { + result += "isXCHMAMCTrendsUp: " + (string)mConditions.isXCHMAMCTrendsUp + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCTrendsDown)) + { + result += "isXCHMAMCTrendsDown: " + (string)mConditions.isXCHMAMCTrendsDown + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCFastOverSlow)) + { + result += "isXCHMAMCFastOverSlow: " + (string)mConditions.isXCHMAMCFastOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCFastUnderSlow)) + { + result += "isXCHMAMCFastUnderSlow: " + (string)mConditions.isXCHMAMCFastUnderSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCFastCrossedOverSlow)) + { + result += "isXCHMAMCFastCrossedOverSlow: " + (string)mConditions.isXCHMAMCFastCrossedOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCFastCrossedUnderSlow)) + { + result += "isXCHMAMCFastCrossedUnderSlow: " + (string)mConditions.isXCHMAMCFastCrossedUnderSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCPeak)) + { + result += "isXCHMALCPeak: " + (string)mConditions.isXCHMALCPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCVale)) + { + result += "isXCHMALCVale: " + (string)mConditions.isXCHMALCVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCTrendsUp)) + { + result += "isXCHMALCTrendsUp: " + (string)mConditions.isXCHMALCTrendsUp + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCTrendsDown)) + { + result += "isXCHMALCTrendsDown: " + (string)mConditions.isXCHMALCTrendsDown + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCFastOverSlow)) + { + result += "isXCHMALCFastOverSlow: " + (string)mConditions.isXCHMALCFastOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCFastUnderSlow)) + { + result += "isXCHMALCFastUnderSlow: " + (string)mConditions.isXCHMALCFastUnderSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCFastCrossedOverSlow)) + { + result += "isXCHMALCFastCrossedOverSlow: " + (string)mConditions.isXCHMALCFastCrossedOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCFastCrossedUnderSlow)) + { + result += "isXCHMALCFastCrossedUnderSlow: " + (string)mConditions.isXCHMALCFastCrossedUnderSlow + separator; + } + + // + // Separator ... + result += separator; + + // + return result; +} + +void Add( + ENUM_XAU5_SIGNAL_PROVIDERS item, + ENUM_XAU5_SIGNAL_PROVIDERS &items[]) +{ + // + ArrayResize( + items, + ArraySize(items) + 1); + + // + items[ArraySize(items) - 1] = item; +} +// +// START Utilities ... +// \ No newline at end of file diff --git a/BKPS/Temp/xau5.indicators.provider.txt b/BKPS/Temp/xau5.indicators.provider.txt new file mode 100644 index 0000000..634f3e0 --- /dev/null +++ b/BKPS/Temp/xau5.indicators.provider.txt @@ -0,0 +1,8161 @@ +/////////////////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 XAU5 Signal Provider Indicators Library +// ---------------------------------------------------------------- +// +// 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 Define Enums ... +// + +// +enum ENUM_XAU5_SIGNAL_PROVIDERS +{ + // + // XSP Expert Support Mechanism ... + XSP, + // + // XTD ... + XTD, + // + // XTAM ... + XTAM, + // + // XSI ... + XSI, + // + // XSTFI ... + XSTFI, + // + // XOBDLH ... + XOBDLH, + // + // XCHMACC ... + XCHMACC, + // + // XCHMACMN ... + XCHMACMN, + // + // XCHMACMX ... + XCHMACMX, +}; + +// +// Represent Market Conditions ... +struct XAU5MarketConditions +{ + // + // XTM ... + bool isXTMPeak; + bool isXTMVale; + bool isXTMBullish; + bool isXTMBearish; + bool isXTMNeutural; + bool isXTMEndBullish; + bool isXTMEndBearish; + bool isXTMStartBullish; + bool isXTMStartBearish; + bool isXTMEndBullishByNeutural; + bool isXTMEndBearishByNeutural; + bool isXTMStartBullishAfterNeutural; + bool isXTMStartBearishAfterNeutural; + + // + // XAMA ... + bool isXAMAPeak; + bool isXAMAVale; + bool isXAMABullish; + bool isXAMABearish; + bool isXAMANeutural; + bool isXAMAEndBullish; + bool isXAMAEndBearish; + bool isXAMAStartBullish; + bool isXAMAStartBearish; + bool isXAMAEndBullishByNeutural; + bool isXAMAEndBearishByNeutural; + bool isXAMAStartBullishAfterNeutural; + bool isXAMAStartBearishAfterNeutural; + + // + // XLH ... + bool isXLHHHIncreased; + bool isXLHHHDecreased; + bool isXLHLLIncreased; + bool isXLHLLDecreased; + bool isXLHLowAttachedLL; + bool isXLHHighAttachedHH; + bool isXLHHHSameInLength; + bool isXLHLLSameInLength; + bool isXLHPriceOverSignal; + bool isXLHPriceUnderSignal; + bool isXLHPriceInSignalRange; + bool isXLHPriceCrossedOverSignal; + bool isXLHPriceCrossedUnderSignal; + + // + // XTD ... + bool isXTDSignalPeak; + bool isXTDSignalVale; + bool isXTDBullishPeak; + bool isXTDBullishVale; + bool isXTDBearishPeak; + bool isXTDBearishVale; + bool isXTDBullOverBear; + bool isXTDBullUnderBear; + bool isXTDSignalOverBear; + bool isXTDSignalUnderBear; + bool isXTDBullCrossedOverBear; + bool isXTDBullCrossedUnderBear; + bool isXTDSignalCrossedOverBear; + bool isXTDSignalCrossedUnderBear; + + // + // XFI ... + bool isXFIPeak; + bool isXFIVale; + bool isXFICrossedOverZero; + bool isXFIOverZero; + bool isXFICrossedUnderZero; + bool isXFIUnderZero; + + // + // XTS ... + bool isXTSAllSame; + bool isXTSCurrentMin; + bool isXTSCurrentMax; + bool isXTSCurrentOverFarest; + bool isXTSCurrentOverNearest; + bool isXTSCurrentOverMediest; + bool isXTSCurrentUnderFarest; + bool isXTSCurrentUnderNearest; + bool isXTSCurrentUnderMediest; + bool isXTSCurrentCrossedOverFarest; + bool isXTSCurrentCrossedOverNearest; + bool isXTSCurrentCrossedOverMediest; + bool isXTSCurrentCrossedUnderFarest; + bool isXTSCurrentCrossedUnderNearest; + bool isXTSCurrentCrossedUnderMediest; + + // + // XRSI ... + bool isXRSIPeak; + bool isXRSIVale; + bool isXRSICrossedOverLongExit; + bool isXRSICrossedOverLongEntry; + bool isXRSICrossedUnderShortExit; + bool isXRSICrossedUnderShortEntry; + + // + // XOBD ... + bool isXOBDSwingLow; + bool isXOBDSwingHigh; + + // + // XCHLH ... + // + bool isXCHLHSameHHs; + bool isXCHLHSameLLs; + // + bool isXCHLHSCMCHHSame; + bool isXCHLHSCMCLLSame; + // + bool isXCHLHSCLCHHSame; + bool isXCHLHSCLCLLSame; + // + bool isXCHLHMCLCHHSame; + bool isXCHLHMCLCLLSame; + // + bool isXCHLHMCOnTopOfLC; + bool isXCHLHMCInBottomOfLC; + + // + // XCHMA ... + // + bool isXCHMASCOverMax; + bool isXCHMASCOverMin; + bool isXCHMASCUnderMax; + bool isXCHMASCUnderMin; + // + bool isXCHMASCCrossedOverMax; + bool isXCHMASCCrossedUnderMax; + bool isXCHMASCCrossedOverMin; + bool isXCHMASCCrossedUnderMin; + // + bool isXCHMASCPeak; + bool isXCHMASCVale; + bool isXCHMASCTrendsUp; + bool isXCHMASCTrendsDown; + bool isXCHMASCFastOverSlow; + bool isXCHMASCFastUnderSlow; + bool isXCHMASCFastCrossedOverSlow; + bool isXCHMASCFastCrossedUnderSlow; + // + bool isXCHMAMCPeak; + bool isXCHMAMCVale; + bool isXCHMAMCTrendsUp; + bool isXCHMAMCTrendsDown; + bool isXCHMAMCFastOverSlow; + bool isXCHMAMCFastUnderSlow; + bool isXCHMAMCFastCrossedOverSlow; + bool isXCHMAMCFastCrossedUnderSlow; + // + bool isXCHMALCPeak; + bool isXCHMALCVale; + bool isXCHMALCTrendsUp; + bool isXCHMALCTrendsDown; + bool isXCHMALCFastOverSlow; + bool isXCHMALCFastUnderSlow; + bool isXCHMALCFastCrossedOverSlow; + bool isXCHMALCFastCrossedUnderSlow; +}; + +// +// END Define Enums ... +// + +// +// Include Provider Inputs ... +#include "x-saherelm.xau5.provider.inputs.lib.mq5" + +// +// Signallers ... +input group "XAU5 Signallers"; + +// +// XTD ... +input group "XAU5 XTD Signaller"; +input bool xAU5XTDEnableSignaller = true; // Enable Signaller +// input bool xAU5XTDEnableTPSL = false; // Enable TP/SL +input bool xAU5XTDAllowLongSignals = true; // Enable Long Signals +input bool xAU5XTDAllowShortSignals = true; // Enable Short Signals + +// +// XTAM ... +input group "XAU5 XTAM Signaller"; +input bool xAU5XTAMEnableSignaller = true; // Enable Signaller +// input bool xAU5XTAMEnableTPSL = false; // Enable TP/SL +input bool xAU5XTAMAllowLongSignals = true; // Enable Long Signals +input bool xAU5XTAMAllowShortSignals = true; // Enable Short Signals + +// +// XSI ... +input group "XAU5 XSI Signaller"; +input bool xAU5XSIEnableSignaller = true; // Enable Signaller +// input bool xAU5SIXEnableTPSL = false; // Enable TP/SL +input bool xAU5XSIAllowLongSignals = true; // Enable Long Signals +input bool xAU5XSIAllowShortSignals = true; // Enable Short Signals + +// +// XSTFI ... +input group "XAU5 XSTFI Signaller"; +input bool xAU5XSTFIEnableSignaller = true; // Enable Signaller +// input bool xAU5XSTFIEnableTPSL = false; // Enable TP/SL +input bool xAU5XSTFIAllowLongSignals = true; // Enable Long Signals +input bool xAU5XSTFIAllowShortSignals = true; // Enable Short Signals + +// +// XOBDLH ... +input group "XAU5 XOBDLH Signaller"; +input bool xAU5XOBDLHEnableSignaller = true; // Enable Signaller +// input bool xAU5XOBDLHEnableTPSL = false; // Enable TP/SL +input bool xAU5XOBDLHAllowLongSignals = true; // Enable Long Signals +input bool xAU5XOBDLHAllowShortSignals = true; // Enable Short Signals + +// +// XCHMACC ... +input group "XAU5 XCHMACC Signaller"; +input bool xAU5XCHMACCEnableSignaller = true; // Enable Signaller +// input bool xAU5XCHMACCEnableTPSL = false; // Enable TP/SL +input bool xAU5XCHMACCAllowLongSignals = true; // Enable Long Signals +input bool xAU5XCHMACCAllowShortSignals = true; // Enable Short Signals + +// +// XCHMACMX ... +input group "XAU5 XCHMACMX Signaller"; +input bool xAU5XCHMACMXEnableSignaller = true; // Enable Signaller +// input bool xAU5XCHMACMXEnableTPSL = false; // Enable TP/SL +input bool xAU5XCHMACMXAllowLongSignals = true; // Enable Long Signals +input bool xAU5XCHMACMXAllowShortSignals = true; // Enable Short Signals + +// +// XCHMACMN ... +input group "XAU5 XCHMACMN Signaller"; +input bool xAU5XCHMACMNEnableSignaller = true; // Enable Signaller +// input bool xAU5XCHMACMNEnableTPSL = false; // Enable TP/SL +input bool xAU5XCHMACMNAllowLongSignals = true; // Enable Long Signals +input bool xAU5XCHMACMNAllowShortSignals = true; // Enable Short Signals + +// +// Imports all Indicators Helper here ... +// input group "XAU5 Provider Indicators"; + +// +#include "../Helpers/x-saherelm.xtm.indicator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xama.indicator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xlh.indicator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xtd.oscillator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xfi.oscillator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xts.oscillator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xobd.indicator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xrsi.oscillator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xchlh.oscillator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xchma.oscillator.helper.lib.mq5" + +// +bool xAU5IsTestMode = true; +int xAU5MaxLengthOfInputs = 0; +int xAU5CalculatedBars = 0; + +// +// Signaller Variables ... +// +// XTD ... +bool xAU5MXTDEnableSignaller = xAU5XTDEnableSignaller; +// bool xAU5MXTDEnableTPSL = xAU5XTDEnableTPSL; +bool xAU5MXTDAllowLongSignals = xAU5XTDAllowLongSignals; +bool xAU5MXTDAllowShortSignals = xAU5XTDAllowShortSignals; + +// +// XTAM ... +bool xAU5MXTAMEnableSignaller = xAU5XTAMEnableSignaller; +// bool xAU5MXTAMEnableTPSL = xAU5XTAMEnableTPSL; +bool xAU5MXTAMAllowLongSignals = xAU5XTAMAllowLongSignals; +bool xAU5MXTAMAllowShortSignals = xAU5XTAMAllowShortSignals; + +// +// XSI ... +bool xAU5MXSIEnableSignaller = xAU5XSIEnableSignaller; +// bool xAU5MSIXEnableTPSL = xAU5SIXEnableTPSL; +bool xAU5MXSIAllowLongSignals = xAU5XSIAllowLongSignals; +bool xAU5MXSIAllowShortSignals = xAU5XSIAllowShortSignals; + +// +// XSTFI ... +bool xAU5MXSTFIEnableSignaller = xAU5XSTFIEnableSignaller; +// bool xAU5MXSTFIEnableTPSL = xAU5XSTFIEnableTPSL; +bool xAU5MXSTFIAllowLongSignals = xAU5XSTFIAllowLongSignals; +bool xAU5MXSTFIAllowShortSignals = xAU5XSTFIAllowShortSignals; + +// +// XOBDLH ... +bool xAU5MXOBDLHEnableSignaller = xAU5XOBDLHEnableSignaller; +// bool xAU5MXOBDLHEnableTPSL = xAU5XOBDLHEnableTPSL; +bool xAU5MXOBDLHAllowLongSignals = xAU5XOBDLHAllowLongSignals; +bool xAU5MXOBDLHAllowShortSignals = xAU5XOBDLHAllowShortSignals; + +// +// XCHMACC ... +bool xAU5MXCHMACCEnableSignaller = xAU5XCHMACCEnableSignaller; +// bool xAU5MXCHMACCEnableTPSL = xAU5XCHMACCEnableTPSL; +bool xAU5MXCHMACCAllowLongSignals = xAU5XCHMACCAllowLongSignals; +bool xAU5MXCHMACCAllowShortSignals = xAU5XCHMACCAllowShortSignals; + +// +// XCHMAMX ... +bool xAU5MXCHMACMXEnableSignaller = xAU5XCHMACMXEnableSignaller; +// bool xAU5MXCHMACMXEnableTPSL = xAU5XCHMACMXEnableTPSL; +bool xAU5MXCHMACMXAllowLongSignals = xAU5XCHMACMXAllowLongSignals; +bool xAU5MXCHMACMXAllowShortSignals = xAU5XCHMACMXAllowShortSignals; + +// +// XCHMAMN ... +bool xAU5MXCHMACMNEnableSignaller = xAU5XCHMACMNEnableSignaller; +// bool xAU5MXCHMACMNEnableTPSL = xAU5XCHMACMNEnableTPSL; +bool xAU5MXCHMACMNAllowLongSignals = xAU5XCHMACMNAllowLongSignals; +bool xAU5MXCHMACMNAllowShortSignals = xAU5XCHMACMNAllowShortSignals; + +// +// Funded Next Resolve Guards ... +bool isXAU5OnFundedNext = true; + +// +// Here we Define some Global Market Variables to Analyse MArket Conditions +// using them at each time ... +XAU5MarketConditions xAU5Conditions = {}; + +// +// Validate Indicators Inputs ... +bool XAU5ValidateIndicatorsInputs() +{ + // + bool result = false; + + // + // XTM ... + result = XTMValidateInputs(); + if (!result) + { + return result; + } + + // + // XAMA ... + result = XAMAValidateInputs(); + if (!result) + { + return result; + } + + // + // XTD ... + result = XTDValidateInputs(); + if (!result) + { + return result; + } + + // + // XFI ... + result = XFIValidateInputs(); + if (!result) + { + return result; + } + + // + // XTS ... + result = XTSValidateInputs(); + if (!result) + { + return result; + } + + // + // XOBD ... + result = XOBDValidateInputs(); + if (!result) + { + return result; + } + + // + // XLH ... + result = XLHValidateInputs(); + if (!result) + { + return result; + } + + // + // XRSI ... + result = XRSIValidateInputs(); + if (!result) + { + return result; + } + + // + // XCHLH ... + result = XCHLHValidateInputs(); + if (!result) + { + return result; + } + + // + // XCHMA ... + result = XCHMAValidateInputs(); + if (!result) + { + return result; + } + + // + result = true; + + // + return result; +} + +// +// Init Indicators ... +bool XAU5InitIndicators() +{ + // + bool result = false; + + // + // Make it Enable when we need to Log Market Conditions ... + // xAU5IsTestMode = false; // IsRunningOnTestMode(); + + // + // Check and Calculate Max Length in Inputs ... + // + + // + // XTM ... + xAU5MaxLengthOfInputs = MathMax( + xTMMaPeriod, + xAU5NumberOfItemsPerTick); + + // + // XAMA ... + xAU5MaxLengthOfInputs = MathMax( + xAMALength, + xAU5NumberOfItemsPerTick); + xAU5MaxLengthOfInputs = MathMax( + xAMAFastEMA, + xAU5NumberOfItemsPerTick); + xAU5MaxLengthOfInputs = MathMax( + xAMASlowEMA, + xAU5NumberOfItemsPerTick); + + // + // XLH ... + xAU5MaxLengthOfInputs = MathMax( + xLHLength, + xAU5NumberOfItemsPerTick); + + // + // XTD ... + xAU5MaxLengthOfInputs = MathMax( + xTDLength, + xAU5MaxLengthOfInputs); + + // + // XFI ... + xAU5MaxLengthOfInputs = MathMax( + xFILength, + xAU5MaxLengthOfInputs); + + // + // XRSI ... + xAU5MaxLengthOfInputs = MathMax( + xRSILength, + xAU5MaxLengthOfInputs); + + // + // XOBD ... + xAU5MaxLengthOfInputs = MathMax( + xOBDLength, + xAU5MaxLengthOfInputs); + + // + // XCHLH ... + xAU5MaxLengthOfInputs = MathMax( + xCHLHLcLength, + xAU5MaxLengthOfInputs); + xAU5MaxLengthOfInputs = MathMax( + xCHLHMcLength, + xAU5MaxLengthOfInputs); + xAU5MaxLengthOfInputs = MathMax( + xCHLHScLength, + xAU5MaxLengthOfInputs); + + // + // XCHMA ... + xAU5MaxLengthOfInputs = MathMax( + xCHMAScFastLength, + xAU5MaxLengthOfInputs); + xAU5MaxLengthOfInputs = MathMax( + xCHMAScSlowLength, + xAU5MaxLengthOfInputs); + xAU5MaxLengthOfInputs = MathMax( + xCHMAMcFastLength, + xAU5MaxLengthOfInputs); + xAU5MaxLengthOfInputs = MathMax( + xCHMAMcSlowLength, + xAU5MaxLengthOfInputs); + xAU5MaxLengthOfInputs = MathMax( + xCHMALcFastLength, + xAU5MaxLengthOfInputs); + xAU5MaxLengthOfInputs = MathMax( + xCHMALcSlowLength, + xAU5MaxLengthOfInputs); + + // + // Validate Indicators Inputs before Initialization ... + result = XAU5ValidateIndicatorsInputs(); + if (!result) + { + return result; + } + + // + // Validate Signallers ... + + // + // XTD ... + bool isXTDEnable = + xAU5XTDEnableSignaller && + (xAU5XTDAllowLongSignals || + xAU5XTDAllowShortSignals); + + // + // XTAM ... + bool isXTAMEnable = + xAU5XTAMEnableSignaller && + (xAU5XTAMAllowLongSignals || + xAU5XTAMAllowShortSignals); + + // + // XSI ... + bool isXSIEnable = + xAU5XSIEnableSignaller && + (xAU5XSIAllowLongSignals || + xAU5XSIAllowShortSignals); + + // + // XSTFI ... + bool isXSTFIEnable = + xAU5XSTFIEnableSignaller && + (xAU5XSTFIAllowLongSignals || + xAU5XSTFIAllowShortSignals); + + // + // XOBDLH ... + bool isXOBDLHEnable = + xAU5XOBDLHEnableSignaller && + (xAU5XOBDLHAllowLongSignals || + xAU5XOBDLHAllowShortSignals); + + // + // XCHMACC ... + bool isXCHMACCEnable = + xAU5XCHMACCEnableSignaller && + (xAU5XCHMACCAllowLongSignals || + xAU5XCHMACCAllowShortSignals); + + // + // XCHMACMX ... + bool isXCHMACMXEnable = + xAU5XCHMACMXEnableSignaller && + (xAU5XCHMACMXAllowLongSignals || + xAU5XCHMACMXAllowShortSignals); + + // + // XCHMACMN ... + bool isXCHMACMNEnable = + xAU5XCHMACMNEnableSignaller && + (xAU5XCHMACMNAllowLongSignals || + xAU5XCHMACMNAllowShortSignals); + + // + bool hasSignaller = + // + isXTDEnable || + isXTAMEnable || + isXSIEnable || + isXSTFIEnable || + isXOBDLHEnable || + isXCHMACCEnable || + isXCHMACMXEnable || + isXCHMACMNEnable + // + ; + result = hasSignaller; + if (!result) + { + // + LogMessage("XAU5 doesn't enable any Signaller ..."); + + // + return result; + } + + // + // Initialize Indicator/Oscillator Handlers ... + ResetLastError(); + + // + // XTM Init ... + result = XTMInitHandlers(); + if (!result) + { + return result; + } + + // + // XAMA Init ... + result = XAMAInitHandlers(); + if (!result) + { + return result; + } + + // + // XLH Init ... + result = XLHInitHandlers(); + if (!result) + { + return result; + } + + // + // XTD Init ... + result = XTDInitHandlers(); + if (!result) + { + return result; + } + + // + // XFI Init ... + result = XFIInitHandlers(); + if (!result) + { + return result; + } + + // + // XTS Init ... + result = XTSInitHandlers(); + if (!result) + { + return result; + } + + // + // XRSI Init ... + result = XRSIInitHandlers(); + if (!result) + { + return result; + } + + // + // XOBD Init ... + result = XOBDInitHandlers(); + if (!result) + { + return result; + } + + // + // XCLH Init ... + result = XCHLHInitHandlers(); + if (!result) + { + return result; + } + + // + // XCHMA Init ... + result = XCHMAInitHandlers(); + if (!result) + { + return result; + } + + // + result = true; + + // + return result; +} + +// +// Release Indicators ... +void XAU5ReleaseIndicators() +{ + // + // Release Handlers ... + XTMReleaseHandlers(); + XAMAReleaseHandlers(); + XLHReleaseHandlers(); + XTDReleaseHandlers(); + XFIReleaseHandlers(); + XTSReleaseHandlers(); + XRSIReleaseHandlers(); + XOBDReleaseHandlers(); + XCHMAReleaseHandlers(); + XCHLHReleaseHandlers(); +} + +// +// Handle Reading Buffers ... +void XAU5HandleReadingBuffers() +{ + // + // Reading Calculated Bars for a Simple Handler ... + xAU5CalculatedBars = BarsCalculated(xTMHandler); + + // + // Read Indicators Buffers ... + XTMReadBuffers(xAU5NumberOfItemsPerTick); + XAMAReadBuffers(xAU5NumberOfItemsPerTick); + XLHReadBuffers(xAU5NumberOfItemsPerTick); + XTDReadBuffers(xAU5NumberOfItemsPerTick); + XFIReadBuffers(xAU5NumberOfItemsPerTick); + XTSReadBuffers(xAU5NumberOfItemsPerTick); + XRSIReadBuffers(xAU5NumberOfItemsPerTick); + XOBDReadBuffers(xAU5NumberOfItemsPerTick); + XCHMAReadBuffers(xAU5NumberOfItemsPerTick); + XCHLHReadBuffers(xAU5NumberOfItemsPerTick); + + // + XAU5ReadConditions(); +} + +// +// +// START Combination Functions ... +// +// + +// +// Can Open Long Trade ... +// this is a Function will Check all market Conditions and get all +// Strategy requirement Verifications for Long Signals ... +bool XAU5CanOpenLongTrade( + XProvidedSignal &info // Retrieve Signal Additional Info on this Object +) +{ + // + bool result = false; + + // + info.tp = 0; + info.sl = 0; + ArrayResize( + info.signallers, + 0); + + // + bool hasSignal = XAU5HasLongSignal(info); + + // + result = + // + hasSignal + // + ; + + // + if (result) + { + XAU5ClearConditions(); + } + + // + return result; +} + +// +// Can Close Long Trade ... +// this is a Function will Check all market Conditions and get all +// Strategy requirement Verifications for Long Signals ... +bool XAU5CanCloseLongTrade() +{ + // + bool result = false; + + // + return result; +} + +// +// Can Open Short Trade ... +// this is a Function will Check all market Conditions and get all +// Strategy requirement Verifications for Short Signals ... +bool XAU5CanOpenShortTrade( + XProvidedSignal &info // Retrieve Signal Additional Info on this Object +) +{ + // + bool result = false; + + // + info.tp = 0; + info.sl = 0; + ArrayResize( + info.signallers, + 0); + + // + bool hasSignal = XAU5HasShortSignal(info); + + // + result = + // + hasSignal + // + ; + + // + if (result) + { + XAU5ClearConditions(); + } + + // + return result; +} + +// +// Can Close Short Trade ... +// this is a Function will Check all market Conditions and get all +// Strategy requirement Verifications for Short Signals ... +bool XAU5CanCloseShortTrade() +{ + // + bool result = false; + + // + return result; +} + +// +// +// END Combination Functions ... +// +// + +// +// +// START Combination Signaling ... +// +// + +// +// Read All Globally Required Conditions ... +void XAU5ReadConditions() +{ + // + XAU5ClearConditions(); + + // + xAU5Conditions = XAU5GenerateMarketConditions(1); +} + +// +// Cleanup Conditions ... +void XAU5ClearConditions() +{ + // + XAU5MarketConditions mConditions = {}; + + // + xAU5Conditions = mConditions; +} + +// +// Generate Merket Conditions for Specified Bar Index ... +XAU5MarketConditions XAU5GenerateMarketConditions( + int bar_index = 1 // Specified Bar Index ... +) +{ + // + XAU5MarketConditions mConditions = {}; + + // + // XTM ... + mConditions.isXTMPeak = XTMIsPeak(bar_index); + mConditions.isXTMVale = XTMIsVale(bar_index); + mConditions.isXTMBullish = XTMIsBullish(bar_index); + mConditions.isXTMBearish = XTMIsBearish(bar_index); + mConditions.isXTMNeutural = XTMIsNeutural(bar_index); + mConditions.isXTMEndBullish = XTMIsEndBullish(bar_index); + mConditions.isXTMEndBearish = XTMIsEndBearish(bar_index); + mConditions.isXTMStartBullish = XTMIsStartBullish(bar_index); + mConditions.isXTMStartBearish = XTMIsStartBearish(bar_index); + mConditions.isXTMEndBullishByNeutural = XTMIsEndBullishByNeutural(bar_index); + mConditions.isXTMEndBearishByNeutural = XTMIsEndBearishByNeutural(bar_index); + mConditions.isXTMStartBullishAfterNeutural = XTMIsStartBullishAfterNeutural(bar_index); + mConditions.isXTMStartBearishAfterNeutural = XTMIsStartBearishAfterNeutural(bar_index); + + // + // XAMA ... + mConditions.isXAMAPeak = XAMAIsPeak(bar_index); + mConditions.isXAMAVale = XAMAIsVale(bar_index); + mConditions.isXAMABullish = XAMAIsBullish(bar_index); + mConditions.isXAMABearish = XAMAIsBearish(bar_index); + mConditions.isXAMANeutural = XAMAIsNeutural(bar_index); + mConditions.isXAMAEndBullish = XAMAIsEndBullish(bar_index); + mConditions.isXAMAEndBearish = XAMAIsEndBearish(bar_index); + mConditions.isXAMAStartBullish = XAMAIsStartBullish(bar_index); + mConditions.isXAMAStartBearish = XAMAIsStartBearish(bar_index); + mConditions.isXAMAEndBullishByNeutural = XAMAIsEndBullishByNeutural(bar_index); + mConditions.isXAMAEndBearishByNeutural = XAMAIsEndBearishByNeutural(bar_index); + mConditions.isXAMAStartBullishAfterNeutural = XAMAIsStartBullishAfterNeutural(bar_index); + mConditions.isXAMAStartBearishAfterNeutural = XAMAIsStartBearishAfterNeutural(bar_index); + + // + // XLH ... + mConditions.isXLHHHIncreased = XLHIsHHIncreased(bar_index); + mConditions.isXLHHHDecreased = XLHIsHHDecreased(bar_index); + mConditions.isXLHLLIncreased = XLHIsLLIncreased(bar_index); + mConditions.isXLHLLDecreased = XLHIsLLDecreased(bar_index); + mConditions.isXLHLowAttachedLL = XLHIsLowAttachedLL(bar_index); + mConditions.isXLHHighAttachedHH = XLHIsHighAttachedHH(bar_index); + mConditions.isXLHHHSameInLength = XLHIsHHSameInLength(bar_index); + mConditions.isXLHLLSameInLength = XLHIsLLSameInLength(bar_index); + mConditions.isXLHPriceOverSignal = XLHIsPriceOverSignal(bar_index); + mConditions.isXLHPriceUnderSignal = XLHIsPriceUnderSignal(bar_index); + mConditions.isXLHPriceInSignalRange = XLHIsPriceInSignalRange(bar_index); + mConditions.isXLHPriceCrossedOverSignal = XLHIsPriceCrossedOverSignal(bar_index); + mConditions.isXLHPriceCrossedUnderSignal = XLHIsPriceCrossedUnderSignal(bar_index); + + // + // XTD ... + mConditions.isXTDSignalPeak = XTDIsSignalPeak(bar_index); + mConditions.isXTDSignalVale = XTDIsSignalVale(bar_index); + mConditions.isXTDBullishPeak = XTDIsBullishPeak(bar_index); + mConditions.isXTDBullishVale = XTDIsBullishVale(bar_index); + mConditions.isXTDBearishPeak = XTDIsBearishPeak(bar_index); + mConditions.isXTDBearishVale = XTDIsBearishVale(bar_index); + mConditions.isXTDBullOverBear = XTDIsBullOverBear(bar_index); + mConditions.isXTDBullUnderBear = XTDIsBullUnderBear(bar_index); + mConditions.isXTDSignalOverBear = XTDIsSignalOverBear(bar_index); + mConditions.isXTDSignalUnderBear = XTDIsSignalUnderBear(bar_index); + mConditions.isXTDBullCrossedOverBear = XTDIsBullCrossedOverBear(bar_index); + mConditions.isXTDBullCrossedUnderBear = XTDIsBullCrossedUnderBear(bar_index); + mConditions.isXTDSignalCrossedOverBear = XTDIsSignalCrossedOverBear(bar_index); + mConditions.isXTDSignalCrossedUnderBear = XTDIsSignalCrossedUnderBear(bar_index); + + // + // XFI ... + mConditions.isXFIPeak = XFIIsPeak(bar_index); + mConditions.isXFIVale = XFIIsVale(bar_index); + mConditions.isXFIOverZero = XFIIsOverZero(bar_index); + mConditions.isXFIUnderZero = XFIIsUnderZero(bar_index); + mConditions.isXFICrossedOverZero = XFIIsCrossedOverZero(bar_index); + mConditions.isXFICrossedUnderZero = XFIIsCrossedUnderZero(bar_index); + + // + // XTS ... + mConditions.isXTSAllSame = XTSIsAllSame(bar_index); + mConditions.isXTSCurrentMin = XTSIsCurrentMin(bar_index); + mConditions.isXTSCurrentMax = XTSIsCurrentMax(bar_index); + mConditions.isXTSCurrentOverFarest = XTSIsCurrentOverFarest(bar_index); + mConditions.isXTSCurrentOverNearest = XTSIsCurrentOverNearest(bar_index); + mConditions.isXTSCurrentOverMediest = XTSIsCurrentOverMediest(bar_index); + mConditions.isXTSCurrentUnderFarest = XTSIsCurrentUnderFarest(bar_index); + mConditions.isXTSCurrentUnderNearest = XTSIsCurrentUnderNearest(bar_index); + mConditions.isXTSCurrentUnderMediest = XTSIsCurrentUnderMediest(bar_index); + mConditions.isXTSCurrentCrossedOverFarest = XTSIsCurrentCrossedOverFarest(bar_index); + mConditions.isXTSCurrentCrossedOverNearest = XTSIsCurrentCrossedOverNearest(bar_index); + mConditions.isXTSCurrentCrossedOverMediest = XTSIsCurrentCrossedOverMediest(bar_index); + mConditions.isXTSCurrentCrossedUnderFarest = XTSIsCurrentCrossedUnderFarest(bar_index); + mConditions.isXTSCurrentCrossedUnderNearest = XTSIsCurrentCrossedUnderNearest(bar_index); + mConditions.isXTSCurrentCrossedUnderMediest = XTSIsCurrentCrossedUnderMediest(bar_index); + + // + // XRSI ... + mConditions.isXRSIPeak = XRSIIsPeak(bar_index); + mConditions.isXRSIVale = XRSIIsVale(bar_index); + mConditions.isXRSICrossedOverLongExit = XRSIIsCrossedOverLongExit(bar_index); + mConditions.isXRSICrossedOverLongEntry = XRSIIsCrossedOverLongEntry(bar_index); + mConditions.isXRSICrossedUnderShortExit = XRSIIsCrossedUnderShortExit(bar_index); + mConditions.isXRSICrossedUnderShortEntry = XRSIIsCrossedUnderShortEntry(bar_index); + + // + // XOBD ... + mConditions.isXOBDSwingLow = XOBDIsSwingLow(bar_index); + mConditions.isXOBDSwingHigh = XOBDIsSwingHigh(bar_index); + + // + // XCHLH ... + // + mConditions.isXCHLHSameHHs = XCHLHIsSameHHs(bar_index); + mConditions.isXCHLHSameLLs = XCHLHIsSameLLs(bar_index); + // + mConditions.isXCHLHSCMCHHSame = XCHLHIsMCSCHasSameHH(bar_index); + mConditions.isXCHLHSCMCLLSame = XCHLHIsMCSCHasSameLL(bar_index); + // + mConditions.isXCHLHSCLCHHSame = XCHLHIsLCSCHasSameHH(bar_index); + mConditions.isXCHLHSCLCLLSame = XCHLHIsLCSCHasSameLL(bar_index); + // + mConditions.isXCHLHMCLCHHSame = XCHLHIsLCMCHasSameHH(bar_index); + mConditions.isXCHLHMCLCLLSame = XCHLHIsLCMCHasSameLL(bar_index); + // + mConditions.isXCHLHMCOnTopOfLC = XCHLHIsMCOnTopOfLC(bar_index); + mConditions.isXCHLHMCInBottomOfLC = XCHLHIsMCInBottomOfLC(bar_index); + + // + // XCHMA ... + // + mConditions.isXCHMASCOverMax = XCHMAIsSCOverMax(bar_index); + mConditions.isXCHMASCOverMin = XCHMAIsSCOverMin(bar_index); + mConditions.isXCHMASCUnderMax = XCHMAIsSCUnderMax(bar_index); + mConditions.isXCHMASCUnderMin = XCHMAIsSCUnderMin(bar_index); + // + mConditions.isXCHMASCCrossedOverMax = XCHMAIsSCCrossedOverMax(bar_index); + mConditions.isXCHMASCCrossedUnderMax = XCHMAIsSCCrossedUnderMax(bar_index); + mConditions.isXCHMASCCrossedOverMin = XCHMAIsSCCrossedOverMin(bar_index); + mConditions.isXCHMASCCrossedUnderMin = XCHMAIsSCCrossedUnderMin(bar_index); + // + mConditions.isXCHMASCPeak = XCHMAIsSCPeak(bar_index); + mConditions.isXCHMASCVale = XCHMAIsSCVale(bar_index); + mConditions.isXCHMASCTrendsUp = XCHMAIsSCTrendsUp(bar_index); + mConditions.isXCHMASCTrendsDown = XCHMAIsSCTrendsDown(bar_index); + mConditions.isXCHMASCFastOverSlow = XCHMAIsSCFastOverSlow(bar_index); + mConditions.isXCHMASCFastUnderSlow = XCHMAIsSCFastUnderSlow(bar_index); + mConditions.isXCHMASCFastCrossedOverSlow = XCHMAIsSCFastCrossedOverSlow(bar_index); + mConditions.isXCHMASCFastCrossedUnderSlow = XCHMAIsSCFastCrossedUnderSlow(bar_index); + // + mConditions.isXCHMAMCPeak = XCHMAIsMCPeak(bar_index); + mConditions.isXCHMAMCVale = XCHMAIsMCVale(bar_index); + mConditions.isXCHMAMCTrendsUp = XCHMAIsMCTrendsUp(bar_index); + mConditions.isXCHMAMCTrendsDown = XCHMAIsMCTrendsDown(bar_index); + mConditions.isXCHMAMCFastOverSlow = XCHMAIsMCFastOverSlow(bar_index); + mConditions.isXCHMAMCFastUnderSlow = XCHMAIsMCFastUnderSlow(bar_index); + mConditions.isXCHMAMCFastCrossedOverSlow = XCHMAIsMCFastCrossedOverSlow(bar_index); + mConditions.isXCHMAMCFastCrossedUnderSlow = XCHMAIsMCFastCrossedUnderSlow(bar_index); + // + mConditions.isXCHMALCPeak = XCHMAIsLCPeak(bar_index); + mConditions.isXCHMALCVale = XCHMAIsLCVale(bar_index); + mConditions.isXCHMALCTrendsUp = XCHMAIsLCTrendsUp(bar_index); + mConditions.isXCHMALCTrendsDown = XCHMAIsLCTrendsDown(bar_index); + mConditions.isXCHMALCFastOverSlow = XCHMAIsLCFastOverSlow(bar_index); + mConditions.isXCHMALCFastUnderSlow = XCHMAIsLCFastUnderSlow(bar_index); + mConditions.isXCHMALCFastCrossedOverSlow = XCHMAIsLCFastCrossedOverSlow(bar_index); + mConditions.isXCHMALCFastCrossedUnderSlow = XCHMAIsLCFastCrossedUnderSlow(bar_index); + + // + return mConditions; +} + +// +// Check Market Conditions by Combination of Power of All tools for LONGs ... +bool XAU5HasLongSignal( + XProvidedSignal &info // Retrieve Signal Additional Info on this Object +) +{ + // + bool result = false; + + // + // XTD ... + bool isXTDHasSignal = XAU5XTDHasLongSignal(); + if (isXTDHasSignal) + { + // + Add( + EnumToString(XTD), + info.signallers); + } + + // + // XTAM ... + bool isXTAMHasSignal = XAU5XTAMHasLongSignal(); + if (isXTAMHasSignal) + { + // + Add( + EnumToString(XTAM), + info.signallers); + } + + // + // XSI ... + bool isXSIHasSignal = XAU5XSIHasLongSignal(); + if (isXSIHasSignal) + { + // + Add( + EnumToString(XSI), + info.signallers); + } + + // + // XSTFI ... + bool isXSTFIHasSignal = XAU5XSTFIHasLongSignal(); + if (isXSTFIHasSignal) + { + // + Add( + EnumToString(XSTFI), + info.signallers); + } + + // + // XOBD XLH ... + bool isXOBDLHHasSignal = XAU5XOBDLHHasLongSignal(); + if (isXOBDLHHasSignal) + { + // + Add( + EnumToString(XOBDLH), + info.signallers); + } + + // + // XCHMA Cycles Cross ... + bool isXCHMACCHasSignal = XAU5XCHMACCHasLongSignal(); + if (isXCHMACCHasSignal) + { + // + Add( + EnumToString(XCHMACC), + info.signallers); + } + + // + // XCHMA Cycles Min ... + bool isXCHMACMNHasSignal = XAU5XCHMACMNHasLongSignal(); + if (isXCHMACMNHasSignal) + { + // + Add( + EnumToString(XCHMACMN), + info.signallers); + } + + // + // XCHMA Cycles Max + bool isXCHMACMXHasSignal = XAU5XCHMACMXHasLongSignal(); + if (isXCHMACMXHasSignal) + { + // + Add( + EnumToString(XCHMACMX), + info.signallers); + } + + // + result = + // + isXTDHasSignal + // + || + // + isXTAMHasSignal + // + || + // + isXSIHasSignal + // + || + // + isXSTFIHasSignal + // + || + // + isXOBDLHHasSignal + // + || + // + isXCHMACCHasSignal + // + || + // + isXCHMACMNHasSignal + // + || + // + isXCHMACMXHasSignal + // + ; + + // + if (result) + { + // + // Only Log Signals Time Market Conditions if is in Testing Mode ... + if (xAU5IsTestMode) + { + // + string message = XAU5GetConditionsString(xAU5Conditions, "\n"); + + // + LogMessage( + "Long Signal Provided by: \n" + + info.signallers[ArraySize(info.signallers) - 1] + "\n" + + "Pusher: " + (string)ArraySize(info.signallers) + "\n" + + "Market Conditions: " + message); + } + } + + // + return result; +} + +// +// Check Market Conditions by Combination of Power of All tools for SHORTs ... +bool XAU5HasShortSignal( + XProvidedSignal &info // Retrieve Signal Additional Info on this Object +) +{ + // + bool result = false; + + // + // XTD ... + bool isXTDHasSignal = XAU5XTDHasShortSignal(); + if (isXTDHasSignal) + { + // + Add( + EnumToString(XTD), + info.signallers); + } + + // + // XTAM ... + bool isXTAMHasSignal = XAU5XTAMHasShortSignal(); + if (isXTAMHasSignal) + { + // + Add( + EnumToString(XTAM), + info.signallers); + } + + // + // XSI ... + bool isXSIHasSignal = XAU5XSIHasShortSignal(); + if (isXSIHasSignal) + { + // + Add( + EnumToString(XSI), + info.signallers); + } + + // + // XSTFI ... + bool isXSTFIHasSignal = XAU5XSTFIHasShortSignal(); + if (isXSTFIHasSignal) + { + // + Add( + EnumToString(XSTFI), + info.signallers); + } + + // + // XOBD XLH ... + bool isXOBDLHHasSignal = XAU5XOBDLHHasShortSignal(); + if (isXOBDLHHasSignal) + { + // + Add( + EnumToString(XOBDLH), + info.signallers); + } + + // + // XCHMA Cycles Cross ... + bool isXCHMACCHasSignal = XAU5XCHMACCHasShortSignal(); + if (isXCHMACCHasSignal) + { + // + Add( + EnumToString(XCHMACC), + info.signallers); + } + + // + // XCHMA Cycles Min ... + bool isXCHMACMNHasSignal = XAU5XCHMACMNHasShortSignal(); + if (isXCHMACMNHasSignal) + { + // + Add( + EnumToString(XCHMACMN), + info.signallers); + } + + // + // XCHMA Cycles Max + bool isXCHMACMXHasSignal = XAU5XCHMACMXHasShortSignal(); + if (isXCHMACMXHasSignal) + { + // + Add( + EnumToString(XCHMACMX), + info.signallers); + } + + // + result = + // + isXTDHasSignal + // + || + // + isXTAMHasSignal + // + || + // + isXSIHasSignal + // + || + // + isXSTFIHasSignal + // + || + // + isXOBDLHHasSignal + // + || + // + isXCHMACCHasSignal + // + || + // + isXCHMACMNHasSignal + // + || + // + isXCHMACMXHasSignal + // + ; + + // + if (result) + { + // + // Only Log Signals Time Market Conditions if is in Testing Mode ... + if (xAU5IsTestMode) + { + // + string message = XAU5GetConditionsString(xAU5Conditions, "\n"); + + // + LogMessage( + "Short Signal Provided by: \n" + + info.signallers[ArraySize(info.signallers) - 1] + "\n" + + "Pusher: " + (string)ArraySize(info.signallers) + "\n" + + "Market Conditions: " + message); + } + } + + // + return result; +} + +// +// +// END Combination Signaling ... +// +// + +// +// START Signal Providers ... +// + +// +// Disbale All Signallers Longs ... +void XAU5DisableLongSignallers() +{ + // + // XTD ... + if (xAU5MXTDEnableSignaller) + { + xAU5MXTDAllowLongSignals = false; + } + + // + // XTAM ... + if (xAU5MXTAMEnableSignaller) + { + xAU5MXTAMAllowLongSignals = false; + } + + // + // XSI ... + if (xAU5MXSIEnableSignaller) + { + xAU5MXSIAllowLongSignals = false; + } + + // + // XSTFI ... + if (xAU5MXSTFIEnableSignaller) + { + xAU5MXSTFIAllowLongSignals = false; + } + + // + // XOBDLH ... + if (xAU5MXOBDLHEnableSignaller) + { + xAU5MXOBDLHAllowLongSignals = false; + } + + // + // XCHMACC ... + if (xAU5MXCHMACCEnableSignaller) + { + xAU5MXCHMACCAllowLongSignals = false; + } + + // + // XCHMAMX ... + if (xAU5MXCHMACMXEnableSignaller) + { + xAU5MXCHMACMXAllowLongSignals = false; + } + + // + // XCHMAMN ... + if (xAU5MXCHMACMNEnableSignaller) + { + xAU5MXCHMACMNAllowLongSignals = false; + } +} + +// +// Enable All Signallers Longs ... +// Only if they are Configured as Enable at Settings ... +void XAU5EnableLongSignallers() +{ + // + // XTD ... + if (xAU5MXTDEnableSignaller) + { + xAU5MXTDAllowLongSignals = + xAU5XTDAllowLongSignals + ? true + : xAU5MXTDAllowLongSignals; + } + + // + // XTAM ... + if (xAU5MXTAMEnableSignaller) + { + xAU5MXTAMAllowLongSignals = + xAU5XTAMAllowLongSignals + ? true + : xAU5MXTAMAllowLongSignals; + } + + // + // XSI ... + if (xAU5MXSIEnableSignaller) + { + xAU5MXSIAllowLongSignals = + xAU5XSIAllowLongSignals + ? true + : xAU5MXSIAllowLongSignals; + } + + // + // XSTFI ... + if (xAU5MXSTFIEnableSignaller) + { + xAU5MXSTFIAllowLongSignals = + xAU5XSTFIAllowLongSignals + ? true + : xAU5MXSTFIAllowLongSignals; + } + + // + // XOBDLH ... + if (xAU5MXOBDLHEnableSignaller) + { + xAU5MXOBDLHAllowLongSignals = + xAU5XOBDLHAllowLongSignals + ? true + : xAU5MXOBDLHAllowLongSignals; + } + + // + // XCHMACC ... + if (xAU5MXCHMACCEnableSignaller) + { + xAU5MXCHMACCAllowLongSignals = + xAU5XCHMACCAllowLongSignals + ? true + : xAU5MXCHMACCAllowLongSignals; + } + + // + // XCHMAMX ... + if (xAU5MXCHMACMXEnableSignaller) + { + xAU5MXCHMACMXAllowLongSignals = + xAU5XCHMACMXAllowLongSignals + ? true + : xAU5MXCHMACMXAllowLongSignals; + } + + // + // XCHMAMN ... + if (xAU5MXCHMACMNEnableSignaller) + { + xAU5MXCHMACMNAllowLongSignals = + xAU5XCHMACMNAllowLongSignals + ? true + : xAU5MXCHMACMNAllowLongSignals; + } +} + +// +// Disable All Signallers Shorts ... +void XEUDisableShortSignallers() +{ + // + // XTD ... + if (xAU5MXTDEnableSignaller) + { + xAU5MXTDAllowShortSignals = false; + } + + // + // XTAM ... + if (xAU5MXTAMEnableSignaller) + { + xAU5MXTAMAllowShortSignals = false; + } + + // + // XSI ... + if (xAU5MXSIEnableSignaller) + { + xAU5MXSIAllowShortSignals = false; + } + + // + // XSTFI ... + if (xAU5MXSTFIEnableSignaller) + { + xAU5MXSTFIAllowShortSignals = false; + } + + // + // XOBDLH ... + if (xAU5MXOBDLHEnableSignaller) + { + xAU5MXOBDLHAllowShortSignals = false; + } + + // + // XCHMACC ... + if (xAU5MXCHMACCEnableSignaller) + { + xAU5MXCHMACCAllowShortSignals = false; + } + + // + // XCHMAMX ... + if (xAU5MXCHMACMXEnableSignaller) + { + xAU5MXCHMACMXAllowShortSignals = false; + } + + // + // XCHMAMN ... + if (xAU5MXCHMACMNEnableSignaller) + { + xAU5MXCHMACMNAllowShortSignals = false; + } +} + +// +// Enable All Signallers Shorts ... +// Only if they are Configured as Enable at Settings ... +void XEUEnableShortSignallers() +{ + // + // XTD ... + if (xAU5MXTDEnableSignaller) + { + xAU5MXTDAllowShortSignals = + xAU5XTDAllowShortSignals + ? true + : xAU5MXTDAllowShortSignals; + } + + // + // XTAM ... + if (xAU5MXTAMEnableSignaller) + { + xAU5MXTAMAllowShortSignals = + xAU5XTAMAllowShortSignals + ? true + : xAU5MXTAMAllowShortSignals; + } + + // + // XSI ... + if (xAU5MXSIEnableSignaller) + { + xAU5MXSIAllowShortSignals = + xAU5XSIAllowShortSignals + ? true + : xAU5MXSIAllowShortSignals; + } + + // + // XSTFI ... + if (xAU5MXSTFIEnableSignaller) + { + xAU5MXSTFIAllowShortSignals = + xAU5XSTFIAllowShortSignals + ? true + : xAU5MXSTFIAllowShortSignals; + } + + // + // XOBDLH ... + if (xAU5MXOBDLHEnableSignaller) + { + xAU5MXOBDLHAllowShortSignals = + xAU5XOBDLHAllowShortSignals + ? true + : xAU5MXOBDLHAllowShortSignals; + } + + // + // XCHMACC ... + if (xAU5MXCHMACCEnableSignaller) + { + xAU5MXCHMACCAllowShortSignals = + xAU5XCHMACCAllowShortSignals + ? true + : xAU5MXCHMACCAllowShortSignals; + } + + // + // XCHMAMX ... + if (xAU5MXCHMACMXEnableSignaller) + { + xAU5MXCHMACMXAllowShortSignals = + xAU5XCHMACMXAllowShortSignals + ? true + : xAU5MXCHMACMXAllowShortSignals; + } + + // + // XCHMAMN ... + if (xAU5MXCHMACMNEnableSignaller) + { + xAU5MXCHMACMNAllowShortSignals = + xAU5XCHMACMNAllowShortSignals + ? true + : xAU5MXCHMACMNAllowShortSignals; + } +} + +// +// XTD Long Signal Checking ... +bool XAU5XTDHasLongSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXTDEnableSignaller || + !xAU5MXTDAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XTD Short Signal Checking ... +bool XAU5XTDHasShortSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXTDEnableSignaller || + !xAU5MXTDAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XTAM Long Signal Checking ... +bool XAU5XTAMHasLongSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXTAMEnableSignaller || + !xAU5MXTAMAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + (xAMAMaBuffer[1] > xTMMaBuffer[1] && + xAMAMaBuffer[2] > xTMMaBuffer[2]) + // + && + // + !(xAMAMaBuffer[2] > xTMMaBuffer[2] && + xAMAMaBuffer[3] > xTMMaBuffer[3]) + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + // Exception Cases for XCHMA Min or Max ... + !( + // + // XCHMA MAX ... + ( + // + (xAU5Conditions.isXCHMASCOverMax || + xAU5Conditions.isXCHMASCCrossedOverMax) && + (xAU5Conditions.isXCHMASCUnderMax || + xAU5Conditions.isXCHMASCCrossedUnderMax) + // + ) + // + || + // + // XCHMA MIN ... + ( + // + (xAU5Conditions.isXCHMASCOverMin || + xAU5Conditions.isXCHMASCCrossedOverMin) && + (xAU5Conditions.isXCHMASCUnderMin || + xAU5Conditions.isXCHMASCCrossedUnderMin) + // + ) + // + ) + // + && + // + // Check XCHMA Trend Bullish ... + ( + // + // All Cycles Bullish ... + ( + // + // SC ... + (xAU5Conditions.isXCHMASCFastOverSlow || + xAU5Conditions.isXCHMASCFastCrossedOverSlow) + // + && + // + // MC ... + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow) + // + && + // + // LC ... + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow) + // + ) + // + || + // + // Two Cycle Fully Bullish ... + ( + // + // SC and MC ... + ( + // + // SC ... + ( + // !xAU5Conditions.isXCHMASCTrendsDown && + (xAU5Conditions.isXCHMASCFastOverSlow || + xAU5Conditions.isXCHMASCFastCrossedOverSlow)) + // + && + // + // MC ... + ( + // !xAU5Conditions.isXCHMAMCTrendsDown && + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow)) + // + ) + // + || + // + // SC and LC ... + ( + // + // SC ... + ( + // !xAU5Conditions.isXCHMASCTrendsDown && + (xAU5Conditions.isXCHMASCFastOverSlow || + xAU5Conditions.isXCHMASCFastCrossedOverSlow)) + // + && + // + // LC ... + ( + // !xAU5Conditions.isXCHMALCTrendsDown && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + ) + // + || + // + // MC and LC ... + ( + // + // MC ... + ( + // !xAU5Conditions.isXCHMAMCTrendsDown && + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow)) + // + && + // + // LC ... + ( + // !xAU5Conditions.isXCHMALCTrendsDown && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + ) + // + ) + // + ) + // + && + // + // XCHMA Check Peaks ... + !( + // + // All Cycles Peak ... + ( + xAU5Conditions.isXCHMASCPeak && + xAU5Conditions.isXCHMAMCPeak && + xAU5Conditions.isXCHMALCPeak) + // + || + // + ( + // + // SC MC ... + (xAU5Conditions.isXCHMASCPeak && + xAU5Conditions.isXCHMAMCPeak) + // + || + // + // SC LC ... + (xAU5Conditions.isXCHMASCPeak && + xAU5Conditions.isXCHMALCPeak) + // + || + // + // MC LC ... + (xAU5Conditions.isXCHMAMCPeak && + xAU5Conditions.isXCHMALCPeak) + // + ) + // + ) + // + && + // + // Check XCHMA Trends Powers ... + !( + // + (xAU5Conditions.isXCHMASCTrendsDown && + xAU5Conditions.isXCHMAMCTrendsDown && + xAU5Conditions.isXCHMALCTrendsDown) + // + || + // + (xAU5Conditions.isXCHMASCTrendsDown && + xAU5Conditions.isXCHMAMCTrendsDown) + // + || + // + (xAU5Conditions.isXCHMASCTrendsDown && + xAU5Conditions.isXCHMALCTrendsDown) + // + || + // + (xAU5Conditions.isXCHMAMCTrendsDown && + xAU5Conditions.isXCHMALCTrendsDown) + // + ) + // + && + // + // Check XOBD Swings ... + !xAU5Conditions.isXOBDSwingLow + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXAMABearish && + xAU5Conditions.isXTMEndBearish && + xAU5Conditions.isXTDSignalVale && + xAU5Conditions.isXTDBullishVale) + // + || + // + ( + // + (xAU5Conditions.isXCHMASCTrendsDown && + xAU5Conditions.isXCHMAMCTrendsDown && + xAU5Conditions.isXCHMALCTrendsDown) + // + || + // + (xAU5Conditions.isXCHMASCTrendsDown && + xAU5Conditions.isXCHMAMCTrendsDown) + // + || + // + (xAU5Conditions.isXCHMASCTrendsDown && + xAU5Conditions.isXCHMALCTrendsDown) + // + || + // + (xAU5Conditions.isXCHMAMCTrendsDown && + xAU5Conditions.isXCHMALCTrendsDown) + // + ) + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + ( + // + (xAU5Conditions.isXCHMASCTrendsDown && + xAU5Conditions.isXCHMAMCTrendsDown && + xAU5Conditions.isXCHMALCTrendsDown) + // + || + // + (xAU5Conditions.isXCHMASCTrendsDown && + xAU5Conditions.isXCHMAMCTrendsDown) + // + || + // + (xAU5Conditions.isXCHMASCTrendsDown && + xAU5Conditions.isXCHMALCTrendsDown) + // + || + // + (xAU5Conditions.isXCHMAMCTrendsDown && + xAU5Conditions.isXCHMALCTrendsDown) + // + ) + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + (xAU5Conditions.isXAMANeutural && + xAU5Conditions.isXLHHHDecreased && + xAU5Conditions.isXTDBullUnderBear && + xAU5Conditions.isXTDSignalUnderBear) + // + || + ( + // + (xAU5Conditions.isXCHMASCTrendsDown && + xAU5Conditions.isXCHMAMCTrendsDown && + xAU5Conditions.isXCHMALCTrendsDown) + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXCHMALCPeak && + ( + // + (xAU5Conditions.isXCHMAMCVale && + (( + // + xAU5Conditions.isXCHMASCVale + // + || + // + (xAU5Conditions.isXAMAVale && + (xAU5Conditions.isXTDBearishVale || + xAU5Conditions.isXTMStartBearish)) + // + || + // + ( + // + ((xAU5Conditions.isXCHMASCTrendsUp && + (xAU5Conditions.isXCHMASCFastUnderSlow || + xAU5Conditions.isXCHMASCFastCrossedUnderSlow)) && + (xAU5Conditions.isXCHMAMCTrendsDown && + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow)) && + (xAU5Conditions.isXCHMALCTrendsDown && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + ) + // + ) + // + ))) + // + || + // + (xAU5Conditions.isXTMBearish && + xAU5Conditions.isXAMABearish && + xAU5Conditions.isXTSCurrentMin && + xAU5Conditions.isXLHHHDecreased && + xAU5Conditions.isXFICrossedUnderZero) + // + )) + // + || + // + (xAU5Conditions.isXTSCurrentMin && + (xAU5Conditions.isXTSCurrentUnderFarest || + xAU5Conditions.isXTSCurrentCrossedUnderFarest) && + (xAU5Conditions.isXTSCurrentUnderNearest || + xAU5Conditions.isXTSCurrentCrossedUnderNearest) && + (xAU5Conditions.isXTSCurrentUnderMediest || + xAU5Conditions.isXTSCurrentCrossedUnderMediest)) + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + (xAU5Conditions.isXTSCurrentMin && + xAU5Conditions.isXTSCurrentUnderFarest && + xAU5Conditions.isXTSCurrentUnderNearest && + xAU5Conditions.isXTSCurrentUnderMediest) + // + || + // + (xAU5Conditions.isXAMAVale && + xAU5Conditions.isXCHLHSCMCLLSame && + xAU5Conditions.isXLHLowAttachedLL) + // + || + // + ((xAU5Conditions.isXCHMAMCVale && + xAU5Conditions.isXCHMALCPeak) && + ( + // + (xAU5Conditions.isXCHMASCTrendsUp && + (xAU5Conditions.isXCHMASCFastUnderSlow || + xAU5Conditions.isXCHMASCFastCrossedUnderSlow)) + // + )) + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXTSCurrentMax && + xAU5Conditions.isXTSCurrentOverFarest && + xAU5Conditions.isXTSCurrentOverNearest && + xAU5Conditions.isXTSCurrentOverMediest) + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XTAM Short Signal Checking ... +bool XAU5XTAMHasShortSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXTAMEnableSignaller || + !xAU5MXTAMAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XSI Long Signal Checking ... +bool XAU5XSIHasLongSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXSIEnableSignaller || + !xAU5MXSIAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + xAU5Conditions.isXRSICrossedOverLongEntry && + xRSIBuffer[3] < xRSILongEntryValue + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + // Exception Cases for XCHMA Min or Max ... + !( + // + // XCHMA MAX ... + ( + // + (xAU5Conditions.isXCHMASCOverMax || + xAU5Conditions.isXCHMASCCrossedOverMax) && + (xAU5Conditions.isXCHMASCUnderMax || + xAU5Conditions.isXCHMASCCrossedUnderMax) + // + ) + // + || + // + // XCHMA MIN ... + ( + // + (xAU5Conditions.isXCHMASCOverMin || + xAU5Conditions.isXCHMASCCrossedOverMin) && + (xAU5Conditions.isXCHMASCUnderMin || + xAU5Conditions.isXCHMASCCrossedUnderMin) + // + ) + // + ) + // + && + // + // Check XCHMA Trend Bullish ... + ( + // + // All Cycles Bullish ... + ( + // + // SC ... + (xAU5Conditions.isXCHMASCFastOverSlow || + xAU5Conditions.isXCHMASCFastCrossedOverSlow) + // + && + // + // MC ... + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow) + // + && + // + // LC ... + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow) + // + ) + // + || + // + // Two Cycle Fully Bullish ... + ( + // + // SC and MC ... + ( + // + // SC ... + ( + // !xAU5Conditions.isXCHMASCTrendsDown && + (xAU5Conditions.isXCHMASCFastOverSlow || + xAU5Conditions.isXCHMASCFastCrossedOverSlow)) + // + && + // + // MC ... + ( + // !xAU5Conditions.isXCHMAMCTrendsDown && + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow)) + // + ) + // + || + // + // SC and LC ... + ( + // + // SC ... + ( + // !xAU5Conditions.isXCHMASCTrendsDown && + (xAU5Conditions.isXCHMASCFastOverSlow || + xAU5Conditions.isXCHMASCFastCrossedOverSlow)) + // + && + // + // LC ... + ( + // !xAU5Conditions.isXCHMALCTrendsDown && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + ) + // + || + // + // MC and LC ... + ( + // + // MC ... + ( + // !xAU5Conditions.isXCHMAMCTrendsDown && + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow)) + // + && + // + // LC ... + ( + // !xAU5Conditions.isXCHMALCTrendsDown && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + ) + // + ) + // + ) + // + && + // + // XCHMA Check Peaks ... + !( + // + // All Cycles Peak ... + ( + xAU5Conditions.isXCHMASCPeak && + xAU5Conditions.isXCHMAMCPeak && + xAU5Conditions.isXCHMALCPeak) + // + || + // + ( + // + // SC MC ... + (xAU5Conditions.isXCHMASCPeak && + xAU5Conditions.isXCHMAMCPeak) + // + || + // + // SC LC ... + (xAU5Conditions.isXCHMASCPeak && + xAU5Conditions.isXCHMALCPeak) + // + || + // + // MC LC ... + (xAU5Conditions.isXCHMAMCPeak && + xAU5Conditions.isXCHMALCPeak) + // + ) + // + ) + // + && + // + // Check XOBD Swings ... + !xAU5Conditions.isXOBDSwingLow + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + (xAU5Conditions.isXCHMALCPeak && + xAU5Conditions.isXTDSignalVale && + xAU5Conditions.isXTDBullishVale) + // + || + // + ((xAU5Conditions.isXCHMASCTrendsUp && + (xAU5Conditions.isXCHMASCFastUnderSlow || + xAU5Conditions.isXCHMASCFastCrossedUnderSlow)) && + (xAU5Conditions.isXCHMAMCTrendsDown && + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow)) && + (xAU5Conditions.isXCHMALCTrendsDown && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow))) + // + || + // + ((xAU5Conditions.isXTMVale || + xAU5Conditions.isXTMBearish) && + xAU5Conditions.isXTSCurrentMax && + xAU5Conditions.isXLHLLDecreased && + xAU5Conditions.isXCHLHSCMCLLSame && + xAU5Conditions.isXCHLHMCLCHHSame) + // + || + // + ((xAU5Conditions.isXCHMAMCVale && + (xAU5Conditions.isXCHMAMCFastUnderSlow || + xAU5Conditions.isXCHMAMCFastCrossedUnderSlow)) && + (xAU5Conditions.isXCHMALCVale && + xAU5Conditions.isXCHMALCTrendsDown && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow))) + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + (xAU5Conditions.isXTMVale && + xAU5Conditions.isXAMAVale && + xAU5Conditions.isXTSCurrentMin && + xAU5Conditions.isXCHLHSCMCLLSame && + xAU5Conditions.isXCHLHMCLCHHSame && + xAU5Conditions.isXLHLowAttachedLL) + // + || + // + (xAU5Conditions.isXCHMASCVale && + xAU5Conditions.isXCHMASCTrendsUp && + (xAU5Conditions.isXCHMASCFastUnderSlow || + xAU5Conditions.isXCHMASCFastCrossedUnderSlow) && + xAU5Conditions.isXCHMALCPeak && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + || + // + (( + // + ( + (xAU5Conditions.isXTMVale || + xAU5Conditions.isXTMBearish) && + (xAU5Conditions.isXAMAVale || + xAU5Conditions.isXAMABearish) && + xAU5Conditions.isXTDSignalVale && + xAU5Conditions.isXTDBullishVale) + // + ) && + (xAU5Conditions.isXCHMALCPeak && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow))) + // + || + // + ((xAU5Conditions.isXCHMASCVale && + (xAU5Conditions.isXCHMASCFastUnderSlow || + xAU5Conditions.isXCHMASCFastCrossedUnderSlow)) && + (xAU5Conditions.isXCHMAMCVale && + (xAU5Conditions.isXCHMAMCFastOverSlow || + xAU5Conditions.isXCHMAMCFastCrossedOverSlow))) + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + ( + xAU5Conditions.isXCHMASCVale && + xAU5Conditions.isXCHMASCTrendsUp && + (xAU5Conditions.isXCHMASCFastUnderSlow || + xAU5Conditions.isXCHMASCFastCrossedUnderSlow)) + // + || + // + ( + xAU5Conditions.isXTMVale && + xAU5Conditions.isXAMAVale && + xAU5Conditions.isXTDSignalVale && + xAU5Conditions.isXTDBullishVale && + xAU5Conditions.isXTMStartBearish && + xAU5Conditions.isXAMAStartBearish && + xAU5Conditions.isXLHLowAttachedLL) + // + || + // + (xAU5Conditions.isXTMVale && + xAU5Conditions.isXTMNeutural && + xAU5Conditions.isXTMEndBearish && + xAU5Conditions.isXLHLLDecreased && + xAU5Conditions.isXCHLHSCMCLLSame) + // + || + // + (xAU5Conditions.isXCHMASCVale && + xAU5Conditions.isXCHMAMCVale && + xAU5Conditions.isXCHMALCPeak && + (xAU5Conditions.isXCHMALCFastOverSlow || + xAU5Conditions.isXCHMALCFastCrossedOverSlow)) + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + // + false + // + ) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XSI Short Signal Checking ... +bool XAU5XSIHasShortSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXSIEnableSignaller || + !xAU5MXSIAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XSTFI Long Signal Checking ... +bool XAU5XSTFIHasLongSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXSTFIEnableSignaller || + !xAU5MXSTFIAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XSTFI Short Signal Checking ... +bool XAU5XSTFIHasShortSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXSTFIEnableSignaller || + !xAU5MXSTFIAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XOBDLH Long Signal Checking ... +bool XAU5XOBDLHHasLongSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXOBDLHEnableSignaller || + !xAU5MXOBDLHAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XOBDLH Short Signal Checking ... +bool XAU5XOBDLHHasShortSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXOBDLHEnableSignaller || + !xAU5MXOBDLHAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XCHMACC Long Signal Checking ... +bool XAU5XCHMACCHasLongSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXCHMACCEnableSignaller || + !xAU5MXCHMACCAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XCHMACC Short Signal Checking ... +bool XAU5XCHMACCHasShortSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXCHMACCEnableSignaller || + !xAU5MXCHMACCAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XCHMACMN Long Signal Checking ... +bool XAU5XCHMACMNHasLongSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXCHMACMNEnableSignaller || + !xAU5MXCHMACMNAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XCHMACMN Short Signal Checking ... +bool XAU5XCHMACMNHasShortSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXCHMACMNEnableSignaller || + !xAU5MXCHMACMNAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XCHMACMX Long Signal Checking ... +bool XAU5XCHMACMXHasLongSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXCHMACMXEnableSignaller || + !xAU5MXCHMACMXAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// XCHMACMX Short Signal Checking ... +bool XAU5XCHMACMXHasShortSignal() +{ + // + bool result = false; + + // + // Validate Args ... + if (!xAU5MXCHMACMXEnableSignaller || + !xAU5MXCHMACMXAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + false + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + false + // + ) + // + && + // + // Exceptions: + // there some commonly Exceptions which makes our choice incorrect, + // here we are combined knownly Exceptions ... + !( + // + // for Exception we used XLH Conditions as follow ... + // + // Check Conditions if Price In Signal Range ... + (xAU5Conditions.isXLHPriceInSignalRange && + // + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Under Signal ... + ( + // + ((xAU5Conditions.isXLHPriceUnderSignal || + xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is Over Signal ... + ( + // + ((xAU5Conditions.isXLHPriceOverSignal || + xAU5Conditions.isXLHPriceCrossedOverSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + || + // + // Check Conditions if Price is not has clear state ... + ( + // + ((!xAU5Conditions.isXLHPriceOverSignal && + !xAU5Conditions.isXLHPriceUnderSignal && + !xAU5Conditions.isXLHPriceInSignalRange && + !xAU5Conditions.isXLHPriceCrossedOverSignal && + !xAU5Conditions.isXLHPriceCrossedUnderSignal) && + ( + // + // Next Step is to Check LL and HH Same Style ... + // + // Check if Both LL and HH Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If LL Same In Length ... + ((xAU5Conditions.isXLHLLSameInLength && + !xAU5Conditions.isXLHHHSameInLength) && + // + ( + false) + // + ) + // + || + // + // Check If HH is Same In Length ... + ((xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + || + // + // Not Same LL or HH in Lenght ... + ((!xAU5Conditions.isXLHHHSameInLength && + !xAU5Conditions.isXLHLLSameInLength) && + // + ( + false) + // + ) + // + ) + // + ) + // + ) + // + ) + // + ; + + // + return result; +} + +// +// END Signal Providers ... +// + +// +// START Utilities ... +// + +// +// Converts Market Conditions to Specific String Representation ... +string XAU5GetConditionsString( + XAU5MarketConditions &condition, // Specify Conditiond + string separator = ",", // Specify Separator + bool ignoreFalses = true // Ignore False Conditions +) +{ + // + XAU5MarketConditions mConditions = {}; + + // + mConditions = condition; + + // + string result = "\n"; + + // + // XOBD ... + result += + "| XOBD |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXOBDSwingLow)) + { + result += "isXOBDSwingLow: " + (string)mConditions.isXOBDSwingLow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXOBDSwingHigh)) + { + result += "isXOBDSwingHigh: " + (string)mConditions.isXOBDSwingHigh + separator; + } + + // + // Separator ... + result += separator; + + // + // XTM ... + result += + "| XTM |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMPeak)) + { + result += "isXTMPeak: " + (string)mConditions.isXTMPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMVale)) + { + result += "isXTMVale: " + (string)mConditions.isXTMVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMStartBullish)) + { + result += "isXTMStartBullish: " + (string)mConditions.isXTMStartBullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMStartBullishAfterNeutural)) + { + result += "isXTMStartBullishAfterNeutural: " + (string)mConditions.isXTMStartBullishAfterNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMBullish)) + { + result += "isXTMBullish: " + (string)mConditions.isXTMBullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMEndBullish)) + { + result += "isXTMEndBullish: " + (string)mConditions.isXTMEndBullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMEndBullishByNeutural)) + { + result += "isXTMEndBullishByNeutural: " + (string)mConditions.isXTMEndBullishByNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMStartBearish)) + { + result += "isXTMStartBearish: " + (string)mConditions.isXTMStartBearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMStartBearishAfterNeutural)) + { + result += "isXTMStartBearishAfterNeutural: " + (string)mConditions.isXTMStartBearishAfterNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMBearish)) + { + result += "isXTMBearish: " + (string)mConditions.isXTMBearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMEndBearish)) + { + result += "isXTMEndBearish: " + (string)mConditions.isXTMEndBearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMEndBearishByNeutural)) + { + result += "isXTMEndBearishByNeutural: " + (string)mConditions.isXTMEndBearishByNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMNeutural)) + { + result += "isXTMNeutural: " + (string)mConditions.isXTMNeutural + separator; + } + + // + // Separator ... + result += separator; + + // + // XAMA ... + result += + "| XAMA |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAPeak)) + { + result += "isXAMAPeak: " + (string)mConditions.isXAMAPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAVale)) + { + result += "isXAMAVale: " + (string)mConditions.isXAMAVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAStartBullish)) + { + result += "isXAMAStartBullish: " + (string)mConditions.isXAMAStartBullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAStartBullishAfterNeutural)) + { + result += "isXAMAStartBullishAfterNeutural: " + (string)mConditions.isXAMAStartBullishAfterNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMABullish)) + { + result += "isXAMABullish: " + (string)mConditions.isXAMABullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAEndBullish)) + { + result += "isXAMAEndBullish: " + (string)mConditions.isXAMAEndBullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAEndBullishByNeutural)) + { + result += "isXAMAEndBullishByNeutural: " + (string)mConditions.isXAMAEndBullishByNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAStartBearish)) + { + result += "isXAMAStartBearish: " + (string)mConditions.isXAMAStartBearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAStartBearishAfterNeutural)) + { + result += "isXAMAStartBearishAfterNeutural: " + (string)mConditions.isXAMAStartBearishAfterNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMABearish)) + { + result += "isXAMABearish: " + (string)mConditions.isXAMABearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAEndBearish)) + { + result += "isXAMAEndBearish: " + (string)mConditions.isXAMAEndBearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAEndBearishByNeutural)) + { + result += "isXAMAEndBearishByNeutural: " + (string)mConditions.isXAMAEndBearishByNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMANeutural)) + { + result += "isXAMANeutural: " + (string)mConditions.isXAMANeutural + separator; + } + + // + // Separator ... + result += separator; + + // + // XTD ... + result += + "| XTD |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalPeak)) + { + result += "isXTDSignalPeak: " + (string)mConditions.isXTDSignalPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalVale)) + { + result += "isXTDSignalVale: " + (string)mConditions.isXTDSignalVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullishPeak)) + { + result += "isXTDBullishPeak: " + (string)mConditions.isXTDBullishPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullishVale)) + { + result += "isXTDBullishVale: " + (string)mConditions.isXTDBullishVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBearishPeak)) + { + result += "isXTDBearishPeak: " + (string)mConditions.isXTDBearishPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBearishVale)) + { + result += "isXTDBearishVale: " + (string)mConditions.isXTDBearishVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullOverBear)) + { + result += "isXTDBullOverBear: " + (string)mConditions.isXTDBullOverBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullUnderBear)) + { + result += "isXTDBullUnderBear: " + (string)mConditions.isXTDBullUnderBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalOverBear)) + { + result += "isXTDSignalOverBear: " + (string)mConditions.isXTDSignalOverBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalUnderBear)) + { + result += "isXTDSignalUnderBear: " + (string)mConditions.isXTDSignalUnderBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullCrossedOverBear)) + { + result += "isXTDBullCrossedOverBear: " + (string)mConditions.isXTDBullCrossedOverBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullCrossedUnderBear)) + { + result += "isXTDBullCrossedUnderBear: " + (string)mConditions.isXTDBullCrossedUnderBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalCrossedOverBear)) + { + result += "isXTDSignalCrossedOverBear: " + (string)mConditions.isXTDSignalCrossedOverBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalCrossedUnderBear)) + { + result += "isXTDSignalCrossedUnderBear: " + (string)mConditions.isXTDSignalCrossedUnderBear + separator; + } + + // + // Separator ... + result += separator; + + // + // XFI ... + result += + "| XFI |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFIPeak)) + { + result += "isXFIPeak: " + (string)mConditions.isXFIPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFIVale)) + { + result += "isXFIVale: " + (string)mConditions.isXFIVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFIOverZero)) + { + result += "isXFIOverZero: " + (string)mConditions.isXFIOverZero + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFIUnderZero)) + { + result += "isXFIUnderZero: " + (string)mConditions.isXFIUnderZero + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFICrossedOverZero)) + { + result += "isXFICrossedOverZero: " + (string)mConditions.isXFICrossedOverZero + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFICrossedUnderZero)) + { + result += "isXFICrossedUnderZero: " + (string)mConditions.isXFICrossedUnderZero + separator; + } + + // + // Separator ... + result += separator; + + // + // XTS ... + result += + "| XTS |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSAllSame)) + { + result += "isXTSAllSame: " + (string)mConditions.isXTSAllSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentMin)) + { + result += "isXTSCurrentMin: " + (string)mConditions.isXTSCurrentMin + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentMax)) + { + result += "isXTSCurrentMax: " + (string)mConditions.isXTSCurrentMax + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentOverFarest)) + { + result += "isXTSCurrentOverFarest: " + (string)mConditions.isXTSCurrentOverFarest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentOverNearest)) + { + result += "isXTSCurrentOverNearest: " + (string)mConditions.isXTSCurrentOverNearest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentOverMediest)) + { + result += "isXTSCurrentOverMediest: " + (string)mConditions.isXTSCurrentOverMediest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentUnderFarest)) + { + result += "isXTSCurrentUnderFarest: " + (string)mConditions.isXTSCurrentUnderFarest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentUnderNearest)) + { + result += "isXTSCurrentUnderNearest: " + (string)mConditions.isXTSCurrentUnderNearest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentUnderMediest)) + { + result += "isXTSCurrentUnderMediest: " + (string)mConditions.isXTSCurrentUnderMediest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedOverFarest)) + { + result += "isXTSCurrentCrossedOverFarest: " + (string)mConditions.isXTSCurrentCrossedOverFarest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedOverNearest)) + { + result += "isXTSCurrentCrossedOverNearest: " + (string)mConditions.isXTSCurrentCrossedOverNearest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedOverMediest)) + { + result += "isXTSCurrentCrossedOverMediest: " + (string)mConditions.isXTSCurrentCrossedOverMediest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedUnderFarest)) + { + result += "isXTSCurrentCrossedUnderFarest: " + (string)mConditions.isXTSCurrentCrossedUnderFarest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedUnderNearest)) + { + result += "isXTSCurrentCrossedUnderNearest: " + (string)mConditions.isXTSCurrentCrossedUnderNearest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedUnderMediest)) + { + result += "isXTSCurrentCrossedUnderMediest: " + (string)mConditions.isXTSCurrentCrossedUnderMediest + separator; + } + + // + // Separator ... + result += separator; + + // + // XLH ... + result += + "| XLH |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHHHIncreased)) + { + result += "isXLHHHIncreased: " + (string)mConditions.isXLHHHIncreased + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHHHDecreased)) + { + result += "isXLHHHDecreased: " + (string)mConditions.isXLHHHDecreased + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHLLIncreased)) + { + result += "isXLHLLIncreased: " + (string)mConditions.isXLHLLIncreased + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHLLDecreased)) + { + result += "isXLHLLDecreased: " + (string)mConditions.isXLHLLDecreased + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHHighAttachedHH)) + { + result += "isXLHHighAttachedHH: " + (string)mConditions.isXLHHighAttachedHH + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHLowAttachedLL)) + { + result += "isXLHLowAttachedLL: " + (string)mConditions.isXLHLowAttachedLL + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHHHSameInLength)) + { + result += "isXLHHHSameInLength: " + (string)mConditions.isXLHHHSameInLength + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHLLSameInLength)) + { + result += "isXLHLLSameInLength: " + (string)mConditions.isXLHLLSameInLength + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHPriceCrossedOverSignal)) + { + result += "isXLHPriceCrossedOverSignal: " + (string)mConditions.isXLHPriceCrossedOverSignal + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHPriceOverSignal)) + { + result += "isXLHPriceOverSignal: " + (string)mConditions.isXLHPriceOverSignal + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHPriceCrossedUnderSignal)) + { + result += "isXLHPriceCrossedUnderSignal: " + (string)mConditions.isXLHPriceCrossedUnderSignal + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHPriceUnderSignal)) + { + result += "isXLHPriceUnderSignal: " + (string)mConditions.isXLHPriceUnderSignal + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHPriceInSignalRange)) + { + result += "isXLHPriceInSignalRange: " + (string)mConditions.isXLHPriceInSignalRange + separator; + } + + // + // Separator ... + result += separator; + + // + // XRSI ... + result += + "| XRSI |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSIPeak)) + { + result += "isXRSIPeak: " + (string)mConditions.isXRSIPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSIVale)) + { + result += "isXRSIVale: " + (string)mConditions.isXRSIVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSICrossedOverLongExit)) + { + result += "isXRSICrossedOverLongExit: " + (string)mConditions.isXRSICrossedOverLongExit + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSICrossedOverLongEntry)) + { + result += "isXRSICrossedOverLongEntry: " + (string)mConditions.isXRSICrossedOverLongEntry + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSICrossedUnderShortExit)) + { + result += "isXRSICrossedUnderShortExit: " + (string)mConditions.isXRSICrossedUnderShortExit + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSICrossedUnderShortEntry)) + { + result += "isXRSICrossedUnderShortEntry: " + (string)mConditions.isXRSICrossedUnderShortEntry + separator; + } + + // + // Separator ... + result += separator; + + // + // XCHLH ... + result += + "| XCHLH |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSameHHs)) + { + result += "isXCHLHSameHHs: " + (string)mConditions.isXCHLHSameHHs + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSameLLs)) + { + result += "isXCHLHSameLLs: " + (string)mConditions.isXCHLHSameLLs + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSCMCHHSame)) + { + result += "isXCHLHSCMCHHSame: " + (string)mConditions.isXCHLHSCMCHHSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSCMCLLSame)) + { + result += "isXCHLHSCMCLLSame: " + (string)mConditions.isXCHLHSCMCLLSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSCLCHHSame)) + { + result += "isXCHLHSCLCHHSame: " + (string)mConditions.isXCHLHSCLCHHSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSCLCLLSame)) + { + result += "isXCHLHSCLCLLSame: " + (string)mConditions.isXCHLHSCLCLLSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHMCLCHHSame)) + { + result += "isXCHLHMCLCHHSame: " + (string)mConditions.isXCHLHMCLCHHSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHMCLCLLSame)) + { + result += "isXCHLHMCLCLLSame: " + (string)mConditions.isXCHLHMCLCLLSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHMCOnTopOfLC)) + { + result += "isXCHLHMCOnTopOfLC: " + (string)mConditions.isXCHLHMCOnTopOfLC + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHMCInBottomOfLC)) + { + result += "isXCHLHMCInBottomOfLC: " + (string)mConditions.isXCHLHMCInBottomOfLC + separator; + } + + // + // Separator ... + result += separator; + + // + // XCHMA ... + result += + "| XCHMA |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCOverMax)) + { + result += "isXCHMASCOverMax: " + (string)mConditions.isXCHMASCOverMax + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCOverMin)) + { + result += "isXCHMASCOverMin: " + (string)mConditions.isXCHMASCOverMin + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCUnderMax)) + { + result += "isXCHMASCUnderMax: " + (string)mConditions.isXCHMASCUnderMax + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCUnderMin)) + { + result += "isXCHMASCUnderMin: " + (string)mConditions.isXCHMASCUnderMin + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCCrossedOverMax)) + { + result += "isXCHMASCCrossedOverMax: " + (string)mConditions.isXCHMASCCrossedOverMax + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCCrossedUnderMax)) + { + result += "isXCHMASCCrossedUnderMax: " + (string)mConditions.isXCHMASCCrossedUnderMax + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCCrossedOverMin)) + { + result += "isXCHMASCCrossedOverMin: " + (string)mConditions.isXCHMASCCrossedOverMin + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCCrossedUnderMin)) + { + result += "isXCHMASCCrossedUnderMin: " + (string)mConditions.isXCHMASCCrossedUnderMin + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCPeak)) + { + result += "isXCHMASCPeak: " + (string)mConditions.isXCHMASCPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCVale)) + { + result += "isXCHMASCVale: " + (string)mConditions.isXCHMASCVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCTrendsUp)) + { + result += "isXCHMASCTrendsUp: " + (string)mConditions.isXCHMASCTrendsUp + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCTrendsDown)) + { + result += "isXCHMASCTrendsDown: " + (string)mConditions.isXCHMASCTrendsDown + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCFastOverSlow)) + { + result += "isXCHMASCFastOverSlow: " + (string)mConditions.isXCHMASCFastOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCFastUnderSlow)) + { + result += "isXCHMASCFastUnderSlow: " + (string)mConditions.isXCHMASCFastUnderSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCFastCrossedOverSlow)) + { + result += "isXCHMASCFastCrossedOverSlow: " + (string)mConditions.isXCHMASCFastCrossedOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCFastCrossedUnderSlow)) + { + result += "isXCHMASCFastCrossedUnderSlow: " + (string)mConditions.isXCHMASCFastCrossedUnderSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCPeak)) + { + result += "isXCHMAMCPeak: " + (string)mConditions.isXCHMAMCPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCVale)) + { + result += "isXCHMAMCVale: " + (string)mConditions.isXCHMAMCVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCTrendsUp)) + { + result += "isXCHMAMCTrendsUp: " + (string)mConditions.isXCHMAMCTrendsUp + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCTrendsDown)) + { + result += "isXCHMAMCTrendsDown: " + (string)mConditions.isXCHMAMCTrendsDown + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCFastOverSlow)) + { + result += "isXCHMAMCFastOverSlow: " + (string)mConditions.isXCHMAMCFastOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCFastUnderSlow)) + { + result += "isXCHMAMCFastUnderSlow: " + (string)mConditions.isXCHMAMCFastUnderSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCFastCrossedOverSlow)) + { + result += "isXCHMAMCFastCrossedOverSlow: " + (string)mConditions.isXCHMAMCFastCrossedOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCFastCrossedUnderSlow)) + { + result += "isXCHMAMCFastCrossedUnderSlow: " + (string)mConditions.isXCHMAMCFastCrossedUnderSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCPeak)) + { + result += "isXCHMALCPeak: " + (string)mConditions.isXCHMALCPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCVale)) + { + result += "isXCHMALCVale: " + (string)mConditions.isXCHMALCVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCTrendsUp)) + { + result += "isXCHMALCTrendsUp: " + (string)mConditions.isXCHMALCTrendsUp + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCTrendsDown)) + { + result += "isXCHMALCTrendsDown: " + (string)mConditions.isXCHMALCTrendsDown + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCFastOverSlow)) + { + result += "isXCHMALCFastOverSlow: " + (string)mConditions.isXCHMALCFastOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCFastUnderSlow)) + { + result += "isXCHMALCFastUnderSlow: " + (string)mConditions.isXCHMALCFastUnderSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCFastCrossedOverSlow)) + { + result += "isXCHMALCFastCrossedOverSlow: " + (string)mConditions.isXCHMALCFastCrossedOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCFastCrossedUnderSlow)) + { + result += "isXCHMALCFastCrossedUnderSlow: " + (string)mConditions.isXCHMALCFastCrossedUnderSlow + separator; + } + + // + // Separator ... + result += separator; + + // + return result; +} + +void Add( + ENUM_XAU5_SIGNAL_PROVIDERS item, + ENUM_XAU5_SIGNAL_PROVIDERS &items[]) +{ + // + ArrayResize( + items, + ArraySize(items) + 1); + + // + items[ArraySize(items) - 1] = item; +} +// +// START Utilities ... +// \ No newline at end of file diff --git a/BKPS/XAU5-0.43/Classes/x-saherelm.class.lib.ex5 b/BKPS/XAU5-0.43/Classes/x-saherelm.class.lib.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..492f507ba4bdb834efd361299cc71ddb853c6f8a GIT binary patch literal 11268 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 K?;G9n%KrmPoobW- literal 0 HcmV?d00001 diff --git a/BKPS/XAU5-0.43/Classes/x-saherelm.class.lib.mq5 b/BKPS/XAU5-0.43/Classes/x-saherelm.class.lib.mq5 new file mode 100644 index 0000000..68f4847 --- /dev/null +++ b/BKPS/XAU5-0.43/Classes/x-saherelm.class.lib.mq5 @@ -0,0 +1,10316 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Class Library +// -------------------------------------- +// Name: XClass +// Description: provides all classes for use ... +// +// +// 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 +#include +#include +#include +#include +#include +// +#include "../Libraries/x-saherelm.draw.lib.mq5" +#include "../Libraries/x-saherelm.alert.lib.mq5" +#include "../Libraries/x-saherelm.models.lib.mq5" +#include "../Libraries/x-saherelm.common.lib.mq5" + +// +// START Constant 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 Constant Definitions ... +// + +// +// START Model Definitions ... +// + +// +string X_SIGNAL_TP = "TP"; +string X_SIGNAL_SL = "SL"; +string X_SIGNAL_TYPE = "TY"; +string X_SIGNAL_TICKET = "T"; +string X_SIGNAL_RISKFREE_STEP = "RFS"; +string X_SIGNAL_RISKFREE_RATE = "RFR"; + +// +// Model Signal Handler Result on XCTrade Class ... +struct XTraderHandlerResult +{ + // + // List Of Closed On SL Signals ... + XSignal sl[]; + + // + // List Of Closed On TP Signals ... + XSignal tp[]; + + // + // List Of Risk Free Signals ... + XSignal rf[]; +}; + +// +// Model OnTrade Event Handler Result on XCTrade Class ... +struct XOnTradeHandlerResult +{ + // + bool hasNewDeal; + int newDeals; + + // + bool hasNewOrder; + int newOrders; + + // + bool hasNewPosition; + int newPositions; + + // + bool hasNewHistoryOrder; + int newHistoryOrders; +}; + +// +// Model Guard Action Applied Signals ... +struct XGuardHandlerResult +{ + // + // Critical Guard ... + XSignal criticals[]; + + // + // Max Guard ... + XSignal maxes[]; + + // + // Old ... + XSignal olds[]; + + // + // Determines Stopout Action Cals or not ... + bool isStopOut; +}; + +// +// Define Volume States ... +struct XVolumeInfo +{ + // + // Current Available Static Volume ... + double staticVolume; + + // + // Static Volume Calculation Method ... + string staticVolumeCalculationMethod; + + // + // Current Maximum Appliable Volume ... + double maxAllowedVolume; + + // + // Static Volume Increase Multiplier ... + double volumeIncreaseMultiplier; + + // + // Multiply Volume Based On Balance Growing ... + double balanceGowingToApplyMultiplier; + + // + // Where to Increase MaxAllowed Volume ... + double balanceGrowingToIncreaseMaxAllowedVolume; +}; + +// +// Model a Simple Provider Status ... +struct XSignallerInfo +{ + // + // Provider Name ... + string name; + + // + // Number of Longs ... + int longs; + + // + // Number of Shorts ... + int shorts; +}; + +// +// Model Some of Usefull Signals and Market Data ... +struct XSummaryInfo +{ + // + // Define Max Signal Volume ... + double maxSignalVolume; + + // + // Max DrawDown ... + double maxDrawDown; + + // + // Max DrawUp ... + double maxDrawUp; + + // + // Max Number of Same Time Signals ... + int maxSameTimeSignals; + + // + // Number of Long Trades ... + int longSignals; + + // + // Number of Short Trades ... + int shortSignals; + + // + // Number of TPs Attached ... + int numberOfTPs; + + // + // Number of SLs Attached ... + int numberOfSLs; +}; + +// +// Model Account info ... +struct XAccountInfo +{ + // + // User Account ... + string user; + + // + // Name of Client ... + string name; + + // + // Trade Server Name ... + string server; + + // + // Broker Name ... + string broker; + + // + // Account Trade Mode ... + ENUM_ACCOUNT_TRADE_MODE mode; + + // + // Account Leverage ... + long leverage; + + // + // Currency ... + string currency; + + // + // Deposit ... + double deposit; + + // + // Balance ... + double balance; + + // + // Min Balance for Open Trades ... + double minBalanceForOpenTrades; +}; + +// +// this is a Model Which holds Reports for Specific Time Periods ... +struct XReport +{ + // + datetime start; + + // + datetime end; + + // + XAccountInfo accountInfo; + + // + XVolumeInfo volumeInfo; + + // + XSignallerInfo signallersInfo[]; + + // + XSummaryInfo summaryInfo; +}; + +// +// an Enumeration Object which determines Report Type ... +enum ENUM_XREPORT_TYPES +{ + // + // Main Report ... + XREPORT_MAIN, + // + // Daily Report ... + XREPORT_DAILY, + // + // Weekly Report ... + XREPORT_WEEKLY, + // + // Monthly Report ... + XREPORT_MONTHLY, +}; + +// +// a Signal Protection Structure ... +struct XProtectedSignal +{ + // + ulong ticket; + + // + datetime time[]; + + // + double profit[]; +}; + +// +// Represent Collector State Based on Time ... +struct XCollector +{ + // + // time in checking ... + datetime time; + + // + // Signal Volume ... + double volume; + + // + // Max DrawDown in Check Time ... + double maxDrawDown; + + // + // Max Allowed Volume in Check Time ... + double maxAllowedVolume; + + // + // Minimum required Balance for Opening Trades at Check Time ... + double minBalanceForOpenTrade; +}; + +// +// Cross Signals Methods ... +enum ENUM_X_CROSS_SIGNAL_METHOD +{ + // + // Do Nothing and Ignore them ... + X_CROSS_SIGNAL_DO_NOTHING, + // + // Accept all Cross Signals and Act Usually ... + X_CROSS_SIGNAL_REGULAR, + // + // Accept all Cross Signals and for Directional Act Usually and for Indirectional Ac Important ... + X_CROSS_SIGNAL_DIRECTION_REGULAR_INDIRECTION_IMPORTANT, + // + // Accept all Cross Signals and for Directional Act Important and for Indirectional Ac Usually ... + X_CROSS_SIGNAL_DIRECTION_IMPORTANT_INDIRECTION_REGULAR, + // + // Accept Only Indirectional Signals and Act Usually ... + X_CROSS_SIGNAL_INDIRECTION_REGULAR, + // + // Accept Only Directional Signals and Act Usually ... + X_CROSS_SIGNAL_DIRECTION_REGULAR, + // + // Accept Only Indirectional Signals and Act Important ... + X_CROSS_SIGNAL_INDIRECTION_IMPORTANT, + // + // Accept Only Directional Signals and Act Important ... + X_CROSS_SIGNAL_DIRECTION_IMPORTANT, +}; + +// +// the Action which Guard Handler Can Done when Attacked ... +enum ENUM_X_GUARD_ACTIONS +{ + // + // Do Nothing ... + X_GUARD_DO_NOTHING, + // + // Close All Open Positions ... + X_GUARD_CLOSE_ALL, + // + // Close Max In Drawdown Position ... + X_GUARD_CLOSE_MAX_IN_DD, + // + // Partial Close Max In Drawdown Position by 1% of Volume ... + X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_1, + // + // Partial Close Max In Drawdown Position by 2% of Volume ... + X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_2, + // + // Partial Close Max In Drawdown Position by 3% of Volume ... + X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_3, + // + // Partial Close Max In Drawdown Position by 5% of Volume ... + X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_5, + // + // Partial Close Max In Drawdown Position by 10% of Volume ... + X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_10, + // + // Partial Close Max In Drawdown Position by 15% of Volume ... + X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_15, + // + // Partial Close Max In Drawdown Position by 20% of Volume ... + X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_20, + // + // Partial Close Max In Drawdown Position by 25% of Volume ... + X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_25, + // + // Partial Close Max In Drawdown Position by 30% of Volume ... + X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_30, + // + // Partial Close Max In Drawdown Position by 40% of Volume ... + X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_40, + // + // Partial Close Max In Drawdown Position by 50% of Volume ... + X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_50, + // + // Partial Close Max In Drawdown Position by 60% of Volume ... + X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_60, + // + // Partial Close Max In Drawdown Position by 70% of Volume ... + X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_70, + // + // Partial Close Max In Drawdown Position by 75% of Volume ... + X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_75, +}; + +// +// Guard Reason ... +enum ENUM_X_GUARD_REASONS +{ + // + // Critical ... + X_GUARDED_CRITICAL, + // + // Max ... + X_GUARDED_MAX, + // + // Old ... + X_GUARDED_OLD +}; + +// +// All Suuported Support Positions Guard ... +enum ENUM_X_GUARD_SUPPORT_METHODS +{ + // + // Ignore Supporting ... + X_SUPPORT_DO_NOTHING, + // + // Full Both Side Support ... + X_SUPPORT_FULL, + // + // Indirectional Supports On Drawing Down ... + X_SUPPORT_IN_DRAWDOWN_INDIRECTIONAL, + // + // Directional Supports On Drawing Up ... + X_SUPPORT_IN_DRAWUP_DIRECTIONAL, +}; + +// +// END Model Definitions ... +// + +// +// START Overrides ... +// + +// +// XBase Class ... +class XCBase +{ + // + // Public ... +public: + // + // Protected ... +protected: + // + void AddItemToBuffer( + double item, // Specified Item + double &buffer[] // Specified Buffer + ) + { + // + int bufferSize = ArraySize(buffer); + + // + ArrayResize( + buffer, + bufferSize + 1); + + // + buffer[bufferSize] = item; + } + void AddItemToBuffer( + datetime item, // Specified Item + datetime &buffer[] // Specified Buffer + ) + { + // + int bufferSize = ArraySize(buffer); + + // + ArrayResize( + buffer, + bufferSize + 1); + + // + buffer[bufferSize] = item; + } + void AddItemToBuffer( + XSignal &item, + XSignal &buffer[]) + { + // + ArrayResize( + buffer, + ArraySize(buffer) + 1); + + // + buffer[ArraySize(buffer) - 1] = item; + } + void AddItemToBuffer( + XCollector &item, // Specified Item + XCollector &buffer[] // Specified Buffer + ) + { + // + int bufferSize = ArraySize(buffer); + + // + ArrayResize( + buffer, + bufferSize + 1); + + // + buffer[bufferSize] = item; + } + void AddItemToBuffer( + XSignallerInfo &item, + XSignallerInfo &buffer[]) + { + // + ArrayResize( + buffer, + ArraySize(buffer) + 1); + + // + buffer[ArraySize(buffer) - 1] = item; + } + void AddItemToBuffer( + XProtectedSignal &item, // Item ... + XProtectedSignal &buffer[] // Buffer ... + ) + { + // + int bufferSize = ArraySize(buffer); + + // + ArrayResize( + buffer, + bufferSize + 1); + buffer[bufferSize] = item; + } + + // + void CleanBuffer(double &buffer[]) + { + // + ArrayFree(buffer); + ArrayResize(buffer, 0); + } + void CleanBuffer(XDeal &buffer[]) + { + // + ArrayFree(buffer); + ArrayResize(buffer, 0); + } + void CleanBuffer(XOrder &buffer[]) + { + // + ArrayFree(buffer); + ArrayResize(buffer, 0); + } + void CleanBuffer(XSignal &buffer[]) + { + // + ArrayFree(buffer); + ArrayResize(buffer, 0); + } + void CleanBuffer(XCollector &buffer[]) + { + // + ArrayFree(buffer); + ArrayResize(buffer, 0); + } + void CleanBuffer(XSignallerInfo &buffer[]) + { + // + ArrayFree(buffer); + ArrayResize(buffer, 0); + } + void CleanBuffer(XProtectedSignal &buffer[]) + { + // + ArrayFree(buffer); + ArrayResize(buffer, 0); + } + + // + void CopyBuffer( + const XSignallerInfo &source[], // Source Buffer ... + XSignallerInfo &dest[] // Dest Buffer ... + ) + { + // + CleanBuffer(dest); + + // + int sourceCount = ArraySize(source); + if (sourceCount <= 0) + { + return; + } + + // + // Loop ... + for (int i = 0; i < sourceCount; i++) + { + // + XSignallerInfo iInfo = source[i]; + + // + AddItemToBuffer( + iInfo, + dest); + } + } + void CopyBuffer( + XProtectedSignal &source[], // Source Buffer to Copy + XProtectedSignal &dest[] // Fill this buffer using source + ) + { + // + CleanBuffer(dest); + + // + int sourceCount = ArraySize(source); + if (sourceCount <= 0) + { + return; + } + + // + for (int i = 0; i < sourceCount; i++) + { + // + XProtectedSignal iItem = source[i]; + + // + AddItemToBuffer( + iItem, + dest); + } + } + + // + // Private ... +private: +}; + +// +// XCTrade Base Class ... +class XSCTrade : 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)); + } +}; +// +// END Overrides ... +// + +// +// START Global Definitions: Variables, Properties and etc ... +// + +// +// XCMD5 a library for Hashing ... +class XCMD5 : public XCBase +{ + // + // Public Provides ... +public: + // + // Protected Provides ... + + // + // Constructor ... + XCMD5(void) {} + + // + // Deconstructor ... + ~XCMD5(void) {} + + // + // Hash Specified Char Array ... + string Hash( + uchar &source[], // Specify Char Array to Hash + int length = 0 // Specify Length of Char Array which required to hash + ) + { + // + string result = ""; + + // + int sourceCount = ArraySize(source); + + // + // Validate Args ... + if ( + sourceCount <= 0 || + (sourceCount > 0 && length > sourceCount)) + { + return result; + } + + // + // Normalize Args ... + if (length == 0) + { + length = sourceCount; + } + + // + // Init MD5 ... + MD5Init(); + + // + // Update Buffer ... + MD5Update(source, length); + + // + // Calculate Result ... + result = MD5Final(); + + // + return result; + } + + // + // Hash Specified String ... + string Hash( + string source // Specified String + ) + { + // + string result = ""; + + // + // Converts String to Char Array ... + uchar bytes[]; + StringToCharArray( + source, + bytes, + 0, + StringLen(source)); + + // + 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; + } +}; + +// +// XSaherElm Account Info Class ... +class XCAccountInfo : public XCBase +{ + // + // Public properties ... +public: + // + // Constructro ... + void XCAccountInfo() + { + // + mAccountInfo = new CAccountInfo(); + + // + mInitialBalance = mAccountInfo.Balance(); + } + + // + // Deconstructor ... + void ~XCAccountInfo() + { + // + mInitialBalance = 0; + } + + // + // 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 Initial Deposit Balance ... + double GetInitialBalance() + { + return mInitialBalance; + } + + // + // 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; + } + + // + // Protected properties ... +protected: + // + // Private properties ... +private: + // + // Initial Account Balance ... + double mInitialBalance; + + // + // Account Info ... + CAccountInfo mAccountInfo; +}; + +// +// XSaherElm Report Info Class ... +class XCReporter : public XCBase +{ + // + // Public Provided ... +public: + // + // Constructro ... + void XCReporter() + { + // + mAccountInfo = new XCAccountInfo(); + + // + Reset(); + } + + // + // Deconstructor ... + void ~XCReporter() + { + } + + // + // Reset Specific Report ... + void Reset( + ENUM_XREPORT_TYPES type // Specify Report Type + ) + { + CleanReport(type); + } + + // + // Reset All Reports ... + void Reset() + { + // + CleanReport(XREPORT_MAIN); + CleanReport(XREPORT_MONTHLY); + CleanReport(XREPORT_WEEKLY); + CleanReport(XREPORT_DAILY); + } + + // + // Update Volume Info ... + void UpdateReportVolumeInfo( + ENUM_XREPORT_TYPES type, // Specified Report Type + // + double staticVolume, // Current Available Static Volume + string staticVolumeCalculationMethod, // Static Volume Calculation Method + double maxAllowedVolume, // Current Maximum Appliable Volume + double volumeIncreaseMultiplier, // Static Volume Increase Multiplier + double balanceGowingToApplyMultiplier, // Multiply Volume Based On Balance Growing + double balanceGrowingToIncreaseMaxAllowedVolume // Where to Increase MaxAllowed Volume + ) + { + // + // Filling Account Info ... + FillReportAccountInfo(type); + + // + switch (type) + { + // + // Main ... + case XREPORT_MAIN: + // + FillingVolumeInfo( + mMainReport, + staticVolume, + staticVolumeCalculationMethod, + maxAllowedVolume, + volumeIncreaseMultiplier, + balanceGowingToApplyMultiplier, + balanceGrowingToIncreaseMaxAllowedVolume); + break; + + // + // Monthly ... + case XREPORT_MONTHLY: + // + FillingVolumeInfo( + mMonthlyReport, + staticVolume, + staticVolumeCalculationMethod, + maxAllowedVolume, + volumeIncreaseMultiplier, + balanceGowingToApplyMultiplier, + balanceGrowingToIncreaseMaxAllowedVolume); + break; + + // + // Weekly ... + case XREPORT_WEEKLY: + // + FillingVolumeInfo( + mWeeklyReport, + staticVolume, + staticVolumeCalculationMethod, + maxAllowedVolume, + volumeIncreaseMultiplier, + balanceGowingToApplyMultiplier, + balanceGrowingToIncreaseMaxAllowedVolume); + break; + + // + // Daily ... + case XREPORT_DAILY: + // + FillingVolumeInfo( + mDailyReport, + staticVolume, + staticVolumeCalculationMethod, + maxAllowedVolume, + volumeIncreaseMultiplier, + balanceGowingToApplyMultiplier, + balanceGrowingToIncreaseMaxAllowedVolume); + break; + } + } + + // + // Update Volume Info on All Reports ... + void UpdateReportsVolumeInfo( + double staticVolume, // Current Available Static Volume + string staticVolumeCalculationMethod, // Static Volume Calculation Method + double maxAllowedVolume, // Current Maximum Appliable Volume + double volumeIncreaseMultiplier, // Static Volume Increase Multiplier + double balanceGowingToApplyMultiplier, // Multiply Volume Based On Balance Growing + double balanceGrowingToIncreaseMaxAllowedVolume // Where to Increase MaxAllowed Volume + ) + { + // + // Main ... + UpdateReportVolumeInfo( + XREPORT_MAIN, + staticVolume, + staticVolumeCalculationMethod, + maxAllowedVolume, + volumeIncreaseMultiplier, + balanceGowingToApplyMultiplier, + balanceGrowingToIncreaseMaxAllowedVolume); + + // + // Monthly ... + UpdateReportVolumeInfo( + XREPORT_MONTHLY, + staticVolume, + staticVolumeCalculationMethod, + maxAllowedVolume, + volumeIncreaseMultiplier, + balanceGowingToApplyMultiplier, + balanceGrowingToIncreaseMaxAllowedVolume); + + // + // Weekly ... + UpdateReportVolumeInfo( + XREPORT_WEEKLY, + staticVolume, + staticVolumeCalculationMethod, + maxAllowedVolume, + volumeIncreaseMultiplier, + balanceGowingToApplyMultiplier, + balanceGrowingToIncreaseMaxAllowedVolume); + + // + // Daily ... + UpdateReportVolumeInfo( + XREPORT_DAILY, + staticVolume, + staticVolumeCalculationMethod, + maxAllowedVolume, + volumeIncreaseMultiplier, + balanceGowingToApplyMultiplier, + balanceGrowingToIncreaseMaxAllowedVolume); + } + + // + // Add Specific Signal to Report ... + void AddSignalToReport( + ENUM_XREPORT_TYPES type, // Specified Report Type + const XSignal &signal, // Specified Signal + const string &providers[] // Specified Signal Providers + ) + { + // + // + // Filling Account Info ... + FillReportAccountInfo(type); + + // + switch (type) + { + // + // Main ... + case XREPORT_MAIN: + AddSignalToReport( + mMainReport, + signal, + providers); + break; + + // + // Monthly ... + case XREPORT_MONTHLY: + AddSignalToReport( + mMonthlyReport, + signal, + providers); + break; + + // + // Weekly ... + case XREPORT_WEEKLY: + AddSignalToReport( + mWeeklyReport, + signal, + providers); + break; + + // + // Daily ... + case XREPORT_DAILY: + AddSignalToReport( + mDailyReport, + signal, + providers); + break; + } + } + + // + // Add Specific Signal to All Reports ... + void AddSignalToReports( + const XSignal &signal, // Specified Signal + const string &providers[] // Specified Signal Providers + ) + { + // + // Main ... + AddSignalToReport( + XREPORT_MAIN, + signal, + providers); + + // + // Monthly ... + AddSignalToReport( + XREPORT_MONTHLY, + signal, + providers); + + // + // Weekly ... + AddSignalToReport( + XREPORT_WEEKLY, + signal, + providers); + + // + // Daily ... + AddSignalToReport( + XREPORT_DAILY, + signal, + providers); + } + + // + // Report a TP for Specific Report ... + void AddTradeTPInReport( + ENUM_XREPORT_TYPES type // Specified Report Type + ) + { + // + switch (type) + { + // + // Main ... + case XREPORT_MAIN: + AddTradeTPInReport(mMainReport); + break; + + // + // Monthly ... + case XREPORT_MONTHLY: + AddTradeTPInReport(mMonthlyReport); + break; + + // + // Weekly ... + case XREPORT_WEEKLY: + AddTradeTPInReport(mWeeklyReport); + break; + + // + // Daily ... + case XREPORT_DAILY: + AddTradeTPInReport(mDailyReport); + break; + } + } + + // + // Report a TP for All Reports ... + void AddTradeTPInReports() + { + // + // Main ... + AddTradeTPInReport(XREPORT_MAIN); + + // + // Monthly ... + AddTradeTPInReport(XREPORT_MONTHLY); + + // + // Weekly ... + AddTradeTPInReport(XREPORT_WEEKLY); + + // + // Daily ... + AddTradeTPInReport(XREPORT_DAILY); + } + + // + // Report a SL for Specific Report ... + void AddTradeSLInReport( + ENUM_XREPORT_TYPES type // Specified Report Type + ) + { + // + switch (type) + { + // + // Main ... + case XREPORT_MAIN: + AddTradeSLInReport(mMainReport); + break; + + // + // Monthly ... + case XREPORT_MONTHLY: + AddTradeSLInReport(mMonthlyReport); + break; + + // + // Weekly ... + case XREPORT_WEEKLY: + AddTradeSLInReport(mWeeklyReport); + break; + + // + // Daily ... + case XREPORT_DAILY: + AddTradeSLInReport(mDailyReport); + break; + } + } + + // + // Report a SL for All Reports ... + void AddTradeSLInReports() + { + // + // Main ... + AddTradeSLInReport(XREPORT_MAIN); + + // + // Monthly ... + AddTradeSLInReport(XREPORT_MONTHLY); + + // + // Weekly ... + AddTradeSLInReport(XREPORT_WEEKLY); + + // + // Daily ... + AddTradeSLInReport(XREPORT_DAILY); + } + + // + // Update Number of Same Time Trades in Specific Report ... + void UpdateMaxSameTimeTradesInReport( + ENUM_XREPORT_TYPES type, // Specified Report Type + int value // number of same time trades + ) + { + // + switch (type) + { + // + // Main ... + case XREPORT_MAIN: + UpdateMaxSameTimeTradesInReport( + mMainReport, + value); + break; + + // + // Monthly ... + case XREPORT_MONTHLY: + UpdateMaxSameTimeTradesInReport( + mMonthlyReport, + value); + break; + + // + // Weekly ... + case XREPORT_WEEKLY: + UpdateMaxSameTimeTradesInReport( + mWeeklyReport, + value); + break; + + // + // Daily ... + case XREPORT_DAILY: + UpdateMaxSameTimeTradesInReport( + mDailyReport, + value); + break; + } + } + + // + // Update Number of Same Time Trades in All Report ... + void UpdateMaxSameTimeTradesInReports( + int value // number of same time trades + ) + { + // + // Main ... + UpdateMaxSameTimeTradesInReport( + XREPORT_MAIN, + value); + + // + // Monthly ... + UpdateMaxSameTimeTradesInReport( + XREPORT_MONTHLY, + value); + + // + // Weekly ... + UpdateMaxSameTimeTradesInReport( + XREPORT_WEEKLY, + value); + + // + // Daily ... + UpdateMaxSameTimeTradesInReport( + XREPORT_DAILY, + value); + } + + // + // Update Max DrawDown in Specific Report ... + void UpdateMaxDrawDownInReport( + ENUM_XREPORT_TYPES type, // Specified Report Type + double value // draw down value + ) + { + // + switch (type) + { + // + // Main ... + case XREPORT_MAIN: + UpdateMaxDrawDownInReport( + mMainReport, + value); + break; + + // + // Monthly ... + case XREPORT_MONTHLY: + UpdateMaxDrawDownInReport( + mMonthlyReport, + value); + break; + + // + // Weekly ... + case XREPORT_WEEKLY: + UpdateMaxDrawDownInReport( + mWeeklyReport, + value); + break; + + // + // Daily ... + case XREPORT_DAILY: + UpdateMaxDrawDownInReport( + mDailyReport, + value); + break; + } + } + + // + // Update Max DrawDown in All Report ... + void UpdateMaxDrawDownInReports( + double value // draw down value + ) + { + // + // Main ... + UpdateMaxDrawDownInReport( + XREPORT_MAIN, + value); + + // + // Monthly ... + UpdateMaxDrawDownInReport( + XREPORT_MONTHLY, + value); + + // + // Weekly ... + UpdateMaxDrawDownInReport( + XREPORT_WEEKLY, + value); + + // + // Daily ... + UpdateMaxDrawDownInReport( + XREPORT_DAILY, + value); + } + + // + // Update Max DrawUp in Specific Report ... + void UpdateMaxDrawUpInReport( + ENUM_XREPORT_TYPES type, // Specified Report Type + double value // draw up value + ) + { + // + switch (type) + { + // + // Main ... + case XREPORT_MAIN: + UpdateMaxDrawUpInReport( + mMainReport, + value); + break; + + // + // Monthly ... + case XREPORT_MONTHLY: + UpdateMaxDrawUpInReport( + mMonthlyReport, + value); + break; + + // + // Weekly ... + case XREPORT_WEEKLY: + UpdateMaxDrawUpInReport( + mWeeklyReport, + value); + break; + + // + // Daily ... + case XREPORT_DAILY: + UpdateMaxDrawUpInReport( + mDailyReport, + value); + break; + } + } + + // + // Update Max DrawUp in All Report ... + void UpdateMaxDrawUpInReports( + double value // draw up value + ) + { + // + // Main ... + UpdateMaxDrawUpInReport( + XREPORT_MAIN, + value); + + // + // Monthly ... + UpdateMaxDrawUpInReport( + XREPORT_MONTHLY, + value); + + // + // Weekly ... + UpdateMaxDrawUpInReport( + XREPORT_WEEKLY, + value); + + // + // Daily ... + UpdateMaxDrawUpInReport( + XREPORT_DAILY, + value); + } + + // + // Update Min Balance for Open Trades in Specific Report ... + void UpdateMinBalanceForOpenTradesInReport( + ENUM_XREPORT_TYPES type, // Specified Report Type + double value // min balance for open trades + ) + { + // + switch (type) + { + // + // Main ... + case XREPORT_MAIN: + UpdateMinBalanceForOpenTradesInReport( + mMainReport, + value); + break; + + // + // Monthly ... + case XREPORT_MONTHLY: + UpdateMinBalanceForOpenTradesInReport( + mMonthlyReport, + value); + break; + + // + // Weekly ... + case XREPORT_WEEKLY: + UpdateMinBalanceForOpenTradesInReport( + mWeeklyReport, + value); + break; + + // + // Daily ... + case XREPORT_DAILY: + UpdateMinBalanceForOpenTradesInReport( + mDailyReport, + value); + break; + } + } + + // + // Update Min Balance for Open Trades in All Report ... + void UpdateMinBalanceForOpenTradesInReports( + double value // min balance for open trades + ) + { + // + // Main ... + UpdateMinBalanceForOpenTradesInReport( + XREPORT_MAIN, + value); + + // + // Monthly ... + UpdateMinBalanceForOpenTradesInReport( + XREPORT_MONTHLY, + value); + + // + // Weekly ... + UpdateMinBalanceForOpenTradesInReport( + XREPORT_WEEKLY, + value); + + // + // Daily ... + UpdateMinBalanceForOpenTradesInReport( + XREPORT_DAILY, + value); + } + + // + // Gnerate Specific Type Of Report String Representation ... + string GenerateReportString( + ENUM_XREPORT_TYPES type, // Specified Report Type + string separator = "\n" // Separator + ) + { + // + string result = ""; + + // + switch (type) + { + // + // Main ... + case XREPORT_MAIN: + result = GenerateReportString( + mMainReport, + separator); + break; + + // + // Monthly ... + case XREPORT_MONTHLY: + result = GenerateReportString( + mMonthlyReport, + separator); + break; + + // + // Weekly ... + case XREPORT_WEEKLY: + result = GenerateReportString( + mWeeklyReport, + separator); + break; + + // + // Daily ... + case XREPORT_DAILY: + result = GenerateReportString( + mDailyReport, + separator); + break; + } + + // + return result; + } + + // + // Protected Provided ... +protected: + // + // Private Provided ... +private: + // + // Account Info Instance ... + XCAccountInfo mAccountInfo; + + // + // Main Report ... + XReport mMainReport; + + // + // Monthly Report ... + XReport mMonthlyReport; + + // + // Weekly Report ... + XReport mWeeklyReport; + + // + // Daily Report ... + XReport mDailyReport; + + // + // Clean Specific Report ... + void CleanReport( + XReport &report // Specified Report + ) + { + // + datetime time = TimeCurrent(); + + // + // Reset Times ... + report.start = time; + report.end = -1; + + // + // Reset Account Info ... + FillReportAccountInfo(report); + + // + // Reset Summary Info ... + report.summaryInfo.maxDrawUp = 0; + report.summaryInfo.maxDrawDown = 0; + report.summaryInfo.longSignals = 0; + report.summaryInfo.numberOfTPs = 0; + report.summaryInfo.numberOfSLs = 0; + report.summaryInfo.shortSignals = 0; + report.summaryInfo.maxSignalVolume = 0; + report.summaryInfo.maxSameTimeSignals = 0; + + // + // Reset Volume Info ... + report.volumeInfo.staticVolume = 0; + report.volumeInfo.maxAllowedVolume = 0; + report.volumeInfo.volumeIncreaseMultiplier = 0; + report.volumeInfo.balanceGowingToApplyMultiplier = 0; + report.volumeInfo.staticVolumeCalculationMethod = NULL; + report.volumeInfo.balanceGrowingToIncreaseMaxAllowedVolume = 0; + + // + // Reset Signallers Info ... + CleanBuffer(report.signallersInfo); + } + void CleanReport( + ENUM_XREPORT_TYPES type // Specify Report Type + ) + { + // + switch (type) + { + // + // Main ... + case XREPORT_MAIN: + CleanReport(mMainReport); + break; + + // + // Monthly ... + case XREPORT_MONTHLY: + CleanReport(mMonthlyReport); + break; + + // + // Weekly ... + case XREPORT_WEEKLY: + CleanReport(mWeeklyReport); + break; + + // + // Daily ... + case XREPORT_DAILY: + CleanReport(mDailyReport); + break; + } + } + + // + // Update Specific Reports End Time ... + void FillReportEndTime( + XReport &report // Specified Report + ) + { + // + datetime time = TimeCurrent(); + report.end = time; + } + + // + // Filleing Report Account Info ... + void FillReportAccountInfo( + XReport &report // Specified Report + ) + { + // + FillReportEndTime(report); + + // + report.accountInfo.user = (string)mAccountInfo.GetUserAccount(); + report.accountInfo.name = mAccountInfo.GetName(); + report.accountInfo.server = mAccountInfo.GetServerName(); + report.accountInfo.broker = mAccountInfo.GetCompany(); + report.accountInfo.mode = mAccountInfo.GetTradeMode(); + report.accountInfo.leverage = mAccountInfo.GetLeverage(); + report.accountInfo.currency = mAccountInfo.GetCurrency(); + report.accountInfo.deposit = mAccountInfo.GetInitialBalance(); + report.accountInfo.balance = mAccountInfo.GetBalance(); + } + void FillReportAccountInfo( + ENUM_XREPORT_TYPES type // Specify Report Type + ) + { + // + switch (type) + { + // + // Main ... + case XREPORT_MAIN: + FillReportAccountInfo(mMainReport); + break; + + // + // Monthly ... + case XREPORT_MONTHLY: + FillReportAccountInfo(mMonthlyReport); + break; + + // + // Weekly ... + case XREPORT_WEEKLY: + FillReportAccountInfo(mWeeklyReport); + break; + + // + // Daily ... + case XREPORT_DAILY: + FillReportAccountInfo(mDailyReport); + break; + } + } + + // + // Filling Volume Info ... + void FillingVolumeInfo( + XReport &report, // Specified Report + // + double staticVolume, // Current Available Static Volume + string staticVolumeCalculationMethod, // Static Volume Calculation Method + double maxAllowedVolume, // Current Maximum Appliable Volume + double volumeIncreaseMultiplier, // Static Volume Increase Multiplier + double balanceGowingToApplyMultiplier, // Multiply Volume Based On Balance Growing + double balanceGrowingToIncreaseMaxAllowedVolume // Where to Increase MaxAllowed Volume + ) + { + // + FillReportEndTime(report); + + // + report.volumeInfo.staticVolume = staticVolume; + report.volumeInfo.maxAllowedVolume = maxAllowedVolume; + report.volumeInfo.volumeIncreaseMultiplier = volumeIncreaseMultiplier; + report.volumeInfo.staticVolumeCalculationMethod = staticVolumeCalculationMethod; + report.volumeInfo.balanceGowingToApplyMultiplier = balanceGowingToApplyMultiplier; + report.volumeInfo.balanceGrowingToIncreaseMaxAllowedVolume = balanceGrowingToIncreaseMaxAllowedVolume; + } + + // + // Add Signal to Report ... + void AddSignalToReport( + XReport &report, // Specified Report + const XSignal &signal, // Specified Signal + const string &providers[] // Specified Signal Providers + ) + { + // + FillReportEndTime(report); + + // + double volume = signal.volume; + bool isLong = signal.type == X_SIGNAL_LONG; + + // + // Update Longs and Shorts ... + if (isLong) + { + report.summaryInfo.longSignals++; + } + else + { + report.summaryInfo.shortSignals++; + } + + // + // Chack Max Volume ... + if (volume > report.summaryInfo.maxSignalVolume) + { + report.summaryInfo.maxSignalVolume = volume; + } + + // + // Update Signallers Info ... + for (int i = 0; i < ArraySize(providers); i++) + { + // + string iProvider = providers[i]; + + // + AddOrUpdateSignaller( + report, + iProvider, + signal); + } + } + + // + // Add or Update Signaller Info of Specific Report ... + void AddOrUpdateSignaller( + XReport &report, // Specified Report + const string provider, // Signal Provider name + const XSignal &signal // Specified Signal + ) + { + // + int providerIdx = -1; + int signallersInfoCount = 0; + bool isLong = signal.type == X_SIGNAL_LONG; + + // + // Prepare New One Provider ... + XSignallerInfo info = {}; + info.name = provider; + if (isLong) + { + info.longs = 1; + } + else + { + info.shorts = 1; + } + + // + // Find Provider idx if Exists ... + providerIdx = FindProviderInSignallersInfo( + provider, + report.signallersInfo); + + // + // Check IDX ... + if (providerIdx > -1) + { + // + // Update Exists ... + if (isLong) + { + report.signallersInfo[providerIdx].longs++; + } + else + { + report.signallersInfo[providerIdx].shorts++; + } + } + else + { + // + // Add New One ... + AddItemToBuffer( + info, + report.signallersInfo); + } + } + + // + // Add TP in Report ... + void AddTradeTPInReport( + XReport &report // Specified Report + ) + { + // + FillReportEndTime(report); + + // + report.summaryInfo.numberOfTPs++; + } + + // + // Add SL in Report ... + void AddTradeSLInReport( + XReport &report // Specified Report + ) + { + // + FillReportEndTime(report); + + // + report.summaryInfo.numberOfSLs++; + } + + // + // Update Number of Same Time Trades in Report ... + void UpdateMaxSameTimeTradesInReport( + XReport &report, // Specified Report + int value // number of same time trades + ) + { + // + // Validate Args ... + if (value <= report.summaryInfo.maxSameTimeSignals) + { + return; + } + + // + FillReportEndTime(report); + + // + report.summaryInfo.maxSameTimeSignals = value; + } + + // + // Update Number of Same Time Trades in Report ... + void UpdateMaxDrawUpInReport( + XReport &report, // Specified Report + double value // draw up value + ) + { + // + // Validate Args ... + if (value <= report.summaryInfo.maxDrawUp) + { + return; + } + + // + FillReportEndTime(report); + + // + report.summaryInfo.maxDrawUp = value; + } + + // + // Update Number of Same Time Trades in Report ... + void UpdateMaxDrawDownInReport( + XReport &report, // Specified Report + double value // draw down value + ) + { + // + // Validate Args ... + if (value <= report.summaryInfo.maxDrawDown) + { + return; + } + + // + FillReportEndTime(report); + + // + report.summaryInfo.maxDrawDown = value; + } + + // + // Update Min Balance for Open Trades Value in Report ... + void UpdateMinBalanceForOpenTradesInReport( + XReport &report, // Specified Report + double value // min balance for open trades + ) + { + // + // Validate Arg ... + if (value <= 0) + { + return; + } + + // + FillReportEndTime(report); + + // + report.accountInfo.minBalanceForOpenTrades = value; + } + + // + // Generate Specific Report String Representation ... + string GenerateReportString( + XReport &report, // Specified Report + string separator = "\n" // Separator + ) + { + // + string result = ""; + + // + // Start and End Date ... + result += "Start: " + (string)report.start + separator; + result += "End: " + (string)report.end + separator; + + // + // Account Info ... + string accountStr = GenerateAccountInfoReportString(report.accountInfo); + result += "Account: " + separator + accountStr + separator; + + // + // Summary Info ... + string summaryStr = GenerateSummaryInfoReportString(report.summaryInfo); + result += "Summary: " + separator + summaryStr + separator; + + // + // Volume Info ... + string volumeStr = GenerateVolumeInfoReportString(report.volumeInfo); + result += "Volume: " + separator + volumeStr + separator; + + // + // Signallers Info ... + string signallersStr = GenerateSignallersInfoReportString(report.signallersInfo); + result += "Signallers: " + separator + signallersStr + separator; + + // + return result; + } + + // + // Generate Account info String Representation ... + string GenerateAccountInfoReportString( + XAccountInfo &info, // Specified Account Info + string separator = "\n" // Separator + ) + { + // + string result = ""; + + // + // Generate Report ... + result += "user: " + info.user + separator; + result += "name: " + info.name + separator; + result += "server: " + info.server + separator; + result += "broker: " + info.broker + separator; + result += "mode: " + EnumToString(info.mode) + separator; + result += "leverage: " + (string)info.leverage + separator; + result += "currency: " + info.currency + separator; + result += "deposit: " + (string)info.deposit + separator; + result += "balance: " + (string)info.balance + separator; + result += "minBalanceForTrading: " + (string)info.minBalanceForOpenTrades + separator; + + // + return result; + } + + // + // Generate Summary info String Representation ... + string GenerateSummaryInfoReportString( + XSummaryInfo &info, // Specified Summary Info + string separator = "\n" // Separator + ) + { + // + string result = ""; + + // + // Generate Report ... + result += "longSignals: " + (string)info.longSignals + separator; + result += "shortSignals: " + (string)info.shortSignals + separator; + result += "numberOfTps: " + (string)info.numberOfTPs + separator; + result += "numberOfSLs: " + (string)info.numberOfSLs + separator; + result += "maxDrawUp: " + (string)info.maxDrawUp + separator; + result += "maxDrawDown: " + (string)info.maxDrawDown + separator; + result += "maxSignalVolume: " + (string)info.maxSignalVolume + separator; + result += "maxSameTimeSignals: " + (string)info.maxSameTimeSignals + separator; + + // + return result; + } + + // + // Generate Volume info String Representation ... + string GenerateVolumeInfoReportString( + XVolumeInfo &info, // Specified Volume Info + string separator = "\n" // Separator + ) + { + // + string result = ""; + + // + // Generate Report ... + result += "staticVolume: " + (string)info.staticVolume + separator; + result += "staticVolumeCalculationMethod: " + info.staticVolumeCalculationMethod + separator; + result += "maxAllowedVolume: " + (string)info.maxAllowedVolume + separator; + result += "volumeIncreaseMultiplier: " + (string)info.volumeIncreaseMultiplier + separator; + result += "balanceGowingToApplyMultiplier: " + (string)info.balanceGowingToApplyMultiplier + separator; + result += "balanceGrowingToIncreaseMaxAllowedVolume: " + (string)info.balanceGrowingToIncreaseMaxAllowedVolume + separator; + + // + return result; + } + + // + // Generate Signallers info String Representation ... + string GenerateSignallersInfoReportString( + XSignallerInfo &infos[], // Specified Signallers Info + string separator = "\n" // Separator + ) + { + // + string result = ""; + + // + // Validate Signallers Array Size ... + int signallersCount = ArraySize(infos); + if (signallersCount <= 0) + { + // + result += "EMPTY" + separator; + return result; + } + + // + // Generate Report ... + for (int i = 0; i < signallersCount; i++) + { + // + XSignallerInfo iSignaller = infos[i]; + + // + result += "name: " + iSignaller.name + separator; + result += "longs: " + (string)iSignaller.longs + separator; + result += "shorts: " + (string)iSignaller.shorts + separator; + + // + if (i < signallersCount - 1) + { + result += separator; + } + } + // + return result; + } + + // + // Find a Provider Index in SignallersInfo ... + int FindProviderInSignallersInfo( + string provider, // Specified Provider Name ... + XSignallerInfo &infoBuffer[] // Specified XSignallerInfo Buffer ... + ) + { + // + int result = -1; + + // + int bufferSize = ArraySize(infoBuffer); + if (bufferSize <= 0) + { + return result; + } + + // + // Loop through buffer to find provider index ... + for (int i = 0; i < bufferSize; i++) + { + // + XSignallerInfo iInfo = infoBuffer[i]; + + // + if (iInfo.name != provider) + { + continue; + } + + // + result = i; + } + + // + return result; + } +}; + +// +// a Class For Collectiong Info ... +class XCCollector : public XCBase +{ + // + // Public ... +public: + // + // Constructor ... + XCCollector() + { + Reset(); + } + + // + // Deconstructor ... + ~XCCollector() {} + + // + // Reset All Collectors ... + void Reset() + { + Clean(); + } + + // + // Count Data ... + int Count() + { + // + int result = 0; + + // + result = ArraySize(mTimes); + + // + return result; + } + + // + // TODO: Implement Business Logic here ... + + // + // Add Specific item to Collection ... + bool Add( + XCollector &item // Specified Info + ) + { + // + bool result = false; + + // + // Validate Args ... + result = IsValid( + item, + false); + if (!result) + { + return result; + } + + // + // Add Items Values to Buffers ... + // + AddItemToBuffer( + item.time, + mTimes); + + // + AddItemToBuffer( + item.volume, + mVolumes); + + // + AddItemToBuffer( + item.maxDrawDown, + mMaxDrawDowns); + + // + AddItemToBuffer( + item.maxAllowedVolume, + mMaxAllowedVolumes); + + // + AddItemToBuffer( + item.minBalanceForOpenTrade, + mMinBalanceForTradePrices); + + // + return result; + } + + // + // Retrieve Specific Item ... + bool Get( + XCollector &item, // Hold's Result + int index = 0 // Specified Index to Retrieve + ) + { + // + bool result = false; + + // + result = IsValidIndex(index); + if (!result) + { + return result; + } + + // + // Filling Item ... + item.time = mTimes[index]; + item.volume = mVolumes[index]; + item.maxDrawDown = mMaxDrawDowns[index]; + item.maxAllowedVolume = mMaxAllowedVolumes[index]; + item.minBalanceForOpenTrade = mMinBalanceForTradePrices[index]; + + // + return result; + } + XCollector Get( + int index = 0 // Specified Index to Retrieve + ) + { + // + XCollector result = {}; + + // + bool isValidIndex = IsValidIndex(index); + if (!isValidIndex) + { + return result; + } + + // + // Filling Item ... + result.time = mTimes[index]; + result.volume = mVolumes[index]; + result.maxDrawDown = mMaxDrawDowns[index]; + result.maxAllowedVolume = mMaxAllowedVolumes[index]; + result.minBalanceForOpenTrade = mMinBalanceForTradePrices[index]; + + // + return result; + } + bool Get( + XCollector &item, // Hold's Result + datetime time // Specified Index to Retrieve + ) + { + // + bool result = false; + + // + if (time <= 0) + { + return result; + } + + // + int timesCount = ArraySize(mTimes); + result = timesCount > 0; + if (!result) + { + return result; + } + + // + int index = -1; + for (int i = 0; i < timesCount; i++) + { + // + datetime iTime = mTimes[i]; + + // + if (iTime == time) + { + // + index = i; + break; + } + } + + // + result = index >= 0; + if (!result) + { + return result; + } + + // + result = Get( + item, + index); + + // + return result; + } + XCollector Get( + datetime time // Specified Index to Retrieve + ) + { + // + XCollector result = {}; + + // + if (time <= 0) + { + return result; + } + + // + int timesCount = ArraySize(mTimes); + if (timesCount <= 0) + { + return result; + } + + // + int index = -1; + for (int i = 0; i < timesCount; i++) + { + // + datetime iTime = mTimes[i]; + + // + if (iTime == time) + { + // + index = i; + break; + } + } + + // + if (index <= -1) + { + return result; + } + + // + result = Get( + index); + + // + return result; + } + + // + // Retrieve All ... + void GetAll( + XCollector &result[], // Hold's Result + bool reversal = false // Extract Direction + ) + { + // + CleanBuffer(result); + + // + int timesCount = ArraySize(mTimes); + if (timesCount <= 0) + { + return; + } + + // + if (!reversal) + { + // + for (int i = 0; i < timesCount; i++) + { + // + XCollector iCollector = Get(i); + + // + AddItemToBuffer( + iCollector, + result); + } + } + else + { + // + for (int i = timesCount - 1; i >= 0; i--) + { + // + XCollector iCollector = Get(i); + + // + AddItemToBuffer( + iCollector, + result); + } + } + } + + // + // Extract History ... + void Extract( + XCollector &result[], // Hold's Result + int start, // Start Index + int end // End Index + ) + { + // + CleanBuffer(result); + + // + // Validate Args ... + if ( + end < 0 || + start < 0 || + (start == 0 && end == 0) || + MathAbs(start - end == 0)) + { + return; + } + + // + // Validate Start and End Index ... + bool isValidEnd = IsValidIndex(end); + bool isValidStart = IsValidIndex(start); + if (!isValidEnd || !isValidStart) + { + return; + } + + // + bool direction = end > start; + if (direction) + { + // + for (int i = start; i < end - 1; i++) + { + // + XCollector iCollect = Get(i); + + // + AddItemToBuffer( + iCollect, + result); + } + } + else + { + // + for (int i = end - 1; i >= start; i--) + { + // + XCollector iCollect = Get(i); + + // + AddItemToBuffer( + iCollect, + result); + } + } + } + + // + // Validate an Item ... + bool IsValid( + XCollector &item, // Specified Info + bool ignoreTime = true // Ignore Times Checking ... + ) + { + // + bool result = false; + + // + // Check Each Items contains Correct Value ... + // + result = item.volume >= 0; + if (!result) + { + return result; + } + + // + result = item.maxDrawDown >= 0; + if (!result) + { + return result; + } + + // + result = item.maxAllowedVolume >= 0; + if (!result) + { + return result; + } + + // + result = item.minBalanceForOpenTrade >= 0; + if (!result) + { + return result; + } + + // + // Check Time has Proper Value ... + result = item.time > 0; + if (!result) + { + return result; + } + + // + // Check time bigger than last Time ... + int timesCount = ArraySize(mTimes); + if ( + !ignoreTime && + timesCount >= 0) + { + // + // Retrieve Last Added Times ... + datetime lastTime; + result = GetLastItem(lastTime, mTimes); + if (!result) + { + return result; + } + + // + // Compare Last Time by current Time ... + result = item.time > lastTime; + if (!result) + { + return result; + } + } + + // + return result; + } + + // + // Generate Logging String Representation ... + string GenerateString( + XCollector &item, // Specified Info + string separator = "\n" // Separator Character + ) + { + // + string result = ""; + + // + result += "time: " + (string)item.time + separator; + result += "volume: " + (string)item.volume + separator; + result += "maxDrawDown: " + (string)item.maxDrawDown + separator; + result += "maxAllowedVolume: " + (string)item.maxAllowedVolume + separator; + result += "minBalanceForOpenTrade: " + (string)item.minBalanceForOpenTrade + separator; + + // + return result; + } + + // + // Protected ... +protected: + // + // Private ... +private: + // + // Max Draw Up touched till now ... + double mMaxDrawUp; + + // + // Max Draw Down touched till now ... + double mMaxDrawDown; + + // + // Last Time for Checks ... + datetime mTimes[]; + + // + // Volume at the Check Time ... + double mVolumes[]; + + // + // DrawDown for each Check ... + double mMaxDrawDowns[]; + + // + // Max Allowed Volume for each check ... + double mMaxAllowedVolumes[]; + + // + // Min Balance for Open Trades for Each Check ... + double mMinBalanceForTradePrices[]; + + // + // Reset ... + void Clean() + { + // + mMaxDrawUp = 0; + mMaxDrawDown = 0; + + // + CleanBuffer(mTimes); + CleanBuffer(mVolumes); + CleanBuffer(mMaxDrawDowns); + CleanBuffer(mMaxAllowedVolumes); + CleanBuffer(mMinBalanceForTradePrices); + } + + // + // Validate Index ... + bool IsValidIndex( + int index // Specified Index + ) + { + // + bool result = false; + + // + int bufferSize = ArraySize(mTimes); + if (bufferSize <= 0) + { + return result; + } + + // + result = index <= bufferSize - 1; + + // + return result; + } +}; + +// +// a Class for Managing Volumes ... +class XCVolumeManager : public XCBase +{ + // + // Public ... +public: + // + // Constructor ... + XCVolumeManager( + double staticVolumeRate, // Static Volume Calculation Mutiplier + ENUM_STATIC_VOLUME_METHODS volumeMethod = X_STATIC_VOLUME_BASED_ON_DEPOSIT, // How to Calculate Static Volume + double volumeMultiplier = 0, // Volume Multiplier + double volumeMultiplierAppliedRate = 0, // Apply Volume Multiplier when Balance Increased by this rate + double maxAllowedVolume = 0, // Max Allowed Volume + double increaseMaxAllowedVolumeRate = 0 // Increase Max Allowed Volumes when Balance Increased by this rate + ) + { + // + mAccountInfo = new XCAccountInfo(); + + // + ResetForceVolumeMultiplier(); + + // + mVolumeMethod = volumeMethod; + mStaticVoluemRate = staticVolumeRate; + mVolumeMultiplier = volumeMultiplier; + mMaxAllowedVolume = maxAllowedVolume; + mVolumeMultiplierAppliedRate = volumeMultiplierAppliedRate; + mIncreaseMaxAllowedVolumeRate = increaseMaxAllowedVolumeRate; + } + + // + // Deconstructor ... + ~XCVolumeManager(void) {} + + // + // Check Volume Multiplier ... + bool CanUseVolumeMultiplier() + { + // + bool result = false; + + // + result = + mVolumeMultiplier > 0 && + mVolumeMultiplierAppliedRate > 0; + + // + return result; + } + + // + // Check Max Volume ... + bool CanUseMaxVolume() + { + // + bool result = false; + + // + result = + mMaxAllowedVolume > 0; + + // + return result; + } + + // + // Calculate Volume for Position ... + double CalculateVolume( + int numberOfOpenPositions = 0, // Number Of Open Signals + string symbol = NULL // Specify Symbol + ) + { + // + double result = 0; + + // + // Normalize Symbol ... + if (StringLen(symbol) == 0) + { + symbol = _Symbol; + } + + // + // Static Volume ... + result = GetStaticVolume(); + + // + double multiplier = GetVolumeMultiplier(); + result *= multiplier; + + // + // Check Max Allowed Volume Exists ... + double maxAllowedVolume = GetMaxAllowedVolume(); + if (maxAllowedVolume > 0) + { + // + result = + result > maxAllowedVolume + ? maxAllowedVolume + : result; + } + + // + // Check Number of Open Positions ... + if (numberOfOpenPositions >= 0) + { + // + // Decrease Volume ... + result /= (1 + numberOfOpenPositions); + } + + // + // Apply Force Volume Multiplier ... + result *= mForceVolumeMultiplier; + + // + // Retrieve Symbol Volume Info ... + result = NormalizeVolume(result, symbol, 2); + + // + return result; + } + + // + // Calculate Volume Multiplier ... + double GetVolumeMultiplier() + { + // + double result = 1; + + // + double deposit = mAccountInfo.GetInitialBalance(); + double balance = mAccountInfo.GetBalance(); + bool canUseVolumeMultiplier = CanUseVolumeMultiplier(); + if ( + balance < deposit || + !canUseVolumeMultiplier) + { + return result; + } + + // + // Apply Multiplier to Volume ... + double baseGrowBalance = deposit * mVolumeMultiplierAppliedRate; + double balanceGrows = balance - deposit; + if (balanceGrows < baseGrowBalance) + { + return result; + } + + // + double applyMultiplierTimes = balanceGrows / baseGrowBalance; + double roundedApplyMultiplierTimes = MathRound(applyMultiplierTimes); + + // + if (applyMultiplierTimes < roundedApplyMultiplierTimes) + { + applyMultiplierTimes -= (1 - (roundedApplyMultiplierTimes - applyMultiplierTimes)); + } + + // + // Calculate result ... + result = applyMultiplierTimes * mVolumeMultiplier; + + // + return result; + } + + // + // Retrieve Required Balance Grows for Increase Max Allowed Volume ... + double GetIncreaseMaxAllowedVolumeBalance() + { + // + double result = 0; + + // + if ( + mMaxAllowedVolume <= 0 || + mIncreaseMaxAllowedVolumeRate <= 0) + { + return result; + } + + // + result = mAccountInfo.GetInitialBalance() * mIncreaseMaxAllowedVolumeRate; + + // + return result; + } + + // + // Calculate Max Allowed Volume ... + double GetMaxAllowedVolume() + { + // + double result = 0; + + // + // Validate Args ... + result = + mMaxAllowedVolume <= 0 + ? 0 + : mMaxAllowedVolume; + + // + double deposit = mAccountInfo.GetInitialBalance(); + double balance = mAccountInfo.GetBalance(); + bool canUseMaxAllowedVolume = CanUseMaxVolume(); + if ( + balance <= deposit || + !canUseMaxAllowedVolume || + mIncreaseMaxAllowedVolumeRate <= 0) + { + // + return result; + } + + // + // Apply Multiplier to Volume ... + double baseGrowBalance = GetIncreaseMaxAllowedVolumeBalance(); + double balanceGrows = balance - deposit; + if (balanceGrows < baseGrowBalance) + { + return result; + } + + // + double applyMultiplierTimes = balanceGrows / baseGrowBalance; + double roundedApplyMultiplierTimes = MathRound(applyMultiplierTimes); + + // + if (applyMultiplierTimes < roundedApplyMultiplierTimes) + { + applyMultiplierTimes -= (1 - (roundedApplyMultiplierTimes - applyMultiplierTimes)); + } + + // + result *= applyMultiplierTimes; + + // + return result; + } + + // + // Get Static Volume ... + double GetStaticVolume() + { + // + double result = 0; + + // + double deposit = mAccountInfo.GetInitialBalance(); + double balance = mAccountInfo.GetBalance(); + + // + switch (mVolumeMethod) + { + // + case X_STATIC_VOLUME_BASED_ON_DEPOSIT: + result = mStaticVoluemRate * deposit; + break; + + // + case X_STATIC_VOLUME_BASED_ON_BALANCE: + result = mStaticVoluemRate * balance; + break; + } + + // + return result; + } + + // + // Reset Froce Volume Multiplier ... + void ResetForceVolumeMultiplier() + { + mForceVolumeMultiplier = 1; + } + + // + // Retrieve Current Force Volume Multiplier ... + double GetCurrentForceVolumeMultiplier() + { + return mForceVolumeMultiplier; + } + + // + // Retrieve Next Increase Multiplier Price ... + double GetIncreaseMultiplierBalance() + { + return mAccountInfo.GetInitialBalance() * mVolumeMultiplierAppliedRate; + } + + // + // Change Force Volume Multiplier ... + void ChangeForceVolumeMultiplier( + double rate // Change rate + ) + { + // + // Normalize rate ... + if (rate <= 1) + { + rate = 1; + } + + // + mForceVolumeMultiplier = rate; + } + + // + // Increase Force Volume Multiplier ... + void IncreaseForceVolumeMultiplier() + { + mForceVolumeMultiplier += 0.5; + } + + // + // Decrease Force Volume Multiplier ... + void DecreaseForceVolumeMultiplier() + { + // + if (mForceVolumeMultiplier <= 1) + { + return; + } + + // + mForceVolumeMultiplier -= 0.5; + } + + // + // Generate Current State Log String ... + string GenerateStateString( + string separator = "\n" // Log Separator ... + ) + { + // + string result = ""; + + // + // Normallize Separator ... + if (StringLen(separator) == 0) + { + separator = "\n"; + } + + // + result += "ForceVolumeMultiplier: " + (string)mForceVolumeMultiplier + separator; + // + result += "StaticVoluemRate: " + (string)mStaticVoluemRate + separator; + result += "StaticVoluem: " + (string)GetStaticVolume() + separator; + result += "VolumeMethod: " + EnumToString(mVolumeMethod) + separator; + // + result += "VolumeMultiplier: " + (string)mVolumeMultiplier + separator; + result += "VolumeMultiplierAppliedRate: " + (string)mVolumeMultiplierAppliedRate + separator; + // + result += "MaxAllowedVolume: " + (string)mMaxAllowedVolume + separator; + result += "IncreaseMaxAllowedVolumeRate: " + (string)mIncreaseMaxAllowedVolumeRate + separator; + + // + return result; + } + + // + // Protected ... +protected: + // + // Private ... +private: + // + // an Instance of Account Info for reading Balance and Deposit and etc ... + XCAccountInfo mAccountInfo; + + // + // Force Volume Rate Multiplier ... + double mForceVolumeMultiplier; + + // + // Static Volume Calculation Mutiplier ... + double mStaticVoluemRate; + + // + // How to Calculate Static Volume ... + ENUM_STATIC_VOLUME_METHODS mVolumeMethod; + + // + // Volume Multiplier ... + double mVolumeMultiplier; + + // + // Apply Volume Multiplier when Balance Increased by this rate ... + double mVolumeMultiplierAppliedRate; + + // + // Max Allowed Volume + double mMaxAllowedVolume; + + // + // Increase Max Allowed Volumes when Balance Increased by this rate + double mIncreaseMaxAllowedVolumeRate; +}; + +// +// a Class For Managing Signals Additional Data ... +class XCSignalManager : public XCBase +{ + // + // Public ... +public: + // + // Constructor ... + XCSignalManager(void) + { + CleanData(); + } + + // + // Deconstructor ... + ~XCSignalManager(void) {} + + // + void Reset() + { + CleanData(); + } + + // + // Retrieve All Signals ... + void GetAll( + XSignal &result[] // Hold's Result + ) + { + // + CleanBuffer(result); + + // + int signalsCount = ArraySize(mSignals); + if (signalsCount <= 0) + { + return; + } + + // + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = mSignals[i]; + + // + AddItemToBuffer( + iSignal, + result); + } + } + + // + // Count Items ... + int Count() + { + return ArraySize(mSignals); + } + + // + // Retrieve Specific Signal by Ticket ... + XSignal Get( + ulong ticket // Signals Ticket ... + ) + { + // + XSignal result = {}; + + // + // Check Exists ... + bool isExists = IsExists(ticket); + if (!isExists) + { + return result; + } + + // + int signalsCount = ArraySize(mSignals); + if (signalsCount <= 0) + { + return result; + } + + // + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = mSignals[i]; + + // + if (iSignal.ticket == ticket) + { + // + result = iSignal; + break; + } + } + + // + return result; + } + + // + // Check Signal Exists or not ... + bool IsExists( + ulong ticket // Specified Signal Ticket + ) + { + // + bool result = false; + + // + int signalsCount = ArraySize(mSignals); + if (signalsCount <= 0) + { + return result; + } + + // + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = mSignals[i]; + + // + if (iSignal.ticket == ticket) + { + // + result = true; + break; + } + } + + // + return result; + } + bool IsExists( + XSignal &signal // Specified Signal + ) + { + // + bool result = false; + + // + int signalsCount = ArraySize(mSignals); + if (signalsCount <= 0) + { + return result; + } + + // + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = mSignals[i]; + + // + if (iSignal.ticket == signal.ticket) + { + // + result = true; + break; + } + } + + // + return result; + } + + // + // Add Signal ... + bool Add( + XSignal &signal // Specified Signal + ) + { + // + bool result = false; + + // + // Validate Args ... + if (signal.ticket <= 0) + { + return result; + } + + // + // Chekc Signal Exists ... + bool isExists = IsExists(signal); + if (isExists) + { + return result; + } + + // + AddItemToBuffer( + signal, + mSignals); + result = true; + + // + return result; + } + + // + // Update Specific Buffer ... + bool Update( + XSignal &signal // Specified Signal + ) + { + // + bool result = false; + + // + // Validate Args ... + if (signal.ticket <= 0) + { + return result; + } + + // + // Chekc Signal Exists ... + bool isExists = IsExists(signal); + if (!isExists) + { + return result; + } + + // + // Remove Signal ... + Remove(signal); + + // + // Add new One ... + AddItemToBuffer( + signal, + mSignals); + + // + result = true; + + // + return result; + } + + // + // Remove Signal ... + bool Remove( + ulong ticket // Specified Signal Ticket + ) + { + // + bool result = false; + + // + // Check Signal Exists ... + bool isExists = IsExists(ticket); + if (!isExists) + { + return result; + } + + // + int signalsCount = ArraySize(mSignals); + if (signalsCount <= 0) + { + return result; + } + + // + XSignal signals[]; + + // + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = mSignals[i]; + + // + if (iSignal.ticket != ticket) + { + AddItemToBuffer( + iSignal, + signals); + } + } + + // + // Now we have to Clean All Signals and Replace them by signals[] buffer ... + UpdateData(signals); + + // + result = true; + return result; + } + bool Remove( + XSignal &signal // Specified Signal + ) + { + // + bool result = false; + + // + // Check Signal Exists ... + bool isExists = IsExists(signal); + if (!isExists) + { + return result; + } + + // + int signalsCount = ArraySize(mSignals); + if (signalsCount <= 0) + { + return result; + } + + // + XSignal signals[]; + + // + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = mSignals[i]; + + // + if (iSignal.ticket != signal.ticket) + { + AddItemToBuffer( + iSignal, + signals); + } + } + + // + // Now we have to Clean All Signals and Replace them by signals[] buffer ... + UpdateData(signals); + + // + result = true; + return result; + } + + // + // Add Or Update ... + bool AddOrUpdate( + XSignal &signal // Specified Signal + ) + { + // + bool result = false; + + // + // Validate Args ... + if (signal.ticket <= 0) + { + return result; + } + + // + // Chekc Signal Exists ... + bool isExists = IsExists(signal); + if (!isExists) + { + result = Add(signal); + } + else + { + result = Update(signal); + } + + // + return result; + } + + // + // Protected ... +protected: + // + // Private ... +private: + // + // Holds Signals ... + XSignal mSignals[]; + + // + // Clean All Exists Data ... + void CleanData() + { + CleanBuffer(mSignals); + } + + // + // Update Data ... + void UpdateData( + XSignal &source[] // a Buffer which needs to Replace ... + ) + { + // + CleanData(); + + // + int sourceCount = ArraySize(source); + if (sourceCount <= 0) + { + return; + } + + // + for (int i = 0; i < sourceCount; i++) + { + // + XSignal iSignal = source[i]; + + // + AddItemToBuffer( + iSignal, + mSignals); + } + } +}; + +// +// XSaherElm Trade Class ... +class XCTrade : public XCBase +{ + // + // all public features ... +public: + // + // Constructor ... + void XCTrade( + string tag, // Specify a Tag for Trader instance + string symbol, // Specify Trader Symbol + int slippage, // Specify Slippage + ulong magicNumber, // Specify Magic Number + bool useVirtualTPSL, // Use Virtual TP SL + int maxAllowedTrades, // Specify Max Allowed Trades + double minBallanceForOpenTrades, // Specify Minimum Balance for Open Trades + double minAllowedFreeMarginForOpenTrades, // Specify Minimum Free Marging for Open Trades + bool useSignalProtector = true // Specify Use Signal Protector or not + ) + { + // + mTag = tag; + mSymbol = symbol; + mSlippage = slippage; + mMagicNumber = magicNumber; + mUseVirtualTPSL = useVirtualTPSL; + mMaxAllowedTrades = maxAllowedTrades; + mMinBallanceForOpenTrades = minBallanceForOpenTrades; + mMinAllowedFreeMarginForOpenTrades = minAllowedFreeMarginForOpenTrades; + + // + mTrader = new XSCTrade(); + + // + mTrader.SetAsyncMode(false); + mTrader.SetDeviationInPoints(mSlippage); + mTrader.SetExpertMagicNumber(mMagicNumber); + + // + // Setting Log Level ... + mTrader.LogLevel(LOG_LEVEL_ERRORS); + + // + mSignalManager = new XCSignalManager(); + + // + Reset(); + } + + // + // Deconstructor ... + void ~XCTrade() + { + } + + // + // START Configuring Class Functions ... + // + + // + // Reset all Variables ... + void Reset() + { + // + mSignalManager.Reset(); + + // + mDaysForRead = 1; + mScanStarted = false; + + // + // Reset On Trade Counter ... + ResetOnTradeContext(); + + // + // Init On Trade Context ... + InitOnTradeContext(); + } + + // + // END Configuring Class Functions ... + // + + // + // START Count ... + // + + // + // Count Open Positions ... + int Count() + { + // + int result = 0; + + // + int total = PositionsTotal(); + for (int i = 0; i < total; i++) + { + // + if (!mPositionInfo.SelectByIndex(i)) + { + continue; + } + + // + if (mPositionInfo.Magic() != mMagicNumber) + { + continue; + } + + // + if (mPositionInfo.Symbol() != mSymbol) + { + continue; + } + + // + result++; + } + + // + return result; + } + + // + // Count Longs ... + int CountLongs() + { + int result = CountByType(X_SIGNAL_LONG); + return result; + } + + // + // Count Shorts ... + int CountShorts() + { + int result = CountByType(X_SIGNAL_SHORT); + return result; + } + + // + // Count Specific Type Of Positions ... + int CountByType(ENUM_POSITION_TYPE type) + { + // + int result = 0; + + // + int total = PositionsTotal(); + for (int i = 0; i < total; i++) + { + // + if (!mPositionInfo.SelectByIndex(i)) + { + continue; + } + + // + if (mPositionInfo.Symbol() != mSymbol) + { + continue; + } + + // + if (mPositionInfo.PositionType() != type) + { + continue; + } + + // + result++; + } + + // + return result; + } + + // + // Count By Type ... + int CountByType(ENUM_X_SIGNAL_TYPE type) + { + // + // Validate Args ... + ENUM_POSITION_TYPE mType = POSITION_TYPE_BUY; + if (type == X_SIGNAL_LONG) + { + mType = POSITION_TYPE_BUY; + } + else if (type == X_SIGNAL_SHORT) + { + mType = POSITION_TYPE_SELL; + } + + // + int result = CountByType(mType); + return result; + } + + // + // END Count ... + // + + // + // START Retrieve ... + // + + // + // Retrieve Specified Position by it's Ticket ... + XSignal GetSignal( + ulong ticket // Specified Ticket + ) + { + // + XSignal result = {}; + + // + result = PositionToSignal(ticket); + + // + return result; + } + + // + // Get Last Signal ... + XSignal GetLastSignal() + { + // + XSignal result = {}; + + // + XSignal signals[]; + GetSignals(signals); + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return result; + } + + // + result = signals[0]; + + // + return result; + } + + // + // Retrieve Last Executed Signal ... + bool GetLastSignal(XSignal &signal) + { + // + bool result = false; + + // + XSignal signals[]; + GetSignals(signals); + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return result; + } + + // + signal = signals[0]; + result = true; + + // + return result; + } + + // + // Retrieve All Positions ... + void GetSignals( + XSignal &result[] // Holds Result ... + ) + { + // + CleanBuffer(result); + + // + int totalPositions = PositionsTotal(); + for (int i = 0; i < totalPositions; i++) + { + // + if (!mPositionInfo.SelectByIndex(i)) + { + continue; + } + + // + if (mPositionInfo.Magic() != mMagicNumber) + { + continue; + } + + // + if (mPositionInfo.Symbol() != mSymbol) + { + continue; + } + + // + // Position to Signal ... + XSignal signal = PositionToSignal(i); + Add( + signal, + result); + } + } + + // + // Retrieve Type Specific Signals ... + void GetSignals( + XSignal &result[], // Holds Result ... + ENUM_X_SIGNAL_TYPE type // Specified Sginal Type ... + ) + { + // + CleanBuffer(result); + + // + XSignal signals[]; + GetSignals(signals); + + // + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return; + } + + // + // Loop ... + for (int i = signalsCount - 1; i >= 0; i--) + { + // + XSignal iSignal = signals[i]; + + // + if (type == X_SIGNAL_UNKNOWN) + { + Add( + iSignal, + result); + } + else if (iSignal.type == type) + { + Add( + iSignal, + result); + } + } + } + + // + // Filter Signals By Searching Comments ... + void FilterSignals( + XSignal &result[], // Holds Result ... + const string query, // Search in Comment Qeury ... + ENUM_X_SIGNAL_TYPE type = X_SIGNAL_UNKNOWN // Specified Sginal Type ... + ) + { + // + CleanBuffer(result); + + // + XSignal signals[]; + GetSignals( + signals, + type); + int signalsCount = ArraySize(signals); + + // + // Validate Args ... + if ( + StringLen(query) <= 0 || + signalsCount <= 0) + { + return; + } + + // + // Loop ... + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = signals[i]; + + // + int queryPos = StringFind( + iSignal.comment, + query); + bool isContains = queryPos > -1; + if (!isContains) + { + continue; + } + + // + Add( + iSignal, + result); + } + } + + // + // Get All Trades Which Candle Passed after Open ... + void GetOldSignals( + XSignal &result[], // Holds Result + int life, // Max Candle Passed after Trades Open + ENUM_TIMEFRAMES period = NULL, // Calculate Candles based on time frame + ENUM_X_SIGNAL_TYPE type = X_SIGNAL_UNKNOWN // Specify Type of Positions + ) + { + // + CleanBuffer(result); + + // + // Normalize Period ... + if (period == NULL) + { + period = _Period; + } + + // + XSignal signals[]; + GetSignals( + signals, + type); + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return; + } + + // + // Current Time Frame Candle Index ... + int currentBarIndex = 0; + + // + // Loop through Positions ... + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = signals[i]; + + // + // Retrieve Trade Open Bar Index based on Current Period ... + int tradeOpenBarIndex = iBarShift( + mSymbol, + period, + iSignal.time); + + // + // Calculate Trade Life ... + int diff = MathAbs(currentBarIndex - tradeOpenBarIndex); + + // + bool isPassed = diff >= life; + if (isPassed) + { + // + Add( + iSignal, + result); + } + } + } + + // + // Get In Profit Signals ... + void GetInProfitSignals( + XSignal &result[], // Holds Result + double minProfit = 0, // Minimum Profit To Close Trades + ENUM_X_SIGNAL_TYPE type = X_SIGNAL_UNKNOWN // Specify Type of Positions + ) + { + // + CleanBuffer(result); + + // + XSignal signals[]; + GetSignals( + signals, + type); + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return; + } + + // + // Loop ... + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = signals[i]; + + // + bool isPassed = minProfit <= 0 && iSignal.profit > 0 + ? true + : iSignal.profit >= minProfit; + if (isPassed) + { + Add( + iSignal, + result); + } + } + } + + // + // Get In Drawdown Signals ... + void GetInDrawdownSignals( + XSignal &result[], // Holds Result + double maxDrawDown = 0, // Minimum Profit To Close Trades + ENUM_X_SIGNAL_TYPE type = X_SIGNAL_UNKNOWN // Specify Type of Positions + ) + { + // + CleanBuffer(result); + + // + XSignal signals[]; + GetSignals( + signals, + type); + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return; + } + + // + // Loop ... + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = signals[i]; + + // + bool isPassed = maxDrawDown <= 0 && iSignal.profit < 0 + ? true + : iSignal.profit >= (-1 * maxDrawDown); + if (isPassed) + { + Add( + iSignal, + result); + } + } + } + + // + // Retrieve Max In Draw Down Trade ... + XSignal GetMaxInDrawdownSignal( + ENUM_X_SIGNAL_TYPE type = X_SIGNAL_UNKNOWN // Specify Type of Positions + ) + { + // + XSignal result = {}; + + // + XSignal signals[]; + GetInDrawdownSignals( + signals, + 0, + type); + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return result; + } + + // + // Loop ... + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = signals[i]; + + // + result = + (result.ticket <= 0 && + result.profit == 0) || + result.profit > iSignal.profit + ? iSignal + : result; + } + + // + return result; + } + + // + // Calculate Profits Of all Open Signals ... + double GetSignalsProfit( + ENUM_X_SIGNAL_TYPE type = X_SIGNAL_UNKNOWN // Specify Type of Positions + ) + { + // + double result = 0; + + // + XSignal signals[]; + GetSignals(signals, type); + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return result; + } + + // + // Loop ... + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = signals[i]; + + // + result += iSignal.profit; + } + + // + return result; + } + + // + // END Retrieve ... + // + + // + // START Signal Execution Actions ... + // + + // + // Execute a Signal in Market ... + ENUM_EXECUTION_SIGNAL_RESULT ExecuteSignal( + XSignal &signal, // Specified Signal + bool ignoreNumberOfTraes = false, // Ignore Number of Trades + bool checkAccountConditions = true // Check Account Balance, Equity and Free Margin for Signal Execution + ) + { + // + ENUM_EXECUTION_SIGNAL_RESULT result = X_TRADER_UNKNOWN_ERROR; + + // + // Validate Signal ... + bool isValid = IsValidSignal(signal); + if (!isValid) + { + // + result = X_TRADER_INVALID_SIGNAL_ERROR; + return result; + } + + // + // Check Account Equity ... + bool isEquityPassed = !checkAccountConditions + ? true + : IsEquityReadyForTrade(); + if (!isEquityPassed) + { + // + result = X_TRADER_NOT_ENOUGH_EQUITY_ERROR; + return result; + } + + // + // Check Account Balance ... + bool isBalancePassed = !checkAccountConditions + ? true + : IsBalanceReadyForTrade(); + if (!isBalancePassed) + { + // + result = X_TRADER_NOT_ENOUGH_BALANCE_ERROR; + return result; + } + + // + // Check Account FreeMargin ... + bool isFreeMarginPassed = !checkAccountConditions + ? true + : IsFreeMarginReadyForTrade(); + if (!isFreeMarginPassed) + { + // + result = X_TRADER_NOT_ENOUGH_MARIGIN_ERROR; + return result; + } + + // + // Check Number of Open Trades ... + int openTradesCount = Count(); + bool isTradeCountPassed = ignoreNumberOfTraes + ? true + : openTradesCount < mMaxAllowedTrades; + if (!isTradeCountPassed) + { + // + result = X_TRADER_MAX_TRADES_REACHED_ERROR; + return result; + } + + // + bool isExecuted = + signal.type == X_SIGNAL_LONG + ? Buy( + signal.volume, + signal.entry, + mUseVirtualTPSL + ? 0 + : signal.sl, + mUseVirtualTPSL + ? 0 + : signal.tp, + signal.comment) + : signal.type == X_SIGNAL_SHORT + ? Sell( + signal.volume, + signal.entry, + mUseVirtualTPSL + ? 0 + : signal.sl, + mUseVirtualTPSL + ? 0 + : signal.tp, + signal.comment) + : false; + if (isExecuted) + { + // + ulong ticket = PositionGetTicket(PositionsTotal() - 1); + + // + signal.id = ticket; + signal.ticket = ticket; + + // + AddOrUpdateSignalInfo(signal); + + // + result = X_TRADER_SUCCEED_EXECUTION; + } + + // + return result; + } + + // + // This Function, Handling Following Works on Open Positions: + // - Close On SL if Reached ... + // - Close On TP if Reached ... + // - Make Risk Free Trades ... + bool HandleSignals( + XTraderHandlerResult &handlerResult, // Holds Result + bool ignoreRiskFree = false // Ignore Risk Free Trdaes + ) + { + // + bool result = false; + + // + // Cleanup Result ... + CleanBuffer(handlerResult.sl); + CleanBuffer(handlerResult.tp); + CleanBuffer(handlerResult.rf); + + // + // Reading Open Positions ... + XSignal signals[]; + GetSignals(signals); + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return result; + } + + // + double deviation = mSlippage * GetPoints(mSymbol); + + // + // Loop ... + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = signals[i]; + + // + bool isLong = iSignal.type == X_SIGNAL_LONG; + double entry = GetEntry(iSignal.symbol, iSignal.type); + double exit = GetExit(iSignal.symbol, iSignal.type); + double spread = GetSpread(iSignal.symbol); + double appliedTPPrice = + iSignal.tp > 0 + ? isLong + ? iSignal.tp - deviation + : iSignal.tp + deviation + : 0; + double appliedSLPrice = + iSignal.sl > 0 + ? isLong + ? iSignal.sl + deviation + : iSignal.sl - deviation + : 0; + + // + double usedPrice = exit; + + // + bool isSLTouched = + isLong + ? usedPrice <= appliedSLPrice + : usedPrice >= appliedSLPrice; + + // + bool isTPTouched = + isLong + ? usedPrice >= appliedTPPrice + : usedPrice <= appliedTPPrice; + + // + // Handle SL ... + if ( + // + iSignal.sl > 0 + // + && + // + isSLTouched + // + && + // + mUseVirtualTPSL) + { + // + string comment = GenerateSignalSLComment(iSignal); + + // + bool isClosed = Close( + iSignal.ticket, + comment); + if (isClosed) + { + AddItemToBuffer( + iSignal, + handlerResult.sl); + } + } + + // + // Handle TP ... + if ( + // + iSignal.tp > 0 + // + && + // + isTPTouched + // + && + // + mUseVirtualTPSL) + { + // + string comment = GenerateSignalTPComment(iSignal); + + // + bool isClosed = Close( + iSignal.ticket, + comment); + if (isClosed) + { + AddItemToBuffer( + iSignal, + handlerResult.tp); + } + } + + // + // Handle Risk Free ... + if ( + // + !ignoreRiskFree + // + && + // + iSignal.riskFreeStep > 0 + // + && + // + iSignal.riskFreeRate > 0 + // + ) + { + // + // Make Signals Risk Free Only if Signal In Profit ... + if (iSignal.profit <= 0) + { + continue; + } + + // + // Base Price is ENTRY, then Last Level, in each level SL is Last Level ... + // + // Calculate Risk Free Level/Multiplier ... + double level = 0; + double roundedLevel = 0; + double rStepPrice = PipsToPrice(iSignal.riskFreeStep); + double rBasePrice = + iSignal.sl > 0 && + iSignal.sl > iSignal.entry + ? iSignal.sl + : iSignal.entry; + + // + double exit = GetExit(iSignal.type); + + // + // Check Base Price for Signal reached with Exit Price ... + bool isExitPriceReachedBasePrice = + isLong + ? exit > rBasePrice + : exit < rBasePrice; + if (!isExitPriceReachedBasePrice) + { + continue; + } + + // + // Calculate Risk Free Step Multiplier ... + level = MathAbs(exit - rBasePrice) / rStepPrice; + + // + // Check Level Must Bigger than 1 ... + if (level < 1) + { + continue; + } + + // + // Normalize Level ... + roundedLevel = MathRound(level); + if (level < roundedLevel) + { + level -= (1 - (roundedLevel - level)); + } + else if (level > roundedLevel) + { + level -= (level - roundedLevel); + } + + // + // Generate Comment ... + string comment = GenerateSignalRFComment(iSignal, (int)level); + + // + // Calculate SL ... + double slDistance = spread; + double sl = + isLong + ? exit - slDistance + : exit + slDistance; + + // + // Increase TP One Level if Exists ... + double tp = iSignal.tp; + if (iSignal.tp > 0 && (isLong + ? iSignal.tp < rBasePrice + rStepPrice + : iSignal.tp > rBasePrice - rStepPrice)) + { + // + tp = + isLong + ? iSignal.tp + rStepPrice + : iSignal.tp - rStepPrice; + } + + // + double rVolume = NormalizeVolume((iSignal.volume * iSignal.riskFreeRate), iSignal.symbol); + + // + // Update Signal Volume ... + double volume = iSignal.volume - rVolume; + + // + bool isClosedPartial = + ClosePartial( + iSignal.ticket, + rVolume, + comment); + if (isClosedPartial) + { + // + bool isModified = true; + if (!mUseVirtualTPSL) + { + // + isModified = Modify( + iSignal.ticket, + sl, + tp, + comment); + } + + // + if (isModified) + { + // + // Try to Update Signal ... + XSignal s = mSignalManager.Get(iSignal.ticket); + + // + // Apply Changes on Signal ... + s.sl = sl; + s.tp = tp; + s.volume = volume; + + // + // Update Signal ... + bool isUpdated = false; + bool isRemoved = false; + if (volume == 0) + { + isRemoved = mSignalManager.Remove(s); + } + else if (volume > 0) + { + isUpdated = mSignalManager.AddOrUpdate(s); + } + if ( + isUpdated || + isRemoved) + { + // + AddItemToBuffer( + s, + handlerResult.rf); + } + } + } + else + { + mSignalManager.Remove(iSignal.ticket); + } + } + } + + // + result = + ArraySize(handlerResult.tp) > 0 || + ArraySize(handlerResult.sl) > 0 || + ArraySize(handlerResult.rf) > 0; + + // + return result; + } + + // + // Close All Trades ... + void CloseSignals( + XSignal &result[], // Holds Result + ENUM_X_SIGNAL_TYPE type = X_SIGNAL_UNKNOWN // Specify Type of Positions + ) + { + // + CleanBuffer(result); + + // + XSignal signals[]; + GetSignals( + signals, + type); + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return; + } + + // + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = signals[i]; + + // + string comment = GenerateSignalForceCloseComment(iSignal); + + // + bool isClosed = Close( + iSignal.ticket, + comment); + if (isClosed) + { + Add( + iSignal, + result); + } + } + } + + // + // Close Pyramid Signals ... + void CloseInPyramidSignals( + XSignal &result[], // Holds Result + double pyramid = 0, // Close Pyramid Profit + ENUM_X_SIGNAL_TYPE type = X_SIGNAL_UNKNOWN // Specify Type of Positions + ) + { + // + CleanBuffer(result); + + // + XSignal signals[]; + GetSignals( + signals, + type); + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return; + } + + // + double profit = 0; + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = signals[i]; + + // + profit += iSignal.profit; + } + + // + // Normalize Pyramid ... + if (pyramid < 0) + { + pyramid = 0; + } + + // + if (profit > pyramid) + { + CloseSignals(result); + } + } + + // + // Close All Trades Which Candle Passed after Open ... + void CloseOldSignals( + XSignal &result[], // Holds Result + int life, // Max Candle Passed after Trades Open + ENUM_TIMEFRAMES period = NULL, // Calculate Candles based on time frame + ENUM_X_SIGNAL_TYPE type = X_SIGNAL_UNKNOWN // Specify Type of Positions + ) + { + // + CleanBuffer(result); + + // + XSignal signals[]; + GetOldSignals( + signals, + life, + period, + type); + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return; + } + + // + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = signals[i]; + + // + string comment = GenerateSignalAgeComment(iSignal); + + // + bool isClosed = Close( + iSignal.ticket, + comment); + if (isClosed) + { + Add( + iSignal, + result); + } + } + } + + // + // Close In Profit Signals ... + void CloseInProfitSignals( + XSignal &result[], // Holds Result + double minProfit = 0, // Minimum Profit To Close Trades + ENUM_X_SIGNAL_TYPE type = X_SIGNAL_UNKNOWN // Specify Type of Positions + ) + { + // + CleanBuffer(result); + + // + XSignal signals[]; + GetInProfitSignals( + signals, + minProfit, + type); + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return; + } + + // + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = signals[i]; + + // + string comment = GenerateSignalProfitComment(iSignal); + + // + bool isClosed = Close( + iSignal.ticket, + comment); + if (isClosed) + { + Add( + iSignal, + result); + } + } + } + + // + // Close In Drawdown Signals ... + void CloseInDrawdownSignals( + XSignal &result[], // Holds Result + double maxDrawDown = 0, // Minimum Profit To Close Trades + ENUM_X_SIGNAL_TYPE type = X_SIGNAL_UNKNOWN // Specify Type of Positions + ) + { + // + CleanBuffer(result); + + // + XSignal signals[]; + GetInDrawdownSignals( + signals, + maxDrawDown, + type); + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return; + } + + // + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = signals[i]; + + // + string comment = GenerateSignalProfitComment(iSignal); + + // + bool isClosed = Close( + iSignal.ticket, + comment); + if (isClosed) + { + Add( + iSignal, + result); + } + } + } + + // + // END Signal Execution Actions ... + // + + // + // START Actions ... + // + + // + // Force Open a Buy/Long Position ... + bool Buy( + double volume, // position volume + double price, // execution price + double sl = 0, // stop loss price + double tp = 0, // take profit price + const string comment = "" // comment + ) + { + // + bool result = false; + + // + result = mTrader.Buy( + volume, + mSymbol, + price, + sl, + tp, + comment); + + // + return result; + } + + // + // Send BUY LIMIT order ... + bool BuyLimit( + 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 = "" // comment + ) + { + // + bool result = false; + + // + result = mTrader.BuyLimit( + volume, + price, + mSymbol, + sl, + tp, + typeTime, + expiration, + comment); + + // + return result; + } + + // + // Send BUY STOP order ... + bool BuyStop( + 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 = "" // comment + ) + { + // + bool result = false; + + // + result = mTrader.BuyStop( + volume, + price, + mSymbol, + sl, + tp, + typeTime, + expiration, + comment); + + // + return result; + } + + // + // Force Open a Sell/Short Position ... + bool Sell( + double volume, // position volume + double price, // execution price + double sl = 0, // stop loss price + double tp = 0, // take profit price + const string comment = "" // comment + ) + { + // + bool result = false; + + // + result = mTrader.Sell( + volume, + mSymbol, + price, + sl, + tp, + comment); + + // + return result; + } + + // + // Send SELL LIMIT order ... + bool SellLimit( + 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 = "" // comment + ) + { + // + bool result = false; + + // + result = mTrader.SellLimit( + volume, + price, + mSymbol, + sl, + tp, + typeTime, + expiration, + comment); + + // + return result; + } + + // + // Send SELL STOP order ... + bool SellStop( + 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 = "" // comment + ) + { + // + bool result = false; + + // + result = mTrader.SellStop( + volume, + price, + mSymbol, + sl, + tp, + typeTime, + expiration, + comment); + + // + return result; + } + + // + // Modify Position ... + bool Modify( + const ulong ticket, // position ticket + double sl = 0, // stop loss price + double tp = 0, // take profit + const string comment = "" // comment + ) + { + // + bool result = false; + + // + // Validate Args ... + if (tp <= 0 && sl <= 0) + { + result = false; + return result; + } + + // + result = mTrader.PositionModify( + ticket, + sl, + tp, + comment); + if (result) + { + // + if (mSignalManager.IsExists(ticket)) + { + // + XSignal signal = GetSignal(ticket); + + // + mSignalManager.Update(signal); + } + } + + // + return result; + } + + // + // Close Position By Ticket ... + bool Close( + ulong ticket, // Position Ticket + string comment = "" // Close Position By Specific Comment + ) + { + // + bool result = false; + + // + // Try to Select Position ... + if (!mPositionInfo.SelectByTicket(ticket)) + { + return result; + } + + // + // Close Position By Specific Comment ... + result = mTrader.PositionClose( + ticket, + mSlippage, + comment); + if (result) + { + // + if (mSignalManager.IsExists(ticket)) + { + mSignalManager.Remove(ticket); + } + } + + // + return result; + } + + // + // Close Partial By Ticket ... + bool ClosePartial( + ulong ticket, // Position Ticket + double volume, // Volume Size for Partial Closing + string comment = "" // Close Position By Specific Comment + ) + { + // + bool result = false; + + // + if (!mPositionInfo.SelectByTicket(ticket)) + { + return result; + } + + // + result = mTrader.PositionClosePartial( + ticket, + volume, + mSlippage, + comment); + if (result) + { + // + if (mSignalManager.IsExists(ticket)) + { + // + XSignal signal = GetSignal(ticket); + + // + mSignalManager.Update(signal); + } + } + + // + return result; + } + + // + // END Actions ... + // + + // + // START Account Related ... + // + + // + // Retrieve Minimum Balance For Open Trades ... + double GetMinBalanceForOpenTrades() + { + // + double result = mMinBallanceForOpenTrades; + + // + double balance = mAccountInfo.GetBalance(); + double deposit = mAccountInfo.GetInitialBalance(); + if (balance > deposit) + { + // + double rate = mMinBallanceForOpenTrades / deposit; + + // + double ratedBalance = balance * rate; + + // + result = MathMax(mMinBallanceForOpenTrades, ratedBalance); + } + + // + return result; + } + + // + // Check Account Has Minimum Balance For Trade ... + bool IsBalanceReadyForTrade() + { + // + bool result = false; + + // + double minBalance = GetMinBalanceForOpenTrades(); + result = mAccountInfo.GetBalance() >= minBalance; + + // + return result; + } + + // + // Check Free Margin Has Enough For Trade ... + bool IsFreeMarginReadyForTrade() + { + // + bool result = false; + + // + double freeMargin = mAccountInfo.GetFreeMargin(); + + // + result = freeMargin >= mMinAllowedFreeMarginForOpenTrades; + + // + return result; + } + + // + // Check Equity Has Enough For Trade ... + bool IsEquityReadyForTrade() + { + // + bool result = false; + + // + double equity = mAccountInfo.GetEquity(); + + // + result = equity >= mMinAllowedFreeMarginForOpenTrades; + + // + return result; + } + + // + // END Account Related ... + // + + // + // START Signal Related ... + // + + // + // Validate Signal ... + bool IsValidSignal( + XSignal &signal // Specified Signal for Execution + ) + { + // + bool result = false; + + // + // Validate Signal Type ... + result = signal.type != X_SIGNAL_UNKNOWN; + if (!result) + { + return result; + } + + // + // Check Symbol ... + result = StringLen(signal.symbol) == 0 ? true : signal.symbol == mSymbol; + if (!result) + { + return result; + } + + // + // Check magic number ... + result = signal.magicNumber <= 0 ? true : signal.magicNumber == mMagicNumber; + if (!result) + { + return result; + } + + // + // Check Entry ... + result = signal.entry > 0; + if (!result) + { + return result; + } + + // // + // // Check SL ... + // // For Fix RiskFree Issues Ignore this ... + // result = signal.sl == 0 ? true : signal.type == X_SIGNAL_LONG ? signal.sl < signal.entry + // : signal.sl > signal.entry; + // if (!result) + // { + // return result; + // } + + // + // Check TP ... + result = signal.tp == 0 ? true : signal.type == X_SIGNAL_LONG ? signal.tp > signal.entry + : signal.tp < signal.entry; + if (!result) + { + return result; + } + + // + // Check Volume ... + result = signal.volume > 0; + if (!result) + { + return result; + } + + // + // Check Time ... + result = signal.time > 0; + if (!result) + { + return result; + } + + // + return result; + } + + // + // Get Signal InDirection (Reversal) Type ... + ENUM_X_SIGNAL_TYPE GetSignalIndirectionType( + XSignal &signal // Specified Signal + ) + { + // + ENUM_X_SIGNAL_TYPE result = X_SIGNAL_UNKNOWN; + + // + switch (signal.type) + { + // + case X_SIGNAL_LONG: + result = X_SIGNAL_SHORT; + break; + + // + case X_SIGNAL_SHORT: + result = X_SIGNAL_LONG; + break; + } + + // + return result; + } + + // + // Get Signal InDirection (Reversal) Type ... + ENUM_X_SIGNAL_TYPE GetIndirectionSignalType( + ENUM_X_SIGNAL_TYPE type // Specified Type + ) + { + // + ENUM_X_SIGNAL_TYPE result = X_SIGNAL_UNKNOWN; + + // + switch (type) + { + // + case X_SIGNAL_LONG: + result = X_SIGNAL_SHORT; + break; + + // + case X_SIGNAL_SHORT: + result = X_SIGNAL_LONG; + break; + } + + // + return result; + } + + // + // Calculate SignalAge ... + int GetSignalAge( + datetime time // Signal Execution Time + ) + { + // + int result = 0; + + // + // Validate Arg ... + if (time <= 0) + { + return result; + } + + // + int sIndex = iBarShift( + mSymbol, + _Period, + time); + + // + datetime cTime = iTime( + mSymbol, + _Period, + 0); + int cIndex = iBarShift( + mSymbol, + _Period, + cTime); + + // + result = MathAbs(cIndex - sIndex); + + // + return result; + } + int GetSignalAge( + datetime time, // Signal Execution Time + ENUM_TIMEFRAMES period // Specify Time Frame + ) + { + // + int result = 0; + + // + // Validate Arg ... + if (time <= 0) + { + return result; + } + + // + int sIndex = iBarShift( + mSymbol, + period, + time); + + // + datetime cTime = iTime( + mSymbol, + period, + 0); + int cIndex = iBarShift( + mSymbol, + _Period, + cTime); + + // + result = MathAbs(cIndex - sIndex); + + // + return result; + } + int GetSignalAge( + XSignal &signal // Specified Signal + ) + { + // + int result = 0; + + // + // Validate Arg ... + if ( + signal.time <= 0 || + !IsValid(signal, mMagicNumber)) + { + return result; + } + + // + result = GetSignalAge(signal.time); + + // + return result; + } + int GetSignalAge( + XSignal &signal, // Specify Signal + ENUM_TIMEFRAMES period // Specify Time Frame + ) + { + // + int result = 0; + + // + // Validate Arg ... + if ( + signal.time <= 0 || + !IsValid(signal, mMagicNumber)) + { + return result; + } + + // + result = GetSignalAge( + signal.time, + period); + + // + return result; + } + + // + // Prepare a Signall ... + XSignal GenerateSignal( + ENUM_X_SIGNAL_TYPE type, // Signal Type + double tp = 0, // Take Profit + double sl = 0, // Stop Loss + double volume = 0, // Volume + double riskFreeStep = 0, // Risk Free Step Price + double riskFreeRate = 0 // Risk Free Rate + ) + { + // + XSignal result = {}; + + // + // Validate Arg ... + if (type == X_SIGNAL_UNKNOWN) + { + return result; + } + + // + // Check Signal Type ... + bool isLong = type == X_SIGNAL_LONG; + + // + // Retrieve entry Price ... + double entry = GetEntry(mSymbol, type); + double spread = GetSpread(mSymbol); + + // + result.tp = tp; + result.sl = sl; + result.type = type; + result.entry = entry; + result.symbol = mSymbol; + result.magicNumber = mMagicNumber; + result.riskFreeStep = riskFreeStep; + result.riskFreeRate = riskFreeRate; + result.time = iTime(mSymbol, _Period, 0); + result.volume = NormalizeVolume(volume, mSymbol); + + // + // Since we Use signal instance to Generate Comment, this must be at the end ... + result.comment = GenerateSignalComment(result); + + // + return result; + } + + // + // Convert a Signal to String Representation ... + string ToString( + XSignal &signal // Specified Signal + ) + { + // + string result = ""; + + // + if (!IsValid(signal, mMagicNumber) || signal.ticket <= 0) + { + return result; + } + + // + // TICKET ... + // it is very importants since they hold position info ... + result += X_SIGNAL_TICKET + "(" + (string)signal.ticket + ")"; + + // + // TYPE ... + string typeStr = GetSignalType(signal.type); + result += "_" + X_SIGNAL_TYPE + "(" + typeStr + ")"; + + // + // TP ... + result += "_" + X_SIGNAL_TP + "(" + (string)signal.tp + ")"; + + // + // SL ... + result += "_" + X_SIGNAL_SL + "(" + (string)signal.sl + ")"; + + // + // RFS ... + result += "_" + X_SIGNAL_RISKFREE_STEP + "(" + (string)signal.riskFreeStep + ")"; + + // + // RFR ... + result += "_" + X_SIGNAL_RISKFREE_RATE + "(" + (string)signal.riskFreeRate + ")"; + + // + return result; + } + + // + // Generate Comments for Specific Signal ... + string GenerateSignalComment( + ENUM_X_SIGNAL_TYPE type, // Specify Kind Signal Type + double volume, // Signal Volume + bool isCrossSignal = false // Specify Signal Cross + ) + { + // + string result = ""; + + // + string typeStr = GetSignalType(type); + if ( + volume <= 0 || + StringLen(typeStr) == 0) + { + return result; + } + + // + volume = NormalizeVolume(volume, mSymbol); + + // + result = mTag + (!isCrossSignal ? "" : "_Cross_") + "_" + typeStr; + + // + return result; + } + string GenerateSignalComment( + XSignal &signal, // Specified Signal + bool isCrossSignal = false // Specify Signal Cross + ) + { + // + string result = GenerateSignalComment( + signal.type, + signal.volume, + isCrossSignal + // + ); + + // + return result; + } + + // + // Generate Signal RF TP Comment ... + string GenerateSignalRFComment( + XSignal &signal, // Specified Signal + int level // Which Step of RFS + ) + { + // + string result = ""; + + // + // Validate Signal and it's Ticket ... + if (!IsValidSignal(signal) || signal.ticket <= 0) + { + return result; + } + + // + double exit = NormalizePrice(GetExit(signal.symbol, signal.type), signal.symbol); + + // + string prefix = X_SIGNAL_RISKFREE_STEP + "(" + (string)signal.ticket + ")"; + // + result = + // + level > 0 + ? prefix + "_" + (string)level + ": " + (string)exit + : prefix + ": " + (string)exit; + // + ; + + // + return result; + } + + // + // Generate Signal TP Comment ... + string GenerateSignalTPComment( + XSignal &signal // Specified Signal + ) + { + // + string result = ""; + + // + // Validate Signal and it's Ticket ... + if (!IsValidSignal(signal) || signal.ticket <= 0) + { + return result; + } + + // + double exit = NormalizePrice(GetExit(signal.symbol, signal.type), signal.symbol); + + // + result = + // + X_SIGNAL_TP + "(" + (string)signal.ticket + "): " + (string)exit; + // + ; + + // + return result; + } + + // + // Generate Signal SL Comment ... + string GenerateSignalSLComment( + XSignal &signal // Specified Signal + ) + { + // + string result = ""; + + // + // Validate Signal and it's Ticket ... + if (!IsValidSignal(signal) || signal.ticket <= 0) + { + return result; + } + + // + double exit = NormalizePrice(GetExit(signal.symbol, signal.type), signal.symbol); + + // + result = + // + X_SIGNAL_SL + "(" + (string)signal.ticket + "): " + (string)exit; + // + ; + + // + return result; + } + + // + // Generate Signal Profit Comment ... + string GenerateSignalProfitComment( + XSignal &signal // Specified Signal + ) + { + // + string result = ""; + + // + // Validate Signal and it's Ticket ... + if (!IsValidSignal(signal) || signal.ticket <= 0) + { + return result; + } + + // + result = + // + "Profit(" + (string)signal.ticket + "): " + (string)signal.profit; + // + ; + + // + return result; + } + + // + // Generate Signal Force Close Comment ... + string GenerateSignalForceCloseComment( + XSignal &signal // Specified Signal + ) + { + // + string result = ""; + + // + // Validate Signal and it's Ticket ... + if (!IsValidSignal(signal) || signal.ticket <= 0) + { + return result; + } + + // + result = + // + "FC(" + (string)signal.ticket + "): " + (string)signal.profit; + // + ; + + // + return result; + } + + // + // Generate Signal Age Comment ... + string GenerateSignalAgeComment( + XSignal &signal // Specified Signal + ) + { + // + string result = ""; + + // + // Validate Signal and it's Ticket ... + if (!IsValidSignal(signal) || signal.ticket <= 0) + { + return result; + } + + // + int age = GetSignalAge(signal); + + // + result = + // + "(" + (string)signal.ticket + ") A: " + (string)age + ", P:" + (string)signal.profit; + // + ; + + // + return result; + } + + // + // Generate a Signal Object name for Draw Events On Chart ... + string GenerateSignalObjectName( + ulong ticket // Specify Ticket + ) + { + // + string result = ""; + + // + // Validate Arg ... + if (ticket <= 0) + { + return result; + } + + // + // TICKET ... + // it is very importants since they hold position info ... + result += "T(" + (string)ticket + ")"; + + // + return result; + } + string GenerateSignalObjectName( + XSignal &signal // Specified Signal + ) + { + // + string result = ""; + + // + // Validate Arg ... + if (!IsValid(signal, mMagicNumber)) + { + return result; + } + + // + result = GenerateSignalObjectName(signal.ticket); + + // + return result; + } + + // + // Genrate a Signal Event Object Name ... + string GenerateSignalEventObjectName( + ulong ticket // Specify Ticket + ) + { + // + string result = ""; + + // + result = GenerateSignalObjectName(ticket) + "_Event"; + + // + return result; + } + string GenerateSignalEventObjectName( + XSignal &signal // Specified Signal + ) + { + // + string result = ""; + + // + result = GenerateSignalEventObjectName(signal.ticket); + + // + return result; + } + + // + // END Signal Related ... + // + + // + // START Deals ... + // + + // + // Count Deals ... + int DealsCount( + datetime start = -1, // Start Date + datetime end = -1 // End Date + ) + { + // + int result = 0; + + // + XDeal deals[]; + GetDeals( + deals, + start, + end); + result = ArraySize(deals); + + // + return result; + } + + // + // Retrieve All Deals ... + void GetDeals( + XDeal &result[], // Hold's Result + datetime start = -1, // Start Date + datetime end = -1 // End Date + ) + { + // + CleanBuffer(result); + + // + // Select History if Start and End date provided ... + if (start > -1) + { + // + // Normalize End date ... + if (end == -1) + { + end = TimeCurrent(); + } + + // + bool isSelect = HistorySelect(start, end); + if (!isSelect) + { + return; + } + } + + // + int total = HistoryDealsTotal(); + if (total <= 0) + { + return; + } + + // + // Loop ... + for (int i = total - 1; i >= 0; i--) + { + // + // Select by Index ... + bool isSelect = mDealInfo.SelectByIndex(i); + if (!isSelect) + { + continue; + } + + // + // Check Magic ... + ulong magic = mDealInfo.Magic(); + bool isMagicSame = magic == mMagicNumber; + if (!isMagicSame) + { + continue; + } + + // + // Check Symbol ... + string symbol = mDealInfo.Symbol(); + bool isSymbolSame = symbol == mSymbol; + if (!isSymbolSame) + { + continue; + } + + // + XDeal deal = ToXDealByIndex(i); + + // + Add( + deal, + result); + } + } + + // + // Retrieve Last Deal ... + XDeal GetLastDeal() + { + // + XDeal result = {}; + + // + XDeal deals[]; + GetDeals(deals); + int dealsCount = ArraySize(deals); + if (dealsCount <= 0) + { + return result; + } + + // + result = deals[0]; + + // + return result; + } + + // + // END Deals ... + // + + // + // START Orders ... + // + + // + // Count Orders ... + int OrdersCount( + datetime start = -1, // Start Date + datetime end = -1 // End Date + ) + { + // + int result = 0; + + // + XOrder orders[]; + GetOrders( + orders, + start, + end); + result = ArraySize(orders); + + // + return result; + } + + // + // Retrieve Orders ... + void GetOrders( + XOrder &result[], // Hold's Result + datetime start = -1, // Start Date + datetime end = -1 // End Date + ) + { + // + CleanBuffer(result); + + // + // Select History if Start and End date provided ... + if (start > -1) + { + // + // Normalize End date ... + if (end == -1) + { + end = TimeCurrent(); + } + + // + bool isSelect = HistorySelect(start, end); + if (!isSelect) + { + return; + } + } + + // + int total = HistoryOrdersTotal(); + if (total <= 0) + { + return; + } + + // + // Loop ... + for (int i = total - 1; i >= 0; i--) + { + // + // Select by Index ... + bool isSelect = mOrderInfo.SelectByIndex(i); + if (!isSelect) + { + continue; + } + + // + // Check Magic ... + ulong magic = mOrderInfo.Magic(); + bool isMagicSame = magic == mMagicNumber; + if (!isMagicSame) + { + continue; + } + + // + // Check Symbol ... + string symbol = mOrderInfo.Symbol(); + bool isSymbolSame = symbol == mSymbol; + if (!isSymbolSame) + { + continue; + } + + // + XOrder order = ToXOrderByIndex(i); + + // + Add( + order, + result); + } + } + + // + // Retrieve Last Order ... + XOrder GetLastOrder() + { + // + XOrder result = {}; + + // + XOrder orders[]; + GetOrders(orders); + int ordersCount = ArraySize(orders); + if (ordersCount <= 0) + { + return result; + } + + // + result = orders[0]; + + // + return result; + } + + // + // END Orders ... + // + + // + // START OnTrade Handlers ... + // + + // + // Handle OnTrade Event ... + void HandleOnTradeEvent( + XOnTradeHandlerResult &result // Hold's Result + ) + { + // + if (mScanStarted) + { + ProcessOnTradeContext(result); + } + else + { + InitOnTradeContext(); + } + } + + // + // END OnTrade Handlers ... + // + + // + // Retrieve Magic Number ... + ulong GetMagicNumber() + { + return mMagicNumber; + } + + // + // all protected features ... +protected: + // + // all private features ... +private: + // + // Specified Unique Tag ... + string mTag; + + // + // which Symbol ... + string mSymbol; + + // + // using deviation, it must be in Point ... + int mSlippage; + + // + // using magic number ... + ulong mMagicNumber; + + // + // Detect Using Virtual TP or SL ... + bool mUseVirtualTPSL; + + // + // Specify Max Allowed Trades + int mMaxAllowedTrades; + + // + // Minimum Free Marging for Open Trades + double mMinAllowedFreeMarginForOpenTrades; + + // + // Minimum Balance for Open Trades + double mMinBallanceForOpenTrades; + + // + // using CTrade instance ... + XSCTrade mTrader; + + // + // Deals Info ... + CDealInfo mDealInfo; + + // + // Order Info ... + COrderInfo mOrderInfo; + + // + // An Instance Of XCAccount Info for Handling Account Related Actions ... + XCAccountInfo mAccountInfo; + + // + // using PositionInfo instance ... + CPositionInfo mPositionInfo; + + // + // Signal Manager ... + XCSignalManager mSignalManager; + + // + // START OnTrade Handlers ... + // + + // + int mDaysForRead; + + // + // set the limits of the trade history on the global scope ... + + // + // // start date for trade history in cache ... + datetime mStartDate; + + // + // end date for trade history in cache ... + datetime mEndDate; + + // + // global OnTrade counters ... + + // + // number of active orders ... + int mOrdersCount; + + // + // number of open positions ... + int mPositionsCount; + + // + // number of deals in the trade history cache ... + int mDealsCount; + + // + // number of orders in the trade history cache ... + int mHistoryOrdersCount; + + // + // flag of counter relevance ... + bool mScanStarted; + + // + // 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( + XOnTradeHandlerResult &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) + { + // + LogMessage("Failed to Load OnTrade Context History ..."); + + // + 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(); + } + + // + // Reset On Trade Scanner Context ... + void ResetOnTradeContext() + { + // + mEndDate = TimeCurrent(); + mStartDate = mEndDate - (mDaysForRead * PeriodSeconds(PERIOD_D1)); + } + + // + // Initial Context Of Trade Scanner ... + void InitOnTradeContext() + { + // + ResetLastError(); + + // + // load history ... + bool selected = HistorySelect(mStartDate, mEndDate); + if (!selected) + { + // + LogMessage("Failed to Load OnTrade Context History ..."); + + // + return; + } + + // + // get the current value ... + mOrdersCount = OrdersTotal(); + mPositionsCount = PositionsTotal(); + mDealsCount = HistoryDealsTotal(); + mHistoryOrdersCount = HistoryOrdersTotal(); + + // + mScanStarted = true; + } + + // + // END OnTrade Handlers ... + // + + // + // START Signal Private ... + // + + // + // Add Or Update Signal ... + void AddOrUpdateSignalInfo( + XSignal &signal // Specified Signal + ) + { + // + bool isExists = mSignalManager.IsExists(signal); + if (isExists) + { + mSignalManager.Remove(signal.ticket); + } + + // + bool isAddOrUpdated = mSignalManager.AddOrUpdate(signal); + if (isAddOrUpdated) + { + // + color longColor = clrAqua; + color shortColor = clrFuchsia; + + // + DrawSignalShape( + signal, + longColor, + shortColor); + } + } + + // + // Retrieve Signal String From Chart Event ... + XSignal RetrieveSignal( + ulong ticket // Specify Position Ticket + ) + { + // + XSignal result = {}; + + // + if (ticket <= 0) + { + return result; + } + + // + result = mSignalManager.Get(ticket); + + // + return result; + } + void RetrieveSignal( + XSignal &signal // Specified Signal + ) + { + + // + XSignal tSignal = mSignalManager.Get(signal.ticket); + + // + // Fill signal by tSignal Data ... + // since tese properties may change in signal manipulation times ... + signal.tp = tSignal.tp; + signal.sl = tSignal.sl; + signal.riskFreeStep = tSignal.riskFreeStep; + signal.riskFreeRate = tSignal.riskFreeRate; + } + + // + // Convert Position to Signal by Index ... + XSignal PositionToSignal(int index) + { + // + XSignal result = {}; + + // + if (!mPositionInfo.SelectByIndex(index)) + { + return result; + } + + // + ulong ticket = mPositionInfo.Ticket(); + result = PositionToSignal(ticket); + + // + return result; + } + + // + // Position To Signal by Ticket ... + XSignal PositionToSignal(ulong ticket) + { + // + XSignal result = {}; + + // + if (!mPositionInfo.SelectByTicket(ticket)) + { + return result; + } + + // + bool isExists = mSignalManager.IsExists(ticket); + if (isExists) + { + result = RetrieveSignal(ticket); + } + + // + // Ticket ... + result.ticket = mPositionInfo.Ticket(); + + // + // ID ... + result.id = mPositionInfo.Identifier(); + + // + // Symbol ... + result.symbol = mPositionInfo.Symbol(); + + // + // Type ... + ENUM_POSITION_TYPE pType = (ENUM_POSITION_TYPE)mPositionInfo.PositionType(); + ENUM_X_SIGNAL_TYPE type = pType == POSITION_TYPE_BUY ? X_SIGNAL_LONG : X_SIGNAL_SHORT; + result.type = type; + + // + // MagicNumber ... + result.magicNumber = mPositionInfo.Magic(); + + // + // Entry/Open Price ... + result.entry = mPositionInfo.PriceOpen(); + + // + // Take Profit ... + result.tp = result.tp <= 0 && mPositionInfo.TakeProfit() > 0 + ? mPositionInfo.TakeProfit() + : result.tp; + + // + // Stop Loss ... + result.sl = result.sl <= 0 && mPositionInfo.StopLoss() > 0 + ? mPositionInfo.StopLoss() + : result.sl; + + // + // Profit ... + result.profit = mPositionInfo.Profit(); + + // + // Time ... + result.time = mPositionInfo.Time(); + + // + // Volume ... + result.volume = mPositionInfo.Volume(); + + // + // Comment ... + result.comment = mPositionInfo.Comment(); + + // + return result; + } + + // + // Converts a Deal to XDeal by Index ... + XDeal ToXDealByIndex(int index) + { + // + XDeal result = {}; + + // + bool isSelect = mDealInfo.SelectByIndex(index); + if (!isSelect) + { + return result; + } + + // + // Read Deal Ticket ... + ulong ticket = mDealInfo.Ticket(); + result = ToXDealByTicket(ticket); + + // + return result; + } + + // + // Converts a Deal to XDeal by Ticket ... + XDeal ToXDealByTicket(ulong ticket) + { + // + XDeal result = {}; + + // + mDealInfo.Ticket(ticket); + + // + result.time = mDealInfo.Time(); + result.swap = mDealInfo.Swap(); + result.magic = mDealInfo.Magic(); + result.order = mDealInfo.Order(); + result.entry = mDealInfo.Entry(); + result.price = mDealInfo.Price(); + result.ticket = mDealInfo.Ticket(); + result.symbol = mDealInfo.Symbol(); + result.type = mDealInfo.DealType(); + result.profit = mDealInfo.Profit(); + result.volume = mDealInfo.Volume(); + result.comment = mDealInfo.Comment(); + result.positionId = mDealInfo.PositionId(); + result.commission = mDealInfo.Commission(); + result.reason = (ENUM_DEAL_REASON)HistoryDealGetInteger( + ticket, + DEAL_REASON); + + // + return result; + } + + // + // Convert an Order to XOrder by Index ... + XOrder ToXOrderByIndex(int index) + { + // + XOrder result = {}; + + // + bool isSelect = mOrderInfo.SelectByIndex(index); + if (!isSelect) + { + return result; + } + + // + ulong ticket = mOrderInfo.Ticket(); + result = ToXOrderByTicket(ticket); + + // + return result; + } + + // + // Convert an Order to XOrder by Ticket ... + XOrder ToXOrderByTicket(ulong ticket) + { + // + XOrder result = {}; + + // + bool isSelect = mOrderInfo.Select(ticket); + if (!isSelect) + { + return result; + } + + // + result.state = mOrderInfo.State(); + result.magic = mOrderInfo.Magic(); + result.ticket = mOrderInfo.Ticket(); + result.symbol = mOrderInfo.Symbol(); + result.type = mOrderInfo.OrderType(); + result.comment = mOrderInfo.Comment(); + result.stopLoss = mOrderInfo.StopLoss(); + result.typeTime = mOrderInfo.TypeTime(); + result.timeDone = mOrderInfo.TimeDone(); + result.timeSetup = mOrderInfo.TimeSetup(); + result.positionId = mOrderInfo.PositionId(); + result.priceOpen = mOrderInfo.PriceOpen(); + result.takeProfit = mOrderInfo.TakeProfit(); + result.typeFilling = mOrderInfo.TypeFilling(); + result.priceCurrent = mOrderInfo.PriceCurrent(); + result.volumeInitial = mOrderInfo.VolumeInitial(); + result.volumeCurrent = mOrderInfo.VolumeCurrent(); + result.timeExpiration = mOrderInfo.TimeExpiration(); + result.priceStopLimit = mOrderInfo.PriceStopLimit(); + result.reason = (ENUM_ORDER_REASON)HistoryOrderGetInteger( + ticket, + ORDER_REASON); + + // + return result; + } + // + // END Signal Private ... + // +}; + +// +// a Class For Guard Account ... +class XCGuard : public XCBase +{ + // + // Public ... +public: + // + // Constructor ... + XCGuard( + int oldAge, // Age for Old Trades + ENUM_X_GUARD_ACTIONS oldGuardAction, // Guard Action for Too Old State + double criticalFactor, // Critical DrawDown Factor based On Balance + ENUM_X_GUARD_ACTIONS criticalAction, // Guard Action for Critical State + double maxFactor, // Max DrawDown Factor based on Balance + ENUM_X_GUARD_ACTIONS maxAction, // Guard Action for Max State + int GuardStopoutFiredAfterTouches, // Guard Stopout if Max State touched + ENUM_X_GUARD_SUPPORT_METHODS supportMethod // How to Support Signals + ) + { + // + mSupportPrefix = "SPT"; + mDirectional = "SPD"; + mInDirectional = "SPIND"; + + // + mOldAge = oldAge; + mOldGuardAction = oldGuardAction; + + // + mMaxFactor = maxFactor; + mMaxAction = maxAction; + mCriticalFactor = criticalFactor; + mCriticalAction = criticalAction; + mGuardStopoutFiredAfterTouches = GuardStopoutFiredAfterTouches; + + // + mSupportMethod = supportMethod; + + // + mAccountInfo = new XCAccountInfo(); + + // + double deposit = mAccountInfo.GetInitialBalance(); + + // + if ( + maxFactor > 0 && + maxFactor < 1) + { + mMaxValue = maxFactor * deposit; + } + + // + if ( + criticalFactor > 0 && + criticalFactor < 1) + { + mCriticalValue = criticalFactor * deposit; + } + + // + Reset(); + ResetMaxDrawDownTouches(); + } + + // + // Deconstructor ... + ~XCGuard() {} + + // + // Reset List ... + void Reset() + { + // + CleanBuffer(mGuardedSignals); + CleanBuffer(mSupportedSignals); + } + + // + // Reset Consecutive Max DrawDown Touches ... + void ResetMaxDrawDownTouches() + { + mOccuredconsecutiveMaxDraDownTouches = 0; + } + + // + // Calculate and Retrieve Critical DrawDown Value ... + double GetCriticalValue() + { + // + double result = mCriticalValue; + if (mCriticalFactor <= 0) + { + return result; + } + + // + double deposit = mAccountInfo.GetInitialBalance(); + double balance = mAccountInfo.GetBalance(); + + // + if (balance > deposit) + { + // + double balanceBasedCriticalDrawDown = mCriticalFactor * balance; + + // + result = MathMax( + mCriticalValue, + balanceBasedCriticalDrawDown); + } + + // + return result; + } + + // + // Calculate and Retrieve Max Allowed DrawDown Value ... + double GetMaxValue() + { + // + double result = mMaxValue; + if (mMaxValue <= 0) + { + return result; + } + + // + double deposit = mAccountInfo.GetInitialBalance(); + double balance = mAccountInfo.GetBalance(); + + // + if (balance > deposit) + { + // + double balanceBasedMaxAllwedDrawDown = mMaxFactor * balance; + + // + result = MathMax( + mMaxValue, + balanceBasedMaxAllwedDrawDown); + } + + // + return result; + } + + // + // Guard Account Protection ... + bool Guard( + XGuardHandlerResult &guardResult, // Hold's Message + string &message, // Hold's Message + XCTrade &trader, // Specified Trader + ENUM_TIMEFRAMES period = NULL // Specified Time Frame for Detecting Signal Ages + ) + { + // + message = ""; + + // + // Clean Result of Guard ... + CleanBuffer(guardResult.olds); + CleanBuffer(guardResult.maxes); + CleanBuffer(guardResult.criticals); + + // + bool result = false; + + // + // So Important is to Guard DrawDowns ... + result = GuardDrawDown( + guardResult, + message, + trader); + if (result) + { + return result; + } + + // + // Then we have to Guard Old Trades ... + result = GuardOlds( + guardResult, + message, + trader); + + // + return result; + } + + // + // Handle Guard Old Trades ... + bool GuardOlds( + XGuardHandlerResult &guardResult, // Hold's Message + string &message, // Hold's Message + XCTrade &trader, // Specified Trader + ENUM_TIMEFRAMES period = NULL // Specified Time Frame for Detecting Signal Ages + ) + { + // + // Cleanup Message ... + message = ""; + + // + // Clean Result of Guard ... + CleanBuffer(guardResult.olds); + + // + bool result = false; + + // + // Validate Args ... + if ( + mOldAge <= 0 || + mOldGuardAction == X_GUARD_DO_NOTHING) + { + return result; + } + + // + // Normalize Args ... + if (period == NULL) + { + period = _Period; + } + + // + // Retrieve Old Trades ... + XSignal oldSignals[]; + trader.GetOldSignals( + oldSignals, + mOldAge, + period); + int oldSignalsCount = ArraySize(oldSignals); + if (oldSignalsCount <= 0) + { + return result; + } + + // + result = DoGuardAction( + guardResult, + message, + trader, + mOldGuardAction, + X_GUARDED_OLD, // Specify Guard Reason + period // Specified Running Time Frame for Signal Age Calculations + ); + + // + return result; + } + + // + // Hnadle Guard DrawDown ... + bool GuardDrawDown( + XGuardHandlerResult &guardResult, // Hold's Message + string &message, // Hold's Message + XCTrade &trader // Specified Trader + ) + { + // + message = ""; + + // + // Clean Result of Guard ... + CleanBuffer(guardResult.maxes); + CleanBuffer(guardResult.criticals); + + // + bool result = false; + + // + // Check State for Guard ... + bool isCriticalGuardEnabled = mCriticalFactor > 0; + bool isMaxGuardEnabled = mMaxFactor > 0; + bool isGuardEnabled = + isMaxGuardEnabled; + + // + if (!isGuardEnabled) + { + return result; + } + + // + double maxValue = GetMaxValue(); + double criticalValue = GetCriticalValue(); + + // + double profitSums = trader.GetSignalsProfit(); + + // + bool isMaxReached = + profitSums < 0 && + isMaxGuardEnabled && + MathAbs(profitSums) >= maxValue; + bool isCriticalReached = + profitSums < 0 && + isCriticalGuardEnabled && + MathAbs(profitSums) >= criticalValue; + + // + if (!isMaxReached && !isCriticalReached) + { + // + // Reset Consecutive Max DrawDown Touches ... + ResetMaxDrawDownTouches(); + + // + return result; + } + + // + // Check For Critical Guard ... + if (isCriticalReached && !isMaxReached) + { + // + result = DoGuardAction( + guardResult, + message, + trader, + mCriticalAction, + X_GUARDED_CRITICAL); + } + else if (isMaxReached) + { + // + result = DoGuardAction( + guardResult, + message, + trader, + mMaxAction, + X_GUARDED_MAX); + + // + // Handle Guard StopOut Action ... + mOccuredconsecutiveMaxDraDownTouches++; + if ( + mMaxAction != X_GUARD_DO_NOTHING && + mMaxAction != X_GUARD_CLOSE_ALL && + mGuardStopoutFiredAfterTouches > 0 && + mOccuredconsecutiveMaxDraDownTouches >= mGuardStopoutFiredAfterTouches) + { + // + XSignal closed[]; + trader.CloseSignals(closed); + int closedCount = ArraySize(closed); + if (closedCount > 0) + { + // + for (int i = 0; i < closedCount; i++) + { + // + XSignal iSignal = closed[i]; + + // + AddItemToBuffer( + iSignal, + guardResult.maxes); + } + + // + message = "Guard StopOut Action Closed (" + (string)closedCount + ") Signals and Release Account ..."; + + // + guardResult.isStopOut = true; + + // + result = true; + } + } + } + + // + return result; + } + + // + // Do Signal Protections and apply Support ... + bool ProtectSignals( + XSignal &mResult[], // Hold's Result + XCTrade &trader, // Specified Trader + int numberOfItemsCheck = 30 // Number of Items to check + ) + { + // + bool result = false; + + // + CleanBuffer(mResult); + + // + // Check Supports Enabled ... + result = IsSupportEnabled(); + if (!result) + { + return result; + } + + // + // Update Supports ... + XSignal signals[]; + trader.GetSignals(signals); + int signalsCount = ArraySize(signals); + if (signalsCount > 0) + { + // + for (int i = 0; i < signalsCount; i++) + { + // + XSignal iSignal = signals[i]; + + // + bool isExists = IsSupportExists(iSignal.ticket); + if (isExists) + { + UpdateSupport(iSignal); + } + } + } + + // + // Count Supporteds ... + XProtectedSignal supporteds[]; + GetAllSupports(supporteds); + int supportedCount = ArraySize(supporteds); + result = supportedCount > 0; + if (!result) + { + return result; + } + + // + // Loop through ... + for (int i = 0; i < supportedCount; i++) + { + // + XProtectedSignal iP = supporteds[i]; + + // + bool canDoDirectional = CanDoDirectionalSupport( + trader, + iP.ticket, + numberOfItemsCheck); + bool canDoInDirectional = CanDoInDirectionalSupport( + trader, + iP.ticket, + numberOfItemsCheck); + + // + if ( + !canDoDirectional && + !canDoInDirectional) + { + continue; + } + + // + // Do Directional ... + if (canDoDirectional) + { + // + // Generate Propper Signal ... + XSignal sdSignal = GenerateDirectionalSupportSignal( + iP.ticket, + trader); + + // + ENUM_EXECUTION_SIGNAL_RESULT executionResult = trader.ExecuteSignal( + sdSignal, + true, + false); + bool isExecuted = executionResult == X_TRADER_SUCCEED_EXECUTION; + if (isExecuted) + { + // + XSignal eSignal = trader.GetSignal(sdSignal.ticket); + + // + AddItemToBuffer( + eSignal, + mResult); + } + } + // + // Do Indirectional ... + else if (canDoInDirectional) + { + // + // Generate Propper Signal ... + XSignal sindSignal = GenerateDirectionalSupportSignal( + iP.ticket, + trader); + + // + ENUM_EXECUTION_SIGNAL_RESULT executionResult = trader.ExecuteSignal( + sindSignal, + true, + false); + bool isExecuted = executionResult == X_TRADER_SUCCEED_EXECUTION; + if (isExecuted) + { + // + XSignal eSignal = trader.GetSignal(sindSignal.ticket); + + // + AddItemToBuffer( + eSignal, + mResult); + } + } + } + + // + result = ArraySize(mResult) > 0; + + // + return result; + } + + // + // Validate State ... + bool Validate() + { + // + bool result = false; + + // + result = + mMaxFactor > 0 && + (mCriticalFactor > 0 + ? mCriticalFactor < mMaxFactor + : true); + + // + return result; + } + + // + // START Guarded Signals Functions ... + // + + // + // Add new Protecte Signal ... + bool Add( + XSignal &signal // Specified Signal + ) + { + // + bool result = false; + + // + bool isExists = IsExists(signal.ticket); + if (isExists) + { + return result; + } + + // + XProtectedSignal item; + + // + datetime time = TimeCurrent(); + + // + item.ticket = signal.ticket; + + // + AddItemToBuffer( + time, + item.time); + + // + AddItemToBuffer( + signal.profit, + item.profit); + + // + AddItemToBuffer( + item, + mGuardedSignals); + + // + return result; + } + + // + // Get All ... + void GetAll( + XProtectedSignal &result[] // Hold's Result + ) + { + // + CopyBuffer( + mGuardedSignals, + result); + } + + // + // Get ... + XProtectedSignal Get( + ulong ticket // Specified Signal Ticket + ) + { + // + XProtectedSignal result; + + // + bool isExists = IsExists(ticket); + if (!isExists) + { + return result; + } + + // + int protectedCounts = ArraySize(mGuardedSignals); + if (protectedCounts <= 0) + { + return result; + } + + // + for (int i = 0; i < protectedCounts; i++) + { + // + XProtectedSignal iProtected = mGuardedSignals[i]; + + // + if (iProtected.ticket == ticket) + { + // + result = iProtected; + break; + } + } + + // + return result; + } + + // + // Remove ... + bool Remove( + ulong ticket // Specified Signal Ticket + ) + { + // + bool result = false; + + // + result = IsExists(ticket); + if (!result) + { + return result; + } + + // + int protectedCounts = ArraySize(mGuardedSignals); + result = protectedCounts > 0; + if (!result) + { + return result; + } + + // + XProtectedSignal cleared[]; + for (int i = 0; i < protectedCounts; i++) + { + // + XProtectedSignal iProtected = mGuardedSignals[i]; + + // + if (iProtected.ticket != ticket) + { + AddItemToBuffer( + iProtected, + cleared); + } + } + + // + // Update Source by Cleared ... + CopyBuffer( + cleared, + mGuardedSignals); + + // + result = true; + + // + return result; + } + + // + // Update ... + bool Update( + ulong ticket, // Specified Signal Ticket + datetime time, // Specified Last Checked time + double profit // Specified Signal Profit + // XProtectedSignal &item // Specified which object to Update + ) + { + // + bool result = false; + + // + int protectedCounts = ArraySize(mGuardedSignals); + result = protectedCounts > 0; + if (!result) + { + return result; + } + + // + result = IsExists(ticket); + if (!result) + { + return result; + } + + // + // Retrieve Struct ... + XProtectedSignal item = Get(ticket); + AddItemToBuffer( + time, + item.time); + AddItemToBuffer( + profit, + item.profit); + + // + result = Remove(ticket); + if (!result) + { + return result; + } + + // + AddItemToBuffer( + item, + mGuardedSignals); + result = true; + + // + return result; + } + bool Update( + XProtectedSignal &item // Specified Protected Item + ) + { + // + bool result = false; + + // + datetime time; + result = GetLastItem( + time, + item.time); + if (!result) + { + return result; + } + + // + double profit; + result = GetLastItem( + profit, + item.profit); + if (!result) + { + return result; + } + + // + result = Update( + item.ticket, time, profit); + + // + return result; + } + bool Update( + XSignal &signal // Specified Signal + ) + { + // + bool result = false; + + // + ulong ticket = signal.ticket; + datetime time = TimeCurrent(); + double profit = signal.profit; + + // + result = Update( + ticket, + time, + profit); + + // + return result; + } + + // + // Add Or Update ... + bool AddOrUpdate( + XSignal &signal // Specified Signal + ) + { + // + bool result = false; + + // + bool isExists = IsExists(signal.ticket); + if (!isExists) + { + result = Add(signal); + } + else + { + result = Update(signal); + } + + // + return result; + } + + // + // Check Exists ... + bool IsExists( + ulong ticket // Specified Signal Ticket + ) + { + // + bool result = false; + + // + // Validate Args ... + if (ticket <= 0) + { + return result; + } + + // + int protectedCounts = ArraySize(mGuardedSignals); + if (protectedCounts <= 0) + { + return result; + } + + // + for (int i = 0; i < protectedCounts; i++) + { + // + XProtectedSignal iProtected = mGuardedSignals[i]; + + // + if (iProtected.ticket == ticket) + { + // + result = true; + break; + } + } + + // + return result; + } + + // + // Count Protecteds ... + int Count() + { + // + int result = 0; + + // + result = ArraySize(mGuardedSignals); + + // + return result; + } + + // + // END Guarded Signals Functions ... + // + + // + // START Supported Signals Functions ... + // + + // + // Check can Handle Support Signals or not ... + bool IsSupportEnabled() + { + // + bool result = false; + + // + result = + mSupportMethod != X_SUPPORT_DO_NOTHING; + + // + return result; + } + + // + // Retrieve List Of Supported Signals ... + void GetSupportSignals( + XSignal &result[], // Hold's Result ... + XCTrade &trader // Specified Trader class Instance ... + ) + { + // + CleanBuffer(result); + + // + XSignal signals[]; + trader.GetSignals(signals); + int signalsCount = ArraySize(signals); + if (signalsCount <= 0) + { + return; + } + + // + for (int i = -0; i < signalsCount; i++) + { + // + XSignal iSignal = signals[i]; + + // + bool isSupport = IsSupport(iSignal.comment); + if (isSupport) + { + AddItemToBuffer( + iSignal, + result); + } + } + } + + // + // Retrieve List Of Specific Signals Supported Signals ... + void GetSignalSupports( + XSignal &result[], // Hold's Result ... + XCTrade &trader, // Specified Trader class Instance ... + ulong ticket // Specified Signal Ticket ... + ) + { + // + CleanBuffer(result); + + // + // Validate Args ... + if (ticket <= 0) + { + return; + } + + // + // Check Signal Exists using Trader ... + XSignal parentSignal = trader.GetSignal(ticket); + bool isValid = + parentSignal.ticket > 0 && + parentSignal.ticket == ticket && + StringLen(parentSignal.comment) > 0; + if (!isValid) + { + return; + } + + // + XSignal supportSignals[]; + GetSupportSignals( + supportSignals, + trader); + int supportSignalsCount = ArraySize(supportSignals); + if (supportSignalsCount <= 0) + { + return; + } + + // + for (int i = 0; i < supportSignalsCount; i++) + { + // + XSignal iSignal = supportSignals[i]; + + // + bool isBelongsToParent = IsBelongsToParent( + ticket, + iSignal.comment); + if (isBelongsToParent) + { + AddItemToBuffer( + iSignal, + result); + } + } + } + + // + // Check Specific Support Conditions for Opening Directional Support ... + bool CanDoDirectionalSupport( + XCTrade &trader, // Specified Trader class Instance ... + ulong ticket, // Specified Signal Ticket ... + int numberOfItemsCheck = 30 // Number of Items to check ... + ) + { + // + bool result = false; + + // + // Check Supports Enabled ... + result = IsSupportEnabled(); + if (!result) + { + return result; + } + + // + // Check Support Method Allows Directional ... + result = + mSupportMethod == X_SUPPORT_FULL || + mSupportMethod == X_SUPPORT_IN_DRAWUP_DIRECTIONAL; + if (!result) + { + return result; + } + + // + // Validate Ticket ... + result = ticket > 0; + if (!result) + { + return result; + } + + // + // Check Supports Count ... + int supportedCount = ArraySize(mSupportedSignals); + result = supportedCount > 0; + if (!result) + { + return result; + } + + // + // Check Ticket Exists in Supports ... + result = IsSupportExists(ticket); + if (!result) + { + return result; + } + + // + // Check signal Doesn't have any Support ... + XSignal supports[]; + GetSignalSupports( + supports, + trader, + ticket); + int supportsCount = ArraySize(supports); + result = supportsCount <= 0; + if (!result) + { + return result; + } + + // + // Retrieve Support Model ... + XProtectedSignal sInfo = GetSupport(ticket); + + // + // Validate Model ... + int sTimesCount = ArraySize(sInfo.time); + int sProfitsCount = ArraySize(sInfo.profit); + result = + sInfo.ticket == ticket && + sTimesCount == sProfitsCount && + sTimesCount >= numberOfItemsCheck && + sProfitsCount >= numberOfItemsCheck; + if (!result) + { + return result; + } + + // + // Validate Signal Age ... + XSignal sSignal = trader.GetSignal(ticket); + int sSignalAge = trader.GetSignalAge(sSignal.time); + result = sSignalAge >= numberOfItemsCheck; + if (!result) + { + return result; + } + + // + // Extrat Profits ... + double lastProfits[]; + for (int i = sProfitsCount - 1; i >= (sProfitsCount - numberOfItemsCheck); i++) + { + // + double iProfit = sInfo.profit[i]; + + // + AddItemToBuffer( + iProfit, + lastProfits); + } + + // + string logMsg = ToString(lastProfits); + LogMessage("" + (string)ticket + " lastProfits: \n" + logMsg); + + // + result = false; + + // + // Now implement Business Logics ... + + // + return result; + } + + // + // Check Specific Support Conditions for Opening InDirectional Support ... + bool CanDoInDirectionalSupport( + XCTrade &trader, // Specified Trader class Instance ... + ulong ticket, // Specified Signal Ticket ... + int numberOfItemsCheck = 30 // Number of Items to check ... + ) + { + // + bool result = false; + + // + // Check Supports Enabled ... + result = IsSupportEnabled(); + if (!result) + { + return result; + } + + // + // Check Support Method Allows Directional ... + result = + mSupportMethod == X_SUPPORT_FULL || + mSupportMethod == X_SUPPORT_IN_DRAWDOWN_INDIRECTIONAL; + if (!result) + { + return result; + } + + // + // Validate Ticket ... + result = ticket > 0; + if (!result) + { + return result; + } + + // + // Check Supports Count ... + int supportedCount = ArraySize(mSupportedSignals); + result = supportedCount > 0; + if (!result) + { + return result; + } + + // + // Check Ticket Exists in Supports ... + result = IsSupportExists(ticket); + if (!result) + { + return result; + } + + // + // Check signal Doesn't have any Support ... + XSignal supports[]; + GetSignalSupports( + supports, + trader, + ticket); + int supportsCount = ArraySize(supports); + result = supportsCount <= 0; + if (!result) + { + return result; + } + + // + // Retrieve Support Model ... + XProtectedSignal sInfo = GetSupport(ticket); + + // + // Validate Model ... + int sTimesCount = ArraySize(sInfo.time); + int sProfitsCount = ArraySize(sInfo.profit); + result = + sInfo.ticket == ticket && + sTimesCount == sProfitsCount && + sTimesCount >= numberOfItemsCheck && + sProfitsCount >= numberOfItemsCheck; + if (!result) + { + return result; + } + + // + // Validate Signal Age ... + XSignal sSignal = trader.GetSignal(ticket); + int sSignalAge = trader.GetSignalAge(sSignal.time); + result = sSignalAge >= numberOfItemsCheck; + if (!result) + { + return result; + } + + // + // Extrat Profits ... + double lastProfits[]; + for (int i = sProfitsCount - 1; i >= (sProfitsCount - numberOfItemsCheck); i++) + { + // + double iProfit = sInfo.profit[i]; + + // + AddItemToBuffer( + iProfit, + lastProfits); + } + + // + string logMsg = ToString(lastProfits); + LogMessage("" + (string)ticket + " lastProfits: \n" + logMsg); + + // + result = false; + + // + // Now implement Business Logics ... + + // + return result; + } + + // + // Generate Directional Support Signal for Parent Signal ... + XSignal GenerateDirectionalSupportSignal( + ulong ticket, // Specified Parent Signal Ticket ... + XCTrade &trader // Specified Trader Class ... + ) + { + // + XSignal result = {}; + + // + // Validate Args ... + if (ticket <= 0) + { + return result; + } + + // + XSignal pSignal = trader.GetSignal(ticket); + bool isValidParent = + pSignal.ticket > 0 && + pSignal.ticket == ticket && + StringLen(pSignal.comment) > 0; + if (!isValidParent) + { + return result; + } + + // + ENUM_X_SIGNAL_TYPE type = pSignal.type; + bool isLong = IsLong(type); + + // + double entry = GetEntry( + pSignal.symbol, + type); + double exit = GetExit( + pSignal.symbol, + type); + + // + double reward = PipsToPrice( + pSignal.symbol, + 6); + double risk = PipsToPrice( + pSignal.symbol, + 1); + + // + double tp = + isLong + ? entry + reward + : entry - reward; + + // + double sl = + isLong + ? exit - risk + : exit + risk; + + // + double rfStep = 2; + double rfRate = 0.5; + + // + double volume = NormalizeVolume( + pSignal.volume / 2, + pSignal.symbol, + 2); + + // + // Generate Signal using Trader Class Instance ... + result = trader.GenerateSignal( + // + type, + tp, + sl, + volume, + rfStep, + rfRate + // + ); + + // + return result; + } + + // + // Generate InDirectional Support Signal for Parent Signal ... + XSignal GenerateInDirectionalSupportSignal( + ulong ticket, // Specified Parent Signal Ticket ... + XCTrade &trader // Specified Trader Class ... + ) + { + // + XSignal result = {}; + + // + // Validate Args ... + if (ticket <= 0) + { + return result; + } + + // + XSignal pSignal = trader.GetSignal(ticket); + bool isValidParent = + pSignal.ticket > 0 && + pSignal.ticket == ticket && + StringLen(pSignal.comment) > 0; + if (!isValidParent) + { + return result; + } + + // + ENUM_X_SIGNAL_TYPE type = trader + .GetIndirectionSignalType(pSignal.type); + bool isLong = IsLong(type); + + // + double entry = GetEntry( + pSignal.symbol, + type); + double exit = GetExit( + pSignal.symbol, + type); + + // + double reward = PipsToPrice( + pSignal.symbol, + 6); + double risk = PipsToPrice( + pSignal.symbol, + 1); + + // + double tp = + isLong + ? entry + reward + : entry - reward; + + // + double sl = + isLong + ? exit - risk + : exit + risk; + + // + double rfStep = 2; + double rfRate = 0.5; + + // + double volume = NormalizeVolume( + pSignal.volume / 2, + pSignal.symbol, + 2); + + // + // Generate Signal using Trader Class Instance ... + result = trader.GenerateSignal( + // + type, + tp, + sl, + volume, + rfStep, + rfRate + // + ); + + // + return result; + } + + // + // Generate Specific Signals Support Signal Comment ... + string GenerateSupportSignalComment( + ulong ticket, // Specified Parent Signal Ticket + ENUM_X_SIGNAL_TYPE type, // Specified Support Signal Type + bool isInDirectional = false // Specified Support Signal Direction + ) + { + // + string result = ""; + + // + if (ticket <= 0) + { + return result; + } + + // + string typeString = GetSignalType(type); + string directionStr = GenerateSupportDirection(isInDirectional); + + // + result = + mSupportPrefix + "(" + (string)ticket + ")_" + + X_SIGNAL_TYPE + "(" + typeString + ")_" + + directionStr; + + // + return result; + } + + // + // Get Support Direction String Representation ... + string GenerateSupportDirection( + bool isInDirectional = false // Specified Support Signal Direction + ) + { + // + string result = ""; + + // + result = + isInDirectional + ? mInDirectional + : mDirectional; + + // + return result; + } + + // + // Check an String Is Directional Or not ... + bool IsDirectionalSupport( + string comment // Specified Comment ... + ) + { + // + bool result = false; + + // + result = IsSupport(comment); + if (!result) + { + return result; + } + + // + int sPos = StringFind( + comment, + mDirectional); + result = sPos >= 0; + + // + return result; + } + + // + // Check an String Is In Directional Or not ... + bool IsInDirectionalSupport( + string comment // Specified Comment ... + ) + { + // + bool result = false; + + // + result = IsSupport(comment); + if (!result) + { + return result; + } + + // + int sPos = StringFind( + comment, + mInDirectional); + result = sPos >= 0; + + // + return result; + } + + // + // Check an String Is Support or not ... + bool IsSupport( + string comment // Specified Comment ... + ) + { + // + bool result = false; + + // + int sPos = StringFind( + comment, + mSupportPrefix); + result = sPos >= 0; + + // + return result; + } + + // + // Extract Parent of Support Signal Ticket from a comment ... + ulong ExtractParentTicket( + string comment // Specified Comment ... + ) + { + // + ulong result = 0; + + // + bool isSupport = IsSupport(comment); + if (!isSupport) + { + return result; + } + + // + // TICKET ... + string ticketStr = ExtractString( + comment, + mSupportPrefix + "(", + ")"); + if (StringLen(ticketStr) > 0) + { + result = (ulong)ticketStr; + } + + // + return result; + } + + // + // Check a Comment belongs to Support Signal or not ... + bool IsBelongsToParent( + ulong ticket, // Specified Parent Signal Ticket + string comment // Specified Support Signal Comment + ) + { + // + bool result = false; + + // + // Validate Arg ... + if (ticket <= 0) + { + return result; + } + + // + result = IsSupport(comment); + if (!result) + { + return result; + } + + // + ulong spTicket = ExtractParentTicket(comment); + result = spTicket == ticket; + + // + return result; + } + + // + // Add new Protecte Signal ... + bool AddSupport( + XSignal &signal // Specified Signal + ) + { + // + bool result = false; + + // + bool isExists = IsSupportExists(signal.ticket); + if (isExists) + { + return result; + } + + // + XProtectedSignal item; + + // + datetime time = TimeCurrent(); + + // + item.ticket = signal.ticket; + + // + AddItemToBuffer( + time, + item.time); + + // + AddItemToBuffer( + signal.profit, + item.profit); + + // + AddItemToBuffer( + item, + mSupportedSignals); + + // + return result; + } + + // + // Get All ... + void GetAllSupports( + XProtectedSignal &result[] // Hold's Result + ) + { + // + CopyBuffer( + mSupportedSignals, + result); + } + + // + // Get ... + XProtectedSignal GetSupport( + ulong ticket // Specified Signal Ticket + ) + { + // + XProtectedSignal result; + + // + bool isExists = IsSupportExists(ticket); + if (!isExists) + { + return result; + } + + // + int protectedCounts = ArraySize(mSupportedSignals); + if (protectedCounts <= 0) + { + return result; + } + + // + for (int i = 0; i < protectedCounts; i++) + { + // + XProtectedSignal iProtected = mSupportedSignals[i]; + + // + if (iProtected.ticket == ticket) + { + // + result = iProtected; + break; + } + } + + // + return result; + } + + // + // Remove ... + bool RemoveSupport( + ulong ticket // Specified Signal Ticket + ) + { + // + bool result = false; + + // + result = IsSupportExists(ticket); + if (!result) + { + return result; + } + + // + int protectedCounts = ArraySize(mSupportedSignals); + result = protectedCounts > 0; + if (!result) + { + return result; + } + + // + XProtectedSignal cleared[]; + for (int i = 0; i < protectedCounts; i++) + { + // + XProtectedSignal iProtected = mSupportedSignals[i]; + + // + if (iProtected.ticket != ticket) + { + AddItemToBuffer( + iProtected, + cleared); + } + } + + // + // Update Source by Cleared ... + CopyBuffer( + cleared, + mSupportedSignals); + + // + result = true; + + // + return result; + } + + // + // Update ... + bool UpdateSupport( + ulong ticket, // Specified Signal Ticket + datetime time, // Specified Last Checked time + double profit // Specified Signal Profit + ) + { + // + bool result = false; + + // + int protectedCounts = ArraySize(mSupportedSignals); + result = protectedCounts > 0; + if (!result) + { + return result; + } + + // + result = IsSupportExists(ticket); + if (!result) + { + return result; + } + + // + // Retrieve Struct ... + XProtectedSignal item = GetSupport(ticket); + AddItemToBuffer( + time, + item.time); + AddItemToBuffer( + profit, + item.profit); + + // + result = RemoveSupport(ticket); + if (!result) + { + return result; + } + + // + AddItemToBuffer( + item, + mSupportedSignals); + result = true; + + // + return result; + } + bool UpdateSupport( + XProtectedSignal &item // Specified Protected Item + ) + { + // + bool result = false; + + // + datetime time; + result = GetLastItem( + time, + item.time); + if (!result) + { + return result; + } + + // + double profit; + result = GetLastItem( + profit, + item.profit); + if (!result) + { + return result; + } + + // + result = UpdateSupport( + item.ticket, time, profit); + + // + return result; + } + bool UpdateSupport( + XSignal &signal // Specified Signal + ) + { + // + bool result = false; + + // + ulong ticket = signal.ticket; + datetime time = TimeCurrent(); + double profit = signal.profit; + + // + result = UpdateSupport( + ticket, + time, + profit); + + // + return result; + } + + // + // Add Or Update ... + bool AddOrUpdateSupport( + XSignal &signal // Specified Signal + ) + { + // + bool result = false; + + // + bool isExists = IsSupportExists(signal.ticket); + if (!isExists) + { + result = Add(signal); + } + else + { + result = Update(signal); + } + + // + return result; + } + + // + // Check Exists ... + bool IsSupportExists( + ulong ticket // Specified Signal Ticket + ) + { + // + bool result = false; + + // + // Validate Args ... + if (ticket <= 0) + { + return result; + } + + // + int protectedCounts = ArraySize(mSupportedSignals); + if (protectedCounts <= 0) + { + return result; + } + + // + for (int i = 0; i < protectedCounts; i++) + { + // + XProtectedSignal iProtected = mSupportedSignals[i]; + + // + if (iProtected.ticket == ticket) + { + // + result = true; + break; + } + } + + // + return result; + } + + // + // Count Protecteds ... + int CountSupports() + { + // + int result = 0; + + // + result = ArraySize(mSupportedSignals); + + // + return result; + } + + // + // END Suppoprted Signals Functions ... + // + + // + // START Getter/Setter(s) ... + // + + // + int GetOldAge() + { + return mOldAge; + } + + // + bool SetOldAge(int value) + { + // + bool result = false; + + // + result = + value > 0 && + mOldAge != value; + if (!result) + { + return result; + } + + // + mOldAge = value; + + // + return result; + } + + // + ENUM_X_GUARD_ACTIONS GetOldGuardAction() + { + return mOldGuardAction; + } + + // + bool SetOldGuardAction(ENUM_X_GUARD_ACTIONS value) + { + // + bool result = false; + + // + result = value != mOldGuardAction; + if (!result) + { + return result; + } + + // + mOldGuardAction = value; + + // + return result; + } + + // + double GetCriticalFactor() + { + return mCriticalFactor; + } + + // + bool SetCriticalFactor(bool value) + { + // + bool result = false; + + // + result = + value > 0 && + value < 1 && + mCriticalFactor != value; + if (!result) + { + return result; + } + + // + mCriticalFactor = value; + + // + double deposit = mAccountInfo.GetInitialBalance(); + mCriticalValue = deposit * value; + + // + return result; + } + + // + ENUM_X_GUARD_ACTIONS GetCriticalAction() + { + return mCriticalAction; + } + + // + bool SetCriticalAction(ENUM_X_GUARD_ACTIONS value) + { + // + bool result = false; + + // + result = + value != mCriticalAction; + if (!result) + { + return result; + } + + // + mCriticalAction = value; + + // + return result; + } + + // + double GetMaxFactor() + { + return mMaxFactor; + } + + // + bool SetMaxFactor(bool value) + { + // + bool result = false; + + // + result = + value > 0 && + value < 1 && + mMaxFactor != value; + if (!result) + { + return result; + } + + // + mMaxFactor = value; + + // + double deposit = mAccountInfo.GetInitialBalance(); + mMaxValue = deposit * value; + + // + return result; + } + + // + ENUM_X_GUARD_ACTIONS GetMaxAction() + { + return mMaxAction; + } + + // + bool SetMaxAction(ENUM_X_GUARD_ACTIONS value) + { + // + bool result = false; + + // + result = + value != mMaxAction; + if (!result) + { + return result; + } + + // + mMaxAction = value; + + // + return result; + } + + // + ENUM_X_GUARD_SUPPORT_METHODS GetSupportMethod() + { + return mSupportMethod; + } + + // + bool SetSupportMethod(ENUM_X_GUARD_SUPPORT_METHODS value) + { + // + bool result = false; + + // + result = + value != mSupportMethod; + if (!result) + { + return result; + } + + // + mSupportMethod = value; + + // + return result; + } + + // + // END Getter/Setter(s) ... + // + + // + // Generate Signal Guard Attacked Message ... + string GenerateGuardedSignalComment( + XSignal &signal, // Specified Signal + ENUM_X_GUARD_REASONS reason // Specified Guard Reason + ) + { + // + string result = ""; + + // + string reasonMessage = + ( + // + reason == X_GUARDED_OLD + ? "Because of Old Issue" + : reason == X_GUARDED_CRITICAL + ? "Because Of Crtical Drawdown Isuue" + : reason == X_GUARDED_MAX + ? "Because of Max Drawdown Issue" + : "" + // + ) + + " On Profit: " + (string)signal.profit; + + // + result += "Guard Attacked (" + (string)signal.ticket + "), " + reasonMessage + " ..."; + + // + return result; + } + + // + // Protected ... +protected: + // + // Private ... +private: + // + string mSupportPrefix; + string mDirectional; + string mInDirectional; + + // + XProtectedSignal mGuardedSignals[]; + XProtectedSignal mSupportedSignals[]; + + // + int mOldAge; + ENUM_X_GUARD_ACTIONS mOldGuardAction; + + // + // Critical DrawDown Factor based On Balance ... + double mCriticalFactor; + double mCriticalValue; + + // + // Guard Action for Critical State ... + ENUM_X_GUARD_ACTIONS mCriticalAction; + + // + // Max DrawDown Factor based on Balance ... + double mMaxFactor; + double mMaxValue; + // + // Guard Stopout if Max State touched ... + int mOccuredconsecutiveMaxDraDownTouches; + int mGuardStopoutFiredAfterTouches; + + // + // Guard Action for Max State ... + ENUM_X_GUARD_ACTIONS mMaxAction; + + // + // How to Support Signals ... + ENUM_X_GUARD_SUPPORT_METHODS mSupportMethod; + + // + // Account Info Instance ... + XCAccountInfo mAccountInfo; + + // + // Get Volume Multiplier for Specified Guard Action ... + double GetGuardActionVolumeMultiplier( + ENUM_X_GUARD_ACTIONS action = X_GUARD_DO_NOTHING // Specified Action + ) + { + // + // Partial Close Max In Drawdown Trade ... + double result = 0.0; + if (action == X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_1) + { + result = 0.01; + } + else if (action == X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_2) + { + result = 0.02; + } + else if (action == X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_3) + { + result = 0.03; + } + else if (action == X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_5) + { + result = 0.05; + } + else if (action == X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_10) + { + result = 0.10; + } + else if (action == X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_15) + { + result = 0.15; + } + else if (action == X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_20) + { + result = 0.20; + } + else if (action == X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_25) + { + result = 0.25; + } + else if (action == X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_30) + { + result = 0.30; + } + else if (action == X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_40) + { + result = 0.40; + } + else if (action == X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_50) + { + result = 0.50; + } + else if (action == X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_60) + { + result = 0.60; + } + else if (action == X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_70) + { + result = 0.70; + } + else if (action == X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_75) + { + result = 0.75; + } + + // + return result; + } + + // + // Do Specified Guard Action ... + bool DoGuardAction( + XGuardHandlerResult &guardResult, // Hold's Result ... + string &message, // Hold's Message ... + XCTrade &trader, // Specified Trader Class ... + ENUM_X_GUARD_ACTIONS action, // Specified Which Action to Do ... + ENUM_X_GUARD_REASONS reason, // Specified Guard Reason ... + ENUM_TIMEFRAMES period = NULL // Specified Time Frame for Detecting Signal Ages ... + ) + { + // + bool result = false; + + // + message = ""; + + // + string reasonString = + reason == X_GUARDED_OLD + ? "Because of Age Issue" + : "Because of DD " + ( + // + reason == X_GUARDED_CRITICAL ? "Critical" : "Max" + // + ) + + " Issue"; + + // + // Validate Args ... + if (action == X_GUARD_DO_NOTHING) + { + // + message = "Max Allowed Drawdown Reached, but nothing Happens ..."; + + // + return result; + } + + // + // Normalize Period ... + if (period == NULL) + { + period = _Period; + } + + // + // Close All Signals ... + XSignal closed[]; + XSignal maxInDDSignal; + + // + // Handle Perform Guard Action ... + switch (action) + { + // + // Close All ... + case X_GUARD_CLOSE_ALL: + { + // + trader.CloseSignals(closed); + int closedCount = ArraySize(closed); + result = closedCount > 0; + if (!result) + { + break; + } + + // + message = "Closed (" + (string)closedCount + ") Trades by Guard, " + reasonString + " ..."; + } + break; + + // + case X_GUARD_CLOSE_MAX_IN_DD: + case X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_1: + case X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_2: + case X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_3: + case X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_5: + case X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_10: + case X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_15: + case X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_20: + case X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_25: + case X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_30: + case X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_40: + case X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_50: + case X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_60: + case X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_70: + case X_GUARD_PARTIAL_CLOSE_MAX_IN_DD_75: + { + // + // Retrieve Max In Drawdown Trade ... + maxInDDSignal = trader.GetMaxInDrawdownSignal(); + bool isValid = IsValid(maxInDDSignal, trader.GetMagicNumber()) && maxInDDSignal.ticket > 0; + if (!isValid) + { + break; + } + + // + // Close Max In Drawdown Trade ... + if (action == X_GUARD_CLOSE_MAX_IN_DD) + { + // + string comment = "Signal (" + (string)maxInDDSignal.ticket + ") Closed by Guard ..."; + result = trader.Close( + maxInDDSignal.ticket, + comment); + if (result) + { + message = comment; + } + + // + break; + } + + // + int signalAge = 0; + bool canGuard = true; + bool isGuardedBefore = false; + + // + // Do Some Additional Verifications if Guard for Olds Trades ... + if (reason == X_GUARDED_OLD) + { + // + // Retrieve Signal Age ... + signalAge = trader.GetSignalAge( + maxInDDSignal, + period); + + // + // Check Guarded Before Or Not ... + isGuardedBefore = IsExists(maxInDDSignal.ticket); + if (isGuardedBefore) + { + // + // Now We Have to Check Signal Age growse required times to apply Guard Action again ... + // First Calculate Guard Grow Step ... + int ageGrowStep = mOldAge / 10; + + // + XProtectedSignal guardItem = Get(maxInDDSignal.ticket); + datetime lastGuardTime = 0; + if (GetLastItem(lastGuardTime, guardItem.time)) + { + // + int lastGuardIndex = iBarShift( + maxInDDSignal.symbol, + period, + lastGuardTime); + + // + canGuard = + MathAbs(lastGuardIndex) >= ageGrowStep; + } + } + else + { + // + // Check Signal age ... + canGuard = signalAge >= mOldAge; + } + } + + // + // Prevent Moving Forward ... + if (!canGuard) + { + // + result = false; + break; + } + + // + // Partial Close Max In Drawdown Trade ... + double volumeRate = GetGuardActionVolumeMultiplier(action); + + // + double volume = NormalizeVolume( + maxInDDSignal.volume * volumeRate, + maxInDDSignal.symbol); + + // + string commentPrefix = "Signal (" + (string)maxInDDSignal.ticket + ") Partial Closed (" + (string)volumeRate + ") by Guard"; + string comment = commentPrefix + " ..."; + + // + result = trader.ClosePartial( + maxInDDSignal.ticket, + volume, + comment); + if (result) + { + // + reasonString = + reasonString + + (reason == X_GUARDED_OLD + ? " (" + (string)signalAge + ")" + : " (" + (string)maxInDDSignal.profit + ")"); + + // + // Update Guarded Signals ... + if (isGuardedBefore) + { + // + XSignal tSignal = trader.GetSignal(maxInDDSignal.ticket); + + // + if (tSignal.ticket > 0 && tSignal.volume > 0) + { + // + // Update In Guardeds ... + Update(tSignal); + } + else + { + // + // Remove From Guardeds ... + Remove(tSignal.ticket); + } + } + else if (reason == X_GUARDED_OLD) + { + // + // Added to Guardeds ... + Add(maxInDDSignal); + } + + // + message = commentPrefix + reasonString + " ..."; + } + } + break; + + // + // Nothing ... + // Default ... + default: + message = "Max Allowed Drawdown Reached ..."; + break; + } + + // + result = StringLen(message) > 0; + if (!result) + { + return result; + } + + // + if (result) + { + // + if (reason == X_GUARDED_OLD) + { + // + int closedCount = ArraySize(closed); + if (closedCount > 0) + { + // + for (int i = 0; i < closedCount; i++) + { + AddItemToBuffer( + closed[i], + guardResult.olds); + } + } + + // + if (maxInDDSignal.ticket > 0) + { + AddItemToBuffer( + maxInDDSignal, + guardResult.olds); + } + } + else if (reason == X_GUARDED_CRITICAL) + { + // + int closedCount = ArraySize(closed); + if (closedCount > 0) + { + // + for (int i = 0; i < closedCount; i++) + { + AddItemToBuffer( + closed[i], + guardResult.criticals); + } + } + + // + if (maxInDDSignal.ticket > 0) + { + AddItemToBuffer( + maxInDDSignal, + guardResult.criticals); + } + } + else if (reason == X_GUARDED_MAX) + { + // + int closedCount = ArraySize(closed); + if (closedCount > 0) + { + // + for (int i = 0; i < closedCount; i++) + { + AddItemToBuffer( + closed[i], + guardResult.maxes); + } + } + + // + if (maxInDDSignal.ticket > 0) + { + AddItemToBuffer( + maxInDDSignal, + guardResult.maxes); + } + } + } + + // + return result; + } +}; + +// +// END Global Definitions: Variables, Properties and etc ... +// diff --git a/BKPS/XAU5-0.43/Classes/x-saherelm.nn.lib.ex5 b/BKPS/XAU5-0.43/Classes/x-saherelm.nn.lib.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..5fd566b4c222e8b485a05672df679326cd6fa075 GIT binary patch literal 4062 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 literal 0 HcmV?d00001 diff --git a/BKPS/XAU5-0.43/Classes/x-saherelm.nn.lib.mq5 b/BKPS/XAU5-0.43/Classes/x-saherelm.nn.lib.mq5 new file mode 100644 index 0000000..8fa40f5 --- /dev/null +++ b/BKPS/XAU5-0.43/Classes/x-saherelm.nn.lib.mq5 @@ -0,0 +1,258 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 NN Class Library +// ---------------------------------------- +// Name: XNNClass +// Description: provides all classes for implementing +// Neural Network ... +// +// +// 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 Global Definitions: Variables, Properties and etc ... +// +class XCNNBase +{ + // + // Public Definitions ... +public: + // + // Constructor ... + void XCNNBase( + int nodes = 10, // Number of Input Nodes + double starterWeight = 0.5, // start weight for each input + double coEfficient = 0.1, // COEfficient Multiplier + double upperRange = 1, // Upper Normal Range Value + double lowerRange = -1, // Lower Normal Range Value + double learningRates = 0.1 // Back Propagation Learning Rate + ) { + // + mNodes = nodes; + mUpperRange = upperRange; + mLowerRange = lowerRange; + mCoEfficient = coEfficient; + mLearningRates = learningRates; + mStarterWeight = starterWeight; + + // + ReConstructWeights(); + } + + // + // Deconstructor ... + void ~XCNNBase() {} + + // + // Protected Definitions ... + void NormalizeInputs(double &inputs[], double &result[]) + { + // + ArrayFree(result); + ArrayResize(result, 1); + + // + // Validate inputs ... + if (ArraySize(inputs) != mNodes) + { + return; + } + + // + // Prepare Result ... + ArrayResize(result, mNodes); + + // + // Calculating min and max range value ... + double minRangeValue = inputs[ArrayMinimum(inputs)]; + double maxRangeValue = inputs[ArrayMaximum(inputs)]; + + // + // Loop through Inputs nd Normalize them ... + for (int i = 0; i < mNodes; i++) + { + // + double normalValue = (((inputs[i] - minRangeValue) * (mUpperRange - mLowerRange)) / (maxRangeValue - minRangeValue)) + mLowerRange; + result[i] = normalValue; + } + } + + // + // Hyperbolic Tangent Activation Function ... + double TanHActivationFunction(double weightedInputs) + { + // + double result = (exp(weightedInputs) - exp(-weightedInputs)) / (exp(weightedInputs) + exp(-weightedInputs)); + return result; + } + + // + // Calculate Weighted Inputs ... + double CalculateWeightedInputs( + double &inputs[], + bool applyCOEfficient = true) + { + // + double result = 0; + + // + // Validate Inputs ... + if (ArraySize(inputs) != mNodes) + { + // + result = -1; + return result; + } + + // + for (int i = 0; i < mNodes; i++) + { + result += inputs[i] * mWeights[i]; + } + + // + // Multiply if required ... + if (applyCOEfficient) + { + result *= mCoEfficient; + } + + // + return result; + } + + // + // Calculate Hidden Layers ... + virtual double CalculateHiddenLayer(double &inputs[]) + { + // + // this is Default Activation Function which used ... + // you can override this by writing your own ... + double totalWeightedInputs = CalculateWeightedInputs(inputs); + double result = TanHActivationFunction(totalWeightedInputs); + + // + return result; + } + + // + // Calculate Output Layers ... + double CalculateOutputLayer(double &inputs[]) + { + // + double result = -1; + + // + // Validate Inputs ... + if (ArraySize(inputs) != mNodes) { + return result; + } + + // + double normalizedInputs[]; + NormalizeInputs(inputs, normalizedInputs); + if (ArraySize(normalizedInputs) != mNodes) { + return result; + } + + // + double hiddenLayerResult = CalculateHiddenLayer(normalizedInputs); + + // + result = 1 * hiddenLayerResult; + + // + return result; + } + + // + // Basck Propaggation Learning ... + void BackPropagation( + double &inputs[], + double &outputs, + double targetOutput + ) { + // + // Validate Inputs ... + if (ArraySize(inputs) != mNodes) { + return; + } + + // + double normalizedInputs[]; + NormalizeInputs(inputs, normalizedInputs); + if (ArraySize(normalizedInputs) != mNodes) { + return; + } + + // + double error = targetOutput - outputs; + double derivative = 1 - MathPow(outputs, 2); + + // + for (int i = 0; i < mNodes; i++) { + // + double gradient = error * derivative * inputs[i]; + mWeights[i] = mLearningRates * gradient; + } + } + +protected: + // + // Private Definitions ... +private: + // + // Number of Input Nodes ... + int mNodes; + + // + // Specify Upper range of Normal Values ... + double mUpperRange; + + // + // Specify Lower range of Normal Values ... + double mLowerRange; + + // + // Starter Weight for each input node ... + double mStarterWeight; + + // + // double Input Node Weights ... + double mWeights[]; + + // + // CoEfficient is a multiplyer for weighted inputs ... + double mCoEfficient; + + // + // Back Propagation Learning Rates ... + double mLearningRates; + + // + // ReConstruct Weights ... + void ReConstructWeights() { + // + ArrayFree(mWeights); + ArrayResize(mWeights, mNodes); + + // + for (int i = 0; i< mNodes; i++) { + mWeights[i] = mStarterWeight; + } + } +} +// +// END Global Definitions: Variables, Properties and etc ... +// diff --git a/BKPS/XAU5-0.43/Classes/x-saherelm.provider.lib.ex5 b/BKPS/XAU5-0.43/Classes/x-saherelm.provider.lib.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..1a8ec9a1239c1900db0f6e4d26b4ba19fa117229 GIT binary patch literal 15486 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 literal 0 HcmV?d00001 diff --git a/BKPS/XAU5-0.43/Classes/x-saherelm.provider.lib.mq5 b/BKPS/XAU5-0.43/Classes/x-saherelm.provider.lib.mq5 new file mode 100644 index 0000000..1dbdcd3 --- /dev/null +++ b/BKPS/XAU5-0.43/Classes/x-saherelm.provider.lib.mq5 @@ -0,0 +1,4430 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center MQL5 Class Library +// -------------------------------------- +// Name: XProvider +// Description: provides all indicators based provider classes for use ... +// +// +// 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 Define Enums ... +// + +// +enum ENUM_X_SIGNAL_PROVIDERS +{ + // + // XSP Expert Support Mechanism ... + XSP, + // + // XTD ... + XTD, + // + // XTAM ... + XTAM, + // + // XSI ... + XSI, + // + // XTSFI ... + XTSFI, + // + // XOBDLH ... + XOBDLH, + // + // XCHMACC ... + XCHMACC, + // + // XCHMACMN ... + XCHMAMN, + // + // XCHMACMX ... + XCHMAMX, +}; + +// +// Represent Market Conditions ... +struct XMarketConditions +{ + // + // XTM ... + bool isXTMPeak; + bool isXTMVale; + bool isXTMBullish; + bool isXTMBearish; + bool isXTMNeutural; + bool isXTMEndBullish; + bool isXTMEndBearish; + bool isXTMStartBullish; + bool isXTMStartBearish; + bool isXTMEndBullishByNeutural; + bool isXTMEndBearishByNeutural; + bool isXTMStartBullishAfterNeutural; + bool isXTMStartBearishAfterNeutural; + + // + // XAMA ... + bool isXAMAPeak; + bool isXAMAVale; + bool isXAMABullish; + bool isXAMABearish; + bool isXAMANeutural; + bool isXAMAEndBullish; + bool isXAMAEndBearish; + bool isXAMAStartBullish; + bool isXAMAStartBearish; + bool isXAMAEndBullishByNeutural; + bool isXAMAEndBearishByNeutural; + bool isXAMAStartBullishAfterNeutural; + bool isXAMAStartBearishAfterNeutural; + + // + // XLH ... + bool isXLHHHIncreased; + bool isXLHHHDecreased; + bool isXLHLLIncreased; + bool isXLHLLDecreased; + bool isXLHLowAttachedLL; + bool isXLHHighAttachedHH; + bool isXLHHHSameInLength; + bool isXLHLLSameInLength; + bool isXLHPriceOverSignal; + bool isXLHPriceUnderSignal; + bool isXLHPriceInSignalRange; + bool isXLHPriceCrossedOverSignal; + bool isXLHPriceCrossedUnderSignal; + + // + // XTD ... + bool isXTDSignalPeak; + bool isXTDSignalVale; + bool isXTDBullishPeak; + bool isXTDBullishVale; + bool isXTDBearishPeak; + bool isXTDBearishVale; + bool isXTDBullOverBear; + bool isXTDBullUnderBear; + bool isXTDSignalOverBear; + bool isXTDSignalUnderBear; + bool isXTDBullCrossedOverBear; + bool isXTDBullCrossedUnderBear; + bool isXTDSignalCrossedOverBear; + bool isXTDSignalCrossedUnderBear; + + // + // XFI ... + bool isXFIPeak; + bool isXFIVale; + bool isXFICrossedOverZero; + bool isXFIOverZero; + bool isXFICrossedUnderZero; + bool isXFIUnderZero; + + // + // XTS ... + bool isXTSAllSame; + bool isXTSCurrentMin; + bool isXTSCurrentMax; + bool isXTSCurrentOverFarest; + bool isXTSCurrentOverNearest; + bool isXTSCurrentOverMediest; + bool isXTSCurrentUnderFarest; + bool isXTSCurrentUnderNearest; + bool isXTSCurrentUnderMediest; + bool isXTSCurrentCrossedOverFarest; + bool isXTSCurrentCrossedOverNearest; + bool isXTSCurrentCrossedOverMediest; + bool isXTSCurrentCrossedUnderFarest; + bool isXTSCurrentCrossedUnderNearest; + bool isXTSCurrentCrossedUnderMediest; + + // + // XRSI ... + bool isXRSIPeak; + bool isXRSIVale; + bool isXRSICrossedOverLongExit; + bool isXRSICrossedOverLongEntry; + bool isXRSICrossedUnderShortExit; + bool isXRSICrossedUnderShortEntry; + + // + // XOBD ... + bool isXOBDSwingLow; + bool isXOBDSwingHigh; + + // + // XCHLH ... + // + bool isXCHLHSameHHs; + bool isXCHLHSameLLs; + // + bool isXCHLHSCMCHHSame; + bool isXCHLHSCMCLLSame; + // + bool isXCHLHSCLCHHSame; + bool isXCHLHSCLCLLSame; + // + bool isXCHLHMCLCHHSame; + bool isXCHLHMCLCLLSame; + // + bool isXCHLHMCOnTopOfLC; + bool isXCHLHMCInBottomOfLC; + + // + // XCHMA ... + // + bool isXCHMASCOverMax; + bool isXCHMASCOverMin; + bool isXCHMASCUnderMax; + bool isXCHMASCUnderMin; + // + bool isXCHMASCCrossedOverMax; + bool isXCHMASCCrossedUnderMax; + bool isXCHMASCCrossedOverMin; + bool isXCHMASCCrossedUnderMin; + // + bool isXCHMASCPeak; + bool isXCHMASCVale; + bool isXCHMASCTrendsUp; + bool isXCHMASCTrendsDown; + bool isXCHMASCFastOverSlow; + bool isXCHMASCFastUnderSlow; + bool isXCHMASCFastCrossedOverSlow; + bool isXCHMASCFastCrossedUnderSlow; + // + bool isXCHMAMCPeak; + bool isXCHMAMCVale; + bool isXCHMAMCTrendsUp; + bool isXCHMAMCTrendsDown; + bool isXCHMAMCFastOverSlow; + bool isXCHMAMCFastUnderSlow; + bool isXCHMAMCFastCrossedOverSlow; + bool isXCHMAMCFastCrossedUnderSlow; + // + bool isXCHMALCPeak; + bool isXCHMALCVale; + bool isXCHMALCTrendsUp; + bool isXCHMALCTrendsDown; + bool isXCHMALCFastOverSlow; + bool isXCHMALCFastUnderSlow; + bool isXCHMALCFastCrossedOverSlow; + bool isXCHMALCFastCrossedUnderSlow; +}; + +// +// END Define Enums ... +// + +// +// START Includes Requirements ... +// + +// +// Includes Classes ... +#include "x-saherelm.class.lib.mq5" + +// +// Includes all Indicator's Helpers ... +#include "../Helpers/x-saherelm.xlh.indicator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xtm.indicator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xama.indicator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xfi.oscillator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xobd.indicator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xts.oscillator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xtd.oscillator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xrsi.oscillator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xchlh.oscillator.helper.lib.mq5" +#include "../Helpers/x-saherelm.xchma.oscillator.helper.lib.mq5" + +// +// END Includes Requirements ... +// + +// +class XCProvider : public XCBase +{ + // + // Public ... +public: + // + // Constructor ... + XCProvider( + // + // Common Requirements ... + string xSymbol, // Which Symbol is Used + ENUM_TIMEFRAMES xPeriod, // Which Period is Used + // + // Signallers Requirements ... + // + // XTD ... + bool xTDEnableSignaller, // Enable Signaller + bool xTDAllowLongSignals, // Allow Long Signals + bool xTDAllowShortSignals, // Allow Short Signals + // + // XTAM ... + bool xTAMEnableSignaller, // Enable Signaller + bool xTAMAllowLongSignals, // Allow Long Signals + bool xTAMAllowShortSignals, // Allow Short Signals + // + // XSI ... + bool xSIEnableSignaller, // Enable Signaller + bool xSIAllowLongSignals, // Allow Long Signals + bool xSIAllowShortSignals, // Allow Short Signals + // + // XTSFI ... + bool xTSFIEnableSignaller, // Enable Signaller + bool xTSFIAllowLongSignals, // Allow Long Signals + bool xTSFIAllowShortSignals, // Allow Short Signals + // + // XOBDLH ... + bool xOBDLHEnableSignaller, // Enable Signaller + bool xOBDLHAllowLongSignals, // Allow Long Signals + bool xOBDLHAllowShortSignals, // Allow Short Signals + // + // XCHMACC ... + bool xCHMACCEnableSignaller, // Enable Signaller + bool xCHMACCAllowLongSignals, // Allow Long Signals + bool xCHMACCAllowShortSignals, // Allow Short Signals + // + // XCHMAMX ... + bool xCHMACMXEnableSignaller, // Enable Signaller + bool xCHMACMXAllowLongSignals, // Allow Long Signals + bool xCHMACMXAllowShortSignals, // Allow Short Signals + // + // XCHMAMN ... + bool xCHMACMNEnableSignaller, // Enable Signaller + bool xCHMACMNAllowLongSignals, // Allow Long Signals + bool xCHMACMNAllowShortSignals // Allow Short Signals + // + ) + { + // + // XTD ... + mXTDEnableSignaller = xTDEnableSignaller; + mXTDAllowLongSignals = xTDAllowLongSignals; + mXTDAllowShortSignals = xTDAllowShortSignals; + + // + // XTAM ... + mXTAMEnableSignaller = xTAMEnableSignaller; + mXTAMAllowLongSignals = xTAMAllowLongSignals; + mXTAMAllowShortSignals = xTAMAllowShortSignals; + + // + // XSI ... + mXSIEnableSignaller = xSIEnableSignaller; + mXSIAllowLongSignals = xSIAllowLongSignals; + mXSIAllowShortSignals = xSIAllowShortSignals; + + // + // XTSFI ... + mXTSFIEnableSignaller = xTSFIEnableSignaller; + mXTSFIAllowLongSignals = xTSFIAllowLongSignals; + mXTSFIAllowShortSignals = xTSFIAllowShortSignals; + + // + // XOBDLH ... + mXOBDLHEnableSignaller = xOBDLHEnableSignaller; + mXOBDLHAllowLongSignals = xOBDLHAllowLongSignals; + mXOBDLHAllowShortSignals = xOBDLHAllowShortSignals; + + // + // XCHMACC ... + mXCHMACCEnableSignaller = xCHMACCEnableSignaller; + mXCHMACCAllowLongSignals = xCHMACCAllowLongSignals; + mXCHMACCAllowShortSignals = xCHMACCAllowShortSignals; + + // + // XCHMAMX ... + mXCHMAMXEnableSignaller = xCHMACMXEnableSignaller; + mXCHMAMXAllowLongSignals = xCHMACMXAllowLongSignals; + mXCHMAMXAllowShortSignals = xCHMACMXAllowShortSignals; + + // + // XCHMAMN ... + mXCHMAMNEnableSignaller = xCHMACMNEnableSignaller; + mXCHMAMNAllowLongSignals = xCHMACMNAllowLongSignals; + mXCHMAMNAllowShortSignals = xCHMACMNAllowShortSignals; + } + + // + // Deconstructor ... + ~XCProvider() {} + + // + // START Common Functions ... + // + + // + // Read All Globally Required Conditions ... + void ReadConditions() + { + // + ClearConditions(); + + // + mXConditions = GenerateMarketConditions(1); + } + + // + // Cleanup Conditions ... + void ClearConditions() + { + // + XMarketConditions mConditions = {}; + + // + mXConditions = mConditions; + } + + // + // Generate Merket Conditions for Specified Bar Index ... + XMarketConditions GenerateMarketConditions( + int bar_index = 1 // Specified Bar Index ... + ) + { + // + XMarketConditions mConditions = {}; + + // + // XTM ... + mConditions.isXTMPeak = XTMIsPeak(bar_index); + mConditions.isXTMVale = XTMIsVale(bar_index); + mConditions.isXTMBullish = XTMIsBullish(bar_index); + mConditions.isXTMBearish = XTMIsBearish(bar_index); + mConditions.isXTMNeutural = XTMIsNeutural(bar_index); + mConditions.isXTMEndBullish = XTMIsEndBullish(bar_index); + mConditions.isXTMEndBearish = XTMIsEndBearish(bar_index); + mConditions.isXTMStartBullish = XTMIsStartBullish(bar_index); + mConditions.isXTMStartBearish = XTMIsStartBearish(bar_index); + mConditions.isXTMEndBullishByNeutural = XTMIsEndBullishByNeutural(bar_index); + mConditions.isXTMEndBearishByNeutural = XTMIsEndBearishByNeutural(bar_index); + mConditions.isXTMStartBullishAfterNeutural = XTMIsStartBullishAfterNeutural(bar_index); + mConditions.isXTMStartBearishAfterNeutural = XTMIsStartBearishAfterNeutural(bar_index); + + // + // XAMA ... + mConditions.isXAMAPeak = XAMAIsPeak(bar_index); + mConditions.isXAMAVale = XAMAIsVale(bar_index); + mConditions.isXAMABullish = XAMAIsBullish(bar_index); + mConditions.isXAMABearish = XAMAIsBearish(bar_index); + mConditions.isXAMANeutural = XAMAIsNeutural(bar_index); + mConditions.isXAMAEndBullish = XAMAIsEndBullish(bar_index); + mConditions.isXAMAEndBearish = XAMAIsEndBearish(bar_index); + mConditions.isXAMAStartBullish = XAMAIsStartBullish(bar_index); + mConditions.isXAMAStartBearish = XAMAIsStartBearish(bar_index); + mConditions.isXAMAEndBullishByNeutural = XAMAIsEndBullishByNeutural(bar_index); + mConditions.isXAMAEndBearishByNeutural = XAMAIsEndBearishByNeutural(bar_index); + mConditions.isXAMAStartBullishAfterNeutural = XAMAIsStartBullishAfterNeutural(bar_index); + mConditions.isXAMAStartBearishAfterNeutural = XAMAIsStartBearishAfterNeutural(bar_index); + + // + // XLH ... + mConditions.isXLHHHIncreased = XLHIsHHIncreased(bar_index); + mConditions.isXLHHHDecreased = XLHIsHHDecreased(bar_index); + mConditions.isXLHLLIncreased = XLHIsLLIncreased(bar_index); + mConditions.isXLHLLDecreased = XLHIsLLDecreased(bar_index); + mConditions.isXLHLowAttachedLL = XLHIsLowAttachedLL(bar_index); + mConditions.isXLHHighAttachedHH = XLHIsHighAttachedHH(bar_index); + mConditions.isXLHHHSameInLength = XLHIsHHSameInLength(bar_index); + mConditions.isXLHLLSameInLength = XLHIsLLSameInLength(bar_index); + mConditions.isXLHPriceOverSignal = XLHIsPriceOverSignal(bar_index); + mConditions.isXLHPriceUnderSignal = XLHIsPriceUnderSignal(bar_index); + mConditions.isXLHPriceInSignalRange = XLHIsPriceInSignalRange(bar_index); + mConditions.isXLHPriceCrossedOverSignal = XLHIsPriceCrossedOverSignal(bar_index); + mConditions.isXLHPriceCrossedUnderSignal = XLHIsPriceCrossedUnderSignal(bar_index); + + // + // XTD ... + mConditions.isXTDSignalPeak = XTDIsSignalPeak(bar_index); + mConditions.isXTDSignalVale = XTDIsSignalVale(bar_index); + mConditions.isXTDBullishPeak = XTDIsBullishPeak(bar_index); + mConditions.isXTDBullishVale = XTDIsBullishVale(bar_index); + mConditions.isXTDBearishPeak = XTDIsBearishPeak(bar_index); + mConditions.isXTDBearishVale = XTDIsBearishVale(bar_index); + mConditions.isXTDBullOverBear = XTDIsBullOverBear(bar_index); + mConditions.isXTDBullUnderBear = XTDIsBullUnderBear(bar_index); + mConditions.isXTDSignalOverBear = XTDIsSignalOverBear(bar_index); + mConditions.isXTDSignalUnderBear = XTDIsSignalUnderBear(bar_index); + mConditions.isXTDBullCrossedOverBear = XTDIsBullCrossedOverBear(bar_index); + mConditions.isXTDBullCrossedUnderBear = XTDIsBullCrossedUnderBear(bar_index); + mConditions.isXTDSignalCrossedOverBear = XTDIsSignalCrossedOverBear(bar_index); + mConditions.isXTDSignalCrossedUnderBear = XTDIsSignalCrossedUnderBear(bar_index); + + // + // XFI ... + mConditions.isXFIPeak = XFIIsPeak(bar_index); + mConditions.isXFIVale = XFIIsVale(bar_index); + mConditions.isXFIOverZero = XFIIsOverZero(bar_index); + mConditions.isXFIUnderZero = XFIIsUnderZero(bar_index); + mConditions.isXFICrossedOverZero = XFIIsCrossedOverZero(bar_index); + mConditions.isXFICrossedUnderZero = XFIIsCrossedUnderZero(bar_index); + + // + // XTS ... + mConditions.isXTSAllSame = XTSIsAllSame(bar_index); + mConditions.isXTSCurrentMin = XTSIsCurrentMin(bar_index); + mConditions.isXTSCurrentMax = XTSIsCurrentMax(bar_index); + mConditions.isXTSCurrentOverFarest = XTSIsCurrentOverFarest(bar_index); + mConditions.isXTSCurrentOverNearest = XTSIsCurrentOverNearest(bar_index); + mConditions.isXTSCurrentOverMediest = XTSIsCurrentOverMediest(bar_index); + mConditions.isXTSCurrentUnderFarest = XTSIsCurrentUnderFarest(bar_index); + mConditions.isXTSCurrentUnderNearest = XTSIsCurrentUnderNearest(bar_index); + mConditions.isXTSCurrentUnderMediest = XTSIsCurrentUnderMediest(bar_index); + mConditions.isXTSCurrentCrossedOverFarest = XTSIsCurrentCrossedOverFarest(bar_index); + mConditions.isXTSCurrentCrossedOverNearest = XTSIsCurrentCrossedOverNearest(bar_index); + mConditions.isXTSCurrentCrossedOverMediest = XTSIsCurrentCrossedOverMediest(bar_index); + mConditions.isXTSCurrentCrossedUnderFarest = XTSIsCurrentCrossedUnderFarest(bar_index); + mConditions.isXTSCurrentCrossedUnderNearest = XTSIsCurrentCrossedUnderNearest(bar_index); + mConditions.isXTSCurrentCrossedUnderMediest = XTSIsCurrentCrossedUnderMediest(bar_index); + + // + // XRSI ... + mConditions.isXRSIPeak = XRSIIsPeak(bar_index); + mConditions.isXRSIVale = XRSIIsVale(bar_index); + mConditions.isXRSICrossedOverLongExit = XRSIIsCrossedOverLongExit(bar_index); + mConditions.isXRSICrossedOverLongEntry = XRSIIsCrossedOverLongEntry(bar_index); + mConditions.isXRSICrossedUnderShortExit = XRSIIsCrossedUnderShortExit(bar_index); + mConditions.isXRSICrossedUnderShortEntry = XRSIIsCrossedUnderShortEntry(bar_index); + + // + // XOBD ... + mConditions.isXOBDSwingLow = XOBDIsSwingLow(bar_index); + mConditions.isXOBDSwingHigh = XOBDIsSwingHigh(bar_index); + + // + // XCHLH ... + // + mConditions.isXCHLHSameHHs = XCHLHIsSameHHs(bar_index); + mConditions.isXCHLHSameLLs = XCHLHIsSameLLs(bar_index); + // + mConditions.isXCHLHSCMCHHSame = XCHLHIsMCSCHasSameHH(bar_index); + mConditions.isXCHLHSCMCLLSame = XCHLHIsMCSCHasSameLL(bar_index); + // + mConditions.isXCHLHSCLCHHSame = XCHLHIsLCSCHasSameHH(bar_index); + mConditions.isXCHLHSCLCLLSame = XCHLHIsLCSCHasSameLL(bar_index); + // + mConditions.isXCHLHMCLCHHSame = XCHLHIsLCMCHasSameHH(bar_index); + mConditions.isXCHLHMCLCLLSame = XCHLHIsLCMCHasSameLL(bar_index); + // + mConditions.isXCHLHMCOnTopOfLC = XCHLHIsMCOnTopOfLC(bar_index); + mConditions.isXCHLHMCInBottomOfLC = XCHLHIsMCInBottomOfLC(bar_index); + + // + // XCHMA ... + // + mConditions.isXCHMASCOverMax = XCHMAIsSCOverMax(bar_index); + mConditions.isXCHMASCOverMin = XCHMAIsSCOverMin(bar_index); + mConditions.isXCHMASCUnderMax = XCHMAIsSCUnderMax(bar_index); + mConditions.isXCHMASCUnderMin = XCHMAIsSCUnderMin(bar_index); + // + mConditions.isXCHMASCCrossedOverMax = XCHMAIsSCCrossedOverMax(bar_index); + mConditions.isXCHMASCCrossedUnderMax = XCHMAIsSCCrossedUnderMax(bar_index); + mConditions.isXCHMASCCrossedOverMin = XCHMAIsSCCrossedOverMin(bar_index); + mConditions.isXCHMASCCrossedUnderMin = XCHMAIsSCCrossedUnderMin(bar_index); + // + mConditions.isXCHMASCPeak = XCHMAIsSCPeak(bar_index); + mConditions.isXCHMASCVale = XCHMAIsSCVale(bar_index); + mConditions.isXCHMASCTrendsUp = XCHMAIsSCTrendsUp(bar_index); + mConditions.isXCHMASCTrendsDown = XCHMAIsSCTrendsDown(bar_index); + mConditions.isXCHMASCFastOverSlow = XCHMAIsSCFastOverSlow(bar_index); + mConditions.isXCHMASCFastUnderSlow = XCHMAIsSCFastUnderSlow(bar_index); + mConditions.isXCHMASCFastCrossedOverSlow = XCHMAIsSCFastCrossedOverSlow(bar_index); + mConditions.isXCHMASCFastCrossedUnderSlow = XCHMAIsSCFastCrossedUnderSlow(bar_index); + // + mConditions.isXCHMAMCPeak = XCHMAIsMCPeak(bar_index); + mConditions.isXCHMAMCVale = XCHMAIsMCVale(bar_index); + mConditions.isXCHMAMCTrendsUp = XCHMAIsMCTrendsUp(bar_index); + mConditions.isXCHMAMCTrendsDown = XCHMAIsMCTrendsDown(bar_index); + mConditions.isXCHMAMCFastOverSlow = XCHMAIsMCFastOverSlow(bar_index); + mConditions.isXCHMAMCFastUnderSlow = XCHMAIsMCFastUnderSlow(bar_index); + mConditions.isXCHMAMCFastCrossedOverSlow = XCHMAIsMCFastCrossedOverSlow(bar_index); + mConditions.isXCHMAMCFastCrossedUnderSlow = XCHMAIsMCFastCrossedUnderSlow(bar_index); + // + mConditions.isXCHMALCPeak = XCHMAIsLCPeak(bar_index); + mConditions.isXCHMALCVale = XCHMAIsLCVale(bar_index); + mConditions.isXCHMALCTrendsUp = XCHMAIsLCTrendsUp(bar_index); + mConditions.isXCHMALCTrendsDown = XCHMAIsLCTrendsDown(bar_index); + mConditions.isXCHMALCFastOverSlow = XCHMAIsLCFastOverSlow(bar_index); + mConditions.isXCHMALCFastUnderSlow = XCHMAIsLCFastUnderSlow(bar_index); + mConditions.isXCHMALCFastCrossedOverSlow = XCHMAIsLCFastCrossedOverSlow(bar_index); + mConditions.isXCHMALCFastCrossedUnderSlow = XCHMAIsLCFastCrossedUnderSlow(bar_index); + + // + return mConditions; + } + + // + // Access Last Readed Market Conditions ... + XMarketConditions GetLastMarketCondition() + { + // + XMarketConditions result = {}; + + // + result = mXConditions; + + // + return result; + } + + // + // Check Market Conditions is Ready for Long Signals or not ... + bool IsReadyForLong( + bool checkXCHMAMin = true, // Force Check XCHMA Min State + bool checkXCHMAMax = true, // Force Check XCHMA Max State + bool checkXCHMACycles = true, // Force Check XCHMA Cycles State + bool checkXCHMAPeaks = true, // Force Check XCHMA Peaks State + bool checkXCHMATrendPowers = true, // Force Check XCHMA Trend Powers + bool checkXOBD = true, // Force Check XOBD State + bool checkXTS = true // Force Check XTS State + ) + { + // + bool result = true; + + // + if (checkXCHMAMin) + { + // + result = + // + // XCHMA MIN ... + !( + // + (mXConditions.isXCHMASCOverMin || + mXConditions.isXCHMASCCrossedOverMin) && + (mXConditions.isXCHMASCUnderMin || + mXConditions.isXCHMASCCrossedUnderMin) + // + ); + } + + // + if (checkXCHMAMax && result) + { + // + result = + // + // XCHMA MAX ... + !( + // + (mXConditions.isXCHMASCOverMax || + mXConditions.isXCHMASCCrossedOverMax) && + (mXConditions.isXCHMASCUnderMax || + mXConditions.isXCHMASCCrossedUnderMax) + // + ) + // + ; + } + + // + if (checkXCHMACycles && result) + { + // + result = + // + // Check XCHMA Trend Bullish ... + ( + // + // All Cycles Bullish ... + ( + // + // SC ... + (mXConditions.isXCHMASCFastOverSlow || + mXConditions.isXCHMASCFastCrossedOverSlow) + // + && + // + // MC ... + (mXConditions.isXCHMAMCFastOverSlow || + mXConditions.isXCHMAMCFastCrossedOverSlow) + // + && + // + // LC ... + (mXConditions.isXCHMALCFastOverSlow || + mXConditions.isXCHMALCFastCrossedOverSlow) + // + ) + // + || + // + // Two Cycle Fully Bullish ... + ( + // + // SC and MC ... + ( + // + // SC ... + (mXConditions.isXCHMASCFastOverSlow || + mXConditions.isXCHMASCFastCrossedOverSlow) + // + && + // + // MC ... + (mXConditions.isXCHMAMCFastOverSlow || + mXConditions.isXCHMAMCFastCrossedOverSlow) + // + ) + // + || + // + // SC and LC ... + ( + // + // SC ... + (mXConditions.isXCHMASCFastOverSlow || + mXConditions.isXCHMASCFastCrossedOverSlow) + // + && + // + // LC ... + (mXConditions.isXCHMALCFastOverSlow || + mXConditions.isXCHMALCFastCrossedOverSlow) + // + ) + // + || + // + // MC and LC ... + ( + // + // MC ... + (mXConditions.isXCHMAMCFastOverSlow || + mXConditions.isXCHMAMCFastCrossedOverSlow) + // + && + // + // LC ... + (mXConditions.isXCHMALCFastOverSlow || + mXConditions.isXCHMALCFastCrossedOverSlow) + // + ) + // + ) + // + ) + // + ; + } + + // + if (checkXCHMAPeaks && result) + { + // + result = + // + // XCHMA Check Peaks ... + !( + // + // All Cycles Peak ... + (mXConditions.isXCHMASCPeak && + mXConditions.isXCHMAMCPeak && + mXConditions.isXCHMALCPeak) + // + || + // + ( + // + // SC MC ... + (mXConditions.isXCHMASCPeak && + mXConditions.isXCHMAMCPeak) + // + || + // + // SC LC ... + (mXConditions.isXCHMASCPeak && + mXConditions.isXCHMALCPeak) + // + || + // + // MC LC ... + (mXConditions.isXCHMAMCPeak && + mXConditions.isXCHMALCPeak) + // + ) + // + ) + // + ; + } + + // + if (checkXCHMATrendPowers && result) + { + // + result = + // + // XCHMA Check Trends Power ... + !( + // + // All Trends Down ... + (mXConditions.isXCHMASCTrendsDown && + mXConditions.isXCHMAMCTrendsDown && + mXConditions.isXCHMALCTrendsDown) + // + || + // + // Twisted pairs ... + ( + // + (mXConditions.isXCHMASCTrendsDown && + mXConditions.isXCHMAMCTrendsDown) + // + || + // + (mXConditions.isXCHMASCTrendsDown && + mXConditions.isXCHMALCTrendsDown) + // + || + // + (mXConditions.isXCHMAMCTrendsDown && + mXConditions.isXCHMALCTrendsDown) + // + ) + // + ) + // + ; + } + + // + if (checkXOBD && result) + { + // + result = + // + // XOBD Check Swings ... + !mXConditions.isXOBDSwingLow + // + ; + } + + // + if (checkXTS && result) + { + result = + // + // XTS Check ... + !( + // + mXConditions.isXTSCurrentMin && + // + ( + // + // All Under ... + ( + (mXConditions.isXTSCurrentUnderNearest || + mXConditions.isXTSCurrentCrossedUnderNearest) && + (mXConditions.isXTSCurrentUnderMediest || + mXConditions.isXTSCurrentCrossedUnderMediest) && + (mXConditions.isXTSCurrentUnderFarest || + mXConditions.isXTSCurrentCrossedUnderFarest)) + // + || + // + // Pairs ... + ( + // + ((mXConditions.isXTSCurrentUnderNearest || + mXConditions.isXTSCurrentCrossedUnderNearest) && + (mXConditions.isXTSCurrentUnderMediest || + mXConditions.isXTSCurrentCrossedUnderMediest)) + // + || + // + ((mXConditions.isXTSCurrentUnderNearest || + mXConditions.isXTSCurrentCrossedUnderNearest) && + (mXConditions.isXTSCurrentUnderFarest || + mXConditions.isXTSCurrentCrossedUnderFarest)) + // + || + // + ((mXConditions.isXTSCurrentUnderMediest || + mXConditions.isXTSCurrentCrossedUnderMediest) && + (mXConditions.isXTSCurrentUnderFarest || + mXConditions.isXTSCurrentCrossedUnderFarest)) + // + ) + // + ) + // + ) + // + ; + } + + // + return result; + } + + // + // Check Market Conditions is Ready for Short Signals or not ... + bool IsReadyForShort( + bool checkXCHMAMin = true, // Force Check XCHMA Min State + bool checkXCHMAMax = true, // Force Check XCHMA Max State + bool checkXCHMACycles = true, // Force Check XCHMA Cycles State + bool checkXCHMAVales = true, // Force Check XCHMA Vales State + bool checkXCHMATrendPowers = true, // Force Check XCHMA Trend Powers + bool checkXOBD = true, // Force Check XOBD State + bool checkXTS = true // Force Check XTS State + ) + { + // + bool result = true; + + // + if (checkXCHMAMin) + { + // + result = + // + // XCHMA MIN ... + !( + // + (mXConditions.isXCHMASCOverMin || + mXConditions.isXCHMASCCrossedOverMin) && + (mXConditions.isXCHMASCUnderMin || + mXConditions.isXCHMASCCrossedUnderMin) + // + ); + } + + // + if (checkXCHMAMax && result) + { + // + result = + // + // XCHMA MAX ... + !( + // + (mXConditions.isXCHMASCOverMax || + mXConditions.isXCHMASCCrossedOverMax) && + (mXConditions.isXCHMASCUnderMax || + mXConditions.isXCHMASCCrossedUnderMax) + // + ) + // + ; + } + + // + if (checkXCHMACycles && result) + { + // + result = + // + // Check XCHMA Trend Bullish ... + ( + // + // All Cycles Bullish ... + ( + // + // SC ... + (mXConditions.isXCHMASCFastUnderSlow || + mXConditions.isXCHMASCFastCrossedUnderSlow) + // + && + // + // MC ... + (mXConditions.isXCHMAMCFastUnderSlow || + mXConditions.isXCHMAMCFastCrossedUnderSlow) + // + && + // + // LC ... + (mXConditions.isXCHMALCFastUnderSlow || + mXConditions.isXCHMALCFastCrossedUnderSlow) + // + ) + // + || + // + // Two Cycle Fully Bullish ... + ( + // + // SC and MC ... + ( + // + // SC ... + (mXConditions.isXCHMASCFastUnderSlow || + mXConditions.isXCHMASCFastCrossedOverSlow) + // + && + // + // MC ... + (mXConditions.isXCHMAMCFastUnderSlow || + mXConditions.isXCHMAMCFastCrossedOverSlow) + // + ) + // + || + // + // SC and LC ... + ( + // + // SC ... + (mXConditions.isXCHMASCFastUnderSlow || + mXConditions.isXCHMASCFastCrossedUnderSlow) + // + && + // + // LC ... + (mXConditions.isXCHMALCFastUnderSlow || + mXConditions.isXCHMALCFastCrossedUnderSlow) + // + ) + // + || + // + // MC and LC ... + ( + // + // MC ... + (mXConditions.isXCHMAMCFastUnderSlow || + mXConditions.isXCHMAMCFastCrossedOverSlow) + // + && + // + // LC ... + (mXConditions.isXCHMALCFastUnderSlow || + mXConditions.isXCHMALCFastCrossedOverSlow) + // + ) + // + ) + // + ) + // + ; + } + + // + if (checkXCHMAVales && result) + { + // + result = + // + // XCHMA Check Vales ... + !( + // + // All Cycles Vale ... + (mXConditions.isXCHMASCVale && + mXConditions.isXCHMAMCVale && + mXConditions.isXCHMALCVale) + // + || + // + ( + // + // SC MC ... + (mXConditions.isXCHMASCVale && + mXConditions.isXCHMAMCVale) + // + || + // + // SC LC ... + (mXConditions.isXCHMASCVale && + mXConditions.isXCHMALCVale) + // + || + // + // MC LC ... + (mXConditions.isXCHMAMCVale && + mXConditions.isXCHMALCVale) + // + ) + // + ) + // + ; + } + + // + if (checkXCHMATrendPowers && result) + { + // + result = + // + // XCHMA Check Trends Power ... + !( + // + // All Trends Down ... + (mXConditions.isXCHMASCTrendsDown && + mXConditions.isXCHMAMCTrendsDown && + mXConditions.isXCHMALCTrendsDown) + // + || + // + // Twisted pairs ... + ( + // + (mXConditions.isXCHMASCTrendsDown && + mXConditions.isXCHMAMCTrendsDown) + // + || + // + (mXConditions.isXCHMASCTrendsDown && + mXConditions.isXCHMALCTrendsDown) + // + || + // + (mXConditions.isXCHMAMCTrendsDown && + mXConditions.isXCHMALCTrendsDown) + // + ) + // + ) + // + ; + } + + // + if (checkXOBD && result) + { + // + result = + // + // XOBD Check Swings ... + !mXConditions.isXOBDSwingHigh + // + ; + } + + // + if (checkXTS && result) + { + // + result = + // + // XTS Check ... + !( + // + mXConditions.isXTSCurrentMax && + // + ( + // + // All Over ... + ( + (mXConditions.isXTSCurrentOverNearest || + mXConditions.isXTSCurrentCrossedOverNearest) && + (mXConditions.isXTSCurrentOverMediest || + mXConditions.isXTSCurrentCrossedOverMediest) && + (mXConditions.isXTSCurrentOverFarest || + mXConditions.isXTSCurrentCrossedOverFarest)) + // + || + // + // Pairs ... + ( + // + ((mXConditions.isXTSCurrentOverNearest || + mXConditions.isXTSCurrentCrossedOverNearest) && + (mXConditions.isXTSCurrentOverMediest || + mXConditions.isXTSCurrentCrossedOverMediest)) + // + || + // + ((mXConditions.isXTSCurrentOverNearest || + mXConditions.isXTSCurrentCrossedOverNearest) && + (mXConditions.isXTSCurrentOverFarest || + mXConditions.isXTSCurrentCrossedOverFarest)) + // + || + // + ((mXConditions.isXTSCurrentOverMediest || + mXConditions.isXTSCurrentCrossedOverMediest) && + (mXConditions.isXTSCurrentOverFarest || + mXConditions.isXTSCurrentCrossedOverFarest)) + // + ) + // + ) + // + ) + // + ; + } + + // + return result; + } + + // + // Converts Market Conditions to Specific String Representation ... + string GenerateConditionsString( + XMarketConditions &condition, // Specify Conditiond + string separator = "\n", // Specify Separator + bool ignoreFalses = true // Ignore False Conditions + ) + { + // + XMarketConditions mConditions = {}; + + // + mConditions = condition; + + // + string result = "\n"; + + // + // XOBD ... + result += + "| XOBD |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXOBDSwingLow)) + { + result += "isXOBDSwingLow: " + (string)mConditions.isXOBDSwingLow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXOBDSwingHigh)) + { + result += "isXOBDSwingHigh: " + (string)mConditions.isXOBDSwingHigh + separator; + } + + // + // Separator ... + result += separator; + + // + // XTM ... + result += + "| XTM |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMPeak)) + { + result += "isXTMPeak: " + (string)mConditions.isXTMPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMVale)) + { + result += "isXTMVale: " + (string)mConditions.isXTMVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMStartBullish)) + { + result += "isXTMStartBullish: " + (string)mConditions.isXTMStartBullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMStartBullishAfterNeutural)) + { + result += "isXTMStartBullishAfterNeutural: " + (string)mConditions.isXTMStartBullishAfterNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMBullish)) + { + result += "isXTMBullish: " + (string)mConditions.isXTMBullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMEndBullish)) + { + result += "isXTMEndBullish: " + (string)mConditions.isXTMEndBullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMEndBullishByNeutural)) + { + result += "isXTMEndBullishByNeutural: " + (string)mConditions.isXTMEndBullishByNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMStartBearish)) + { + result += "isXTMStartBearish: " + (string)mConditions.isXTMStartBearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMStartBearishAfterNeutural)) + { + result += "isXTMStartBearishAfterNeutural: " + (string)mConditions.isXTMStartBearishAfterNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMBearish)) + { + result += "isXTMBearish: " + (string)mConditions.isXTMBearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMEndBearish)) + { + result += "isXTMEndBearish: " + (string)mConditions.isXTMEndBearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMEndBearishByNeutural)) + { + result += "isXTMEndBearishByNeutural: " + (string)mConditions.isXTMEndBearishByNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTMNeutural)) + { + result += "isXTMNeutural: " + (string)mConditions.isXTMNeutural + separator; + } + + // + // Separator ... + result += separator; + + // + // XAMA ... + result += + "| XAMA |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAPeak)) + { + result += "isXAMAPeak: " + (string)mConditions.isXAMAPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAVale)) + { + result += "isXAMAVale: " + (string)mConditions.isXAMAVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAStartBullish)) + { + result += "isXAMAStartBullish: " + (string)mConditions.isXAMAStartBullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAStartBullishAfterNeutural)) + { + result += "isXAMAStartBullishAfterNeutural: " + (string)mConditions.isXAMAStartBullishAfterNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMABullish)) + { + result += "isXAMABullish: " + (string)mConditions.isXAMABullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAEndBullish)) + { + result += "isXAMAEndBullish: " + (string)mConditions.isXAMAEndBullish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAEndBullishByNeutural)) + { + result += "isXAMAEndBullishByNeutural: " + (string)mConditions.isXAMAEndBullishByNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAStartBearish)) + { + result += "isXAMAStartBearish: " + (string)mConditions.isXAMAStartBearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAStartBearishAfterNeutural)) + { + result += "isXAMAStartBearishAfterNeutural: " + (string)mConditions.isXAMAStartBearishAfterNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMABearish)) + { + result += "isXAMABearish: " + (string)mConditions.isXAMABearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAEndBearish)) + { + result += "isXAMAEndBearish: " + (string)mConditions.isXAMAEndBearish + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMAEndBearishByNeutural)) + { + result += "isXAMAEndBearishByNeutural: " + (string)mConditions.isXAMAEndBearishByNeutural + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXAMANeutural)) + { + result += "isXAMANeutural: " + (string)mConditions.isXAMANeutural + separator; + } + + // + // Separator ... + result += separator; + + // + // XTD ... + result += + "| XTD |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalPeak)) + { + result += "isXTDSignalPeak: " + (string)mConditions.isXTDSignalPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalVale)) + { + result += "isXTDSignalVale: " + (string)mConditions.isXTDSignalVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullishPeak)) + { + result += "isXTDBullishPeak: " + (string)mConditions.isXTDBullishPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullishVale)) + { + result += "isXTDBullishVale: " + (string)mConditions.isXTDBullishVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBearishPeak)) + { + result += "isXTDBearishPeak: " + (string)mConditions.isXTDBearishPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBearishVale)) + { + result += "isXTDBearishVale: " + (string)mConditions.isXTDBearishVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullOverBear)) + { + result += "isXTDBullOverBear: " + (string)mConditions.isXTDBullOverBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullUnderBear)) + { + result += "isXTDBullUnderBear: " + (string)mConditions.isXTDBullUnderBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalOverBear)) + { + result += "isXTDSignalOverBear: " + (string)mConditions.isXTDSignalOverBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalUnderBear)) + { + result += "isXTDSignalUnderBear: " + (string)mConditions.isXTDSignalUnderBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullCrossedOverBear)) + { + result += "isXTDBullCrossedOverBear: " + (string)mConditions.isXTDBullCrossedOverBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDBullCrossedUnderBear)) + { + result += "isXTDBullCrossedUnderBear: " + (string)mConditions.isXTDBullCrossedUnderBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalCrossedOverBear)) + { + result += "isXTDSignalCrossedOverBear: " + (string)mConditions.isXTDSignalCrossedOverBear + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTDSignalCrossedUnderBear)) + { + result += "isXTDSignalCrossedUnderBear: " + (string)mConditions.isXTDSignalCrossedUnderBear + separator; + } + + // + // Separator ... + result += separator; + + // + // XFI ... + result += + "| XFI |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFIPeak)) + { + result += "isXFIPeak: " + (string)mConditions.isXFIPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFIVale)) + { + result += "isXFIVale: " + (string)mConditions.isXFIVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFIOverZero)) + { + result += "isXFIOverZero: " + (string)mConditions.isXFIOverZero + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFIUnderZero)) + { + result += "isXFIUnderZero: " + (string)mConditions.isXFIUnderZero + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFICrossedOverZero)) + { + result += "isXFICrossedOverZero: " + (string)mConditions.isXFICrossedOverZero + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXFICrossedUnderZero)) + { + result += "isXFICrossedUnderZero: " + (string)mConditions.isXFICrossedUnderZero + separator; + } + + // + // Separator ... + result += separator; + + // + // XTS ... + result += + "| XTS |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSAllSame)) + { + result += "isXTSAllSame: " + (string)mConditions.isXTSAllSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentMin)) + { + result += "isXTSCurrentMin: " + (string)mConditions.isXTSCurrentMin + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentMax)) + { + result += "isXTSCurrentMax: " + (string)mConditions.isXTSCurrentMax + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentOverFarest)) + { + result += "isXTSCurrentOverFarest: " + (string)mConditions.isXTSCurrentOverFarest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentOverNearest)) + { + result += "isXTSCurrentOverNearest: " + (string)mConditions.isXTSCurrentOverNearest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentOverMediest)) + { + result += "isXTSCurrentOverMediest: " + (string)mConditions.isXTSCurrentOverMediest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentUnderFarest)) + { + result += "isXTSCurrentUnderFarest: " + (string)mConditions.isXTSCurrentUnderFarest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentUnderNearest)) + { + result += "isXTSCurrentUnderNearest: " + (string)mConditions.isXTSCurrentUnderNearest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentUnderMediest)) + { + result += "isXTSCurrentUnderMediest: " + (string)mConditions.isXTSCurrentUnderMediest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedOverFarest)) + { + result += "isXTSCurrentCrossedOverFarest: " + (string)mConditions.isXTSCurrentCrossedOverFarest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedOverNearest)) + { + result += "isXTSCurrentCrossedOverNearest: " + (string)mConditions.isXTSCurrentCrossedOverNearest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedOverMediest)) + { + result += "isXTSCurrentCrossedOverMediest: " + (string)mConditions.isXTSCurrentCrossedOverMediest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedUnderFarest)) + { + result += "isXTSCurrentCrossedUnderFarest: " + (string)mConditions.isXTSCurrentCrossedUnderFarest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedUnderNearest)) + { + result += "isXTSCurrentCrossedUnderNearest: " + (string)mConditions.isXTSCurrentCrossedUnderNearest + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXTSCurrentCrossedUnderMediest)) + { + result += "isXTSCurrentCrossedUnderMediest: " + (string)mConditions.isXTSCurrentCrossedUnderMediest + separator; + } + + // + // Separator ... + result += separator; + + // + // XLH ... + result += + "| XLH |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHHHIncreased)) + { + result += "isXLHHHIncreased: " + (string)mConditions.isXLHHHIncreased + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHHHDecreased)) + { + result += "isXLHHHDecreased: " + (string)mConditions.isXLHHHDecreased + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHLLIncreased)) + { + result += "isXLHLLIncreased: " + (string)mConditions.isXLHLLIncreased + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHLLDecreased)) + { + result += "isXLHLLDecreased: " + (string)mConditions.isXLHLLDecreased + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHHighAttachedHH)) + { + result += "isXLHHighAttachedHH: " + (string)mConditions.isXLHHighAttachedHH + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHLowAttachedLL)) + { + result += "isXLHLowAttachedLL: " + (string)mConditions.isXLHLowAttachedLL + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHHHSameInLength)) + { + result += "isXLHHHSameInLength: " + (string)mConditions.isXLHHHSameInLength + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHLLSameInLength)) + { + result += "isXLHLLSameInLength: " + (string)mConditions.isXLHLLSameInLength + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHPriceCrossedOverSignal)) + { + result += "isXLHPriceCrossedOverSignal: " + (string)mConditions.isXLHPriceCrossedOverSignal + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHPriceOverSignal)) + { + result += "isXLHPriceOverSignal: " + (string)mConditions.isXLHPriceOverSignal + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHPriceCrossedUnderSignal)) + { + result += "isXLHPriceCrossedUnderSignal: " + (string)mConditions.isXLHPriceCrossedUnderSignal + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHPriceUnderSignal)) + { + result += "isXLHPriceUnderSignal: " + (string)mConditions.isXLHPriceUnderSignal + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXLHPriceInSignalRange)) + { + result += "isXLHPriceInSignalRange: " + (string)mConditions.isXLHPriceInSignalRange + separator; + } + + // + // Separator ... + result += separator; + + // + // XRSI ... + result += + "| XRSI |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSIPeak)) + { + result += "isXRSIPeak: " + (string)mConditions.isXRSIPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSIVale)) + { + result += "isXRSIVale: " + (string)mConditions.isXRSIVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSICrossedOverLongExit)) + { + result += "isXRSICrossedOverLongExit: " + (string)mConditions.isXRSICrossedOverLongExit + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSICrossedOverLongEntry)) + { + result += "isXRSICrossedOverLongEntry: " + (string)mConditions.isXRSICrossedOverLongEntry + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSICrossedUnderShortExit)) + { + result += "isXRSICrossedUnderShortExit: " + (string)mConditions.isXRSICrossedUnderShortExit + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXRSICrossedUnderShortEntry)) + { + result += "isXRSICrossedUnderShortEntry: " + (string)mConditions.isXRSICrossedUnderShortEntry + separator; + } + + // + // Separator ... + result += separator; + + // + // XCHLH ... + result += + "| XCHLH |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSameHHs)) + { + result += "isXCHLHSameHHs: " + (string)mConditions.isXCHLHSameHHs + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSameLLs)) + { + result += "isXCHLHSameLLs: " + (string)mConditions.isXCHLHSameLLs + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSCMCHHSame)) + { + result += "isXCHLHSCMCHHSame: " + (string)mConditions.isXCHLHSCMCHHSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSCMCLLSame)) + { + result += "isXCHLHSCMCLLSame: " + (string)mConditions.isXCHLHSCMCLLSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSCLCHHSame)) + { + result += "isXCHLHSCLCHHSame: " + (string)mConditions.isXCHLHSCLCHHSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHSCLCLLSame)) + { + result += "isXCHLHSCLCLLSame: " + (string)mConditions.isXCHLHSCLCLLSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHMCLCHHSame)) + { + result += "isXCHLHMCLCHHSame: " + (string)mConditions.isXCHLHMCLCHHSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHMCLCLLSame)) + { + result += "isXCHLHMCLCLLSame: " + (string)mConditions.isXCHLHMCLCLLSame + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHMCOnTopOfLC)) + { + result += "isXCHLHMCOnTopOfLC: " + (string)mConditions.isXCHLHMCOnTopOfLC + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHLHMCInBottomOfLC)) + { + result += "isXCHLHMCInBottomOfLC: " + (string)mConditions.isXCHLHMCInBottomOfLC + separator; + } + + // + // Separator ... + result += separator; + + // + // XCHMA ... + result += + "| XCHMA |" + separator; + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCOverMax)) + { + result += "isXCHMASCOverMax: " + (string)mConditions.isXCHMASCOverMax + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCOverMin)) + { + result += "isXCHMASCOverMin: " + (string)mConditions.isXCHMASCOverMin + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCUnderMax)) + { + result += "isXCHMASCUnderMax: " + (string)mConditions.isXCHMASCUnderMax + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCUnderMin)) + { + result += "isXCHMASCUnderMin: " + (string)mConditions.isXCHMASCUnderMin + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCCrossedOverMax)) + { + result += "isXCHMASCCrossedOverMax: " + (string)mConditions.isXCHMASCCrossedOverMax + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCCrossedUnderMax)) + { + result += "isXCHMASCCrossedUnderMax: " + (string)mConditions.isXCHMASCCrossedUnderMax + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCCrossedOverMin)) + { + result += "isXCHMASCCrossedOverMin: " + (string)mConditions.isXCHMASCCrossedOverMin + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCCrossedUnderMin)) + { + result += "isXCHMASCCrossedUnderMin: " + (string)mConditions.isXCHMASCCrossedUnderMin + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCPeak)) + { + result += "isXCHMASCPeak: " + (string)mConditions.isXCHMASCPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCVale)) + { + result += "isXCHMASCVale: " + (string)mConditions.isXCHMASCVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCTrendsUp)) + { + result += "isXCHMASCTrendsUp: " + (string)mConditions.isXCHMASCTrendsUp + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCTrendsDown)) + { + result += "isXCHMASCTrendsDown: " + (string)mConditions.isXCHMASCTrendsDown + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCFastOverSlow)) + { + result += "isXCHMASCFastOverSlow: " + (string)mConditions.isXCHMASCFastOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCFastUnderSlow)) + { + result += "isXCHMASCFastUnderSlow: " + (string)mConditions.isXCHMASCFastUnderSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCFastCrossedOverSlow)) + { + result += "isXCHMASCFastCrossedOverSlow: " + (string)mConditions.isXCHMASCFastCrossedOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMASCFastCrossedUnderSlow)) + { + result += "isXCHMASCFastCrossedUnderSlow: " + (string)mConditions.isXCHMASCFastCrossedUnderSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCPeak)) + { + result += "isXCHMAMCPeak: " + (string)mConditions.isXCHMAMCPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCVale)) + { + result += "isXCHMAMCVale: " + (string)mConditions.isXCHMAMCVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCTrendsUp)) + { + result += "isXCHMAMCTrendsUp: " + (string)mConditions.isXCHMAMCTrendsUp + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCTrendsDown)) + { + result += "isXCHMAMCTrendsDown: " + (string)mConditions.isXCHMAMCTrendsDown + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCFastOverSlow)) + { + result += "isXCHMAMCFastOverSlow: " + (string)mConditions.isXCHMAMCFastOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCFastUnderSlow)) + { + result += "isXCHMAMCFastUnderSlow: " + (string)mConditions.isXCHMAMCFastUnderSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCFastCrossedOverSlow)) + { + result += "isXCHMAMCFastCrossedOverSlow: " + (string)mConditions.isXCHMAMCFastCrossedOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMAMCFastCrossedUnderSlow)) + { + result += "isXCHMAMCFastCrossedUnderSlow: " + (string)mConditions.isXCHMAMCFastCrossedUnderSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCPeak)) + { + result += "isXCHMALCPeak: " + (string)mConditions.isXCHMALCPeak + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCVale)) + { + result += "isXCHMALCVale: " + (string)mConditions.isXCHMALCVale + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCTrendsUp)) + { + result += "isXCHMALCTrendsUp: " + (string)mConditions.isXCHMALCTrendsUp + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCTrendsDown)) + { + result += "isXCHMALCTrendsDown: " + (string)mConditions.isXCHMALCTrendsDown + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCFastOverSlow)) + { + result += "isXCHMALCFastOverSlow: " + (string)mConditions.isXCHMALCFastOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCFastUnderSlow)) + { + result += "isXCHMALCFastUnderSlow: " + (string)mConditions.isXCHMALCFastUnderSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCFastCrossedOverSlow)) + { + result += "isXCHMALCFastCrossedOverSlow: " + (string)mConditions.isXCHMALCFastCrossedOverSlow + separator; + } + + // + if ( + !ignoreFalses || + (ignoreFalses && mConditions.isXCHMALCFastCrossedUnderSlow)) + { + result += "isXCHMALCFastCrossedUnderSlow: " + (string)mConditions.isXCHMALCFastCrossedUnderSlow + separator; + } + + // + // Separator ... + result += separator; + + // + return result; + } + + // + // END Common Functions ... + // + + // + // START Actions Based On Signallers ... + // + + // + // START XTD Signaller ... + // + + // + // Enable Signaller ... + bool EnableSXTDignaller() + { + // + bool result = false; + + // + // Validate Args ... + if (mXTDEnableSignaller) + { + return result; + } + + // + result = true; + mXTDEnableSignaller = true; + + // + return result; + } + + // + // Disable Signaller ... + bool DisbaleXTDSignaller() + { + // + bool result = false; + + // + // Validate Args ... + if (!mXTDEnableSignaller) + { + return result; + } + + // + result = true; + mXTDEnableSignaller = false; + + // + return result; + } + + // + // Allow Sginaller to Issue Long Signals ... + bool EnableXTDLongs() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTDEnableSignaller || + mXTDAllowLongSignals) + { + return result; + } + + // + result = true; + mXTDAllowLongSignals = true; + + // + return result; + } + + // + // Disallow Signaller to Issue Long Signals ... + bool DisbaleXTDLongs() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTDEnableSignaller || + !mXTDAllowLongSignals) + { + return result; + } + + // + result = true; + mXTDAllowLongSignals = false; + + // + return result; + } + + // + // Allow Signaller to Issue Short Sginals ... + bool EnableXTDShorts() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTDEnableSignaller || + mXTDAllowShortSignals) + { + return result; + } + + // + result = true; + mXTDAllowShortSignals = true; + + // + return result; + } + + // + // Disallow Signaller to Issue Short Signals ... + bool DisableXTDShorts() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTDEnableSignaller || + !mXTDAllowShortSignals) + { + return result; + } + + // + result = true; + mXTDAllowShortSignals = false; + + // + return result; + } + + // + // Check Market Base Conditions for Long Signals ... + bool XTDHasLongConditions() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTDEnableSignaller || + !mXTDAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + mXConditions.isXTDSignalCrossedOverBear + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + IsReadyForLong() + // + ) + // + ; + + // + return result; + } + + // + // Check Market Base Conditions for Short Signals ... + bool XTDHasShortConditions() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTDEnableSignaller || + !mXTDAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + mXConditions.isXTDSignalCrossedUnderBear + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + IsReadyForShort() + // + ) + // + ; + + // + return result; + } + + // + // END XTD Signaller ... + // + + // + // START XTAM Signaller ... + // + + // + // Enable Signaller ... + bool EnableSXTAMignaller() + { + // + bool result = false; + + // + // Validate Args ... + if (mXTAMEnableSignaller) + { + return result; + } + + // + result = true; + mXTAMEnableSignaller = true; + + // + return result; + } + + // + // Disable Signaller ... + bool DisbaleXTAMSignaller() + { + // + bool result = false; + + // + // Validate Args ... + if (!mXTAMEnableSignaller) + { + return result; + } + + // + result = true; + mXTAMEnableSignaller = false; + + // + return result; + } + + // + // Allow Sginaller to Issue Long Signals ... + bool EnableXTAMLongs() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTAMEnableSignaller || + mXTAMAllowLongSignals) + { + return result; + } + + // + result = true; + mXTAMAllowLongSignals = true; + + // + return result; + } + + // + // Disallow Signaller to Issue Long Signals ... + bool DisbaleXTAMLongs() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTAMEnableSignaller || + !mXTAMAllowLongSignals) + { + return result; + } + + // + result = true; + mXTAMAllowLongSignals = false; + + // + return result; + } + + // + // Allow Signaller to Issue Short Sginals ... + bool EnableXTAMShorts() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTAMEnableSignaller || + mXTAMAllowShortSignals) + { + return result; + } + + // + result = true; + mXTAMAllowShortSignals = true; + + // + return result; + } + + // + // Disallow Signaller to Issue Short Signals ... + bool DisableXTAMShorts() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTAMEnableSignaller || + !mXTAMAllowShortSignals) + { + return result; + } + + // + result = true; + mXTAMAllowShortSignals = false; + + // + return result; + } + + // + // Check Market Base Conditions for Long Signals ... + bool XTAMHasLongConditions() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTAMEnableSignaller || + !mXTAMAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + (xAMAMaBuffer[1] > xTMMaBuffer[1] && + xAMAMaBuffer[2] > xTMMaBuffer[2]) + // + && + // + !(xAMAMaBuffer[2] > xTMMaBuffer[2] && + xAMAMaBuffer[3] > xTMMaBuffer[3]) + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + IsReadyForLong() + // + ) + // + ; + + // + return result; + } + + // + // Check Market Base Conditions for Short Signals ... + bool XTAMHasShortConditions() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTAMEnableSignaller || + !mXTAMAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + (xAMAMaBuffer[1] < xTMMaBuffer[1] && + xAMAMaBuffer[2] < xTMMaBuffer[2]) + // + && + // + !(xAMAMaBuffer[2] < xTMMaBuffer[2] && + xAMAMaBuffer[3] < xTMMaBuffer[3]) + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + IsReadyForShort() + // + ) + // + ; + + // + return result; + } + + // + // END XTAM Signaller ... + // + + // + // START XSI Signaller ... + // + + // + // Enable Signaller ... + bool EnableSXSIignaller() + { + // + bool result = false; + + // + // Validate Args ... + if (mXSIEnableSignaller) + { + return result; + } + + // + result = true; + mXSIEnableSignaller = true; + + // + return result; + } + + // + // Disable Signaller ... + bool DisbaleXSISignaller() + { + // + bool result = false; + + // + // Validate Args ... + if (!mXSIEnableSignaller) + { + return result; + } + + // + result = true; + mXSIEnableSignaller = false; + + // + return result; + } + + // + // Allow Sginaller to Issue Long Signals ... + bool EnableXSILongs() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXSIEnableSignaller || + mXSIAllowLongSignals) + { + return result; + } + + // + result = true; + mXSIAllowLongSignals = true; + + // + return result; + } + + // + // Disallow Signaller to Issue Long Signals ... + bool DisbaleXSILongs() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXSIEnableSignaller || + !mXSIAllowLongSignals) + { + return result; + } + + // + result = true; + mXSIAllowLongSignals = false; + + // + return result; + } + + // + // Allow Signaller to Issue Short Sginals ... + bool EnableXSIShorts() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXSIEnableSignaller || + mXSIAllowShortSignals) + { + return result; + } + + // + result = true; + mXSIAllowShortSignals = true; + + // + return result; + } + + // + // Disallow Signaller to Issue Short Signals ... + bool DisableXSIShorts() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXSIEnableSignaller || + !mXSIAllowShortSignals) + { + return result; + } + + // + result = true; + mXSIAllowShortSignals = false; + + // + return result; + } + + // + // Check Market Base Conditions for Long Signals ... + bool XSIHasLongConditions() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXSIEnableSignaller || + !mXSIAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + mXConditions.isXRSICrossedOverLongEntry && + xRSIBuffer[3] < xRSILongEntryValue + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + IsReadyForLong( + true, // XCHMA Min + true, // XCHMA Max + true, // XCHMA Cycles + true, // XCHMA Peaks + false, // XCHMA Trend Powers + true, // XOBD + true // XTS + ) + // + ) + // + ; + + // + return result; + } + + // + // Check Market Base Conditions for Short Signals ... + bool XSIHasShortConditions() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXSIEnableSignaller || + !mXSIAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + mXConditions.isXRSICrossedUnderShortEntry && + xRSIBuffer[3] > xRSIShortEntryValue + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + IsReadyForShort( + true, // XCHMA Min + true, // XCHMA Max + true, // XCHMA Cycles + true, // XCHMA Peaks + false, // XCHMA Trend Powers + true, // XOBD + true // XTS + ) + // + ) + // + ; + + // + return result; + } + + // + // END XSI Signaller ... + // + + // + // START XTSFI Signaller ... + // + + // + // Enable Signaller ... + bool EnableSXTSFIignaller() + { + // + bool result = false; + + // + // Validate Args ... + if (mXTSFIEnableSignaller) + { + return result; + } + + // + result = true; + mXTSFIEnableSignaller = true; + + // + return result; + } + + // + // Disable Signaller ... + bool DisbaleXTSFISignaller() + { + // + bool result = false; + + // + // Validate Args ... + if (!mXTSFIEnableSignaller) + { + return result; + } + + // + result = true; + mXTSFIEnableSignaller = false; + + // + return result; + } + + // + // Allow Sginaller to Issue Long Signals ... + bool EnableXTSFILongs() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTSFIEnableSignaller || + mXTSFIAllowLongSignals) + { + return result; + } + + // + result = true; + mXTSFIAllowLongSignals = true; + + // + return result; + } + + // + // Disallow Signaller to Issue Long Signals ... + bool DisbaleXTSFILongs() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTSFIEnableSignaller || + !mXTSFIAllowLongSignals) + { + return result; + } + + // + result = true; + mXTSFIAllowLongSignals = false; + + // + return result; + } + + // + // Allow Signaller to Issue Short Sginals ... + bool EnableXTSFIShorts() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTSFIEnableSignaller || + mXTSFIAllowShortSignals) + { + return result; + } + + // + result = true; + mXTSFIAllowShortSignals = true; + + // + return result; + } + + // + // Disallow Signaller to Issue Short Signals ... + bool DisableXTSFIShorts() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTSFIEnableSignaller || + !mXTSFIAllowShortSignals) + { + return result; + } + + // + result = true; + mXTSFIAllowShortSignals = false; + + // + return result; + } + + // + // Check Market Base Conditions for Long Signals ... + bool XTSFIHasLongConditions() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTSFIEnableSignaller || + !mXTSFIAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + XTSGetMinValue(1) == xTSFarestBuffer[1] && + (mXConditions.isXTSCurrentOverFarest || + mXConditions.isXTSCurrentCrossedOverFarest) && + (xTSCurrentBuffer[1] < xTSNearestBuffer[1] || + xTSCurrentBuffer[1] < xTSMediestBuffer[1]) && + !(mXConditions.isXTSCurrentUnderNearest || + mXConditions.isXTSCurrentCrossedUnderNearest) + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + IsReadyForLong() + // + ) + // + ; + + // + return result; + } + + // + // Check Market Base Conditions for Short Signals ... + bool XTSFIHasShortConditions() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXTSFIEnableSignaller || + !mXTSFIAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + XTSGetMaxValue(1) == xTSFarestBuffer[1] && + (mXConditions.isXTSCurrentUnderFarest || + mXConditions.isXTSCurrentCrossedUnderFarest) && + (xTSCurrentBuffer[1] > xTSNearestBuffer[1] || + xTSCurrentBuffer[1] > xTSMediestBuffer[1]) && + !(mXConditions.isXTSCurrentOverNearest || + mXConditions.isXTSCurrentCrossedOverNearest) + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + IsReadyForShort() + // + ) + // + ; + + // + return result; + } + + // + // END XTSFI Signaller ... + // + + // + // START XOBDLH Signaller ... + // + + // + // Enable Signaller ... + bool EnableSXOBDLHignaller() + { + // + bool result = false; + + // + // Validate Args ... + if (mXOBDLHEnableSignaller) + { + return result; + } + + // + result = true; + mXOBDLHEnableSignaller = true; + + // + return result; + } + + // + // Disable Signaller ... + bool DisbaleXOBDLHSignaller() + { + // + bool result = false; + + // + // Validate Args ... + if (!mXOBDLHEnableSignaller) + { + return result; + } + + // + result = true; + mXOBDLHEnableSignaller = false; + + // + return result; + } + + // + // Allow Sginaller to Issue Long Signals ... + bool EnableXOBDLHLongs() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXOBDLHEnableSignaller || + mXOBDLHAllowLongSignals) + { + return result; + } + + // + result = true; + mXOBDLHAllowLongSignals = true; + + // + return result; + } + + // + // Disallow Signaller to Issue Long Signals ... + bool DisbaleXOBDLHLongs() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXOBDLHEnableSignaller || + !mXOBDLHAllowLongSignals) + { + return result; + } + + // + result = true; + mXOBDLHAllowLongSignals = false; + + // + return result; + } + + // + // Allow Signaller to Issue Short Sginals ... + bool EnableXOBDLHShorts() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXOBDLHEnableSignaller || + mXOBDLHAllowShortSignals) + { + return result; + } + + // + result = true; + mXOBDLHAllowShortSignals = true; + + // + return result; + } + + // + // Disallow Signaller to Issue Short Signals ... + bool DisableXOBDLHShorts() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXOBDLHEnableSignaller || + !mXOBDLHAllowShortSignals) + { + return result; + } + + // + result = true; + mXOBDLHAllowShortSignals = false; + + // + return result; + } + + // + // Check Market Base Conditions for Long Signals ... + bool XOBDLHHasLongConditions() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXOBDLHEnableSignaller || + !mXOBDLHAllowLongSignals) + { + return result; + } + + // + XMarketConditions xConditions2 = GenerateMarketConditions(2); + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + xConditions2.isXOBDSwingLow && + xConditions2.isXLHLowAttachedLL && + xLHLLBuffer[1] >= xLHLLBuffer[2] + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + IsReadyForLong( + true, // XCHMA Min + true, // XCHMA Max + false, // XCHMA Cycles + false, // XCHMA Peaks + false, // XCHMA Trend Powers + false, // XOBD + false // XTS + ) + // + ) + // + ; + + // + return result; + } + + // + // Check Market Base Conditions for Short Signals ... + bool XOBDLHHasShortConditions() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXOBDLHEnableSignaller || + !mXOBDLHAllowShortSignals) + { + return result; + } + + // + XMarketConditions xConditions2 = GenerateMarketConditions(2); + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + xConditions2.isXOBDSwingHigh && + xConditions2.isXLHHighAttachedHH && + xLHHHBuffer[1] <= xLHHHBuffer[2] + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + IsReadyForShort( + true, // XCHMA Min + true, // XCHMA Max + false, // XCHMA Cycles + false, // XCHMA Peaks + false, // XCHMA Trend Powers + false, // XOBD + false // XTS + ) + // + ) + // + ; + + // + return result; + } + + // + // END XOBDLH Signaller ... + // + + // + // START XCHMACC Signaller ... + // + + // + // Enable Signaller ... + bool EnableSXCHMACCignaller() + { + // + bool result = false; + + // + // Validate Args ... + if (mXCHMACCEnableSignaller) + { + return result; + } + + // + result = true; + mXCHMACCEnableSignaller = true; + + // + return result; + } + + // + // Disable Signaller ... + bool DisbaleXCHMACCSignaller() + { + // + bool result = false; + + // + // Validate Args ... + if (!mXCHMACCEnableSignaller) + { + return result; + } + + // + result = true; + mXCHMACCEnableSignaller = false; + + // + return result; + } + + // + // Allow Sginaller to Issue Long Signals ... + bool EnableXCHMACCLongs() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMACCEnableSignaller || + mXCHMACCAllowLongSignals) + { + return result; + } + + // + result = true; + mXCHMACCAllowLongSignals = true; + + // + return result; + } + + // + // Disallow Signaller to Issue Long Signals ... + bool DisbaleXCHMACCLongs() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMACCEnableSignaller || + !mXCHMACCAllowLongSignals) + { + return result; + } + + // + result = true; + mXCHMACCAllowLongSignals = false; + + // + return result; + } + + // + // Allow Signaller to Issue Short Sginals ... + bool EnableXCHMACCShorts() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMACCEnableSignaller || + mXCHMACCAllowShortSignals) + { + return result; + } + + // + result = true; + mXCHMACCAllowShortSignals = true; + + // + return result; + } + + // + // Disallow Signaller to Issue Short Signals ... + bool DisableXCHMACCShorts() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMACCEnableSignaller || + !mXCHMACCAllowShortSignals) + { + return result; + } + + // + result = true; + mXCHMACCAllowShortSignals = false; + + // + return result; + } + + // + // Check Market Base Conditions for Long Signals ... + bool XCHMACCHasLongConditions() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMACCEnableSignaller || + !mXCHMACCAllowLongSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + xCHMAScFastBuffer[1] > xCHMAScSlowBuffer[1] && + xCHMAMcFastBuffer[1] > xCHMAMcSlowBuffer[1] && + xCHMALcFastBuffer[1] > xCHMALcSlowBuffer[1] && + // + xCHMAScFastBuffer[2] > xCHMAScSlowBuffer[2] && + xCHMAMcFastBuffer[2] > xCHMAMcSlowBuffer[2] && + xCHMALcFastBuffer[2] > xCHMALcSlowBuffer[2] && + // + !( + // + xCHMAScFastBuffer[3] > xCHMAScSlowBuffer[3] && + xCHMAMcFastBuffer[3] > xCHMAMcSlowBuffer[3] && + xCHMALcFastBuffer[3] > xCHMALcSlowBuffer[3] + // + ) + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + IsReadyForLong() + // + ) + // + ; + + // + return result; + } + + // + // Check Market Base Conditions for Short Signals ... + bool XCHMACCHasShortConditions() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMACCEnableSignaller || + !mXCHMACCAllowShortSignals) + { + return result; + } + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + xCHMAScFastBuffer[1] < xCHMAScSlowBuffer[1] && + xCHMAMcFastBuffer[1] < xCHMAMcSlowBuffer[1] && + xCHMALcFastBuffer[1] < xCHMALcSlowBuffer[1] && + // + xCHMAScFastBuffer[2] < xCHMAScSlowBuffer[2] && + xCHMAMcFastBuffer[2] < xCHMAMcSlowBuffer[2] && + xCHMALcFastBuffer[2] < xCHMALcSlowBuffer[2] && + // + !( + // + xCHMAScFastBuffer[3] < xCHMAScSlowBuffer[3] && + xCHMAMcFastBuffer[3] < xCHMAMcSlowBuffer[3] && + xCHMALcFastBuffer[3] < xCHMALcSlowBuffer[3] + // + ) + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + IsReadyForShort() + // + ) + // + ; + + // + return result; + } + + // + // END XCHMACC Signaller ... + // + + // + // START XCHMAMX Signaller ... + // + + // + // Enable Signaller ... + bool EnableSXCHMAMXignaller() + { + // + bool result = false; + + // + // Validate Args ... + if (mXCHMAMXEnableSignaller) + { + return result; + } + + // + result = true; + mXCHMAMXEnableSignaller = true; + + // + return result; + } + + // + // Disable Signaller ... + bool DisbaleXCHMAMXSignaller() + { + // + bool result = false; + + // + // Validate Args ... + if (!mXCHMAMXEnableSignaller) + { + return result; + } + + // + result = true; + mXCHMAMXEnableSignaller = false; + + // + return result; + } + + // + // Allow Sginaller to Issue Long Signals ... + bool EnableXCHMAMXLongs() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMAMXEnableSignaller || + mXCHMAMXAllowLongSignals) + { + return result; + } + + // + result = true; + mXCHMAMXAllowLongSignals = true; + + // + return result; + } + + // + // Disallow Signaller to Issue Long Signals ... + bool DisbaleXCHMAMXLongs() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMAMXEnableSignaller || + !mXCHMAMXAllowLongSignals) + { + return result; + } + + // + result = true; + mXCHMAMXAllowLongSignals = false; + + // + return result; + } + + // + // Allow Signaller to Issue Short Sginals ... + bool EnableXCHMAMXShorts() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMAMXEnableSignaller || + mXCHMAMXAllowShortSignals) + { + return result; + } + + // + result = true; + mXCHMAMXAllowShortSignals = true; + + // + return result; + } + + // + // Disallow Signaller to Issue Short Signals ... + bool DisableXCHMAMXShorts() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMAMXEnableSignaller || + !mXCHMAMXAllowShortSignals) + { + return result; + } + + // + result = true; + mXCHMAMXAllowShortSignals = false; + + // + return result; + } + + // + // Check Market Base Conditions for Long Signals ... + bool XCHMAMXHasLongConditions() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMAMXEnableSignaller || + !mXCHMAMXAllowLongSignals) + { + return result; + } + + // + ENUM_XCHMA_CYCLES cycles[]; + Add( + X_XCHMA_CYCLE_MEDIUM, + cycles); + Add( + X_XCHMA_CYCLE_LONG, + cycles); + + // + double xCHMANonSCMax2 = XCHMAGetCyclesMaxValue(2, cycles); + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + mXConditions.isXCHMASCCrossedOverMax && + xCHMAScFastBuffer[2] < xCHMANonSCMax2 && + xCHMAScSlowBuffer[2] < xCHMANonSCMax2 && + MathAbs(xCHMANonSCMax2 - xCHMAScFastBuffer[2]) > MathAbs(xCHMAScFastBuffer[2] - xCHMAScSlowBuffer[2]) && + MathAbs(xCHMANonSCMax2 - xCHMAScSlowBuffer[2]) > MathAbs(xCHMAScFastBuffer[2] - xCHMAScSlowBuffer[2]) + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + IsReadyForLong( + true, // XCHMA Min + true, // XCHMA Max + false, // XCHMA Cycles + false, // XCHMA Peaks + false, // XCHMA Trend Powers + true, // XOBD + true // XTS + ) + // + ) + // + ; + + // + return result; + } + + // + // Check Market Base Conditions for Short Signals ... + bool XCHMAMXHasShortConditions() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMAMXEnableSignaller || + !mXCHMAMXAllowShortSignals) + { + return result; + } + + // + ENUM_XCHMA_CYCLES cycles[]; + Add( + X_XCHMA_CYCLE_MEDIUM, + cycles); + Add( + X_XCHMA_CYCLE_LONG, + cycles); + + // + double xCHMANonSCMax2 = XCHMAGetCyclesMaxValue(2, cycles); + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + mXConditions.isXCHMASCCrossedUnderMax && + xCHMAScFastBuffer[2] > xCHMANonSCMax2 && + xCHMAScSlowBuffer[2] > xCHMANonSCMax2 + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + IsReadyForShort( + true, // XCHMA Min + true, // XCHMA Max + false, // XCHMA Cycles + false, // XCHMA Peaks + false, // XCHMA Trend Powers + true, // XOBD + true // XTS + ) + // + ) + // + ; + // + return result; + } + + // + // END XCHMAMX Signaller ... + // + + // + // START XCHMAMN Signaller ... + // + + // + // Enable Signaller ... + bool EnableSXCHMAMNignaller() + { + // + bool result = false; + + // + // Validate Args ... + if (mXCHMAMNEnableSignaller) + { + return result; + } + + // + result = true; + mXCHMAMNEnableSignaller = true; + + // + return result; + } + + // + // Disable Signaller ... + bool DisbaleXCHMAMNSignaller() + { + // + bool result = false; + + // + // Validate Args ... + if (!mXCHMAMNEnableSignaller) + { + return result; + } + + // + result = true; + mXCHMAMNEnableSignaller = false; + + // + return result; + } + + // + // Allow Sginaller to Issue Long Signals ... + bool EnableXCHMAMNLongs() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMAMNEnableSignaller || + mXCHMAMNAllowLongSignals) + { + return result; + } + + // + result = true; + mXCHMAMNAllowLongSignals = true; + + // + return result; + } + + // + // Disallow Signaller to Issue Long Signals ... + bool DisbaleXCHMAMNLongs() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMAMNEnableSignaller || + !mXCHMAMNAllowLongSignals) + { + return result; + } + + // + result = true; + mXCHMAMNAllowLongSignals = false; + + // + return result; + } + + // + // Allow Signaller to Issue Short Sginals ... + bool EnableXCHMAMNShorts() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMAMNEnableSignaller || + mXCHMAMNAllowShortSignals) + { + return result; + } + + // + result = true; + mXCHMAMNAllowShortSignals = true; + + // + return result; + } + + // + // Disallow Signaller to Issue Short Signals ... + bool DisableXCHMAMNShorts() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMAMNEnableSignaller || + !mXCHMAMNAllowShortSignals) + { + return result; + } + + // + result = true; + mXCHMAMNAllowShortSignals = false; + + // + return result; + } + + // + // Check Market Base Conditions for Long Signals ... + bool XCHMAMNHasLongConditions() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMAMNEnableSignaller || + !mXCHMAMNAllowLongSignals) + { + return result; + } + + // + ENUM_XCHMA_CYCLES cycles[]; + Add( + X_XCHMA_CYCLE_MEDIUM, + cycles); + Add( + X_XCHMA_CYCLE_LONG, + cycles); + + // + double xCHMANonSCMin2 = XCHMAGetCyclesMinValue(2, cycles); + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + mXConditions.isXCHMASCCrossedOverMin && + xCHMAScFastBuffer[2] < xCHMANonSCMin2 && + xCHMAScSlowBuffer[2] < xCHMANonSCMin2 + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + IsReadyForLong( + true, // XCHMA Min + true, // XCHMA Max + false, // XCHMA Cycles + false, // XCHMA Peaks + false, // XCHMA Trend Powers + true, // XOBD + true // XTS + ) + // + ) + // + ; + + // + return result; + } + + // + // Check Market Base Conditions for Short Signals ... + bool XCHMAMNHasShortConditions() + { + // + bool result = false; + + // + // Validate Args ... + if ( + !mXCHMAMNEnableSignaller || + !mXCHMAMNAllowShortSignals) + { + return result; + } + + // + ENUM_XCHMA_CYCLES cycles[]; + Add( + X_XCHMA_CYCLE_MEDIUM, + cycles); + Add( + X_XCHMA_CYCLE_LONG, + cycles); + + // + double xCHMANonSCMin2 = XCHMAGetCyclesMinValue(2, cycles); + + // + // Start Analysing Market based On Conditions ... + result = + // + // Base Condition: + // each Strategy must has a Base Conditions, which they are usually common combinations + // of Market Properties that must be happens to lookup for signals ... + ( + // + mXConditions.isXCHMASCCrossedUnderMin && + xCHMAScFastBuffer[2] > xCHMANonSCMin2 && + xCHMAScSlowBuffer[2] > xCHMANonSCMin2 + // + ) + // + && + // + // Next Step is combine sorts of Conditions which make our choice + // so Exact in Market ... + ( + // + IsReadyForLong( + true, // XCHMA Min + true, // XCHMA Max + false, // XCHMA Cycles + false, // XCHMA Peaks + false, // XCHMA Trend Powers + true, // XOBD + true // XTS + ) + // + ) + // + ; + // + return result; + } + + // + // END XCHMAMN Signaller ... + // + + // + // END Actions Based On Signallers ... + // + + // + // Protected ... +protected: + // + // Private ... +private: + // + // XTD ... + bool mXTDEnableSignaller; + bool mXTDAllowLongSignals; + bool mXTDAllowShortSignals; + + // + // XTAM ... + bool mXTAMEnableSignaller; + bool mXTAMAllowLongSignals; + bool mXTAMAllowShortSignals; + + // + // XSI ... + bool mXSIEnableSignaller; + bool mXSIAllowLongSignals; + bool mXSIAllowShortSignals; + + // + // XTSFI ... + bool mXTSFIEnableSignaller; + bool mXTSFIAllowLongSignals; + bool mXTSFIAllowShortSignals; + + // + // XOBDLH ... + bool mXOBDLHEnableSignaller; + bool mXOBDLHAllowLongSignals; + bool mXOBDLHAllowShortSignals; + + // + // XCHMACC ... + bool mXCHMACCEnableSignaller; + bool mXCHMACCAllowLongSignals; + bool mXCHMACCAllowShortSignals; + + // + // XCHMAMX ... + bool mXCHMAMXEnableSignaller; + bool mXCHMAMXAllowLongSignals; + bool mXCHMAMXAllowShortSignals; + + // + // XCHMAMN ... + bool mXCHMAMNEnableSignaller; + bool mXCHMAMNAllowLongSignals; + bool mXCHMAMNAllowShortSignals; + + // + // Here we Define some Global Market Variables to Analyse MArket Conditions + // using them at each time ... + XMarketConditions mXConditions; +}; \ No newline at end of file diff --git a/BKPS/XAU5-0.43/Experts/x-saherelm.xeu5.ea.ex5 b/BKPS/XAU5-0.43/Experts/x-saherelm.xeu5.ea.ex5 new file mode 100644 index 0000000000000000000000000000000000000000..7b5a420b34d9112e7b6a1f905c1a76fe6b012683 GIT binary patch literal 468098 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�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

cdT%n@bzEXAX6l~*-OnuWMd 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


yA}-JC9ORKoM?|{>eX(H7Z8u{|lcb@L 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