From 3f75a0884897707ef673c0ee28eb83f2b286e91e Mon Sep 17 00:00:00 2001 From: zhutoutoutousan Date: Wed, 27 May 2026 14:59:00 +0200 Subject: [PATCH] Update --- .../RSIConsolidation.mq5 | 0 .../RSIConsolidation_optimization.set | 0 .../archive}/RSIScalpingXAUUSD/main.mq5 | 0 .../archive/RSIScalpingXAUUSD}/report.html | Bin .../archive/RSIScalpingXAUUSD}/report.png | Bin .../archive}/SuperEMAXAUUSD/SuperEMA.set | 0 .../archive}/SuperEMAXAUUSD/main.mq5 | 0 backtesting/MT5/test_setup.py | 49 +- .../DarvasBoxXAUUSD_Genetic_Optimization.set | 27 - .../cluster-fuck/DarvasBoxXAUUSD/main.mq5 | 443 ----- .../main.mq5 | 628 ------- .../report.html | Bin 1883870 -> 0 bytes .../report.png | Bin 30183 -> 0 bytes .../RSICrossOverReversalXAUUSD/main.mq5 | 295 --- .../RSIMidPointHijackXAUUSD/main.mq5 | 604 ------- .../RSIMidPointHijackXAUUSD/report.html | Bin 5214578 -> 0 bytes .../RSIMidPointHijackXAUUSD/report.png | Bin 29812 -> 0 bytes .../RSIReversalAsianEURUSD/main.mq5 | 539 ------ .../RSIReversalAsianEURUSD/test-balance.jpg | Bin 256188 -> 0 bytes .../RSIScalpingBTCUSD-trailing/main.mq5 | 581 ------ .../RSIScalpingBTCUSD-trailing/report.html | Bin 962604 -> 0 bytes .../RSIScalpingBTCUSD-trailing/report.png | Bin 8384 -> 0 bytes .../RSIScalpingXAUUSD-trailing/123.set | 34 - .../RSIScalpingXAUUSD-trailing/main.mq5 | 645 ------- .../RSI_secret_sauce_XAUUSD/main.mq5 | 508 ------ .../SimpleTrendlineBTCUSD/SimpleTrendline.mq5 | 284 --- .../SimpleTrendline_optimization.set | 14 - .../SimpleTrendlineGER40/SimpleTrendline.mq5 | 284 --- .../SimpleTrendline_optimization.set | 14 - .../SimpleTrendlineXAUUSD/SimpleTrendline.mq5 | 376 ---- .../SimpleTrendline_optimization.set | 14 - frontline/cluster-gold/MagicNumberHelpers.mqh | 173 -- .../cluster-gold/STRATEGY_CONFIGURATION.md | 76 - .../Strategies/DarvasBoxStrategy.mqh | 328 ---- .../Strategies/EMASlopeDistanceStrategy.mqh | 576 ------ .../Strategies/RSIConsolidationStrategy.mqh | 387 ---- .../RSICrossOverReversalStrategy.mqh | 269 --- .../Strategies/RSIMidPointHijackStrategy.mqh | 492 ----- .../Strategies/RSIReversalAsianStrategy.mqh | 488 ----- .../Strategies/RSIScalpingStrategy.mqh | 615 ------- .../Strategies/RSISecretSauceStrategy.mqh | 336 ---- .../Strategies/SimpleTrendlineStrategy.mqh | 318 ---- .../Strategies/SuperEMAStrategy.mqh | 509 ------ frontline/cluster-gold/main.mq5 | 904 ---------- frontline/cluster-gold/report.png | Bin 29959 -> 0 bytes frontline/cluster-gold/self-evaluate.mq5 | 613 ------- .../MagicNumberHelpers.mqh | 0 .../RSIScalpingMU}/main.mq5 | 159 +- .../RSIScalpingMU/optimization.set | Bin 0 -> 1820 bytes .../RSIScalpingMU}/report.html | Bin .../RSIScalpingMU}/report.png | Bin .../STRATEGY_CONFIGURATION.md | 0 .../Strategies/DarvasBoxStrategy.mqh | 0 .../Strategies/EMASlopeDistanceStrategy.mqh | 0 .../Strategies/RSIConsolidationStrategy.mqh | 0 .../RSICrossOverReversalStrategy.mqh | 0 .../Strategies/RSIMidPointHijackStrategy.mqh | 0 .../Strategies/RSIReversalAsianStrategy.mqh | 0 .../Strategies/RSIScalpingStrategy.mqh | 0 .../Strategies/RSISecretSauceStrategy.mqh | 0 .../Strategies/SimpleTrendlineStrategy.mqh | 0 .../Strategies/SuperEMAStrategy.mqh | 0 .../_united-V2 => cluster-latest}/main.mq5 | 100 +- .../_united-V2 => cluster-latest}/report.png | Bin .../self-evaluate.mq5 | 0 frontline/united_template/v2-300U.set | Bin 0 -> 35352 bytes frontline/united_template/v2-reserved.set | Bin 0 -> 35354 bytes .../NVDA_Genetic_Optimization.set | 10 + .../NVDA_Genetic_Optimization_Alternative.set | 10 + .../OPTIMIZATION_GUIDE.md | 0 .../RSIScalpingNVDA-trailing-V2}/main.mq5 | 39 +- ...nceCocktailXAUUSD_Genetic_Optimization.set | 35 + .../EMASlopeDistanceCocktailXAUUSD/main.mq5 | 20 +- .../RSIConsolidation.mq5 | 347 ---- .../RSIConsolidation_optimization.set | 37 - ...verReversalXAUUSD_Genetic_Optimization.set | 38 + ...PointHijackXAUUSD_Genetic_Optimization.set | 50 + ...versalAsianAUDUSD_Genetic_Optimization.set | 23 + ...versalAsianAUDUSD_Genetic_Optimization.set | 23 + .../RSIReversalAsianGBPUSD}/main.mq5 | 20 +- .../RSIReversalAsianGBPUSD}/test-balance.png | Bin frontline/units/RSIScalpingMU/main.mq5 | 327 ++++ .../units/RSIScalpingMU/optimization.set | Bin 0 -> 1820 bytes frontline/units/RSIScalpingMU/report.html | Bin 0 -> 2231020 bytes frontline/units/RSIScalpingMU/report.png | Bin 0 -> 8829 bytes frontline/units/RSIScalpingNVDA/main.mq5 | 20 +- frontline/units/RSIScalpingTSLA/main.mq5 | 18 +- frontline/units/RSIScalpingXAUUSD/report.html | Bin 5649556 -> 0 bytes frontline/units/RSIScalpingXAUUSD/report.png | Bin 8629 -> 0 bytes frontline/units/SuperEMAXAUUSD/SuperEMA.set | 36 - frontline/units/SuperEMAXAUUSD/main.mq5 | 448 ----- ...andleChartPattern_Genetic_Optimization.set | 26 + lab/EAs/CandleChartPattern/main.mq5 | 332 ++++ lab/EAs/Derivative.mq5 | 1582 +++++++++++++++++ lab/EAs/DerivativePlots.mq5 | 425 +++++ lab/EAs/TFXNZDUSD.mq5 | 383 ++++ lab/EAs/TFXNZDUSD_Genetic_Optimization.set | 42 + lab/EAs/TFXXAUUSDScalper.mq5 | 367 ++++ .../TFXXAUUSDScalper_Genetic_Optimization.set | 44 + .../READY_EMACrossOverXAUUSD.mq5 | 458 +++++ ...MACrossOverXAUUSD_Genetic_Optimization.set | 55 + self-coding-agent/README.md | 79 + .../__pycache__/main.cpython-312.pyc | Bin 0 -> 789 bytes self-coding-agent/agent/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 161 bytes .../agent/__pycache__/config.cpython-312.pyc | Bin 0 -> 2379 bytes .../agent/__pycache__/loop.cpython-312.pyc | Bin 0 -> 9664 bytes .../agent/__pycache__/memory.cpython-312.pyc | Bin 0 -> 4519 bytes .../__pycache__/ollama_client.cpython-312.pyc | Bin 0 -> 1597 bytes .../agent/__pycache__/tools.cpython-312.pyc | Bin 0 -> 13322 bytes self-coding-agent/agent/config.py | 42 + self-coding-agent/agent/loop.py | 210 +++ self-coding-agent/agent/memory.py | 83 + self-coding-agent/agent/ollama_client.py | 32 + self-coding-agent/agent/tools.py | 201 +++ self-coding-agent/config.example.yaml | 51 + self-coding-agent/generated/README.txt | 2 + self-coding-agent/main.py | 61 + self-coding-agent/requirements.txt | 2 + self-coding-agent/state/.gitignore | 2 + .../__pycache__/test_smoke.cpython-312.pyc | Bin 0 -> 3435 bytes self-coding-agent/tests/test_smoke.py | 56 + 122 files changed, 5259 insertions(+), 12459 deletions(-) rename {frontline/cluster-fuck => back-pedal/archive}/RSIConsolidationXAUUSD/RSIConsolidation.mq5 (100%) rename {frontline/cluster-fuck => back-pedal/archive}/RSIConsolidationXAUUSD/RSIConsolidation_optimization.set (100%) rename {frontline/units => back-pedal/archive}/RSIScalpingXAUUSD/main.mq5 (100%) rename {frontline/cluster-fuck/RSIScalpingXAUUSD-trailing => back-pedal/archive/RSIScalpingXAUUSD}/report.html (100%) rename {frontline/cluster-fuck/RSIScalpingXAUUSD-trailing => back-pedal/archive/RSIScalpingXAUUSD}/report.png (100%) rename {frontline/cluster-fuck => back-pedal/archive}/SuperEMAXAUUSD/SuperEMA.set (100%) rename {frontline/cluster-fuck => back-pedal/archive}/SuperEMAXAUUSD/main.mq5 (100%) delete mode 100644 frontline/cluster-fuck/DarvasBoxXAUUSD/DarvasBoxXAUUSD_Genetic_Optimization.set delete mode 100644 frontline/cluster-fuck/DarvasBoxXAUUSD/main.mq5 delete mode 100644 frontline/cluster-fuck/EMASlopeDistanceCocktailXAUUSD-trailing/main.mq5 delete mode 100644 frontline/cluster-fuck/EMASlopeDistanceCocktailXAUUSD-trailing/report.html delete mode 100644 frontline/cluster-fuck/EMASlopeDistanceCocktailXAUUSD-trailing/report.png delete mode 100644 frontline/cluster-fuck/RSICrossOverReversalXAUUSD/main.mq5 delete mode 100644 frontline/cluster-fuck/RSIMidPointHijackXAUUSD/main.mq5 delete mode 100644 frontline/cluster-fuck/RSIMidPointHijackXAUUSD/report.html delete mode 100644 frontline/cluster-fuck/RSIMidPointHijackXAUUSD/report.png delete mode 100644 frontline/cluster-fuck/RSIReversalAsianEURUSD/main.mq5 delete mode 100644 frontline/cluster-fuck/RSIReversalAsianEURUSD/test-balance.jpg delete mode 100644 frontline/cluster-fuck/RSIScalpingBTCUSD-trailing/main.mq5 delete mode 100644 frontline/cluster-fuck/RSIScalpingBTCUSD-trailing/report.html delete mode 100644 frontline/cluster-fuck/RSIScalpingBTCUSD-trailing/report.png delete mode 100644 frontline/cluster-fuck/RSIScalpingXAUUSD-trailing/123.set delete mode 100644 frontline/cluster-fuck/RSIScalpingXAUUSD-trailing/main.mq5 delete mode 100644 frontline/cluster-fuck/RSI_secret_sauce_XAUUSD/main.mq5 delete mode 100644 frontline/cluster-fuck/SimpleTrendlineBTCUSD/SimpleTrendline.mq5 delete mode 100644 frontline/cluster-fuck/SimpleTrendlineBTCUSD/SimpleTrendline_optimization.set delete mode 100644 frontline/cluster-fuck/SimpleTrendlineGER40/SimpleTrendline.mq5 delete mode 100644 frontline/cluster-fuck/SimpleTrendlineGER40/SimpleTrendline_optimization.set delete mode 100644 frontline/cluster-fuck/SimpleTrendlineXAUUSD/SimpleTrendline.mq5 delete mode 100644 frontline/cluster-fuck/SimpleTrendlineXAUUSD/SimpleTrendline_optimization.set delete mode 100644 frontline/cluster-gold/MagicNumberHelpers.mqh delete mode 100644 frontline/cluster-gold/STRATEGY_CONFIGURATION.md delete mode 100644 frontline/cluster-gold/Strategies/DarvasBoxStrategy.mqh delete mode 100644 frontline/cluster-gold/Strategies/EMASlopeDistanceStrategy.mqh delete mode 100644 frontline/cluster-gold/Strategies/RSIConsolidationStrategy.mqh delete mode 100644 frontline/cluster-gold/Strategies/RSICrossOverReversalStrategy.mqh delete mode 100644 frontline/cluster-gold/Strategies/RSIMidPointHijackStrategy.mqh delete mode 100644 frontline/cluster-gold/Strategies/RSIReversalAsianStrategy.mqh delete mode 100644 frontline/cluster-gold/Strategies/RSIScalpingStrategy.mqh delete mode 100644 frontline/cluster-gold/Strategies/RSISecretSauceStrategy.mqh delete mode 100644 frontline/cluster-gold/Strategies/SimpleTrendlineStrategy.mqh delete mode 100644 frontline/cluster-gold/Strategies/SuperEMAStrategy.mqh delete mode 100644 frontline/cluster-gold/main.mq5 delete mode 100644 frontline/cluster-gold/report.png delete mode 100644 frontline/cluster-gold/self-evaluate.mq5 rename frontline/{cluster-fuck/_united-V2 => cluster-latest}/MagicNumberHelpers.mqh (100%) rename frontline/{cluster-fuck/RSIScalpingTSLA-trailing => cluster-latest/RSIScalpingMU}/main.mq5 (67%) create mode 100644 frontline/cluster-latest/RSIScalpingMU/optimization.set rename frontline/{cluster-fuck/RSIScalpingTSLA-trailing => cluster-latest/RSIScalpingMU}/report.html (100%) rename frontline/{cluster-fuck/RSIScalpingTSLA-trailing => cluster-latest/RSIScalpingMU}/report.png (100%) rename frontline/{cluster-fuck/_united-V2 => cluster-latest}/STRATEGY_CONFIGURATION.md (100%) rename frontline/{cluster-fuck/_united-V2 => cluster-latest}/Strategies/DarvasBoxStrategy.mqh (100%) rename frontline/{cluster-fuck/_united-V2 => cluster-latest}/Strategies/EMASlopeDistanceStrategy.mqh (100%) rename frontline/{cluster-fuck/_united-V2 => cluster-latest}/Strategies/RSIConsolidationStrategy.mqh (100%) rename frontline/{cluster-fuck/_united-V2 => cluster-latest}/Strategies/RSICrossOverReversalStrategy.mqh (100%) rename frontline/{cluster-fuck/_united-V2 => cluster-latest}/Strategies/RSIMidPointHijackStrategy.mqh (100%) rename frontline/{cluster-fuck/_united-V2 => cluster-latest}/Strategies/RSIReversalAsianStrategy.mqh (100%) rename frontline/{cluster-fuck/_united-V2 => cluster-latest}/Strategies/RSIScalpingStrategy.mqh (100%) rename frontline/{cluster-fuck/_united-V2 => cluster-latest}/Strategies/RSISecretSauceStrategy.mqh (100%) rename frontline/{cluster-fuck/_united-V2 => cluster-latest}/Strategies/SimpleTrendlineStrategy.mqh (100%) rename frontline/{cluster-fuck/_united-V2 => cluster-latest}/Strategies/SuperEMAStrategy.mqh (100%) rename frontline/{cluster-fuck/_united-V2 => cluster-latest}/main.mq5 (93%) rename frontline/{cluster-fuck/_united-V2 => cluster-latest}/report.png (100%) rename frontline/{cluster-fuck/_united-V2 => cluster-latest}/self-evaluate.mq5 (100%) create mode 100644 frontline/united_template/v2-300U.set create mode 100644 frontline/united_template/v2-reserved.set rename frontline/{cluster-fuck/RSIScalpingNVDA-trailing => units-trailing/RSIScalpingNVDA-trailing-V2}/NVDA_Genetic_Optimization.set (74%) rename frontline/{cluster-fuck/RSIScalpingNVDA-trailing => units-trailing/RSIScalpingNVDA-trailing-V2}/NVDA_Genetic_Optimization_Alternative.set (67%) rename frontline/{cluster-fuck/RSIScalpingNVDA-trailing => units-trailing/RSIScalpingNVDA-trailing-V2}/OPTIMIZATION_GUIDE.md (100%) rename frontline/{cluster-fuck/RSIScalpingNVDA-trailing => units-trailing/RSIScalpingNVDA-trailing-V2}/main.mq5 (90%) create mode 100644 frontline/units/EMASlopeDistanceCocktailXAUUSD/EMASlopeDistanceCocktailXAUUSD_Genetic_Optimization.set delete mode 100644 frontline/units/RSIConsolidationXAUUSD/RSIConsolidation.mq5 delete mode 100644 frontline/units/RSIConsolidationXAUUSD/RSIConsolidation_optimization.set create mode 100644 frontline/units/RSICrossOverReversalXAUUSD/RSICrossOverReversalXAUUSD_Genetic_Optimization.set create mode 100644 frontline/units/RSIMidPointHijackXAUUSD/RSIMidPointHijackXAUUSD_Genetic_Optimization.set create mode 100644 frontline/units/RSIReversalAsianAUDUSD/RSIReversalAsianAUDUSD_Genetic_Optimization.set create mode 100644 frontline/units/RSIReversalAsianGBPUSD/RSIReversalAsianAUDUSD_Genetic_Optimization.set rename frontline/{cluster-fuck/RSIReversalAsianAUDUSD => units/RSIReversalAsianGBPUSD}/main.mq5 (96%) rename frontline/{cluster-fuck/RSIReversalAsianAUDUSD => units/RSIReversalAsianGBPUSD}/test-balance.png (100%) create mode 100644 frontline/units/RSIScalpingMU/main.mq5 create mode 100644 frontline/units/RSIScalpingMU/optimization.set create mode 100644 frontline/units/RSIScalpingMU/report.html create mode 100644 frontline/units/RSIScalpingMU/report.png delete mode 100644 frontline/units/RSIScalpingXAUUSD/report.html delete mode 100644 frontline/units/RSIScalpingXAUUSD/report.png delete mode 100644 frontline/units/SuperEMAXAUUSD/SuperEMA.set delete mode 100644 frontline/units/SuperEMAXAUUSD/main.mq5 create mode 100644 lab/EAs/CandleChartPattern/CandleChartPattern_Genetic_Optimization.set create mode 100644 lab/EAs/CandleChartPattern/main.mq5 create mode 100644 lab/EAs/Derivative.mq5 create mode 100644 lab/EAs/DerivativePlots.mq5 create mode 100644 lab/EAs/TFXNZDUSD.mq5 create mode 100644 lab/EAs/TFXNZDUSD_Genetic_Optimization.set create mode 100644 lab/EAs/TFXXAUUSDScalper.mq5 create mode 100644 lab/EAs/TFXXAUUSDScalper_Genetic_Optimization.set create mode 100644 lab/ematerminator/READY_EMACrossOverXAUUSD.mq5 create mode 100644 lab/ematerminator/READY_EMACrossOverXAUUSD_Genetic_Optimization.set create mode 100644 self-coding-agent/README.md create mode 100644 self-coding-agent/__pycache__/main.cpython-312.pyc create mode 100644 self-coding-agent/agent/__init__.py create mode 100644 self-coding-agent/agent/__pycache__/__init__.cpython-312.pyc create mode 100644 self-coding-agent/agent/__pycache__/config.cpython-312.pyc create mode 100644 self-coding-agent/agent/__pycache__/loop.cpython-312.pyc create mode 100644 self-coding-agent/agent/__pycache__/memory.cpython-312.pyc create mode 100644 self-coding-agent/agent/__pycache__/ollama_client.cpython-312.pyc create mode 100644 self-coding-agent/agent/__pycache__/tools.cpython-312.pyc create mode 100644 self-coding-agent/agent/config.py create mode 100644 self-coding-agent/agent/loop.py create mode 100644 self-coding-agent/agent/memory.py create mode 100644 self-coding-agent/agent/ollama_client.py create mode 100644 self-coding-agent/agent/tools.py create mode 100644 self-coding-agent/config.example.yaml create mode 100644 self-coding-agent/generated/README.txt create mode 100644 self-coding-agent/main.py create mode 100644 self-coding-agent/requirements.txt create mode 100644 self-coding-agent/state/.gitignore create mode 100644 self-coding-agent/tests/__pycache__/test_smoke.cpython-312.pyc create mode 100644 self-coding-agent/tests/test_smoke.py diff --git a/frontline/cluster-fuck/RSIConsolidationXAUUSD/RSIConsolidation.mq5 b/back-pedal/archive/RSIConsolidationXAUUSD/RSIConsolidation.mq5 similarity index 100% rename from frontline/cluster-fuck/RSIConsolidationXAUUSD/RSIConsolidation.mq5 rename to back-pedal/archive/RSIConsolidationXAUUSD/RSIConsolidation.mq5 diff --git a/frontline/cluster-fuck/RSIConsolidationXAUUSD/RSIConsolidation_optimization.set b/back-pedal/archive/RSIConsolidationXAUUSD/RSIConsolidation_optimization.set similarity index 100% rename from frontline/cluster-fuck/RSIConsolidationXAUUSD/RSIConsolidation_optimization.set rename to back-pedal/archive/RSIConsolidationXAUUSD/RSIConsolidation_optimization.set diff --git a/frontline/units/RSIScalpingXAUUSD/main.mq5 b/back-pedal/archive/RSIScalpingXAUUSD/main.mq5 similarity index 100% rename from frontline/units/RSIScalpingXAUUSD/main.mq5 rename to back-pedal/archive/RSIScalpingXAUUSD/main.mq5 diff --git a/frontline/cluster-fuck/RSIScalpingXAUUSD-trailing/report.html b/back-pedal/archive/RSIScalpingXAUUSD/report.html similarity index 100% rename from frontline/cluster-fuck/RSIScalpingXAUUSD-trailing/report.html rename to back-pedal/archive/RSIScalpingXAUUSD/report.html diff --git a/frontline/cluster-fuck/RSIScalpingXAUUSD-trailing/report.png b/back-pedal/archive/RSIScalpingXAUUSD/report.png similarity index 100% rename from frontline/cluster-fuck/RSIScalpingXAUUSD-trailing/report.png rename to back-pedal/archive/RSIScalpingXAUUSD/report.png diff --git a/frontline/cluster-fuck/SuperEMAXAUUSD/SuperEMA.set b/back-pedal/archive/SuperEMAXAUUSD/SuperEMA.set similarity index 100% rename from frontline/cluster-fuck/SuperEMAXAUUSD/SuperEMA.set rename to back-pedal/archive/SuperEMAXAUUSD/SuperEMA.set diff --git a/frontline/cluster-fuck/SuperEMAXAUUSD/main.mq5 b/back-pedal/archive/SuperEMAXAUUSD/main.mq5 similarity index 100% rename from frontline/cluster-fuck/SuperEMAXAUUSD/main.mq5 rename to back-pedal/archive/SuperEMAXAUUSD/main.mq5 diff --git a/backtesting/MT5/test_setup.py b/backtesting/MT5/test_setup.py index d268434..d19edd1 100644 --- a/backtesting/MT5/test_setup.py +++ b/backtesting/MT5/test_setup.py @@ -23,14 +23,14 @@ def test_mt5_connection(): print("3. Try logging into MT5 manually first") return False - print("✓ MT5 initialized successfully") + print("[OK] MT5 initialized successfully") # Get account info account_info = mt5.account_info() if account_info is None: print("WARNING: Could not get account info") else: - print(f"✓ Account: {account_info.login}") + print(f"[OK] Account: {account_info.login}") print(f" Server: {account_info.server}") print(f" Balance: ${account_info.balance:.2f}") @@ -41,9 +41,9 @@ def test_mt5_connection(): for symbol in test_symbols: symbol_info = mt5.symbol_info(symbol) if symbol_info is None: - print(f"✗ {symbol}: Not available") + print(f"[FAIL] {symbol}: Not available") else: - print(f"✓ {symbol}: Available") + print(f"[OK] {symbol}: Available") print(f" Bid: {symbol_info.bid:.5f}, Ask: {symbol_info.ask:.5f}") print(f" Spread: {symbol_info.spread} points") @@ -56,31 +56,34 @@ def test_mt5_connection(): rates = mt5.copy_rates_range(symbol, timeframe, start_date, end_date) if rates is None or len(rates) == 0: - print(f"✗ Could not retrieve historical data for {symbol}") + print(f"[FAIL] Could not retrieve historical data for {symbol}") print(" Make sure you have historical data in MT5") else: - print(f"✓ Retrieved {len(rates)} bars for {symbol}") + print(f"[OK] Retrieved {len(rates)} bars for {symbol}") print(f" Date range: {datetime.fromtimestamp(rates[0]['time'])} to {datetime.fromtimestamp(rates[-1]['time'])}") - # Test indicator creation + # Test indicator creation (optional: some MetaTrader5 Python wheels omit terminal indicator APIs) print("\nTesting indicator creation...") - rsi_handle = mt5.iRSI(symbol, timeframe, 14, mt5.PRICE_CLOSE) - if rsi_handle == mt5.INVALID_HANDLE: - print("✗ Failed to create RSI indicator") + if not hasattr(mt5, "iRSI") or not hasattr(mt5, "iMA"): + print("[SKIP] mt5.iRSI / mt5.iMA not available in this MetaTrader5 build; skipping handle tests.") + print(" (Historical data + account checks above are enough for the Python backtest harness.)") else: - print("✓ RSI indicator created successfully") - # Get RSI values - rsi_values = mt5.copy_buffer(rsi_handle, 0, 0, 10) - if rsi_values is not None: - print(f" Latest RSI values: {rsi_values[-3:]}") - mt5.indicator_release(rsi_handle) - - ema_handle = mt5.iMA(symbol, timeframe, 50, 0, mt5.MODE_EMA, mt5.PRICE_CLOSE) - if ema_handle == mt5.INVALID_HANDLE: - print("✗ Failed to create EMA indicator") - else: - print("✓ EMA indicator created successfully") - mt5.indicator_release(ema_handle) + rsi_handle = mt5.iRSI(symbol, timeframe, 14, mt5.PRICE_CLOSE) + if rsi_handle == mt5.INVALID_HANDLE: + print("[FAIL] Failed to create RSI indicator") + else: + print("[OK] RSI indicator created successfully") + rsi_values = mt5.copy_buffer(rsi_handle, 0, 0, 10) + if rsi_values is not None: + print(f" Latest RSI values: {rsi_values[-3:]}") + mt5.indicator_release(rsi_handle) + + ema_handle = mt5.iMA(symbol, timeframe, 50, 0, mt5.MODE_EMA, mt5.PRICE_CLOSE) + if ema_handle == mt5.INVALID_HANDLE: + print("[FAIL] Failed to create EMA indicator") + else: + print("[OK] EMA indicator created successfully") + mt5.indicator_release(ema_handle) # Cleanup mt5.shutdown() diff --git a/frontline/cluster-fuck/DarvasBoxXAUUSD/DarvasBoxXAUUSD_Genetic_Optimization.set b/frontline/cluster-fuck/DarvasBoxXAUUSD/DarvasBoxXAUUSD_Genetic_Optimization.set deleted file mode 100644 index ca12828..0000000 --- a/frontline/cluster-fuck/DarvasBoxXAUUSD/DarvasBoxXAUUSD_Genetic_Optimization.set +++ /dev/null @@ -1,27 +0,0 @@ -; saved on 2026.04.22 -; genetic optimization set for DarvasBoxXAUUSD/main.mq5 -; load in MT5 Strategy Tester -> Inputs -> Load -; -; === Core Darvas Box Parameters === -BoxPeriod=165||80||5||280||Y -BoxDeviation=25140||8000||500||50000||Y -VolumeThreshold=938||200||25||2500||Y -StopLoss=1665||600||50||4000||Y -TakeProfit=3685||1200||75||8000||Y -EnableLogging=false||false||0||true||N -BoxColor=255||0||1||16777215||N -BoxWidth=1||1||1||3||N -; -; === Trend Confirmation Parameters === -TrendTimeframe=16386||16385||1||16388||Y -MA_Period=125||20||5||260||Y -MA_Method=1||0||1||3||Y -MA_Price=6||0||1||6||Y -TrendThreshold=4.94||1.0||0.2||20.0||Y -; -; === Volume Analysis Parameters === -VolumeMA_Period=110||20||5||220||Y -VolumeThresholdMultiplier=1.5||1.0||0.1||3.5||Y -; -; === Execution / ID === -MagicNumber=135790||135790||1||1357900||N diff --git a/frontline/cluster-fuck/DarvasBoxXAUUSD/main.mq5 b/frontline/cluster-fuck/DarvasBoxXAUUSD/main.mq5 deleted file mode 100644 index 6da93f9..0000000 --- a/frontline/cluster-fuck/DarvasBoxXAUUSD/main.mq5 +++ /dev/null @@ -1,443 +0,0 @@ -//+------------------------------------------------------------------+ -//| DarvasBox.mq5 | -//| Copyright 2024, MetaQuotes Ltd. | -//| https://www.mql5.com | -//+------------------------------------------------------------------+ -#property copyright "Copyright 2024, MetaQuotes Ltd." -#property link "https://www.mql5.com" -#property version "1.00" -#property strict - -#include -#include -#include -#include "../_united/MagicNumberHelpers.mqh" - -// Input parameters -input int BoxPeriod = 165; // Period for Darvas Box calculation -input double BoxDeviation = 25140; // Box deviation in points -input int VolumeThreshold = 938; // Minimum volume for confirmation -input double StopLoss = 1665; // Stop loss in points (increased for BTCUSD) -input double TakeProfit = 3685; // Take profit in points (increased for BTCUSD) -input bool EnableLogging = false; // Enable detailed logging -input color BoxColor = clrBlue; // Color for Darvas Box -input int BoxWidth = 1; // Width of box lines - -// Trend confirmation parameters -input ENUM_TIMEFRAMES TrendTimeframe = PERIOD_H2; // Timeframe for trend analysis -input int MA_Period = 125; // Moving Average period for trend -input ENUM_MA_METHOD MA_Method = MODE_EMA; // Moving Average method -input ENUM_APPLIED_PRICE MA_Price = PRICE_WEIGHTED; // Price type for MA -input double TrendThreshold = 4.94; // Trend strength threshold - -// Volume analysis parameters -input int VolumeMA_Period = 110; // Period for Volume MA -input double VolumeThresholdMultiplier = 1.5; // Volume spike threshold - -// Magic Number -input int MagicNumber = 135790; // Magic Number for Trades - -// Global variables -double boxHigh = 0; -double boxLow = 0; -bool boxFormed = false; -datetime lastBoxTime = 0; -string boxName = "DarvasBox_"; -double minStopLevel = 0; -double point = 0; -CTrade trade; - -// Indicator handles -int maHandle; -int volumeHandle; - -//+------------------------------------------------------------------+ -//| Expert initialization function | -//+------------------------------------------------------------------+ -int OnInit() -{ - // Initialize indicators and variables - boxHigh = 0; - boxLow = 0; - boxFormed = false; - lastBoxTime = 0; - - // Get symbol properties - point = SymbolInfoDouble(_Symbol, SYMBOL_POINT); - minStopLevel = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL) * point; - - // Initialize indicators - maHandle = iMA(_Symbol, TrendTimeframe, MA_Period, 0, MA_Method, MA_Price); - volumeHandle = iVolumes(_Symbol, PERIOD_CURRENT, VOLUME_TICK); - - if(maHandle == INVALID_HANDLE || volumeHandle == INVALID_HANDLE) - { - Print("Error creating indicators"); - return(INIT_FAILED); - } - - // Configure trade object - trade.SetDeviationInPoints(10); - trade.SetTypeFilling(ORDER_FILLING_IOC); - trade.SetAsyncMode(false); - trade.SetExpertMagicNumber(MagicNumber); - - if(EnableLogging) - { - Print("Darvas Box Expert Advisor initialized"); - Print("Symbol: ", _Symbol); - Print("Point: ", point); - Print("Minimum Stop Level: ", minStopLevel); - } - - // Delete any existing box objects - ObjectsDeleteAll(0, boxName); - - return(INIT_SUCCEEDED); -} - -//+------------------------------------------------------------------+ -//| Draw Darvas Box on chart | -//+------------------------------------------------------------------+ -void DrawDarvasBox() -{ - if(!boxFormed) return; - - datetime time1 = iTime(_Symbol, PERIOD_H1, BoxPeriod); - datetime time2 = iTime(_Symbol, PERIOD_H1, 0); - - // Delete old box - ObjectsDeleteAll(0, boxName); - - // Draw box - ObjectCreate(0, boxName + "Top", OBJ_TREND, 0, time1, boxHigh, time2, boxHigh); - ObjectCreate(0, boxName + "Bottom", OBJ_TREND, 0, time1, boxLow, time2, boxLow); - - // Set box properties - ObjectSetInteger(0, boxName + "Top", OBJPROP_COLOR, BoxColor); - ObjectSetInteger(0, boxName + "Bottom", OBJPROP_COLOR, BoxColor); - ObjectSetInteger(0, boxName + "Top", OBJPROP_WIDTH, BoxWidth); - ObjectSetInteger(0, boxName + "Bottom", OBJPROP_WIDTH, BoxWidth); - ObjectSetInteger(0, boxName + "Top", OBJPROP_RAY_RIGHT, true); - ObjectSetInteger(0, boxName + "Bottom", OBJPROP_RAY_RIGHT, true); -} - -//+------------------------------------------------------------------+ -//| Calculate Darvas Box levels | -//+------------------------------------------------------------------+ -void CalculateDarvasBox() -{ - double high = 0; - double low = DBL_MAX; - - // Find highest high and lowest low in the period - for(int i = 0; i < BoxPeriod; i++) - { - high = MathMax(high, iHigh(_Symbol, PERIOD_H1, i)); - low = MathMin(low, iLow(_Symbol, PERIOD_H1, i)); - } - - double range = high - low; - double allowedRange = BoxDeviation * _Point; - - if(EnableLogging) - { - Print("Box Calculation - High: ", high, " Low: ", low, " Range: ", range, " Allowed Range: ", allowedRange); - } - - // Check if box is formed - if(range <= allowedRange) - { - boxHigh = high; - boxLow = low; - boxFormed = true; - lastBoxTime = iTime(_Symbol, PERIOD_CURRENT, 0); - - // Draw the box - DrawDarvasBox(); - - if(EnableLogging) - Print("Box Formed - High: ", boxHigh, " Low: ", boxLow, " Time: ", lastBoxTime); - } - else - { - boxFormed = false; - // Delete box if it exists - ObjectsDeleteAll(0, boxName); - } -} - -//+------------------------------------------------------------------+ -//| Validate and adjust stop levels | -//+------------------------------------------------------------------+ -bool ValidateStopLevels(double price, double &sl, double &tp, ENUM_ORDER_TYPE orderType) -{ - double minSlDistance = MathMax(minStopLevel, StopLoss * point); - double minTpDistance = MathMax(minStopLevel, TakeProfit * point); - - if(EnableLogging) - { - Print("Minimum SL Distance: ", minSlDistance); - Print("Minimum TP Distance: ", minTpDistance); - } - - // Adjust stop loss - if(orderType == ORDER_TYPE_BUY) - { - sl = price - minSlDistance; - tp = price + minTpDistance; - - if(EnableLogging) - { - Print("Buy Order Levels:"); - Print("Entry: ", price); - Print("Stop Loss: ", sl); - Print("Take Profit: ", tp); - } - } - else // ORDER_TYPE_SELL - { - sl = price + minSlDistance; - tp = price - minTpDistance; - - if(EnableLogging) - { - Print("Sell Order Levels:"); - Print("Entry: ", price); - Print("Stop Loss: ", sl); - Print("Take Profit: ", tp); - } - } - - return true; -} - -//+------------------------------------------------------------------+ -//| Check trend direction and strength | -//+------------------------------------------------------------------+ -bool IsTrendFavorable(ENUM_ORDER_TYPE orderType) -{ - double ma[]; - ArraySetAsSeries(ma, true); - - if(CopyBuffer(maHandle, 0, 0, 2, ma) <= 0) - return false; - - double currentPrice = SymbolInfoDouble(_Symbol, SYMBOL_ASK); - double trendStrength = MathAbs(currentPrice - ma[0]) / point; - - if(EnableLogging) - Print("Trend Strength: ", trendStrength); - - if(orderType == ORDER_TYPE_BUY) - return (currentPrice > ma[0] && trendStrength > TrendThreshold); - else - return (currentPrice < ma[0] && trendStrength > TrendThreshold); -} - -//+------------------------------------------------------------------+ -//| Check volume conditions | -//+------------------------------------------------------------------+ -bool CheckVolumeConditions() -{ - double volumes[]; - ArraySetAsSeries(volumes, true); - - if(CopyBuffer(volumeHandle, 0, 0, VolumeMA_Period + 1, volumes) <= 0) - return false; - - double volumeMA = 0; - for(int i = 1; i <= VolumeMA_Period; i++) - volumeMA += volumes[i]; - volumeMA /= VolumeMA_Period; - - double currentVolume = volumes[0]; - double volumeRatio = currentVolume / volumeMA; - - if(EnableLogging) - Print("Volume Ratio: ", volumeRatio); - - return (volumeRatio > VolumeThresholdMultiplier); -} - -//+------------------------------------------------------------------+ -//| Place trade order | -//+------------------------------------------------------------------+ -bool PlaceOrder(ENUM_ORDER_TYPE orderType, double price, double sl, double tp) -{ - // Validate and adjust stop levels - if(!ValidateStopLevels(price, sl, tp, orderType)) - { - if(EnableLogging) - Print("Invalid stop levels after adjustment"); - return false; - } - - // Check trend and volume conditions - if(!IsTrendFavorable(orderType)) - { - if(EnableLogging) - Print("Trend not favorable for trade"); - return false; - } - - if(!CheckVolumeConditions()) - { - if(EnableLogging) - Print("Volume conditions not met"); - return false; - } - - if(EnableLogging) - { - Print("Order Details:"); - Print("Type: ", EnumToString(orderType)); - Print("Price: ", price); - Print("Stop Loss: ", sl); - Print("Take Profit: ", tp); - } - - bool result = false; - - if(orderType == ORDER_TYPE_BUY) - { - result = trade.Buy(0.01, _Symbol, price, sl, tp, "Darvas Box Breakout"); - } - else - { - result = trade.Sell(0.01, _Symbol, price, sl, tp, "Darvas Box Breakdown"); - } - - if(EnableLogging) - { - if(result) - Print((orderType == ORDER_TYPE_BUY ? "Buy" : "Sell"), " Order Placed Successfully"); - else - Print((orderType == ORDER_TYPE_BUY ? "Buy" : "Sell"), " Order Failed - Error: ", trade.ResultRetcode(), " Description: ", trade.ResultRetcodeDescription()); - } - - return result; -} - -//+------------------------------------------------------------------+ -//| Expert tick function | -//+------------------------------------------------------------------+ -void OnTick() -{ - // Calculate new box levels - CalculateDarvasBox(); - - // Check for trading signals - if(boxFormed) - { - double currentPrice = SymbolInfoDouble(_Symbol, SYMBOL_ASK); - double currentVolume = iVolume(_Symbol, PERIOD_CURRENT, 0); - - if(EnableLogging) - { - Print("Current Price: ", currentPrice, " Box High: ", boxHigh, " Box Low: ", boxLow); - Print("Current Volume: ", currentVolume, " Volume Threshold: ", VolumeThreshold); - } - - // Check for breakout above box - if(currentPrice > boxHigh && currentVolume > VolumeThreshold) - { - if(EnableLogging) - Print("Breakout Signal Detected - Price above box high"); - - // Buy signal - if(!PositionExistsByMagic(_Symbol, MagicNumber)) // No existing positions with our magic number - { - double sl = currentPrice - StopLoss * _Point; - double tp = currentPrice + TakeProfit * _Point; - - if(EnableLogging) - Print("Preparing Buy Order - Price: ", currentPrice, " SL: ", sl, " TP: ", tp); - - PlaceOrder(ORDER_TYPE_BUY, currentPrice, sl, tp); - } - else if(EnableLogging) - Print("Skipping Buy Signal - Position already exists"); - } - - // Check for breakdown below box - if(currentPrice < boxLow && currentVolume > VolumeThreshold) - { - if(EnableLogging) - Print("Breakdown Signal Detected - Price below box low"); - - // Sell signal - if(!PositionExistsByMagic(_Symbol, MagicNumber)) // No existing positions with our magic number - { - double sl = currentPrice + StopLoss * _Point; - double tp = currentPrice - TakeProfit * _Point; - - if(EnableLogging) - Print("Preparing Sell Order - Price: ", currentPrice, " SL: ", sl, " TP: ", tp); - - PlaceOrder(ORDER_TYPE_SELL, currentPrice, sl, tp); - } - else if(EnableLogging) - Print("Skipping Sell Signal - Position already exists"); - } - } - else if(EnableLogging) - Print("No Box Formed - Waiting for consolidation"); -} - -//+------------------------------------------------------------------+ -//| Get last error description | -//+------------------------------------------------------------------+ -string GetLastErrorDescription() -{ - string errorDescription; - switch(GetLastError()) - { - case 0: errorDescription = "No error"; break; - case 1: errorDescription = "No error, but result unknown"; break; - case 2: errorDescription = "Common error"; break; - case 3: errorDescription = "Invalid trade parameters"; break; - case 4: errorDescription = "Trade server is busy"; break; - case 5: errorDescription = "Old version of the client terminal"; break; - case 6: errorDescription = "No connection with trade server"; break; - case 7: errorDescription = "Not enough rights"; break; - case 8: errorDescription = "Too frequent requests"; break; - case 9: errorDescription = "Malfunctional trade operation"; break; - case 64: errorDescription = "Account disabled"; break; - case 65: errorDescription = "Invalid account"; break; - case 128: errorDescription = "Trade timeout"; break; - case 129: errorDescription = "Invalid price"; break; - case 130: errorDescription = "Invalid stops"; break; - case 131: errorDescription = "Invalid trade volume"; break; - case 132: errorDescription = "Market is closed"; break; - case 133: errorDescription = "Trade is disabled"; break; - case 134: errorDescription = "Not enough money"; break; - case 135: errorDescription = "Price changed"; break; - case 136: errorDescription = "Off quotes"; break; - case 137: errorDescription = "Broker is busy"; break; - case 138: errorDescription = "Requote"; break; - case 139: errorDescription = "Order is locked"; break; - case 140: errorDescription = "Long positions only allowed"; break; - case 141: errorDescription = "Too many requests"; break; - case 145: errorDescription = "Modification denied because order is too close to market"; break; - case 146: errorDescription = "Trade context is busy"; break; - case 147: errorDescription = "Expirations are denied by broker"; break; - case 148: errorDescription = "Amount of open and pending orders has reached the limit"; break; - case 149: errorDescription = "Hedging is prohibited"; break; - case 150: errorDescription = "Prohibited by FIFO rules"; break; - default: errorDescription = "Unknown error"; break; - } - return errorDescription; -} - -//+------------------------------------------------------------------+ -//| Expert deinitialization function | -//+------------------------------------------------------------------+ -void OnDeinit(const int reason) -{ - // Delete all box objects - ObjectsDeleteAll(0, boxName); - - if(EnableLogging) - Print("Expert Advisor deinitialized - Reason: ", reason); -} diff --git a/frontline/cluster-fuck/EMASlopeDistanceCocktailXAUUSD-trailing/main.mq5 b/frontline/cluster-fuck/EMASlopeDistanceCocktailXAUUSD-trailing/main.mq5 deleted file mode 100644 index 6d849c0..0000000 --- a/frontline/cluster-fuck/EMASlopeDistanceCocktailXAUUSD-trailing/main.mq5 +++ /dev/null @@ -1,628 +0,0 @@ -//+------------------------------------------------------------------+ -//| EMACrossOver.mq5 | -//| Copyright 2025, MetaQuotes Ltd. | -//| https://www.mql5.com | -//+------------------------------------------------------------------+ -#property copyright "Copyright 2025, MetaQuotes Ltd." -#property link "https://www.mql5.com" -#property version "1.01" -#include -#include "../_united/MagicNumberHelpers.mqh" -//--- Eingabeparameter (Input Parameters) - Optimized Profitable Parameters -input int EMA_Periode = 50; // EMA Periode -input double PreisSchwelle = 700.0; // Preisbewegung Schwelle in Pips -input double SteigungSchwelle = 25.0; // EMA Steigung Schwelle in Pips -input int ÜberwachungTimeout = 340; // Überwachungszeit in Sekunden -input double TrailingStop = 370.0; // Gleitender Stop in Pips -input bool UseTrailingStop = true; // Gleitenden Stop anwenden -input double TrailingActivationPips = 0.0; // Mindestgewinn in Pips bis Trail startet (0 = Konto-Profit>0) -input bool UseStaleStopLossExit = false; // schließen wenn SL zu lange nicht angepasst wurde -input int StaleStopLossSeconds = 33800; // Sekunden ohne SL-Änderung -> Close (0 = aus) -input double LotGröße = 0.07; // Handelsvolumen -input int MagicNumber = 135790; // Magic Number für Trades -input bool UseSpreadAdjustment = true; // Spread-Anpassung verwenden -input ENUM_TIMEFRAMES Timeframe = PERIOD_H1; // Zeitraum für Analyse -input bool UseBarData = true; // Bar-Daten statt Tick-Daten verwenden -input int MaxTradesPerCrossover = 3; // Maximale Trades pro Crossover-Ereignis -input int ProfitCheckBars = 11; // Bars bis zur Profit-Prüfung -input bool CloseUnprofitableTrades = true; // Unprofitable Trades nach X Bars schließen -input bool UseWeeklyADXFilter = true; // W1 ADX Trendfilter aktivieren -input int WeeklyADXPeriod = 15; // ADX-Periode auf W1 -input double WeeklyADXMin = 40.0; // Minimaler ADX fuer Trendfreigabe -input int WeeklyADXBarShift = 2; // 1=letzte geschlossene W1-Kerze -input bool WeeklyADXUseDirection = true; // +DI/-DI Richtung mitpruefen - -//--- Globale Variablen (Global Variables) -int ema_handle; // EMA Indicator Handle -double ema_array[]; // Array für EMA -datetime letzte_überwachung_zeit; // Zeit der letzten Überwachung -bool überwachung_aktiv = false; // Überwachungsstatus -bool preis_trigger_aktiv = false; // Preis-Trigger Status -bool steigung_trigger_aktiv = false; // Steigungs-Trigger Status -int ticket = 0; // Trade Ticket -CTrade trade; // CTrade Objekt -int trades_in_current_crossover = 0; // Anzahl Trades im aktuellen Crossover -bool crossover_detected = false; // Crossover erkannt -datetime trade_open_time = 0; // Zeitpunkt des Trade-Öffnens -datetime g_last_sl_adjust_success_time = 0; // letzte erfolgreiche SL-Verschiebung (Stale-Exit) - -//+------------------------------------------------------------------+ -//| Weekly ADX trend filter | -//+------------------------------------------------------------------+ -bool IsWeeklyADXTrendFavorable(ENUM_ORDER_TYPE order_type) -{ - if(!UseWeeklyADXFilter) - return true; - - int adxShift = WeeklyADXBarShift; - if(adxShift < 0) - adxShift = 0; - - int adx_handle = iADX(_Symbol, PERIOD_W1, WeeklyADXPeriod); - if(adx_handle == INVALID_HANDLE) - { - Print("TRACE: Weekly ADX Handle ungültig - Filter blockiert Entry"); - return false; - } - - double adx_buf[], plus_di_buf[], minus_di_buf[]; - ArraySetAsSeries(adx_buf, true); - ArraySetAsSeries(plus_di_buf, true); - ArraySetAsSeries(minus_di_buf, true); - - bool ok_adx = (CopyBuffer(adx_handle, 0, adxShift, 1, adx_buf) > 0); - bool ok_plus = (CopyBuffer(adx_handle, 1, adxShift, 1, plus_di_buf) > 0); - bool ok_minus = (CopyBuffer(adx_handle, 2, adxShift, 1, minus_di_buf) > 0); - IndicatorRelease(adx_handle); - - if(!ok_adx || !ok_plus || !ok_minus) - { - Print("TRACE: Weekly ADX Daten nicht verfügbar - Filter blockiert Entry"); - return false; - } - - double adx_value = adx_buf[0]; - double plus_di = plus_di_buf[0]; - double minus_di = minus_di_buf[0]; - - bool strength_ok = (adx_value >= WeeklyADXMin); - bool direction_ok = true; - if(WeeklyADXUseDirection) - { - if(order_type == ORDER_TYPE_BUY) - direction_ok = (plus_di > minus_di); - else - direction_ok = (minus_di > plus_di); - } - - Print("TRACE: Weekly ADX Filter | ADX=", DoubleToString(adx_value, 2), - " +DI=", DoubleToString(plus_di, 2), - " -DI=", DoubleToString(minus_di, 2), - " strength_ok=", strength_ok, - " direction_ok=", direction_ok); - - return (strength_ok && direction_ok); -} - -//+------------------------------------------------------------------+ -//| Expert initialization function | -//+------------------------------------------------------------------+ -int OnInit() - { - //--- CTrade konfigurieren (Configure CTrade) - trade.SetExpertMagicNumber(MagicNumber); - trade.SetDeviationInPoints(10); - trade.SetTypeFilling(ORDER_FILLING_IOC); - - //--- EMA Indicator Handle erstellen (Create EMA indicator handle) - ema_handle = iMA(_Symbol, Timeframe, EMA_Periode, 0, MODE_EMA, PRICE_CLOSE); - - if(ema_handle == INVALID_HANDLE) - { - Print("Fehler beim Erstellen des EMA Indicators"); - return(INIT_FAILED); - } - - //--- Arrays initialisieren (Initialize arrays) - ArraySetAsSeries(ema_array, true); - - //--- Arrays mit aktuellen Werten füllen (Fill arrays with current values) - BerechneEMA(); - - Print("EMA EA initialisiert - Periode: ", EMA_Periode, " Timeframe: ", EnumToString(Timeframe), " Handle: ", ema_handle); - return(INIT_SUCCEEDED); - } - -//+------------------------------------------------------------------+ -//| Expert deinitialization function | -//+------------------------------------------------------------------+ -void OnDeinit(const int reason) - { - //--- Indicator Handle freigeben (Release indicator handle) - if(ema_handle != INVALID_HANDLE) - { - IndicatorRelease(ema_handle); - } - - Print("EA beendet - Grund: ", reason); -} - -//+------------------------------------------------------------------+ -//| Expert tick function | -//+------------------------------------------------------------------+ -void OnTick() - { - static datetime last_bar_time = 0; - const datetime current_bar_time = iTime(_Symbol, Timeframe, 0); - const bool new_bar = (current_bar_time != last_bar_time); - const bool has_position = PositionExistsByMagic(_Symbol, (ulong)MagicNumber); - - // Offene Positionen: Management jeden Tick (Trailing / Stale-SL). Sonst bei Bar-Modus nur neuer Bar. - if(UseBarData) - { - if(!new_bar && !has_position) - return; - if(new_bar) - last_bar_time = current_bar_time; - } - - //--- EMA Werte berechnen (Calculate EMA values) - BerechneEMA(); - - const bool run_signals = (!UseBarData || new_bar); - - //--- Debug / Überwachung / Entry nur bei neuem Bar (Bar-Modus) oder jeden Tick (Tick-Modus) - if(run_signals && ArraySize(ema_array) > 0) - { - double aktueller_close = iClose(_Symbol, Timeframe, 0); - double ema_aktuell = ema_array[0]; - double ema_vorher = ema_array[1]; - double preis_abstand = MathAbs(aktueller_close - ema_aktuell) / _Point; - double steigung = (ema_aktuell - ema_vorher) / _Point; - - if(UseBarData) - { - Print("=== DEBUG INFO (Neuer Bar) ==="); - Print("Bar Zeit: ", TimeToString(iTime(_Symbol, Timeframe, 0))); - } - else - { - Print("=== DEBUG INFO (Tick) ==="); - } - - Print("Aktueller Close: ", aktueller_close); - Print("EMA: ", ema_aktuell); - Print("Preis-Abstand: ", preis_abstand, " Pips"); - Print("EMA Steigung: ", steigung, " Pips"); - Print("Differenz Close-EMA: ", aktueller_close - ema_aktuell); - Print("Preis-Trigger: ", preis_trigger_aktiv, " Steigungs-Trigger: ", steigung_trigger_aktiv); - Print("Überwachung aktiv: ", überwachung_aktiv); - Print("Position offen: ", PositionExistsByMagic(_Symbol, (ulong)MagicNumber)); - Print("Trades im aktuellen Crossover: ", trades_in_current_crossover, "/", MaxTradesPerCrossover); - Print("=================="); - } - - if(run_signals) - { - //--- Überwachung prüfen (Check monitoring) - if(überwachung_aktiv) - { - if(UseBarData) - { - int bars_since_monitoring = iBarShift(_Symbol, Timeframe, letzte_überwachung_zeit); - int timeout_bars = (int)(ÜberwachungTimeout / PeriodSeconds(Timeframe)); - - if(bars_since_monitoring > timeout_bars) - { - überwachung_aktiv = false; - preis_trigger_aktiv = false; - steigung_trigger_aktiv = false; - Print("Überwachung beendet - Bar-basierte Zeitüberschreitung (", bars_since_monitoring, " Bars)"); - } - } - else - { - if(TimeCurrent() - letzte_überwachung_zeit > ÜberwachungTimeout) - { - überwachung_aktiv = false; - preis_trigger_aktiv = false; - steigung_trigger_aktiv = false; - Print("Überwachung beendet - Tick-basierte Zeitüberschreitung"); - } - } - } - - PrüfeTrigger(); - } - - VerwalteTrades(); -} - -//+------------------------------------------------------------------+ -//| EMA Berechnung (EMA Calculation) | -//+------------------------------------------------------------------+ -void BerechneEMA() -{ - //--- EMA Werte vom Indicator kopieren (Copy EMA values from indicator) - int copied = CopyBuffer(ema_handle, 0, 0, 3, ema_array); - - if(copied <= 0) - { - Print("TRACE: Fehler beim Kopieren der EMA Werte - Copied: ", copied); - return; - } - - Print("TRACE: EMA Werte kopiert: ", copied, " Bars"); - Print("TRACE: EMA [0]: ", ema_array[0], " [1]: ", ema_array[1], " [2]: ", ema_array[2]); -} - -//+------------------------------------------------------------------+ -//| Trigger-Bedingungen prüfen (Check trigger conditions) | -//+------------------------------------------------------------------+ -void PrüfeTrigger() -{ - if(ArraySize(ema_array) < 2) - { - Print("TRACE: Array zu klein - Größe: ", ArraySize(ema_array)); - return; - } - - //--- Aktuelle Werte (Current values) - double aktueller_preis = SymbolInfoDouble(_Symbol, SYMBOL_BID); - double aktueller_ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); - double aktueller_close = iClose(_Symbol, Timeframe, 0); - double pips_multiplier = (_Digits == 3 || _Digits == 5) ? 10.0 : 1.0; - - //--- EMA Werte in Variablen (EMA values in variables) - double ema_aktuell = ema_array[0]; - double ema_vorher = ema_array[1]; - - //--- EMA Crossover Erkennung (EMA Crossover Detection) - // Prüfe ob Preis die EMA kreuzt (Check if price crosses EMA) - static double last_close = 0; - static double last_ema = 0; - - if(last_close != 0 && last_ema != 0) - { - bool crossover_bullish = (last_close <= last_ema) && (aktueller_close > ema_aktuell); - bool crossover_bearish = (last_close >= last_ema) && (aktueller_close < ema_aktuell); - - //--- Neues Crossover-Ereignis erkannt (New crossover event detected) - if(crossover_bullish || crossover_bearish) - { - trades_in_current_crossover = 0; // Reset trade counter - Print("TRACE: EMA Crossover erkannt - ", (crossover_bullish ? "BULLISH" : "BEARISH"), " - Trade-Counter zurückgesetzt"); - Print("TRACE: Vorher: Close=", last_close, " EMA=", last_ema, " Jetzt: Close=", aktueller_close, " EMA=", ema_aktuell); - } - } - - //--- Aktuelle Werte für nächsten Vergleich speichern (Save current values for next comparison) - last_close = aktueller_close; - last_ema = ema_aktuell; - - //--- Preisbewegung zur EMA prüfen (Check price action to EMA) - double preis_abstand = MathAbs(aktueller_close - ema_aktuell) / _Point / pips_multiplier; - - Print("TRACE: Preis-Abstand: ", preis_abstand, " Pips (Schwelle: ", PreisSchwelle, ")"); - Print("TRACE: Close: ", aktueller_close, " EMA: ", ema_aktuell); - Print("TRACE: Trades im aktuellen Crossover: ", trades_in_current_crossover, "/", MaxTradesPerCrossover); - - if(preis_abstand > PreisSchwelle && !preis_trigger_aktiv) - { - preis_trigger_aktiv = true; - Print("TRACE: Preis-Trigger aktiviert: ", preis_abstand, " Pips"); - } - - //--- EMA Steigung prüfen (Check EMA slope) - double steigung = (ema_aktuell - ema_vorher) / _Point / pips_multiplier; - - Print("TRACE: EMA Steigung: ", steigung, " Pips (Schwelle: ", SteigungSchwelle, ")"); - - if(MathAbs(steigung) > SteigungSchwelle && !steigung_trigger_aktiv) - { - steigung_trigger_aktiv = true; - Print("TRACE: Steigungs-Trigger aktiviert: ", steigung, " Pips"); - } - - //--- Überwachung starten wenn beide Trigger aktiv sind (Start monitoring when both triggers are active) - if(preis_trigger_aktiv && steigung_trigger_aktiv && !überwachung_aktiv) - { - überwachung_aktiv = true; - - if(UseBarData) - { - letzte_überwachung_zeit = iTime(_Symbol, Timeframe, 0); // Aktuelle Bar-Zeit - Print("TRACE: Überwachung gestartet - Beide Trigger aktiv (Bar: ", TimeToString(letzte_überwachung_zeit), ")"); - } - else - { - letzte_überwachung_zeit = TimeCurrent(); // Aktuelle Tick-Zeit - Print("TRACE: Überwachung gestartet - Beide Trigger aktiv (Tick)"); - } - } - - //--- Trade platzieren wenn Überwachung aktiv und Preis über/unter EMA (Place trade when monitoring active and price above/below EMA) - if(überwachung_aktiv) - { - bool bullish_signal = aktueller_close > ema_aktuell; - bool bearish_signal = aktueller_close < ema_aktuell; - - Print("TRACE: Signal Check - Bullish: ", bullish_signal, " Bearish: ", bearish_signal); - Print("TRACE: Close: ", aktueller_close, " EMA: ", ema_aktuell); - Print("TRACE: Differenz: ", aktueller_close - ema_aktuell); - - //--- Trade-Limit prüfen (Check trade limit) - if(trades_in_current_crossover >= MaxTradesPerCrossover) - { - Print("TRACE: Trade-Limit erreicht (", MaxTradesPerCrossover, ") - Kein neuer Trade"); - return; - } - - if(bullish_signal && !PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) - { - if(!IsWeeklyADXTrendFavorable(ORDER_TYPE_BUY)) - { - Print("TRACE: Weekly ADX blockiert BUY-Entry"); - return; - } - Print("TRACE: Versuche KAUF-Trade zu platzieren (Trade #", trades_in_current_crossover + 1, ")"); - if(PlatziereTrade(ORDER_TYPE_BUY)) - { - trades_in_current_crossover++; - } - } - else if(bearish_signal && !PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) - { - if(!IsWeeklyADXTrendFavorable(ORDER_TYPE_SELL)) - { - Print("TRACE: Weekly ADX blockiert SELL-Entry"); - return; - } - Print("TRACE: Versuche VERKAUF-Trade zu platzieren (Trade #", trades_in_current_crossover + 1, ")"); - if(PlatziereTrade(ORDER_TYPE_SELL)) - { - trades_in_current_crossover++; - } - } - else if(PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) - { - Print("TRACE: Position bereits offen - kein neuer Trade"); - } - } -} - -//+------------------------------------------------------------------+ -//| Trade platzieren (Place trade) | -//+------------------------------------------------------------------+ -bool PlatziereTrade(ENUM_ORDER_TYPE order_type) -{ - Print("TRACE: Versuche Trade zu platzieren - Typ: ", (order_type == ORDER_TYPE_BUY) ? "KAUF" : "VERKAUF"); - Print("TRACE: Lot: ", LotGröße); - - bool success = false; - - if(order_type == ORDER_TYPE_BUY) - { - success = trade.Buy(LotGröße, _Symbol, 0, 0, 0, "EMA Crossover Trade"); - } - else - { - success = trade.Sell(LotGröße, _Symbol, 0, 0, 0, "EMA Crossover Trade"); - } - - if(success) - { - ticket = (int)trade.ResultOrder(); - Print("TRACE: Trade erfolgreich platziert: ", (order_type == ORDER_TYPE_BUY) ? "KAUF" : "VERKAUF", " Ticket: ", ticket); - - //--- Trade-Öffnungszeit speichern (Save trade opening time) - trade_open_time = iTime(_Symbol, Timeframe, 0); - g_last_sl_adjust_success_time = 0; - Print("TRACE: Trade-Öffnungszeit: ", TimeToString(trade_open_time)); - - //--- Überwachung zurücksetzen (Reset monitoring) - überwachung_aktiv = false; - preis_trigger_aktiv = false; - steigung_trigger_aktiv = false; - - return true; - } - else - { - Print("TRACE: Fehler beim Platzieren des Trades - Retcode: ", trade.ResultRetcode()); - Print("TRACE: Fehlerbeschreibung: ", trade.ResultRetcodeDescription()); - - return false; - } -} - -//+------------------------------------------------------------------+ -//| Mindestgewinn fuer Trailing erreicht? | -//+------------------------------------------------------------------+ -bool TrailingActivationReached(const double position_profit, const ENUM_POSITION_TYPE position_type, - const double pips_multiplier) -{ - if(TrailingActivationPips <= 0.0) - return (position_profit > 0.0); - - const double open_px = PositionGetDouble(POSITION_PRICE_OPEN); - if(position_type == POSITION_TYPE_BUY) - { - const double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); - return ((bid - open_px) / _Point / pips_multiplier >= TrailingActivationPips); - } - const double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); - return ((open_px - ask) / _Point / pips_multiplier >= TrailingActivationPips); -} - -//+------------------------------------------------------------------+ -//| Trades verwalten (Manage trades) | -//+------------------------------------------------------------------+ -void VerwalteTrades() -{ - if(!PositionSelectByMagic(_Symbol, (ulong)MagicNumber)) - return; - - if(UseStaleStopLossExit && StaleStopLossSeconds > 0) - { - const datetime stale_ref = (g_last_sl_adjust_success_time > 0) - ? g_last_sl_adjust_success_time - : (datetime)PositionGetInteger(POSITION_TIME); - if(TimeCurrent() - stale_ref >= StaleStopLossSeconds) - { - SchließePosition("Stale stop loss - keine SL-Anpassung"); - return; - } - } - - double position_profit = PositionGetDouble(POSITION_PROFIT); - ENUM_POSITION_TYPE position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - - double pips_multiplier = (_Digits == 3 || _Digits == 5) ? 10.0 : 1.0; - const double trail_dist = TrailingStop * _Point * pips_multiplier; - const int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS); - const long stops_level = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL); - const double min_dist = (double)stops_level * _Point; - - //--- Gleitender Stop (Trailing Stop) - if(UseTrailingStop && TrailingStop > 0.0 && TrailingActivationReached(position_profit, position_type, pips_multiplier)) - { - if(position_type == POSITION_TYPE_BUY) - { - const double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); - double new_stop_loss = NormalizeDouble(bid - trail_dist, digits); - if(min_dist > 0.0 && bid - new_stop_loss < min_dist) - new_stop_loss = NormalizeDouble(bid - min_dist, digits); - const double current_stop_loss = PositionGetDouble(POSITION_SL); - if(new_stop_loss < bid && new_stop_loss > 0.0 && new_stop_loss > current_stop_loss) - ÄndereStopLoss(new_stop_loss); - } - else if(position_type == POSITION_TYPE_SELL) - { - const double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); - double new_stop_loss = NormalizeDouble(ask + trail_dist, digits); - if(min_dist > 0.0 && new_stop_loss - ask < min_dist) - new_stop_loss = NormalizeDouble(ask + min_dist, digits); - const double current_stop_loss = PositionGetDouble(POSITION_SL); - if(new_stop_loss > ask && new_stop_loss > 0.0 && - (new_stop_loss < current_stop_loss || current_stop_loss == 0.0)) - ÄndereStopLoss(new_stop_loss); - } - } - - //--- Ausstieg bei Preis unter/über EMA (Exit when price below/above EMA) - if(ArraySize(ema_array) >= 1) - { - double aktueller_close = iClose(_Symbol, Timeframe, 0); - double ema_aktuell = ema_array[0]; - bool exit_bullish = (position_type == POSITION_TYPE_SELL && aktueller_close > ema_aktuell); - bool exit_bearish = (position_type == POSITION_TYPE_BUY && aktueller_close < ema_aktuell); - - if(exit_bullish || exit_bearish) - { - Print("TRACE: Ausstiegssignal - Close: ", aktueller_close, " EMA: ", ema_aktuell); - SchließePosition("EMA Crossover Exit"); - - Print("TRACE: Position geschlossen - Trade-Counter bleibt bei ", trades_in_current_crossover); - } - } - - //--- Profit-Prüfung nach X Bars (Profit check after X bars) - if(CloseUnprofitableTrades && trade_open_time != 0 && PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) - { - Print("TRACE: Profit-Prüfung aktiviert - CloseUnprofitableTrades: ", CloseUnprofitableTrades); - PrüfeProfitNachBars(); - } - else if(!CloseUnprofitableTrades) - { - Print("TRACE: Profit-Prüfung deaktiviert - CloseUnprofitableTrades: ", CloseUnprofitableTrades); - } -} - -//+------------------------------------------------------------------+ -//| Profit-Prüfung nach X Bars (Profit check after X bars) | -//+------------------------------------------------------------------+ -void PrüfeProfitNachBars() -{ - if(!PositionSelectByMagic(_Symbol, (ulong)MagicNumber)) - { - return; // Keine Position offen - } - - datetime current_bar_time = iTime(_Symbol, Timeframe, 0); - int bars_since_trade_open = iBarShift(_Symbol, Timeframe, trade_open_time); - - Print("TRACE: Bars seit Trade-Öffnung: ", bars_since_trade_open, "/", ProfitCheckBars); - - //--- Prüfe ob genügend Bars vergangen sind (Check if enough bars have passed) - if(bars_since_trade_open >= ProfitCheckBars) - { - double position_profit = PositionGetDouble(POSITION_PROFIT); - double position_volume = PositionGetDouble(POSITION_VOLUME); - ENUM_POSITION_TYPE position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - - Print("TRACE: Profit-Prüfung nach ", ProfitCheckBars, " Bars"); - Print("TRACE: Position Profit: ", position_profit, " USD"); - - //--- Schließe Position wenn nicht im Profit (Close position if not in profit) - if(position_profit <= 0) - { - Print("TRACE: Position nicht im Profit - Schließe Position"); - SchließePosition("Profit Check - Unprofitable"); - - //--- Trade-Öffnungszeit zurücksetzen (Reset trade opening time) - trade_open_time = 0; - Print("TRACE: Trade-Öffnungszeit zurückgesetzt"); - } - else - { - Print("TRACE: Position im Profit - Behalte Position"); - //--- Trade-Öffnungszeit zurücksetzen um weitere Prüfungen zu vermeiden (Reset to avoid further checks) - trade_open_time = 0; - } - } -} - -//+------------------------------------------------------------------+ -//| Stop Loss ändern (Modify Stop Loss) | -//+------------------------------------------------------------------+ -void ÄndereStopLoss(double new_stop_loss) -{ - Print("TRACE: Versuche Stop Loss zu ändern auf: ", new_stop_loss); - - bool success = ModifyPositionByMagic(trade, _Symbol, (ulong)MagicNumber, new_stop_loss, PositionGetDouble(POSITION_TP)); - - if(success) - { - g_last_sl_adjust_success_time = TimeCurrent(); - Print("TRACE: Stop Loss erfolgreich geändert auf: ", new_stop_loss); - } - else - { - Print("TRACE: Fehler beim Ändern des Stop Loss - Retcode: ", trade.ResultRetcode()); - Print("TRACE: Fehlerbeschreibung: ", trade.ResultRetcodeDescription()); - } -} - -//+------------------------------------------------------------------+ -//| Position schließen (Close position) | -//+------------------------------------------------------------------+ -void SchließePosition(string reason = "Unbekannt") -{ - Print("TRACE: Versuche Position zu schließen - Grund: ", reason); - - bool success = ClosePositionByMagic(trade, _Symbol, (ulong)MagicNumber); - - if(success) - { - g_last_sl_adjust_success_time = 0; - Print("TRACE: Position erfolgreich geschlossen - Grund: ", reason); - } - else - { - Print("TRACE: Fehler beim Schließen der Position - Retcode: ", trade.ResultRetcode()); - Print("TRACE: Fehlerbeschreibung: ", trade.ResultRetcodeDescription()); - } -} - -//+------------------------------------------------------------------+ diff --git a/frontline/cluster-fuck/EMASlopeDistanceCocktailXAUUSD-trailing/report.html b/frontline/cluster-fuck/EMASlopeDistanceCocktailXAUUSD-trailing/report.html deleted file mode 100644 index 8d9931ff2cb1f08db57f053ae8cae2d908f9597f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1883870 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 z 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

%OyhTlK?d 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 - -// Input parameters -input int RSIPeriod = 28; // RSI period -input double OverboughtLevel = 60; // Overbought level -input double OversoldLevel = 8; // Oversold level -input int TakeProfitPips = 175; // Take profit in pips -input int StopLossPips = 5; // Stop loss in pips -input double MaxLotSize = 0.1; // Maximum lot size -input int MaxSpread = 1000; // Maximum allowed spread in pips -input int MaxDuration = 270; // Maximum trade duration in hours -input bool UseStopLoss = false; // Use stop loss -input bool UseTakeProfit = false; // Use take profit -input bool UseRSIExit = true; // Use RSI for exit -input double RSIExitLevel = 55; // RSI level to exit (50 = neutral) -input bool CloseOutsideSession = false; // Close trades outside Asian session -input color PanelBackground = clrBlack; // Panel background color -input color PanelText = clrWhite; // Panel text color -input int PanelX = 10; // Panel X position -input int PanelY = 20; // Panel Y position - -// Global variables -CTrade trade; -int rsiHandle; -bool isPositionOpen = false; -double positionOpenPrice = 0; -datetime positionOpenTime = 0; -ENUM_POSITION_TYPE lastPositionType = POSITION_TYPE_BUY; -bool sessionCloseAttempted = false; // Track if we've attempted to close positions for current session - -// RSI crossover variables -double rsiCurrent = 0; -double rsiPrevious = 0; -double rsiPrevious2 = 0; -bool rsiCrossedOverbought = false; -bool rsiCrossedOversold = false; -bool rsiCrossedExitLevel = false; - -// Panel objects -string panelName = "RSIPanel"; -int panelWidth = 200; -int panelHeight = 200; -int labelHeight = 20; -int labelSpacing = 5; - -// Session times (UTC) -const int AsianSessionStart = 0; // 00:00 UTC -const int AsianSessionEnd = 8; // 08:00 UTC - -//+------------------------------------------------------------------+ -//| Create panel | -//+------------------------------------------------------------------+ -void CreatePanel() -{ - // Create panel background - ObjectCreate(0, panelName, OBJ_RECTANGLE_LABEL, 0, 0, 0); - ObjectSetInteger(0, panelName, OBJPROP_XDISTANCE, PanelX); - ObjectSetInteger(0, panelName, OBJPROP_YDISTANCE, PanelY); - ObjectSetInteger(0, panelName, OBJPROP_XSIZE, panelWidth); - ObjectSetInteger(0, panelName, OBJPROP_YSIZE, panelHeight); - ObjectSetInteger(0, panelName, OBJPROP_BGCOLOR, PanelBackground); - ObjectSetInteger(0, panelName, OBJPROP_BORDER_TYPE, BORDER_FLAT); - ObjectSetInteger(0, panelName, OBJPROP_CORNER, CORNER_LEFT_UPPER); - ObjectSetInteger(0, panelName, OBJPROP_COLOR, PanelText); - ObjectSetInteger(0, panelName, OBJPROP_STYLE, STYLE_SOLID); - ObjectSetInteger(0, panelName, OBJPROP_WIDTH, 1); - ObjectSetInteger(0, panelName, OBJPROP_BACK, false); - ObjectSetInteger(0, panelName, OBJPROP_SELECTABLE, false); - ObjectSetInteger(0, panelName, OBJPROP_SELECTED, false); - ObjectSetInteger(0, panelName, OBJPROP_HIDDEN, true); - ObjectSetInteger(0, panelName, OBJPROP_ZORDER, 0); - - // Create title label - ObjectCreate(0, panelName + "Title", OBJ_LABEL, 0, 0, 0); - ObjectSetInteger(0, panelName + "Title", OBJPROP_XDISTANCE, PanelX + 5); - ObjectSetInteger(0, panelName + "Title", OBJPROP_YDISTANCE, PanelY + 5); - ObjectSetInteger(0, panelName + "Title", OBJPROP_CORNER, CORNER_LEFT_UPPER); - ObjectSetString(0, panelName + "Title", OBJPROP_TEXT, "RSI Reversal"); - ObjectSetInteger(0, panelName + "Title", OBJPROP_COLOR, PanelText); - ObjectSetInteger(0, panelName + "Title", OBJPROP_FONTSIZE, 10); - - // Create score labels - CreateScoreLabel("RSI", "RSI: ", 0); - CreateScoreLabel("Position", "Position: ", 1); - CreateScoreLabel("Spread", "Spread: ", 2); - CreateScoreLabel("Session", "Session: ", 3); - CreateScoreLabel("SL", "Stop Loss: ", 4); - CreateScoreLabel("TP", "Take Profit: ", 5); - CreateScoreLabel("Cross", "Cross: ", 6); -} - -//+------------------------------------------------------------------+ -//| Create score label | -//+------------------------------------------------------------------+ -void CreateScoreLabel(string name, string text, int index) -{ - ObjectCreate(0, panelName + name, OBJ_LABEL, 0, 0, 0); - ObjectSetInteger(0, panelName + name, OBJPROP_XDISTANCE, PanelX + 5); - ObjectSetInteger(0, panelName + name, OBJPROP_YDISTANCE, PanelY + 30 + index * (labelHeight + labelSpacing)); - ObjectSetInteger(0, panelName + name, OBJPROP_CORNER, CORNER_LEFT_UPPER); - ObjectSetString(0, panelName + name, OBJPROP_TEXT, text); - ObjectSetInteger(0, panelName + name, OBJPROP_COLOR, PanelText); - ObjectSetInteger(0, panelName + name, OBJPROP_FONTSIZE, 8); -} - -//+------------------------------------------------------------------+ -//| Update panel values | -//+------------------------------------------------------------------+ -void UpdatePanel(double rsi, string position, int spread, string session, double sl, double tp, string crossInfo) -{ - ObjectSetString(0, panelName + "RSI", OBJPROP_TEXT, "RSI: " + DoubleToString(rsi, 2)); - ObjectSetString(0, panelName + "Position", OBJPROP_TEXT, "Position: " + position); - ObjectSetString(0, panelName + "Spread", OBJPROP_TEXT, "Spread: " + IntegerToString(spread) + " pips"); - ObjectSetString(0, panelName + "Session", OBJPROP_TEXT, "Session: " + session); - ObjectSetString(0, panelName + "SL", OBJPROP_TEXT, "Stop Loss: " + IntegerToString(StopLossPips) + " pips"); - ObjectSetString(0, panelName + "TP", OBJPROP_TEXT, "Take Profit: " + IntegerToString(TakeProfitPips) + " pips"); - ObjectSetString(0, panelName + "Cross", OBJPROP_TEXT, "Cross: " + crossInfo); -} - -//+------------------------------------------------------------------+ -//| Check if current time is in Asian session | -//+------------------------------------------------------------------+ -bool IsAsianSession() -{ - datetime currentTime = TimeCurrent(); - MqlDateTime timeStruct; - TimeToStruct(currentTime, timeStruct); - - return (timeStruct.hour >= AsianSessionStart && timeStruct.hour < AsianSessionEnd); -} - -//+------------------------------------------------------------------+ -//| Get current session name | -//+------------------------------------------------------------------+ -string GetCurrentSession() -{ - datetime currentTime = TimeCurrent(); - MqlDateTime timeStruct; - TimeToStruct(currentTime, timeStruct); - - if(timeStruct.hour >= AsianSessionStart && timeStruct.hour < AsianSessionEnd) - return "Asian"; - else if(timeStruct.hour >= 8 && timeStruct.hour < 16) - return "London"; - else if(timeStruct.hour >= 13 && timeStruct.hour < 21) - return "New York"; - else - return "Other"; -} - -//+------------------------------------------------------------------+ -//| Check if trading is allowed | -//+------------------------------------------------------------------+ -bool IsTradingAllowed() -{ - // Check if market is open - if(!SymbolInfoInteger(_Symbol, SYMBOL_TRADE_MODE) == SYMBOL_TRADE_MODE_FULL) - { - return false; - } - - // Check if we have enough money - if(AccountInfoDouble(ACCOUNT_MARGIN_FREE) <= 0) - { - return false; - } - - return true; -} - -//+------------------------------------------------------------------+ -//| Check RSI crossover conditions | -//+------------------------------------------------------------------+ -void CheckRSICrossover() -{ - // Reset crossover flags - rsiCrossedOverbought = false; - rsiCrossedOversold = false; - rsiCrossedExitLevel = false; - - // Check for overbought crossover (RSI crosses above overbought level) - if(rsiPrevious < OverboughtLevel && rsiCurrent >= OverboughtLevel) - { - rsiCrossedOverbought = true; - } - - // Check for oversold crossover (RSI crosses below oversold level) - if(rsiPrevious > OversoldLevel && rsiCurrent <= OversoldLevel) - { - rsiCrossedOversold = true; - } - - // Check for exit level crossover - if(rsiPrevious < RSIExitLevel && rsiCurrent >= RSIExitLevel) - { - rsiCrossedExitLevel = true; - } - else if(rsiPrevious > RSIExitLevel && rsiCurrent <= RSIExitLevel) - { - rsiCrossedExitLevel = true; - } -} - -//+------------------------------------------------------------------+ -//| Expert initialization function | -//+------------------------------------------------------------------+ -int OnInit() -{ - // Initialize RSI indicator - rsiHandle = iRSI(_Symbol, PERIOD_M15, RSIPeriod, PRICE_CLOSE); - - if(rsiHandle == INVALID_HANDLE) - { - return(INIT_FAILED); - } - - // Wait a bit for the indicator to be ready - Sleep(100); - - // Initialize RSI values with retry logic - double rsi[]; - ArraySetAsSeries(rsi, true); - - int retryCount = 0; - bool rsiInitialized = false; - - while(retryCount < 10 && !rsiInitialized) - { - int copied = CopyBuffer(rsiHandle, 0, 0, 3, rsi); - if(copied >= 3) - { - rsiCurrent = rsi[0]; - rsiPrevious = rsi[1]; - rsiPrevious2 = rsi[2]; - rsiInitialized = true; - } - else - { - retryCount++; - Sleep(100); - } - } - - if(!rsiInitialized) - { - // Don't fail initialization, just set default values - rsiCurrent = 50.0; - rsiPrevious = 50.0; - rsiPrevious2 = 50.0; - } - - // Create panel - CreatePanel(); - - return(INIT_SUCCEEDED); -} - -//+------------------------------------------------------------------+ -//| Expert deinitialization function | -//+------------------------------------------------------------------+ -void OnDeinit(const int reason) -{ - // Release indicator handles - IndicatorRelease(rsiHandle); - - // Remove panel objects - ObjectsDeleteAll(0, panelName); -} - -//+------------------------------------------------------------------+ -//| Close all trades for the current symbol | -//+------------------------------------------------------------------+ -bool CloseAllTrades(string reason = "") -{ - bool allClosed = true; - int totalPositions = PositionsTotal(); - - if(totalPositions == 0) - return true; - - // Check if there are any positions with our magic number - bool hasOurPositions = false; - for(int i = 0; i < totalPositions; i++) - { - if(PositionGetSymbol(i) == _Symbol && PositionGetInteger(POSITION_MAGIC) == 123456) - { - hasOurPositions = true; - break; - } - } - - for(int i = totalPositions - 1; i >= 0; i--) - { - if(PositionGetSymbol(i) == _Symbol) - { - // Try to close position with retry logic - int retryCount = 0; - bool positionClosed = false; - - while(retryCount < 3 && !positionClosed) - { - if(trade.PositionClose(_Symbol)) - { - isPositionOpen = false; - positionClosed = true; - } - else - { - int error = GetLastError(); - - // If error is 4756 (Trade disabled), wait longer before retry - if(error == 4756) - { - Sleep(5000); // Wait 5 seconds before retry - retryCount++; - } - else - { - // For other errors, break the loop - break; - } - } - } - - if(!positionClosed) - { - allClosed = false; - } - } - } - - return allClosed; -} - -//+------------------------------------------------------------------+ -//| Expert tick function | -//+------------------------------------------------------------------+ -void OnTick() -{ - // Check if trading is allowed - if(!IsTradingAllowed()) - { - return; - } - - // Check if we're in Asian session - if(!IsAsianSession()) - { - // Close all positions if outside Asian session and CloseOutsideSession is true - if(CloseOutsideSession && !sessionCloseAttempted) - { - CloseAllTrades("Outside Asian session"); - sessionCloseAttempted = true; - } - return; - } - else - { - // Reset the session close attempt flag when we enter Asian session - sessionCloseAttempted = false; - } - - // Get current spread - double spread = SymbolInfoDouble(_Symbol, SYMBOL_ASK) - SymbolInfoDouble(_Symbol, SYMBOL_BID); - int spreadInPips = (int)(spread / _Point); - - // Check if spread is too high - if(spreadInPips > MaxSpread) - { - return; - } - - // Get RSI values from bar data - double rsi[]; - ArraySetAsSeries(rsi, true); - - int copied = CopyBuffer(rsiHandle, 0, 0, 3, rsi); - if(copied < 3) - { - return; - } - - // Update RSI values - rsiPrevious2 = rsiPrevious; - rsiPrevious = rsiCurrent; - rsiCurrent = rsi[0]; - - // Validate RSI values - if(rsiCurrent == 0 || rsiPrevious == 0) - { - return; - } - - // Check for RSI crossovers - CheckRSICrossover(); - - // Get current prices - double currentBid = SymbolInfoDouble(_Symbol, SYMBOL_BID); - double currentAsk = SymbolInfoDouble(_Symbol, SYMBOL_ASK); - - // Get position status - string positionStatus = "None"; - for(int i = 0; i < PositionsTotal(); i++) - { - if(PositionGetSymbol(i) == _Symbol) - { - ENUM_POSITION_TYPE posType = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - positionStatus = (posType == POSITION_TYPE_BUY) ? "Long" : "Short"; - break; - } - } - - // Calculate stop loss and take profit levels - double sl = 0; - double tp = 0; - - // Prepare crossover info for panel - string crossInfo = "None"; - if(rsiCrossedOverbought) crossInfo = "Overbought"; - else if(rsiCrossedOversold) crossInfo = "Oversold"; - else if(rsiCrossedExitLevel) crossInfo = "Exit"; - - // Update panel - UpdatePanel(rsiCurrent, positionStatus, spreadInPips, GetCurrentSession(), sl, tp, crossInfo); - - // Check for open position - bool hasOpenPosition = false; - for(int i = 0; i < PositionsTotal(); i++) - { - if(PositionGetSymbol(i) == _Symbol) - { - hasOpenPosition = true; - - // Get position details - double positionProfit = PositionGetDouble(POSITION_PROFIT); - double positionVolume = PositionGetDouble(POSITION_VOLUME); - double openPrice = PositionGetDouble(POSITION_PRICE_OPEN); - ENUM_POSITION_TYPE posType = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - - // Check for RSI exit if enabled - if(UseRSIExit && rsiCrossedExitLevel) - { - bool shouldExit = false; - - // For long positions, exit when RSI crosses above exit level - if(posType == POSITION_TYPE_BUY && rsiCurrent >= RSIExitLevel && rsiPrevious < RSIExitLevel) - { - shouldExit = true; - } - // For short positions, exit when RSI crosses below exit level - else if(posType == POSITION_TYPE_SELL && rsiCurrent <= RSIExitLevel && rsiPrevious > RSIExitLevel) - { - shouldExit = true; - } - - if(shouldExit) - { - CloseAllTrades("RSI Exit Crossover"); - return; - } - } - - // Check for timeout - if(TimeCurrent() - positionOpenTime > MaxDuration * 3600) - { - CloseAllTrades("Timeout"); - return; - } - - break; - } - } - - // If no position is open, look for entry signals based on RSI crossover - if(!hasOpenPosition) - { - // Place buy order if RSI crosses below oversold level (oversold crossover) - if(rsiCrossedOversold) - { - double sl = UseStopLoss ? currentBid - StopLossPips * _Point : 0; - double tp = UseTakeProfit ? currentBid + TakeProfitPips * _Point : 0; - - if(UseStopLoss && sl >= currentBid) - return; - if(UseTakeProfit && tp <= currentBid) - return; - - // Set trade parameters - trade.SetDeviationInPoints(3); - trade.SetTypeFilling(ORDER_FILLING_IOC); - trade.SetExpertMagicNumber(123456); - - // Place buy order using CTrade - if(trade.Buy(MaxLotSize, _Symbol, currentAsk, sl, tp, "RSI Oversold Crossover Buy")) - { - isPositionOpen = true; - positionOpenPrice = currentAsk; - positionOpenTime = TimeCurrent(); - lastPositionType = POSITION_TYPE_BUY; - } - } - // Place sell order if RSI crosses above overbought level (overbought crossover) - else if(rsiCrossedOverbought) - { - double sl = UseStopLoss ? currentAsk + StopLossPips * _Point : 0; - double tp = UseTakeProfit ? currentAsk - TakeProfitPips * _Point : 0; - - if(UseStopLoss && sl <= currentAsk) - return; - if(UseTakeProfit && tp >= currentAsk) - return; - - // Set trade parameters - trade.SetDeviationInPoints(3); - trade.SetTypeFilling(ORDER_FILLING_IOC); - trade.SetExpertMagicNumber(123456); - - // Place sell order using CTrade - if(trade.Sell(MaxLotSize, _Symbol, currentBid, sl, tp, "RSI Overbought Crossover Sell")) - { - isPositionOpen = true; - positionOpenPrice = currentBid; - positionOpenTime = TimeCurrent(); - lastPositionType = POSITION_TYPE_SELL; - } - } - } -} \ No newline at end of file diff --git a/frontline/cluster-fuck/RSIReversalAsianEURUSD/test-balance.jpg b/frontline/cluster-fuck/RSIReversalAsianEURUSD/test-balance.jpg deleted file mode 100644 index 2901f4b919a1f37b959f2ca6a0bac66dc02d7657..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256188 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�ILynPqw}sIGEEL89HQNg%uiSgG+*d@WBI{k2d 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 F`7ijPTY3Nh diff --git a/frontline/cluster-fuck/RSIScalpingBTCUSD-trailing/main.mq5 b/frontline/cluster-fuck/RSIScalpingBTCUSD-trailing/main.mq5 deleted file mode 100644 index b34e0a2..0000000 --- a/frontline/cluster-fuck/RSIScalpingBTCUSD-trailing/main.mq5 +++ /dev/null @@ -1,581 +0,0 @@ -//+------------------------------------------------------------------+ -//| RSIScalping.mq5 | -//| Copyright 2025, MetaQuotes Ltd. | -//| https://www.mql5.com | -//+------------------------------------------------------------------+ -#property copyright "Copyright 2025, MetaQuotes Ltd." -#property link "https://www.mql5.com" -#property version "1.01" - -#include -#include "../_united/MagicNumberHelpers.mqh" - -//--- Input parameters -input ENUM_TIMEFRAMES TimeFrame = PERIOD_H1; // Timeframe for Analysis -input int RSI_Period = 14; // RSI Period -input ENUM_APPLIED_PRICE RSI_Applied_Price = PRICE_CLOSE; // RSI Applied Price -input double RSI_Overbought = 90; // RSI Overbought Level -input double RSI_Oversold = 73; // RSI Oversold Level -input double RSI_Target_Buy = 88; // RSI Target for Buy Exit -input double RSI_Target_Sell = 48; // RSI Target for Sell Exit -input int BarsToWait = 6; // Bars to wait when RSI goes against position -input double LotSize = 0.1; // Lot Size -input int MagicNumber = 123459123; // Magic Number -input int Slippage = 3; // Slippage in points - -input group "=== Reversal escape (intrabar, multi-signal) ===" -input bool UseReversalEscape = true; // run while in position every tick -input int ReversalATRPeriod = 14; // ATR lookback on signal timeframe -input double ReversalAdverseAtrMult = 5.25; // close if price vs entry >= this * ATR -input int ReversalSignsRequired = 2; // how many independent signs must align -input double ReversalRsiVelocity = 16.0; // RSI points drop (long) / rise (short) vs prior buffer -input double ReversalBodyAtrMult = 5.1; // last closed bar body >= this * ATR counts as one sign - -input group "=== Trailing stop ===" -input bool UseTrailingStop = true; // move SL behind bid/ask while in profit -input double TrailingStopDistancePoints = 120.0; // SL distance from bid/ask (points) -input double TrailingActivationPoints = 0.0; // min profit before trailing (0 = same as distance) - -//--- Global variables -CTrade trade; -int rsi_handle; -double rsi_buffer[]; -double rsi_prev, rsi_current, rsi_two_bars_ago; -bool position_open = false; -int position_ticket = 0; -ENUM_POSITION_TYPE current_position_type = POSITION_TYPE_BUY; -datetime last_bar_time = 0; -bool rsi_against_position = false; -int bars_against_count = 0; - -void ResetPositionTracking(); -void SyncTrackedPosition(); -double ATRPriceOnTF(const int period); -int CountReversalEscapeSigns(const ENUM_POSITION_TYPE ptype, const double atr); -void TryReversalEscape(); -void ApplyTrailingStop(); - -//+------------------------------------------------------------------+ -//| Expert initialization function | -//+------------------------------------------------------------------+ -int OnInit() -{ - // Initialize RSI indicator - rsi_handle = iRSI(_Symbol, TimeFrame, RSI_Period, RSI_Applied_Price); - if(rsi_handle == INVALID_HANDLE) - { - return(INIT_FAILED); - } - - // Initialize trade object - trade.SetExpertMagicNumber(MagicNumber); - trade.SetDeviationInPoints(Slippage); - trade.SetTypeFilling(ORDER_FILLING_FOK); - - // Allocate arrays - ArraySetAsSeries(rsi_buffer, true); - - return(INIT_SUCCEEDED); -} - -//+------------------------------------------------------------------+ -//| Expert deinitialization function | -//+------------------------------------------------------------------+ -void OnDeinit(const int reason) -{ - if(rsi_handle != INVALID_HANDLE) - IndicatorRelease(rsi_handle); -} - -//+------------------------------------------------------------------+ -//| Expert tick function | -//+------------------------------------------------------------------+ -void OnTick() -{ - // Check if we have enough bars - if(Bars(_Symbol, TimeFrame) < RSI_Period + 2) - { - return; - } - - // Check if this is a new bar - datetime current_bar_time = iTime(_Symbol, TimeFrame, 0); - bool is_new_bar = (current_bar_time != last_bar_time); - bool in_position = position_open || PositionExistsByMagic(_Symbol, (ulong)MagicNumber); - - // While flat, process only on new bars. While in position, allow intrabar reversal escape checks. - if(!in_position && !is_new_bar) - { - return; - } - - // Update RSI values - if(!UpdateRSI()) - { - return; - } - - if(in_position && UseReversalEscape) - { - TryReversalEscape(); - } - - if(in_position && UseTrailingStop) - ApplyTrailingStop(); - - if(!is_new_bar) - { - return; - } - - last_bar_time = current_bar_time; - - // Keep local tracking aligned with actual terminal positions for this symbol/magic. - SyncTrackedPosition(); - - // Check for existing position - CheckExistingPosition(); - - // Check for new entry signals - only if no position exists for THIS EA (magic number) on THIS symbol - if(!position_open && !PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) - { - CheckEntrySignals(); - } -} - -//+------------------------------------------------------------------+ -//| Update RSI values | -//+------------------------------------------------------------------+ -bool UpdateRSI() -{ - if(CopyBuffer(rsi_handle, 0, 0, 3, rsi_buffer) < 3) - { - return false; - } - - rsi_current = rsi_buffer[0]; // Current bar - rsi_prev = rsi_buffer[1]; // Previous bar - rsi_two_bars_ago = rsi_buffer[2]; // Two bars ago - - return true; -} - -//+------------------------------------------------------------------+ -//| Wilder ATR in price units (signal timeframe) | -//+------------------------------------------------------------------+ -double ATRPriceOnTF(const int period) -{ - if(period < 1) - return 0.0; - - MqlRates rates[]; - const int need = period + 2; - if(CopyRates(_Symbol, TimeFrame, 0, need, rates) < need) - return 0.0; - - ArraySetAsSeries(rates, true); - double sum = 0.0; - for(int i = 1; i <= period; i++) - { - const double hl = rates[i].high - rates[i].low; - const double hc = MathAbs(rates[i].high - rates[i + 1].close); - const double lc = MathAbs(rates[i].low - rates[i + 1].close); - sum += MathMax(hl, MathMax(hc, lc)); - } - - return sum / (double)period; -} - -//+------------------------------------------------------------------+ -//| Independent adverse signs (need ReversalSignsRequired to exit) | -//+------------------------------------------------------------------+ -int CountReversalEscapeSigns(const ENUM_POSITION_TYPE ptype, const double atr) -{ - if(atr <= 0.0) - return 0; - - const double entry = PositionGetDouble(POSITION_PRICE_OPEN); - const double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); - const double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); - int signs = 0; - - if(ptype == POSITION_TYPE_BUY) - { - if(entry - bid >= ReversalAdverseAtrMult * atr) - signs++; - if(rsi_prev - rsi_current >= ReversalRsiVelocity) - signs++; - } - else if(ptype == POSITION_TYPE_SELL) - { - if(ask - entry >= ReversalAdverseAtrMult * atr) - signs++; - if(rsi_current - rsi_prev >= ReversalRsiVelocity) - signs++; - } - else - { - return 0; - } - - MqlRates rates[]; - if(CopyRates(_Symbol, TimeFrame, 0, 4, rates) >= 4) - { - ArraySetAsSeries(rates, true); - const double body = MathAbs(rates[1].close - rates[1].open); - if(body >= ReversalBodyAtrMult * atr) - { - if(ptype == POSITION_TYPE_BUY && rates[1].close < rates[1].open) - signs++; - else if(ptype == POSITION_TYPE_SELL && rates[1].close > rates[1].open) - signs++; - } - - if(ptype == POSITION_TYPE_BUY) - { - if(rates[1].close < rates[2].close && rates[2].close < rates[3].close) - signs++; - } - else - { - if(rates[1].close > rates[2].close && rates[2].close > rates[3].close) - signs++; - } - } - - return signs; -} - -//+------------------------------------------------------------------+ -//| Cut losers fast on violent reversals (evaluated every tick) | -//+------------------------------------------------------------------+ -void TryReversalEscape() -{ - ulong live_ticket = GetPositionTicketByMagic(_Symbol, (ulong)MagicNumber); - if(live_ticket == 0) - return; - if(!PositionSelectByTicketSymbolAndMagic(live_ticket, _Symbol, (ulong)MagicNumber)) - return; - - const ENUM_POSITION_TYPE ptype = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - const double atr = ATRPriceOnTF(ReversalATRPeriod); - if(atr <= 0.0) - return; - - const int signs = CountReversalEscapeSigns(ptype, atr); - if(signs < ReversalSignsRequired) - return; - - ClosePosition(); - Print("RSIScalpingBTCUSD: reversal escape signs=", signs, " need=", ReversalSignsRequired, - " ATR=", DoubleToString(atr, (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS))); -} - -//+------------------------------------------------------------------+ -//| Trail SL behind favorable price (every tick when enabled) | -//+------------------------------------------------------------------+ -void ApplyTrailingStop() -{ - if(TrailingStopDistancePoints <= 0.0) - return; - if(!PositionSelectByMagic(_Symbol, (ulong)MagicNumber)) - return; - - const double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT); - if(point <= 0.0) - return; - - const int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS); - const double trail_dist = TrailingStopDistancePoints * point; - const double activation_pts = (TrailingActivationPoints > 0.0) - ? TrailingActivationPoints - : TrailingStopDistancePoints; - const double activation = activation_pts * point; - const long stops_level = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL); - const double min_dist = (double)stops_level * point; - - const ENUM_POSITION_TYPE ptype = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - const double entry = PositionGetDouble(POSITION_PRICE_OPEN); - const double cur_sl = PositionGetDouble(POSITION_SL); - const double cur_tp = PositionGetDouble(POSITION_TP); - - if(ptype == POSITION_TYPE_BUY) - { - const double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); - if(bid - entry <= activation) - return; - - double new_sl = NormalizeDouble(bid - trail_dist, digits); - if(min_dist > 0.0 && bid - new_sl < min_dist) - new_sl = NormalizeDouble(bid - min_dist, digits); - - if(new_sl >= bid || new_sl <= 0.0) - return; - if(cur_sl > 0.0 && new_sl <= cur_sl) - return; - - ModifyPositionByMagic(trade, _Symbol, (ulong)MagicNumber, new_sl, cur_tp); - } - else if(ptype == POSITION_TYPE_SELL) - { - const double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); - if(entry - ask <= activation) - return; - - double new_sl = NormalizeDouble(ask + trail_dist, digits); - if(min_dist > 0.0 && new_sl - ask < min_dist) - new_sl = NormalizeDouble(ask + min_dist, digits); - - if(new_sl <= ask || new_sl <= 0.0) - return; - if(cur_sl > 0.0 && new_sl >= cur_sl) - return; - - ModifyPositionByMagic(trade, _Symbol, (ulong)MagicNumber, new_sl, cur_tp); - } -} - -//+------------------------------------------------------------------+ -//| Reset local position tracking | -//+------------------------------------------------------------------+ -void ResetPositionTracking() -{ - position_open = false; - position_ticket = 0; - rsi_against_position = false; - bars_against_count = 0; -} - -//+------------------------------------------------------------------+ -//| Sync local state with real position in terminal | -//+------------------------------------------------------------------+ -void SyncTrackedPosition() -{ - ulong live_ticket = GetPositionTicketByMagic(_Symbol, (ulong)MagicNumber); - if(live_ticket == 0) - { - ResetPositionTracking(); - return; - } - - // If we were not tracking (or ticket changed), start tracking the live position. - if(!position_open || position_ticket != (int)live_ticket) - { - if(PositionSelectByTicketSymbolAndMagic(live_ticket, _Symbol, (ulong)MagicNumber)) - { - position_open = true; - position_ticket = (int)live_ticket; - current_position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - rsi_against_position = false; - bars_against_count = 0; - } - return; - } -} - -//+------------------------------------------------------------------+ -//| Check existing position for exit conditions | -//+------------------------------------------------------------------+ -void CheckExistingPosition() -{ - if(!position_open) - { - return; - } - - // Check if position still exists with correct magic number AND symbol for THIS EA - if(!PositionSelectByTicketSymbolAndMagic(position_ticket, _Symbol, (ulong)MagicNumber)) - { - ResetPositionTracking(); - return; - } - - // Exit conditions based on RSI target - if(current_position_type == POSITION_TYPE_BUY) - { - // Check if RSI is against the position (below oversold) - if(rsi_current < RSI_Oversold) - { - if(!rsi_against_position) - { - rsi_against_position = true; - bars_against_count = 1; - } - else - { - bars_against_count++; - } - - // Close position if RSI has been against for Y bars - if(bars_against_count >= BarsToWait) - { - ClosePosition(); - return; - } - } - else - { - // RSI is no longer against the position, reset counter - if(rsi_against_position) - { - rsi_against_position = false; - bars_against_count = 0; - } - - // Exit long position when RSI reaches buy target - if(rsi_current >= RSI_Target_Buy) - { - ClosePosition(); - } - } - } - else if(current_position_type == POSITION_TYPE_SELL) - { - // Check if RSI is against the position (above overbought) - if(rsi_current > RSI_Overbought) - { - if(!rsi_against_position) - { - rsi_against_position = true; - bars_against_count = 1; - } - else - { - bars_against_count++; - } - - // Close position if RSI has been against for Y bars - if(bars_against_count >= BarsToWait) - { - ClosePosition(); - return; - } - } - else - { - // RSI is no longer against the position, reset counter - if(rsi_against_position) - { - rsi_against_position = false; - bars_against_count = 0; - } - - // Exit short position when RSI reaches sell target - if(rsi_current <= RSI_Target_Sell) - { - ClosePosition(); - } - } - } -} - -//+------------------------------------------------------------------+ -//| Check for entry signals | -//+------------------------------------------------------------------+ -void CheckEntrySignals() -{ - // Buy signal: RSI crosses from oversold to above oversold (checking the actual crossover) - if(rsi_two_bars_ago <= RSI_Oversold && rsi_prev > RSI_Oversold) - { - OpenBuyPosition(); - } - - // Sell signal: RSI crosses from overbought to below overbought (checking the actual crossover) - if(rsi_two_bars_ago >= RSI_Overbought && rsi_prev < RSI_Overbought) - { - OpenSellPosition(); - } -} - -//+------------------------------------------------------------------+ -//| Open buy position | -//+------------------------------------------------------------------+ -void OpenBuyPosition() -{ - // Verify no position exists for THIS EA (magic number) on THIS symbol before opening - if(PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) - { - return; // Position already exists for this EA - } - - double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); - - if(trade.Buy(LotSize, _Symbol, ask, 0, 0, "RSI Scalping Buy")) - { - ulong new_ticket = trade.ResultOrder(); - if(new_ticket > 0) - { - // Verify position was opened for THIS EA (magic number) on THIS symbol - if(PositionSelectByTicketSymbolAndMagic(new_ticket, _Symbol, (ulong)MagicNumber)) - { - position_ticket = new_ticket; - position_open = true; - current_position_type = POSITION_TYPE_BUY; - } - else - { - Print("Error: Position opened but doesn't match EA magic number or symbol"); - } - } - } -} - -//+------------------------------------------------------------------+ -//| Open sell position | -//+------------------------------------------------------------------+ -void OpenSellPosition() -{ - // Verify no position exists for THIS EA (magic number) on THIS symbol before opening - if(PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) - { - return; // Position already exists for this EA - } - - double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); - - if(trade.Sell(LotSize, _Symbol, bid, 0, 0, "RSI Scalping Sell")) - { - ulong new_ticket = trade.ResultOrder(); - if(new_ticket > 0) - { - // Verify position was opened for THIS EA (magic number) on THIS symbol - if(PositionSelectByTicketSymbolAndMagic(new_ticket, _Symbol, (ulong)MagicNumber)) - { - position_ticket = new_ticket; - position_open = true; - current_position_type = POSITION_TYPE_SELL; - } - else - { - Print("Error: Position opened but doesn't match EA magic number or symbol"); - } - } - } -} - -//+------------------------------------------------------------------+ -//| Close current position | -//+------------------------------------------------------------------+ -void ClosePosition() -{ - bool position_exists_before_close = PositionExistsByMagic(_Symbol, (ulong)MagicNumber); - if(!position_exists_before_close) - { - ResetPositionTracking(); - return; - } - - // Close position using helper that verifies symbol AND magic number for THIS EA - if(ClosePositionByMagic(trade, _Symbol, (ulong)MagicNumber)) - { - ResetPositionTracking(); - } - else - { - // Keep tracking when close fails (e.g. market closed); retry on next bar. - if(!PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) - { - ResetPositionTracking(); - } - } -} diff --git a/frontline/cluster-fuck/RSIScalpingBTCUSD-trailing/report.html b/frontline/cluster-fuck/RSIScalpingBTCUSD-trailing/report.html deleted file mode 100644 index b512b3d6580a876cd855a3c8dd54088db38de43c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 962604 zcmeFa&#!GqcHg%(NdN(li?U-i)!mORr6F0}B>Oc< zh+-4`(Gnx4lORSiXfzbTFycWbG30;2nI-ll78Dplpad|GAIMM>CrBVzN(N5qd%i5~ zy6>!7Yt_E{?W%KDle^DEP3`hWb_7t^P{n6CVd^zSdF z?|U#^O)pN5rpM{OUY|ak-k9E>KAPT5Kkwb?JL$jQNIw;y`}yg$^waPY@w+~rKA1jt z`1)^6`14}==Q92Mo%9plPG5h0`fB<+x9TeW_j~EuchXOOn!f8>>GR)8Kk4P^FHe7I zdg(8|kN^K5{T6)fY5LvY`s{n~HGUoK`Z)cxr|HTs|IX7-{?>2)Pv8GXZ~nWlzm$GQ zc?~~#{?u=#@BcXcya$In!vB3f{rkW&R{F2^)Boez$A|CxDE*t? z^E7?t)AT*Kim&3c`99{~hAW>Q+KBJ`G{uU)58waW=_@~ze#b}Y&+#Y!dgAr)5S9GX z{+-12X^O+Uht_|TKKWt#f3)qv^gDOH6Q4j_@%0DOw?Dg!&!zvqO)dC1{TqbeNRj{n112F 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 diff --git a/frontline/cluster-fuck/RSIScalpingBTCUSD-trailing/report.png b/frontline/cluster-fuck/RSIScalpingBTCUSD-trailing/report.png deleted file mode 100644 index 52287c6f0d85f6e56ba2587bc37989176526fc82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8384 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 diff --git a/frontline/cluster-fuck/RSIScalpingXAUUSD-trailing/123.set b/frontline/cluster-fuck/RSIScalpingXAUUSD-trailing/123.set deleted file mode 100644 index 0c7f7c1..0000000 --- a/frontline/cluster-fuck/RSIScalpingXAUUSD-trailing/123.set +++ /dev/null @@ -1,34 +0,0 @@ -; RSIScalpingXAUUSD-trailing — matches main.mq5 v1.06 default inputs -; saved on 2026.05.01 22:32:43 -; MT5 Strategy Tester: Inputs → Load -; -TimeFrame=16385||15||0||16385||N -RSI_Period=14||14||1||140||N -RSI_Applied_Price=1||1||0||7||N -RSI_Overbought=71.0||0||2||100||N -RSI_Oversold=57.0||0||2||100||N -UseEntrySlopeFilter=false||false||0||true||N -EntryMinSlopePerBar=1.0||1.0||0.100000||10.000000||N -RSI_Target_Buy=80.0||0||2||100||N -RSI_Target_Sell=57.0||0||2||100||N -BarsToWait=1||0||1||50||N -LotSize=0.1||0.1||0.010000||1.000000||N -MagicNumber=129102315||129102315||1||1291023150||N -Slippage=3||3||1||30||N -; === Reversal escape (intrabar, multi-signal) === -UseReversalEscape=true||false||0||true||N -ReversalEscapeTimeFrame=5||0||0||49153||N -ReversalATRPeriod=14||14||1||140||N -ReversalAdverseAtrMult=5.25||5.25||0.525000||52.500000||N -ReversalSignsRequired=1||2||1||20||N -ReversalRsiVelocity=16.0||16.0||1.600000||160.000000||N -ReversalBodyAtrMult=5.1||5.1||0.510000||51.000000||N -; === Trailing stop === -UseTrailingStop=true||false||0||true||N -TrailingStopDistancePoints=71.0||100||100||5000||Y -TrailingActivationPoints=41.0||100||100||5000||Y -; === Intrabar give-back (same bar reversals) === -UseGiveBackExit=true||false||0||true||N -GiveBackATRPeriod=14||14||1||140||N -GiveBackAtrMult=0.1||1.85||0.185000||18.500000||N -GiveBackRequireMfe=true||false||0||true||N diff --git a/frontline/cluster-fuck/RSIScalpingXAUUSD-trailing/main.mq5 b/frontline/cluster-fuck/RSIScalpingXAUUSD-trailing/main.mq5 deleted file mode 100644 index 96b6f2f..0000000 --- a/frontline/cluster-fuck/RSIScalpingXAUUSD-trailing/main.mq5 +++ /dev/null @@ -1,645 +0,0 @@ -//+------------------------------------------------------------------+ -//| RSIScalping.mq5 | -//| Copyright 2025, MetaQuotes Ltd. | -//| https://www.mql5.com | -//+------------------------------------------------------------------+ -#property copyright "Copyright 2025, MetaQuotes Ltd." -#property link "https://www.mql5.com" -#property version "1.06" - -#include -#include "../_united/MagicNumberHelpers.mqh" - -//--- Input parameters -input ENUM_TIMEFRAMES TimeFrame = PERIOD_H1; // Timeframe for Analysis -input int RSI_Period = 14; // RSI Period -input ENUM_APPLIED_PRICE RSI_Applied_Price = PRICE_CLOSE; // RSI Applied Price -input double RSI_Overbought = 71; // RSI Overbought Level -input double RSI_Oversold = 57; // RSI Oversold Level -input bool UseEntrySlopeFilter = false; // require RSI momentum on entry bars -input double EntryMinSlopePerBar = 1.0; // minimum RSI delta per bar for entry -input double RSI_Target_Buy = 80; // RSI Target for Buy Exit -input double RSI_Target_Sell = 57; // RSI Target for Sell Exit -input int BarsToWait = 1; // Bars to wait when RSI goes against position -input double LotSize = 0.1; // Lot Size -input int MagicNumber = 129102315; // Magic Number -input int Slippage = 3; // Slippage in points - -input group "=== Reversal escape (intrabar, multi-signal) ===" -input bool UseReversalEscape = true; // run while in position every tick (now uses ReversalEscapeTimeFrame) -input ENUM_TIMEFRAMES ReversalEscapeTimeFrame = PERIOD_M5; // ATR / RSI velocity / bar signs on this TF (not signal TF) -input int ReversalATRPeriod = 14; // ATR lookback on ReversalEscapeTimeFrame -input double ReversalAdverseAtrMult = 5.25; // close if price vs entry >= this * ATR -input int ReversalSignsRequired = 1; // how many independent signs must align -input double ReversalRsiVelocity = 16.0; // RSI points drop (long) / rise (short) vs prior buffer -input double ReversalBodyAtrMult = 5.1; // last closed bar body >= this * ATR counts as one sign - -input group "=== Trailing stop ===" -input bool UseTrailingStop = true; // move SL behind price while in profit -input double TrailingStopDistancePoints = 71.0; // SL distance from current bid/ask (points) -input double TrailingActivationPoints = 41.0; // min profit before trailing (0 = same as distance) - -input group "=== Intrabar give-back (same bar reversals) ===" -input bool UseGiveBackExit = true; // exit if price gives back vs best tick since entry -input int GiveBackATRPeriod = 14; // ATR period on signal timeframe (Wilder) -input double GiveBackAtrMult = 0.1; // close when retrace from peak/trough >= this * ATR -input bool GiveBackRequireMfe = true; // long: only after bid was above entry; short: ask below entry - -//--- Global variables -CTrade trade; -int rsi_handle; -int rsi_escape_handle = INVALID_HANDLE; // RSI on ReversalEscapeTimeFrame (may alias rsi_handle) -double rsi_buffer[]; -double rsi_prev, rsi_current, rsi_two_bars_ago; -bool position_open = false; -int position_ticket = 0; -ENUM_POSITION_TYPE current_position_type = POSITION_TYPE_BUY; -datetime last_bar_time = 0; -bool rsi_against_position = false; -int bars_against_count = 0; - -ulong g_giveback_track_ticket = 0; -double g_peak_bid_since_entry = 0.0; -double g_trough_ask_since_entry = 0.0; - -void ResetIntrabarGiveBackState(); -void TryGiveBackExit(); - -//+------------------------------------------------------------------+ -//| Expert initialization function | -//+------------------------------------------------------------------+ -int OnInit() -{ - // Initialize RSI indicator - rsi_handle = iRSI(_Symbol, TimeFrame, RSI_Period, RSI_Applied_Price); - if(rsi_handle == INVALID_HANDLE) - { - return(INIT_FAILED); - } - - if(ReversalEscapeTimeFrame == TimeFrame) - rsi_escape_handle = rsi_handle; - else - { - rsi_escape_handle = iRSI(_Symbol, ReversalEscapeTimeFrame, RSI_Period, RSI_Applied_Price); - if(rsi_escape_handle == INVALID_HANDLE) - { - return(INIT_FAILED); - } - } - - // Initialize trade object - trade.SetExpertMagicNumber(MagicNumber); - trade.SetDeviationInPoints(Slippage); - trade.SetTypeFilling(ORDER_FILLING_FOK); - - // Allocate arrays - ArraySetAsSeries(rsi_buffer, true); - - return(INIT_SUCCEEDED); -} - -//+------------------------------------------------------------------+ -//| Expert deinitialization function | -//+------------------------------------------------------------------+ -void OnDeinit(const int reason) -{ - if(rsi_escape_handle != INVALID_HANDLE && rsi_escape_handle != rsi_handle) - IndicatorRelease(rsi_escape_handle); - if(rsi_handle != INVALID_HANDLE) - IndicatorRelease(rsi_handle); -} - -//+------------------------------------------------------------------+ -//| Expert tick function | -//+------------------------------------------------------------------+ -void OnTick() -{ - if(Bars(_Symbol, TimeFrame) < RSI_Period + 2) - return; - - const datetime current_bar_time = iTime(_Symbol, TimeFrame, 0); - const bool new_bar = (current_bar_time != last_bar_time); - const bool in_pos = position_open || PositionExistsByMagic(_Symbol, (ulong)MagicNumber); - - if(!in_pos && !new_bar) - return; - - if(!UpdateRSI()) - return; - - if(in_pos && UseReversalEscape) - TryReversalEscape(); - - if(in_pos && UseGiveBackExit) - TryGiveBackExit(); - - if(in_pos && UseTrailingStop) - ApplyTrailingStop(); - - if(!new_bar) - return; - - last_bar_time = current_bar_time; - - ResyncPositionFromMarket(); - CheckExistingPosition(); - - if(!position_open && !PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) - CheckEntrySignals(); -} - -//+------------------------------------------------------------------+ -//| Update RSI values | -//+------------------------------------------------------------------+ -bool UpdateRSI() -{ - if(CopyBuffer(rsi_handle, 0, 0, 3, rsi_buffer) < 3) - { - return false; - } - - rsi_current = rsi_buffer[0]; // Current bar - rsi_prev = rsi_buffer[1]; // Previous bar - rsi_two_bars_ago = rsi_buffer[2]; // Two bars ago - - return true; -} - -//+------------------------------------------------------------------+ -//| Wilder ATR in price units (signal timeframe) | -//+------------------------------------------------------------------+ -double ATRPriceOnTF(const int period) -{ - if(period < 1) - return 0.0; - MqlRates rates[]; - const int need = period + 2; - if(CopyRates(_Symbol, TimeFrame, 0, need, rates) < need) - return 0.0; - ArraySetAsSeries(rates, true); - double sum = 0.0; - for(int i = 1; i <= period; i++) - { - const double hl = rates[i].high - rates[i].low; - const double hc = MathAbs(rates[i].high - rates[i + 1].close); - const double lc = MathAbs(rates[i].low - rates[i + 1].close); - sum += MathMax(hl, MathMax(hc, lc)); - } - return sum / (double)period; -} - -//+------------------------------------------------------------------+ -//| Wilder ATR on arbitrary timeframe | -//+------------------------------------------------------------------+ -double WilderATRForTF(const ENUM_TIMEFRAMES tf, const int period) -{ - if(period < 1) - return 0.0; - MqlRates rates[]; - const int need = period + 2; - if(CopyRates(_Symbol, tf, 0, need, rates) < need) - return 0.0; - ArraySetAsSeries(rates, true); - double sum = 0.0; - for(int i = 1; i <= period; i++) - { - const double hl = rates[i].high - rates[i].low; - const double hc = MathAbs(rates[i].high - rates[i + 1].close); - const double lc = MathAbs(rates[i].low - rates[i + 1].close); - sum += MathMax(hl, MathMax(hc, lc)); - } - return sum / (double)period; -} - -//+------------------------------------------------------------------+ -//| Independent adverse signs (need ReversalSignsRequired to exit) | -//+------------------------------------------------------------------+ -int CountReversalEscapeSigns(const ENUM_POSITION_TYPE ptype, const double atr) -{ - if(atr <= 0.0) - return 0; - - const double entry = PositionGetDouble(POSITION_PRICE_OPEN); - const double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); - const double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); - int signs = 0; - - double rsi_esc[]; - ArraySetAsSeries(rsi_esc, true); - const bool ok_esc_rsi = (rsi_escape_handle != INVALID_HANDLE && - CopyBuffer(rsi_escape_handle, 0, 0, 2, rsi_esc) >= 2); - - if(ptype == POSITION_TYPE_BUY) - { - if(entry - bid >= ReversalAdverseAtrMult * atr) - signs++; - if(ok_esc_rsi && rsi_esc[1] - rsi_esc[0] >= ReversalRsiVelocity) - signs++; - } - else if(ptype == POSITION_TYPE_SELL) - { - if(ask - entry >= ReversalAdverseAtrMult * atr) - signs++; - if(ok_esc_rsi && rsi_esc[0] - rsi_esc[1] >= ReversalRsiVelocity) - signs++; - } - else - return 0; - - MqlRates r[]; - if(CopyRates(_Symbol, ReversalEscapeTimeFrame, 0, 4, r) >= 4) - { - ArraySetAsSeries(r, true); - const double body = MathAbs(r[1].close - r[1].open); - if(body >= ReversalBodyAtrMult * atr) - { - if(ptype == POSITION_TYPE_BUY && r[1].close < r[1].open) - signs++; - else if(ptype == POSITION_TYPE_SELL && r[1].close > r[1].open) - signs++; - } - if(ptype == POSITION_TYPE_BUY) - { - if(r[1].close < r[2].close && r[2].close < r[3].close) - signs++; - } - else - { - if(r[1].close > r[2].close && r[2].close > r[3].close) - signs++; - } - } - - return signs; -} - -//+------------------------------------------------------------------+ -//| Cut losers fast on violent reversals (evaluated every tick) | -//+------------------------------------------------------------------+ -void TryReversalEscape() -{ - if(!PositionSelectByMagic(_Symbol, (ulong)MagicNumber)) - return; - - const ENUM_POSITION_TYPE ptype = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - const double atr = WilderATRForTF(ReversalEscapeTimeFrame, ReversalATRPeriod); - if(atr <= 0.0) - return; - - const int n = CountReversalEscapeSigns(ptype, atr); - if(n < ReversalSignsRequired) - return; - - ClosePosition(); - Print("RSIScalpingXAUUSD: reversal escape TF=", EnumToString(ReversalEscapeTimeFrame), - " signs=", n, " need=", ReversalSignsRequired, - " ATR=", DoubleToString(atr, (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS))); -} - -//+------------------------------------------------------------------+ -//| Reset give-back peak/trough tracking | -//+------------------------------------------------------------------+ -void ResetIntrabarGiveBackState() -{ - g_giveback_track_ticket = 0; - g_peak_bid_since_entry = 0.0; - g_trough_ask_since_entry = 0.0; -} - -//+------------------------------------------------------------------+ -//| Exit when intrabar price gives back sharply vs best since entry | -//+------------------------------------------------------------------+ -void TryGiveBackExit() -{ - if(!UseGiveBackExit || GiveBackAtrMult <= 0.0) - return; - - const ulong ticket = GetPositionTicketByMagic(_Symbol, (ulong)MagicNumber); - if(ticket == 0 || !PositionSelectByTicket(ticket)) - { - ResetIntrabarGiveBackState(); - return; - } - - const ENUM_POSITION_TYPE ptype = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - const double entry = PositionGetDouble(POSITION_PRICE_OPEN); - const double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); - const double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); - const int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS); - - if(g_giveback_track_ticket != ticket) - { - g_giveback_track_ticket = ticket; - if(ptype == POSITION_TYPE_BUY) - { - g_peak_bid_since_entry = bid; - g_trough_ask_since_entry = 0.0; - } - else - { - g_trough_ask_since_entry = ask; - g_peak_bid_since_entry = 0.0; - } - } - - const double atr = ATRPriceOnTF(GiveBackATRPeriod); - if(atr <= 0.0) - return; - - const double threshold = GiveBackAtrMult * atr; - - if(ptype == POSITION_TYPE_BUY) - { - if(bid > g_peak_bid_since_entry) - g_peak_bid_since_entry = bid; - if(GiveBackRequireMfe && g_peak_bid_since_entry <= entry) - return; - if(g_peak_bid_since_entry - bid >= threshold) - { - ClosePosition(); - Print("RSIScalpingXAUUSD: give-back exit BUY retrace=", - DoubleToString(g_peak_bid_since_entry - bid, digits), - " thr=", DoubleToString(threshold, digits)); - } - } - else if(ptype == POSITION_TYPE_SELL) - { - if(ask < g_trough_ask_since_entry) - g_trough_ask_since_entry = ask; - if(GiveBackRequireMfe && g_trough_ask_since_entry >= entry) - return; - if(ask - g_trough_ask_since_entry >= threshold) - { - ClosePosition(); - Print("RSIScalpingXAUUSD: give-back exit SELL retrace=", - DoubleToString(ask - g_trough_ask_since_entry, digits), - " thr=", DoubleToString(threshold, digits)); - } - } -} - -//+------------------------------------------------------------------+ -//| Trail SL behind favorable price (every tick when enabled) | -//+------------------------------------------------------------------+ -void ApplyTrailingStop() -{ - if(TrailingStopDistancePoints <= 0.0) - return; - if(!PositionSelectByMagic(_Symbol, (ulong)MagicNumber)) - return; - - const double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT); - if(point <= 0.0) - return; - - const int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS); - const double trail_dist = TrailingStopDistancePoints * point; - const double activation_pts = (TrailingActivationPoints > 0.0) - ? TrailingActivationPoints - : TrailingStopDistancePoints; - const double activation = activation_pts * point; - const long stops_level = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL); - const double min_dist = (double)stops_level * point; - - const ENUM_POSITION_TYPE ptype = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - const double entry = PositionGetDouble(POSITION_PRICE_OPEN); - const double cur_sl = PositionGetDouble(POSITION_SL); - const double cur_tp = PositionGetDouble(POSITION_TP); - - if(ptype == POSITION_TYPE_BUY) - { - const double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); - if(bid - entry <= activation) - return; - - double new_sl = NormalizeDouble(bid - trail_dist, digits); - if(min_dist > 0.0 && bid - new_sl < min_dist) - new_sl = NormalizeDouble(bid - min_dist, digits); - - if(new_sl >= bid || new_sl <= 0.0) - return; - if(cur_sl > 0.0 && new_sl <= cur_sl) - return; - - ModifyPositionByMagic(trade, _Symbol, (ulong)MagicNumber, new_sl, cur_tp); - } - else if(ptype == POSITION_TYPE_SELL) - { - const double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); - if(entry - ask <= activation) - return; - - double new_sl = NormalizeDouble(ask + trail_dist, digits); - if(min_dist > 0.0 && new_sl - ask < min_dist) - new_sl = NormalizeDouble(ask + min_dist, digits); - - if(new_sl <= ask || new_sl <= 0.0) - return; - if(cur_sl > 0.0 && new_sl >= cur_sl) - return; - - ModifyPositionByMagic(trade, _Symbol, (ulong)MagicNumber, new_sl, cur_tp); - } -} - -void ResyncPositionFromMarket() -{ - if(position_open) - return; - ulong t = GetPositionTicketByMagic(_Symbol, (ulong)MagicNumber); - if(t == 0 || !PositionSelectByTicket(t)) - return; - position_ticket = (int)t; - position_open = true; - current_position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); -} - -//+------------------------------------------------------------------+ -//| Check existing position for exit conditions | -//+------------------------------------------------------------------+ -void CheckExistingPosition() -{ - if(!position_open) - { - return; - } - - // Check if position still exists with correct magic number - if(!PositionSelectByTicketAndMagic(position_ticket, (ulong)MagicNumber)) - { - position_open = false; - position_ticket = 0; - rsi_against_position = false; - bars_against_count = 0; - return; - } - - // Exit conditions based on RSI target - if(current_position_type == POSITION_TYPE_BUY) - { - // Check if RSI is against the position (below oversold) - if(rsi_current < RSI_Oversold) - { - if(!rsi_against_position) - { - rsi_against_position = true; - bars_against_count = 1; - } - else - { - bars_against_count++; - } - - // Close position if RSI has been against for Y bars - if(bars_against_count >= BarsToWait) - { - ClosePosition(); - return; - } - } - else - { - // RSI is no longer against the position, reset counter - if(rsi_against_position) - { - rsi_against_position = false; - bars_against_count = 0; - } - - // Exit long position when RSI reaches buy target - if(rsi_current >= RSI_Target_Buy) - { - ClosePosition(); - } - } - } - else if(current_position_type == POSITION_TYPE_SELL) - { - // Check if RSI is against the position (above overbought) - if(rsi_current > RSI_Overbought) - { - if(!rsi_against_position) - { - rsi_against_position = true; - bars_against_count = 1; - } - else - { - bars_against_count++; - } - - // Close position if RSI has been against for Y bars - if(bars_against_count >= BarsToWait) - { - ClosePosition(); - return; - } - } - else - { - // RSI is no longer against the position, reset counter - if(rsi_against_position) - { - rsi_against_position = false; - bars_against_count = 0; - } - - // Exit short position when RSI reaches sell target - if(rsi_current <= RSI_Target_Sell) - { - ClosePosition(); - } - } - } -} - -//+------------------------------------------------------------------+ -//| Check for entry signals | -//+------------------------------------------------------------------+ -void CheckEntrySignals() -{ - const double upSlope1 = rsi_prev - rsi_two_bars_ago; // older->prev - const double upSlope2 = rsi_current - rsi_prev; // prev->current - const double dnSlope1 = rsi_two_bars_ago - rsi_prev; // older->prev - const double dnSlope2 = rsi_prev - rsi_current; // prev->current - const bool buySlopeOk = (!UseEntrySlopeFilter) || (upSlope1 >= EntryMinSlopePerBar && upSlope2 >= EntryMinSlopePerBar); - const bool sellSlopeOk = (!UseEntrySlopeFilter) || (dnSlope1 >= EntryMinSlopePerBar && dnSlope2 >= EntryMinSlopePerBar); - - // Buy signal: RSI crosses from oversold to above oversold (checking the actual crossover) - if(rsi_two_bars_ago <= RSI_Oversold && rsi_prev > RSI_Oversold && buySlopeOk) - { - OpenBuyPosition(); - } - - // Sell signal: RSI crosses from overbought to below overbought (checking the actual crossover) - if(rsi_two_bars_ago >= RSI_Overbought && rsi_prev < RSI_Overbought && sellSlopeOk) - { - OpenSellPosition(); - } -} - -//+------------------------------------------------------------------+ -//| Open buy position | -//+------------------------------------------------------------------+ -void OpenBuyPosition() -{ - double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); - - if(trade.Buy(LotSize, _Symbol, ask, 0, 0, "RSI Scalping Buy")) - { - const ulong t = GetPositionTicketByMagic(_Symbol, (ulong)MagicNumber); - if(t > 0 && PositionSelectByTicketSymbolAndMagic(t, _Symbol, (ulong)MagicNumber)) - { - position_ticket = (int)t; - position_open = true; - current_position_type = POSITION_TYPE_BUY; - } - } -} - -//+------------------------------------------------------------------+ -//| Open sell position | -//+------------------------------------------------------------------+ -void OpenSellPosition() -{ - double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); - - if(trade.Sell(LotSize, _Symbol, bid, 0, 0, "RSI Scalping Sell")) - { - const ulong t = GetPositionTicketByMagic(_Symbol, (ulong)MagicNumber); - if(t > 0 && PositionSelectByTicketSymbolAndMagic(t, _Symbol, (ulong)MagicNumber)) - { - position_ticket = (int)t; - position_open = true; - current_position_type = POSITION_TYPE_SELL; - } - } -} - -//+------------------------------------------------------------------+ -//| Close current position | -//+------------------------------------------------------------------+ -void ClosePosition() -{ - if(ClosePositionByMagic(trade, _Symbol, (ulong)MagicNumber)) - { - position_open = false; - position_ticket = 0; - rsi_against_position = false; - bars_against_count = 0; - ResetIntrabarGiveBackState(); - return; - } - if(!PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) - { - position_open = false; - position_ticket = 0; - rsi_against_position = false; - bars_against_count = 0; - ResetIntrabarGiveBackState(); - return; - } - Print("RSIScalpingXAUUSD: close failed (will retry on next bar). retcode=", - trade.ResultRetcode(), " lastError=", GetLastError()); -} diff --git a/frontline/cluster-fuck/RSI_secret_sauce_XAUUSD/main.mq5 b/frontline/cluster-fuck/RSI_secret_sauce_XAUUSD/main.mq5 deleted file mode 100644 index 425b7f7..0000000 --- a/frontline/cluster-fuck/RSI_secret_sauce_XAUUSD/main.mq5 +++ /dev/null @@ -1,508 +0,0 @@ -//+------------------------------------------------------------------+ -//| RSI_SecretSauce_XAUUSD.mq5 | -//| Copyright 2025, MetaQuotes Ltd. | -//| https://www.mql5.com | -//+------------------------------------------------------------------+ -#property copyright "Copyright 2025, MetaQuotes Ltd." -#property link "https://www.mql5.com" -#property version "1.01" -#property description "RSI Secret Sauce Strategy: Wait for RSI to leave 70/30 zone, then enter when it comes back in" -#property description "Based on momentum flip concept - not traditional overbought/oversold" - -#include -#include - -//--- Input Parameters -input group "=== Trading Settings ===" -input string InpSymbol = "XAUUSD"; // Default gold; same numbers as secret_sauce.set (that file uses BTCUSD as symbol) -input double InpLotSize = 0.1; // Lot Size (Profiles/Tester/secret_sauce.set) -input int InpMagicNumber = 789012; // Magic Number -input int InpSlippage = 10; // Slippage in points -input ENUM_TIMEFRAMES InpTimeframe = PERIOD_M30; // Trading Timeframe (set value 30 = M30) - -input group "=== RSI Settings ===" -input int InpRSIPeriod = 16; // RSI Period -input double InpRSIOverbought = 72.5; // RSI Overbought Level -input double InpRSIOversold = 32.5; // RSI Oversold Level -input int InpRSILookback = 60; // RSI Lookback for Peak/Bottom Detection - -input group "=== Entry Logic ===" -input int InpPeakBars = 2; // Bars to confirm peak/bottom -input bool InpRequireDivergence = false; // Require divergence confirmation (optional) - -input group "=== Risk Management ===" -input double InpStopLossATR = 2.75; // Stop Loss (ATR multiples) -input double InpTakeProfitATR = 5.0; // Take Profit (ATR multiples) -input int InpATRPeriod = 14; // ATR Period -input bool InpUseSwingStopLoss = false; // Use previous swing high/low for stop loss -input int InpSwingLookback = 30; // Bars to look back for swing points - -input group "=== Position Management ===" -input int InpMaxPositions = 1; // Max Simultaneous Positions -input int InpMinBarsBetweenTrades = 7; // Min Bars Between Trades - -//--- Global Variables -CTrade trade; -CPositionInfo positionInfo; - -string actualSymbol; -int rsiHandle = INVALID_HANDLE; -int atrHandle = INVALID_HANDLE; - -double rsiBuffer[]; -double atrBuffer[]; -double highBuffer[]; -double lowBuffer[]; - -// RSI state tracking -bool rsiWasOverbought = false; // RSI was above 70 -bool rsiWasOversold = false; // RSI was below 30 -bool rsiBackInRange = false; // RSI came back into range -datetime lastRSIExitTime = 0; // When RSI left the range -datetime lastRSIReentryTime = 0; // When RSI came back in - -// Trade tracking -datetime lastTradeTime = 0; -int barsSinceLastTrade = 0; - -datetime lastBarTime = 0; - -//+------------------------------------------------------------------+ -//| Expert initialization function | -//+------------------------------------------------------------------+ -int OnInit() -{ - // Determine actual symbol - if(InpSymbol == "" || InpSymbol == NULL) - actualSymbol = _Symbol; - else - actualSymbol = InpSymbol; - - // Check if symbol exists - if(!SymbolInfoInteger(actualSymbol, SYMBOL_SELECT)) - { - Print("Error: Symbol ", actualSymbol, " not found. Using chart symbol."); - actualSymbol = _Symbol; - } - - // Initialize RSI indicator - rsiHandle = iRSI(actualSymbol, InpTimeframe, InpRSIPeriod, PRICE_CLOSE); - if(rsiHandle == INVALID_HANDLE) - { - Print("Error creating RSI indicator"); - return INIT_FAILED; - } - ArraySetAsSeries(rsiBuffer, true); - - // Initialize ATR indicator - atrHandle = iATR(actualSymbol, InpTimeframe, InpATRPeriod); - if(atrHandle == INVALID_HANDLE) - { - Print("Error creating ATR indicator"); - return INIT_FAILED; - } - ArraySetAsSeries(atrBuffer, true); - - // Initialize price buffers - ArraySetAsSeries(highBuffer, true); - ArraySetAsSeries(lowBuffer, true); - - // Set trade parameters - trade.SetExpertMagicNumber(InpMagicNumber); - trade.SetDeviationInPoints(InpSlippage); - trade.SetTypeFilling(ORDER_FILLING_FOK); - - Print("=== RSI Secret Sauce Strategy Initialized ==="); - Print("Symbol: ", actualSymbol); - Print("Timeframe: ", EnumToString(InpTimeframe)); - Print("RSI Period: ", InpRSIPeriod, " | Overbought: ", InpRSIOverbought, " | Oversold: ", InpRSIOversold); - Print("Stop Loss: ", InpStopLossATR, "x ATR | Take Profit: ", InpTakeProfitATR, "x ATR"); - - return INIT_SUCCEEDED; -} - -//+------------------------------------------------------------------+ -//| Expert deinitialization function | -//+------------------------------------------------------------------+ -void OnDeinit(const int reason) -{ - if(rsiHandle != INVALID_HANDLE) - IndicatorRelease(rsiHandle); - if(atrHandle != INVALID_HANDLE) - IndicatorRelease(atrHandle); - - Print("Expert Advisor deinitialized. Reason: ", reason); -} - -//+------------------------------------------------------------------+ -//| Expert tick function | -//+------------------------------------------------------------------+ -void OnTick() -{ - // Check if we have enough bars - int requiredBars = MathMax(InpRSILookback, InpSwingLookback) + 10; - if(Bars(actualSymbol, InpTimeframe) < requiredBars) - return; - - // Check if this is a new bar (wait for candle close) - datetime currentBarTime = iTime(actualSymbol, InpTimeframe, 0); - if(currentBarTime == lastBarTime) - return; // Still the same bar, don't process - - lastBarTime = currentBarTime; - - // Update indicators - if(!UpdateIndicators()) - return; - - // Update RSI state tracking - UpdateRSIState(); - - // Check existing positions - CheckExistingPositions(); - - // Check for entry signals - if(CanOpenNewPosition()) - { - CheckEntrySignals(); - } -} - -//+------------------------------------------------------------------+ -//| Update indicator values | -//+------------------------------------------------------------------+ -bool UpdateIndicators() -{ - // Update RSI (need enough bars for lookback) - int rsiBarsNeeded = InpRSILookback + 5; - if(CopyBuffer(rsiHandle, 0, 0, rsiBarsNeeded, rsiBuffer) < rsiBarsNeeded) - return false; - - // Update ATR - if(CopyBuffer(atrHandle, 0, 0, 2, atrBuffer) < 2) - return false; - - // Update price buffers for swing detection - if(CopyHigh(actualSymbol, InpTimeframe, 0, InpSwingLookback + 5, highBuffer) < InpSwingLookback + 5) - return false; - if(CopyLow(actualSymbol, InpTimeframe, 0, InpSwingLookback + 5, lowBuffer) < InpSwingLookback + 5) - return false; - - return true; -} - -//+------------------------------------------------------------------+ -//| Update RSI state tracking | -//+------------------------------------------------------------------+ -void UpdateRSIState() -{ - double rsiCurrent = rsiBuffer[0]; - double rsiPrev = rsiBuffer[1]; - - // Check if RSI left overbought zone (was above 70, now below 70) - if(rsiPrev >= InpRSIOverbought && rsiCurrent < InpRSIOverbought) - { - rsiWasOverbought = true; - rsiBackInRange = true; - lastRSIExitTime = TimeCurrent(); - lastRSIReentryTime = TimeCurrent(); - Print(TimeToString(TimeCurrent()), " - RSI left overbought zone (", rsiPrev, " -> ", rsiCurrent, ")"); - } - - // Check if RSI left oversold zone (was below 30, now above 30) - if(rsiPrev <= InpRSIOversold && rsiCurrent > InpRSIOversold) - { - rsiWasOversold = true; - rsiBackInRange = true; - lastRSIExitTime = TimeCurrent(); - lastRSIReentryTime = TimeCurrent(); - Print(TimeToString(TimeCurrent()), " - RSI left oversold zone (", rsiPrev, " -> ", rsiCurrent, ")"); - } - - // Reset flags if RSI goes back to extreme - if(rsiCurrent >= InpRSIOverbought) - { - rsiWasOverbought = false; - rsiBackInRange = false; - } - - if(rsiCurrent <= InpRSIOversold) - { - rsiWasOversold = false; - rsiBackInRange = false; - } -} - -//+------------------------------------------------------------------+ -//| Check if we can open a new position | -//+------------------------------------------------------------------+ -bool CanOpenNewPosition() -{ - // Check max positions - int positionCount = 0; - for(int i = PositionsTotal() - 1; i >= 0; i--) - { - if(positionInfo.SelectByIndex(i)) - { - if(positionInfo.Symbol() == actualSymbol && positionInfo.Magic() == InpMagicNumber) - positionCount++; - } - } - - if(positionCount >= InpMaxPositions) - return false; - - // Check minimum bars between trades - if(lastTradeTime > 0) - { - int barsSince = Bars(actualSymbol, InpTimeframe, lastTradeTime, TimeCurrent()); - if(barsSince < InpMinBarsBetweenTrades) - return false; - } - - return true; -} - -//+------------------------------------------------------------------+ -//| Check for entry signals | -//+------------------------------------------------------------------+ -void CheckEntrySignals() -{ - // LONG Entry: RSI was overbought (>70), came back in range, now look for peak - if(rsiWasOverbought && rsiBackInRange) - { - // Check if RSI is back in normal range (below 70) - if(rsiBuffer[0] < InpRSIOverbought) - { - // Look for a peak in RSI after re-entry - if(IsRSIPeak()) - { - Print(TimeToString(TimeCurrent()), " - LONG Signal: RSI peak detected after leaving overbought zone"); - OpenPosition(POSITION_TYPE_BUY); - } - } - } - - // SHORT Entry: RSI was oversold (<30), came back in range, now look for bottom - if(rsiWasOversold && rsiBackInRange) - { - // Check if RSI is back in normal range (above 30) - if(rsiBuffer[0] > InpRSIOversold) - { - // Look for a bottom in RSI after re-entry - if(IsRSIBottom()) - { - Print(TimeToString(TimeCurrent()), " - SHORT Signal: RSI bottom detected after leaving oversold zone"); - OpenPosition(POSITION_TYPE_SELL); - } - } - } -} - -//+------------------------------------------------------------------+ -//| Check if RSI is forming a peak (for LONG entry) | -//+------------------------------------------------------------------+ -bool IsRSIPeak() -{ - // We need at least InpPeakBars + 1 bars to confirm a peak - if(ArraySize(rsiBuffer) < InpPeakBars + 2) - return false; - - // Check if current RSI is higher than previous bars (forming a peak) - double currentRSI = rsiBuffer[0]; - bool isPeak = true; - - // Check if current is higher than the next few bars - for(int i = 1; i <= InpPeakBars; i++) - { - if(rsiBuffer[i] >= currentRSI) - { - isPeak = false; - break; - } - } - - // Also check if previous bar was lower (confirming upward movement before peak) - if(rsiBuffer[1] >= currentRSI) - isPeak = false; - - return isPeak; -} - -//+------------------------------------------------------------------+ -//| Check if RSI is forming a bottom (for SHORT entry) | -//+------------------------------------------------------------------+ -bool IsRSIBottom() -{ - // We need at least InpPeakBars + 1 bars to confirm a bottom - if(ArraySize(rsiBuffer) < InpPeakBars + 2) - return false; - - // Check if current RSI is lower than previous bars (forming a bottom) - double currentRSI = rsiBuffer[0]; - bool isBottom = true; - - // Check if current is lower than the next few bars - for(int i = 1; i <= InpPeakBars; i++) - { - if(rsiBuffer[i] <= currentRSI) - { - isBottom = false; - break; - } - } - - // Also check if previous bar was higher (confirming downward movement before bottom) - if(rsiBuffer[1] <= currentRSI) - isBottom = false; - - return isBottom; -} - -//+------------------------------------------------------------------+ -//| Open position | -//+------------------------------------------------------------------+ -void OpenPosition(ENUM_POSITION_TYPE type) -{ - double price = (type == POSITION_TYPE_BUY) ? - SymbolInfoDouble(actualSymbol, SYMBOL_ASK) : - SymbolInfoDouble(actualSymbol, SYMBOL_BID); - - if(price <= 0) - return; - - // Calculate stop loss and take profit - double sl = 0.0, tp = 0.0; - if(!CalculateStops(price, type, sl, tp)) - { - Print("Error: Failed to calculate stops"); - return; - } - - string comment = "RSI_Secret_" + (type == POSITION_TYPE_BUY ? "LONG" : "SHORT"); - - bool result = false; - if(type == POSITION_TYPE_BUY) - result = trade.Buy(InpLotSize, actualSymbol, 0, sl, tp, comment); - else - result = trade.Sell(InpLotSize, actualSymbol, 0, sl, tp, comment); - - if(result) - { - lastTradeTime = TimeCurrent(); - ulong ticket = trade.ResultOrder(); - Print(TimeToString(TimeCurrent()), " - Position opened: ", comment, " Ticket: ", ticket, - " Price: ", price, " SL: ", sl, " TP: ", tp); - - // Reset RSI state after opening position - if(type == POSITION_TYPE_BUY) - rsiWasOverbought = false; - else - rsiWasOversold = false; - rsiBackInRange = false; - } - else - { - Print("Failed to open position: ", comment, " Error: ", - trade.ResultRetcode(), " - ", trade.ResultRetcodeDescription()); - } -} - -//+------------------------------------------------------------------+ -//| Calculate stop loss and take profit | -//+------------------------------------------------------------------+ -bool CalculateStops(double price, ENUM_POSITION_TYPE type, double &sl, double &tp) -{ - double atrValue = atrBuffer[0]; - if(atrValue <= 0) - atrValue = price * 0.01; // Fallback: 1% of price - - double slDistance = atrValue * InpStopLossATR; - double tpDistance = atrValue * InpTakeProfitATR; - - int digits = (int)SymbolInfoInteger(actualSymbol, SYMBOL_DIGITS); - double point = SymbolInfoDouble(actualSymbol, SYMBOL_POINT); - int stopsLevel = (int)SymbolInfoInteger(actualSymbol, SYMBOL_TRADE_STOPS_LEVEL); - double minStopDistance = MathMax(stopsLevel * point, point * 10); - - // Use swing-based stop loss if enabled - if(InpUseSwingStopLoss) - { - double swingStop = GetSwingStopLoss(price, type); - if(swingStop > 0) - { - if(type == POSITION_TYPE_BUY) - { - if(swingStop < price && (price - swingStop) > minStopDistance) - slDistance = price - swingStop; - } - else - { - if(swingStop > price && (swingStop - price) > minStopDistance) - slDistance = swingStop - price; - } - } - } - - // Ensure minimum distance - if(slDistance < minStopDistance) - slDistance = minStopDistance; - if(tpDistance < minStopDistance) - tpDistance = minStopDistance; - - if(type == POSITION_TYPE_BUY) - { - sl = NormalizeDouble(price - slDistance, digits); - tp = NormalizeDouble(price + tpDistance, digits); - } - else - { - sl = NormalizeDouble(price + slDistance, digits); - tp = NormalizeDouble(price - tpDistance, digits); - } - - return true; -} - -//+------------------------------------------------------------------+ -//| Get swing-based stop loss (previous swing high/low) | -//+------------------------------------------------------------------+ -double GetSwingStopLoss(double currentPrice, ENUM_POSITION_TYPE type) -{ - // For LONG: find previous swing low - // For SHORT: find previous swing high - - if(type == POSITION_TYPE_BUY) - { - // Find the lowest low in the lookback period - double lowestLow = lowBuffer[0]; - for(int i = 1; i < InpSwingLookback && i < ArraySize(lowBuffer); i++) - { - if(lowBuffer[i] < lowestLow) - lowestLow = lowBuffer[i]; - } - return lowestLow; - } - else - { - // Find the highest high in the lookback period - double highestHigh = highBuffer[0]; - for(int i = 1; i < InpSwingLookback && i < ArraySize(highBuffer); i++) - { - if(highBuffer[i] > highestHigh) - highestHigh = highBuffer[i]; - } - return highestHigh; - } -} - -//+------------------------------------------------------------------+ -//| Check existing positions | -//+------------------------------------------------------------------+ -void CheckExistingPositions() -{ - // Position management can be added here if needed - // For now, positions are managed by TP/SL -} - -//+------------------------------------------------------------------+ diff --git a/frontline/cluster-fuck/SimpleTrendlineBTCUSD/SimpleTrendline.mq5 b/frontline/cluster-fuck/SimpleTrendlineBTCUSD/SimpleTrendline.mq5 deleted file mode 100644 index 6476f77..0000000 --- a/frontline/cluster-fuck/SimpleTrendlineBTCUSD/SimpleTrendline.mq5 +++ /dev/null @@ -1,284 +0,0 @@ -#property strict -#property version "1.00" - -#include - -input ENUM_TIMEFRAMES InpHigherTF = PERIOD_H4; // Higher timeframe for MA/cross points -input int InpMAPeriod = 150; // MA period -input ENUM_MA_METHOD InpMAMethod = MODE_SMMA; // MA method -input ENUM_APPLIED_PRICE InpAppliedPrice = PRICE_OPEN; // MA applied price -input int InpHTFBarsToScan = 1200; // HTF bars to scan for crossings -input double InpLineTouchTolerance = 170; // Pullback touch tolerance (points) -input double InpBreakBuffer = 90; // Break confirmation buffer (points) -input double InpLots = 0.10; // Position size -input long InpMagic = 26042501; // Magic number -input bool InpDrawTrendline = true; // Draw detected trendline - -CTrade trade; - -int g_maHandle = INVALID_HANDLE; -datetime g_lastBarTime = 0; -string g_lineName = "SimpleTrendline_Basis"; - -struct TrendlineModel -{ - datetime t1; - datetime t2; - datetime t3; - double p1; - double p2; - double p3; - double a; - double b; - bool valid; -}; - -bool IsNewBar() -{ - datetime t = iTime(_Symbol, _Period, 0); - if(t == 0) - return false; - if(t != g_lastBarTime) - { - g_lastBarTime = t; - return true; - } - return false; -} - -int FindRecentCrossPoints(datetime ×[], double &prices[]) -{ - ArrayResize(times, 0); - ArrayResize(prices, 0); - - if(g_maHandle == INVALID_HANDLE) - return 0; - - int needBars = MathMax(InpHTFBarsToScan, InpMAPeriod + 20); - MqlRates rates[]; - double maBuf[]; - - int copiedRates = CopyRates(_Symbol, InpHigherTF, 0, needBars, rates); - int copiedMa = CopyBuffer(g_maHandle, 0, 0, needBars, maBuf); - if(copiedRates <= 5 || copiedMa <= 5) - return 0; - - int bars = MathMin(copiedRates, copiedMa); - ArraySetAsSeries(rates, true); - ArraySetAsSeries(maBuf, true); - - for(int i = 2; i < bars - 1; i++) - { - double d0 = rates[i].close - maBuf[i]; - double d1 = rates[i + 1].close - maBuf[i + 1]; - if(d0 == 0.0 || d1 == 0.0 || (d0 * d1 < 0.0)) - { - int n = ArraySize(times); - ArrayResize(times, n + 1); - ArrayResize(prices, n + 1); - times[n] = rates[i].time; - prices[n] = rates[i].close; - if(ArraySize(times) >= 3) - break; - } - } - - return ArraySize(times); -} - -bool BuildTrendlineFrom3Points(TrendlineModel &m) -{ - m.valid = false; - datetime ts[]; - double ps[]; - int n = FindRecentCrossPoints(ts, ps); - if(n < 3) - return false; - - // We collected from recent to older in series order. - // Re-map as oldest -> newest to stabilize slope direction. - datetime tOld[3]; - double pOld[3]; - for(int i = 0; i < 3; i++) - { - tOld[i] = ts[2 - i]; - pOld[i] = ps[2 - i]; - } - - long t0 = (long)tOld[0]; - double x1 = 0.0; - double x2 = (double)((long)tOld[1] - t0); - double x3 = (double)((long)tOld[2] - t0); - double y1 = pOld[0]; - double y2 = pOld[1]; - double y3 = pOld[2]; - - double sx = x1 + x2 + x3; - double sy = y1 + y2 + y3; - double sxx = x1 * x1 + x2 * x2 + x3 * x3; - double sxy = x1 * y1 + x2 * y2 + x3 * y3; - - double den = 3.0 * sxx - sx * sx; - if(MathAbs(den) < 1e-10) - return false; - - m.a = (3.0 * sxy - sx * sy) / den; - m.b = (sy - m.a * sx) / 3.0; - - m.t1 = tOld[0]; - m.t2 = tOld[1]; - m.t3 = tOld[2]; - m.p1 = pOld[0]; - m.p2 = pOld[1]; - m.p3 = pOld[2]; - m.valid = true; - return true; -} - -double TrendlinePriceAtTime(const TrendlineModel &m, datetime t) -{ - if(!m.valid) - return 0.0; - double x = (double)((long)t - (long)m.t1); - return m.a * x + m.b; -} - -void DrawTrendline(const TrendlineModel &m) -{ - if(!InpDrawTrendline || !m.valid) - return; - - datetime tStart = m.t1; - datetime tEnd = iTime(_Symbol, _Period, 0); - if(tEnd <= tStart) - tEnd = m.t3 + PeriodSeconds(_Period) * 20; - - double pStart = TrendlinePriceAtTime(m, tStart); - double pEnd = TrendlinePriceAtTime(m, tEnd); - - if(ObjectFind(0, g_lineName) < 0) - ObjectCreate(0, g_lineName, OBJ_TREND, 0, tStart, pStart, tEnd, pEnd); - else - { - ObjectMove(0, g_lineName, 0, tStart, pStart); - ObjectMove(0, g_lineName, 1, tEnd, pEnd); - } - - ObjectSetInteger(0, g_lineName, OBJPROP_RAY_RIGHT, true); - ObjectSetInteger(0, g_lineName, OBJPROP_COLOR, clrGold); - ObjectSetInteger(0, g_lineName, OBJPROP_WIDTH, 2); -} - -bool GetCurrentPosition(long &type, double &volume) -{ - if(!PositionSelect(_Symbol)) - return false; - if((long)PositionGetInteger(POSITION_MAGIC) != InpMagic) - return false; - type = PositionGetInteger(POSITION_TYPE); - volume = PositionGetDouble(POSITION_VOLUME); - return true; -} - -void TryExitOnBreak(const TrendlineModel &m) -{ - long posType; - double vol; - if(!GetCurrentPosition(posType, vol)) - return; - - double close1 = iClose(_Symbol, _Period, 1); - datetime t1 = iTime(_Symbol, _Period, 1); - double line1 = TrendlinePriceAtTime(m, t1); - double buf = InpBreakBuffer * _Point; - - bool closePos = false; - if(posType == POSITION_TYPE_BUY && close1 < (line1 - buf)) - closePos = true; - if(posType == POSITION_TYPE_SELL && close1 > (line1 + buf)) - closePos = true; - - if(closePos) - trade.PositionClose(_Symbol); -} - -void TryPullbackEntry(const TrendlineModel &m) -{ - long posType; - double vol; - if(GetCurrentPosition(posType, vol)) - return; - - MqlRates bars1[], bars2[]; - if(CopyRates(_Symbol, _Period, 1, 1, bars1) != 1) - return; - if(CopyRates(_Symbol, _Period, 2, 1, bars2) != 1) - return; - if(ArraySize(bars1) < 1 || ArraySize(bars2) < 1) - return; - - MqlRates b1 = bars1[0]; - MqlRates b2 = bars2[0]; - - double line1 = TrendlinePriceAtTime(m, b1.time); - double tol = InpLineTouchTolerance * _Point; - - bool upTrend = (m.a > 0.0); - bool downTrend = (m.a < 0.0); - - if(upTrend) - { - bool touched = (b1.low <= (line1 + tol)); - bool reclaim = (b1.close > line1); - bool bullish = (b1.close > b1.open); - bool stillHealthy = (b2.close >= TrendlinePriceAtTime(m, b2.time) - tol); - if(touched && reclaim && bullish && stillHealthy) - { - trade.Buy(InpLots, _Symbol, 0.0, 0.0, 0.0, "Pullback buy"); - } - } - else if(downTrend) - { - bool touched = (b1.high >= (line1 - tol)); - bool reject = (b1.close < line1); - bool bearish = (b1.close < b1.open); - bool stillWeak = (b2.close <= TrendlinePriceAtTime(m, b2.time) + tol); - if(touched && reject && bearish && stillWeak) - { - trade.Sell(InpLots, _Symbol, 0.0, 0.0, 0.0, "Pullback sell"); - } - } -} - -int OnInit() -{ - g_maHandle = iMA(_Symbol, InpHigherTF, InpMAPeriod, 0, InpMAMethod, InpAppliedPrice); - if(g_maHandle == INVALID_HANDLE) - return INIT_FAILED; - - trade.SetExpertMagicNumber(InpMagic); - g_lastBarTime = 0; - return INIT_SUCCEEDED; -} - -void OnDeinit(const int reason) -{ - if(g_maHandle != INVALID_HANDLE) - IndicatorRelease(g_maHandle); - if(ObjectFind(0, g_lineName) >= 0) - ObjectDelete(0, g_lineName); -} - -void OnTick() -{ - if(!IsNewBar()) - return; - - TrendlineModel m; - if(!BuildTrendlineFrom3Points(m)) - return; - - DrawTrendline(m); - TryExitOnBreak(m); - TryPullbackEntry(m); -} diff --git a/frontline/cluster-fuck/SimpleTrendlineBTCUSD/SimpleTrendline_optimization.set b/frontline/cluster-fuck/SimpleTrendlineBTCUSD/SimpleTrendline_optimization.set deleted file mode 100644 index 10ea2ee..0000000 --- a/frontline/cluster-fuck/SimpleTrendlineBTCUSD/SimpleTrendline_optimization.set +++ /dev/null @@ -1,14 +0,0 @@ -; SimpleTrendline.mq5 optimization preset -; Strategy Tester -> Inputs -> Load -; Focus: trendline pullback entries + break exits (no broker SL/TP) -; -InpHigherTF=16385||16385||0||16388||Y -InpMAPeriod=50||20||5||200||Y -InpMAMethod=1||0||1||3||Y -InpAppliedPrice=0||0||1||6||Y -InpHTFBarsToScan=400||200||100||1200||Y -InpLineTouchTolerance=100.0||30.0||10.0||300.0||Y -InpBreakBuffer=30.0||5.0||5.0||120.0||Y -InpLots=0.10||0.10||0.01||0.10||N -InpMagic=26042501||26042501||1||26042501||N -InpDrawTrendline=false||false||0||true||N diff --git a/frontline/cluster-fuck/SimpleTrendlineGER40/SimpleTrendline.mq5 b/frontline/cluster-fuck/SimpleTrendlineGER40/SimpleTrendline.mq5 deleted file mode 100644 index c87c3ef..0000000 --- a/frontline/cluster-fuck/SimpleTrendlineGER40/SimpleTrendline.mq5 +++ /dev/null @@ -1,284 +0,0 @@ -#property strict -#property version "1.00" - -#include - -input ENUM_TIMEFRAMES InpHigherTF = PERIOD_M15; // Higher timeframe for MA/cross points -input int InpMAPeriod = 65; // MA period -input ENUM_MA_METHOD InpMAMethod = MODE_LWMA; // MA method -input ENUM_APPLIED_PRICE InpAppliedPrice = PRICE_OPEN; // MA applied price -input int InpHTFBarsToScan = 1200; // HTF bars to scan for crossings -input double InpLineTouchTolerance = 100; // Pullback touch tolerance (points) -input double InpBreakBuffer = 80; // Break confirmation buffer (points) -input double InpLots = 0.10; // Position size -input long InpMagic = 26042501; // Magic number -input bool InpDrawTrendline = true; // Draw detected trendline - -CTrade trade; - -int g_maHandle = INVALID_HANDLE; -datetime g_lastBarTime = 0; -string g_lineName = "SimpleTrendline_Basis"; - -struct TrendlineModel -{ - datetime t1; - datetime t2; - datetime t3; - double p1; - double p2; - double p3; - double a; - double b; - bool valid; -}; - -bool IsNewBar() -{ - datetime t = iTime(_Symbol, _Period, 0); - if(t == 0) - return false; - if(t != g_lastBarTime) - { - g_lastBarTime = t; - return true; - } - return false; -} - -int FindRecentCrossPoints(datetime ×[], double &prices[]) -{ - ArrayResize(times, 0); - ArrayResize(prices, 0); - - if(g_maHandle == INVALID_HANDLE) - return 0; - - int needBars = MathMax(InpHTFBarsToScan, InpMAPeriod + 20); - MqlRates rates[]; - double maBuf[]; - - int copiedRates = CopyRates(_Symbol, InpHigherTF, 0, needBars, rates); - int copiedMa = CopyBuffer(g_maHandle, 0, 0, needBars, maBuf); - if(copiedRates <= 5 || copiedMa <= 5) - return 0; - - int bars = MathMin(copiedRates, copiedMa); - ArraySetAsSeries(rates, true); - ArraySetAsSeries(maBuf, true); - - for(int i = 2; i < bars - 1; i++) - { - double d0 = rates[i].close - maBuf[i]; - double d1 = rates[i + 1].close - maBuf[i + 1]; - if(d0 == 0.0 || d1 == 0.0 || (d0 * d1 < 0.0)) - { - int n = ArraySize(times); - ArrayResize(times, n + 1); - ArrayResize(prices, n + 1); - times[n] = rates[i].time; - prices[n] = rates[i].close; - if(ArraySize(times) >= 3) - break; - } - } - - return ArraySize(times); -} - -bool BuildTrendlineFrom3Points(TrendlineModel &m) -{ - m.valid = false; - datetime ts[]; - double ps[]; - int n = FindRecentCrossPoints(ts, ps); - if(n < 3) - return false; - - // We collected from recent to older in series order. - // Re-map as oldest -> newest to stabilize slope direction. - datetime tOld[3]; - double pOld[3]; - for(int i = 0; i < 3; i++) - { - tOld[i] = ts[2 - i]; - pOld[i] = ps[2 - i]; - } - - long t0 = (long)tOld[0]; - double x1 = 0.0; - double x2 = (double)((long)tOld[1] - t0); - double x3 = (double)((long)tOld[2] - t0); - double y1 = pOld[0]; - double y2 = pOld[1]; - double y3 = pOld[2]; - - double sx = x1 + x2 + x3; - double sy = y1 + y2 + y3; - double sxx = x1 * x1 + x2 * x2 + x3 * x3; - double sxy = x1 * y1 + x2 * y2 + x3 * y3; - - double den = 3.0 * sxx - sx * sx; - if(MathAbs(den) < 1e-10) - return false; - - m.a = (3.0 * sxy - sx * sy) / den; - m.b = (sy - m.a * sx) / 3.0; - - m.t1 = tOld[0]; - m.t2 = tOld[1]; - m.t3 = tOld[2]; - m.p1 = pOld[0]; - m.p2 = pOld[1]; - m.p3 = pOld[2]; - m.valid = true; - return true; -} - -double TrendlinePriceAtTime(const TrendlineModel &m, datetime t) -{ - if(!m.valid) - return 0.0; - double x = (double)((long)t - (long)m.t1); - return m.a * x + m.b; -} - -void DrawTrendline(const TrendlineModel &m) -{ - if(!InpDrawTrendline || !m.valid) - return; - - datetime tStart = m.t1; - datetime tEnd = iTime(_Symbol, _Period, 0); - if(tEnd <= tStart) - tEnd = m.t3 + PeriodSeconds(_Period) * 20; - - double pStart = TrendlinePriceAtTime(m, tStart); - double pEnd = TrendlinePriceAtTime(m, tEnd); - - if(ObjectFind(0, g_lineName) < 0) - ObjectCreate(0, g_lineName, OBJ_TREND, 0, tStart, pStart, tEnd, pEnd); - else - { - ObjectMove(0, g_lineName, 0, tStart, pStart); - ObjectMove(0, g_lineName, 1, tEnd, pEnd); - } - - ObjectSetInteger(0, g_lineName, OBJPROP_RAY_RIGHT, true); - ObjectSetInteger(0, g_lineName, OBJPROP_COLOR, clrGold); - ObjectSetInteger(0, g_lineName, OBJPROP_WIDTH, 2); -} - -bool GetCurrentPosition(long &type, double &volume) -{ - if(!PositionSelect(_Symbol)) - return false; - if((long)PositionGetInteger(POSITION_MAGIC) != InpMagic) - return false; - type = PositionGetInteger(POSITION_TYPE); - volume = PositionGetDouble(POSITION_VOLUME); - return true; -} - -void TryExitOnBreak(const TrendlineModel &m) -{ - long posType; - double vol; - if(!GetCurrentPosition(posType, vol)) - return; - - double close1 = iClose(_Symbol, _Period, 1); - datetime t1 = iTime(_Symbol, _Period, 1); - double line1 = TrendlinePriceAtTime(m, t1); - double buf = InpBreakBuffer * _Point; - - bool closePos = false; - if(posType == POSITION_TYPE_BUY && close1 < (line1 - buf)) - closePos = true; - if(posType == POSITION_TYPE_SELL && close1 > (line1 + buf)) - closePos = true; - - if(closePos) - trade.PositionClose(_Symbol); -} - -void TryPullbackEntry(const TrendlineModel &m) -{ - long posType; - double vol; - if(GetCurrentPosition(posType, vol)) - return; - - MqlRates bars1[], bars2[]; - if(CopyRates(_Symbol, _Period, 1, 1, bars1) != 1) - return; - if(CopyRates(_Symbol, _Period, 2, 1, bars2) != 1) - return; - if(ArraySize(bars1) < 1 || ArraySize(bars2) < 1) - return; - - MqlRates b1 = bars1[0]; - MqlRates b2 = bars2[0]; - - double line1 = TrendlinePriceAtTime(m, b1.time); - double tol = InpLineTouchTolerance * _Point; - - bool upTrend = (m.a > 0.0); - bool downTrend = (m.a < 0.0); - - if(upTrend) - { - bool touched = (b1.low <= (line1 + tol)); - bool reclaim = (b1.close > line1); - bool bullish = (b1.close > b1.open); - bool stillHealthy = (b2.close >= TrendlinePriceAtTime(m, b2.time) - tol); - if(touched && reclaim && bullish && stillHealthy) - { - trade.Buy(InpLots, _Symbol, 0.0, 0.0, 0.0, "Pullback buy"); - } - } - else if(downTrend) - { - bool touched = (b1.high >= (line1 - tol)); - bool reject = (b1.close < line1); - bool bearish = (b1.close < b1.open); - bool stillWeak = (b2.close <= TrendlinePriceAtTime(m, b2.time) + tol); - if(touched && reject && bearish && stillWeak) - { - trade.Sell(InpLots, _Symbol, 0.0, 0.0, 0.0, "Pullback sell"); - } - } -} - -int OnInit() -{ - g_maHandle = iMA(_Symbol, InpHigherTF, InpMAPeriod, 0, InpMAMethod, InpAppliedPrice); - if(g_maHandle == INVALID_HANDLE) - return INIT_FAILED; - - trade.SetExpertMagicNumber(InpMagic); - g_lastBarTime = 0; - return INIT_SUCCEEDED; -} - -void OnDeinit(const int reason) -{ - if(g_maHandle != INVALID_HANDLE) - IndicatorRelease(g_maHandle); - if(ObjectFind(0, g_lineName) >= 0) - ObjectDelete(0, g_lineName); -} - -void OnTick() -{ - if(!IsNewBar()) - return; - - TrendlineModel m; - if(!BuildTrendlineFrom3Points(m)) - return; - - DrawTrendline(m); - TryExitOnBreak(m); - TryPullbackEntry(m); -} diff --git a/frontline/cluster-fuck/SimpleTrendlineGER40/SimpleTrendline_optimization.set b/frontline/cluster-fuck/SimpleTrendlineGER40/SimpleTrendline_optimization.set deleted file mode 100644 index 10ea2ee..0000000 --- a/frontline/cluster-fuck/SimpleTrendlineGER40/SimpleTrendline_optimization.set +++ /dev/null @@ -1,14 +0,0 @@ -; SimpleTrendline.mq5 optimization preset -; Strategy Tester -> Inputs -> Load -; Focus: trendline pullback entries + break exits (no broker SL/TP) -; -InpHigherTF=16385||16385||0||16388||Y -InpMAPeriod=50||20||5||200||Y -InpMAMethod=1||0||1||3||Y -InpAppliedPrice=0||0||1||6||Y -InpHTFBarsToScan=400||200||100||1200||Y -InpLineTouchTolerance=100.0||30.0||10.0||300.0||Y -InpBreakBuffer=30.0||5.0||5.0||120.0||Y -InpLots=0.10||0.10||0.01||0.10||N -InpMagic=26042501||26042501||1||26042501||N -InpDrawTrendline=false||false||0||true||N diff --git a/frontline/cluster-fuck/SimpleTrendlineXAUUSD/SimpleTrendline.mq5 b/frontline/cluster-fuck/SimpleTrendlineXAUUSD/SimpleTrendline.mq5 deleted file mode 100644 index 77ed295..0000000 --- a/frontline/cluster-fuck/SimpleTrendlineXAUUSD/SimpleTrendline.mq5 +++ /dev/null @@ -1,376 +0,0 @@ -#property strict -#property version "1.00" - -#include - -input ENUM_TIMEFRAMES InpHigherTF = PERIOD_M10; // Higher timeframe for MA/cross points -input int InpMAPeriod = 65; // MA period -input ENUM_MA_METHOD InpMAMethod = MODE_EMA; // MA method -input ENUM_APPLIED_PRICE InpAppliedPrice = PRICE_OPEN; // MA applied price -input int InpHTFBarsToScan = 500; // HTF bars to scan for crossings -input double InpLineTouchTolerance = 220; // Pullback touch tolerance (points) -input double InpBreakBuffer = 110; // Break confirmation buffer (points) -input double InpLots = 0.10; // Position size -input long InpMagic = 26042501; // Magic number -input bool InpDrawTrendline = true; // Draw detected trendline -input bool InpUseSessionModeGate = true; // Block entries when symbol/session disallow opens -input bool InpBypassGateInTester = true; // Ignore gate in Strategy Tester for optimization - -CTrade trade; - -int g_maHandle = INVALID_HANDLE; -datetime g_lastBarTime = 0; -string g_lineName = "SimpleTrendline_Basis"; -datetime g_lastEntryBlockLog = 0; - -struct TrendlineModel -{ - datetime t1; - datetime t2; - datetime t3; - double p1; - double p2; - double p3; - double a; - double b; - bool valid; -}; - -bool IsNewBar() -{ - datetime t = iTime(_Symbol, _Period, 0); - if(t == 0) - return false; - if(t != g_lastBarTime) - { - g_lastBarTime = t; - return true; - } - return false; -} - -int FindRecentCrossPoints(datetime ×[], double &prices[]) -{ - ArrayResize(times, 0); - ArrayResize(prices, 0); - - if(g_maHandle == INVALID_HANDLE) - return 0; - - int needBars = MathMax(InpHTFBarsToScan, InpMAPeriod + 20); - MqlRates rates[]; - double maBuf[]; - - int copiedRates = CopyRates(_Symbol, InpHigherTF, 0, needBars, rates); - int copiedMa = CopyBuffer(g_maHandle, 0, 0, needBars, maBuf); - if(copiedRates <= 5 || copiedMa <= 5) - return 0; - - int bars = MathMin(copiedRates, copiedMa); - ArraySetAsSeries(rates, true); - ArraySetAsSeries(maBuf, true); - - for(int i = 2; i < bars - 1; i++) - { - double d0 = rates[i].close - maBuf[i]; - double d1 = rates[i + 1].close - maBuf[i + 1]; - if(d0 == 0.0 || d1 == 0.0 || (d0 * d1 < 0.0)) - { - int n = ArraySize(times); - ArrayResize(times, n + 1); - ArrayResize(prices, n + 1); - times[n] = rates[i].time; - prices[n] = rates[i].close; - if(ArraySize(times) >= 3) - break; - } - } - - return ArraySize(times); -} - -bool BuildTrendlineFrom3Points(TrendlineModel &m) -{ - m.valid = false; - datetime ts[]; - double ps[]; - int n = FindRecentCrossPoints(ts, ps); - if(n < 3) - return false; - - // We collected from recent to older in series order. - // Re-map as oldest -> newest to stabilize slope direction. - datetime tOld[3]; - double pOld[3]; - for(int i = 0; i < 3; i++) - { - tOld[i] = ts[2 - i]; - pOld[i] = ps[2 - i]; - } - - long t0 = (long)tOld[0]; - double x1 = 0.0; - double x2 = (double)((long)tOld[1] - t0); - double x3 = (double)((long)tOld[2] - t0); - double y1 = pOld[0]; - double y2 = pOld[1]; - double y3 = pOld[2]; - - double sx = x1 + x2 + x3; - double sy = y1 + y2 + y3; - double sxx = x1 * x1 + x2 * x2 + x3 * x3; - double sxy = x1 * y1 + x2 * y2 + x3 * y3; - - double den = 3.0 * sxx - sx * sx; - if(MathAbs(den) < 1e-10) - return false; - - m.a = (3.0 * sxy - sx * sy) / den; - m.b = (sy - m.a * sx) / 3.0; - - m.t1 = tOld[0]; - m.t2 = tOld[1]; - m.t3 = tOld[2]; - m.p1 = pOld[0]; - m.p2 = pOld[1]; - m.p3 = pOld[2]; - m.valid = true; - return true; -} - -double TrendlinePriceAtTime(const TrendlineModel &m, datetime t) -{ - if(!m.valid) - return 0.0; - double x = (double)((long)t - (long)m.t1); - return m.a * x + m.b; -} - -void DrawTrendline(const TrendlineModel &m) -{ - if(!InpDrawTrendline || !m.valid) - return; - - datetime tStart = m.t1; - datetime tEnd = iTime(_Symbol, _Period, 0); - if(tEnd <= tStart) - tEnd = m.t3 + PeriodSeconds(_Period) * 20; - - double pStart = TrendlinePriceAtTime(m, tStart); - double pEnd = TrendlinePriceAtTime(m, tEnd); - - if(ObjectFind(0, g_lineName) < 0) - ObjectCreate(0, g_lineName, OBJ_TREND, 0, tStart, pStart, tEnd, pEnd); - else - { - ObjectMove(0, g_lineName, 0, tStart, pStart); - ObjectMove(0, g_lineName, 1, tEnd, pEnd); - } - - ObjectSetInteger(0, g_lineName, OBJPROP_RAY_RIGHT, true); - ObjectSetInteger(0, g_lineName, OBJPROP_COLOR, clrGold); - ObjectSetInteger(0, g_lineName, OBJPROP_WIDTH, 2); -} - -bool GetCurrentPosition(long &type, double &volume) -{ - if(!PositionSelect(_Symbol)) - return false; - if((long)PositionGetInteger(POSITION_MAGIC) != InpMagic) - return false; - type = PositionGetInteger(POSITION_TYPE); - volume = PositionGetDouble(POSITION_VOLUME); - return true; -} - -bool IsWithinAnyTradeSession(const datetime nowServer) -{ - MqlDateTime dt; - TimeToStruct(nowServer, dt); - ENUM_DAY_OF_WEEK day = (ENUM_DAY_OF_WEEK)dt.day_of_week; - int nowSec = dt.hour * 3600 + dt.min * 60 + dt.sec; - - datetime from = 0; - datetime to = 0; - bool hasAny = false; - for(uint idx = 0; idx < 16; idx++) - { - if(!SymbolInfoSessionTrade(_Symbol, day, idx, from, to)) - break; - hasAny = true; - // SymbolInfoSessionTrade returns session boundaries as time-of-day values. - MqlDateTime fdt, tdt; - TimeToStruct(from, fdt); - TimeToStruct(to, tdt); - int fromSec = fdt.hour * 3600 + fdt.min * 60 + fdt.sec; - int toSec = tdt.hour * 3600 + tdt.min * 60 + tdt.sec; - - // from==to on some brokers means full-day session. - if(fromSec == toSec) - { - return true; - } - else if(fromSec < toSec) - { - if(nowSec >= fromSec && nowSec <= toSec) - return true; - } - else - { - // Session passes midnight. - if(nowSec >= fromSec || nowSec <= toSec) - return true; - } - } - // If broker does not expose sessions for this symbol, do not block by session. - if(!hasAny) - return true; - return false; -} - -bool CanOpenNewPositionNow(const ENUM_ORDER_TYPE orderType) -{ - if(!InpUseSessionModeGate) - return true; - if(InpBypassGateInTester && (bool)MQLInfoInteger(MQL_TESTER)) - return true; - - long tradeMode = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_MODE); - if(tradeMode == SYMBOL_TRADE_MODE_DISABLED || - tradeMode == SYMBOL_TRADE_MODE_CLOSEONLY) - return false; - if(orderType == ORDER_TYPE_BUY && - tradeMode == SYMBOL_TRADE_MODE_SHORTONLY) - return false; - if(orderType == ORDER_TYPE_SELL && - tradeMode == SYMBOL_TRADE_MODE_LONGONLY) - return false; - - if(!IsWithinAnyTradeSession(TimeCurrent())) - return false; - - return true; -} - -void TryExitOnBreak(const TrendlineModel &m) -{ - long posType; - double vol; - if(!GetCurrentPosition(posType, vol)) - return; - - double close1 = iClose(_Symbol, _Period, 1); - datetime t1 = iTime(_Symbol, _Period, 1); - double line1 = TrendlinePriceAtTime(m, t1); - double buf = InpBreakBuffer * _Point; - - bool closePos = false; - if(posType == POSITION_TYPE_BUY && close1 < (line1 - buf)) - closePos = true; - if(posType == POSITION_TYPE_SELL && close1 > (line1 + buf)) - closePos = true; - - if(closePos) - trade.PositionClose(_Symbol); -} - -void TryPullbackEntry(const TrendlineModel &m) -{ - long posType; - double vol; - if(GetCurrentPosition(posType, vol)) - return; - - MqlRates bars1[], bars2[]; - if(CopyRates(_Symbol, _Period, 1, 1, bars1) != 1) - return; - if(CopyRates(_Symbol, _Period, 2, 1, bars2) != 1) - return; - if(ArraySize(bars1) < 1 || ArraySize(bars2) < 1) - return; - - MqlRates b1 = bars1[0]; - MqlRates b2 = bars2[0]; - - double line1 = TrendlinePriceAtTime(m, b1.time); - double tol = InpLineTouchTolerance * _Point; - - bool upTrend = (m.a > 0.0); - bool downTrend = (m.a < 0.0); - - if(upTrend) - { - bool touched = (b1.low <= (line1 + tol)); - bool reclaim = (b1.close > line1); - bool bullish = (b1.close > b1.open); - bool stillHealthy = (b2.close >= TrendlinePriceAtTime(m, b2.time) - tol); - if(touched && reclaim && bullish && stillHealthy) - { - if(!CanOpenNewPositionNow(ORDER_TYPE_BUY)) - { - datetime nowBar = iTime(_Symbol, _Period, 0); - if(nowBar != g_lastEntryBlockLog) - { - g_lastEntryBlockLog = nowBar; - Print("Buy entry skipped: symbol mode/session does not allow opening now"); - } - return; - } - trade.Buy(InpLots, _Symbol, 0.0, 0.0, 0.0, "Pullback buy"); - } - } - else if(downTrend) - { - bool touched = (b1.high >= (line1 - tol)); - bool reject = (b1.close < line1); - bool bearish = (b1.close < b1.open); - bool stillWeak = (b2.close <= TrendlinePriceAtTime(m, b2.time) + tol); - if(touched && reject && bearish && stillWeak) - { - if(!CanOpenNewPositionNow(ORDER_TYPE_SELL)) - { - datetime nowBar = iTime(_Symbol, _Period, 0); - if(nowBar != g_lastEntryBlockLog) - { - g_lastEntryBlockLog = nowBar; - Print("Sell entry skipped: symbol mode/session does not allow opening now"); - } - return; - } - trade.Sell(InpLots, _Symbol, 0.0, 0.0, 0.0, "Pullback sell"); - } - } -} - -int OnInit() -{ - g_maHandle = iMA(_Symbol, InpHigherTF, InpMAPeriod, 0, InpMAMethod, InpAppliedPrice); - if(g_maHandle == INVALID_HANDLE) - return INIT_FAILED; - - trade.SetExpertMagicNumber(InpMagic); - g_lastBarTime = 0; - return INIT_SUCCEEDED; -} - -void OnDeinit(const int reason) -{ - if(g_maHandle != INVALID_HANDLE) - IndicatorRelease(g_maHandle); - if(ObjectFind(0, g_lineName) >= 0) - ObjectDelete(0, g_lineName); -} - -void OnTick() -{ - if(!IsNewBar()) - return; - - TrendlineModel m; - if(!BuildTrendlineFrom3Points(m)) - return; - - DrawTrendline(m); - TryExitOnBreak(m); - TryPullbackEntry(m); -} diff --git a/frontline/cluster-fuck/SimpleTrendlineXAUUSD/SimpleTrendline_optimization.set b/frontline/cluster-fuck/SimpleTrendlineXAUUSD/SimpleTrendline_optimization.set deleted file mode 100644 index 10ea2ee..0000000 --- a/frontline/cluster-fuck/SimpleTrendlineXAUUSD/SimpleTrendline_optimization.set +++ /dev/null @@ -1,14 +0,0 @@ -; SimpleTrendline.mq5 optimization preset -; Strategy Tester -> Inputs -> Load -; Focus: trendline pullback entries + break exits (no broker SL/TP) -; -InpHigherTF=16385||16385||0||16388||Y -InpMAPeriod=50||20||5||200||Y -InpMAMethod=1||0||1||3||Y -InpAppliedPrice=0||0||1||6||Y -InpHTFBarsToScan=400||200||100||1200||Y -InpLineTouchTolerance=100.0||30.0||10.0||300.0||Y -InpBreakBuffer=30.0||5.0||5.0||120.0||Y -InpLots=0.10||0.10||0.01||0.10||N -InpMagic=26042501||26042501||1||26042501||N -InpDrawTrendline=false||false||0||true||N diff --git a/frontline/cluster-gold/MagicNumberHelpers.mqh b/frontline/cluster-gold/MagicNumberHelpers.mqh deleted file mode 100644 index 0423cc4..0000000 --- a/frontline/cluster-gold/MagicNumberHelpers.mqh +++ /dev/null @@ -1,173 +0,0 @@ -//+------------------------------------------------------------------+ -//| MagicNumberHelpers.mqh | -//| Copyright 2025, MetaQuotes Ltd. | -//| https://www.mql5.com | -//+------------------------------------------------------------------+ -#property copyright "Copyright 2025, MetaQuotes Ltd." -#property link "https://www.mql5.com" -#property version "1.00" - -//+------------------------------------------------------------------+ -//| Select position by symbol and magic number | -//+------------------------------------------------------------------+ -bool PositionSelectByMagic(string symbol, ulong magic_number) -{ - for(int i = PositionsTotal() - 1; i >= 0; i--) - { - ulong ticket = PositionGetTicket(i); - if(ticket == 0) - continue; - if(!PositionSelectByTicket(ticket)) - continue; - if(PositionGetString(POSITION_SYMBOL) == symbol && - (ulong)PositionGetInteger(POSITION_MAGIC) == magic_number) - return true; - } - return false; -} - -//+------------------------------------------------------------------+ -//| Select position by ticket and verify magic number and symbol | -//+------------------------------------------------------------------+ -bool PositionSelectByTicketAndMagic(ulong ticket, ulong magic_number) -{ - if(!PositionSelectByTicket(ticket)) - return false; - - return (PositionGetInteger(POSITION_MAGIC) == magic_number); -} - -//+------------------------------------------------------------------+ -//| Select position by ticket and verify symbol, magic number | -//+------------------------------------------------------------------+ -bool PositionSelectByTicketSymbolAndMagic(ulong ticket, string symbol, ulong magic_number) -{ - if(!PositionSelectByTicket(ticket)) - return false; - - return (PositionGetString(POSITION_SYMBOL) == symbol && - PositionGetInteger(POSITION_MAGIC) == magic_number); -} - -//+------------------------------------------------------------------+ -//| Check if position exists with correct magic number | -//+------------------------------------------------------------------+ -bool PositionExistsByMagic(string symbol, ulong magic_number) -{ - return PositionSelectByMagic(symbol, magic_number); -} - -//+------------------------------------------------------------------+ -//| Get position ticket by symbol and magic number | -//+------------------------------------------------------------------+ -ulong GetPositionTicketByMagic(string symbol, ulong magic_number) -{ - for(int i = PositionsTotal() - 1; i >= 0; i--) - { - ulong ticket = PositionGetTicket(i); - if(ticket == 0) - continue; - if(!PositionSelectByTicket(ticket)) - continue; - if(PositionGetString(POSITION_SYMBOL) == symbol && - (ulong)PositionGetInteger(POSITION_MAGIC) == magic_number) - return ticket; - } - return 0; -} - -//+------------------------------------------------------------------+ -//| Close position by symbol and magic number | -//+------------------------------------------------------------------+ -bool ClosePositionByMagic(CTrade &trade_obj, string symbol, ulong magic_number) -{ - ulong ticket = GetPositionTicketByMagic(symbol, magic_number); - if(ticket == 0) - return false; - - return trade_obj.PositionClose(ticket); -} - -//+------------------------------------------------------------------+ -//| Modify position by symbol and magic number | -//+------------------------------------------------------------------+ -bool ModifyPositionByMagic(CTrade &trade_obj, string symbol, ulong magic_number, - double sl, double tp) -{ - ulong ticket = GetPositionTicketByMagic(symbol, magic_number); - if(ticket == 0) - return false; - - return trade_obj.PositionModify(ticket, sl, tp); -} - -//+------------------------------------------------------------------+ -//| Get position profit by symbol and magic number | -//+------------------------------------------------------------------+ -double GetPositionProfitByMagic(string symbol, ulong magic_number) -{ - if(!PositionSelectByMagic(symbol, magic_number)) - return 0.0; - - return PositionGetDouble(POSITION_PROFIT); -} - -//+------------------------------------------------------------------+ -//| Get position type by symbol and magic number | -//+------------------------------------------------------------------+ -ENUM_POSITION_TYPE GetPositionTypeByMagic(string symbol, ulong magic_number) -{ - if(!PositionSelectByMagic(symbol, magic_number)) - return WRONG_VALUE; - - return (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); -} - -//+------------------------------------------------------------------+ -//| Count positions by symbol and magic number | -//+------------------------------------------------------------------+ -int CountPositionsByMagic(string symbol, ulong magic_number) -{ - int count = 0; - for(int i = PositionsTotal() - 1; i >= 0; i--) - { - ulong ticket = PositionGetTicket(i); - if(ticket == 0) - continue; - if(!PositionSelectByTicket(ticket)) - continue; - if(PositionGetString(POSITION_SYMBOL) == symbol && - (ulong)PositionGetInteger(POSITION_MAGIC) == magic_number) - count++; - } - return count; -} - -//+------------------------------------------------------------------+ -//| Align volume to SYMBOL_VOLUME_STEP / min / max (avoids Invalid volume) | -//+------------------------------------------------------------------+ -double United_NormalizeVolume(const string symbol, double volume) -{ - double minLot = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN); - double maxLot = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX); - double lotStep = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP); - if(lotStep <= 0.0) - lotStep = 0.01; - - double v = MathFloor(volume / lotStep) * lotStep; - - if(v < minLot) - v = minLot; - if(v > maxLot) - v = maxLot; - - int digits = (int)MathCeil(-MathLog10(lotStep)); - if(digits < 0) - digits = 0; - if(digits > 8) - digits = 8; - - return NormalizeDouble(v, digits); -} - -//+------------------------------------------------------------------+ diff --git a/frontline/cluster-gold/STRATEGY_CONFIGURATION.md b/frontline/cluster-gold/STRATEGY_CONFIGURATION.md deleted file mode 100644 index 799c760..0000000 --- a/frontline/cluster-gold/STRATEGY_CONFIGURATION.md +++ /dev/null @@ -1,76 +0,0 @@ -# United EA Strategy Configuration Summary - -## Strategy Symbols and Magic Numbers - -### Strategy 1: DarvasBox -- **Symbol**: XAUUSD (Gold/USD) -- **Magic Number**: 135790 - -### Strategy 2: EMASlopeDistance -- **Symbol**: XAUUSD (Gold/USD) -- **Magic Number**: 12350 - -### Strategy 3: RSICrossOverReversal -- **Symbol**: XAUUSD (Gold/USD) -- **Magic Number**: 7 - -### Strategy 4: RSIMidPointHijack -- **Symbol**: XAUUSD (Gold/USD) -- **Magic Numbers**: - - RSIFollow: 1001 - - RSIReverse: 1002 - - EMACross: 1003 - -### Strategy 5: RSI Scalping APPL (Apple) -- **Symbol**: AAPL (Apple stock) -- **Magic Number**: 20001 -- **Note**: Changed from "APPL" to "AAPL" (correct ticker symbol) - -### Strategy 6: RSI Scalping BTCUSD -- **Symbol**: BTCUSD (Bitcoin/USD) -- **Magic Number**: 123459123 - -### Strategy 7: RSI Scalping MSFT -- **Symbol**: MSFT (Microsoft stock) -- **Magic Number**: 20002 - -### Strategy 8: RSI Scalping NVDA -- **Symbol**: NVDA (NVIDIA stock) -- **Magic Number**: 20003 - -### Strategy 9: RSI Scalping TSLA -- **Symbol**: TSLA (Tesla stock) -- **Magic Number**: 125421321 - -### Strategy 10: RSI Scalping XAUUSD -- **Symbol**: XAUUSD (Gold/USD) -- **Magic Number**: 129102315 - -## Important Notes - -1. **Stock Symbols**: Stock symbols (AAPL, MSFT, NVDA, TSLA) must be: - - Added to Market Watch in MetaTrader 5 - - Available from your broker - - Use the correct ticker symbol (e.g., "AAPL" not "APPL") - -2. **Magic Numbers**: All strategies have unique magic numbers to prevent interference: - - Each strategy can be identified by its magic number - - RSIMidPointHijack uses 3 magic numbers (one for each sub-strategy) - -3. **Symbol Configuration**: Each strategy trades on its own symbol: - - You can change symbols in the input parameters - - The EA will log warnings if a symbol is not available - - Strategies with unavailable symbols will be skipped (EA continues running) - -4. **RSI Scalping Strategies**: - - Each RSI Scalping variant trades on a different symbol - - They all use the same strategy logic but with different parameters - - Buy and sell signals are generated based on RSI levels for each symbol - -## Troubleshooting - -If stock symbols are not working: -1. Check if the symbol exists in your broker's symbol list -2. Add the symbol to Market Watch in MetaTrader 5 -3. Verify the symbol name matches your broker's naming convention -4. Some brokers use prefixes/suffixes (e.g., "NASDAQ:AAPL" or "AAPL.US") diff --git a/frontline/cluster-gold/Strategies/DarvasBoxStrategy.mqh b/frontline/cluster-gold/Strategies/DarvasBoxStrategy.mqh deleted file mode 100644 index 989dc21..0000000 --- a/frontline/cluster-gold/Strategies/DarvasBoxStrategy.mqh +++ /dev/null @@ -1,328 +0,0 @@ -//+------------------------------------------------------------------+ -//| DarvasBoxStrategy.mqh | -//+------------------------------------------------------------------+ -// MQL5: no #if — use #ifdef only (no defined() / || in one #if) -#ifdef UNITED_V2_DYNAMIC_LOTS -extern double g_DB_LotSize; -#define DARVAS_TRADE_LOT (g_DB_LotSize) -#else -#ifdef CLUSTER0_ORCHESTRATOR -extern double g_DB_LotSize; -#define DARVAS_TRADE_LOT (g_DB_LotSize) -#else -#define DARVAS_TRADE_LOT 0.01 -#endif -#endif - -bool InitDarvasBox(string symbol) -{ - dbData.symbol = symbol; - dbData.boxHigh = 0; - dbData.boxLow = 0; - dbData.boxFormed = false; - dbData.lastBoxTime = 0; - dbData.boxName = "DarvasBox_" + IntegerToString(DB_MagicNumber) + "_"; - - // Check if symbol exists - if(!SymbolSelect(symbol, true)) - { - Print("DarvasBox: Symbol '", symbol, "' not available in Market Watch. Please add it to Market Watch or check symbol name."); - return false; - } - - Sleep(100); // Wait for symbol to be ready - - dbData.point = SymbolInfoDouble(symbol, SYMBOL_POINT); - dbData.minStopLevel = SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL) * dbData.point; - - dbData.maHandle = iMA(symbol, DB_TrendTimeframe, DB_MA_Period, 0, DB_MA_Method, DB_MA_Price); - // Same TF as box highs/lows (H1 loop in CalculateDarvasBox). PERIOD_CURRENT breaks when United EA - // runs on a chart timeframe other than H1 (volume/breakout no longer match the box). - dbData.volumeHandle = iVolumes(symbol, PERIOD_H1, VOLUME_TICK); - - if(dbData.maHandle == INVALID_HANDLE || dbData.volumeHandle == INVALID_HANDLE) - { - Print("DarvasBox: Error creating indicators for '", symbol, "'"); - return false; - } - - dbData.trade.SetDeviationInPoints(10); - dbData.trade.SetTypeFilling(ORDER_FILLING_IOC); - dbData.trade.SetAsyncMode(false); - dbData.trade.SetExpertMagicNumber(DB_MagicNumber); - - ObjectsDeleteAll(0, dbData.boxName); - dbData.isInitialized = true; - Print("DarvasBox: Successfully initialized for symbol '", symbol, "'"); - return true; -} - -void DeinitDarvasBox() -{ - if(dbData.maHandle != INVALID_HANDLE) IndicatorRelease(dbData.maHandle); - if(dbData.volumeHandle != INVALID_HANDLE) IndicatorRelease(dbData.volumeHandle); - ObjectsDeleteAll(0, dbData.boxName); -} - -void DrawDarvasBox() -{ - if(!dbData.boxFormed) return; - - datetime time1 = iTime(dbData.symbol, PERIOD_H1, DB_BoxPeriod); - datetime time2 = iTime(dbData.symbol, PERIOD_H1, 0); - - ObjectsDeleteAll(0, dbData.boxName); - - ObjectCreate(0, dbData.boxName + "Top", OBJ_TREND, 0, time1, dbData.boxHigh, time2, dbData.boxHigh); - ObjectCreate(0, dbData.boxName + "Bottom", OBJ_TREND, 0, time1, dbData.boxLow, time2, dbData.boxLow); - - ObjectSetInteger(0, dbData.boxName + "Top", OBJPROP_COLOR, DB_BoxColor); - ObjectSetInteger(0, dbData.boxName + "Bottom", OBJPROP_COLOR, DB_BoxColor); - ObjectSetInteger(0, dbData.boxName + "Top", OBJPROP_WIDTH, DB_BoxWidth); - ObjectSetInteger(0, dbData.boxName + "Bottom", OBJPROP_WIDTH, DB_BoxWidth); - ObjectSetInteger(0, dbData.boxName + "Top", OBJPROP_RAY_RIGHT, true); - ObjectSetInteger(0, dbData.boxName + "Bottom", OBJPROP_RAY_RIGHT, true); -} - -void CalculateDarvasBox() -{ - double high = 0; - double low = DBL_MAX; - - // Find highest high and lowest low in the period - EXACTLY like original - for(int i = 0; i < DB_BoxPeriod; i++) - { - high = MathMax(high, iHigh(dbData.symbol, PERIOD_H1, i)); - low = MathMin(low, iLow(dbData.symbol, PERIOD_H1, i)); - } - - double range = high - low; - double allowedRange = DB_BoxDeviation * dbData.point; // Use dbData.point instead of _Point - - if(DB_EnableLogging) - { - Print("DarvasBox: Box Calculation - High: ", high, " Low: ", low, " Range: ", range, " Allowed Range: ", allowedRange); - } - - // Check if box is formed - EXACTLY like original - if(range <= allowedRange) - { - dbData.boxHigh = high; - dbData.boxLow = low; - dbData.boxFormed = true; - dbData.lastBoxTime = iTime(dbData.symbol, PERIOD_CURRENT, 0); - - // Draw the box - DrawDarvasBox(); - - if(DB_EnableLogging) - Print("DarvasBox: Box Formed - High: ", dbData.boxHigh, " Low: ", dbData.boxLow, " Time: ", dbData.lastBoxTime); - } - else - { - dbData.boxFormed = false; - // Delete box if it exists - ObjectsDeleteAll(0, dbData.boxName); - } -} - -bool ValidateStopLevels(double price, double &sl, double &tp, ENUM_ORDER_TYPE orderType) -{ - double minSlDistance = MathMax(dbData.minStopLevel, DB_StopLoss * dbData.point); - double minTpDistance = MathMax(dbData.minStopLevel, DB_TakeProfit * dbData.point); - - if(orderType == ORDER_TYPE_BUY) - { - sl = price - minSlDistance; - tp = price + minTpDistance; - } - else - { - sl = price + minSlDistance; - tp = price - minTpDistance; - } - - return true; -} - -bool IsTrendFavorable(ENUM_ORDER_TYPE orderType) -{ - if(!DB_UseTrendFilter) - return true; - - double ma[]; - ArraySetAsSeries(ma, true); - - if(CopyBuffer(dbData.maHandle, 0, 0, 2, ma) <= 0) - return false; - - double currentPrice = SymbolInfoDouble(dbData.symbol, SYMBOL_ASK); - double trendStrength = MathAbs(currentPrice - ma[0]) / dbData.point; - - if(orderType == ORDER_TYPE_BUY) - return (currentPrice > ma[0] && trendStrength > DB_TrendThreshold); - else - return (currentPrice < ma[0] && trendStrength > DB_TrendThreshold); -} - -bool CheckVolumeConditions() -{ - if(!DB_UseVolumeSpikeFilter) - return true; - - double volumes[]; - ArraySetAsSeries(volumes, true); - - if(CopyBuffer(dbData.volumeHandle, 0, 0, DB_VolumeMA_Period + 1, volumes) <= 0) - return false; - - double volumeMA = 0; - for(int i = 1; i <= DB_VolumeMA_Period; i++) - volumeMA += volumes[i]; - volumeMA /= DB_VolumeMA_Period; - - double currentVolume = volumes[0]; - if(volumeMA <= 0.0) - return (currentVolume > 0.0); - - double volumeRatio = currentVolume / volumeMA; - return (volumeRatio > DB_VolumeThresholdMultiplier); -} - -bool PlaceOrder(ENUM_ORDER_TYPE orderType, double price, double sl, double tp) -{ - if(!ValidateStopLevels(price, sl, tp, orderType)) - { - if(DB_EnableLogging) - Print("DarvasBox: Order rejected - Stop levels validation failed"); - return false; - } - - if(!IsTrendFavorable(orderType)) - { - if(DB_EnableLogging) - Print("DarvasBox: Order rejected - Trend not favorable for ", EnumToString(orderType)); - return false; - } - - if(!CheckVolumeConditions()) - { - if(DB_EnableLogging) - Print("DarvasBox: Order rejected - Volume conditions not met"); - return false; - } - - bool result = false; - const double lot = United_NormalizeVolume(dbData.symbol, DARVAS_TRADE_LOT); - if(lot <= 0.0) - { - Print("DarvasBox: Order rejected - invalid lot after normalize (raw=", DARVAS_TRADE_LOT, ")"); - return false; - } - - // Use market price (0) instead of explicit price - this ensures market order execution - // In backtesting, explicit price might fail if price has moved - if(orderType == ORDER_TYPE_BUY) - result = dbData.trade.Buy(lot, dbData.symbol, 0, sl, tp, "Darvas Box Breakout"); - else - result = dbData.trade.Sell(lot, dbData.symbol, 0, sl, tp, "Darvas Box Breakdown"); - - // Always log errors, success only if logging enabled - if(result) - { - if(DB_EnableLogging) - Print("DarvasBox: ", (orderType == ORDER_TYPE_BUY ? "Buy" : "Sell"), " Order Placed Successfully"); - } - else - { - // Always log failures with detailed info - uint retcode_uint = dbData.trade.ResultRetcode(); - int retcode = (int)retcode_uint; - string desc = dbData.trade.ResultRetcodeDescription(); - ulong deal = dbData.trade.ResultDeal(); - ulong order = dbData.trade.ResultOrder(); - Print("DarvasBox: ", (orderType == ORDER_TYPE_BUY ? "Buy" : "Sell"), - " Order Failed - Retcode: ", retcode, - ", Description: ", desc, - ", Deal: ", deal, - ", Order: ", order, - ", Symbol: ", dbData.symbol, - ", Requested Price: ", price, - ", SL: ", sl, - ", TP: ", tp); - } - - return result; -} - -void ProcessDarvasBox(string symbol) -{ - // Skip if not initialized (symbol not available) - if(!dbData.isInitialized) - return; - - dbData.symbol = symbol; // Update symbol in case it changed - - // Calculate new box levels - EXACTLY like original (called every tick) - CalculateDarvasBox(); - - // Check for trading signals - EXACTLY like original (checked every tick) - if(dbData.boxFormed) - { - double currentPrice = SymbolInfoDouble(dbData.symbol, SYMBOL_ASK); - long currentVolume_long = iVolume(dbData.symbol, PERIOD_H1, 0); - double currentVolume = (double)currentVolume_long; - - if(DB_EnableLogging) - { - Print("DarvasBox: Current Price: ", currentPrice, " Box High: ", dbData.boxHigh, " Box Low: ", dbData.boxLow); - Print("DarvasBox: Current Volume: ", currentVolume, " Volume Threshold: ", DB_VolumeThreshold); - } - - // Check for breakout above box - EXACTLY like original - if(currentPrice > dbData.boxHigh && currentVolume > DB_VolumeThreshold) - { - if(DB_EnableLogging) - Print("DarvasBox: Breakout Signal Detected - Price above box high"); - - // Buy signal - if(!PositionExistsByMagic(dbData.symbol, (ulong)DB_MagicNumber)) // No existing positions with our magic number - { - double sl = currentPrice - DB_StopLoss * dbData.point; - double tp = currentPrice + DB_TakeProfit * dbData.point; - - if(DB_EnableLogging) - Print("DarvasBox: Preparing Buy Order - Price: ", currentPrice, " SL: ", sl, " TP: ", tp); - - PlaceOrder(ORDER_TYPE_BUY, currentPrice, sl, tp); - } - else if(DB_EnableLogging) - Print("DarvasBox: Skipping Buy Signal - Position already exists"); - } - - // Check for breakdown below box - EXACTLY like original - if(currentPrice < dbData.boxLow && currentVolume > DB_VolumeThreshold) - { - if(DB_EnableLogging) - Print("DarvasBox: Breakdown Signal Detected - Price below box low"); - - // Sell signal - if(!PositionExistsByMagic(dbData.symbol, (ulong)DB_MagicNumber)) // No existing positions with our magic number - { - double sl = currentPrice + DB_StopLoss * dbData.point; - double tp = currentPrice - DB_TakeProfit * dbData.point; - - if(DB_EnableLogging) - Print("DarvasBox: Preparing Sell Order - Price: ", currentPrice, " SL: ", sl, " TP: ", tp); - - PlaceOrder(ORDER_TYPE_SELL, currentPrice, sl, tp); - } - else if(DB_EnableLogging) - Print("DarvasBox: Skipping Sell Signal - Position already exists"); - } - } - else if(DB_EnableLogging) - Print("DarvasBox: No Box Formed - Waiting for consolidation"); -} - -//+------------------------------------------------------------------+ diff --git a/frontline/cluster-gold/Strategies/EMASlopeDistanceStrategy.mqh b/frontline/cluster-gold/Strategies/EMASlopeDistanceStrategy.mqh deleted file mode 100644 index 2ddbeeb..0000000 --- a/frontline/cluster-gold/Strategies/EMASlopeDistanceStrategy.mqh +++ /dev/null @@ -1,576 +0,0 @@ -//+------------------------------------------------------------------+ -//| EMASlopeDistanceStrategy.mqh | -//+------------------------------------------------------------------+ - -bool InitEMASlopeDistance(string symbol) -{ - esData.symbol = symbol; - esData.letzte_überwachung_zeit = 0; - esData.überwachung_aktiv = false; - esData.preis_trigger_aktiv = false; - esData.steigung_trigger_aktiv = false; - esData.ticket = 0; - esData.trades_in_current_crossover = 0; - esData.crossover_detected = false; - esData.trade_open_time = 0; - esData.last_bar_time = 0; - esData.es_last_sl_adjust_success_time = 0; - - // Check if symbol exists - if(!SymbolSelect(symbol, true)) - { - Print("EMASlopeDistance: Symbol '", symbol, "' not available in Market Watch. Please add it to Market Watch or check symbol name."); - return false; - } - - Sleep(100); // Wait for symbol to be ready - - esData.trade.SetExpertMagicNumber(ES_MagicNumber); - esData.trade.SetDeviationInPoints(10); - esData.trade.SetTypeFilling(ORDER_FILLING_IOC); - - esData.ema_handle = iMA(symbol, ES_Timeframe, ES_EMA_Periode, 0, MODE_EMA, PRICE_CLOSE); - - if(esData.ema_handle == INVALID_HANDLE) - { - Print("EMASlopeDistance: Error creating EMA indicator for '", symbol, "'"); - return false; - } - - ArraySetAsSeries(esData.ema_array, true); - esData.isInitialized = true; - Print("EMASlopeDistance: Successfully initialized for symbol '", symbol, "'"); - return true; -} - -void DeinitEMASlopeDistance() -{ - if(esData.ema_handle != INVALID_HANDLE) - IndicatorRelease(esData.ema_handle); -} - -bool ES_IsWeeklyADXTrendFavorable(const ENUM_ORDER_TYPE order_type) -{ - if(!ES_UseWeeklyADXFilter) - return true; - - int adxShift = ES_WeeklyADXBarShift; - if(adxShift < 0) - adxShift = 0; - - int adx_handle = iADX(esData.symbol, PERIOD_W1, ES_WeeklyADXPeriod); - if(adx_handle == INVALID_HANDLE) - return false; - - double adx_buf[], plus_di_buf[], minus_di_buf[]; - ArraySetAsSeries(adx_buf, true); - ArraySetAsSeries(plus_di_buf, true); - ArraySetAsSeries(minus_di_buf, true); - - bool ok_adx = (CopyBuffer(adx_handle, 0, adxShift, 1, adx_buf) > 0); - bool ok_plus = (CopyBuffer(adx_handle, 1, adxShift, 1, plus_di_buf) > 0); - bool ok_minus = (CopyBuffer(adx_handle, 2, adxShift, 1, minus_di_buf) > 0); - IndicatorRelease(adx_handle); - - if(!ok_adx || !ok_plus || !ok_minus) - return false; - - double adx_value = adx_buf[0]; - double plus_di = plus_di_buf[0]; - double minus_di = minus_di_buf[0]; - - bool strength_ok = (adx_value >= ES_WeeklyADXMin); - bool direction_ok = true; - if(ES_WeeklyADXUseDirection) - { - if(order_type == ORDER_TYPE_BUY) - direction_ok = (plus_di > minus_di); - else - direction_ok = (minus_di > plus_di); - } - return strength_ok && direction_ok; -} - -bool ES_TrailingActivationReached(const double position_profit, const ENUM_POSITION_TYPE position_type, - const double pips_multiplier) -{ - if(ES_TrailingActivationPips <= 0.0) - return (position_profit > 0.0); - - const double open_px = PositionGetDouble(POSITION_PRICE_OPEN); - if(position_type == POSITION_TYPE_BUY) - { - const double bid = SymbolInfoDouble(esData.symbol, SYMBOL_BID); - return ((bid - open_px) / SymbolInfoDouble(esData.symbol, SYMBOL_POINT) / pips_multiplier >= ES_TrailingActivationPips); - } - const double ask = SymbolInfoDouble(esData.symbol, SYMBOL_ASK); - return ((open_px - ask) / SymbolInfoDouble(esData.symbol, SYMBOL_POINT) / pips_multiplier >= ES_TrailingActivationPips); -} - -//+------------------------------------------------------------------+ -//| EMA Berechnung (EMA Calculation) | -//+------------------------------------------------------------------+ -void BerechneEMA() -{ - //--- EMA Werte vom Indicator kopieren (Copy EMA values from indicator) - int copied = CopyBuffer(esData.ema_handle, 0, 0, 3, esData.ema_array); - - if(copied <= 0) - { - Print("TRACE: Fehler beim Kopieren der EMA Werte - Copied: ", copied); - return; - } - - Print("TRACE: EMA Werte kopiert: ", copied, " Bars"); - Print("TRACE: EMA [0]: ", esData.ema_array[0], " [1]: ", esData.ema_array[1], " [2]: ", esData.ema_array[2]); -} - -//+------------------------------------------------------------------+ -//| Trigger-Bedingungen prüfen (Check trigger conditions) | -//+------------------------------------------------------------------+ -void PrüfeTrigger() -{ - if(ArraySize(esData.ema_array) < 2) - { - Print("TRACE: Array zu klein - Größe: ", ArraySize(esData.ema_array)); - return; - } - - //--- Aktuelle Werte (Current values) - double aktueller_preis = SymbolInfoDouble(esData.symbol, SYMBOL_BID); - double aktueller_ask = SymbolInfoDouble(esData.symbol, SYMBOL_ASK); - double aktueller_close = iClose(esData.symbol, ES_Timeframe, 0); - int digits = (int)SymbolInfoInteger(esData.symbol, SYMBOL_DIGITS); - double point = SymbolInfoDouble(esData.symbol, SYMBOL_POINT); - double pips_multiplier = (digits == 3 || digits == 5) ? 10.0 : 1.0; - - //--- EMA Werte in Variablen (EMA values in variables) - double ema_aktuell = esData.ema_array[0]; - double ema_vorher = esData.ema_array[1]; - - //--- EMA Crossover Erkennung (EMA Crossover Detection) - // Prüfe ob Preis die EMA kreuzt (Check if price crosses EMA) - static double last_close = 0; - static double last_ema = 0; - - if(last_close != 0 && last_ema != 0) - { - bool crossover_bullish = (last_close <= last_ema) && (aktueller_close > ema_aktuell); - bool crossover_bearish = (last_close >= last_ema) && (aktueller_close < ema_aktuell); - - //--- Neues Crossover-Ereignis erkannt (New crossover event detected) - if(crossover_bullish || crossover_bearish) - { - esData.trades_in_current_crossover = 0; // Reset trade counter - Print("TRACE: EMA Crossover erkannt - ", (crossover_bullish ? "BULLISH" : "BEARISH"), " - Trade-Counter zurückgesetzt"); - Print("TRACE: Vorher: Close=", last_close, " EMA=", last_ema, " Jetzt: Close=", aktueller_close, " EMA=", ema_aktuell); - } - } - - //--- Aktuelle Werte für nächsten Vergleich speichern (Save current values for next comparison) - last_close = aktueller_close; - last_ema = ema_aktuell; - - //--- Preisbewegung zur EMA prüfen (Check price action to EMA) - double preis_abstand = MathAbs(aktueller_close - ema_aktuell) / point / pips_multiplier; - - Print("TRACE: Preis-Abstand: ", preis_abstand, " Pips (Schwelle: ", ES_PreisSchwelle, ")"); - Print("TRACE: Close: ", aktueller_close, " EMA: ", ema_aktuell); - Print("TRACE: Trades im aktuellen Crossover: ", esData.trades_in_current_crossover, "/", ES_MaxTradesPerCrossover); - - if(preis_abstand > ES_PreisSchwelle && !esData.preis_trigger_aktiv) - { - esData.preis_trigger_aktiv = true; - Print("TRACE: Preis-Trigger aktiviert: ", preis_abstand, " Pips"); - } - - //--- EMA Steigung prüfen (Check EMA slope) - double steigung = (ema_aktuell - ema_vorher) / point / pips_multiplier; - - Print("TRACE: EMA Steigung: ", steigung, " Pips (Schwelle: ", ES_SteigungSchwelle, ")"); - - if(MathAbs(steigung) > ES_SteigungSchwelle && !esData.steigung_trigger_aktiv) - { - esData.steigung_trigger_aktiv = true; - Print("TRACE: Steigungs-Trigger aktiviert: ", steigung, " Pips"); - } - - //--- Überwachung starten wenn beide Trigger aktiv sind (Start monitoring when both triggers are active) - if(esData.preis_trigger_aktiv && esData.steigung_trigger_aktiv && !esData.überwachung_aktiv) - { - esData.überwachung_aktiv = true; - - if(ES_UseBarData) - { - esData.letzte_überwachung_zeit = iTime(esData.symbol, ES_Timeframe, 0); // Aktuelle Bar-Zeit - Print("TRACE: Überwachung gestartet - Beide Trigger aktiv (Bar: ", TimeToString(esData.letzte_überwachung_zeit), ")"); - } - else - { - esData.letzte_überwachung_zeit = TimeCurrent(); // Aktuelle Tick-Zeit - Print("TRACE: Überwachung gestartet - Beide Trigger aktiv (Tick)"); - } - } - - //--- Trade platzieren wenn Überwachung aktiv und Preis über/unter EMA (Place trade when monitoring active and price above/below EMA) - if(esData.überwachung_aktiv) - { - bool bullish_signal = aktueller_close > ema_aktuell; - bool bearish_signal = aktueller_close < ema_aktuell; - - Print("TRACE: Signal Check - Bullish: ", bullish_signal, " Bearish: ", bearish_signal); - Print("TRACE: Close: ", aktueller_close, " EMA: ", ema_aktuell); - Print("TRACE: Differenz: ", aktueller_close - ema_aktuell); - - //--- Trade-Limit prüfen (Check trade limit) - if(esData.trades_in_current_crossover >= ES_MaxTradesPerCrossover) - { - Print("TRACE: Trade-Limit erreicht (", ES_MaxTradesPerCrossover, ") - Kein neuer Trade"); - return; - } - - if(bullish_signal && !PositionExistsByMagic(esData.symbol, (ulong)ES_MagicNumber)) - { - if(!ES_IsWeeklyADXTrendFavorable(ORDER_TYPE_BUY)) - { - Print("TRACE: Weekly ADX blockiert BUY-Entry"); - return; - } - Print("TRACE: Versuche KAUF-Trade zu platzieren (Trade #", esData.trades_in_current_crossover + 1, ")"); - if(PlatziereTrade(ORDER_TYPE_BUY)) - { - esData.trades_in_current_crossover++; - } - } - else if(bearish_signal && !PositionExistsByMagic(esData.symbol, (ulong)ES_MagicNumber)) - { - if(!ES_IsWeeklyADXTrendFavorable(ORDER_TYPE_SELL)) - { - Print("TRACE: Weekly ADX blockiert SELL-Entry"); - return; - } - Print("TRACE: Versuche VERKAUF-Trade zu platzieren (Trade #", esData.trades_in_current_crossover + 1, ")"); - if(PlatziereTrade(ORDER_TYPE_SELL)) - { - esData.trades_in_current_crossover++; - } - } - else if(PositionExistsByMagic(esData.symbol, (ulong)ES_MagicNumber)) - { - Print("TRACE: Position bereits offen - kein neuer Trade"); - } - } -} - -//+------------------------------------------------------------------+ -//| Trade platzieren (Place trade) | -//+------------------------------------------------------------------+ -bool PlatziereTrade(ENUM_ORDER_TYPE order_type) -{ - Print("TRACE: Versuche Trade zu platzieren - Typ: ", (order_type == ORDER_TYPE_BUY) ? "KAUF" : "VERKAUF"); - const double lot = United_NormalizeVolume(esData.symbol, g_ES_LotSize); - Print("TRACE: Lot (raw): ", g_ES_LotSize, " normalized: ", lot); - if(lot <= 0.0) - { - Print("TRACE: Abbruch — Lot nach Normalisierung ungültig"); - return false; - } - - bool success = false; - - if(order_type == ORDER_TYPE_BUY) - { - success = esData.trade.Buy(lot, esData.symbol, 0, 0, 0, "EMA Crossover Trade"); - } - else - { - success = esData.trade.Sell(lot, esData.symbol, 0, 0, 0, "EMA Crossover Trade"); - } - - if(success) - { - esData.ticket = (int)esData.trade.ResultOrder(); - Print("TRACE: Trade erfolgreich platziert: ", (order_type == ORDER_TYPE_BUY) ? "KAUF" : "VERKAUF", " Ticket: ", esData.ticket); - - //--- Trade-Öffnungszeit speichern (Save trade opening time) - esData.trade_open_time = iTime(esData.symbol, ES_Timeframe, 0); - esData.es_last_sl_adjust_success_time = 0; - Print("TRACE: Trade-Öffnungszeit: ", TimeToString(esData.trade_open_time)); - - //--- Überwachung zurücksetzen (Reset monitoring) - esData.überwachung_aktiv = false; - esData.preis_trigger_aktiv = false; - esData.steigung_trigger_aktiv = false; - - return true; - } - else - { - Print("TRACE: Fehler beim Platzieren des Trades - Retcode: ", esData.trade.ResultRetcode()); - Print("TRACE: Fehlerbeschreibung: ", esData.trade.ResultRetcodeDescription()); - - return false; - } -} - -//+------------------------------------------------------------------+ -//| Trades verwalten (Manage trades) | -//+------------------------------------------------------------------+ -void VerwalteTrades() -{ - if(!PositionSelectByMagic(esData.symbol, (ulong)ES_MagicNumber)) - return; - - if(ES_UseStaleStopLossExit && ES_StaleStopLossSeconds > 0) - { - const datetime stale_ref = (esData.es_last_sl_adjust_success_time > 0) - ? esData.es_last_sl_adjust_success_time - : (datetime)PositionGetInteger(POSITION_TIME); - if(TimeCurrent() - stale_ref >= ES_StaleStopLossSeconds) - { - SchließePosition("Stale stop loss - keine SL-Anpassung"); - return; - } - } - - double position_profit = PositionGetDouble(POSITION_PROFIT); - ENUM_POSITION_TYPE position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - - int digits = (int)SymbolInfoInteger(esData.symbol, SYMBOL_DIGITS); - double point = SymbolInfoDouble(esData.symbol, SYMBOL_POINT); - double pips_multiplier = (digits == 3 || digits == 5) ? 10.0 : 1.0; - const double trail_dist = ES_TrailingStop * point * pips_multiplier; - const long stops_level = SymbolInfoInteger(esData.symbol, SYMBOL_TRADE_STOPS_LEVEL); - const double min_dist = (double)stops_level * point; - - if(ES_UseTrailingStop && ES_TrailingStop > 0.0 && ES_TrailingActivationReached(position_profit, position_type, pips_multiplier)) - { - if(position_type == POSITION_TYPE_BUY) - { - const double bid = SymbolInfoDouble(esData.symbol, SYMBOL_BID); - double new_stop_loss = NormalizeDouble(bid - trail_dist, digits); - if(min_dist > 0.0 && bid - new_stop_loss < min_dist) - new_stop_loss = NormalizeDouble(bid - min_dist, digits); - const double current_stop_loss = PositionGetDouble(POSITION_SL); - if(new_stop_loss < bid && new_stop_loss > 0.0 && new_stop_loss > current_stop_loss) - ÄndereStopLoss(new_stop_loss); - } - else if(position_type == POSITION_TYPE_SELL) - { - const double ask = SymbolInfoDouble(esData.symbol, SYMBOL_ASK); - double new_stop_loss = NormalizeDouble(ask + trail_dist, digits); - if(min_dist > 0.0 && new_stop_loss - ask < min_dist) - new_stop_loss = NormalizeDouble(ask + min_dist, digits); - const double current_stop_loss = PositionGetDouble(POSITION_SL); - if(new_stop_loss > ask && new_stop_loss > 0.0 && - (new_stop_loss < current_stop_loss || current_stop_loss == 0.0)) - ÄndereStopLoss(new_stop_loss); - } - } - - //--- Ausstieg bei Preis unter/über EMA (Exit when price below/above EMA) - if(ArraySize(esData.ema_array) >= 1) - { - double aktueller_close = iClose(esData.symbol, ES_Timeframe, 0); - double ema_aktuell = esData.ema_array[0]; - bool exit_bullish = (position_type == POSITION_TYPE_SELL && aktueller_close > ema_aktuell); - bool exit_bearish = (position_type == POSITION_TYPE_BUY && aktueller_close < ema_aktuell); - - if(exit_bullish || exit_bearish) - { - Print("TRACE: Ausstiegssignal - Close: ", aktueller_close, " EMA: ", ema_aktuell); - SchließePosition("EMA Crossover Exit"); - - Print("TRACE: Position geschlossen - Trade-Counter bleibt bei ", esData.trades_in_current_crossover); - } - } - - //--- Profit-Prüfung nach X Bars (Profit check after X bars) - if(ES_CloseUnprofitableTrades && esData.trade_open_time != 0 && PositionExistsByMagic(esData.symbol, (ulong)ES_MagicNumber)) - { - Print("TRACE: Profit-Prüfung aktiviert - CloseUnprofitableTrades: ", ES_CloseUnprofitableTrades); - PrüfeProfitNachBars(); - } - else if(!ES_CloseUnprofitableTrades) - { - Print("TRACE: Profit-Prüfung deaktiviert - CloseUnprofitableTrades: ", ES_CloseUnprofitableTrades); - } -} - -//+------------------------------------------------------------------+ -//| Profit-Prüfung nach X Bars (Profit check after X bars) | -//+------------------------------------------------------------------+ -void PrüfeProfitNachBars() -{ - if(!PositionSelectByMagic(esData.symbol, (ulong)ES_MagicNumber)) - { - return; // Keine Position offen - } - - datetime current_bar_time = iTime(esData.symbol, ES_Timeframe, 0); - int bars_since_trade_open = iBarShift(esData.symbol, ES_Timeframe, esData.trade_open_time); - - Print("TRACE: Bars seit Trade-Öffnung: ", bars_since_trade_open, "/", ES_ProfitCheckBars); - - //--- Prüfe ob genügend Bars vergangen sind (Check if enough bars have passed) - if(bars_since_trade_open >= ES_ProfitCheckBars) - { - double position_profit = PositionGetDouble(POSITION_PROFIT); - double position_volume = PositionGetDouble(POSITION_VOLUME); - ENUM_POSITION_TYPE position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - - Print("TRACE: Profit-Prüfung nach ", ES_ProfitCheckBars, " Bars"); - Print("TRACE: Position Profit: ", position_profit, " USD"); - - //--- Schließe Position wenn nicht im Profit (Close position if not in profit) - if(position_profit <= 0) - { - Print("TRACE: Position nicht im Profit - Schließe Position"); - SchließePosition("Profit Check - Unprofitable"); - - //--- Trade-Öffnungszeit zurücksetzen (Reset trade opening time) - esData.trade_open_time = 0; - Print("TRACE: Trade-Öffnungszeit zurückgesetzt"); - } - else - { - Print("TRACE: Position im Profit - Behalte Position"); - //--- Trade-Öffnungszeit zurücksetzen um weitere Prüfungen zu vermeiden (Reset to avoid further checks) - esData.trade_open_time = 0; - } - } -} - -//+------------------------------------------------------------------+ -//| Stop Loss ändern (Modify Stop Loss) | -//+------------------------------------------------------------------+ -void ÄndereStopLoss(double new_stop_loss) -{ - Print("TRACE: Versuche Stop Loss zu ändern auf: ", new_stop_loss); - - bool success = ModifyPositionByMagic(esData.trade, esData.symbol, (ulong)ES_MagicNumber, new_stop_loss, PositionGetDouble(POSITION_TP)); - - if(success) - { - esData.es_last_sl_adjust_success_time = TimeCurrent(); - Print("TRACE: Stop Loss erfolgreich geändert auf: ", new_stop_loss); - } - else - { - Print("TRACE: Fehler beim Ändern des Stop Loss - Retcode: ", esData.trade.ResultRetcode()); - Print("TRACE: Fehlerbeschreibung: ", esData.trade.ResultRetcodeDescription()); - } -} - -//+------------------------------------------------------------------+ -//| Position schließen (Close position) | -//+------------------------------------------------------------------+ -void SchließePosition(string reason = "Unbekannt") -{ - Print("TRACE: Versuche Position zu schließen - Grund: ", reason); - - bool success = ClosePositionByMagic(esData.trade, esData.symbol, (ulong)ES_MagicNumber); - - if(success) - { - esData.es_last_sl_adjust_success_time = 0; - Print("TRACE: Position erfolgreich geschlossen - Grund: ", reason); - } - else - { - Print("TRACE: Fehler beim Schließen der Position - Retcode: ", esData.trade.ResultRetcode()); - Print("TRACE: Fehlerbeschreibung: ", esData.trade.ResultRetcodeDescription()); - } -} - -//+------------------------------------------------------------------+ -//| Expert tick function | -//+------------------------------------------------------------------+ -void ProcessEMASlopeDistance(string symbol) -{ - if(!esData.isInitialized) - return; - - esData.symbol = symbol; - - const datetime current_bar_time = iTime(esData.symbol, ES_Timeframe, 0); - const bool new_bar = (current_bar_time != esData.last_bar_time); - const bool has_position = PositionExistsByMagic(esData.symbol, (ulong)ES_MagicNumber); - - if(ES_UseBarData && !new_bar && !has_position) - return; - - if(new_bar) - esData.last_bar_time = current_bar_time; - - BerechneEMA(); - - const bool run_signals = (!ES_UseBarData || new_bar); - - if(run_signals && ArraySize(esData.ema_array) > 0) - { - double aktueller_close = iClose(esData.symbol, ES_Timeframe, 0); - double ema_aktuell = esData.ema_array[0]; - double ema_vorher = esData.ema_array[1]; - double point = SymbolInfoDouble(esData.symbol, SYMBOL_POINT); - double preis_abstand = MathAbs(aktueller_close - ema_aktuell) / point; - double steigung = (ema_aktuell - ema_vorher) / point; - - if(ES_UseBarData) - { - Print("=== DEBUG INFO (Neuer Bar) ==="); - Print("Bar Zeit: ", TimeToString(iTime(esData.symbol, ES_Timeframe, 0))); - } - else - { - Print("=== DEBUG INFO (Tick) ==="); - } - - Print("Aktueller Close: ", aktueller_close); - Print("EMA: ", ema_aktuell); - Print("Preis-Abstand: ", preis_abstand, " Pips"); - Print("EMA Steigung: ", steigung, " Pips"); - Print("Differenz Close-EMA: ", aktueller_close - ema_aktuell); - Print("Preis-Trigger: ", esData.preis_trigger_aktiv, " Steigungs-Trigger: ", esData.steigung_trigger_aktiv); - Print("Überwachung aktiv: ", esData.überwachung_aktiv); - Print("Position offen: ", PositionExistsByMagic(esData.symbol, (ulong)ES_MagicNumber)); - Print("Trades im aktuellen Crossover: ", esData.trades_in_current_crossover, "/", ES_MaxTradesPerCrossover); - Print("=================="); - } - - if(run_signals) - { - if(esData.überwachung_aktiv) - { - if(ES_UseBarData) - { - int bars_since_monitoring = iBarShift(esData.symbol, ES_Timeframe, esData.letzte_überwachung_zeit); - int timeout_bars = (int)(ES_ÜberwachungTimeout / PeriodSeconds(ES_Timeframe)); - - if(bars_since_monitoring > timeout_bars) - { - esData.überwachung_aktiv = false; - esData.preis_trigger_aktiv = false; - esData.steigung_trigger_aktiv = false; - Print("Überwachung beendet - Bar-basierte Zeitüberschreitung (", bars_since_monitoring, " Bars)"); - } - } - else - { - if(TimeCurrent() - esData.letzte_überwachung_zeit > ES_ÜberwachungTimeout) - { - esData.überwachung_aktiv = false; - esData.preis_trigger_aktiv = false; - esData.steigung_trigger_aktiv = false; - Print("Überwachung beendet - Tick-basierte Zeitüberschreitung"); - } - } - } - - PrüfeTrigger(); - } - - VerwalteTrades(); -} - -//+------------------------------------------------------------------+ diff --git a/frontline/cluster-gold/Strategies/RSIConsolidationStrategy.mqh b/frontline/cluster-gold/Strategies/RSIConsolidationStrategy.mqh deleted file mode 100644 index c996950..0000000 --- a/frontline/cluster-gold/Strategies/RSIConsolidationStrategy.mqh +++ /dev/null @@ -1,387 +0,0 @@ -//+------------------------------------------------------------------+ -//| RSIConsolidationStrategy.mqh | -//| Ported from cluster-0/RSIConsolidation/RSIConsolidation.mq5 | -//+------------------------------------------------------------------+ -#ifndef RSI_CONSOLIDATION_STRATEGY_MQH -#define RSI_CONSOLIDATION_STRATEGY_MQH - -struct RSIConsolidationData -{ - string symbol; - bool isInitialized; - CTrade trade; - ENUM_TIMEFRAMES signalTF; - bool entryOnNewBarOnly; - int adxPeriod; - double adxMax; - bool useATRRatioFilter; - int atrPeriod; - int atrSmaPeriod; - double atrRatioMax; - bool useFlatEMAFilter; - int emaFast; - int emaSlow; - double emaSeparationMaxPct; - int rsiPeriod; - ENUM_APPLIED_PRICE rsiPrice; - double rsiOversold; - double rsiOverbought; - bool useRSIMeanExit; - double rsiExitLong; - double rsiExitShort; - double slAtrMult; - double tpAtrMult; - int maxBarsInTrade; - ulong magic; - int slippage; - int maxSpreadPoints; - int h_rsi; - int h_adx; - int h_atr; - int h_ema_fast; - int h_ema_slow; - datetime lastBar; -}; - -bool RCO_Copy1(const int handle, double &v) -{ - double b[]; - ArraySetAsSeries(b, true); - if(CopyBuffer(handle, 0, 0, 1, b) < 1) - return false; - v = b[0]; - return true; -} - -bool RCO_RsiBuffers(RSIConsolidationData &d, double &cur, double &prev, double &twoAgo) -{ - double b[]; - ArraySetAsSeries(b, true); - if(CopyBuffer(d.h_rsi, 0, 0, 3, b) < 3) - return false; - cur = b[0]; - prev = b[1]; - twoAgo = b[2]; - return true; -} - -double RCO_NormalizeVolume(const string sym, double vol) -{ - double minLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN); - double maxLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX); - double step = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP); - if(step > 0.0) - vol = MathFloor(vol / step) * step; - if(vol < minLot) - vol = minLot; - if(vol > maxLot) - vol = maxLot; - return vol; -} - -int RCO_CurrentSpreadPoints(const string sym) -{ - long spread = 0; - if(!SymbolInfoInteger(sym, SYMBOL_SPREAD, spread)) - return 999999; - return (int)spread; -} - -double RCO_MinStopsDistancePrice(const string sym) -{ - long lvl = 0; - if(!SymbolInfoInteger(sym, SYMBOL_TRADE_STOPS_LEVEL, lvl)) - return 0; - double pt = SymbolInfoDouble(sym, SYMBOL_POINT); - if(pt <= 0) - return 0; - return (double)lvl * pt; -} - -bool RCO_RegimeIsConsolidation(RSIConsolidationData &d) -{ - double adx = 0; - if(!RCO_Copy1(d.h_adx, adx)) - return false; - if(adx >= d.adxMax) - return false; - - if(d.useATRRatioFilter) - { - double atrArr[]; - ArraySetAsSeries(atrArr, true); - if(CopyBuffer(d.h_atr, 0, 0, d.atrSmaPeriod + 1, atrArr) < d.atrSmaPeriod + 1) - return false; - double sum = 0; - for(int i = 1; i <= d.atrSmaPeriod; i++) - sum += atrArr[i]; - double smaAtr = sum / (double)d.atrSmaPeriod; - if(smaAtr <= 0.0) - return false; - double ratio = atrArr[0] / smaAtr; - if(ratio > d.atrRatioMax) - return false; - } - - if(d.useFlatEMAFilter) - { - double ef[], es[]; - ArraySetAsSeries(ef, true); - ArraySetAsSeries(es, true); - if(CopyBuffer(d.h_ema_fast, 0, 0, 1, ef) < 1) - return false; - if(CopyBuffer(d.h_ema_slow, 0, 0, 1, es) < 1) - return false; - double c = SymbolInfoDouble(d.symbol, SYMBOL_BID); - if(c <= 0) - return false; - double sep = MathAbs(ef[0] - es[0]) / c * 100.0; - if(sep > d.emaSeparationMaxPct) - return false; - } - - return true; -} - -bool RCO_EntryBuyCross(RSIConsolidationData &d, const double twoAgo, const double prev) -{ - return (twoAgo <= d.rsiOversold && prev > d.rsiOversold); -} - -bool RCO_EntrySellCross(RSIConsolidationData &d, const double twoAgo, const double prev) -{ - return (twoAgo >= d.rsiOverbought && prev < d.rsiOverbought); -} - -void RCO_TryCloseByRSI(RSIConsolidationData &d, const ENUM_POSITION_TYPE typ, const double rsi) -{ - ulong tk = GetPositionTicketByMagic(d.symbol, d.magic); - if(tk == 0 || !PositionSelectByTicketSymbolAndMagic(tk, d.symbol, d.magic)) - return; - if(!d.useRSIMeanExit) - return; - if(typ == POSITION_TYPE_BUY && rsi >= d.rsiExitLong) - d.trade.PositionClose(tk); - else if(typ == POSITION_TYPE_SELL && rsi <= d.rsiExitShort) - d.trade.PositionClose(tk); -} - -void RCO_ManageOpenPosition(RSIConsolidationData &d, const double rsi) -{ - ulong tk = GetPositionTicketByMagic(d.symbol, d.magic); - if(tk == 0 || !PositionSelectByTicketSymbolAndMagic(tk, d.symbol, d.magic)) - return; - ENUM_POSITION_TYPE typ = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - datetime openT = (datetime)PositionGetInteger(POSITION_TIME); - int barsAgo = iBarShift(d.symbol, d.signalTF, openT, false); - if(barsAgo >= 0 && barsAgo >= d.maxBarsInTrade) - { - d.trade.PositionClose(tk); - return; - } - RCO_TryCloseByRSI(d, typ, rsi); -} - -bool InitRSIConsolidation(RSIConsolidationData &d, - const string inpSymbol, - const ENUM_TIMEFRAMES signalTF, - const bool entryOnNewBarOnly, - const int adxPeriod, - const double adxMax, - const bool useATRRatioFilter, - const int atrPeriod, - const int atrSmaPeriod, - const double atrRatioMax, - const bool useFlatEMAFilter, - const int emaFast, - const int emaSlow, - const double emaSeparationMaxPct, - const int rsiPeriod, - const ENUM_APPLIED_PRICE rsiPrice, - const double rsiOversold, - const double rsiOverbought, - const bool useRSIMeanExit, - const double rsiExitLong, - const double rsiExitShort, - const double slAtrMult, - const double tpAtrMult, - const int maxBarsInTrade, - const ulong magic, - const int slippage, - const int maxSpreadPoints) -{ - d.isInitialized = false; - d.symbol = inpSymbol; - StringTrimLeft(d.symbol); - StringTrimRight(d.symbol); - if(StringLen(d.symbol) == 0) - d.symbol = _Symbol; - - d.signalTF = signalTF; - d.entryOnNewBarOnly = entryOnNewBarOnly; - d.adxPeriod = adxPeriod; - d.adxMax = adxMax; - d.useATRRatioFilter = useATRRatioFilter; - d.atrPeriod = atrPeriod; - d.atrSmaPeriod = atrSmaPeriod; - d.atrRatioMax = atrRatioMax; - d.useFlatEMAFilter = useFlatEMAFilter; - d.emaFast = emaFast; - d.emaSlow = emaSlow; - d.emaSeparationMaxPct = emaSeparationMaxPct; - d.rsiPeriod = rsiPeriod; - d.rsiPrice = rsiPrice; - d.rsiOversold = rsiOversold; - d.rsiOverbought = rsiOverbought; - d.useRSIMeanExit = useRSIMeanExit; - d.rsiExitLong = rsiExitLong; - d.rsiExitShort = rsiExitShort; - d.slAtrMult = slAtrMult; - d.tpAtrMult = tpAtrMult; - d.maxBarsInTrade = maxBarsInTrade; - d.magic = magic; - d.slippage = slippage; - d.maxSpreadPoints = maxSpreadPoints; - d.lastBar = 0; - d.h_rsi = INVALID_HANDLE; - d.h_adx = INVALID_HANDLE; - d.h_atr = INVALID_HANDLE; - d.h_ema_fast = INVALID_HANDLE; - d.h_ema_slow = INVALID_HANDLE; - d.isInitialized = false; - - if(!SymbolSelect(d.symbol, true)) - { - Print("RSIConsolidation: SymbolSelect failed: ", d.symbol); - return false; - } - - d.trade.SetExpertMagicNumber((long)d.magic); - d.trade.SetDeviationInPoints(d.slippage); - d.trade.SetTypeFillingBySymbol(d.symbol); - - d.h_rsi = iRSI(d.symbol, d.signalTF, d.rsiPeriod, d.rsiPrice); - d.h_adx = iADX(d.symbol, d.signalTF, d.adxPeriod); - d.h_atr = iATR(d.symbol, d.signalTF, d.atrPeriod); - d.h_ema_fast = iMA(d.symbol, d.signalTF, d.emaFast, 0, MODE_EMA, PRICE_CLOSE); - d.h_ema_slow = iMA(d.symbol, d.signalTF, d.emaSlow, 0, MODE_EMA, PRICE_CLOSE); - - if(d.h_rsi == INVALID_HANDLE || d.h_adx == INVALID_HANDLE || d.h_atr == INVALID_HANDLE - || d.h_ema_fast == INVALID_HANDLE || d.h_ema_slow == INVALID_HANDLE) - { - Print("RSIConsolidation: indicator init failed"); - DeinitRSIConsolidation(d); - return false; - } - - d.isInitialized = true; - Print("RSIConsolidation: symbol=", d.symbol, " TF=", EnumToString(d.signalTF)); - return true; -} - -void DeinitRSIConsolidation(RSIConsolidationData &d) -{ - if(d.h_rsi != INVALID_HANDLE) - IndicatorRelease(d.h_rsi); - if(d.h_adx != INVALID_HANDLE) - IndicatorRelease(d.h_adx); - if(d.h_atr != INVALID_HANDLE) - IndicatorRelease(d.h_atr); - if(d.h_ema_fast != INVALID_HANDLE) - IndicatorRelease(d.h_ema_fast); - if(d.h_ema_slow != INVALID_HANDLE) - IndicatorRelease(d.h_ema_slow); - d.h_rsi = INVALID_HANDLE; - d.h_adx = INVALID_HANDLE; - d.h_atr = INVALID_HANDLE; - d.h_ema_fast = INVALID_HANDLE; - d.h_ema_slow = INVALID_HANDLE; - d.isInitialized = false; -} - -bool RCO_EnoughHistory(RSIConsolidationData &d) -{ - int need = MathMax(d.rsiPeriod + 3, MathMax(d.adxPeriod + 2, d.atrSmaPeriod + 3)); - if(Bars(d.symbol, d.signalTF) < need) - return false; - return true; -} - -void ProcessRSIConsolidation(RSIConsolidationData &d, const double lots) -{ - if(!d.isInitialized) - return; - - if(!RCO_EnoughHistory(d)) - return; - - if(d.maxSpreadPoints > 0 && RCO_CurrentSpreadPoints(d.symbol) > d.maxSpreadPoints) - return; - - double rsi, rsiPrev, rsi2; - if(!RCO_RsiBuffers(d, rsi, rsiPrev, rsi2)) - return; - - datetime barTime = iTime(d.symbol, d.signalTF, 0); - bool isNew = (barTime != d.lastBar); - - if(PositionExistsByMagic(d.symbol, d.magic)) - { - RCO_ManageOpenPosition(d, rsi); - if(isNew) - d.lastBar = barTime; - return; - } - - if(d.entryOnNewBarOnly && !isNew) - return; - - d.lastBar = barTime; - - if(!RCO_RegimeIsConsolidation(d)) - return; - - double atrArr[]; - ArraySetAsSeries(atrArr, true); - if(CopyBuffer(d.h_atr, 0, 0, 1, atrArr) < 1) - return; - double atr = atrArr[0]; - int dig = (int)SymbolInfoInteger(d.symbol, SYMBOL_DIGITS); - - double slDist = atr * d.slAtrMult; - double tpDist = atr * d.tpAtrMult; - double minD = RCO_MinStopsDistancePrice(d.symbol); - if(slDist < minD) - slDist = minD; - if(tpDist < minD) - tpDist = minD; - - double vol = RCO_NormalizeVolume(d.symbol, lots); - - if(RCO_EntryBuyCross(d, rsi2, rsiPrev)) - { - if(!United_MayOpenNewEntry(d.symbol, d.magic, true)) - return; - double ask = SymbolInfoDouble(d.symbol, SYMBOL_ASK); - double sl = ask - slDist; - double tp = ask + tpDist; - sl = NormalizeDouble(sl, dig); - tp = NormalizeDouble(tp, dig); - if(!d.trade.Buy(vol, d.symbol, ask, sl, tp, "RSIConsolidation BUY")) - Print("RSIConsolidation BUY failed | retcode=", d.trade.ResultRetcode(), " ", d.trade.ResultRetcodeDescription()); - } - else if(RCO_EntrySellCross(d, rsi2, rsiPrev)) - { - if(!United_MayOpenNewEntry(d.symbol, d.magic, false)) - return; - double bid = SymbolInfoDouble(d.symbol, SYMBOL_BID); - double sl = bid + slDist; - double tp = bid - tpDist; - sl = NormalizeDouble(sl, dig); - tp = NormalizeDouble(tp, dig); - if(!d.trade.Sell(vol, d.symbol, bid, sl, tp, "RSIConsolidation SELL")) - Print("RSIConsolidation SELL failed | retcode=", d.trade.ResultRetcode(), " ", d.trade.ResultRetcodeDescription()); - } -} - -#endif // RSI_CONSOLIDATION_STRATEGY_MQH diff --git a/frontline/cluster-gold/Strategies/RSICrossOverReversalStrategy.mqh b/frontline/cluster-gold/Strategies/RSICrossOverReversalStrategy.mqh deleted file mode 100644 index ddc5f5a..0000000 --- a/frontline/cluster-gold/Strategies/RSICrossOverReversalStrategy.mqh +++ /dev/null @@ -1,269 +0,0 @@ -//+------------------------------------------------------------------+ -//| RSICrossOverReversalStrategy.mqh | -//+------------------------------------------------------------------+ - -void WeekDays_Init() -{ - rcData.WeekDays[0] = RC_Sunday; - rcData.WeekDays[1] = RC_Monday; - rcData.WeekDays[2] = RC_Tuesday; - rcData.WeekDays[3] = RC_Wednesday; - rcData.WeekDays[4] = RC_Thursday; - rcData.WeekDays[5] = RC_Friday; - rcData.WeekDays[6] = RC_Saturday; -} - -bool WeekDays_Check(datetime aTime) -{ - MqlDateTime stm; - TimeToStruct(aTime, stm); - return(rcData.WeekDays[stm.day_of_week]); -} - -bool RC_HourInWindow(const int h, const int beginRaw, const int endRaw) -{ - const int b = beginRaw % 24; - const int e = endRaw % 24; - if(b == e) - return false; - if(b < e) - return (h >= b && h < e); - return (h >= b || h < e); -} - -bool RC_TradingHoursAllow(const int currentHour) -{ - return RC_HourInWindow(currentHour, RC_tradingHourOneBegin, RC_tradingHourOneEnd) - || RC_HourInWindow(currentHour, RC_tradingHourTwoBegin, RC_tradingHourTwoEnd); -} - -int TimeHour(datetime when = 0) -{ - if(when == 0) when = TimeCurrent(); - MqlDateTime dt; - TimeToStruct(when, dt); - return dt.hour; -} - -bool InitRSICrossOverReversal(string symbol) -{ - WeekDays_Init(); - - rcData.symbol = symbol; - rcData.previousRSIDef = 0; - rcData.lastTradeTime = 0; - rcData.bartime = 0; - rcData.lastBarTime = 0; - - // Check if symbol exists - if(!SymbolSelect(symbol, true)) - { - Print("RSICrossOverReversal: Symbol '", symbol, "' not available in Market Watch. Please add it to Market Watch or check symbol name."); - return false; - } - - Sleep(100); // Wait for symbol to be ready - - rcData.rsiHandle = iRSI(symbol, RC_TimeFrame1, RC_rsiPeriod, PRICE_CLOSE); - if(rcData.rsiHandle == INVALID_HANDLE) - { - Print("RSICrossOverReversal: Error creating RSI handle for '", symbol, "'"); - return false; - } - - rcData.emaHandle = iMA(symbol, RC_TimeFrame2, RC_emaPeriod, 0, MODE_EMA, PRICE_CLOSE); - if(rcData.emaHandle == INVALID_HANDLE) - { - Print("RSICrossOverReversal: Error creating EMA handle for '", symbol, "'"); - return false; - } - - rcData.trade.SetExpertMagicNumber(RC_MagicNumber); - rcData.trade.SetDeviationInPoints(RC_slippage); - rcData.isInitialized = true; - Print("RSICrossOverReversal: Successfully initialized for symbol '", symbol, "'"); - return true; -} - -void DeinitRSICrossOverReversal() -{ - if(rcData.rsiHandle != INVALID_HANDLE) - IndicatorRelease(rcData.rsiHandle); - if(rcData.emaHandle != INVALID_HANDLE) - IndicatorRelease(rcData.emaHandle); -} - -void Close_Position_MN(ulong magicNumber) -{ - ClosePositionByMagic(rcData.trade, rcData.symbol, (int)magicNumber); -} - -void ApplyTrailingStop() -{ - if(!PositionSelectByMagic(rcData.symbol, RC_MagicNumber)) - return; - - ulong PositionTicket = PositionGetInteger(POSITION_TICKET); - ENUM_POSITION_TYPE trade_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - string symbol = rcData.symbol; - - double POINT = SymbolInfoDouble(symbol, SYMBOL_POINT); - int DIGIT = (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS); - - if(trade_type == POSITION_TYPE_BUY) - { - double Bid = NormalizeDouble(SymbolInfoDouble(symbol, SYMBOL_BID), DIGIT); - - if(Bid - PositionGetDouble(POSITION_PRICE_OPEN) > NormalizeDouble(POINT * RC_TrailingStop, DIGIT)) - { - if(PositionGetDouble(POSITION_SL) < NormalizeDouble(Bid - POINT * RC_TrailingStop, DIGIT)) - { - ModifyPositionByMagic(rcData.trade, symbol, RC_MagicNumber, - NormalizeDouble(Bid - POINT * RC_TrailingStop, DIGIT), - PositionGetDouble(POSITION_TP)); - } - } - } - else if(trade_type == POSITION_TYPE_SELL) - { - double Ask = NormalizeDouble(SymbolInfoDouble(symbol, SYMBOL_ASK), DIGIT); - - if((PositionGetDouble(POSITION_PRICE_OPEN) - Ask) > NormalizeDouble(POINT * RC_TrailingStop, DIGIT)) - { - if((PositionGetDouble(POSITION_SL) > NormalizeDouble(Ask + POINT * RC_TrailingStop, DIGIT)) || - (PositionGetDouble(POSITION_SL) == 0)) - { - ModifyPositionByMagic(rcData.trade, symbol, RC_MagicNumber, - NormalizeDouble(Ask + POINT * RC_TrailingStop, DIGIT), - PositionGetDouble(POSITION_TP)); - } - } - } -} - -void ProcessRSICrossOverReversal(string symbol) -{ - // Skip if not initialized (symbol not available) - if(!rcData.isInitialized) - return; - - rcData.symbol = symbol; // Update symbol in case it changed - if(rcData.bartime == iTime(rcData.symbol, RC_BarTimeFrame, 0)) - return; - rcData.bartime = iTime(rcData.symbol, RC_BarTimeFrame, 0); - - double rsi[]; - if(CopyBuffer(rcData.rsiHandle, 0, 0, 2, rsi) <= 0) - return; - - double ema[]; - if(CopyBuffer(rcData.emaHandle, 0, 0, 2, ema) <= 0) - return; - - datetime currentTime = TimeCurrent(); - int currentHour = TimeHour(TimeCurrent()); - - if(!WeekDays_Check(TimeTradeServer())) - { - Close_Position_MN(RC_MagicNumber); - return; - } - - if(!RC_TradingHoursAllow(currentHour)) - { - Close_Position_MN(RC_MagicNumber); - return; - } - - bool hasPosition = PositionExistsByMagic(rcData.symbol, RC_MagicNumber); - - double currentRSI = rsi[0]; - double previousRSI = rsi[1]; - - if(rcData.previousRSIDef == 0) - { - rcData.previousRSIDef = currentRSI; - return; - } - - double currentEMA = ema[0]; - double previousEMA = ema[1]; - - double emaSlope = (currentEMA - previousEMA) * 100; - const double closeCurr = iClose(rcData.symbol, RC_TimeFrame1, 0); - // Raw (close-EMA)*10 blows past threshold on XAUUSD (~2600) almost every bar — blocks all entries. - // Compare distance in pips so RC_emaDistanceThreshold matches intent across symbols. - const double point = SymbolInfoDouble(rcData.symbol, SYMBOL_POINT); - const int symDig = (int)SymbolInfoInteger(rcData.symbol, SYMBOL_DIGITS); - const double pipMult = (symDig == 3 || symDig == 5) ? 10.0 : 1.0; - const double pipSize = (point > 0.0 ? point * pipMult : point); - const double priceToEmaPips = (pipSize > 0.0 ? MathAbs(closeCurr - currentEMA) / pipSize : 0.0); - - bool isBuyPosition = false; - bool isSellPosition = false; - if(hasPosition) - { - if(PositionSelectByMagic(rcData.symbol, RC_MagicNumber)) - { - ENUM_POSITION_TYPE positionType = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - if(positionType == POSITION_TYPE_BUY) - isBuyPosition = true; - else if(positionType == POSITION_TYPE_SELL) - isSellPosition = true; - } - } - - ApplyTrailingStop(); - - bool cooldownPassed = (currentTime - rcData.lastTradeTime) >= RC_cooldownSeconds; - const bool isTrendStrong = RC_UseTrendStrengthFilter && - (MathAbs(emaSlope) > RC_emaSlopeThreshold || priceToEmaPips > RC_emaDistanceThreshold); - - if(isBuyPosition && currentRSI > RC_exitBuyRSI) - { - Close_Position_MN(RC_MagicNumber); - rcData.lastTradeTime = currentTime; - } - - if(isSellPosition && currentRSI < RC_exitSellRSI) - { - Close_Position_MN(RC_MagicNumber); - rcData.lastTradeTime = currentTime; - } - - if(isTrendStrong) - { - Close_Position_MN(RC_MagicNumber); - rcData.lastTradeTime = currentTime; - } - - if(!isTrendStrong && - currentRSI < RC_overboughtLevel - RC_entryRSISellSpread && rcData.previousRSIDef >= RC_overboughtLevel && - !isSellPosition && !hasPosition && cooldownPassed) - { - const double vol = United_NormalizeVolume(rcData.symbol, g_RC_LotSize); - if(vol > 0.0) - { - rcData.trade.SetExpertMagicNumber(RC_MagicNumber); - if(rcData.trade.Sell(vol, rcData.symbol, 0.0, 0.0, 0.0, "Sell Order")) - rcData.lastTradeTime = currentTime; - } - } - - if(!isTrendStrong && - currentRSI > RC_oversoldLevel + RC_entryRSIBuySpread && rcData.previousRSIDef <= RC_oversoldLevel && - !isBuyPosition && !hasPosition && cooldownPassed) - { - const double vol = United_NormalizeVolume(rcData.symbol, g_RC_LotSize); - if(vol > 0.0) - { - rcData.trade.SetExpertMagicNumber(RC_MagicNumber); - if(rcData.trade.Buy(vol, rcData.symbol, 0.0, 0.0, 0.0, "Buy Order")) - rcData.lastTradeTime = currentTime; - } - } - - rcData.previousRSIDef = currentRSI; -} - -//+------------------------------------------------------------------+ diff --git a/frontline/cluster-gold/Strategies/RSIMidPointHijackStrategy.mqh b/frontline/cluster-gold/Strategies/RSIMidPointHijackStrategy.mqh deleted file mode 100644 index 120996b..0000000 --- a/frontline/cluster-gold/Strategies/RSIMidPointHijackStrategy.mqh +++ /dev/null @@ -1,492 +0,0 @@ -//+------------------------------------------------------------------+ -//| RSIMidPointHijackStrategy.mqh | -//+------------------------------------------------------------------+ - -double RM_NormalizedLot(const string sym) -{ - return United_NormalizeVolume(sym, g_RM_LotSize); -} - -bool IsNewBar(string symbol) -{ - datetime time[]; - if(CopyTime(symbol, RM_InpTimeframe, 0, 1, time) > 0) - { - if(time[0] != rmData.lastBarTime) - { - rmData.lastBarTime = time[0]; - return true; - } - } - return false; -} - -bool IsWithinTradingHours(int startHour, int endHour) -{ - MqlDateTime currentTime; - TimeToStruct(TimeCurrent(), currentTime); - - if(startHour <= endHour) - return (currentTime.hour >= startHour && currentTime.hour < endHour); - else - return (currentTime.hour >= startHour || currentTime.hour < endHour); -} - -bool HasPosition(string symbol, int magic) -{ - return PositionExistsByMagic(symbol, magic); -} - -bool HasProfitablePosition(int excludeMagic) -{ - bool hasProfitable = false; - for(int i = PositionsTotal() - 1; i >= 0; i--) - { - if(rmData.positionInfo.SelectByIndex(i)) - { - if(rmData.positionInfo.Magic() != excludeMagic) - { - double profit = rmData.positionInfo.Profit(); - if(profit > RM_InpLockProfitThreshold * _Point) - { - hasProfitable = true; - if(RM_InpCloseOppositeTrades) - { - if((excludeMagic == RM_InpMagicNumberRSIFollow && rmData.positionInfo.Magic() == RM_InpMagicNumberRSIReverse) || - (excludeMagic == RM_InpMagicNumberRSIReverse && rmData.positionInfo.Magic() == RM_InpMagicNumberRSIFollow) || - (excludeMagic == RM_InpMagicNumberEMACross && (rmData.positionInfo.Magic() == RM_InpMagicNumberRSIReverse || rmData.positionInfo.Magic() == RM_InpMagicNumberRSIFollow)) || - ((excludeMagic == RM_InpMagicNumberRSIFollow || excludeMagic == RM_InpMagicNumberRSIReverse) && rmData.positionInfo.Magic() == RM_InpMagicNumberEMACross)) - { - ClosePosition(rmData.symbol, (int)rmData.positionInfo.Magic()); - } - } - } - } - } - } - return hasProfitable; -} - -bool IsRSIReverseInCooldown(string symbol) -{ - if(RM_InpRSIReverseCooldownBars <= 0) - return false; - - if(!rmData.rsiReverseInCooldown) - return false; - - datetime time[]; - if(CopyTime(symbol, RM_InpTimeframe, 0, 1, time) > 0) - { - datetime currentBarTime = time[0]; - datetime cooldownEndTime = rmData.rsiReverseLastCloseTime + RM_InpRSIReverseCooldownBars * PeriodSeconds(RM_InpTimeframe); - - if(currentBarTime >= cooldownEndTime) - { - rmData.rsiReverseInCooldown = false; - return false; - } - } - - return true; -} - -void CheckRSIFollowStrategy(string symbol) -{ - if(!IsWithinTradingHours(RM_InpRSIFollowStartHour, RM_InpRSIFollowEndHour)) - { - if(RM_InpRSIFollowCloseOutsideHours) - { - if(HasPosition(symbol, RM_InpMagicNumberRSIFollow)) - ClosePosition(symbol, RM_InpMagicNumberRSIFollow); - } - return; - } - - if(RM_InpEnableStrategyLock && HasProfitablePosition(RM_InpMagicNumberRSIFollow)) - return; - - if(rmData.lastBarRSI > RM_InpRSIOverbought) - rmData.rsiOverbought = true; - else if(rmData.lastBarRSI < RM_InpRSIOversold) - rmData.rsiOversold = true; - - if(rmData.rsiOverbought && rmData.lastBarRSI < RM_InpRSIExitLevel) - { - if(!HasPosition(symbol, RM_InpMagicNumberRSIFollow)) - { - rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberRSIFollow); - const double vol = RM_NormalizedLot(symbol); - if(vol > 0.0) - rmData.trade.Sell(vol, symbol, 0, 0, 0, "RSI Follow"); - } - rmData.rsiOverbought = false; - } - else if(rmData.rsiOversold && rmData.lastBarRSI > RM_InpRSIExitLevel) - { - if(!HasPosition(symbol, RM_InpMagicNumberRSIFollow)) - { - rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberRSIFollow); - const double vol = RM_NormalizedLot(symbol); - if(vol > 0.0) - rmData.trade.Buy(vol, symbol, 0, 0, 0, "RSI Follow"); - } - rmData.rsiOversold = false; - } -} - -void CheckRSIReverseStrategy(string symbol) -{ - if(!IsWithinTradingHours(RM_InpRSIReverseStartHour, RM_InpRSIReverseEndHour)) - { - if(RM_InpRSIReverseCloseOutsideHours) - { - if(HasPosition(symbol, RM_InpMagicNumberRSIReverse)) - ClosePosition(symbol, RM_InpMagicNumberRSIReverse); - } - return; - } - - if(RM_InpEnableStrategyLock && HasProfitablePosition(RM_InpMagicNumberRSIReverse)) - return; - - if(IsRSIReverseInCooldown(symbol)) - return; - - if(rmData.lastBarRSIReverse > RM_InpRSIReverseOverbought) - rmData.rsiReverseOverbought = true; - else if(rmData.lastBarRSIReverse < RM_InpRSIReverseOversold) - rmData.rsiReverseOversold = true; - - if(rmData.rsiReverseOverbought && rmData.lastBarRSIReverse < RM_InpRSIReverseCrossLevel) - { - if(!HasPosition(symbol, RM_InpMagicNumberRSIReverse)) - { - rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberRSIReverse); - const double vol = RM_NormalizedLot(symbol); - if(vol > 0.0) - rmData.trade.Sell(vol, symbol, 0, 0, 0, "RSI Reverse"); - } - rmData.rsiReverseOverbought = false; - } - else if(rmData.rsiReverseOversold && rmData.lastBarRSIReverse > RM_InpRSIReverseCrossLevel) - { - if(!HasPosition(symbol, RM_InpMagicNumberRSIReverse)) - { - rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberRSIReverse); - const double vol = RM_NormalizedLot(symbol); - if(vol > 0.0) - rmData.trade.Buy(vol, symbol, 0, 0, 0, "RSI Reverse"); - } - rmData.rsiReverseOversold = false; - } -} - -void CheckEMACrossStrategy(string symbol) -{ - if(!IsWithinTradingHours(RM_InpEMACrossStartHour, RM_InpEMACrossEndHour)) - { - if(RM_InpEMACrossCloseOutsideHours) - { - if(HasPosition(symbol, RM_InpMagicNumberEMACross)) - ClosePosition(symbol, RM_InpMagicNumberEMACross); - } - return; - } - - if(RM_InpEnableStrategyLock && HasProfitablePosition(RM_InpMagicNumberEMACross)) - return; - - if(rmData.lastBarEMAPrev < rmData.lastBarClosePrev && rmData.lastBarEMA > rmData.lastBarClose) - { - rmData.emaCrossBuySignal = true; - rmData.emaCrossSellSignal = false; - rmData.emaCrossSignalBar = 0; - } - else if(rmData.lastBarEMAPrev > rmData.lastBarClosePrev && rmData.lastBarEMA < rmData.lastBarClose) - { - rmData.emaCrossSellSignal = true; - rmData.emaCrossBuySignal = false; - rmData.emaCrossSignalBar = 0; - } - - if(RM_InpUseEMADistanceEntry) - { - if(rmData.emaCrossBuySignal) - { - bool distanceConditionMet = true; - double emaHistory[], closeHistory[]; - ArraySetAsSeries(emaHistory, true); - ArraySetAsSeries(closeHistory, true); - - if(CopyBuffer(rmData.emaHandle, 0, 0, RM_InpEMADistancePeriod, emaHistory) > 0 && - CopyClose(symbol, RM_InpTimeframe, 0, RM_InpEMADistancePeriod, closeHistory) > 0) - { - double point = SymbolInfoDouble(symbol, SYMBOL_POINT); - for(int i = 0; i < RM_InpEMADistancePeriod; i++) - { - double distance = (closeHistory[i] - emaHistory[i]) / point; - if(distance < RM_InpEMADistancePips) - { - distanceConditionMet = false; - break; - } - } - - if(distanceConditionMet && !HasPosition(symbol, RM_InpMagicNumberEMACross)) - { - rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberEMACross); - const double vol = RM_NormalizedLot(symbol); - if(vol > 0.0) - rmData.trade.Buy(vol, symbol, 0, 0, 0, "EMA Cross Distance"); - rmData.emaCrossBuySignal = false; - } - } - } - else if(rmData.emaCrossSellSignal) - { - bool distanceConditionMet = true; - double emaHistory[], closeHistory[]; - ArraySetAsSeries(emaHistory, true); - ArraySetAsSeries(closeHistory, true); - - if(CopyBuffer(rmData.emaHandle, 0, 0, RM_InpEMADistancePeriod, emaHistory) > 0 && - CopyClose(symbol, RM_InpTimeframe, 0, RM_InpEMADistancePeriod, closeHistory) > 0) - { - double point = SymbolInfoDouble(symbol, SYMBOL_POINT); - for(int i = 0; i < RM_InpEMADistancePeriod; i++) - { - double distance = (emaHistory[i] - closeHistory[i]) / point; - if(distance < RM_InpEMADistancePips) - { - distanceConditionMet = false; - break; - } - } - - if(distanceConditionMet && !HasPosition(symbol, RM_InpMagicNumberEMACross)) - { - rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberEMACross); - const double vol = RM_NormalizedLot(symbol); - if(vol > 0.0) - rmData.trade.Sell(vol, symbol, 0, 0, 0, "EMA Cross Distance"); - rmData.emaCrossSellSignal = false; - } - } - } - } - else - { - if(rmData.lastBarEMAPrev < rmData.lastBarClosePrev && rmData.lastBarEMA > rmData.lastBarClose) - { - if(!HasPosition(symbol, RM_InpMagicNumberEMACross)) - { - rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberEMACross); - const double vol = RM_NormalizedLot(symbol); - if(vol > 0.0) - rmData.trade.Buy(vol, symbol, 0, 0, 0, "EMA Cross"); - } - } - else if(rmData.lastBarEMAPrev > rmData.lastBarClosePrev && rmData.lastBarEMA < rmData.lastBarClose) - { - if(!HasPosition(symbol, RM_InpMagicNumberEMACross)) - { - rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberEMACross); - const double vol = RM_NormalizedLot(symbol); - if(vol > 0.0) - rmData.trade.Sell(vol, symbol, 0, 0, 0, "EMA Cross"); - } - } - } - - if(rmData.emaCrossBuySignal || rmData.emaCrossSellSignal) - { - rmData.emaCrossSignalBar++; - if(rmData.emaCrossSignalBar > RM_InpEMADistancePeriod * 2) - { - rmData.emaCrossBuySignal = false; - rmData.emaCrossSellSignal = false; - } - } -} - -void CheckExitConditions(string symbol) -{ - if(RM_InpEnableRSIFollow) - { - if(HasPosition(symbol, RM_InpMagicNumberRSIFollow)) - { - if(PositionSelectByMagic(symbol, RM_InpMagicNumberRSIFollow)) - { - ENUM_POSITION_TYPE posType = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - if((posType == POSITION_TYPE_BUY && rmData.lastBarRSI < RM_InpRSIExitLevel) || - (posType == POSITION_TYPE_SELL && rmData.lastBarRSI > RM_InpRSIExitLevel)) - { - ClosePosition(symbol, RM_InpMagicNumberRSIFollow); - } - } - } - } - - if(RM_InpEnableRSIReverse) - { - if(HasPosition(symbol, RM_InpMagicNumberRSIReverse)) - { - if(PositionSelectByMagic(symbol, RM_InpMagicNumberRSIReverse)) - { - ENUM_POSITION_TYPE posType = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - if((posType == POSITION_TYPE_BUY && rmData.lastBarRSIReverse < RM_InpRSIReverseExitLevel) || - (posType == POSITION_TYPE_SELL && rmData.lastBarRSIReverse > RM_InpRSIReverseExitLevel)) - { - ClosePosition(symbol, RM_InpMagicNumberRSIReverse); - } - } - } - } - - if(RM_InpEnableEMACross) - { - if(HasPosition(symbol, RM_InpMagicNumberEMACross)) - { - if(PositionSelectByMagic(symbol, RM_InpMagicNumberEMACross)) - { - ENUM_POSITION_TYPE posType = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - if((posType == POSITION_TYPE_BUY && rmData.lastBarEMA > rmData.lastBarClose) || - (posType == POSITION_TYPE_SELL && rmData.lastBarEMA < rmData.lastBarClose)) - { - ClosePosition(symbol, RM_InpMagicNumberEMACross); - } - } - } - } -} - -void ClosePosition(string symbol, int magic) -{ - if(!PositionExistsByMagic(symbol, magic)) - return; - - ulong ticket = GetPositionTicketByMagic(symbol, magic); - if(ticket == 0) - return; - - if(magic == RM_InpMagicNumberRSIReverse) - { - if(PositionSelectByTicketSymbolAndMagic(ticket, symbol, magic)) - { - datetime time[]; - if(CopyTime(symbol, RM_InpTimeframe, 0, 1, time) > 0) - { - rmData.rsiReverseLastCloseTime = time[0]; - double profit = PositionGetDouble(POSITION_PROFIT); - if(!RM_InpRSIReverseCooldownOnLoss || profit < 0) - { - rmData.rsiReverseInCooldown = true; - } - } - } - } - - ClosePositionByMagic(rmData.trade, symbol, magic); -} - -bool InitRSIMidPointHijack(string symbol) -{ - rmData.symbol = symbol; - rmData.rsiOverbought = false; - rmData.rsiOversold = false; - rmData.rsiReverseOverbought = false; - rmData.rsiReverseOversold = false; - rmData.emaCrossBuySignal = false; - rmData.emaCrossSellSignal = false; - rmData.emaCrossSignalBar = 0; - rmData.rsiReverseInCooldown = false; - rmData.lastBarRSI = 0; - rmData.lastBarRSIReverse = 0; - rmData.lastBarEMA = 0; - rmData.lastBarClose = 0; - rmData.lastBarEMAPrev = 0; - rmData.lastBarClosePrev = 0; - - // Check if symbol exists - if(!SymbolSelect(symbol, true)) - { - Print("RSIMidPointHijack: Symbol '", symbol, "' not available in Market Watch. Please add it to Market Watch or check symbol name."); - return false; - } - - Sleep(100); // Wait for symbol to be ready - - rmData.rsiHandle = iRSI(symbol, RM_InpTimeframe, RM_InpRSIPeriod, PRICE_CLOSE); - rmData.rsiReverseHandle = iRSI(symbol, RM_InpTimeframe, RM_InpRSIReversePeriod, PRICE_CLOSE); - rmData.emaHandle = iMA(symbol, RM_InpTimeframe, RM_InpEMAPeriod, 0, MODE_EMA, PRICE_CLOSE); - - if(rmData.rsiHandle == INVALID_HANDLE || rmData.rsiReverseHandle == INVALID_HANDLE || rmData.emaHandle == INVALID_HANDLE) - { - Print("RSIMidPointHijack: Error creating indicators for '", symbol, "'"); - return false; - } - - rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberRSIFollow); - rmData.trade.SetMarginMode(); - rmData.trade.SetTypeFillingBySymbol(symbol); - rmData.trade.SetDeviationInPoints(10); - - datetime time[]; - if(CopyTime(symbol, RM_InpTimeframe, 0, 1, time) > 0) - rmData.lastBarTime = time[0]; - - rmData.isInitialized = true; - Print("RSIMidPointHijack: Successfully initialized for symbol '", symbol, "'"); - return true; -} - -void DeinitRSIMidPointHijack() -{ - if(rmData.rsiHandle != INVALID_HANDLE) IndicatorRelease(rmData.rsiHandle); - if(rmData.rsiReverseHandle != INVALID_HANDLE) IndicatorRelease(rmData.rsiReverseHandle); - if(rmData.emaHandle != INVALID_HANDLE) IndicatorRelease(rmData.emaHandle); -} - -void ProcessRSIMidPointHijack(string symbol) -{ - // Skip if not initialized (symbol not available) - if(!rmData.isInitialized) - return; - - rmData.symbol = symbol; // Update symbol in case it changed - if(!IsNewBar(rmData.symbol)) - return; - - double rsi[], rsiReverse[], ema[], close[]; - ArraySetAsSeries(rsi, true); - ArraySetAsSeries(rsiReverse, true); - ArraySetAsSeries(ema, true); - ArraySetAsSeries(close, true); - - rmData.lastBarEMAPrev = rmData.lastBarEMA; - rmData.lastBarClosePrev = rmData.lastBarClose; - - if(CopyBuffer(rmData.rsiHandle, 0, 0, 1, rsi) > 0) - rmData.lastBarRSI = rsi[0]; - - if(CopyBuffer(rmData.rsiReverseHandle, 0, 0, 1, rsiReverse) > 0) - rmData.lastBarRSIReverse = rsiReverse[0]; - - if(CopyBuffer(rmData.emaHandle, 0, 0, 1, ema) > 0) - rmData.lastBarEMA = ema[0]; - - if(CopyClose(rmData.symbol, RM_InpTimeframe, 0, 1, close) > 0) - rmData.lastBarClose = close[0]; - - if(RM_InpEnableRSIFollow) - CheckRSIFollowStrategy(rmData.symbol); - if(RM_InpEnableRSIReverse) - CheckRSIReverseStrategy(rmData.symbol); - if(RM_InpEnableEMACross) - CheckEMACrossStrategy(rmData.symbol); - - CheckExitConditions(rmData.symbol); -} - -//+------------------------------------------------------------------+ diff --git a/frontline/cluster-gold/Strategies/RSIReversalAsianStrategy.mqh b/frontline/cluster-gold/Strategies/RSIReversalAsianStrategy.mqh deleted file mode 100644 index e204fb0..0000000 --- a/frontline/cluster-gold/Strategies/RSIReversalAsianStrategy.mqh +++ /dev/null @@ -1,488 +0,0 @@ -//+------------------------------------------------------------------+ -//| RSIReversalAsianStrategy.mqh | -//+------------------------------------------------------------------+ - -//+------------------------------------------------------------------+ -//| RSI Reversal Asian Strategy Data Structure | -//+------------------------------------------------------------------+ -struct RSIReversalAsianData { - string symbol; - bool isInitialized; - int rsiHandle; - CTrade trade; - bool isPositionOpen; - double positionOpenPrice; - datetime positionOpenTime; - ENUM_POSITION_TYPE lastPositionType; - bool sessionCloseAttempted; - - // RSI crossover variables - double rsiCurrent; - double rsiPrevious; - double rsiPrevious2; - bool rsiCrossedOverbought; - bool rsiCrossedOversold; - bool rsiCrossedExitLevel; - - // Strategy parameters - int RSIPeriod; - double OverboughtLevel; - double OversoldLevel; - int TakeProfitPips; - int StopLossPips; - double MaxLotSize; - int MaxSpread; - int MaxDuration; - bool UseStopLoss; - bool UseTakeProfit; - bool UseRSIExit; - double RSIExitLevel; - bool CloseOutsideSession; - ENUM_TIMEFRAMES TimeFrame; - int MagicNumber; - int Slippage; - double point; -}; - -// Session times (UTC) -const int AsianSessionStart = 0; // 00:00 UTC -const int AsianSessionEnd = 8; // 08:00 UTC - -//+------------------------------------------------------------------+ -//| Check if current time is in Asian session | -//+------------------------------------------------------------------+ -bool IsAsianSession() -{ - datetime currentTime = TimeCurrent(); - MqlDateTime timeStruct; - TimeToStruct(currentTime, timeStruct); - - return (timeStruct.hour >= AsianSessionStart && timeStruct.hour < AsianSessionEnd); -} - -//+------------------------------------------------------------------+ -//| Check if trading is allowed for symbol | -//+------------------------------------------------------------------+ -bool IsTradingAllowed(RSIReversalAsianData& data) -{ - // Do not require SYMBOL_TRADE_MODE_FULL: many symbols allow one side only (long/short). - const long tradeMode = SymbolInfoInteger(data.symbol, SYMBOL_TRADE_MODE); - if(tradeMode == SYMBOL_TRADE_MODE_DISABLED || tradeMode == SYMBOL_TRADE_MODE_CLOSEONLY) - return false; - - if(AccountInfoDouble(ACCOUNT_MARGIN_FREE) <= 0) - return false; - - return true; -} - -//+------------------------------------------------------------------+ -//| Check RSI crossover conditions | -//+------------------------------------------------------------------+ -void CheckRSICrossover(RSIReversalAsianData& data) -{ - // Reset crossover flags - data.rsiCrossedOverbought = false; - data.rsiCrossedOversold = false; - data.rsiCrossedExitLevel = false; - - // Check for overbought crossover (RSI crosses above overbought level) - if(data.rsiPrevious < data.OverboughtLevel && data.rsiCurrent >= data.OverboughtLevel) - { - data.rsiCrossedOverbought = true; - } - - // Check for oversold crossover (RSI crosses below oversold level) - if(data.rsiPrevious > data.OversoldLevel && data.rsiCurrent <= data.OversoldLevel) - { - data.rsiCrossedOversold = true; - } - - // Check for exit level crossover - if(data.rsiPrevious < data.RSIExitLevel && data.rsiCurrent >= data.RSIExitLevel) - { - data.rsiCrossedExitLevel = true; - } - else if(data.rsiPrevious > data.RSIExitLevel && data.rsiCurrent <= data.RSIExitLevel) - { - data.rsiCrossedExitLevel = true; - } -} - -//+------------------------------------------------------------------+ -//| Close all trades for the symbol | -//+------------------------------------------------------------------+ -bool CloseAllTrades(RSIReversalAsianData& data, string reason = "") -{ - bool allClosed = true; - int totalPositions = PositionsTotal(); - - if(totalPositions == 0) - return true; - - for(int i = totalPositions - 1; i >= 0; i--) - { - if(PositionGetSymbol(i) == data.symbol) - { - ulong ticket = PositionGetTicket(i); - if(ticket > 0 && PositionSelectByTicket(ticket)) - { - if(PositionGetInteger(POSITION_MAGIC) == (ulong)data.MagicNumber) - { - // Try to close position with retry logic - int retryCount = 0; - bool positionClosed = false; - - while(retryCount < 3 && !positionClosed) - { - if(data.trade.PositionClose(ticket)) - { - data.isPositionOpen = false; - positionClosed = true; - } - else - { - int error = GetLastError(); - - // If error is 4756 (Trade disabled), wait longer before retry - if(error == 4756) - { - Sleep(5000); // Wait 5 seconds before retry - retryCount++; - } - else - { - // For other errors, break the loop - break; - } - } - } - - if(!positionClosed) - { - allClosed = false; - } - } - } - } - } - - return allClosed; -} - -//+------------------------------------------------------------------+ -//| Initialize RSI Reversal Asian Strategy | -//+------------------------------------------------------------------+ -bool InitRSIReversalAsian(RSIReversalAsianData& data, string symbol, - int RSIPeriod, double OverboughtLevel, double OversoldLevel, - int TakeProfitPips, int StopLossPips, double MaxLotSize, - int MaxSpread, int MaxDuration, bool UseStopLoss, - bool UseTakeProfit, bool UseRSIExit, double RSIExitLevel, - bool CloseOutsideSession, ENUM_TIMEFRAMES TimeFrame, - int MagicNumber, int Slippage) -{ - data.symbol = symbol; - data.isInitialized = false; - - // Check if symbol exists - if(!SymbolSelect(symbol, true)) - { - Print("RSIReversalAsian: Symbol '", symbol, "' not available in Market Watch. Please add it to Market Watch or check symbol name."); - return false; - } - - // Wait a bit for symbol to be ready - Sleep(100); - - // Get symbol point - data.point = SymbolInfoDouble(symbol, SYMBOL_POINT); - - // Store parameters - data.RSIPeriod = RSIPeriod; - data.OverboughtLevel = OverboughtLevel; - data.OversoldLevel = OversoldLevel; - data.TakeProfitPips = TakeProfitPips; - data.StopLossPips = StopLossPips; - data.MaxLotSize = MaxLotSize; - data.MaxSpread = MaxSpread; - data.MaxDuration = MaxDuration; - data.UseStopLoss = UseStopLoss; - data.UseTakeProfit = UseTakeProfit; - data.UseRSIExit = UseRSIExit; - data.RSIExitLevel = RSIExitLevel; - data.CloseOutsideSession = CloseOutsideSession; - data.TimeFrame = TimeFrame; - data.MagicNumber = MagicNumber; - data.Slippage = Slippage; - - // Initialize RSI indicator with retry logic (for insufficient history in backtesting) - data.rsiHandle = INVALID_HANDLE; - int retryCount = 0; - int maxRetries = 5; - - while(retryCount < maxRetries && data.rsiHandle == INVALID_HANDLE) - { - data.rsiHandle = iRSI(symbol, TimeFrame, RSIPeriod, PRICE_CLOSE); - - if(data.rsiHandle == INVALID_HANDLE) - { - int error = GetLastError(); - - // Error 4805 = insufficient history - wait longer and retry - if(error == 4805 && retryCount < maxRetries - 1) - { - Sleep(1000); // Wait 1 second for history to load - retryCount++; - continue; - } - - Print("RSIReversalAsian: Error creating RSI indicator for '", symbol, "' - Error: ", error, " (", error == 4805 ? "Insufficient history data" : "Unknown", ")"); - return false; - } - } - - if(data.rsiHandle == INVALID_HANDLE) - { - Print("RSIReversalAsian: Failed to create RSI indicator for '", symbol, "' after ", maxRetries, " retries"); - return false; - } - - // Wait a bit for the indicator to be ready - Sleep(100); - - // Initialize RSI values with retry logic - double rsi[]; - ArraySetAsSeries(rsi, true); - - retryCount = 0; - bool rsiInitialized = false; - - while(retryCount < 10 && !rsiInitialized) - { - int copied = CopyBuffer(data.rsiHandle, 0, 0, 3, rsi); - if(copied >= 3) - { - data.rsiCurrent = rsi[0]; - data.rsiPrevious = rsi[1]; - data.rsiPrevious2 = rsi[2]; - rsiInitialized = true; - } - else - { - retryCount++; - Sleep(100); - } - } - - if(!rsiInitialized) - { - // Don't fail initialization, just set default values - data.rsiCurrent = 50.0; - data.rsiPrevious = 50.0; - data.rsiPrevious2 = 50.0; - } - - // Set trade parameters - data.trade.SetExpertMagicNumber(MagicNumber); - data.trade.SetDeviationInPoints(Slippage); - data.trade.SetTypeFillingBySymbol(symbol); - - // Initialize state - data.isPositionOpen = false; - data.positionOpenPrice = 0; - data.positionOpenTime = 0; - data.lastPositionType = POSITION_TYPE_BUY; - data.sessionCloseAttempted = false; - data.rsiCrossedOverbought = false; - data.rsiCrossedOversold = false; - data.rsiCrossedExitLevel = false; - - data.isInitialized = true; - - Print("RSIReversalAsian: Successfully initialized for symbol '", symbol, "'"); - return true; -} - -//+------------------------------------------------------------------+ -//| Deinitialize RSI Reversal Asian Strategy | -//+------------------------------------------------------------------+ -void DeinitRSIReversalAsian(RSIReversalAsianData& data) -{ - if(data.rsiHandle != INVALID_HANDLE) - IndicatorRelease(data.rsiHandle); -} - -//+------------------------------------------------------------------+ -//| Process RSI Reversal Asian Strategy | -//+------------------------------------------------------------------+ -void ProcessRSIReversalAsian(RSIReversalAsianData& data, double lotSize) -{ - if(!data.isInitialized) - return; - - // Check if trading is allowed - if(!IsTradingAllowed(data)) - { - return; - } - - // Check if we're in Asian session - if(!IsAsianSession()) - { - // Close all positions if outside Asian session and CloseOutsideSession is true - if(data.CloseOutsideSession && !data.sessionCloseAttempted) - { - CloseAllTrades(data, "Outside Asian session"); - data.sessionCloseAttempted = true; - } - return; - } - else - { - // Reset the session close attempt flag when we enter Asian session - data.sessionCloseAttempted = false; - } - - // Get current spread - double spread = SymbolInfoDouble(data.symbol, SYMBOL_ASK) - SymbolInfoDouble(data.symbol, SYMBOL_BID); - int spreadInPips = (int)(spread / data.point); - - // Check if spread is too high - if(spreadInPips > data.MaxSpread) - { - return; - } - - // Get RSI values from bar data - double rsi[]; - ArraySetAsSeries(rsi, true); - - int copied = CopyBuffer(data.rsiHandle, 0, 0, 3, rsi); - if(copied < 3) - { - return; - } - - // Update RSI values - data.rsiPrevious2 = data.rsiPrevious; - data.rsiPrevious = data.rsiCurrent; - data.rsiCurrent = rsi[0]; - - // Validate RSI values - if(data.rsiCurrent == 0 || data.rsiPrevious == 0) - { - return; - } - - // Check for RSI crossovers - CheckRSICrossover(data); - - // Get current prices - double currentBid = SymbolInfoDouble(data.symbol, SYMBOL_BID); - double currentAsk = SymbolInfoDouble(data.symbol, SYMBOL_ASK); - - // Check for open position - bool hasOpenPosition = PositionExistsByMagic(data.symbol, (ulong)data.MagicNumber); - - if(hasOpenPosition) - { - // Get position details - ulong ticket = GetPositionTicketByMagic(data.symbol, (ulong)data.MagicNumber); - if(ticket > 0 && PositionSelectByTicket(ticket)) - { - ENUM_POSITION_TYPE posType = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - datetime openTime = (datetime)PositionGetInteger(POSITION_TIME); - - // Check for RSI exit if enabled - if(data.UseRSIExit && data.rsiCrossedExitLevel) - { - bool shouldExit = false; - - // For long positions, exit when RSI crosses above exit level - if(posType == POSITION_TYPE_BUY && data.rsiCurrent >= data.RSIExitLevel && data.rsiPrevious < data.RSIExitLevel) - { - shouldExit = true; - } - // For short positions, exit when RSI crosses below exit level - else if(posType == POSITION_TYPE_SELL && data.rsiCurrent <= data.RSIExitLevel && data.rsiPrevious > data.RSIExitLevel) - { - shouldExit = true; - } - - if(shouldExit) - { - CloseAllTrades(data, "RSI Exit Crossover"); - return; - } - } - - // Check for timeout - if(TimeCurrent() - openTime > data.MaxDuration * 3600) - { - CloseAllTrades(data, "Timeout"); - return; - } - } - } - - // If no position is open, look for entry signals based on RSI crossover - if(!hasOpenPosition) - { - // Place buy order if RSI crosses below oversold level (oversold crossover) - if(data.rsiCrossedOversold) - { - double sl = data.UseStopLoss ? currentBid - data.StopLossPips * data.point : 0; - double tp = data.UseTakeProfit ? currentBid + data.TakeProfitPips * data.point : 0; - - if(data.UseStopLoss && sl >= currentBid) - return; - if(data.UseTakeProfit && tp <= currentBid) - return; - - data.trade.SetDeviationInPoints(data.Slippage); - data.trade.SetTypeFillingBySymbol(data.symbol); - data.trade.SetExpertMagicNumber(data.MagicNumber); - - double tradeLotSize = lotSize > 0 ? lotSize : data.MaxLotSize; - const double vol = United_NormalizeVolume(data.symbol, tradeLotSize); - if(vol <= 0.0) - return; - - if(data.trade.Buy(vol, data.symbol, currentAsk, sl, tp, "RSI Oversold Crossover Buy")) - { - data.isPositionOpen = true; - data.positionOpenPrice = currentAsk; - data.positionOpenTime = TimeCurrent(); - data.lastPositionType = POSITION_TYPE_BUY; - } - } - // Place sell order if RSI crosses above overbought level (overbought crossover) - else if(data.rsiCrossedOverbought) - { - double sl = data.UseStopLoss ? currentAsk + data.StopLossPips * data.point : 0; - double tp = data.UseTakeProfit ? currentAsk - data.TakeProfitPips * data.point : 0; - - if(data.UseStopLoss && sl <= currentAsk) - return; - if(data.UseTakeProfit && tp >= currentAsk) - return; - - data.trade.SetDeviationInPoints(data.Slippage); - data.trade.SetTypeFillingBySymbol(data.symbol); - data.trade.SetExpertMagicNumber(data.MagicNumber); - - double tradeLotSize = lotSize > 0 ? lotSize : data.MaxLotSize; - const double vol = United_NormalizeVolume(data.symbol, tradeLotSize); - if(vol <= 0.0) - return; - - if(data.trade.Sell(vol, data.symbol, currentBid, sl, tp, "RSI Overbought Crossover Sell")) - { - data.isPositionOpen = true; - data.positionOpenPrice = currentBid; - data.positionOpenTime = TimeCurrent(); - data.lastPositionType = POSITION_TYPE_SELL; - } - } - } -} diff --git a/frontline/cluster-gold/Strategies/RSIScalpingStrategy.mqh b/frontline/cluster-gold/Strategies/RSIScalpingStrategy.mqh deleted file mode 100644 index 630955d..0000000 --- a/frontline/cluster-gold/Strategies/RSIScalpingStrategy.mqh +++ /dev/null @@ -1,615 +0,0 @@ -//+------------------------------------------------------------------+ -//| RSIScalpingStrategy.mqh | -//+------------------------------------------------------------------+ - -//+------------------------------------------------------------------+ -//| RSI Scalping Strategy Data Structure | -//+------------------------------------------------------------------+ -struct RSIScalpingData { - string symbol; - bool isInitialized; - CTrade trade; - int rsi_handle; - double rsi_buffer[]; - double rsi_prev; - double rsi_current; - double rsi_two_bars_ago; - bool position_open; - ulong position_ticket; - ENUM_POSITION_TYPE current_position_type; - datetime last_bar_time; - bool rsi_against_position; - int bars_against_count; -}; - -void ClosePosition(RSIScalpingData& data, int MagicNumber); - -double RS_ATRPriceOnTF(const string symbol, const ENUM_TIMEFRAMES tf, const int period) -{ - if(period < 1) - return 0.0; - MqlRates rates[]; - const int need = period + 2; - if(CopyRates(symbol, tf, 0, need, rates) < need) - return 0.0; - ArraySetAsSeries(rates, true); - double sum = 0.0; - for(int i = 1; i <= period; i++) - { - const double hl = rates[i].high - rates[i].low; - const double hc = MathAbs(rates[i].high - rates[i + 1].close); - const double lc = MathAbs(rates[i].low - rates[i + 1].close); - sum += MathMax(hl, MathMax(hc, lc)); - } - return sum / (double)period; -} - -int RS_CountReversalEscapeSigns(RSIScalpingData& data, const ENUM_TIMEFRAMES tf, - const ENUM_POSITION_TYPE ptype, const double atr, - const double adverseAtrMult, const double rsiVelocity, - const double bodyAtrMult) -{ - if(atr <= 0.0) - return 0; - const double entry = PositionGetDouble(POSITION_PRICE_OPEN); - const double bid = SymbolInfoDouble(data.symbol, SYMBOL_BID); - const double ask = SymbolInfoDouble(data.symbol, SYMBOL_ASK); - int signs = 0; - - if(ptype == POSITION_TYPE_BUY) - { - if(entry - bid >= adverseAtrMult * atr) - signs++; - if(data.rsi_prev - data.rsi_current >= rsiVelocity) - signs++; - } - else if(ptype == POSITION_TYPE_SELL) - { - if(ask - entry >= adverseAtrMult * atr) - signs++; - if(data.rsi_current - data.rsi_prev >= rsiVelocity) - signs++; - } - else - return 0; - - MqlRates r[]; - if(CopyRates(data.symbol, tf, 0, 4, r) >= 4) - { - ArraySetAsSeries(r, true); - const double body = MathAbs(r[1].close - r[1].open); - if(body >= bodyAtrMult * atr) - { - if(ptype == POSITION_TYPE_BUY && r[1].close < r[1].open) - signs++; - else if(ptype == POSITION_TYPE_SELL && r[1].close > r[1].open) - signs++; - } - if(ptype == POSITION_TYPE_BUY) - { - if(r[1].close < r[2].close && r[2].close < r[3].close) - signs++; - } - else - { - if(r[1].close > r[2].close && r[2].close > r[3].close) - signs++; - } - } - return signs; -} - -void RS_TryReversalEscape(RSIScalpingData& data, const ENUM_TIMEFRAMES tf, const int MagicNumber, - const int atrPeriod, const double adverseAtrMult, const int signsRequired, - const double rsiVelocity, const double bodyAtrMult) -{ - if(!PositionSelectByMagic(data.symbol, (ulong)MagicNumber)) - return; - - const ENUM_POSITION_TYPE ptype = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - const double atr = RS_ATRPriceOnTF(data.symbol, tf, atrPeriod); - if(atr <= 0.0) - return; - - const int n = RS_CountReversalEscapeSigns(data, tf, ptype, atr, adverseAtrMult, rsiVelocity, bodyAtrMult); - if(n < signsRequired) - return; - - ClosePosition(data, MagicNumber); - Print("RSIScalping: reversal escape symbol=", data.symbol, " signs=", n, " need=", signsRequired, - " ATR=", DoubleToString(atr, (int)SymbolInfoInteger(data.symbol, SYMBOL_DIGITS))); -} - -void RS_ApplyTrailingStop(RSIScalpingData& data, const int MagicNumber, - const bool useTrailingStop, - const double trailingStopDistancePoints, - const double trailingActivationPoints) -{ - if(!useTrailingStop || trailingStopDistancePoints <= 0.0) - return; - if(!PositionSelectByMagic(data.symbol, (ulong)MagicNumber)) - return; - - const double point = SymbolInfoDouble(data.symbol, SYMBOL_POINT); - if(point <= 0.0) - return; - - const int digits = (int)SymbolInfoInteger(data.symbol, SYMBOL_DIGITS); - const double trail_dist = trailingStopDistancePoints * point; - const double activation_pts = (trailingActivationPoints > 0.0) - ? trailingActivationPoints - : trailingStopDistancePoints; - const double activation = activation_pts * point; - const long stops_level = SymbolInfoInteger(data.symbol, SYMBOL_TRADE_STOPS_LEVEL); - const double min_dist = (double)stops_level * point; - - const ENUM_POSITION_TYPE ptype = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - const double entry = PositionGetDouble(POSITION_PRICE_OPEN); - const double cur_sl = PositionGetDouble(POSITION_SL); - const double cur_tp = PositionGetDouble(POSITION_TP); - - if(ptype == POSITION_TYPE_BUY) - { - const double bid = SymbolInfoDouble(data.symbol, SYMBOL_BID); - if(bid - entry <= activation) - return; - - double new_sl = NormalizeDouble(bid - trail_dist, digits); - if(min_dist > 0.0 && bid - new_sl < min_dist) - new_sl = NormalizeDouble(bid - min_dist, digits); - - if(new_sl >= bid || new_sl <= 0.0) - return; - if(cur_sl > 0.0 && new_sl <= cur_sl) - return; - - ModifyPositionByMagic(data.trade, data.symbol, (ulong)MagicNumber, new_sl, cur_tp); - } - else if(ptype == POSITION_TYPE_SELL) - { - const double ask = SymbolInfoDouble(data.symbol, SYMBOL_ASK); - if(entry - ask <= activation) - return; - - double new_sl = NormalizeDouble(ask + trail_dist, digits); - if(min_dist > 0.0 && new_sl - ask < min_dist) - new_sl = NormalizeDouble(ask + min_dist, digits); - - if(new_sl <= ask || new_sl <= 0.0) - return; - if(cur_sl > 0.0 && new_sl >= cur_sl) - return; - - ModifyPositionByMagic(data.trade, data.symbol, (ulong)MagicNumber, new_sl, cur_tp); - } -} - -string ErrorDescription(int errorCode) -{ - switch(errorCode) - { - case 4801: return "Symbol not found"; - case 4802: return "Symbol not selected"; - case 4803: return "Symbol not visible"; - case 4804: return "Symbol not available"; - case 4805: return "Cannot load indicator - insufficient history data"; - default: return "Unknown error " + IntegerToString(errorCode); - } -} - -bool InitRSIScalping(RSIScalpingData& data, string symbol, ENUM_TIMEFRAMES TimeFrame, int RSI_Period, - ENUM_APPLIED_PRICE RSI_Applied_Price, int MagicNumber, int Slippage) -{ - data.symbol = symbol; - data.isInitialized = false; - - // Check if symbol exists - if(!SymbolSelect(symbol, true)) - { - Print("RSIScalping: Symbol '", symbol, "' not available in Market Watch. Please add it to Market Watch or check symbol name."); - return false; // Return false but don't fail entire EA - } - - // Wait a bit for symbol to be ready - Sleep(100); - - // Try to create RSI indicator with retry logic (for insufficient history in backtesting) - data.rsi_handle = INVALID_HANDLE; - int retryCount = 0; - int maxRetries = 5; - - while(retryCount < maxRetries && data.rsi_handle == INVALID_HANDLE) - { - data.rsi_handle = iRSI(symbol, TimeFrame, RSI_Period, RSI_Applied_Price); - - if(data.rsi_handle == INVALID_HANDLE) - { - int error = GetLastError(); - - // Error 4805 = insufficient history - wait longer and retry - if(error == 4805 && retryCount < maxRetries - 1) - { - Sleep(1000); // Wait 1 second for history to load - retryCount++; - continue; - } - - Print("RSIScalping: Error creating RSI indicator for '", symbol, "' - Error: ", error, " (", ErrorDescription(error), ")"); - return false; // Return false but don't fail entire EA - } - } - - if(data.rsi_handle == INVALID_HANDLE) - { - Print("RSIScalping: Failed to create RSI indicator for '", symbol, "' after ", maxRetries, " retries"); - return false; - } - - data.trade.SetExpertMagicNumber(MagicNumber); - data.trade.SetDeviationInPoints(Slippage); - data.trade.SetTypeFilling(ORDER_FILLING_FOK); - - ArraySetAsSeries(data.rsi_buffer, true); - data.position_open = false; - data.position_ticket = 0; - data.rsi_against_position = false; - data.bars_against_count = 0; - data.isInitialized = true; - - Print("RSIScalping: Successfully initialized for symbol '", symbol, "'"); - return true; -} - -void DeinitRSIScalping(RSIScalpingData& data) -{ - if(data.rsi_handle != INVALID_HANDLE) - IndicatorRelease(data.rsi_handle); -} - -bool UpdateRSI(RSIScalpingData& data) -{ - if(CopyBuffer(data.rsi_handle, 0, 0, 3, data.rsi_buffer) < 3) - return false; - - data.rsi_current = data.rsi_buffer[0]; - data.rsi_prev = data.rsi_buffer[1]; - data.rsi_two_bars_ago = data.rsi_buffer[2]; - - return true; -} - -void CheckExistingPosition(RSIScalpingData& data, ENUM_TIMEFRAMES TimeFrame, int MagicNumber, - double RSI_Oversold, double RSI_Overbought, double RSI_Target_Buy, - double RSI_Target_Sell, int BarsToWait) -{ - // Always check if position exists, even if tracking says it doesn't - bool positionExists = PositionExistsByMagic(data.symbol, MagicNumber); - - if(!positionExists && data.position_open) - { - // Position was closed externally, reset tracking - data.position_open = false; - data.position_ticket = 0; - data.rsi_against_position = false; - data.bars_against_count = 0; - return; - } - - if(!positionExists) - return; - - // Update tracking if we have a position but tracking was lost - if(!data.position_open && positionExists) - { - ulong ticket = GetPositionTicketByMagic(data.symbol, MagicNumber); - if(ticket > 0 && PositionSelectByTicketSymbolAndMagic(ticket, data.symbol, MagicNumber)) - { - data.position_ticket = ticket; - data.position_open = true; - data.current_position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - } - } - - // Verify our tracked position still exists - if(data.position_open && data.position_ticket > 0) - { - if(!PositionSelectByTicketSymbolAndMagic(data.position_ticket, data.symbol, MagicNumber)) - { - // Try to find the position again - ulong ticket = GetPositionTicketByMagic(data.symbol, MagicNumber); - if(ticket > 0 && PositionSelectByTicketSymbolAndMagic(ticket, data.symbol, MagicNumber)) - { - data.position_ticket = ticket; - data.current_position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - } - else - { - // Position doesn't exist, reset tracking - data.position_open = false; - data.position_ticket = 0; - data.rsi_against_position = false; - data.bars_against_count = 0; - return; - } - } - else - { - // Update position type in case it changed (shouldn't happen, but be safe) - data.current_position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - } - } - - if(data.current_position_type == POSITION_TYPE_BUY) - { - if(data.rsi_current < RSI_Oversold) - { - if(!data.rsi_against_position) - { - data.rsi_against_position = true; - data.bars_against_count = 1; - } - else - { - data.bars_against_count++; - } - - if(data.bars_against_count >= BarsToWait) - { - ClosePosition(data, MagicNumber); - return; - } - } - else - { - if(data.rsi_against_position) - { - data.rsi_against_position = false; - data.bars_against_count = 0; - } - - if(data.rsi_current >= RSI_Target_Buy) - { - ClosePosition(data, MagicNumber); - } - } - } - else if(data.current_position_type == POSITION_TYPE_SELL) - { - if(data.rsi_current > RSI_Overbought) - { - if(!data.rsi_against_position) - { - data.rsi_against_position = true; - data.bars_against_count = 1; - } - else - { - data.bars_against_count++; - } - - if(data.bars_against_count >= BarsToWait) - { - ClosePosition(data, MagicNumber); - return; - } - } - else - { - if(data.rsi_against_position) - { - data.rsi_against_position = false; - data.bars_against_count = 0; - } - - if(data.rsi_current <= RSI_Target_Sell) - { - ClosePosition(data, MagicNumber); - } - } - } -} - -void CheckEntrySignals(RSIScalpingData& data, ENUM_TIMEFRAMES TimeFrame, int MagicNumber, - double RSI_Oversold, double RSI_Overbought, double LotSize) -{ - if(data.rsi_two_bars_ago <= RSI_Oversold && data.rsi_prev > RSI_Oversold) - { - OpenBuyPosition(data, MagicNumber, LotSize); - } - - if(data.rsi_two_bars_ago >= RSI_Overbought && data.rsi_prev < RSI_Overbought) - { - OpenSellPosition(data, MagicNumber, LotSize); - } -} - -//+------------------------------------------------------------------+ -//| Normalize Lot Size According to Symbol Properties | -//+------------------------------------------------------------------+ -double NormalizeLotSize(string symbol, double lotSize) -{ - return United_NormalizeVolume(symbol, lotSize); -} - -void OpenBuyPosition(RSIScalpingData& data, int MagicNumber, double LotSize) -{ - if(PositionExistsByMagic(data.symbol, MagicNumber)) - return; - - // Normalize lot size according to symbol properties - double normalizedLot = NormalizeLotSize(data.symbol, LotSize); - - double ask = SymbolInfoDouble(data.symbol, SYMBOL_ASK); - - if(data.trade.Buy(normalizedLot, data.symbol, ask, 0, 0, "RSI Scalping Buy")) - { - ulong new_ticket = data.trade.ResultOrder(); - if(new_ticket > 0) - { - if(PositionSelectByTicketSymbolAndMagic(new_ticket, data.symbol, MagicNumber)) - { - data.position_ticket = new_ticket; - data.position_open = true; - data.current_position_type = POSITION_TYPE_BUY; - } - } - } -} - -void OpenSellPosition(RSIScalpingData& data, int MagicNumber, double LotSize) -{ - if(PositionExistsByMagic(data.symbol, MagicNumber)) - return; - - // Normalize lot size according to symbol properties - double normalizedLot = NormalizeLotSize(data.symbol, LotSize); - - double bid = SymbolInfoDouble(data.symbol, SYMBOL_BID); - - if(data.trade.Sell(normalizedLot, data.symbol, bid, 0, 0, "RSI Scalping Sell")) - { - ulong new_ticket = data.trade.ResultOrder(); - if(new_ticket > 0) - { - if(PositionSelectByTicketSymbolAndMagic(new_ticket, data.symbol, MagicNumber)) - { - data.position_ticket = new_ticket; - data.position_open = true; - data.current_position_type = POSITION_TYPE_SELL; - } - } - } -} - -void ClosePosition(RSIScalpingData& data, int MagicNumber) -{ - // First verify position still exists - if(!PositionExistsByMagic(data.symbol, MagicNumber)) - { - // Position doesn't exist, reset tracking - data.position_open = false; - data.position_ticket = 0; - data.rsi_against_position = false; - data.bars_against_count = 0; - return; - } - - // Try to close by ticket first (more reliable) - bool closed = false; - if(data.position_ticket > 0) - { - if(PositionSelectByTicket(data.position_ticket)) - { - // Verify it's our position - if(PositionGetString(POSITION_SYMBOL) == data.symbol && - PositionGetInteger(POSITION_MAGIC) == MagicNumber) - { - closed = data.trade.PositionClose(data.position_ticket); - if(!closed) - { - Print("RSIScalping: Failed to close position by ticket ", data.position_ticket, - " - Error: ", data.trade.ResultRetcode(), " (", data.trade.ResultRetcodeDescription(), ")"); - } - } - } - } - - // If ticket method failed, try magic number method - if(!closed) - { - closed = ClosePositionByMagic(data.trade, data.symbol, MagicNumber); - if(!closed) - { - Print("RSIScalping: Failed to close position by magic number for '", data.symbol, - "' - Error: ", data.trade.ResultRetcode(), " (", data.trade.ResultRetcodeDescription(), ")"); - } - } - - // Verify position is actually closed - if(closed) - { - // Wait a moment and verify - Sleep(50); - if(!PositionExistsByMagic(data.symbol, MagicNumber)) - { - data.position_open = false; - data.position_ticket = 0; - data.rsi_against_position = false; - data.bars_against_count = 0; - Print("RSIScalping: Position successfully closed for '", data.symbol, "'"); - } - else - { - Print("RSIScalping: Warning - Close returned success but position still exists for '", data.symbol, "'"); - // Try one more time - Sleep(100); - if(PositionExistsByMagic(data.symbol, MagicNumber)) - { - ClosePositionByMagic(data.trade, data.symbol, MagicNumber); - } - // Reset tracking anyway to prevent getting stuck - data.position_open = false; - data.position_ticket = 0; - data.rsi_against_position = false; - data.bars_against_count = 0; - } - } - else - { - // Close failed, but reset tracking to prevent getting stuck - // The position might have been closed externally - data.position_open = false; - data.position_ticket = 0; - data.rsi_against_position = false; - data.bars_against_count = 0; - } -} - -void ProcessRSIScalping(RSIScalpingData& data, string symbol, ENUM_TIMEFRAMES TimeFrame, int RSI_Period, - ENUM_APPLIED_PRICE RSI_Applied_Price, double RSI_Overbought, - double RSI_Oversold, double RSI_Target_Buy, double RSI_Target_Sell, - int BarsToWait, double LotSize, int MagicNumber, - bool UseReversalEscape, int ReversalATRPeriod, double ReversalAdverseAtrMult, - int ReversalSignsRequired, double ReversalRsiVelocity, double ReversalBodyAtrMult, - bool UseTrailingStop, double TrailingStopDistancePoints, double TrailingActivationPoints) -{ - // Skip if not initialized (symbol not available) - if(!data.isInitialized) - return; - - data.symbol = symbol; // Update symbol in case it changed - if(Bars(data.symbol, TimeFrame) < RSI_Period + 2) - return; - - const datetime current_bar_time = iTime(data.symbol, TimeFrame, 0); - const bool new_bar = (current_bar_time != data.last_bar_time); - const bool in_pos = data.position_open || PositionExistsByMagic(data.symbol, MagicNumber); - if(!in_pos && !new_bar) - return; - - if(!UpdateRSI(data)) - return; - - if(in_pos && UseReversalEscape) - RS_TryReversalEscape(data, TimeFrame, MagicNumber, ReversalATRPeriod, ReversalAdverseAtrMult, - ReversalSignsRequired, ReversalRsiVelocity, ReversalBodyAtrMult); - - if(in_pos) - RS_ApplyTrailingStop(data, MagicNumber, UseTrailingStop, - TrailingStopDistancePoints, TrailingActivationPoints); - - if(!new_bar) - return; - - data.last_bar_time = current_bar_time; - - CheckExistingPosition(data, TimeFrame, MagicNumber, RSI_Oversold, RSI_Overbought, - RSI_Target_Buy, RSI_Target_Sell, BarsToWait); - - if(!data.position_open && !PositionExistsByMagic(data.symbol, MagicNumber)) - { - CheckEntrySignals(data, TimeFrame, MagicNumber, RSI_Oversold, RSI_Overbought, LotSize); - } -} - -//+------------------------------------------------------------------+ diff --git a/frontline/cluster-gold/Strategies/RSISecretSauceStrategy.mqh b/frontline/cluster-gold/Strategies/RSISecretSauceStrategy.mqh deleted file mode 100644 index a8c284e..0000000 --- a/frontline/cluster-gold/Strategies/RSISecretSauceStrategy.mqh +++ /dev/null @@ -1,336 +0,0 @@ -//+------------------------------------------------------------------+ -//| RSISecretSauceStrategy.mqh | -//| Cluster-0 orchestrator: RSI leave extreme then peak/bottom entry | -//+------------------------------------------------------------------+ -#ifndef RSI_SECRET_SAUCE_STRATEGY_MQH -#define RSI_SECRET_SAUCE_STRATEGY_MQH - -#include -#include - -struct RSISecretSauceOrcData -{ - string actualSymbol; - bool isInitialized; - CTrade trade; - CPositionInfo positionInfo; - int rsiHandle; - int atrHandle; - double rsiBuffer[]; - double atrBuffer[]; - double highBuffer[]; - double lowBuffer[]; - bool rsiWasOverbought; - bool rsiWasOversold; - bool rsiBackInRange; - datetime lastRSIExitTime; - datetime lastRSIReentryTime; - datetime lastTradeTime; - datetime lastBarTime; -}; - -bool RSS_UpdateIndicators(RSISecretSauceOrcData &d) -{ - int rsiBarsNeeded = RSS_RSILookback + 5; - if(CopyBuffer(d.rsiHandle, 0, 0, rsiBarsNeeded, d.rsiBuffer) < rsiBarsNeeded) - return false; - if(CopyBuffer(d.atrHandle, 0, 0, 2, d.atrBuffer) < 2) - return false; - if(CopyHigh(d.actualSymbol, RSS_Timeframe, 0, RSS_SwingLookback + 5, d.highBuffer) < RSS_SwingLookback + 5) - return false; - if(CopyLow(d.actualSymbol, RSS_Timeframe, 0, RSS_SwingLookback + 5, d.lowBuffer) < RSS_SwingLookback + 5) - return false; - return true; -} - -void RSS_UpdateRSIState(RSISecretSauceOrcData &d) -{ - double rsiCurrent = d.rsiBuffer[0]; - double rsiPrev = d.rsiBuffer[1]; - - if(rsiPrev >= RSS_RSIOverbought && rsiCurrent < RSS_RSIOverbought) - { - d.rsiWasOverbought = true; - d.rsiBackInRange = true; - d.lastRSIExitTime = TimeCurrent(); - d.lastRSIReentryTime = TimeCurrent(); - } - - if(rsiPrev <= RSS_RSIOversold && rsiCurrent > RSS_RSIOversold) - { - d.rsiWasOversold = true; - d.rsiBackInRange = true; - d.lastRSIExitTime = TimeCurrent(); - d.lastRSIReentryTime = TimeCurrent(); - } - - if(rsiCurrent >= RSS_RSIOverbought) - { - d.rsiWasOverbought = false; - d.rsiBackInRange = false; - } - - if(rsiCurrent <= RSS_RSIOversold) - { - d.rsiWasOversold = false; - d.rsiBackInRange = false; - } -} - -bool RSS_IsRSIPeak(RSISecretSauceOrcData &d) -{ - if(ArraySize(d.rsiBuffer) < RSS_PeakBars + 2) - return false; - double currentRSI = d.rsiBuffer[0]; - bool isPeak = true; - for(int i = 1; i <= RSS_PeakBars; i++) - { - if(d.rsiBuffer[i] >= currentRSI) - { - isPeak = false; - break; - } - } - if(d.rsiBuffer[1] >= currentRSI) - isPeak = false; - return isPeak; -} - -bool RSS_IsRSIBottom(RSISecretSauceOrcData &d) -{ - if(ArraySize(d.rsiBuffer) < RSS_PeakBars + 2) - return false; - double currentRSI = d.rsiBuffer[0]; - bool isBottom = true; - for(int i = 1; i <= RSS_PeakBars; i++) - { - if(d.rsiBuffer[i] <= currentRSI) - { - isBottom = false; - break; - } - } - if(d.rsiBuffer[1] <= currentRSI) - isBottom = false; - return isBottom; -} - -double RSS_GetSwingStopLoss(RSISecretSauceOrcData &d, double currentPrice, ENUM_POSITION_TYPE type) -{ - if(type == POSITION_TYPE_BUY) - { - double lowestLow = d.lowBuffer[0]; - for(int i = 1; i < RSS_SwingLookback && i < ArraySize(d.lowBuffer); i++) - { - if(d.lowBuffer[i] < lowestLow) - lowestLow = d.lowBuffer[i]; - } - return lowestLow; - } - double highestHigh = d.highBuffer[0]; - for(int i = 1; i < RSS_SwingLookback && i < ArraySize(d.highBuffer); i++) - { - if(d.highBuffer[i] > highestHigh) - highestHigh = d.highBuffer[i]; - } - return highestHigh; -} - -bool RSS_CalculateStops(RSISecretSauceOrcData &d, double price, ENUM_POSITION_TYPE type, double &sl, double &tp) -{ - double atrValue = d.atrBuffer[0]; - if(atrValue <= 0) - atrValue = price * 0.01; - - double slDistance = atrValue * RSS_StopLossATR; - double tpDistance = atrValue * RSS_TakeProfitATR; - - int digits = (int)SymbolInfoInteger(d.actualSymbol, SYMBOL_DIGITS); - double point = SymbolInfoDouble(d.actualSymbol, SYMBOL_POINT); - int stopsLevel = (int)SymbolInfoInteger(d.actualSymbol, SYMBOL_TRADE_STOPS_LEVEL); - double minStopDistance = MathMax(stopsLevel * point, point * 10); - - if(RSS_UseSwingStopLoss) - { - double swingStop = RSS_GetSwingStopLoss(d, price, type); - if(swingStop > 0) - { - if(type == POSITION_TYPE_BUY) - { - if(swingStop < price && (price - swingStop) > minStopDistance) - slDistance = price - swingStop; - } - else - { - if(swingStop > price && (swingStop - price) > minStopDistance) - slDistance = swingStop - price; - } - } - } - - if(slDistance < minStopDistance) - slDistance = minStopDistance; - if(tpDistance < minStopDistance) - tpDistance = minStopDistance; - - if(type == POSITION_TYPE_BUY) - { - sl = NormalizeDouble(price - slDistance, digits); - tp = NormalizeDouble(price + tpDistance, digits); - } - else - { - sl = NormalizeDouble(price + slDistance, digits); - tp = NormalizeDouble(price - tpDistance, digits); - } - return true; -} - -bool RSS_CanOpenNewPosition(RSISecretSauceOrcData &d) -{ - int positionCount = 0; - for(int i = PositionsTotal() - 1; i >= 0; i--) - { - if(d.positionInfo.SelectByIndex(i)) - { - if(d.positionInfo.Symbol() == d.actualSymbol && d.positionInfo.Magic() == RSS_MagicNumber) - positionCount++; - } - } - if(positionCount >= RSS_MaxPositions) - return false; - - if(d.lastTradeTime > 0) - { - int barsSince = Bars(d.actualSymbol, RSS_Timeframe, d.lastTradeTime, TimeCurrent()); - if(barsSince < RSS_MinBarsBetweenTrades) - return false; - } - return true; -} - -void RSS_OpenPosition(RSISecretSauceOrcData &d, ENUM_POSITION_TYPE type, const double lotSize) -{ - double price = (type == POSITION_TYPE_BUY) ? - SymbolInfoDouble(d.actualSymbol, SYMBOL_ASK) : - SymbolInfoDouble(d.actualSymbol, SYMBOL_BID); - - if(price <= 0) - return; - - double sl = 0.0, tp = 0.0; - if(!RSS_CalculateStops(d, price, type, sl, tp)) - return; - - string comment = "RSI_Secret_" + (type == POSITION_TYPE_BUY ? "LONG" : "SHORT"); - - bool result = false; - if(type == POSITION_TYPE_BUY) - result = d.trade.Buy(lotSize, d.actualSymbol, 0, sl, tp, comment); - else - result = d.trade.Sell(lotSize, d.actualSymbol, 0, sl, tp, comment); - - if(result) - { - d.lastTradeTime = TimeCurrent(); - if(type == POSITION_TYPE_BUY) - d.rsiWasOverbought = false; - else - d.rsiWasOversold = false; - d.rsiBackInRange = false; - } -} - -void RSS_CheckEntrySignals(RSISecretSauceOrcData &d, const double lotSize) -{ - if(d.rsiWasOverbought && d.rsiBackInRange) - { - if(d.rsiBuffer[0] < RSS_RSIOverbought && RSS_IsRSIPeak(d)) - RSS_OpenPosition(d, POSITION_TYPE_BUY, lotSize); - } - - if(d.rsiWasOversold && d.rsiBackInRange) - { - if(d.rsiBuffer[0] > RSS_RSIOversold && RSS_IsRSIBottom(d)) - RSS_OpenPosition(d, POSITION_TYPE_SELL, lotSize); - } -} - -bool InitRSISecretSauce(RSISecretSauceOrcData &d, const string symbol) -{ - d.isInitialized = false; - d.rsiHandle = INVALID_HANDLE; - d.atrHandle = INVALID_HANDLE; - d.rsiWasOverbought = false; - d.rsiWasOversold = false; - d.rsiBackInRange = false; - d.lastRSIExitTime = 0; - d.lastRSIReentryTime = 0; - d.lastTradeTime = 0; - d.lastBarTime = 0; - d.actualSymbol = symbol; - StringTrimLeft(d.actualSymbol); - StringTrimRight(d.actualSymbol); - if(StringLen(d.actualSymbol) == 0) - d.actualSymbol = _Symbol; - - if(!SymbolSelect(d.actualSymbol, true)) - { - Print("RSISecretSauce: symbol not available '", d.actualSymbol, "'"); - return false; - } - - d.rsiHandle = iRSI(d.actualSymbol, RSS_Timeframe, RSS_RSIPeriod, PRICE_CLOSE); - d.atrHandle = iATR(d.actualSymbol, RSS_Timeframe, RSS_ATRPeriod); - if(d.rsiHandle == INVALID_HANDLE || d.atrHandle == INVALID_HANDLE) - return false; - - ArraySetAsSeries(d.rsiBuffer, true); - ArraySetAsSeries(d.atrBuffer, true); - ArraySetAsSeries(d.highBuffer, true); - ArraySetAsSeries(d.lowBuffer, true); - - d.trade.SetExpertMagicNumber(RSS_MagicNumber); - d.trade.SetDeviationInPoints(RSS_Slippage); - d.trade.SetTypeFilling(ORDER_FILLING_FOK); - - d.isInitialized = true; - return true; -} - -void DeinitRSISecretSauce(RSISecretSauceOrcData &d) -{ - if(d.rsiHandle != INVALID_HANDLE) - IndicatorRelease(d.rsiHandle); - if(d.atrHandle != INVALID_HANDLE) - IndicatorRelease(d.atrHandle); - d.rsiHandle = INVALID_HANDLE; - d.atrHandle = INVALID_HANDLE; - d.isInitialized = false; -} - -void ProcessRSISecretSauce(RSISecretSauceOrcData &d, const double lotSize) -{ - if(!d.isInitialized) - return; - - int requiredBars = MathMax(RSS_RSILookback, RSS_SwingLookback) + 10; - if(Bars(d.actualSymbol, RSS_Timeframe) < requiredBars) - return; - - datetime currentBarTime = iTime(d.actualSymbol, RSS_Timeframe, 0); - if(currentBarTime == d.lastBarTime) - return; - - d.lastBarTime = currentBarTime; - - if(!RSS_UpdateIndicators(d)) - return; - - RSS_UpdateRSIState(d); - - if(RSS_CanOpenNewPosition(d)) - RSS_CheckEntrySignals(d, lotSize); -} - -#endif diff --git a/frontline/cluster-gold/Strategies/SimpleTrendlineStrategy.mqh b/frontline/cluster-gold/Strategies/SimpleTrendlineStrategy.mqh deleted file mode 100644 index 6341b88..0000000 --- a/frontline/cluster-gold/Strategies/SimpleTrendlineStrategy.mqh +++ /dev/null @@ -1,318 +0,0 @@ -//+------------------------------------------------------------------+ -//| SimpleTrendlineStrategy.mqh | -//+------------------------------------------------------------------+ -#ifndef SIMPLE_TRENDLINE_STRATEGY_MQH -#define SIMPLE_TRENDLINE_STRATEGY_MQH - -struct SimpleTrendlineModel -{ - datetime t1; - datetime t2; - datetime t3; - double a; - double b; - bool valid; -}; - -struct SimpleTrendlineData -{ - string symbol; - bool isInitialized; - CTrade trade; - ENUM_TIMEFRAMES signalTF; - ENUM_TIMEFRAMES higherTF; - int maPeriod; - ENUM_MA_METHOD maMethod; - ENUM_APPLIED_PRICE appliedPrice; - int htfBarsToScan; - double touchTolerancePoints; - double breakBufferPoints; - ulong magic; - bool drawTrendline; - int maHandle; - datetime lastSignalBarTime; - string lineName; -}; - -double ST_NormalizeVolume(const string sym, double vol) -{ - double minLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN); - double maxLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX); - double step = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP); - if(step > 0.0) - vol = MathFloor(vol / step) * step; - if(vol < minLot) - vol = minLot; - if(vol > maxLot) - vol = maxLot; - return vol; -} - -bool ST_GetPosition(const string sym, const ulong magic, ENUM_POSITION_TYPE &type, double &volume) -{ - if(!PositionSelectByMagic(sym, magic)) - return false; - type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - volume = PositionGetDouble(POSITION_VOLUME); - return true; -} - -int ST_FindRecentCrossPoints(SimpleTrendlineData &d, datetime ×[], double &prices[]) -{ - ArrayResize(times, 0); - ArrayResize(prices, 0); - if(d.maHandle == INVALID_HANDLE) - return 0; - - int needBars = MathMax(d.htfBarsToScan, d.maPeriod + 20); - MqlRates rates[]; - double maBuf[]; - ArraySetAsSeries(rates, true); - ArraySetAsSeries(maBuf, true); - - int copiedRates = CopyRates(d.symbol, d.higherTF, 0, needBars, rates); - int copiedMa = CopyBuffer(d.maHandle, 0, 0, needBars, maBuf); - if(copiedRates <= 5 || copiedMa <= 5) - return 0; - - int bars = MathMin(copiedRates, copiedMa); - for(int i = 2; i < bars - 1; i++) - { - double d0 = rates[i].close - maBuf[i]; - double d1 = rates[i + 1].close - maBuf[i + 1]; - if(d0 == 0.0 || d1 == 0.0 || (d0 * d1 < 0.0)) - { - int n = ArraySize(times); - ArrayResize(times, n + 1); - ArrayResize(prices, n + 1); - times[n] = rates[i].time; - prices[n] = rates[i].close; - if(ArraySize(times) >= 3) - break; - } - } - return ArraySize(times); -} - -bool ST_BuildTrendline(SimpleTrendlineData &d, SimpleTrendlineModel &m) -{ - m.valid = false; - datetime ts[]; - double ps[]; - if(ST_FindRecentCrossPoints(d, ts, ps) < 3) - return false; - - datetime tOld[3]; - double pOld[3]; - for(int i = 0; i < 3; i++) - { - tOld[i] = ts[2 - i]; - pOld[i] = ps[2 - i]; - } - - long t0 = (long)tOld[0]; - double x1 = 0.0; - double x2 = (double)((long)tOld[1] - t0); - double x3 = (double)((long)tOld[2] - t0); - double y1 = pOld[0]; - double y2 = pOld[1]; - double y3 = pOld[2]; - - double sx = x1 + x2 + x3; - double sy = y1 + y2 + y3; - double sxx = x1 * x1 + x2 * x2 + x3 * x3; - double sxy = x1 * y1 + x2 * y2 + x3 * y3; - double den = 3.0 * sxx - sx * sx; - if(MathAbs(den) < 1e-10) - return false; - - m.a = (3.0 * sxy - sx * sy) / den; - m.b = (sy - m.a * sx) / 3.0; - m.t1 = tOld[0]; - m.t2 = tOld[1]; - m.t3 = tOld[2]; - m.valid = true; - return true; -} - -double ST_LinePriceAt(const SimpleTrendlineModel &m, const datetime t) -{ - if(!m.valid) - return 0.0; - double x = (double)((long)t - (long)m.t1); - return m.a * x + m.b; -} - -void ST_DrawTrendline(SimpleTrendlineData &d, const SimpleTrendlineModel &m) -{ - if(!d.drawTrendline || !m.valid || d.symbol != _Symbol) - return; - - datetime tStart = m.t1; - datetime tEnd = iTime(d.symbol, d.signalTF, 0); - if(tEnd <= tStart) - tEnd = m.t3 + PeriodSeconds(d.signalTF) * 20; - - double pStart = ST_LinePriceAt(m, tStart); - double pEnd = ST_LinePriceAt(m, tEnd); - - if(ObjectFind(0, d.lineName) < 0) - ObjectCreate(0, d.lineName, OBJ_TREND, 0, tStart, pStart, tEnd, pEnd); - else - { - ObjectMove(0, d.lineName, 0, tStart, pStart); - ObjectMove(0, d.lineName, 1, tEnd, pEnd); - } - - ObjectSetInteger(0, d.lineName, OBJPROP_RAY_RIGHT, true); - ObjectSetInteger(0, d.lineName, OBJPROP_COLOR, clrGold); - ObjectSetInteger(0, d.lineName, OBJPROP_WIDTH, 2); -} - -void ST_TryExitOnBreak(SimpleTrendlineData &d, const SimpleTrendlineModel &m) -{ - ENUM_POSITION_TYPE posType; - double vol; - if(!ST_GetPosition(d.symbol, d.magic, posType, vol)) - return; - - double close1 = iClose(d.symbol, d.signalTF, 1); - datetime t1 = iTime(d.symbol, d.signalTF, 1); - double line1 = ST_LinePriceAt(m, t1); - double buf = d.breakBufferPoints * SymbolInfoDouble(d.symbol, SYMBOL_POINT); - - bool closePos = false; - if(posType == POSITION_TYPE_BUY && close1 < (line1 - buf)) - closePos = true; - if(posType == POSITION_TYPE_SELL && close1 > (line1 + buf)) - closePos = true; - - if(closePos) - ClosePositionByMagic(d.trade, d.symbol, d.magic); -} - -void ST_TryPullbackEntry(SimpleTrendlineData &d, const SimpleTrendlineModel &m, const double lots) -{ - if(PositionExistsByMagic(d.symbol, d.magic)) - return; - - MqlRates b1[], b2[]; - ArraySetAsSeries(b1, true); - ArraySetAsSeries(b2, true); - if(CopyRates(d.symbol, d.signalTF, 1, 1, b1) != 1) - return; - if(CopyRates(d.symbol, d.signalTF, 2, 1, b2) != 1) - return; - if(ArraySize(b1) < 1 || ArraySize(b2) < 1) - return; - - double line1 = ST_LinePriceAt(m, b1[0].time); - double tol = d.touchTolerancePoints * SymbolInfoDouble(d.symbol, SYMBOL_POINT); - bool upTrend = (m.a > 0.0); - bool downTrend = (m.a < 0.0); - double vol = ST_NormalizeVolume(d.symbol, lots); - - if(upTrend) - { - bool touched = (b1[0].low <= (line1 + tol)); - bool reclaim = (b1[0].close > line1); - bool bullish = (b1[0].close > b1[0].open); - bool stillHealthy = (b2[0].close >= ST_LinePriceAt(m, b2[0].time) - tol); - if(touched && reclaim && bullish && stillHealthy) - { - if(!d.trade.Buy(vol, d.symbol, 0.0, 0.0, 0.0, "SimpleTrendline BUY")) - Print("SimpleTrendline BUY failed [", d.symbol, "] retcode=", d.trade.ResultRetcode(), " ", d.trade.ResultRetcodeDescription()); - } - } - else if(downTrend) - { - bool touched = (b1[0].high >= (line1 - tol)); - bool reject = (b1[0].close < line1); - bool bearish = (b1[0].close < b1[0].open); - bool stillWeak = (b2[0].close <= ST_LinePriceAt(m, b2[0].time) + tol); - if(touched && reject && bearish && stillWeak) - { - if(!d.trade.Sell(vol, d.symbol, 0.0, 0.0, 0.0, "SimpleTrendline SELL")) - Print("SimpleTrendline SELL failed [", d.symbol, "] retcode=", d.trade.ResultRetcode(), " ", d.trade.ResultRetcodeDescription()); - } - } -} - -bool InitSimpleTrendline(SimpleTrendlineData &d, - const string symbol, - const ENUM_TIMEFRAMES signalTF, - const ENUM_TIMEFRAMES higherTF, - const int maPeriod, - const ENUM_MA_METHOD maMethod, - const ENUM_APPLIED_PRICE appliedPrice, - const int htfBarsToScan, - const double touchTolerancePoints, - const double breakBufferPoints, - const ulong magic, - const bool drawTrendline) -{ - d.isInitialized = false; - d.symbol = symbol; - StringTrimLeft(d.symbol); - StringTrimRight(d.symbol); - if(StringLen(d.symbol) == 0) - d.symbol = _Symbol; - - if(!SymbolSelect(d.symbol, true)) - return false; - - d.signalTF = signalTF; - d.higherTF = higherTF; - d.maPeriod = maPeriod; - d.maMethod = maMethod; - d.appliedPrice = appliedPrice; - d.htfBarsToScan = htfBarsToScan; - d.touchTolerancePoints = touchTolerancePoints; - d.breakBufferPoints = breakBufferPoints; - d.magic = magic; - d.drawTrendline = drawTrendline; - d.lastSignalBarTime = 0; - d.lineName = "SimpleTrendline_" + d.symbol + "_" + IntegerToString((int)d.magic); - - d.trade.SetExpertMagicNumber((long)d.magic); - d.trade.SetTypeFillingBySymbol(d.symbol); - d.trade.SetDeviationInPoints(20); - - d.maHandle = iMA(d.symbol, d.higherTF, d.maPeriod, 0, d.maMethod, d.appliedPrice); - if(d.maHandle == INVALID_HANDLE) - return false; - - d.isInitialized = true; - return true; -} - -void DeinitSimpleTrendline(SimpleTrendlineData &d) -{ - if(d.maHandle != INVALID_HANDLE) - IndicatorRelease(d.maHandle); - d.maHandle = INVALID_HANDLE; - if(ObjectFind(0, d.lineName) >= 0) - ObjectDelete(0, d.lineName); - d.isInitialized = false; -} - -void ProcessSimpleTrendline(SimpleTrendlineData &d, const double lots) -{ - if(!d.isInitialized) - return; - - datetime bar0 = iTime(d.symbol, d.signalTF, 0); - if(bar0 == 0 || bar0 == d.lastSignalBarTime) - return; - d.lastSignalBarTime = bar0; - - SimpleTrendlineModel m; - if(!ST_BuildTrendline(d, m)) - return; - - ST_DrawTrendline(d, m); - ST_TryExitOnBreak(d, m); - ST_TryPullbackEntry(d, m, lots); -} - -#endif // SIMPLE_TRENDLINE_STRATEGY_MQH diff --git a/frontline/cluster-gold/Strategies/SuperEMAStrategy.mqh b/frontline/cluster-gold/Strategies/SuperEMAStrategy.mqh deleted file mode 100644 index 52400fe..0000000 --- a/frontline/cluster-gold/Strategies/SuperEMAStrategy.mqh +++ /dev/null @@ -1,509 +0,0 @@ -//+------------------------------------------------------------------+ -//| SuperEMAStrategy.mqh — EMA + CCI + MACD (United EA module) | -//+------------------------------------------------------------------+ -#ifndef SUPER_EMA_STRATEGY_MQH -#define SUPER_EMA_STRATEGY_MQH - -#include - -enum ENUM_SE_ENTRY_STYLE -{ - SE_ENTRY_CCIZERO_MACD = 0, - SE_ENTRY_LAMBERT = 1, - SE_ENTRY_PULLBACK = 2 -}; - -struct SuperEMAData -{ - string symbol; - ENUM_TIMEFRAMES tf; - datetime lastBarTime; - CTrade trade; - bool isInitialized; - int slippagePoints; - int magic; - int emaFast; - int emaMid; - int emaSlow; - int emaTrendBars; - int cciPeriod; - double cciOverbought; - double cciOversold; - int pullbackCciLookback; - int macdFast; - int macdSlow; - int macdSignal; - ENUM_SE_ENTRY_STYLE entryStyle; - bool oneTradeOnly; - bool useStructuralSL; - double slBufferPoints; - bool exitOnTrendFlip; - bool exitOnMacdFlip; - bool exitOnCciZeroCross; - int maxHoldingBars; - bool exitBelowMidEma; - bool debugLogs; -}; - -void SuperEMA_Log(SuperEMAData &d, const string s) -{ - if(d.debugLogs) - Print("[SuperEMA] ", s); -} - -double SuperEMA_Point(const SuperEMAData &d) -{ - double pt = SymbolInfoDouble(d.symbol, SYMBOL_POINT); - return (pt > 0.0 ? pt : _Point); -} - -bool SuperEMA_IsNewBar(SuperEMAData &d) -{ - datetime t = iTime(d.symbol, d.tf, 0); - if(t <= 0 || t == d.lastBarTime) - return false; - d.lastBarTime = t; - return true; -} - -double SuperEMA_EmaAt(SuperEMAData &d, const int period, const int shift) -{ - int h = iMA(d.symbol, d.tf, period, 0, MODE_EMA, PRICE_CLOSE); - if(h == INVALID_HANDLE) - return 0.0; - double b[1]; - if(CopyBuffer(h, 0, shift, 1, b) <= 0) - { - IndicatorRelease(h); - return 0.0; - } - IndicatorRelease(h); - return b[0]; -} - -double SuperEMA_CciAt(SuperEMAData &d, const int shift) -{ - int h = iCCI(d.symbol, d.tf, d.cciPeriod, PRICE_TYPICAL); - if(h == INVALID_HANDLE) - return 0.0; - double b[1]; - if(CopyBuffer(h, 0, shift, 1, b) <= 0) - { - IndicatorRelease(h); - return 0.0; - } - IndicatorRelease(h); - return b[0]; -} - -bool SuperEMA_MacdHistAt(SuperEMAData &d, const int shift, double &hist) -{ - int h = iMACD(d.symbol, d.tf, d.macdFast, d.macdSlow, d.macdSignal, PRICE_CLOSE); - if(h == INVALID_HANDLE) - return false; - double mainLine[1], sigLine[1]; - if(CopyBuffer(h, 0, shift, 1, mainLine) <= 0 || CopyBuffer(h, 1, shift, 1, sigLine) <= 0) - { - IndicatorRelease(h); - return false; - } - IndicatorRelease(h); - hist = mainLine[0] - sigLine[0]; - return true; -} - -bool SuperEMA_TrendUp(SuperEMAData &d, const int sh) -{ - double c = iClose(d.symbol, d.tf, sh); - double emaS = SuperEMA_EmaAt(d, d.emaSlow, sh); - return (emaS > 0.0 && c > emaS); -} - -bool SuperEMA_TrendDown(SuperEMAData &d, const int sh) -{ - double c = iClose(d.symbol, d.tf, sh); - double emaS = SuperEMA_EmaAt(d, d.emaSlow, sh); - return (emaS > 0.0 && c < emaS); -} - -bool SuperEMA_CciCrossAboveZero(SuperEMAData &d) -{ - double c1 = SuperEMA_CciAt(d, 1); - double c2 = SuperEMA_CciAt(d, 2); - return (c2 <= 0.0 && c1 > 0.0); -} - -bool SuperEMA_CciCrossBelowZero(SuperEMAData &d) -{ - double c1 = SuperEMA_CciAt(d, 1); - double c2 = SuperEMA_CciAt(d, 2); - return (c2 >= 0.0 && c1 < 0.0); -} - -bool SuperEMA_CciCrossAbove100(SuperEMAData &d) -{ - double c1 = SuperEMA_CciAt(d, 1); - double c2 = SuperEMA_CciAt(d, 2); - return (c2 < d.cciOverbought && c1 > d.cciOverbought); -} - -bool SuperEMA_CciCrossBelowMinus100(SuperEMAData &d) -{ - double c1 = SuperEMA_CciAt(d, 1); - double c2 = SuperEMA_CciAt(d, 2); - return (c2 > d.cciOversold && c1 < d.cciOversold); -} - -bool SuperEMA_HadCciOversoldRecently(SuperEMAData &d) -{ - for(int i = 2; i <= d.pullbackCciLookback + 1; i++) - { - double v = SuperEMA_CciAt(d, i); - if(v <= d.cciOversold) - return true; - } - return false; -} - -bool SuperEMA_HadCciOverboughtRecently(SuperEMAData &d) -{ - for(int i = 2; i <= d.pullbackCciLookback + 1; i++) - { - double v = SuperEMA_CciAt(d, i); - if(v >= d.cciOverbought) - return true; - } - return false; -} - -bool SuperEMA_PullbackNearFastEmaLong(SuperEMAData &d) -{ - double emaF = SuperEMA_EmaAt(d, d.emaFast, 1); - double lo = iLow(d.symbol, d.tf, 1); - if(emaF <= 0.0) - return false; - const double pt = SuperEMA_Point(d); - return (lo <= emaF + d.slBufferPoints * pt * 3.0); -} - -bool SuperEMA_PullbackNearFastEmaShort(SuperEMAData &d) -{ - double emaF = SuperEMA_EmaAt(d, d.emaFast, 1); - double hi = iHigh(d.symbol, d.tf, 1); - if(emaF <= 0.0) - return false; - const double pt = SuperEMA_Point(d); - return (hi >= emaF - d.slBufferPoints * pt * 3.0); -} - -int SuperEMA_PositionsByMagic(SuperEMAData &d) -{ - int n = 0; - for(int i = PositionsTotal() - 1; i >= 0; i--) - { - ulong t = PositionGetTicket(i); - if(t == 0) - continue; - if(!PositionSelectByTicket(t)) - continue; - if(PositionGetString(POSITION_SYMBOL) == d.symbol && (int)PositionGetInteger(POSITION_MAGIC) == d.magic) - n++; - } - return n; -} - -void SuperEMA_ComputeSLTP(SuperEMAData &d, const bool isBuy, double &sl, double &tp) -{ - sl = 0.0; - tp = 0.0; - if(!d.useStructuralSL) - return; - double emaM = SuperEMA_EmaAt(d, d.emaMid, d.emaTrendBars); - double buf = d.slBufferPoints * SuperEMA_Point(d); - if(isBuy) - sl = emaM - buf; - else - sl = emaM + buf; -} - -int SuperEMA_BarsSinceOpen(SuperEMAData &d, const datetime openTime) -{ - if(openTime <= 0) - return 0; - int sh = iBarShift(d.symbol, d.tf, openTime, false); - if(sh < 0) - return 999999; - return sh; -} - -void SuperEMA_CloseTicket(SuperEMAData &d, const ulong ticket, const string reason) -{ -#ifdef UNITED_MARTINGALE_NO_SELF_CLOSE - return; -#endif - d.trade.SetExpertMagicNumber(d.magic); - if(d.trade.PositionClose(ticket)) - SuperEMA_Log(d, "Close: " + reason); -} - -void SuperEMA_ManageExits(SuperEMAData &d) -{ -#ifdef UNITED_MARTINGALE_NO_SELF_CLOSE - return; -#endif - for(int i = PositionsTotal() - 1; i >= 0; i--) - { - ulong ticket = PositionGetTicket(i); - if(ticket == 0) - continue; - if(!PositionSelectByTicket(ticket)) - continue; - if(PositionGetString(POSITION_SYMBOL) != d.symbol) - continue; - if((int)PositionGetInteger(POSITION_MAGIC) != d.magic) - continue; - - ENUM_POSITION_TYPE ptype = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - datetime openTime = (datetime)PositionGetInteger(POSITION_TIME); - - double h1 = 0.0; - if(!SuperEMA_MacdHistAt(d, 1, h1)) - continue; - - bool closeLong = false; - bool closeShort = false; - string reason = ""; - - if(d.maxHoldingBars > 0) - { - int held = SuperEMA_BarsSinceOpen(d, openTime); - if(held >= d.maxHoldingBars) - { - if(ptype == POSITION_TYPE_BUY) - closeLong = true; - else - closeShort = true; - reason = "time stop (max bars)"; - } - } - - if(ptype == POSITION_TYPE_BUY) - { - if(d.exitOnTrendFlip && SuperEMA_TrendDown(d, d.emaTrendBars)) - { - closeLong = true; - reason = "trend flip (below slow EMA)"; - } - if(d.exitOnMacdFlip && h1 < 0.0) - { - closeLong = true; - reason = "MACD histogram < 0"; - } - if(d.exitOnCciZeroCross && SuperEMA_CciCrossBelowZero(d)) - { - closeLong = true; - reason = "CCI crossed below zero"; - } - if(d.exitBelowMidEma) - { - double c = iClose(d.symbol, d.tf, 1); - double emaM = SuperEMA_EmaAt(d, d.emaMid, 1); - if(emaM > 0.0 && c < emaM) - { - closeLong = true; - reason = "close below mid EMA"; - } - } - if(closeLong) - SuperEMA_CloseTicket(d, ticket, reason); - } - else if(ptype == POSITION_TYPE_SELL) - { - if(d.exitOnTrendFlip && SuperEMA_TrendUp(d, d.emaTrendBars)) - { - closeShort = true; - reason = "trend flip (above slow EMA)"; - } - if(d.exitOnMacdFlip && h1 > 0.0) - { - closeShort = true; - reason = "MACD histogram > 0"; - } - if(d.exitOnCciZeroCross && SuperEMA_CciCrossAboveZero(d)) - { - closeShort = true; - reason = "CCI crossed above zero"; - } - if(d.exitBelowMidEma) - { - double c = iClose(d.symbol, d.tf, 1); - double emaM = SuperEMA_EmaAt(d, d.emaMid, 1); - if(emaM > 0.0 && c > emaM) - { - closeShort = true; - reason = "close above mid EMA"; - } - } - if(closeShort) - SuperEMA_CloseTicket(d, ticket, reason); - } - } -} - -bool InitSuperEMA(SuperEMAData &d, - const string symbol, - const ENUM_TIMEFRAMES tf, - const int slippagePoints, - const int magic, - const int emaFast, - const int emaMid, - const int emaSlow, - const int emaTrendBars, - const int cciPeriod, - const double cciOverbought, - const double cciOversold, - const int pullbackCciLookback, - const int macdFast, - const int macdSlow, - const int macdSignal, - const ENUM_SE_ENTRY_STYLE entryStyle, - const bool oneTradeOnly, - const bool useStructuralSL, - const double slBufferPoints, - const bool exitOnTrendFlip, - const bool exitOnMacdFlip, - const bool exitOnCciZeroCross, - const int maxHoldingBars, - const bool exitBelowMidEma, - const bool debugLogs) -{ - d.symbol = symbol; - if(StringLen(d.symbol) == 0) - d.symbol = _Symbol; - d.tf = tf; - d.lastBarTime = 0; - d.isInitialized = false; - d.slippagePoints = slippagePoints; - d.magic = magic; - d.emaFast = emaFast; - d.emaMid = emaMid; - d.emaSlow = emaSlow; - d.emaTrendBars = emaTrendBars; - d.cciPeriod = cciPeriod; - d.cciOverbought = cciOverbought; - d.cciOversold = cciOversold; - d.pullbackCciLookback = pullbackCciLookback; - d.macdFast = macdFast; - d.macdSlow = macdSlow; - d.macdSignal = macdSignal; - d.entryStyle = entryStyle; - d.oneTradeOnly = oneTradeOnly; - d.useStructuralSL = useStructuralSL; - d.slBufferPoints = slBufferPoints; - d.exitOnTrendFlip = exitOnTrendFlip; - d.exitOnMacdFlip = exitOnMacdFlip; - d.exitOnCciZeroCross = exitOnCciZeroCross; - d.maxHoldingBars = maxHoldingBars; - d.exitBelowMidEma = exitBelowMidEma; - d.debugLogs = debugLogs; - - if(!SymbolSelect(d.symbol, true)) - { - Print("SuperEMA: symbol not available: ", d.symbol); - return false; - } - d.trade.SetExpertMagicNumber(d.magic); - d.trade.SetDeviationInPoints(d.slippagePoints); - d.isInitialized = true; - return true; -} - -void ProcessSuperEMA(SuperEMAData &d, const double lots) -{ - if(!d.isInitialized) - return; - - if(!SuperEMA_IsNewBar(d)) - return; - - SuperEMA_ManageExits(d); - - // Same order as standalone SuperEMAXAUUSD: skip entry logic when flat is not allowed. - if(d.oneTradeOnly && SuperEMA_PositionsByMagic(d) > 0) - return; - - const int sh = d.emaTrendBars; - double h1 = 0.0; - if(!SuperEMA_MacdHistAt(d, 1, h1)) - return; - - bool up = SuperEMA_TrendUp(d, sh); - bool dn = SuperEMA_TrendDown(d, sh); - - bool wantBuy = false; - bool wantSell = false; - - switch(d.entryStyle) - { - case SE_ENTRY_CCIZERO_MACD: - if(up && SuperEMA_CciCrossAboveZero(d) && h1 > 0.0) - wantBuy = true; - if(dn && SuperEMA_CciCrossBelowZero(d) && h1 < 0.0) - wantSell = true; - break; - - case SE_ENTRY_LAMBERT: - if(up && SuperEMA_CciCrossAbove100(d) && h1 > 0.0) - wantBuy = true; - if(dn && SuperEMA_CciCrossBelowMinus100(d) && h1 < 0.0) - wantSell = true; - break; - - case SE_ENTRY_PULLBACK: - if(up && SuperEMA_HadCciOversoldRecently(d) && SuperEMA_CciCrossAboveZero(d) && h1 > 0.0 && SuperEMA_PullbackNearFastEmaLong(d)) - wantBuy = true; - if(dn && SuperEMA_HadCciOverboughtRecently(d) && SuperEMA_CciCrossBelowZero(d) && h1 < 0.0 && SuperEMA_PullbackNearFastEmaShort(d)) - wantSell = true; - break; - } - - if(!wantBuy && !wantSell) - return; - - const double vol = United_NormalizeVolume(d.symbol, lots); - if(vol <= 0.0) - { - SuperEMA_Log(d, "Skip entry: normalized volume <= 0"); - return; - } - - MqlTick tick; - if(!SymbolInfoTick(d.symbol, tick)) - return; - - double sl = 0.0, tp = 0.0; - - if(wantBuy && !wantSell) - { -#ifndef UNITED_MARTINGALE_NO_SELF_CLOSE - SuperEMA_ComputeSLTP(d, true, sl, tp); -#endif - if(d.trade.Buy(vol, d.symbol, tick.ask, sl, tp, "United SuperEMA long")) - SuperEMA_Log(d, StringFormat("BUY ask=%.5f sl=%.5f", tick.ask, sl)); - } - else if(wantSell && !wantBuy) - { -#ifndef UNITED_MARTINGALE_NO_SELF_CLOSE - SuperEMA_ComputeSLTP(d, false, sl, tp); -#endif - if(d.trade.Sell(vol, d.symbol, tick.bid, sl, tp, "United SuperEMA short")) - SuperEMA_Log(d, StringFormat("SELL bid=%.5f sl=%.5f", tick.bid, sl)); - } -} - -void DeinitSuperEMA(SuperEMAData &d) -{ - d.isInitialized = false; -} - -#endif // SUPER_EMA_STRATEGY_MQH diff --git a/frontline/cluster-gold/main.mq5 b/frontline/cluster-gold/main.mq5 deleted file mode 100644 index f77c907..0000000 --- a/frontline/cluster-gold/main.mq5 +++ /dev/null @@ -1,904 +0,0 @@ -//+------------------------------------------------------------------+ -//| UnitedEA.mq5 | -//| Copyright 2025, MetaQuotes Ltd. | -//| https://www.mql5.com | -//+------------------------------------------------------------------+ -#property copyright "Copyright 2025, MetaQuotes Ltd." -#property link "https://www.mql5.com" -#property version "1.20" -#property strict -#property description "LOT_* nominal at ORCH_ReferenceBalance; scale = balance/equity ÷ reference (clamped). No performance-evaluator ranking." - -#include -#include -#include -#include -#include "MagicNumberHelpers.mqh" -#define UNITED_V2_DYNAMIC_LOTS -double g_DB_LotSize; -// Include strategy implementations early so structs are available -#include "Strategies/DarvasBoxStrategy.mqh" -#include "Strategies/EMASlopeDistanceStrategy.mqh" -#include "Strategies/RSICrossOverReversalStrategy.mqh" -#include "Strategies/RSIMidPointHijackStrategy.mqh" -#include "Strategies/RSIScalpingStrategy.mqh" -#include "Strategies/SuperEMAStrategy.mqh" -#include "Strategies/RSIReversalAsianStrategy.mqh" -#include "Strategies/RSIConsolidationStrategy.mqh" -#include "Strategies/SimpleTrendlineStrategy.mqh" -#include "Strategies/RSISecretSauceStrategy.mqh" - -//+------------------------------------------------------------------+ -//| Global Lot Size Variables (for dynamic lot sizing) | -//+------------------------------------------------------------------+ -double g_ES_LotSize; // EMA Slope Distance lot size -double g_RC_LotSize; // RSI CrossOver Reversal lot size -double g_RM_LotSize; // RSI MidPoint Hijack lot size - -double g_Pos_RS_APPL; -double g_Pos_RS_BTCUSD; -double g_Pos_RS_NVDA; -double g_Pos_RS_TSLA; -double g_Pos_RS_XAUUSD; -double g_Pos_RRA_EURUSD; -double g_Pos_RRA_AUDUSD; -double g_Pos_SE; -double g_Pos_RCO; -double g_Pos_ST_BTCUSD; -double g_Pos_ST_XAUUSD; -double g_RSS_LotSize; - -bool United_MayOpenNewEntry(const string symbol, const ulong magic, const bool isBuy) -{ - if(PositionExistsByMagic(symbol, magic)) - return false; - return true; -} - -//+------------------------------------------------------------------+ -//| Strategy Enable/Disable Switches | -//+------------------------------------------------------------------+ -input group "=== Strategy Enable/Disable ===" -input bool EnableDarvasBox = true; -input bool EnableEMASlopeDistance = true; -input bool EnableRSICrossOverReversal = true; -input bool EnableRSIMidPointHijack = false; -input bool EnableRSIScalpingAPPL = false; -input bool EnableRSIScalpingBTCUSD = false; -input bool EnableRSIScalpingNVDA = false; -input bool EnableRSIScalpingTSLA = false; -input bool EnableRSIScalpingXAUUSD = true; -input bool EnableSuperEMA = true; -input bool EnableRSIConsolidation = true; -input bool EnableRSIReversalAsianEURUSD = false; -input bool EnableRSIReversalAsianAUDUSD = false; -input bool EnableSimpleTrendlineBTCUSD = false; -input bool EnableSimpleTrendlineXAUUSD = true; -input bool EnableRSISecretSauce = false; - -input group "=== Centralized Lot Size (Granular Per Robot) ===" -input double LOT_DB_DarvasBox = 0.04; -input double LOT_ES_EMASlopeDistance = 0.09; -input double LOT_RC_RSICrossOver = 0.1; -input double LOT_RM_RSIMidPointHijack = 0.01; -input double LOT_RS_APPL = 5.0; -input double LOT_RS_BTCUSD = 0.1; -input double LOT_RS_NVDA = 10.0; -input double LOT_RS_TSLA = 15.0; -input double LOT_RS_XAUUSD = 0.05; -input double LOT_RRA_EURUSD = 0.05; -input double LOT_RRA_AUDUSD = 0.08; -input double LOT_SE_SuperEMA = 0.02; -input double LOT_RCO_RSIConsolidation = 0.02; -input double LOT_ST_BTCUSD = 0.07; -input double LOT_ST_XAUUSD = 0.02; -input double LOT_RSS_SecretSauce = 0.01; - -input group "=== Balance-based position sizing ===" -input bool ORCH_ScaleLotsByBalance = true; -input bool ORCH_UseEquityInsteadOfBalance = false; -input double ORCH_ReferenceBalance = 10000.0; -input double ORCH_MinBalanceScale = 0.1; -input double ORCH_MaxBalanceScale = 10.0; - -//+------------------------------------------------------------------+ -//| Strategy 1: DarvasBoxXAUUSD | -//+------------------------------------------------------------------+ -input group "=== DarvasBox Strategy ===" -input string DB_Symbol = "XAU"; -input int DB_BoxPeriod = 165; -input double DB_BoxDeviation = 30000; // Increased to allow larger ranges (was 25140) -input int DB_VolumeThreshold = 0; // Set to 0 to disable volume threshold check. Volume data from indicator used instead. -input double DB_StopLoss = 1665; -input double DB_TakeProfit = 3685; -input bool DB_EnableLogging = false; -input color DB_BoxColor = (color)16711680; -input int DB_BoxWidth = 1; -input ENUM_TIMEFRAMES DB_TrendTimeframe = PERIOD_H2; -input int DB_MA_Period = 125; -input ENUM_MA_METHOD DB_MA_Method = MODE_EMA; -input ENUM_APPLIED_PRICE DB_MA_Price = PRICE_WEIGHTED; -input double DB_TrendThreshold = 4.94; -input int DB_VolumeMA_Period = 110; -input double DB_VolumeThresholdMultiplier = 1.5; -input bool DB_UseVolumeSpikeFilter = true; -input bool DB_UseTrendFilter = true; -input int DB_MagicNumber = 135790; - -//+------------------------------------------------------------------+ -//| Strategy 2: EMASlopeDistanceCocktailXAUUSD | -//| PEPPERSTONE US: Gold symbol is typically "XAUUSD" or "GOLD" | -//+------------------------------------------------------------------+ -input group "=== EMA Slope Distance Strategy ===" -input string ES_Symbol = "XAU"; -input int ES_EMA_Periode = 46; -input double ES_PreisSchwelle = 600.0; -input double ES_SteigungSchwelle = 80.0; -input int ES_ÜberwachungTimeout = 800; -input double ES_TrailingStop = 370.0; -input bool ES_UseTrailingStop = true; -input double ES_TrailingActivationPips = 0.0; -input bool ES_UseStaleStopLossExit = false; -input int ES_StaleStopLossSeconds = 33800; -input double ES_LotGröße = 0.03; -input int ES_MagicNumber = 12350; -input bool ES_UseSpreadAdjustment = true; -input ENUM_TIMEFRAMES ES_Timeframe = PERIOD_H1; -input bool ES_UseBarData = true; -input int ES_MaxTradesPerCrossover = 9; -input int ES_ProfitCheckBars = 18; -input bool ES_CloseUnprofitableTrades = true; -input bool ES_UseWeeklyADXFilter = true; -input int ES_WeeklyADXPeriod = 15; -input double ES_WeeklyADXMin = 40.0; -input int ES_WeeklyADXBarShift = 2; -input bool ES_WeeklyADXUseDirection = true; - -//+------------------------------------------------------------------+ -//| Strategy 3: RSICrossOverReversalXAUUSD | -//| PEPPERSTONE US: Gold symbol is typically "XAUUSD" or "GOLD" | -//+------------------------------------------------------------------+ -input group "=== RSI CrossOver Reversal Strategy ===" -input string RC_Symbol = "XAU"; -input int RC_MagicNumber = 7; -input int RC_rsiPeriod = 19; -input int RC_overboughtLevel = 93; -input int RC_oversoldLevel = 22; -input double RC_entryRSIBuySpread = 0; -input double RC_entryRSISellSpread = 0; -input double RC_lotSize = 0.01; -input int RC_slippage = 3; -input int RC_cooldownSeconds = 209; -input ENUM_TIMEFRAMES RC_TimeFrame1 = PERIOD_M1; -input ENUM_TIMEFRAMES RC_TimeFrame2 = PERIOD_M1; -input ENUM_TIMEFRAMES RC_BarTimeFrame = PERIOD_M12; -input int RC_emaPeriod = 140; -input double RC_emaSlopeThreshold = 105; -input double RC_exitBuyRSI = 86; -input double RC_exitSellRSI = 10; -input double RC_TrailingStop = 295; -input double RC_emaDistanceThreshold = 165; -input bool RC_UseTrendStrengthFilter = true; -input int RC_tradingHourOneBegin = 24; -input int RC_tradingHourOneEnd = 22; -input int RC_tradingHourTwoBegin = 6; -input int RC_tradingHourTwoEnd = 19; -input bool RC_Sunday = false; -input bool RC_Monday = false; -input bool RC_Tuesday = true; -input bool RC_Wednesday = true; -input bool RC_Thursday = true; -input bool RC_Friday = false; -input bool RC_Saturday = false; - -//+------------------------------------------------------------------+ -//| Strategy 4: RSIMidPointHijackXAUUSD | -//| PEPPERSTONE US: Gold symbol is typically "XAUUSD" or "GOLD" | -//+------------------------------------------------------------------+ -input group "=== RSI MidPoint Hijack Strategy ===" -input string RM_Symbol = "XAU"; -input ENUM_TIMEFRAMES RM_InpTimeframe = PERIOD_H1; -input double RM_InpLotSize = 0.02; -input int RM_InpMagicNumberRSIFollow = 1001; -input int RM_InpMagicNumberRSIReverse = 1002; -input int RM_InpMagicNumberEMACross = 1003; -input bool RM_InpEnableRSIFollow = true; -input bool RM_InpEnableRSIReverse = true; -input bool RM_InpEnableEMACross = true; -input bool RM_InpEnableStrategyLock = false; -input double RM_InpLockProfitThreshold = 0.0; -input bool RM_InpCloseOppositeTrades = false; -input int RM_InpRSIPeriod = 32; -input int RM_InpRSIOverbought = 78; -input int RM_InpRSIOversold = 46; -input int RM_InpRSIExitLevel = 44; -input int RM_InpRSIFollowStartHour = 23; -input int RM_InpRSIFollowEndHour = 8; -input bool RM_InpRSIFollowCloseOutsideHours = false; -input int RM_InpRSIReversePeriod = 59; -input int RM_InpRSIReverseOverbought = 51; -input int RM_InpRSIReverseOversold = 49; -input int RM_InpRSIReverseCrossLevel = 53; -input int RM_InpRSIReverseExitLevel = 48; -input int RM_InpRSIReverseStartHour = 7; -input int RM_InpRSIReverseEndHour = 13; -input bool RM_InpRSIReverseCloseOutsideHours = false; -input int RM_InpRSIReverseCooldownBars = 15; -input bool RM_InpRSIReverseCooldownOnLoss = true; -input int RM_InpEMAPeriod = 120; -input int RM_InpEMACrossStartHour = 8; -input int RM_InpEMACrossEndHour = 14; -input bool RM_InpEMACrossCloseOutsideHours = true; -input bool RM_InpUseEMADistanceEntry = true; -input double RM_InpEMADistancePips = 160.0; -input int RM_InpEMADistancePeriod = 26; - -//+------------------------------------------------------------------+ -//| Strategy 5-10: RSI Scalping Strategies | -//| Each RSI Scalping strategy trades on its own symbol: | -//| - APPL: Apple stock (AAPL) | -//| - BTCUSD: Bitcoin/USD | -//| - NVDA: NVIDIA stock | -//| - TSLA: Tesla stock | -//| - XAUUSD: Gold/USD | -//| | -//| PEPPERSTONE US SYMBOL FORMATS: | -//| - Stocks may use: "AAPL.US", "NASDAQ:AAPL", or just "AAPL" | -//| - To find correct symbols: | -//| 1. Open Market Watch (Ctrl+M) | -//| 2. Right-click > Show All | -//| 3. Search for the stock name | -//| 4. Use the exact symbol name shown | -//+------------------------------------------------------------------+ -input group "=== RSI Scalping APPL (AAPL) - Pepperstone US ===" -input string RS_APPL_Symbol = "AAPL.NAS"; // Pepperstone / match tester set (also try AAPL.US) -input ENUM_TIMEFRAMES RS_APPL_TimeFrame = PERIOD_M10; -input int RS_APPL_RSI_Period = 14; -input ENUM_APPLIED_PRICE RS_APPL_RSI_Applied_Price = PRICE_CLOSE; -input double RS_APPL_RSI_Overbought = 80; -input double RS_APPL_RSI_Oversold = 78; -input double RS_APPL_RSI_Target_Buy = 94; -input double RS_APPL_RSI_Target_Sell = 44; -input int RS_APPL_BarsToWait = 7; -input double RS_APPL_LotSize = 25; -input int RS_APPL_MagicNumber = 20001; -input int RS_APPL_Slippage = 3; - -input group "=== RSI Scalping BTCUSD ===" -input string RS_BTCUSD_Symbol = "BTCUSD"; // Pepperstone may use: "BTCUSD", "BTC/USD", or "BTCUSD.c" -input ENUM_TIMEFRAMES RS_BTCUSD_TimeFrame = PERIOD_H1; -input int RS_BTCUSD_RSI_Period = 14; -input ENUM_APPLIED_PRICE RS_BTCUSD_RSI_Applied_Price = PRICE_CLOSE; -input double RS_BTCUSD_RSI_Overbought = 90; -input double RS_BTCUSD_RSI_Oversold = 73; -input double RS_BTCUSD_RSI_Target_Buy = 88; -input double RS_BTCUSD_RSI_Target_Sell = 48; -input int RS_BTCUSD_BarsToWait = 6; -input double RS_BTCUSD_LotSize = 0.1; -input int RS_BTCUSD_MagicNumber = 123459123; -input int RS_BTCUSD_Slippage = 3; - -input group "=== RSI Scalping NVDA - Pepperstone US ===" -input string RS_NVDA_Symbol = "NVDA.NAS"; // Pepperstone / match tester set (also try NVDA.US) -input ENUM_TIMEFRAMES RS_NVDA_TimeFrame = PERIOD_M15; -input int RS_NVDA_RSI_Period = 8; -input ENUM_APPLIED_PRICE RS_NVDA_RSI_Applied_Price = PRICE_CLOSE; -input double RS_NVDA_RSI_Overbought = 36; -input double RS_NVDA_RSI_Oversold = 38; -input double RS_NVDA_RSI_Target_Buy = 90; -input double RS_NVDA_RSI_Target_Sell = 70; -input int RS_NVDA_BarsToWait = 5; -input double RS_NVDA_LotSize = 50; -input int RS_NVDA_MagicNumber = 20003; -input int RS_NVDA_Slippage = 3; - -input group "=== RSI Scalping TSLA - Pepperstone US ===" -input string RS_TSLA_Symbol = "TSLA.NAS"; // Pepperstone / match tester set (also try TSLA.US) -input ENUM_TIMEFRAMES RS_TSLA_TimeFrame = PERIOD_H1; -input int RS_TSLA_RSI_Period = 14; -input ENUM_APPLIED_PRICE RS_TSLA_RSI_Applied_Price = PRICE_CLOSE; -input double RS_TSLA_RSI_Overbought = 54; -input double RS_TSLA_RSI_Oversold = 73; -input double RS_TSLA_RSI_Target_Buy = 87; -input double RS_TSLA_RSI_Target_Sell = 33; -input int RS_TSLA_BarsToWait = 1; -input double RS_TSLA_LotSize = 50; -input int RS_TSLA_MagicNumber = 125421321; -input int RS_TSLA_Slippage = 3; - -input group "=== RSI Scalping XAUUSD ===" -input string RS_XAUUSD_Symbol = "XAU"; -input ENUM_TIMEFRAMES RS_XAUUSD_TimeFrame = PERIOD_H1; -input int RS_XAUUSD_RSI_Period = 14; -input ENUM_APPLIED_PRICE RS_XAUUSD_RSI_Applied_Price = PRICE_CLOSE; -input double RS_XAUUSD_RSI_Overbought = 71; -input double RS_XAUUSD_RSI_Oversold = 57; -input double RS_XAUUSD_RSI_Target_Buy = 80; -input double RS_XAUUSD_RSI_Target_Sell = 57; -input int RS_XAUUSD_BarsToWait = 4; -input double RS_XAUUSD_LotSize = 0.1; -input int RS_XAUUSD_MagicNumber = 129102315; -input int RS_XAUUSD_Slippage = 3; - -input group "=== RSI Scalping Reversal Escape (XAUUSD only) ===" -input bool RS_UseReversalEscape = true; -input int RS_ReversalATRPeriod = 14; -input double RS_ReversalAdverseAtrMult = 5.25; -input int RS_ReversalSignsRequired = 2; -input double RS_ReversalRsiVelocity = 16.0; -input double RS_ReversalBodyAtrMult = 5.1; - -input group "=== RSI Scalping APPL — Trailing (cluster-fuck BTC-style defaults) ===" -input bool RS_APPL_UseTrailingStop = true; -input double RS_APPL_TrailDistancePoints = 120.0; -input double RS_APPL_TrailActivationPoints = 0.0; - -input group "=== RSI Scalping BTCUSD — Trailing ===" -input bool RS_BTCUSD_UseTrailingStop = true; -input double RS_BTCUSD_TrailDistancePoints = 120.0; -input double RS_BTCUSD_TrailActivationPoints = 0.0; - -input group "=== RSI Scalping NVDA — Trailing ===" -input bool RS_NVDA_UseTrailingStop = true; -input double RS_NVDA_TrailDistancePoints = 375.0; -input double RS_NVDA_TrailActivationPoints = 75.0; - -input group "=== RSI Scalping TSLA — Trailing ===" -input bool RS_TSLA_UseTrailingStop = true; -input double RS_TSLA_TrailDistancePoints = 900.0; -input double RS_TSLA_TrailActivationPoints = 950.0; - -input group "=== RSI Scalping XAUUSD — Trailing ===" -input bool RS_XAUUSD_UseTrailingStop = true; -input double RS_XAUUSD_TrailDistancePoints = 1000.0; -input double RS_XAUUSD_TrailActivationPoints = 550.0; - -//+------------------------------------------------------------------+ -//| Strategy 11-12: RSI Reversal Asian Strategies | -//| Each RSI Reversal Asian strategy trades on its own symbol: | -//| - EURUSD: Euro/USD | -//| - AUDUSD: Australian Dollar/USD | -//+------------------------------------------------------------------+ -input group "=== RSI Reversal Asian EURUSD ===" -input string RRA_EURUSD_Symbol = "EURUSD"; -input int RRA_EURUSD_RSIPeriod = 28; -input double RRA_EURUSD_OverboughtLevel = 60; -input double RRA_EURUSD_OversoldLevel = 8; -input int RRA_EURUSD_TakeProfitPips = 175; -input int RRA_EURUSD_StopLossPips = 5; -input double RRA_EURUSD_MaxLotSize = 0.1; -input int RRA_EURUSD_MaxSpread = 1000; -input int RRA_EURUSD_MaxDuration = 270; -input bool RRA_EURUSD_UseStopLoss = false; -input bool RRA_EURUSD_UseTakeProfit = false; -input bool RRA_EURUSD_UseRSIExit = true; -input double RRA_EURUSD_RSIExitLevel = 55; -input bool RRA_EURUSD_CloseOutsideSession = false; -input ENUM_TIMEFRAMES RRA_EURUSD_TimeFrame = PERIOD_M15; -input int RRA_EURUSD_MagicNumber = 30001; -input int RRA_EURUSD_Slippage = 3; - -input group "=== RSI Reversal Asian AUDUSD ===" -input string RRA_AUDUSD_Symbol = "AUDUSD"; -input int RRA_AUDUSD_RSIPeriod = 28; -input double RRA_AUDUSD_OverboughtLevel = 68; -input double RRA_AUDUSD_OversoldLevel = 30; -input int RRA_AUDUSD_TakeProfitPips = 175; -input int RRA_AUDUSD_StopLossPips = 5; -input double RRA_AUDUSD_MaxLotSize = 0.2; -input int RRA_AUDUSD_MaxSpread = 1000; -input int RRA_AUDUSD_MaxDuration = 340; -input bool RRA_AUDUSD_UseStopLoss = false; -input bool RRA_AUDUSD_UseTakeProfit = false; -input bool RRA_AUDUSD_UseRSIExit = true; -input double RRA_AUDUSD_RSIExitLevel = 48; -input bool RRA_AUDUSD_CloseOutsideSession = true; -input ENUM_TIMEFRAMES RRA_AUDUSD_TimeFrame = PERIOD_M15; -input int RRA_AUDUSD_MagicNumber = 30002; -input int RRA_AUDUSD_Slippage = 3; - -input group "=== SuperEMA (EMA + CCI + MACD) ===" -input string SE_Symbol = "XAU"; -input ENUM_TIMEFRAMES SE_Timeframe = PERIOD_M15; -input double SE_LotSize = 0.01; -input int SE_SlippagePoints = 55; -input int SE_MagicNumber = 940001; -input int SE_EmaFast = 40; -input int SE_EmaMid = 180; -input int SE_EmaSlow = 125; -input int SE_EmaTrendBars = 3; -input int SE_CciPeriod = 17; -input double SE_CciOverbought = 80.0; -input double SE_CciOversold = -140.0; -input int SE_PullbackCciLookback = 20; -input int SE_MacdFast = 14; -input int SE_MacdSlow = 38; -input int SE_MacdSignal = 9; -input ENUM_SE_ENTRY_STYLE SE_EntryStyle = SE_ENTRY_LAMBERT; -input bool SE_OneTradeOnly = true; -input bool SE_UseStructuralSL = false; -input double SE_SlBufferPoints = 110; -input bool SE_ExitOnTrendFlip = false; -input bool SE_ExitOnMacdFlip = false; -input bool SE_ExitOnCciZeroCross = true; -input int SE_MaxHoldingBars = 168; -input bool SE_ExitBelowMidEma = false; -input bool SE_DebugLogs = false; - -input group "=== RSI Consolidation (ranging / mean-reversion) ===" -input string RCO_Symbol = "XAU"; -input ENUM_TIMEFRAMES RCO_SignalTF = PERIOD_M15; -input bool RCO_EntryOnNewBarOnly = true; -input int RCO_ADX_Period = 23; -input double RCO_ADX_Max = 29.0; -input bool RCO_UseATRRatioFilter = true; -input int RCO_ATR_Period = 8; -input int RCO_ATR_SMA_Period = 35; -input double RCO_ATR_Ratio_Max = 1.36; -input bool RCO_UseFlatEMAFilter = true; -input int RCO_EMA_Fast = 13; -input int RCO_EMA_Slow = 17; -input double RCO_EMA_Separation_MaxPct = 0.26; -input int RCO_RSI_Period = 8; -input ENUM_APPLIED_PRICE RCO_RSI_Price = PRICE_OPEN; -input double RCO_RSI_Oversold = 22.0; -input double RCO_RSI_Overbought = 63.0; -input bool RCO_UseRSI_MeanExit = true; -input double RCO_RSI_Exit_Long = 48.0; -input double RCO_RSI_Exit_Short = 52.0; -input double RCO_SL_ATR_Mult = 2.15; -input double RCO_TP_ATR_Mult = 2.40; -input int RCO_MaxBarsInTrade = 54; -input double RCO_Lots = 0.10; -input ulong RCO_MagicNumber = 20250420; -input int RCO_Slippage = 10; -input int RCO_MaxSpreadPoints = 28; - -input group "=== SimpleTrendline BTCUSD ===" -input string ST_BTC_Symbol = "BTCUSD"; -input ENUM_TIMEFRAMES ST_BTC_SignalTF = PERIOD_H1; -input ENUM_TIMEFRAMES ST_BTC_HigherTF = PERIOD_H4; -input int ST_BTC_MAPeriod = 150; -input ENUM_MA_METHOD ST_BTC_MAMethod = MODE_SMMA; -input ENUM_APPLIED_PRICE ST_BTC_AppliedPrice = PRICE_OPEN; -input int ST_BTC_HTFBarsToScan = 1200; -input double ST_BTC_LineTouchTolerance = 170.0; -input double ST_BTC_BreakBuffer = 90.0; -input ulong ST_BTC_MagicNumber = 26042501; -input bool ST_BTC_DrawTrendline = true; - -input group "=== SimpleTrendline XAUUSD ===" -input string ST_XAU_Symbol = "XAU"; -input ENUM_TIMEFRAMES ST_XAU_SignalTF = PERIOD_H1; -input ENUM_TIMEFRAMES ST_XAU_HigherTF = PERIOD_M10; -input int ST_XAU_MAPeriod = 65; -input ENUM_MA_METHOD ST_XAU_MAMethod = MODE_EMA; -input ENUM_APPLIED_PRICE ST_XAU_AppliedPrice = PRICE_OPEN; -input int ST_XAU_HTFBarsToScan = 500; -input double ST_XAU_LineTouchTolerance = 220.0; -input double ST_XAU_BreakBuffer = 110.0; -input ulong ST_XAU_MagicNumber = 26042503; -input bool ST_XAU_DrawTrendline = true; - -input group "=== RSI Secret Sauce XAUUSD ===" -input string RSS_Symbol = "XAU"; -input int RSS_MagicNumber = 789012; -input int RSS_Slippage = 10; -input ENUM_TIMEFRAMES RSS_Timeframe = PERIOD_M30; -input int RSS_RSIPeriod = 16; -input double RSS_RSIOverbought = 72.5; -input double RSS_RSIOversold = 32.5; -input int RSS_RSILookback = 60; -input int RSS_PeakBars = 2; -input double RSS_StopLossATR = 2.75; -input double RSS_TakeProfitATR = 5.0; -input int RSS_ATRPeriod = 14; -input bool RSS_UseSwingStopLoss = false; -input int RSS_SwingLookback = 30; -input int RSS_MaxPositions = 1; -input int RSS_MinBarsBetweenTrades = 7; - -//+------------------------------------------------------------------+ -//| Balance scaling: LOT_* = nominal size at ORCH_ReferenceBalance | -//+------------------------------------------------------------------+ -double United_BalanceScaleFactor() -{ - if(!ORCH_ScaleLotsByBalance || ORCH_ReferenceBalance <= 0.0) - return 1.0; - const double money = ORCH_UseEquityInsteadOfBalance - ? AccountInfoDouble(ACCOUNT_EQUITY) - : AccountInfoDouble(ACCOUNT_BALANCE); - double raw = money / ORCH_ReferenceBalance; - if(raw < ORCH_MinBalanceScale) - raw = ORCH_MinBalanceScale; - if(raw > ORCH_MaxBalanceScale) - raw = ORCH_MaxBalanceScale; - return raw; -} - -double United_ScaledLot(const double baseLot) -{ - const double lot = baseLot * United_BalanceScaleFactor(); - return (lot > 0.0 ? lot : 0.0); -} - -void United_RefreshScaledLots() -{ - g_DB_LotSize = United_ScaledLot(LOT_DB_DarvasBox); - g_ES_LotSize = United_ScaledLot(LOT_ES_EMASlopeDistance); - g_RC_LotSize = United_ScaledLot(LOT_RC_RSICrossOver); - g_RM_LotSize = United_ScaledLot(LOT_RM_RSIMidPointHijack); - g_Pos_RS_APPL = United_ScaledLot(LOT_RS_APPL); - g_Pos_RS_BTCUSD = United_ScaledLot(LOT_RS_BTCUSD); - g_Pos_RS_NVDA = United_ScaledLot(LOT_RS_NVDA); - g_Pos_RS_TSLA = United_ScaledLot(LOT_RS_TSLA); - g_Pos_RS_XAUUSD = United_ScaledLot(LOT_RS_XAUUSD); - g_Pos_RRA_EURUSD = United_ScaledLot(LOT_RRA_EURUSD); - g_Pos_RRA_AUDUSD = United_ScaledLot(LOT_RRA_AUDUSD); - g_Pos_SE = United_ScaledLot(LOT_SE_SuperEMA); - g_Pos_RCO = United_ScaledLot(LOT_RCO_RSIConsolidation); - g_Pos_ST_BTCUSD = United_ScaledLot(LOT_ST_BTCUSD); - g_Pos_ST_XAUUSD = United_ScaledLot(LOT_ST_XAUUSD); - g_RSS_LotSize = United_ScaledLot(LOT_RSS_SecretSauce); -} - -//+------------------------------------------------------------------+ -//| Global Variables - DarvasBox | -//+------------------------------------------------------------------+ -struct DarvasBoxData { - string symbol; - bool isInitialized; - double boxHigh; - double boxLow; - bool boxFormed; - datetime lastBoxTime; - string boxName; - double minStopLevel; - double point; - CTrade trade; - int maHandle; - int volumeHandle; - datetime lastBarTime; -}; - -//+------------------------------------------------------------------+ -//| Global Variables - EMA Slope Distance | -//+------------------------------------------------------------------+ -struct EMASlopeData { - string symbol; - bool isInitialized; - int ema_handle; - double ema_array[]; - datetime letzte_überwachung_zeit; - bool überwachung_aktiv; - bool preis_trigger_aktiv; - bool steigung_trigger_aktiv; - int ticket; - CTrade trade; - int trades_in_current_crossover; - bool crossover_detected; - datetime trade_open_time; - datetime last_bar_time; - datetime es_last_sl_adjust_success_time; -}; - -//+------------------------------------------------------------------+ -//| Global Variables - RSI CrossOver Reversal | -//+------------------------------------------------------------------+ -struct RSICrossOverData { - string symbol; - bool isInitialized; - int rsiHandle; - int emaHandle; - double previousRSIDef; - CTrade trade; - datetime lastTradeTime; - datetime bartime; - bool WeekDays[7]; - datetime lastBarTime; -}; - -//+------------------------------------------------------------------+ -//| Global Variables - RSI MidPoint Hijack | -//+------------------------------------------------------------------+ -struct RSIMidPointData { - string symbol; - bool isInitialized; - int rsiHandle; - int rsiReverseHandle; - int emaHandle; - bool rsiOverbought; - bool rsiOversold; - bool rsiReverseOverbought; - bool rsiReverseOversold; - CTrade trade; - CPositionInfo positionInfo; - bool emaCrossBuySignal; - bool emaCrossSellSignal; - int emaCrossSignalBar; - datetime lastBarTime; - datetime rsiReverseLastCloseTime; - bool rsiReverseInCooldown; - double lastBarRSI; - double lastBarRSIReverse; - double lastBarEMA; - double lastBarClose; - double lastBarEMAPrev; - double lastBarClosePrev; -}; - -//+------------------------------------------------------------------+ -//| Global Strategy Instances | -//+------------------------------------------------------------------+ -DarvasBoxData dbData; -EMASlopeData esData; -RSICrossOverData rcData; -RSIMidPointData rmData; -RSIScalpingData rsAPPLData; -RSIScalpingData rsBTCUSDData; -RSIScalpingData rsNVDAData; -RSIScalpingData rsTSLAData; -RSIScalpingData rsXAUUSDData; -SuperEMAData seData; -RSIConsolidationData rcoData; -SimpleTrendlineData stBTCData; -SimpleTrendlineData stXAUData; -RSISecretSauceOrcData rssData; - -//+------------------------------------------------------------------+ -//| Global Variables - RSI Reversal Asian | -//+------------------------------------------------------------------+ -RSIReversalAsianData rraEURUSDData; -RSIReversalAsianData rraAUDUSDData; - -//+------------------------------------------------------------------+ -//| Expert initialization function | -//+------------------------------------------------------------------+ -int OnInit() -{ - int initResult = INIT_SUCCEEDED; - - United_RefreshScaledLots(); - - // Initialize strategies - log warnings but don't fail entire EA if symbol unavailable - if(EnableDarvasBox) - if(!InitDarvasBox(DB_Symbol)) - Print("Warning: DarvasBox strategy failed to initialize for symbol '", DB_Symbol, "'"); - - if(EnableEMASlopeDistance) - if(!InitEMASlopeDistance(ES_Symbol)) - Print("Warning: EMASlopeDistance strategy failed to initialize for symbol '", ES_Symbol, "'"); - - if(EnableRSICrossOverReversal) - if(!InitRSICrossOverReversal(RC_Symbol)) - Print("Warning: RSICrossOverReversal strategy failed to initialize for symbol '", RC_Symbol, "'"); - - if(EnableRSIMidPointHijack) - if(!InitRSIMidPointHijack(RM_Symbol)) - Print("Warning: RSIMidPointHijack strategy failed to initialize for symbol '", RM_Symbol, "'"); - - // Initialize RSI Scalping strategies - don't fail entire EA if symbol unavailable - if(EnableRSIScalpingAPPL) - InitRSIScalping(rsAPPLData, RS_APPL_Symbol, RS_APPL_TimeFrame, RS_APPL_RSI_Period, RS_APPL_RSI_Applied_Price, RS_APPL_MagicNumber, RS_APPL_Slippage); - - if(EnableRSIScalpingBTCUSD) - InitRSIScalping(rsBTCUSDData, RS_BTCUSD_Symbol, RS_BTCUSD_TimeFrame, RS_BTCUSD_RSI_Period, RS_BTCUSD_RSI_Applied_Price, RS_BTCUSD_MagicNumber, RS_BTCUSD_Slippage); - - if(EnableRSIScalpingNVDA) - InitRSIScalping(rsNVDAData, RS_NVDA_Symbol, RS_NVDA_TimeFrame, RS_NVDA_RSI_Period, RS_NVDA_RSI_Applied_Price, RS_NVDA_MagicNumber, RS_NVDA_Slippage); - - if(EnableRSIScalpingTSLA) - InitRSIScalping(rsTSLAData, RS_TSLA_Symbol, RS_TSLA_TimeFrame, RS_TSLA_RSI_Period, RS_TSLA_RSI_Applied_Price, RS_TSLA_MagicNumber, RS_TSLA_Slippage); - - if(EnableRSIScalpingXAUUSD) - InitRSIScalping(rsXAUUSDData, RS_XAUUSD_Symbol, RS_XAUUSD_TimeFrame, RS_XAUUSD_RSI_Period, RS_XAUUSD_RSI_Applied_Price, RS_XAUUSD_MagicNumber, RS_XAUUSD_Slippage); - - if(EnableRSISecretSauce) - if(!InitRSISecretSauce(rssData, RSS_Symbol)) - Print("Warning: RSI Secret Sauce failed to initialize for symbol '", RSS_Symbol, "'"); - - if(EnableSuperEMA) - if(!InitSuperEMA(seData, SE_Symbol, SE_Timeframe, SE_SlippagePoints, SE_MagicNumber, - SE_EmaFast, SE_EmaMid, SE_EmaSlow, SE_EmaTrendBars, - SE_CciPeriod, SE_CciOverbought, SE_CciOversold, SE_PullbackCciLookback, - SE_MacdFast, SE_MacdSlow, SE_MacdSignal, - SE_EntryStyle, SE_OneTradeOnly, SE_UseStructuralSL, SE_SlBufferPoints, - SE_ExitOnTrendFlip, SE_ExitOnMacdFlip, SE_ExitOnCciZeroCross, - SE_MaxHoldingBars, SE_ExitBelowMidEma, SE_DebugLogs)) - Print("Warning: SuperEMA failed to initialize for symbol '", SE_Symbol, "'"); - - if(EnableRSIConsolidation) - if(!InitRSIConsolidation(rcoData, RCO_Symbol, RCO_SignalTF, RCO_EntryOnNewBarOnly, - RCO_ADX_Period, RCO_ADX_Max, RCO_UseATRRatioFilter, RCO_ATR_Period, RCO_ATR_SMA_Period, RCO_ATR_Ratio_Max, - RCO_UseFlatEMAFilter, RCO_EMA_Fast, RCO_EMA_Slow, RCO_EMA_Separation_MaxPct, - RCO_RSI_Period, RCO_RSI_Price, RCO_RSI_Oversold, RCO_RSI_Overbought, - RCO_UseRSI_MeanExit, RCO_RSI_Exit_Long, RCO_RSI_Exit_Short, RCO_SL_ATR_Mult, RCO_TP_ATR_Mult, - RCO_MaxBarsInTrade, RCO_MagicNumber, RCO_Slippage, RCO_MaxSpreadPoints)) - Print("Warning: RSIConsolidation failed to initialize for symbol '", RCO_Symbol, "'"); - - // Initialize RSI Reversal Asian strategies - if(EnableRSIReversalAsianEURUSD) - if(!InitRSIReversalAsian(rraEURUSDData, RRA_EURUSD_Symbol, RRA_EURUSD_RSIPeriod, RRA_EURUSD_OverboughtLevel, RRA_EURUSD_OversoldLevel, - RRA_EURUSD_TakeProfitPips, RRA_EURUSD_StopLossPips, LOT_RRA_EURUSD, - RRA_EURUSD_MaxSpread, RRA_EURUSD_MaxDuration, RRA_EURUSD_UseStopLoss, - RRA_EURUSD_UseTakeProfit, RRA_EURUSD_UseRSIExit, RRA_EURUSD_RSIExitLevel, - RRA_EURUSD_CloseOutsideSession, RRA_EURUSD_TimeFrame, RRA_EURUSD_MagicNumber, RRA_EURUSD_Slippage)) - Print("Warning: RSIReversalAsianEURUSD strategy failed to initialize for symbol '", RRA_EURUSD_Symbol, "'"); - - if(EnableRSIReversalAsianAUDUSD) - if(!InitRSIReversalAsian(rraAUDUSDData, RRA_AUDUSD_Symbol, RRA_AUDUSD_RSIPeriod, RRA_AUDUSD_OverboughtLevel, RRA_AUDUSD_OversoldLevel, - RRA_AUDUSD_TakeProfitPips, RRA_AUDUSD_StopLossPips, LOT_RRA_AUDUSD, - RRA_AUDUSD_MaxSpread, RRA_AUDUSD_MaxDuration, RRA_AUDUSD_UseStopLoss, - RRA_AUDUSD_UseTakeProfit, RRA_AUDUSD_UseRSIExit, RRA_AUDUSD_RSIExitLevel, - RRA_AUDUSD_CloseOutsideSession, RRA_AUDUSD_TimeFrame, RRA_AUDUSD_MagicNumber, RRA_AUDUSD_Slippage)) - Print("Warning: RSIReversalAsianAUDUSD strategy failed to initialize for symbol '", RRA_AUDUSD_Symbol, "'"); - - if(EnableSimpleTrendlineBTCUSD) - if(!InitSimpleTrendline(stBTCData, ST_BTC_Symbol, ST_BTC_SignalTF, ST_BTC_HigherTF, ST_BTC_MAPeriod, - ST_BTC_MAMethod, ST_BTC_AppliedPrice, ST_BTC_HTFBarsToScan, - ST_BTC_LineTouchTolerance, ST_BTC_BreakBuffer, ST_BTC_MagicNumber, ST_BTC_DrawTrendline)) - Print("Warning: SimpleTrendlineBTCUSD failed to initialize for symbol '", ST_BTC_Symbol, "'"); - - if(EnableSimpleTrendlineXAUUSD) - if(!InitSimpleTrendline(stXAUData, ST_XAU_Symbol, ST_XAU_SignalTF, ST_XAU_HigherTF, ST_XAU_MAPeriod, - ST_XAU_MAMethod, ST_XAU_AppliedPrice, ST_XAU_HTFBarsToScan, - ST_XAU_LineTouchTolerance, ST_XAU_BreakBuffer, ST_XAU_MagicNumber, ST_XAU_DrawTrendline)) - Print("Warning: SimpleTrendlineXAUUSD failed to initialize for symbol '", ST_XAU_Symbol, "'"); - - Print("United EA initialized. Active strategies: ", - (EnableDarvasBox ? "DarvasBox " : ""), - (EnableEMASlopeDistance ? "EMASlope " : ""), - (EnableRSICrossOverReversal ? "RSICrossOver " : ""), - (EnableRSIMidPointHijack ? "RSIMidPoint " : ""), - (EnableRSIScalpingAPPL ? "RSIScalpingAPPL " : ""), - (EnableRSIScalpingBTCUSD ? "RSIScalpingBTCUSD " : ""), - (EnableRSIScalpingNVDA ? "RSIScalpingNVDA " : ""), - (EnableRSIScalpingTSLA ? "RSIScalpingTSLA " : ""), - (EnableRSIScalpingXAUUSD ? "RSIScalpingXAUUSD " : ""), - (EnableRSISecretSauce ? "RSISecretSauce " : ""), - (EnableSuperEMA ? "SuperEMA " : ""), - (EnableRSIConsolidation ? "RSIConsolidation " : ""), - (EnableRSIReversalAsianEURUSD ? "RSIReversalAsianEURUSD " : ""), - (EnableRSIReversalAsianAUDUSD ? "RSIReversalAsianAUDUSD " : ""), - (EnableSimpleTrendlineBTCUSD ? "SimpleTrendlineBTCUSD " : ""), - (EnableSimpleTrendlineXAUUSD ? "SimpleTrendlineXAUUSD " : "")); - - return initResult; -} - -//+------------------------------------------------------------------+ -//| Expert deinitialization function | -//+------------------------------------------------------------------+ -void OnDeinit(const int reason) -{ - if(EnableDarvasBox) - DeinitDarvasBox(); - - if(EnableEMASlopeDistance) - DeinitEMASlopeDistance(); - - if(EnableRSICrossOverReversal) - DeinitRSICrossOverReversal(); - - if(EnableRSIMidPointHijack) - DeinitRSIMidPointHijack(); - - if(EnableRSIScalpingAPPL) - DeinitRSIScalping(rsAPPLData); - - if(EnableRSIScalpingBTCUSD) - DeinitRSIScalping(rsBTCUSDData); - - if(EnableRSIScalpingNVDA) - DeinitRSIScalping(rsNVDAData); - - if(EnableRSIScalpingTSLA) - DeinitRSIScalping(rsTSLAData); - - if(EnableRSIScalpingXAUUSD) - DeinitRSIScalping(rsXAUUSDData); - - if(EnableRSISecretSauce) - DeinitRSISecretSauce(rssData); - - if(EnableSuperEMA) - DeinitSuperEMA(seData); - - if(EnableRSIConsolidation) - DeinitRSIConsolidation(rcoData); - - if(EnableRSIReversalAsianEURUSD) - DeinitRSIReversalAsian(rraEURUSDData); - - if(EnableRSIReversalAsianAUDUSD) - DeinitRSIReversalAsian(rraAUDUSDData); - - if(EnableSimpleTrendlineBTCUSD) - DeinitSimpleTrendline(stBTCData); - if(EnableSimpleTrendlineXAUUSD) - DeinitSimpleTrendline(stXAUData); - - Print("United EA deinitialized. Reason: ", reason); -} - -//+------------------------------------------------------------------+ -//| Expert tick function | -//+------------------------------------------------------------------+ -void OnTick() -{ - United_RefreshScaledLots(); - - if(EnableDarvasBox) - ProcessDarvasBox(DB_Symbol); - - if(EnableEMASlopeDistance) - ProcessEMASlopeDistance(ES_Symbol); - - if(EnableRSICrossOverReversal) - ProcessRSICrossOverReversal(RC_Symbol); - - if(EnableRSIMidPointHijack) - ProcessRSIMidPointHijack(RM_Symbol); - - if(EnableRSIScalpingAPPL) - ProcessRSIScalping(rsAPPLData, RS_APPL_Symbol, RS_APPL_TimeFrame, RS_APPL_RSI_Period, RS_APPL_RSI_Applied_Price, - RS_APPL_RSI_Overbought, RS_APPL_RSI_Oversold, RS_APPL_RSI_Target_Buy, RS_APPL_RSI_Target_Sell, - RS_APPL_BarsToWait, g_Pos_RS_APPL, RS_APPL_MagicNumber, - false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, - RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult, - RS_APPL_UseTrailingStop, RS_APPL_TrailDistancePoints, RS_APPL_TrailActivationPoints); - - if(EnableRSIScalpingBTCUSD) - ProcessRSIScalping(rsBTCUSDData, RS_BTCUSD_Symbol, RS_BTCUSD_TimeFrame, RS_BTCUSD_RSI_Period, RS_BTCUSD_RSI_Applied_Price, - RS_BTCUSD_RSI_Overbought, RS_BTCUSD_RSI_Oversold, RS_BTCUSD_RSI_Target_Buy, RS_BTCUSD_RSI_Target_Sell, - RS_BTCUSD_BarsToWait, g_Pos_RS_BTCUSD, RS_BTCUSD_MagicNumber, - false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, - RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult, - RS_BTCUSD_UseTrailingStop, RS_BTCUSD_TrailDistancePoints, RS_BTCUSD_TrailActivationPoints); - - if(EnableRSIScalpingNVDA) - ProcessRSIScalping(rsNVDAData, RS_NVDA_Symbol, RS_NVDA_TimeFrame, RS_NVDA_RSI_Period, RS_NVDA_RSI_Applied_Price, - RS_NVDA_RSI_Overbought, RS_NVDA_RSI_Oversold, RS_NVDA_RSI_Target_Buy, RS_NVDA_RSI_Target_Sell, - RS_NVDA_BarsToWait, g_Pos_RS_NVDA, RS_NVDA_MagicNumber, - false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, - RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult, - RS_NVDA_UseTrailingStop, RS_NVDA_TrailDistancePoints, RS_NVDA_TrailActivationPoints); - - if(EnableRSIScalpingTSLA) - ProcessRSIScalping(rsTSLAData, RS_TSLA_Symbol, RS_TSLA_TimeFrame, RS_TSLA_RSI_Period, RS_TSLA_RSI_Applied_Price, - RS_TSLA_RSI_Overbought, RS_TSLA_RSI_Oversold, RS_TSLA_RSI_Target_Buy, RS_TSLA_RSI_Target_Sell, - RS_TSLA_BarsToWait, g_Pos_RS_TSLA, RS_TSLA_MagicNumber, - false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, - RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult, - RS_TSLA_UseTrailingStop, RS_TSLA_TrailDistancePoints, RS_TSLA_TrailActivationPoints); - - if(EnableRSIScalpingXAUUSD) - ProcessRSIScalping(rsXAUUSDData, RS_XAUUSD_Symbol, RS_XAUUSD_TimeFrame, RS_XAUUSD_RSI_Period, RS_XAUUSD_RSI_Applied_Price, - RS_XAUUSD_RSI_Overbought, RS_XAUUSD_RSI_Oversold, RS_XAUUSD_RSI_Target_Buy, RS_XAUUSD_RSI_Target_Sell, - RS_XAUUSD_BarsToWait, g_Pos_RS_XAUUSD, RS_XAUUSD_MagicNumber, - RS_UseReversalEscape, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, - RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult, - RS_XAUUSD_UseTrailingStop, RS_XAUUSD_TrailDistancePoints, RS_XAUUSD_TrailActivationPoints); - - if(EnableRSISecretSauce) - ProcessRSISecretSauce(rssData, g_RSS_LotSize); - - if(EnableRSIReversalAsianEURUSD) - ProcessRSIReversalAsian(rraEURUSDData, g_Pos_RRA_EURUSD); - - if(EnableRSIReversalAsianAUDUSD) - ProcessRSIReversalAsian(rraAUDUSDData, g_Pos_RRA_AUDUSD); - - if(EnableSuperEMA) - ProcessSuperEMA(seData, g_Pos_SE); - - if(EnableRSIConsolidation) - ProcessRSIConsolidation(rcoData, g_Pos_RCO); - - if(EnableSimpleTrendlineBTCUSD) - ProcessSimpleTrendline(stBTCData, g_Pos_ST_BTCUSD); - if(EnableSimpleTrendlineXAUUSD) - ProcessSimpleTrendline(stXAUData, g_Pos_ST_XAUUSD); -} - -//+------------------------------------------------------------------+ diff --git a/frontline/cluster-gold/report.png b/frontline/cluster-gold/report.png deleted file mode 100644 index a174d73e8892fb14262661005155b71297b1e0fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29959 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 z

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 QpoiMmQM -#include -#include -#include -#include "MagicNumberHelpers.mqh" - -//+------------------------------------------------------------------+ -//| Strategy Enable/Disable Switches | -//+------------------------------------------------------------------+ -input group "=== Strategy Enable/Disable ===" -input bool EnableDarvasBox = true; -input bool EnableEMASlopeDistance = true; -input bool EnableRSICrossOverReversal = true; -input bool EnableRSIMidPointHijack = true; -input bool EnableRSIScalpingAPPL = true; -input bool EnableRSIScalpingBTCUSD = true; -input bool EnableRSIScalpingMSFT = true; -input bool EnableRSIScalpingNVDA = true; -input bool EnableRSIScalpingTSLA = true; -input bool EnableRSIScalpingXAUUSD = true; - -//+------------------------------------------------------------------+ -//| Strategy 1: DarvasBoxXAUUSD | -//+------------------------------------------------------------------+ -input group "=== DarvasBox Strategy ===" -input string DB_Symbol = "XAUUSD"; -input int DB_BoxPeriod = 165; -input double DB_BoxDeviation = 30000; // Increased to allow larger ranges (was 25140) -input int DB_VolumeThreshold = 0; // Set to 0 to disable volume threshold check. Volume data from indicator used instead. -input double DB_StopLoss = 1665; -input double DB_TakeProfit = 3685; -input bool DB_EnableLogging = false; -input color DB_BoxColor = clrBlue; -input int DB_BoxWidth = 1; -input ENUM_TIMEFRAMES DB_TrendTimeframe = PERIOD_H2; -input int DB_MA_Period = 125; -input ENUM_MA_METHOD DB_MA_Method = MODE_EMA; -input ENUM_APPLIED_PRICE DB_MA_Price = PRICE_WEIGHTED; -input double DB_TrendThreshold = 4.94; -input int DB_VolumeMA_Period = 110; -input double DB_VolumeThresholdMultiplier = 1.5; -input int DB_MagicNumber = 135790; - -//+------------------------------------------------------------------+ -//| Strategy 2: EMASlopeDistanceCocktailXAUUSD | -//| PEPPERSTONE US: Gold symbol is typically "XAUUSD" or "GOLD" | -//+------------------------------------------------------------------+ -input group "=== EMA Slope Distance Strategy ===" -input string ES_Symbol = "XAUUSD"; -input int ES_EMA_Periode = 46; -input double ES_PreisSchwelle = 600.0; -input double ES_SteigungSchwelle = 80.0; -input int ES_ÜberwachungTimeout = 800; -input double ES_TrailingStop = 370.0; -input bool ES_UseTrailingStop = true; -input double ES_TrailingActivationPips = 0.0; -input bool ES_UseStaleStopLossExit = false; -input int ES_StaleStopLossSeconds = 33800; -input double ES_LotGröße = 0.03; -input int ES_MagicNumber = 12350; -input bool ES_UseSpreadAdjustment = true; -input ENUM_TIMEFRAMES ES_Timeframe = PERIOD_H1; -input bool ES_UseBarData = true; -input int ES_MaxTradesPerCrossover = 9; -input int ES_ProfitCheckBars = 18; -input bool ES_CloseUnprofitableTrades = true; -input bool ES_UseWeeklyADXFilter = true; -input int ES_WeeklyADXPeriod = 15; -input double ES_WeeklyADXMin = 40.0; -input int ES_WeeklyADXBarShift = 2; -input bool ES_WeeklyADXUseDirection = true; - -//+------------------------------------------------------------------+ -//| Strategy 3: RSICrossOverReversalXAUUSD | -//| PEPPERSTONE US: Gold symbol is typically "XAUUSD" or "GOLD" | -//+------------------------------------------------------------------+ -input group "=== RSI CrossOver Reversal Strategy ===" -input string RC_Symbol = "XAUUSD"; -input int RC_MagicNumber = 7; -input int RC_rsiPeriod = 19; -input int RC_overboughtLevel = 93; -input int RC_oversoldLevel = 22; -input double RC_entryRSIBuySpread = 0; -input double RC_entryRSISellSpread = 0; -input double RC_lotSize = 0.01; -input int RC_slippage = 3; -input int RC_cooldownSeconds = 209; -input ENUM_TIMEFRAMES RC_TimeFrame1 = PERIOD_M1; -input ENUM_TIMEFRAMES RC_TimeFrame2 = PERIOD_M1; -input ENUM_TIMEFRAMES RC_BarTimeFrame = PERIOD_M12; -input int RC_emaPeriod = 140; -input double RC_emaSlopeThreshold = 105; -input double RC_exitBuyRSI = 86; -input double RC_exitSellRSI = 10; -input double RC_TrailingStop = 295; -input double RC_emaDistanceThreshold = 165; -input int RC_tradingHourOneBegin = 24; -input int RC_tradingHourOneEnd = 22; -input int RC_tradingHourTwoBegin = 6; -input int RC_tradingHourTwoEnd = 19; -input bool RC_Sunday = false; -input bool RC_Monday = false; -input bool RC_Tuesday = true; -input bool RC_Wednesday = true; -input bool RC_Thursday = true; -input bool RC_Friday = false; -input bool RC_Saturday = false; - -//+------------------------------------------------------------------+ -//| Strategy 4: RSIMidPointHijackXAUUSD | -//| PEPPERSTONE US: Gold symbol is typically "XAUUSD" or "GOLD" | -//+------------------------------------------------------------------+ -input group "=== RSI MidPoint Hijack Strategy ===" -input string RM_Symbol = "XAUUSD"; -input ENUM_TIMEFRAMES RM_InpTimeframe = PERIOD_H1; -input double RM_InpLotSize = 0.02; -input int RM_InpMagicNumberRSIFollow = 1001; -input int RM_InpMagicNumberRSIReverse = 1002; -input int RM_InpMagicNumberEMACross = 1003; -input bool RM_InpEnableRSIFollow = true; -input bool RM_InpEnableRSIReverse = true; -input bool RM_InpEnableEMACross = true; -input bool RM_InpEnableStrategyLock = false; -input double RM_InpLockProfitThreshold = 0.0; -input bool RM_InpCloseOppositeTrades = false; -input int RM_InpRSIPeriod = 32; -input int RM_InpRSIOverbought = 78; -input int RM_InpRSIOversold = 46; -input int RM_InpRSIExitLevel = 44; -input int RM_InpRSIFollowStartHour = 23; -input int RM_InpRSIFollowEndHour = 8; -input bool RM_InpRSIFollowCloseOutsideHours = false; -input int RM_InpRSIReversePeriod = 59; -input int RM_InpRSIReverseOverbought = 51; -input int RM_InpRSIReverseOversold = 49; -input int RM_InpRSIReverseCrossLevel = 53; -input int RM_InpRSIReverseExitLevel = 48; -input int RM_InpRSIReverseStartHour = 7; -input int RM_InpRSIReverseEndHour = 13; -input bool RM_InpRSIReverseCloseOutsideHours = false; -input int RM_InpRSIReverseCooldownBars = 15; -input bool RM_InpRSIReverseCooldownOnLoss = true; -input int RM_InpEMAPeriod = 120; -input int RM_InpEMACrossStartHour = 8; -input int RM_InpEMACrossEndHour = 14; -input bool RM_InpEMACrossCloseOutsideHours = true; -input bool RM_InpUseEMADistanceEntry = true; -input double RM_InpEMADistancePips = 160.0; -input int RM_InpEMADistancePeriod = 26; - -//+------------------------------------------------------------------+ -//| Strategy 5-10: RSI Scalping Strategies | -//| Each RSI Scalping strategy trades on its own symbol: | -//| - APPL: Apple stock (AAPL) | -//| - BTCUSD: Bitcoin/USD | -//| - MSFT: Microsoft stock | -//| - NVDA: NVIDIA stock | -//| - TSLA: Tesla stock | -//| - XAUUSD: Gold/USD | -//| | -//| PEPPERSTONE US SYMBOL FORMATS: | -//| - Stocks may use: "AAPL.US", "NASDAQ:AAPL", or just "AAPL" | -//| - To find correct symbols: | -//| 1. Open Market Watch (Ctrl+M) | -//| 2. Right-click > Show All | -//| 3. Search for the stock name | -//| 4. Use the exact symbol name shown | -//+------------------------------------------------------------------+ -input group "=== RSI Scalping APPL (AAPL) - Pepperstone US ===" -input string RS_APPL_Symbol = "AAPL.US"; // Try: "AAPL.US", "NASDAQ:AAPL", or "AAPL" -input ENUM_TIMEFRAMES RS_APPL_TimeFrame = PERIOD_M10; -input int RS_APPL_RSI_Period = 14; -input ENUM_APPLIED_PRICE RS_APPL_RSI_Applied_Price = PRICE_CLOSE; -input double RS_APPL_RSI_Overbought = 80; -input double RS_APPL_RSI_Oversold = 78; -input double RS_APPL_RSI_Target_Buy = 94; -input double RS_APPL_RSI_Target_Sell = 44; -input int RS_APPL_BarsToWait = 7; -input double RS_APPL_LotSize = 25; -input int RS_APPL_MagicNumber = 20001; -input int RS_APPL_Slippage = 3; - -input group "=== RSI Scalping BTCUSD ===" -input string RS_BTCUSD_Symbol = "BTCUSD"; // Pepperstone may use: "BTCUSD", "BTC/USD", or "BTCUSD.c" -input ENUM_TIMEFRAMES RS_BTCUSD_TimeFrame = PERIOD_H1; -input int RS_BTCUSD_RSI_Period = 14; -input ENUM_APPLIED_PRICE RS_BTCUSD_RSI_Applied_Price = PRICE_CLOSE; -input double RS_BTCUSD_RSI_Overbought = 90; -input double RS_BTCUSD_RSI_Oversold = 73; -input double RS_BTCUSD_RSI_Target_Buy = 88; -input double RS_BTCUSD_RSI_Target_Sell = 48; -input int RS_BTCUSD_BarsToWait = 6; -input double RS_BTCUSD_LotSize = 0.1; -input int RS_BTCUSD_MagicNumber = 123459123; -input int RS_BTCUSD_Slippage = 3; - -input group "=== RSI Scalping MSFT - Pepperstone US ===" -input string RS_MSFT_Symbol = "MSFT.US"; // Try: "MSFT.US", "NASDAQ:MSFT", or "MSFT" -input ENUM_TIMEFRAMES RS_MSFT_TimeFrame = PERIOD_H3; -input int RS_MSFT_RSI_Period = 14; -input ENUM_APPLIED_PRICE RS_MSFT_RSI_Applied_Price = PRICE_CLOSE; -input double RS_MSFT_RSI_Overbought = 19; -input double RS_MSFT_RSI_Oversold = 50; -input double RS_MSFT_RSI_Target_Buy = 71; -input double RS_MSFT_RSI_Target_Sell = 70; -input int RS_MSFT_BarsToWait = 1; -input double RS_MSFT_LotSize = 50; -input int RS_MSFT_MagicNumber = 20002; -input int RS_MSFT_Slippage = 3; - -input group "=== RSI Scalping NVDA - Pepperstone US ===" -input string RS_NVDA_Symbol = "NVDA.US"; // Try: "NVDA.US", "NASDAQ:NVDA", or "NVDA" -input ENUM_TIMEFRAMES RS_NVDA_TimeFrame = PERIOD_M15; -input int RS_NVDA_RSI_Period = 8; -input ENUM_APPLIED_PRICE RS_NVDA_RSI_Applied_Price = PRICE_CLOSE; -input double RS_NVDA_RSI_Overbought = 36; -input double RS_NVDA_RSI_Oversold = 38; -input double RS_NVDA_RSI_Target_Buy = 90; -input double RS_NVDA_RSI_Target_Sell = 70; -input int RS_NVDA_BarsToWait = 5; -input double RS_NVDA_LotSize = 50; -input int RS_NVDA_MagicNumber = 20003; -input int RS_NVDA_Slippage = 3; - -input group "=== RSI Scalping TSLA - Pepperstone US ===" -input string RS_TSLA_Symbol = "TSLA.US"; // Try: "TSLA.US", "NASDAQ:TSLA", or "TSLA" -input ENUM_TIMEFRAMES RS_TSLA_TimeFrame = PERIOD_H1; -input int RS_TSLA_RSI_Period = 14; -input ENUM_APPLIED_PRICE RS_TSLA_RSI_Applied_Price = PRICE_CLOSE; -input double RS_TSLA_RSI_Overbought = 54; -input double RS_TSLA_RSI_Oversold = 73; -input double RS_TSLA_RSI_Target_Buy = 87; -input double RS_TSLA_RSI_Target_Sell = 33; -input int RS_TSLA_BarsToWait = 1; -input double RS_TSLA_LotSize = 50; -input int RS_TSLA_MagicNumber = 125421321; -input int RS_TSLA_Slippage = 3; - -input group "=== RSI Scalping XAUUSD ===" -input string RS_XAUUSD_Symbol = "XAUUSD"; -input ENUM_TIMEFRAMES RS_XAUUSD_TimeFrame = PERIOD_H1; -input int RS_XAUUSD_RSI_Period = 14; -input ENUM_APPLIED_PRICE RS_XAUUSD_RSI_Applied_Price = PRICE_CLOSE; -input double RS_XAUUSD_RSI_Overbought = 71; -input double RS_XAUUSD_RSI_Oversold = 57; -input double RS_XAUUSD_RSI_Target_Buy = 80; -input double RS_XAUUSD_RSI_Target_Sell = 57; -input int RS_XAUUSD_BarsToWait = 4; -input double RS_XAUUSD_LotSize = 0.1; -input int RS_XAUUSD_MagicNumber = 129102315; -input int RS_XAUUSD_Slippage = 3; - -input group "=== RSI Scalping Reversal escape (XAUUSD) ===" -input bool RS_UseReversalEscape = false; -input int RS_ReversalATRPeriod = 14; -input double RS_ReversalAdverseAtrMult = 5.25; -input int RS_ReversalSignsRequired = 2; -input double RS_ReversalRsiVelocity = 16.0; -input double RS_ReversalBodyAtrMult = 5.1; - -input group "=== RSI Scalping APPL — Trailing ===" -input bool RS_APPL_UseTrailingStop = true; -input double RS_APPL_TrailDistancePoints = 120.0; -input double RS_APPL_TrailActivationPoints = 0.0; - -input group "=== RSI Scalping BTCUSD — Trailing ===" -input bool RS_BTCUSD_UseTrailingStop = true; -input double RS_BTCUSD_TrailDistancePoints = 120.0; -input double RS_BTCUSD_TrailActivationPoints = 0.0; - -input group "=== RSI Scalping MSFT — Trailing ===" -input bool RS_MSFT_UseTrailingStop = true; -input double RS_MSFT_TrailDistancePoints = 375.0; -input double RS_MSFT_TrailActivationPoints = 75.0; - -input group "=== RSI Scalping NVDA — Trailing ===" -input bool RS_NVDA_UseTrailingStop = true; -input double RS_NVDA_TrailDistancePoints = 375.0; -input double RS_NVDA_TrailActivationPoints = 75.0; - -input group "=== RSI Scalping TSLA — Trailing ===" -input bool RS_TSLA_UseTrailingStop = true; -input double RS_TSLA_TrailDistancePoints = 900.0; -input double RS_TSLA_TrailActivationPoints = 950.0; - -input group "=== RSI Scalping XAUUSD — Trailing ===" -input bool RS_XAUUSD_UseTrailingStop = true; -input double RS_XAUUSD_TrailDistancePoints = 71.0; -input double RS_XAUUSD_TrailActivationPoints = 41.0; - -//+------------------------------------------------------------------+ -//| Global Variables - DarvasBox | -//+------------------------------------------------------------------+ -struct DarvasBoxData { - string symbol; - bool isInitialized; - double boxHigh; - double boxLow; - bool boxFormed; - datetime lastBoxTime; - string boxName; - double minStopLevel; - double point; - CTrade trade; - int maHandle; - int volumeHandle; - datetime lastBarTime; -}; - -//+------------------------------------------------------------------+ -//| Global Variables - EMA Slope Distance | -//+------------------------------------------------------------------+ -struct EMASlopeData { - string symbol; - bool isInitialized; - int ema_handle; - double ema_array[]; - datetime letzte_überwachung_zeit; - bool überwachung_aktiv; - bool preis_trigger_aktiv; - bool steigung_trigger_aktiv; - int ticket; - CTrade trade; - int trades_in_current_crossover; - bool crossover_detected; - datetime trade_open_time; - datetime last_bar_time; - datetime es_last_sl_adjust_success_time; -}; - -//+------------------------------------------------------------------+ -//| Global Variables - RSI CrossOver Reversal | -//+------------------------------------------------------------------+ -struct RSICrossOverData { - string symbol; - bool isInitialized; - int rsiHandle; - int emaHandle; - double previousRSIDef; - CTrade trade; - datetime lastTradeTime; - datetime bartime; - bool WeekDays[7]; - datetime lastBarTime; -}; - -//+------------------------------------------------------------------+ -//| Global Variables - RSI MidPoint Hijack | -//+------------------------------------------------------------------+ -struct RSIMidPointData { - string symbol; - bool isInitialized; - int rsiHandle; - int rsiReverseHandle; - int emaHandle; - bool rsiOverbought; - bool rsiOversold; - bool rsiReverseOverbought; - bool rsiReverseOversold; - CTrade trade; - CPositionInfo positionInfo; - bool emaCrossBuySignal; - bool emaCrossSellSignal; - int emaCrossSignalBar; - datetime lastBarTime; - datetime rsiReverseLastCloseTime; - bool rsiReverseInCooldown; - double lastBarRSI; - double lastBarRSIReverse; - double lastBarEMA; - double lastBarClose; - double lastBarEMAPrev; - double lastBarClosePrev; -}; - -//+------------------------------------------------------------------+ -//| Global Variables - RSI Scalping | -//+------------------------------------------------------------------+ -struct RSIScalpingData { - string symbol; - bool isInitialized; - CTrade trade; - int rsi_handle; - double rsi_buffer[]; - double rsi_prev; - double rsi_current; - double rsi_two_bars_ago; - bool position_open; - ulong position_ticket; - ENUM_POSITION_TYPE current_position_type; - datetime last_bar_time; - bool rsi_against_position; - int bars_against_count; -}; - -//+------------------------------------------------------------------+ -//| Global Strategy Instances | -//+------------------------------------------------------------------+ -DarvasBoxData dbData; -EMASlopeData esData; -RSICrossOverData rcData; -RSIMidPointData rmData; -RSIScalpingData rsAPPLData; -RSIScalpingData rsBTCUSDData; -RSIScalpingData rsMSFTData; -RSIScalpingData rsNVDAData; -RSIScalpingData rsTSLAData; -RSIScalpingData rsXAUUSDData; - -//+------------------------------------------------------------------+ -//| Global Variables for lot sizes (from inputs below) | -//+------------------------------------------------------------------+ -double g_DB_LotSize = 0.01; -double g_ES_LotSize; -double g_RC_LotSize; -double g_RM_LotSize; -double g_RS_APPL_LotSize; -double g_RS_BTCUSD_LotSize; -double g_RS_MSFT_LotSize; -double g_RS_NVDA_LotSize; -double g_RS_TSLA_LotSize; -double g_RS_XAUUSD_LotSize; - -//+------------------------------------------------------------------+ -//| Expert initialization function | -//+------------------------------------------------------------------+ -int OnInit() -{ - int initResult = INIT_SUCCEEDED; - - g_ES_LotSize = ES_LotGröße; - g_RC_LotSize = RC_lotSize; - g_RM_LotSize = RM_InpLotSize; - g_RS_APPL_LotSize = RS_APPL_LotSize; - g_RS_BTCUSD_LotSize = RS_BTCUSD_LotSize; - g_RS_MSFT_LotSize = RS_MSFT_LotSize; - g_RS_NVDA_LotSize = RS_NVDA_LotSize; - g_RS_TSLA_LotSize = RS_TSLA_LotSize; - g_RS_XAUUSD_LotSize = RS_XAUUSD_LotSize; - - if(EnableDarvasBox) - if(!InitDarvasBox(DB_Symbol)) - Print("Warning: DarvasBox strategy failed to initialize for symbol '", DB_Symbol, "'"); - - if(EnableEMASlopeDistance) - if(!InitEMASlopeDistance(ES_Symbol)) - Print("Warning: EMASlopeDistance strategy failed to initialize for symbol '", ES_Symbol, "'"); - - if(EnableRSICrossOverReversal) - if(!InitRSICrossOverReversal(RC_Symbol)) - Print("Warning: RSICrossOverReversal strategy failed to initialize for symbol '", RC_Symbol, "'"); - - if(EnableRSIMidPointHijack) - if(!InitRSIMidPointHijack(RM_Symbol)) - Print("Warning: RSIMidPointHijack strategy failed to initialize for symbol '", RM_Symbol, "'"); - - if(EnableRSIScalpingAPPL) - InitRSIScalping(rsAPPLData, RS_APPL_Symbol, RS_APPL_TimeFrame, RS_APPL_RSI_Period, RS_APPL_RSI_Applied_Price, RS_APPL_MagicNumber, RS_APPL_Slippage); - - if(EnableRSIScalpingBTCUSD) - InitRSIScalping(rsBTCUSDData, RS_BTCUSD_Symbol, RS_BTCUSD_TimeFrame, RS_BTCUSD_RSI_Period, RS_BTCUSD_RSI_Applied_Price, RS_BTCUSD_MagicNumber, RS_BTCUSD_Slippage); - - if(EnableRSIScalpingMSFT) - InitRSIScalping(rsMSFTData, RS_MSFT_Symbol, RS_MSFT_TimeFrame, RS_MSFT_RSI_Period, RS_MSFT_RSI_Applied_Price, RS_MSFT_MagicNumber, RS_MSFT_Slippage); - - if(EnableRSIScalpingNVDA) - InitRSIScalping(rsNVDAData, RS_NVDA_Symbol, RS_NVDA_TimeFrame, RS_NVDA_RSI_Period, RS_NVDA_RSI_Applied_Price, RS_NVDA_MagicNumber, RS_NVDA_Slippage); - - if(EnableRSIScalpingTSLA) - InitRSIScalping(rsTSLAData, RS_TSLA_Symbol, RS_TSLA_TimeFrame, RS_TSLA_RSI_Period, RS_TSLA_RSI_Applied_Price, RS_TSLA_MagicNumber, RS_TSLA_Slippage); - - if(EnableRSIScalpingXAUUSD) - InitRSIScalping(rsXAUUSDData, RS_XAUUSD_Symbol, RS_XAUUSD_TimeFrame, RS_XAUUSD_RSI_Period, RS_XAUUSD_RSI_Applied_Price, RS_XAUUSD_MagicNumber, RS_XAUUSD_Slippage); - - Print("United EA (self-evaluate build) initialized. Active strategies: ", - (EnableDarvasBox ? "DarvasBox " : ""), - (EnableEMASlopeDistance ? "EMASlope " : ""), - (EnableRSICrossOverReversal ? "RSICrossOver " : ""), - (EnableRSIMidPointHijack ? "RSIMidPoint " : ""), - (EnableRSIScalpingAPPL ? "RSIScalpingAPPL " : ""), - (EnableRSIScalpingBTCUSD ? "RSIScalpingBTCUSD " : ""), - (EnableRSIScalpingMSFT ? "RSIScalpingMSFT " : ""), - (EnableRSIScalpingNVDA ? "RSIScalpingNVDA " : ""), - (EnableRSIScalpingTSLA ? "RSIScalpingTSLA " : ""), - (EnableRSIScalpingXAUUSD ? "RSIScalpingXAUUSD " : "")); - - return initResult; -} - -//+------------------------------------------------------------------+ -//| Expert deinitialization function | -//+------------------------------------------------------------------+ -void OnDeinit(const int reason) -{ - if(EnableDarvasBox) - DeinitDarvasBox(); - - if(EnableEMASlopeDistance) - DeinitEMASlopeDistance(); - - if(EnableRSICrossOverReversal) - DeinitRSICrossOverReversal(); - - if(EnableRSIMidPointHijack) - DeinitRSIMidPointHijack(); - - if(EnableRSIScalpingAPPL) - DeinitRSIScalping(rsAPPLData); - - if(EnableRSIScalpingBTCUSD) - DeinitRSIScalping(rsBTCUSDData); - - if(EnableRSIScalpingMSFT) - DeinitRSIScalping(rsMSFTData); - - if(EnableRSIScalpingNVDA) - DeinitRSIScalping(rsNVDAData); - - if(EnableRSIScalpingTSLA) - DeinitRSIScalping(rsTSLAData); - - if(EnableRSIScalpingXAUUSD) - DeinitRSIScalping(rsXAUUSDData); - - Print("United EA deinitialized. Reason: ", reason); -} - -//+------------------------------------------------------------------+ -//| Expert tick function | -//+------------------------------------------------------------------+ -void OnTick() -{ - if(EnableDarvasBox) - ProcessDarvasBox(DB_Symbol); - - if(EnableEMASlopeDistance) - ProcessEMASlopeDistance(ES_Symbol); - - if(EnableRSICrossOverReversal) - ProcessRSICrossOverReversal(RC_Symbol); - - if(EnableRSIMidPointHijack) - ProcessRSIMidPointHijack(RM_Symbol); - - if(EnableRSIScalpingAPPL) - ProcessRSIScalping(rsAPPLData, RS_APPL_Symbol, RS_APPL_TimeFrame, RS_APPL_RSI_Period, RS_APPL_RSI_Applied_Price, - RS_APPL_RSI_Overbought, RS_APPL_RSI_Oversold, RS_APPL_RSI_Target_Buy, RS_APPL_RSI_Target_Sell, - RS_APPL_BarsToWait, g_RS_APPL_LotSize, RS_APPL_MagicNumber, - false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, - RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult, - RS_APPL_UseTrailingStop, RS_APPL_TrailDistancePoints, RS_APPL_TrailActivationPoints); - - if(EnableRSIScalpingBTCUSD) - ProcessRSIScalping(rsBTCUSDData, RS_BTCUSD_Symbol, RS_BTCUSD_TimeFrame, RS_BTCUSD_RSI_Period, RS_BTCUSD_RSI_Applied_Price, - RS_BTCUSD_RSI_Overbought, RS_BTCUSD_RSI_Oversold, RS_BTCUSD_RSI_Target_Buy, RS_BTCUSD_RSI_Target_Sell, - RS_BTCUSD_BarsToWait, g_RS_BTCUSD_LotSize, RS_BTCUSD_MagicNumber, - false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, - RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult, - RS_BTCUSD_UseTrailingStop, RS_BTCUSD_TrailDistancePoints, RS_BTCUSD_TrailActivationPoints); - - if(EnableRSIScalpingMSFT) - ProcessRSIScalping(rsMSFTData, RS_MSFT_Symbol, RS_MSFT_TimeFrame, RS_MSFT_RSI_Period, RS_MSFT_RSI_Applied_Price, - RS_MSFT_RSI_Overbought, RS_MSFT_RSI_Oversold, RS_MSFT_RSI_Target_Buy, RS_MSFT_RSI_Target_Sell, - RS_MSFT_BarsToWait, g_RS_MSFT_LotSize, RS_MSFT_MagicNumber, - false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, - RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult, - RS_MSFT_UseTrailingStop, RS_MSFT_TrailDistancePoints, RS_MSFT_TrailActivationPoints); - - if(EnableRSIScalpingNVDA) - ProcessRSIScalping(rsNVDAData, RS_NVDA_Symbol, RS_NVDA_TimeFrame, RS_NVDA_RSI_Period, RS_NVDA_RSI_Applied_Price, - RS_NVDA_RSI_Overbought, RS_NVDA_RSI_Oversold, RS_NVDA_RSI_Target_Buy, RS_NVDA_RSI_Target_Sell, - RS_NVDA_BarsToWait, g_RS_NVDA_LotSize, RS_NVDA_MagicNumber, - false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, - RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult, - RS_NVDA_UseTrailingStop, RS_NVDA_TrailDistancePoints, RS_NVDA_TrailActivationPoints); - - if(EnableRSIScalpingTSLA) - ProcessRSIScalping(rsTSLAData, RS_TSLA_Symbol, RS_TSLA_TimeFrame, RS_TSLA_RSI_Period, RS_TSLA_RSI_Applied_Price, - RS_TSLA_RSI_Overbought, RS_TSLA_RSI_Oversold, RS_TSLA_RSI_Target_Buy, RS_TSLA_RSI_Target_Sell, - RS_TSLA_BarsToWait, g_RS_TSLA_LotSize, RS_TSLA_MagicNumber, - false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, - RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult, - RS_TSLA_UseTrailingStop, RS_TSLA_TrailDistancePoints, RS_TSLA_TrailActivationPoints); - - if(EnableRSIScalpingXAUUSD) - ProcessRSIScalping(rsXAUUSDData, RS_XAUUSD_Symbol, RS_XAUUSD_TimeFrame, RS_XAUUSD_RSI_Period, RS_XAUUSD_RSI_Applied_Price, - RS_XAUUSD_RSI_Overbought, RS_XAUUSD_RSI_Oversold, RS_XAUUSD_RSI_Target_Buy, RS_XAUUSD_RSI_Target_Sell, - RS_XAUUSD_BarsToWait, g_RS_XAUUSD_LotSize, RS_XAUUSD_MagicNumber, - RS_UseReversalEscape, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, - RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult, - RS_XAUUSD_UseTrailingStop, RS_XAUUSD_TrailDistancePoints, RS_XAUUSD_TrailActivationPoints); -} - -//+------------------------------------------------------------------+ -//| Include strategy implementations | -//+------------------------------------------------------------------+ -#include "Strategies/DarvasBoxStrategy.mqh" -#include "Strategies/EMASlopeDistanceStrategy.mqh" -#include "Strategies/RSICrossOverReversalStrategy.mqh" -#include "Strategies/RSIMidPointHijackStrategy.mqh" -#include "Strategies/RSIScalpingStrategy.mqh" - -//+------------------------------------------------------------------+ diff --git a/frontline/cluster-fuck/_united-V2/MagicNumberHelpers.mqh b/frontline/cluster-latest/MagicNumberHelpers.mqh similarity index 100% rename from frontline/cluster-fuck/_united-V2/MagicNumberHelpers.mqh rename to frontline/cluster-latest/MagicNumberHelpers.mqh diff --git a/frontline/cluster-fuck/RSIScalpingTSLA-trailing/main.mq5 b/frontline/cluster-latest/RSIScalpingMU/main.mq5 similarity index 67% rename from frontline/cluster-fuck/RSIScalpingTSLA-trailing/main.mq5 rename to frontline/cluster-latest/RSIScalpingMU/main.mq5 index 1648b9a..5c53a5d 100644 --- a/frontline/cluster-fuck/RSIScalpingTSLA-trailing/main.mq5 +++ b/frontline/cluster-latest/RSIScalpingMU/main.mq5 @@ -5,29 +5,24 @@ //+------------------------------------------------------------------+ #property copyright "Copyright 2025, MetaQuotes Ltd." #property link "https://www.mql5.com" -#property version "1.01" +#property version "1.00" #include #include "../_united/MagicNumberHelpers.mqh" -//--- Input parameters -input ENUM_TIMEFRAMES TimeFrame = PERIOD_H1; // Timeframe for Analysis +//--- Input parameters — synced with Desktop 123.set (2026.05.13) +input ENUM_TIMEFRAMES TimeFrame = PERIOD_M20; // Timeframe for Analysis input int RSI_Period = 14; // RSI Period input ENUM_APPLIED_PRICE RSI_Applied_Price = PRICE_CLOSE; // RSI Applied Price -input double RSI_Overbought = 54; // RSI Overbought Level -input double RSI_Oversold = 73; // RSI Oversold Level -input double RSI_Target_Buy = 87; // RSI Target for Buy Exit -input double RSI_Target_Sell = 33; // RSI Target for Sell Exit -input int BarsToWait = 1; // Bars to wait when RSI goes against position +input double RSI_Overbought = 32; // RSI Overbought Level +input double RSI_Oversold = 86; // RSI Oversold Level +input double RSI_Target_Buy = 100; // RSI Target for Buy Exit +input double RSI_Target_Sell = 24; // RSI Target for Sell Exit +input int BarsToWait = 34; // Bars to wait when RSI goes against position input double LotSize = 5; // Lot Size -input int MagicNumber = 125421321; // Magic Number +input int MagicNumber = 129102315; // Magic Number input int Slippage = 3; // Slippage in points -input group "=== Trailing stop ===" -input bool UseTrailingStop = true; // move SL behind bid/ask while in profit -input double TrailingStopDistancePoints = 900.0; // SL distance from bid/ask (points) -input double TrailingActivationPoints = 950.0; // min profit before trailing (0 = same as distance) - //--- Global variables CTrade trade; int rsi_handle; @@ -77,32 +72,35 @@ void OnDeinit(const int reason) //+------------------------------------------------------------------+ void OnTick() { + // Check if we have enough bars if(Bars(_Symbol, TimeFrame) < RSI_Period + 2) + { return; - - const datetime current_bar_time = iTime(_Symbol, TimeFrame, 0); - const bool new_bar = (current_bar_time != last_bar_time); - const bool in_pos = position_open || PositionExistsByMagic(_Symbol, (ulong)MagicNumber); - - if(!in_pos && !new_bar) - return; - - if(!UpdateRSI()) - return; - - if(in_pos && UseTrailingStop) - ApplyTrailingStop(); - - if(!new_bar) - return; - + } + + // Check if this is a new bar + datetime current_bar_time = iTime(_Symbol, TimeFrame, 0); + if(current_bar_time == last_bar_time) + { + return; // Still the same bar, don't process + } + last_bar_time = current_bar_time; - - ResyncPositionFromMarket(); + + // Update RSI values + if(!UpdateRSI()) + { + return; + } + + // Check for existing position CheckExistingPosition(); - - if(!position_open && !PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) + + // Check for new entry signals - only if no position exists for THIS EA (magic number) on THIS symbol + if(!position_open && !PositionExistsByMagic(_Symbol, MagicNumber)) + { CheckEntrySignals(); + } } //+------------------------------------------------------------------+ @@ -122,85 +120,6 @@ bool UpdateRSI() return true; } -//+------------------------------------------------------------------+ -//| Trail SL behind favorable price (every tick when enabled) | -//+------------------------------------------------------------------+ -void ApplyTrailingStop() -{ - if(TrailingStopDistancePoints <= 0.0) - return; - if(!PositionSelectByMagic(_Symbol, (ulong)MagicNumber)) - return; - - const double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT); - if(point <= 0.0) - return; - - const int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS); - const double trail_dist = TrailingStopDistancePoints * point; - const double activation_pts = (TrailingActivationPoints > 0.0) - ? TrailingActivationPoints - : TrailingStopDistancePoints; - const double activation = activation_pts * point; - const long stops_level = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL); - const double min_dist = (double)stops_level * point; - - const ENUM_POSITION_TYPE ptype = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - const double entry = PositionGetDouble(POSITION_PRICE_OPEN); - const double cur_sl = PositionGetDouble(POSITION_SL); - const double cur_tp = PositionGetDouble(POSITION_TP); - - if(ptype == POSITION_TYPE_BUY) - { - const double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); - if(bid - entry <= activation) - return; - - double new_sl = NormalizeDouble(bid - trail_dist, digits); - if(min_dist > 0.0 && bid - new_sl < min_dist) - new_sl = NormalizeDouble(bid - min_dist, digits); - - if(new_sl >= bid || new_sl <= 0.0) - return; - if(cur_sl > 0.0 && new_sl <= cur_sl) - return; - - ModifyPositionByMagic(trade, _Symbol, (ulong)MagicNumber, new_sl, cur_tp); - } - else if(ptype == POSITION_TYPE_SELL) - { - const double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); - if(entry - ask <= activation) - return; - - double new_sl = NormalizeDouble(ask + trail_dist, digits); - if(min_dist > 0.0 && new_sl - ask < min_dist) - new_sl = NormalizeDouble(ask + min_dist, digits); - - if(new_sl <= ask || new_sl <= 0.0) - return; - if(cur_sl > 0.0 && new_sl >= cur_sl) - return; - - ModifyPositionByMagic(trade, _Symbol, (ulong)MagicNumber, new_sl, cur_tp); - } -} - -//+------------------------------------------------------------------+ -//| Sync ticket/state if a position exists after restart | -//+------------------------------------------------------------------+ -void ResyncPositionFromMarket() -{ - if(position_open) - return; - ulong t = GetPositionTicketByMagic(_Symbol, (ulong)MagicNumber); - if(t == 0 || !PositionSelectByTicket(t)) - return; - position_ticket = (int)t; - position_open = true; - current_position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); -} - //+------------------------------------------------------------------+ //| Check existing position for exit conditions | //+------------------------------------------------------------------+ @@ -212,7 +131,7 @@ void CheckExistingPosition() } // Check if position still exists with correct magic number AND symbol for THIS EA - if(!PositionSelectByTicketSymbolAndMagic(position_ticket, _Symbol, (ulong)MagicNumber)) + if(!PositionSelectByTicketSymbolAndMagic(position_ticket, _Symbol, MagicNumber)) { position_open = false; position_ticket = 0; @@ -324,7 +243,7 @@ void CheckEntrySignals() void OpenBuyPosition() { // Verify no position exists for THIS EA (magic number) on THIS symbol before opening - if(PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) + if(PositionExistsByMagic(_Symbol, MagicNumber)) { return; // Position already exists for this EA } @@ -337,7 +256,7 @@ void OpenBuyPosition() if(new_ticket > 0) { // Verify position was opened for THIS EA (magic number) on THIS symbol - if(PositionSelectByTicketSymbolAndMagic(new_ticket, _Symbol, (ulong)MagicNumber)) + if(PositionSelectByTicketSymbolAndMagic(new_ticket, _Symbol, MagicNumber)) { position_ticket = new_ticket; position_open = true; @@ -357,7 +276,7 @@ void OpenBuyPosition() void OpenSellPosition() { // Verify no position exists for THIS EA (magic number) on THIS symbol before opening - if(PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) + if(PositionExistsByMagic(_Symbol, MagicNumber)) { return; // Position already exists for this EA } @@ -370,7 +289,7 @@ void OpenSellPosition() if(new_ticket > 0) { // Verify position was opened for THIS EA (magic number) on THIS symbol - if(PositionSelectByTicketSymbolAndMagic(new_ticket, _Symbol, (ulong)MagicNumber)) + if(PositionSelectByTicketSymbolAndMagic(new_ticket, _Symbol, MagicNumber)) { position_ticket = new_ticket; position_open = true; @@ -390,7 +309,7 @@ void OpenSellPosition() void ClosePosition() { // Close position using helper that verifies symbol AND magic number for THIS EA - if(ClosePositionByMagic(trade, _Symbol, (ulong)MagicNumber)) + if(ClosePositionByMagic(trade, _Symbol, MagicNumber)) { position_open = false; position_ticket = 0; diff --git a/frontline/cluster-latest/RSIScalpingMU/optimization.set b/frontline/cluster-latest/RSIScalpingMU/optimization.set new file mode 100644 index 0000000000000000000000000000000000000000..5d564c8b56d753dd4c18da594fa238a2dc9b1be8 GIT binary patch literal 1820 zcmaKsTW`}q5QXO%iT~h7kPtL+nifzVTA%_6N=1SYPgTf`h@_4jCs4$12fnl8t?eWr z%X^(UbLO^xem}Rw);6@QO>E3Mvm3^?9r1VVG4nBF%hGU~+B5bij2+JI+dY$hVP9GUGFM`I*o`AFpyCo+-%hLp1 z$4-#`frL~$uK;w0-cyA3zaL&%TVkMM2I_>J{j z&}GT}s!*ce;v_cm@CLhz?37WllC?K?(NJs@r!OT}MRkB3XKrX+WfN*r@KV z?Hp#eudhiZAvyjnCVz4AjsuNX6o672xc(K~*XH5yuc|TN&Dn_W{ zlLq##?`t1jUav+kd-27@A7|XC6V>xkMji1nbndQfzm)7T=lC%RR;S=Cg1jQ= z9P0PZ;a^xU;UNY?*r?vG;38%Pr^>8HT63(4W_(W%M0?lP8OVCywph`uSGQ?LJst5Y zOUmMLz*k1yGwmf=ee&9?q#kEg=bF#0#kbmD-vs*;`%c95S}9iZAf4C)B0sPf_V7S9 znur(ZEYMXQxlWH4ubzqKZa**1*<&>ZN7+@k7WSG5ZECpwa(P#DL(W^&Y~^=_@d|&& Td;0D2^>Bn%*=y|*!|UTO4UjRn literal 0 HcmV?d00001 diff --git a/frontline/cluster-fuck/RSIScalpingTSLA-trailing/report.html b/frontline/cluster-latest/RSIScalpingMU/report.html similarity index 100% rename from frontline/cluster-fuck/RSIScalpingTSLA-trailing/report.html rename to frontline/cluster-latest/RSIScalpingMU/report.html diff --git a/frontline/cluster-fuck/RSIScalpingTSLA-trailing/report.png b/frontline/cluster-latest/RSIScalpingMU/report.png similarity index 100% rename from frontline/cluster-fuck/RSIScalpingTSLA-trailing/report.png rename to frontline/cluster-latest/RSIScalpingMU/report.png diff --git a/frontline/cluster-fuck/_united-V2/STRATEGY_CONFIGURATION.md b/frontline/cluster-latest/STRATEGY_CONFIGURATION.md similarity index 100% rename from frontline/cluster-fuck/_united-V2/STRATEGY_CONFIGURATION.md rename to frontline/cluster-latest/STRATEGY_CONFIGURATION.md diff --git a/frontline/cluster-fuck/_united-V2/Strategies/DarvasBoxStrategy.mqh b/frontline/cluster-latest/Strategies/DarvasBoxStrategy.mqh similarity index 100% rename from frontline/cluster-fuck/_united-V2/Strategies/DarvasBoxStrategy.mqh rename to frontline/cluster-latest/Strategies/DarvasBoxStrategy.mqh diff --git a/frontline/cluster-fuck/_united-V2/Strategies/EMASlopeDistanceStrategy.mqh b/frontline/cluster-latest/Strategies/EMASlopeDistanceStrategy.mqh similarity index 100% rename from frontline/cluster-fuck/_united-V2/Strategies/EMASlopeDistanceStrategy.mqh rename to frontline/cluster-latest/Strategies/EMASlopeDistanceStrategy.mqh diff --git a/frontline/cluster-fuck/_united-V2/Strategies/RSIConsolidationStrategy.mqh b/frontline/cluster-latest/Strategies/RSIConsolidationStrategy.mqh similarity index 100% rename from frontline/cluster-fuck/_united-V2/Strategies/RSIConsolidationStrategy.mqh rename to frontline/cluster-latest/Strategies/RSIConsolidationStrategy.mqh diff --git a/frontline/cluster-fuck/_united-V2/Strategies/RSICrossOverReversalStrategy.mqh b/frontline/cluster-latest/Strategies/RSICrossOverReversalStrategy.mqh similarity index 100% rename from frontline/cluster-fuck/_united-V2/Strategies/RSICrossOverReversalStrategy.mqh rename to frontline/cluster-latest/Strategies/RSICrossOverReversalStrategy.mqh diff --git a/frontline/cluster-fuck/_united-V2/Strategies/RSIMidPointHijackStrategy.mqh b/frontline/cluster-latest/Strategies/RSIMidPointHijackStrategy.mqh similarity index 100% rename from frontline/cluster-fuck/_united-V2/Strategies/RSIMidPointHijackStrategy.mqh rename to frontline/cluster-latest/Strategies/RSIMidPointHijackStrategy.mqh diff --git a/frontline/cluster-fuck/_united-V2/Strategies/RSIReversalAsianStrategy.mqh b/frontline/cluster-latest/Strategies/RSIReversalAsianStrategy.mqh similarity index 100% rename from frontline/cluster-fuck/_united-V2/Strategies/RSIReversalAsianStrategy.mqh rename to frontline/cluster-latest/Strategies/RSIReversalAsianStrategy.mqh diff --git a/frontline/cluster-fuck/_united-V2/Strategies/RSIScalpingStrategy.mqh b/frontline/cluster-latest/Strategies/RSIScalpingStrategy.mqh similarity index 100% rename from frontline/cluster-fuck/_united-V2/Strategies/RSIScalpingStrategy.mqh rename to frontline/cluster-latest/Strategies/RSIScalpingStrategy.mqh diff --git a/frontline/cluster-fuck/_united-V2/Strategies/RSISecretSauceStrategy.mqh b/frontline/cluster-latest/Strategies/RSISecretSauceStrategy.mqh similarity index 100% rename from frontline/cluster-fuck/_united-V2/Strategies/RSISecretSauceStrategy.mqh rename to frontline/cluster-latest/Strategies/RSISecretSauceStrategy.mqh diff --git a/frontline/cluster-fuck/_united-V2/Strategies/SimpleTrendlineStrategy.mqh b/frontline/cluster-latest/Strategies/SimpleTrendlineStrategy.mqh similarity index 100% rename from frontline/cluster-fuck/_united-V2/Strategies/SimpleTrendlineStrategy.mqh rename to frontline/cluster-latest/Strategies/SimpleTrendlineStrategy.mqh diff --git a/frontline/cluster-fuck/_united-V2/Strategies/SuperEMAStrategy.mqh b/frontline/cluster-latest/Strategies/SuperEMAStrategy.mqh similarity index 100% rename from frontline/cluster-fuck/_united-V2/Strategies/SuperEMAStrategy.mqh rename to frontline/cluster-latest/Strategies/SuperEMAStrategy.mqh diff --git a/frontline/cluster-fuck/_united-V2/main.mq5 b/frontline/cluster-latest/main.mq5 similarity index 93% rename from frontline/cluster-fuck/_united-V2/main.mq5 rename to frontline/cluster-latest/main.mq5 index 0881584..d111220 100644 --- a/frontline/cluster-fuck/_united-V2/main.mq5 +++ b/frontline/cluster-latest/main.mq5 @@ -40,6 +40,7 @@ double g_Pos_RS_BTCUSD; double g_Pos_RS_NVDA; double g_Pos_RS_TSLA; double g_Pos_RS_XAUUSD; +double g_Pos_RS_MU; double g_Pos_RRA_EURUSD; double g_Pos_RRA_AUDUSD; double g_Pos_SE; @@ -65,44 +66,47 @@ input bool EnableEMASlopeDistance = true; input bool EnableRSICrossOverReversal = true; input bool EnableRSIMidPointHijack = true; input bool EnableRSIScalpingAPPL = true; -input bool EnableRSIScalpingBTCUSD = true; +input bool EnableRSIScalpingBTCUSD = false; input bool EnableRSIScalpingNVDA = true; input bool EnableRSIScalpingTSLA = true; -input bool EnableRSIScalpingXAUUSD = true; -input bool EnableSuperEMA = true; -input bool EnableRSIConsolidation = true; +input bool EnableRSIScalpingXAUUSD = false; +input bool EnableRSIScalpingMU = true; +input bool EnableSuperEMA = false; +input bool EnableRSIConsolidation = false; input bool EnableRSIReversalAsianEURUSD = true; input bool EnableRSIReversalAsianAUDUSD = true; -input bool EnableSimpleTrendlineBTCUSD = true; -input bool EnableSimpleTrendlineXAUUSD = true; -input bool EnableSimpleTrendlineGER40 = true; -input bool EnableRSISecretSauce = true; +input bool EnableSimpleTrendlineBTCUSD = false; +input bool EnableSimpleTrendlineXAUUSD = false; +input bool EnableSimpleTrendlineGER40 = false; +input bool EnableRSISecretSauce = false; +input bool OPT_GuardOptimizationMode = true; // legacy compatibility with 123.set input group "=== Centralized Lot Size (Granular Per Robot) ===" -input double LOT_DB_DarvasBox = 0.05; -input double LOT_ES_EMASlopeDistance = 0.05; -input double LOT_RC_RSICrossOver = 0.06; -input double LOT_RM_RSIMidPointHijack = 0.03; -input double LOT_RS_APPL = 5.0; +input double LOT_DB_DarvasBox = 0.01; +input double LOT_ES_EMASlopeDistance = 0.02; +input double LOT_RC_RSICrossOver = 0.01; +input double LOT_RM_RSIMidPointHijack = 0.01; +input double LOT_RS_APPL = 25.0; input double LOT_RS_BTCUSD = 0.1; -input double LOT_RS_NVDA = 10.0; -input double LOT_RS_TSLA = 15.0; -input double LOT_RS_XAUUSD = 0.1; -input double LOT_RRA_EURUSD = 0.05; -input double LOT_RRA_AUDUSD = 0.08; -input double LOT_SE_SuperEMA = 0.02; -input double LOT_RCO_RSIConsolidation = 0.02; -input double LOT_ST_BTCUSD = 0.07; -input double LOT_ST_XAUUSD = 0.01; +input double LOT_RS_NVDA = 25.0; +input double LOT_RS_TSLA = 5.0; +input double LOT_RS_XAUUSD = 0.27; +input double LOT_RS_MU = 5.0; +input double LOT_RRA_EURUSD = 0.1; +input double LOT_RRA_AUDUSD = 0.1; +input double LOT_SE_SuperEMA = 0.01; +input double LOT_RCO_RSIConsolidation = 0.1; +input double LOT_ST_BTCUSD = 0.1; +input double LOT_ST_XAUUSD = 0.1; input double LOT_ST_GER40 = 0.10; -input double LOT_RSS_SecretSauce = 0.01; +input double LOT_RSS_SecretSauce = 0.1; input group "=== Balance-based position sizing ===" input bool ORCH_ScaleLotsByBalance = true; input bool ORCH_UseEquityInsteadOfBalance = false; -input double ORCH_ReferenceBalance = 10000.0; +input double ORCH_ReferenceBalance = 1000.0; input double ORCH_MinBalanceScale = 0.1; -input double ORCH_MaxBalanceScale = 10.0; +input double ORCH_MaxBalanceScale = 100000.0; //+------------------------------------------------------------------+ //| Strategy 1: DarvasBoxXAUUSD | @@ -143,7 +147,7 @@ input bool ES_UseTrailingStop = true; input double ES_TrailingActivationPips = 0.0; input bool ES_UseStaleStopLossExit = false; input int ES_StaleStopLossSeconds = 33800; -input double ES_LotGröße = 0.03; +input double ES_LotGröße = 0.07; input int ES_MagicNumber = 12350; input bool ES_UseSpreadAdjustment = true; input ENUM_TIMEFRAMES ES_Timeframe = PERIOD_H1; @@ -169,7 +173,7 @@ input int RC_overboughtLevel = 93; input int RC_oversoldLevel = 22; input double RC_entryRSIBuySpread = 0; input double RC_entryRSISellSpread = 0; -input double RC_lotSize = 0.01; +input double RC_lotSize = 0.1; input int RC_slippage = 3; input int RC_cooldownSeconds = 209; input ENUM_TIMEFRAMES RC_TimeFrame1 = PERIOD_M1; @@ -201,7 +205,7 @@ input bool RC_Saturday = false; input group "=== RSI MidPoint Hijack Strategy ===" input string RM_Symbol = "XAUUSD"; input ENUM_TIMEFRAMES RM_InpTimeframe = PERIOD_H1; -input double RM_InpLotSize = 0.02; +input double RM_InpLotSize = 0.1; input int RM_InpMagicNumberRSIFollow = 1001; input int RM_InpMagicNumberRSIReverse = 1002; input int RM_InpMagicNumberEMACross = 1003; @@ -254,7 +258,7 @@ input int RM_InpEMADistancePeriod = 26; //| 4. Use the exact symbol name shown | //+------------------------------------------------------------------+ input group "=== RSI Scalping APPL (AAPL) - Pepperstone US ===" -input string RS_APPL_Symbol = "AAPL.NAS"; // Pepperstone / match tester set (also try AAPL.US) +input string RS_APPL_Symbol = "AAPL"; input ENUM_TIMEFRAMES RS_APPL_TimeFrame = PERIOD_M10; input int RS_APPL_RSI_Period = 14; input ENUM_APPLIED_PRICE RS_APPL_RSI_Applied_Price = PRICE_CLOSE; @@ -282,7 +286,7 @@ input int RS_BTCUSD_MagicNumber = 123459123; input int RS_BTCUSD_Slippage = 3; input group "=== RSI Scalping NVDA - Pepperstone US ===" -input string RS_NVDA_Symbol = "NVDA.NAS"; // Pepperstone / match tester set (also try NVDA.US) +input string RS_NVDA_Symbol = "NVDA"; input ENUM_TIMEFRAMES RS_NVDA_TimeFrame = PERIOD_M15; input int RS_NVDA_RSI_Period = 8; input ENUM_APPLIED_PRICE RS_NVDA_RSI_Applied_Price = PRICE_CLOSE; @@ -291,12 +295,12 @@ input double RS_NVDA_RSI_Oversold = 38; input double RS_NVDA_RSI_Target_Buy = 90; input double RS_NVDA_RSI_Target_Sell = 70; input int RS_NVDA_BarsToWait = 5; -input double RS_NVDA_LotSize = 50; +input double RS_NVDA_LotSize = 5; input int RS_NVDA_MagicNumber = 20003; input int RS_NVDA_Slippage = 3; input group "=== RSI Scalping TSLA - Pepperstone US ===" -input string RS_TSLA_Symbol = "TSLA.NAS"; // Pepperstone / match tester set (also try TSLA.US) +input string RS_TSLA_Symbol = "TSLA"; input ENUM_TIMEFRAMES RS_TSLA_TimeFrame = PERIOD_H1; input int RS_TSLA_RSI_Period = 14; input ENUM_APPLIED_PRICE RS_TSLA_RSI_Applied_Price = PRICE_CLOSE; @@ -305,7 +309,7 @@ input double RS_TSLA_RSI_Oversold = 73; input double RS_TSLA_RSI_Target_Buy = 87; input double RS_TSLA_RSI_Target_Sell = 33; input int RS_TSLA_BarsToWait = 1; -input double RS_TSLA_LotSize = 50; +input double RS_TSLA_LotSize = 5; input int RS_TSLA_MagicNumber = 125421321; input int RS_TSLA_Slippage = 3; @@ -323,6 +327,20 @@ input double RS_XAUUSD_LotSize = 0.1; input int RS_XAUUSD_MagicNumber = 129102315; input int RS_XAUUSD_Slippage = 3; +input group "=== RSI Scalping MU ===" +input string RS_MU_Symbol = "MU"; +input ENUM_TIMEFRAMES RS_MU_TimeFrame = PERIOD_M20; +input int RS_MU_RSI_Period = 14; +input ENUM_APPLIED_PRICE RS_MU_RSI_Applied_Price = PRICE_CLOSE; +input double RS_MU_RSI_Overbought = 32; +input double RS_MU_RSI_Oversold = 86; +input double RS_MU_RSI_Target_Buy = 100; +input double RS_MU_RSI_Target_Sell = 24; +input int RS_MU_BarsToWait = 34; +input double RS_MU_LotSize = 5.0; +input int RS_MU_MagicNumber = 129102316; +input int RS_MU_Slippage = 3; + input group "=== RSI Scalping Reversal Escape (XAUUSD only) ===" input bool RS_UseReversalEscape = true; input int RS_ReversalATRPeriod = 14; @@ -480,7 +498,7 @@ input ENUM_APPLIED_PRICE ST_XAU_AppliedPrice = PRICE_OPEN; input int ST_XAU_HTFBarsToScan = 500; input double ST_XAU_LineTouchTolerance = 220.0; input double ST_XAU_BreakBuffer = 110.0; -input ulong ST_XAU_MagicNumber = 26042503; +input ulong ST_XAU_MagicNumber = 26042501; input bool ST_XAU_DrawTrendline = true; input group "=== SimpleTrendline GER40 ===" @@ -549,6 +567,7 @@ void United_RefreshScaledLots() g_Pos_RS_NVDA = United_ScaledLot(LOT_RS_NVDA); g_Pos_RS_TSLA = United_ScaledLot(LOT_RS_TSLA); g_Pos_RS_XAUUSD = United_ScaledLot(LOT_RS_XAUUSD); + g_Pos_RS_MU = United_ScaledLot(LOT_RS_MU); g_Pos_RRA_EURUSD = United_ScaledLot(LOT_RRA_EURUSD); g_Pos_RRA_AUDUSD = United_ScaledLot(LOT_RRA_AUDUSD); g_Pos_SE = United_ScaledLot(LOT_SE_SuperEMA); @@ -656,6 +675,7 @@ RSIScalpingData rsBTCUSDData; RSIScalpingData rsNVDAData; RSIScalpingData rsTSLAData; RSIScalpingData rsXAUUSDData; +RSIScalpingData rsMUData; SuperEMAData seData; RSIConsolidationData rcoData; SimpleTrendlineData stBTCData; @@ -710,6 +730,8 @@ int OnInit() if(EnableRSIScalpingXAUUSD) InitRSIScalping(rsXAUUSDData, RS_XAUUSD_Symbol, RS_XAUUSD_TimeFrame, RS_XAUUSD_RSI_Period, RS_XAUUSD_RSI_Applied_Price, RS_XAUUSD_MagicNumber, RS_XAUUSD_Slippage); + if(EnableRSIScalpingMU) + InitRSIScalping(rsMUData, RS_MU_Symbol, RS_MU_TimeFrame, RS_MU_RSI_Period, RS_MU_RSI_Applied_Price, RS_MU_MagicNumber, RS_MU_Slippage); if(EnableRSISecretSauce) if(!InitRSISecretSauce(rssData, RSS_Symbol)) @@ -779,6 +801,7 @@ int OnInit() (EnableRSIScalpingNVDA ? "RSIScalpingNVDA " : ""), (EnableRSIScalpingTSLA ? "RSIScalpingTSLA " : ""), (EnableRSIScalpingXAUUSD ? "RSIScalpingXAUUSD " : ""), + (EnableRSIScalpingMU ? "RSIScalpingMU " : ""), (EnableRSISecretSauce ? "RSISecretSauce " : ""), (EnableSuperEMA ? "SuperEMA " : ""), (EnableRSIConsolidation ? "RSIConsolidation " : ""), @@ -822,6 +845,8 @@ void OnDeinit(const int reason) if(EnableRSIScalpingXAUUSD) DeinitRSIScalping(rsXAUUSDData); + if(EnableRSIScalpingMU) + DeinitRSIScalping(rsMUData); if(EnableRSISecretSauce) DeinitRSISecretSauce(rssData); @@ -906,6 +931,13 @@ void OnTick() RS_UseReversalEscape, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult, RS_XAUUSD_UseTrailingStop, RS_XAUUSD_TrailDistancePoints, RS_XAUUSD_TrailActivationPoints); + if(EnableRSIScalpingMU) + ProcessRSIScalping(rsMUData, RS_MU_Symbol, RS_MU_TimeFrame, RS_MU_RSI_Period, RS_MU_RSI_Applied_Price, + RS_MU_RSI_Overbought, RS_MU_RSI_Oversold, RS_MU_RSI_Target_Buy, RS_MU_RSI_Target_Sell, + RS_MU_BarsToWait, g_Pos_RS_MU, RS_MU_MagicNumber, + false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, + RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult, + false, 0.0, 0.0); if(EnableRSISecretSauce) ProcessRSISecretSauce(rssData, g_RSS_LotSize); diff --git a/frontline/cluster-fuck/_united-V2/report.png b/frontline/cluster-latest/report.png similarity index 100% rename from frontline/cluster-fuck/_united-V2/report.png rename to frontline/cluster-latest/report.png diff --git a/frontline/cluster-fuck/_united-V2/self-evaluate.mq5 b/frontline/cluster-latest/self-evaluate.mq5 similarity index 100% rename from frontline/cluster-fuck/_united-V2/self-evaluate.mq5 rename to frontline/cluster-latest/self-evaluate.mq5 diff --git a/frontline/united_template/v2-300U.set b/frontline/united_template/v2-300U.set new file mode 100644 index 0000000000000000000000000000000000000000..db21785b8711534aa754e1705a6c301e1a3f5011 GIT binary patch literal 35352 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 literal 0 HcmV?d00001 diff --git a/frontline/cluster-fuck/RSIScalpingNVDA-trailing/NVDA_Genetic_Optimization.set b/frontline/units-trailing/RSIScalpingNVDA-trailing-V2/NVDA_Genetic_Optimization.set similarity index 74% rename from frontline/cluster-fuck/RSIScalpingNVDA-trailing/NVDA_Genetic_Optimization.set rename to frontline/units-trailing/RSIScalpingNVDA-trailing-V2/NVDA_Genetic_Optimization.set index 81b89e6..4756926 100644 --- a/frontline/cluster-fuck/RSIScalpingNVDA-trailing/NVDA_Genetic_Optimization.set +++ b/frontline/units-trailing/RSIScalpingNVDA-trailing-V2/NVDA_Genetic_Optimization.set @@ -22,6 +22,16 @@ TimeFrame=16387||0||16385||16390||Y ; === PHASE 3: POSITION SIZING (Optimize with caution) === LotSize=50.0||5.0||10.0||100.0||Y +; === Trailing stop (main.mq5 1.01+) === +UseTrailingStop=true||false||0||true||N +TrailingStopDistancePoints=375.0||25.0||100.0||800.0||Y +TrailingActivationPoints=75.0||5.0||0.0||300.0||Y + +; === Session filter new entries UTC (main.mq5 1.02+) === +UseSessionFilterUTC=false||false||0||true||Y +TradeStartHourUTC=9||1||6||14||Y +TradeEndHourUTC=22||1||18||24||N + ; === FIXED PARAMETERS (Do Not Optimize) === RSI_Applied_Price=1||0||1||1||N MagicNumber=12345||0||12345||12345||N diff --git a/frontline/cluster-fuck/RSIScalpingNVDA-trailing/NVDA_Genetic_Optimization_Alternative.set b/frontline/units-trailing/RSIScalpingNVDA-trailing-V2/NVDA_Genetic_Optimization_Alternative.set similarity index 67% rename from frontline/cluster-fuck/RSIScalpingNVDA-trailing/NVDA_Genetic_Optimization_Alternative.set rename to frontline/units-trailing/RSIScalpingNVDA-trailing-V2/NVDA_Genetic_Optimization_Alternative.set index 3fca2be..998ef53 100644 --- a/frontline/cluster-fuck/RSIScalpingNVDA-trailing/NVDA_Genetic_Optimization_Alternative.set +++ b/frontline/units-trailing/RSIScalpingNVDA-trailing-V2/NVDA_Genetic_Optimization_Alternative.set @@ -18,6 +18,16 @@ TimeFrame=16387||0||16385||16390||Y ; === PHASE 3: POSITION SIZING === LotSize=50.0||5.0||10.0||100.0||Y +; === Trailing stop (main.mq5 1.01+) === +UseTrailingStop=true||false||0||true||N +TrailingStopDistancePoints=375.0||25.0||100.0||800.0||Y +TrailingActivationPoints=75.0||5.0||0.0||300.0||Y + +; === Session filter new entries UTC (main.mq5 1.02+) === +UseSessionFilterUTC=false||false||0||true||Y +TradeStartHourUTC=9||1||6||14||Y +TradeEndHourUTC=22||1||18||24||N + ; === FIXED PARAMETERS === RSI_Applied_Price=1||0||1||1||N MagicNumber=12345||0||12345||12345||N diff --git a/frontline/cluster-fuck/RSIScalpingNVDA-trailing/OPTIMIZATION_GUIDE.md b/frontline/units-trailing/RSIScalpingNVDA-trailing-V2/OPTIMIZATION_GUIDE.md similarity index 100% rename from frontline/cluster-fuck/RSIScalpingNVDA-trailing/OPTIMIZATION_GUIDE.md rename to frontline/units-trailing/RSIScalpingNVDA-trailing-V2/OPTIMIZATION_GUIDE.md diff --git a/frontline/cluster-fuck/RSIScalpingNVDA-trailing/main.mq5 b/frontline/units-trailing/RSIScalpingNVDA-trailing-V2/main.mq5 similarity index 90% rename from frontline/cluster-fuck/RSIScalpingNVDA-trailing/main.mq5 rename to frontline/units-trailing/RSIScalpingNVDA-trailing-V2/main.mq5 index 5950bce..a95b16d 100644 --- a/frontline/cluster-fuck/RSIScalpingNVDA-trailing/main.mq5 +++ b/frontline/units-trailing/RSIScalpingNVDA-trailing-V2/main.mq5 @@ -5,7 +5,7 @@ //+------------------------------------------------------------------+ #property copyright "Copyright 2025, MetaQuotes Ltd." #property link "https://www.mql5.com" -#property version "1.01" +#property version "1.02" #include #include "../_united/MagicNumberHelpers.mqh" @@ -28,6 +28,12 @@ input bool UseTrailingStop = true; // move SL behind bid/ask whi input double TrailingStopDistancePoints = 375.0; // SL distance from bid/ask (points) input double TrailingActivationPoints = 75.0; // min profit before trailing (0 = same as distance) +input group "=== Session filter new entries (UTC) ===" +// Stocks/CFDs often shift behaviour around major cash opens; some NVDA 1h charts show a sharp volume + direction change near 09:00 UTC. Filter affects OPEN only (exits/trailing unchanged). +input bool UseSessionFilterUTC = false; // if true, block new entries outside [TradeStartHourUTC, TradeEndHourUTC) +input int TradeStartHourUTC = 9; // allow new trades when TimeGMT hour >= this (0..23) +input int TradeEndHourUTC = 22; // allow new trades when TimeGMT hour < this (exclusive). If Start>End, window wraps midnight (e.g. 22..6) + //--- Global variables CTrade trade; int rsi_handle; @@ -105,6 +111,34 @@ void OnTick() CheckEntrySignals(); } +//+------------------------------------------------------------------+ +//| New entries allowed in [TradeStartHourUTC, TradeEndHourUTC) GMT | +//+------------------------------------------------------------------+ +bool IsWithinNewEntryWindowUTC() +{ + if(!UseSessionFilterUTC) + return true; + + int s = TradeStartHourUTC; + int e = TradeEndHourUTC; + if(s < 0) s = 0; + if(s > 23) s = 23; + if(e < 0) e = 0; + if(e > 24) e = 24; + + MqlDateTime dt; + TimeToStruct(TimeGMT(), dt); + const int h = dt.hour; + + if(s == e) + return true; + + if(s < e) + return (h >= s && h < e); + + return (h >= s || h < e); +} + //+------------------------------------------------------------------+ //| Update RSI values | //+------------------------------------------------------------------+ @@ -305,6 +339,9 @@ void CheckExistingPosition() //+------------------------------------------------------------------+ void CheckEntrySignals() { + if(!IsWithinNewEntryWindowUTC()) + return; + // Buy signal: RSI crosses from oversold to above oversold (checking the actual crossover) if(rsi_two_bars_ago <= RSI_Oversold && rsi_prev > RSI_Oversold) { diff --git a/frontline/units/EMASlopeDistanceCocktailXAUUSD/EMASlopeDistanceCocktailXAUUSD_Genetic_Optimization.set b/frontline/units/EMASlopeDistanceCocktailXAUUSD/EMASlopeDistanceCocktailXAUUSD_Genetic_Optimization.set new file mode 100644 index 0000000..8e9725e --- /dev/null +++ b/frontline/units/EMASlopeDistanceCocktailXAUUSD/EMASlopeDistanceCocktailXAUUSD_Genetic_Optimization.set @@ -0,0 +1,35 @@ +; saved on 2026.05.13 +; genetic optimization set for EMASlopeDistanceCocktailXAUUSD/main.mq5 +; load in MT5 Strategy Tester -> Inputs -> Load +; format: Parameter=Current||Start||Step||Stop||Optimize(Y/N) +; +; ENUM_TIMEFRAMES: M1=1 M5=5 M15=15 M30=30 H1=16385 H4=16388 D1=16408 +; Timeframe fixed at H1 (16385); sweeping 0..49153 can pick invalid enum values. +; +; Ranges/steps match Desktop 123.set (2026.05.13); Y marks parameters included in genetic optimization. + +; === EMA / trigger thresholds === +EMA_Periode=50||50||1||500||Y +PreisSchwelle=700.0||70.0||70.0||7000.0||Y +SteigungSchwelle=25.0||2.5||2.5||250.0||Y +ÜberwachungTimeout=340||1||1||3400||Y +TrailingStop=370.0||37.0||37.0||3700.0||Y +LotGröße=0.07||0.007||0.007||0.7||Y + +; === execution / data === +MagicNumber=135790||135790||1||1357900||N +UseSpreadAdjustment=true||false||0||true||N +Timeframe=16385||16385||0||16385||N +UseBarData=true||false||0||true||N + +; === crossover / profit management === +MaxTradesPerCrossover=10||1||1||100||Y +ProfitCheckBars=15||1||1||150||Y +CloseUnprofitableTrades=true||false||0||true||N + +; === weekly ADX filter === +UseWeeklyADXFilter=true||false||0||true||N +WeeklyADXPeriod=15||1||1||150||Y +WeeklyADXMin=40.0||4.0||4.0||400.0||Y +WeeklyADXBarShift=2||1||1||20||Y +WeeklyADXUseDirection=true||false||0||true||N diff --git a/frontline/units/EMASlopeDistanceCocktailXAUUSD/main.mq5 b/frontline/units/EMASlopeDistanceCocktailXAUUSD/main.mq5 index 06b1086..586e17e 100644 --- a/frontline/units/EMASlopeDistanceCocktailXAUUSD/main.mq5 +++ b/frontline/units/EMASlopeDistanceCocktailXAUUSD/main.mq5 @@ -8,24 +8,24 @@ #property version "1.00" #include #include "../_united/MagicNumberHelpers.mqh" -//--- Eingabeparameter (Input Parameters) - Optimized Profitable Parameters -input int EMA_Periode = 50; // EMA Periode -input double PreisSchwelle = 700.0; // Preisbewegung Schwelle in Pips -input double SteigungSchwelle = 25.0; // EMA Steigung Schwelle in Pips +//--- Eingabeparameter (Input Parameters) — synced with Desktop 123.set (2026.05.13) +input int EMA_Periode = 85; // EMA Periode +input double PreisSchwelle = 350.0; // Preisbewegung Schwelle in Pips +input double SteigungSchwelle = 22.5; // EMA Steigung Schwelle in Pips input int ÜberwachungTimeout = 340; // Überwachungszeit in Sekunden -input double TrailingStop = 370.0; // Gleitender Stop in Pips +input double TrailingStop = 74.0; // Gleitender Stop in Pips input double LotGröße = 0.07; // Handelsvolumen input int MagicNumber = 135790; // Magic Number für Trades input bool UseSpreadAdjustment = true; // Spread-Anpassung verwenden input ENUM_TIMEFRAMES Timeframe = PERIOD_H1; // Zeitraum für Analyse input bool UseBarData = true; // Bar-Daten statt Tick-Daten verwenden -input int MaxTradesPerCrossover = 10; // Maximale Trades pro Crossover-Ereignis -input int ProfitCheckBars = 15; // Bars bis zur Profit-Prüfung +input int MaxTradesPerCrossover = 48; // Maximale Trades pro Crossover-Ereignis +input int ProfitCheckBars = 78; // Bars bis zur Profit-Prüfung input bool CloseUnprofitableTrades = true; // Unprofitable Trades nach X Bars schließen input bool UseWeeklyADXFilter = true; // W1 ADX Trendfilter aktivieren -input int WeeklyADXPeriod = 15; // ADX-Periode auf W1 -input double WeeklyADXMin = 40.0; // Minimaler ADX fuer Trendfreigabe -input int WeeklyADXBarShift = 2; // 1=letzte geschlossene W1-Kerze +input int WeeklyADXPeriod = 28; // ADX-Periode auf W1 +input double WeeklyADXMin = 25.0; // Minimaler ADX fuer Trendfreigabe +input int WeeklyADXBarShift = 8; // 1=letzte geschlossene W1-Kerze input bool WeeklyADXUseDirection = true; // +DI/-DI Richtung mitpruefen //--- Globale Variablen (Global Variables) diff --git a/frontline/units/RSIConsolidationXAUUSD/RSIConsolidation.mq5 b/frontline/units/RSIConsolidationXAUUSD/RSIConsolidation.mq5 deleted file mode 100644 index 09c4d7d..0000000 --- a/frontline/units/RSIConsolidationXAUUSD/RSIConsolidation.mq5 +++ /dev/null @@ -1,347 +0,0 @@ -//+------------------------------------------------------------------+ -//| RSIConsolidation.mq5 | -//| Mean-reversion RSI for ranging markets; trend filters block runs | -//+------------------------------------------------------------------+ -#property copyright "Copyright 2025" -#property link "https://www.mql5.com" -#property version "1.00" - -#include - -//--- Symbol (empty = chart symbol) -input group "=== Symbol & session ===" -input string InpSymbol = ""; - -input group "=== Timeframe & bar logic ===" -input ENUM_TIMEFRAMES SignalTF = PERIOD_M15; -input bool EntryOnNewBarOnly = true; - -//--- Core: no trend / consolidation regime -input group "=== Regime: consolidation (anti-trend) ===" -input int ADX_Period = 23; -input double ADX_Max = 29.0; -input bool UseATRRatioFilter = true; -input int ATR_Period = 8; -input int ATR_SMA_Period = 35; -input double ATR_Ratio_Max = 1.36; -input bool UseFlatEMAFilter = true; -input int EMA_Fast = 13; -input int EMA_Slow = 17; -input double EMA_Separation_MaxPct = 0.26; - -//--- RSI entries (fade extremes toward mean) -input group "=== RSI entries ===" -input int RSI_Period = 8; -input ENUM_APPLIED_PRICE RSI_Price = PRICE_OPEN; -input double RSI_Oversold = 22.0; -input double RSI_Overbought = 63.0; - -//--- Exits: mean target + hard ATR bracket -input group "=== Exits ===" -input bool UseRSI_MeanExit = true; -input double RSI_Exit_Long = 48.0; -input double RSI_Exit_Short = 52.0; -input double SL_ATR_Mult = 2.15; -input double TP_ATR_Mult = 2.40; -input int MaxBarsInTrade = 54; - -input group "=== Risk & execution ===" -input double Lots = 0.10; -input ulong MagicNumber = 20250420; -input int Slippage = 10; -input int MaxSpreadPoints = 28; - -CTrade trade; -string g_sym; - -int h_rsi = INVALID_HANDLE; -int h_adx = INVALID_HANDLE; -int h_atr = INVALID_HANDLE; -int h_ema_fast = INVALID_HANDLE; -int h_ema_slow = INVALID_HANDLE; - -datetime g_last_bar = 0; - -bool PositionExistsByMagicSym(string sym, ulong magic) -{ - for(int i = PositionsTotal() - 1; i >= 0; i--) - { - ulong t = PositionGetTicket(i); - if(t == 0) continue; - if(PositionGetString(POSITION_SYMBOL) == sym && PositionGetInteger(POSITION_MAGIC) == (long)magic) - return true; - } - return false; -} - -ulong GetPositionTicketByMagicSym(string sym, ulong magic) -{ - for(int i = PositionsTotal() - 1; i >= 0; i--) - { - ulong t = PositionGetTicket(i); - if(t == 0) continue; - if(PositionGetString(POSITION_SYMBOL) == sym && PositionGetInteger(POSITION_MAGIC) == (long)magic) - return t; - } - return 0; -} - -bool SelectPositionTicketSymMagic(ulong ticket, string sym, ulong magic) -{ - if(!PositionSelectByTicket(ticket)) return false; - return PositionGetString(POSITION_SYMBOL) == sym && PositionGetInteger(POSITION_MAGIC) == (long)magic; -} - -double NormalizeVolume(string sym, double vol) -{ - double minLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN); - double maxLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX); - double step = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP); - if(step > 0.0) - vol = MathFloor(vol / step) * step; - if(vol < minLot) vol = minLot; - if(vol > maxLot) vol = maxLot; - return vol; -} - -int CurrentSpreadPoints(string sym) -{ - long spread = 0; - if(!SymbolInfoInteger(sym, SYMBOL_SPREAD, spread)) - return 999999; - return (int)spread; -} - -double MinStopsDistancePrice(string sym) -{ - long lvl = 0; - if(!SymbolInfoInteger(sym, SYMBOL_TRADE_STOPS_LEVEL, lvl)) - return 0; - double pt = SymbolInfoDouble(sym, SYMBOL_POINT); - if(pt <= 0) - return 0; - return (double)lvl * pt; -} - -bool Copy1(int handle, double &v) -{ - double b[]; - ArraySetAsSeries(b, true); - if(CopyBuffer(handle, 0, 0, 1, b) < 1) return false; - v = b[0]; - return true; -} - -bool RSI_Buffers(double &cur, double &prev, double &twoAgo) -{ - double b[]; - ArraySetAsSeries(b, true); - if(CopyBuffer(h_rsi, 0, 0, 3, b) < 3) return false; - cur = b[0]; - prev = b[1]; - twoAgo = b[2]; - return true; -} - -bool Regime_IsConsolidation() -{ - double adx = 0; - if(!Copy1(h_adx, adx)) - return false; - if(adx >= ADX_Max) - return false; - - if(UseATRRatioFilter) - { - double atrArr[], atrSma[]; - ArraySetAsSeries(atrArr, true); - if(CopyBuffer(h_atr, 0, 0, ATR_SMA_Period + 1, atrArr) < ATR_SMA_Period + 1) - return false; - double sum = 0; - for(int i = 1; i <= ATR_SMA_Period; i++) - sum += atrArr[i]; - double smaAtr = sum / (double)ATR_SMA_Period; - if(smaAtr <= 0.0) - return false; - double ratio = atrArr[0] / smaAtr; - if(ratio > ATR_Ratio_Max) - return false; - } - - if(UseFlatEMAFilter) - { - double ef[], es[]; - ArraySetAsSeries(ef, true); - ArraySetAsSeries(es, true); - if(CopyBuffer(h_ema_fast, 0, 0, 1, ef) < 1) return false; - if(CopyBuffer(h_ema_slow, 0, 0, 1, es) < 1) return false; - double c = SymbolInfoDouble(g_sym, SYMBOL_BID); - if(c <= 0) return false; - double sep = MathAbs(ef[0] - es[0]) / c * 100.0; - if(sep > EMA_Separation_MaxPct) - return false; - } - - return true; -} - -bool Entry_BuyCross(double twoAgo, double prev) -{ - return (twoAgo <= RSI_Oversold && prev > RSI_Oversold); -} - -bool Entry_SellCross(double twoAgo, double prev) -{ - return (twoAgo >= RSI_Overbought && prev < RSI_Overbought); -} - -void TryCloseByRSI(ENUM_POSITION_TYPE typ, double rsi) -{ - ulong tk = GetPositionTicketByMagicSym(g_sym, MagicNumber); - if(tk == 0 || !SelectPositionTicketSymMagic(tk, g_sym, MagicNumber)) - return; - if(!UseRSI_MeanExit) - return; - if(typ == POSITION_TYPE_BUY && rsi >= RSI_Exit_Long) - trade.PositionClose(tk); - else if(typ == POSITION_TYPE_SELL && rsi <= RSI_Exit_Short) - trade.PositionClose(tk); -} - -void ManageOpenPosition(double rsi) -{ - ulong tk = GetPositionTicketByMagicSym(g_sym, MagicNumber); - if(tk == 0 || !SelectPositionTicketSymMagic(tk, g_sym, MagicNumber)) - return; - ENUM_POSITION_TYPE typ = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - datetime openT = (datetime)PositionGetInteger(POSITION_TIME); - int barsAgo = iBarShift(g_sym, SignalTF, openT, false); - if(barsAgo >= 0 && barsAgo >= MaxBarsInTrade) - { - trade.PositionClose(tk); - return; - } - TryCloseByRSI(typ, rsi); -} - -int OnInit() -{ - g_sym = InpSymbol; - StringTrimLeft(g_sym); - StringTrimRight(g_sym); - if(StringLen(g_sym) == 0) - g_sym = _Symbol; - - if(!SymbolSelect(g_sym, true)) - { - Print("RSIConsolidation: SymbolSelect failed: ", g_sym); - return INIT_FAILED; - } - - trade.SetExpertMagicNumber(MagicNumber); - trade.SetDeviationInPoints(Slippage); - trade.SetTypeFilling(ORDER_FILLING_RETURN); - - h_rsi = iRSI(g_sym, SignalTF, RSI_Period, RSI_Price); - h_adx = iADX(g_sym, SignalTF, ADX_Period); - h_atr = iATR(g_sym, SignalTF, ATR_Period); - h_ema_fast = iMA(g_sym, SignalTF, EMA_Fast, 0, MODE_EMA, PRICE_CLOSE); - h_ema_slow = iMA(g_sym, SignalTF, EMA_Slow, 0, MODE_EMA, PRICE_CLOSE); - - if(h_rsi == INVALID_HANDLE || h_adx == INVALID_HANDLE || h_atr == INVALID_HANDLE - || h_ema_fast == INVALID_HANDLE || h_ema_slow == INVALID_HANDLE) - { - Print("RSIConsolidation: indicator init failed"); - return INIT_FAILED; - } - - Print("RSIConsolidation: symbol=", g_sym, " TF=", EnumToString(SignalTF)); - return INIT_SUCCEEDED; -} - -void OnDeinit(const int reason) -{ - if(h_rsi != INVALID_HANDLE) IndicatorRelease(h_rsi); - if(h_adx != INVALID_HANDLE) IndicatorRelease(h_adx); - if(h_atr != INVALID_HANDLE) IndicatorRelease(h_atr); - if(h_ema_fast != INVALID_HANDLE) IndicatorRelease(h_ema_fast); - if(h_ema_slow != INVALID_HANDLE) IndicatorRelease(h_ema_slow); -} - -bool EnoughHistory() -{ - int need = MathMax(RSI_Period + 3, MathMax(ADX_Period + 2, ATR_SMA_Period + 3)); - if(Bars(g_sym, SignalTF) < need) - return false; - return true; -} - -void OnTick() -{ - if(!EnoughHistory()) - return; - - if(MaxSpreadPoints > 0 && CurrentSpreadPoints(g_sym) > MaxSpreadPoints) - return; - - double rsi, rsiPrev, rsi2; - if(!RSI_Buffers(rsi, rsiPrev, rsi2)) - return; - - datetime barTime = iTime(g_sym, SignalTF, 0); - bool isNew = (barTime != g_last_bar); - - if(PositionExistsByMagicSym(g_sym, MagicNumber)) - { - ManageOpenPosition(rsi); - if(isNew) - g_last_bar = barTime; - return; - } - - if(EntryOnNewBarOnly && !isNew) - return; - - g_last_bar = barTime; - - if(!Regime_IsConsolidation()) - return; - - double atrArr[]; - ArraySetAsSeries(atrArr, true); - if(CopyBuffer(h_atr, 0, 0, 1, atrArr) < 1) - return; - double atr = atrArr[0]; - int dig = (int)SymbolInfoInteger(g_sym, SYMBOL_DIGITS); - - double slDist = atr * SL_ATR_Mult; - double tpDist = atr * TP_ATR_Mult; - double minD = MinStopsDistancePrice(g_sym); - if(slDist < minD) - slDist = minD; - if(tpDist < minD) - tpDist = minD; - - double vol = NormalizeVolume(g_sym, Lots); - - if(Entry_BuyCross(rsi2, rsiPrev)) - { - double ask = SymbolInfoDouble(g_sym, SYMBOL_ASK); - double sl = ask - slDist; - double tp = ask + tpDist; - sl = NormalizeDouble(sl, dig); - tp = NormalizeDouble(tp, dig); - trade.Buy(vol, g_sym, ask, sl, tp, "RSIConsolidation BUY"); - } - else if(Entry_SellCross(rsi2, rsiPrev)) - { - double bid = SymbolInfoDouble(g_sym, SYMBOL_BID); - double sl = bid + slDist; - double tp = bid - tpDist; - sl = NormalizeDouble(sl, dig); - tp = NormalizeDouble(tp, dig); - trade.Sell(vol, g_sym, bid, sl, tp, "RSIConsolidation SELL"); - } -} - -//+------------------------------------------------------------------+ diff --git a/frontline/units/RSIConsolidationXAUUSD/RSIConsolidation_optimization.set b/frontline/units/RSIConsolidationXAUUSD/RSIConsolidation_optimization.set deleted file mode 100644 index d6a75ed..0000000 --- a/frontline/units/RSIConsolidationXAUUSD/RSIConsolidation_optimization.set +++ /dev/null @@ -1,37 +0,0 @@ -; RSIConsolidation.mq5 — optimization preset (Strategy Tester → Inputs → Load) -; Format: Name=Current||Start||Step||Stop||Y|N (Y = include in optimization) -; -; === Symbol & session === -InpSymbol= -; === Timeframe & bar logic === -; SignalTF: optimize per run (ENUM is non-sequential); M15=15, H1=16385, H4=16388 -SignalTF=15||15||0||15||N -EntryOnNewBarOnly=true||false||0||true||N -; === Regime: consolidation (anti-trend) === -ADX_Period=14||7||1||28||Y -ADX_Max=22.0||16.0||1.0||32.0||Y -UseATRRatioFilter=true||false||0||true||N -ATR_Period=14||7||1||21||Y -ATR_SMA_Period=50||20||5||100||Y -ATR_Ratio_Max=1.18||1.0||0.02||1.35||Y -UseFlatEMAFilter=true||false||0||true||N -EMA_Fast=8||5||1||13||Y -EMA_Slow=21||13||2||34||Y -EMA_Separation_MaxPct=0.22||0.08||0.02||0.45||Y -; === RSI entries === -RSI_Period=14||7||1||21||Y -RSI_Price=1||1||1||7||Y -RSI_Oversold=32.0||22.0||1.0||42.0||Y -RSI_Overbought=68.0||58.0||1.0||78.0||Y -; === Exits === -UseRSI_MeanExit=true||false||0||true||N -RSI_Exit_Long=52.0||48.0||1.0||62.0||Y -RSI_Exit_Short=48.0||38.0||1.0||52.0||Y -SL_ATR_Mult=1.35||0.9||0.05||2.2||Y -TP_ATR_Mult=1.85||1.0||0.05||3.0||Y -MaxBarsInTrade=36||12||2||80||Y -; === Risk & execution === -Lots=0.1||0.1||0.01||1.0||N -MagicNumber=20250420||20250420||1||20250420||N -Slippage=10||10||1||100||N -MaxSpreadPoints=0||0||1||30||Y diff --git a/frontline/units/RSICrossOverReversalXAUUSD/RSICrossOverReversalXAUUSD_Genetic_Optimization.set b/frontline/units/RSICrossOverReversalXAUUSD/RSICrossOverReversalXAUUSD_Genetic_Optimization.set new file mode 100644 index 0000000..ac331d4 --- /dev/null +++ b/frontline/units/RSICrossOverReversalXAUUSD/RSICrossOverReversalXAUUSD_Genetic_Optimization.set @@ -0,0 +1,38 @@ +; RSICrossOverReversalXAUUSD/main.mq5 — Strategy Tester → Inputs → Load +; +; MT5 line format: Name=Value||From||Step||To||Optimize +; Value = input default when you Load this file +; From, Step, To = optimization range when Optimize=Y (Genetic / slow complete algorithm) +; Optimize=N = keep Value; From/Step/To are ignored +; +; First column matches main.mq5 source defaults (not the old Desktop 123 snapshot). + +MagicNumber=7||7||1||7||N +rsiPeriod=19||10||1||35||Y +overboughtLevel=93||65||2||95||Y +oversoldLevel=22||10||1||45||Y +entryRSIBuySpread=0.0||0.0||0.5||8.0||Y +entryRSISellSpread=0.0||0.0||0.5||8.0||Y +lotSize=0.1||0.1||0.01||0.5||N +slippage=3||3||1||3||N +cooldownSeconds=209||60||30||600||Y +TimeFrame1=1||1||0||1||N +TimeFrame2=1||1||0||1||N +BarTimeFrame=12||12||0||12||N +emaPeriod=140||50||10||300||Y +emaSlopeThreshold=105.0||20.0||5.0||200.0||Y +exitBuyRSI=86.0||65.0||1.0||92.0||Y +exitSellRSI=10.0||5.0||1.0||40.0||Y +TrailingStop=295.0||80.0||15.0||450.0||Y +emaDistanceThreshold=165.0||40.0||10.0||350.0||Y +tradingHourOneBegin=24||0||1||23||N +tradingHourOneEnd=22||0||1||23||N +tradingHourTwoBegin=6||0||1||14||Y +tradingHourTwoEnd=19||14||1||23||Y +Sunday=false||false||0||true||Y +Monday=false||false||0||true||Y +Tuesday=true||false||0||true||Y +Wednesday=true||false||0||true||Y +Thursday=true||false||0||true||Y +Friday=false||false||0||true||Y +Saturday=false||false||0||true||Y diff --git a/frontline/units/RSIMidPointHijackXAUUSD/RSIMidPointHijackXAUUSD_Genetic_Optimization.set b/frontline/units/RSIMidPointHijackXAUUSD/RSIMidPointHijackXAUUSD_Genetic_Optimization.set new file mode 100644 index 0000000..73379c5 --- /dev/null +++ b/frontline/units/RSIMidPointHijackXAUUSD/RSIMidPointHijackXAUUSD_Genetic_Optimization.set @@ -0,0 +1,50 @@ +; RSIMidPointHijackXAUUSD/main.mq5 — Strategy Tester → Inputs → Load (Genetic optimization) +; Format: Parameter=Current||Start||Step||Stop||Optimize(Y/N) +; +; Baseline from Desktop 123.set (2026.05.13). InpTimeframe fixed at H1 (16385) to avoid invalid ENUM_TIMEFRAMES. +; RSI level sweeps capped at 100; hour sweeps capped at 23 (123.set used wider columns that are invalid for this EA). + +; === General Settings === +InpTimeframe=16385||16385||1||16385||N +InpLotSize=0.1||0.01||0.01||1.0||Y +InpMagicNumberRSIFollow=1001||1001||1||10010||N +InpMagicNumberRSIReverse=1002||1002||1||10020||N +InpMagicNumberEMACross=1003||1003||1||10030||N + +; === Strategy Switches === +InpEnableRSIFollow=true||false||0||true||N +InpEnableRSIReverse=true||false||0||true||N +InpEnableEMACross=true||false||0||true||N +InpEnableStrategyLock=true||false||0||true||N +InpLockProfitThreshold=6.0||0.6||0.6||60.0||Y +InpCloseOppositeTrades=true||false||0||true||N + +; === RSI Follow Strategy === +InpRSIPeriod=32||8||2||96||Y +InpRSIOverbought=78||60||1||95||Y +InpRSIOversold=46||5||1||45||Y +InpRSIExitLevel=44||10||1||90||Y +InpRSIFollowStartHour=23||0||1||23||Y +InpRSIFollowEndHour=8||0||1||23||Y +InpRSIFollowCloseOutsideHours=false||false||0||true||N + +; === RSI Reverse Strategy === +InpRSIReversePeriod=59||14||2||96||Y +InpRSIReverseOverbought=51||55||1||95||Y +InpRSIReverseOversold=49||5||1||50||Y +InpRSIReverseCrossLevel=53||45||1||70||Y +InpRSIReverseExitLevel=48||10||1||90||Y +InpRSIReverseStartHour=7||0||1||23||Y +InpRSIReverseEndHour=13||0||1||23||Y +InpRSIReverseCloseOutsideHours=false||false||0||true||N +InpRSIReverseCooldownBars=15||1||1||150||Y +InpRSIReverseCooldownOnLoss=true||false||0||true||N + +; === EMA Cross Strategy === +InpEMAPeriod=120||20||5||200||Y +InpEMACrossStartHour=8||0||1||23||Y +InpEMACrossEndHour=14||0||1||23||Y +InpEMACrossCloseOutsideHours=true||false||0||true||N +InpUseEMADistanceEntry=true||false||0||true||N +InpEMADistancePips=160.0||16.0||16.0||1600.0||Y +InpEMADistancePeriod=26||5||1||60||Y diff --git a/frontline/units/RSIReversalAsianAUDUSD/RSIReversalAsianAUDUSD_Genetic_Optimization.set b/frontline/units/RSIReversalAsianAUDUSD/RSIReversalAsianAUDUSD_Genetic_Optimization.set new file mode 100644 index 0000000..9fbe5fe --- /dev/null +++ b/frontline/units/RSIReversalAsianAUDUSD/RSIReversalAsianAUDUSD_Genetic_Optimization.set @@ -0,0 +1,23 @@ +; RSIReversalAsianAUDUSD/main.mq5 — Strategy Tester → Inputs → Load (Genetic optimization) +; Format: Parameter=Current||Start||Step||Stop||Optimize(Y/N) +; Baseline aligned with current input defaults and Desktop 123.set-style ranges (2026.05.13). +; +; Core RSI / exits +RSIPeriod=28||14||2||40||Y +OverboughtLevel=68.0||55.0||1.0||80.0||Y +OversoldLevel=30.0||18.0||1.0||42.0||Y +TakeProfitPips=175||50||25||350||Y +StopLossPips=5||5||5||80||Y +MaxLotSize=0.2||0.01||0.01||0.2||N +MaxSpread=1000||200||100||2000||Y +MaxDuration=340||48||24||720||Y +UseStopLoss=false||false||0||true||N +UseTakeProfit=false||false||0||true||N +UseRSIExit=true||false||0||true||N +RSIExitLevel=48.0||40.0||1.0||55.0||Y +CloseOutsideSession=true||false||0||true||Y +; Panel (usually fixed; colors as in MT5 saved sets) +PanelBackground=0 +PanelText=16777215 +PanelX=10||10||1||100||N +PanelY=20||20||1||200||N diff --git a/frontline/units/RSIReversalAsianGBPUSD/RSIReversalAsianAUDUSD_Genetic_Optimization.set b/frontline/units/RSIReversalAsianGBPUSD/RSIReversalAsianAUDUSD_Genetic_Optimization.set new file mode 100644 index 0000000..9fbe5fe --- /dev/null +++ b/frontline/units/RSIReversalAsianGBPUSD/RSIReversalAsianAUDUSD_Genetic_Optimization.set @@ -0,0 +1,23 @@ +; RSIReversalAsianAUDUSD/main.mq5 — Strategy Tester → Inputs → Load (Genetic optimization) +; Format: Parameter=Current||Start||Step||Stop||Optimize(Y/N) +; Baseline aligned with current input defaults and Desktop 123.set-style ranges (2026.05.13). +; +; Core RSI / exits +RSIPeriod=28||14||2||40||Y +OverboughtLevel=68.0||55.0||1.0||80.0||Y +OversoldLevel=30.0||18.0||1.0||42.0||Y +TakeProfitPips=175||50||25||350||Y +StopLossPips=5||5||5||80||Y +MaxLotSize=0.2||0.01||0.01||0.2||N +MaxSpread=1000||200||100||2000||Y +MaxDuration=340||48||24||720||Y +UseStopLoss=false||false||0||true||N +UseTakeProfit=false||false||0||true||N +UseRSIExit=true||false||0||true||N +RSIExitLevel=48.0||40.0||1.0||55.0||Y +CloseOutsideSession=true||false||0||true||Y +; Panel (usually fixed; colors as in MT5 saved sets) +PanelBackground=0 +PanelText=16777215 +PanelX=10||10||1||100||N +PanelY=20||20||1||200||N diff --git a/frontline/cluster-fuck/RSIReversalAsianAUDUSD/main.mq5 b/frontline/units/RSIReversalAsianGBPUSD/main.mq5 similarity index 96% rename from frontline/cluster-fuck/RSIReversalAsianAUDUSD/main.mq5 rename to frontline/units/RSIReversalAsianGBPUSD/main.mq5 index 92c7968..6ac07bd 100644 --- a/frontline/cluster-fuck/RSIReversalAsianAUDUSD/main.mq5 +++ b/frontline/units/RSIReversalAsianGBPUSD/main.mq5 @@ -1,5 +1,5 @@ //+------------------------------------------------------------------+ -//| SimpleRSIReversalAUDUSD.mq5 | +//| RSIReversalAsianGBPUSD.mq5 | //| Copyright 2024, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ @@ -11,19 +11,19 @@ // Include trade class #include -// Input parameters -input int RSIPeriod = 28; // RSI period -input double OverboughtLevel = 68; // Overbought level -input double OversoldLevel = 30; // Oversold level -input int TakeProfitPips = 175; // Take profit in pips -input int StopLossPips = 5; // Stop loss in pips +// Input parameters (defaults synced from working 123.set 2026.05.13) +input int RSIPeriod = 32; // RSI period +input double OverboughtLevel = 80; // Overbought level +input double OversoldLevel = 37; // Oversold level +input int TakeProfitPips = 225; // Take profit in pips +input int StopLossPips = 45; // Stop loss in pips input double MaxLotSize = 0.2; // Maximum lot size -input int MaxSpread = 1000; // Maximum allowed spread in pips -input int MaxDuration = 340; // Maximum trade duration in hours +input int MaxSpread = 1800; // Maximum allowed spread in pips +input int MaxDuration = 480; // Maximum trade duration in hours input bool UseStopLoss = false; // Use stop loss input bool UseTakeProfit = false; // Use take profit input bool UseRSIExit = true; // Use RSI for exit -input double RSIExitLevel = 48; // RSI level to exit (50 = neutral) +input double RSIExitLevel = 43; // RSI level to exit (50 = neutral) input bool CloseOutsideSession = true; // Close trades outside Asian session input color PanelBackground = clrBlack; // Panel background color input color PanelText = clrWhite; // Panel text color diff --git a/frontline/cluster-fuck/RSIReversalAsianAUDUSD/test-balance.png b/frontline/units/RSIReversalAsianGBPUSD/test-balance.png similarity index 100% rename from frontline/cluster-fuck/RSIReversalAsianAUDUSD/test-balance.png rename to frontline/units/RSIReversalAsianGBPUSD/test-balance.png diff --git a/frontline/units/RSIScalpingMU/main.mq5 b/frontline/units/RSIScalpingMU/main.mq5 new file mode 100644 index 0000000..5c53a5d --- /dev/null +++ b/frontline/units/RSIScalpingMU/main.mq5 @@ -0,0 +1,327 @@ +//+------------------------------------------------------------------+ +//| RSIScalping.mq5 | +//| Copyright 2025, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2025, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" + +#include +#include "../_united/MagicNumberHelpers.mqh" + +//--- Input parameters — synced with Desktop 123.set (2026.05.13) +input ENUM_TIMEFRAMES TimeFrame = PERIOD_M20; // Timeframe for Analysis +input int RSI_Period = 14; // RSI Period +input ENUM_APPLIED_PRICE RSI_Applied_Price = PRICE_CLOSE; // RSI Applied Price +input double RSI_Overbought = 32; // RSI Overbought Level +input double RSI_Oversold = 86; // RSI Oversold Level +input double RSI_Target_Buy = 100; // RSI Target for Buy Exit +input double RSI_Target_Sell = 24; // RSI Target for Sell Exit +input int BarsToWait = 34; // Bars to wait when RSI goes against position +input double LotSize = 5; // Lot Size +input int MagicNumber = 129102315; // Magic Number +input int Slippage = 3; // Slippage in points + +//--- Global variables +CTrade trade; +int rsi_handle; +double rsi_buffer[]; +double rsi_prev, rsi_current, rsi_two_bars_ago; +bool position_open = false; +int position_ticket = 0; +ENUM_POSITION_TYPE current_position_type = POSITION_TYPE_BUY; +datetime last_bar_time = 0; +bool rsi_against_position = false; +int bars_against_count = 0; + +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() +{ + // Initialize RSI indicator + rsi_handle = iRSI(_Symbol, TimeFrame, RSI_Period, RSI_Applied_Price); + if(rsi_handle == INVALID_HANDLE) + { + return(INIT_FAILED); + } + + // Initialize trade object + trade.SetExpertMagicNumber(MagicNumber); + trade.SetDeviationInPoints(Slippage); + trade.SetTypeFilling(ORDER_FILLING_FOK); + + // Allocate arrays + ArraySetAsSeries(rsi_buffer, true); + + return(INIT_SUCCEEDED); +} + +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) +{ + if(rsi_handle != INVALID_HANDLE) + IndicatorRelease(rsi_handle); +} + +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() +{ + // Check if we have enough bars + if(Bars(_Symbol, TimeFrame) < RSI_Period + 2) + { + return; + } + + // Check if this is a new bar + datetime current_bar_time = iTime(_Symbol, TimeFrame, 0); + if(current_bar_time == last_bar_time) + { + return; // Still the same bar, don't process + } + + last_bar_time = current_bar_time; + + // Update RSI values + if(!UpdateRSI()) + { + return; + } + + // Check for existing position + CheckExistingPosition(); + + // Check for new entry signals - only if no position exists for THIS EA (magic number) on THIS symbol + if(!position_open && !PositionExistsByMagic(_Symbol, MagicNumber)) + { + CheckEntrySignals(); + } +} + +//+------------------------------------------------------------------+ +//| Update RSI values | +//+------------------------------------------------------------------+ +bool UpdateRSI() +{ + if(CopyBuffer(rsi_handle, 0, 0, 3, rsi_buffer) < 3) + { + return false; + } + + rsi_current = rsi_buffer[0]; // Current bar + rsi_prev = rsi_buffer[1]; // Previous bar + rsi_two_bars_ago = rsi_buffer[2]; // Two bars ago + + return true; +} + +//+------------------------------------------------------------------+ +//| Check existing position for exit conditions | +//+------------------------------------------------------------------+ +void CheckExistingPosition() +{ + if(!position_open) + { + return; + } + + // Check if position still exists with correct magic number AND symbol for THIS EA + if(!PositionSelectByTicketSymbolAndMagic(position_ticket, _Symbol, MagicNumber)) + { + position_open = false; + position_ticket = 0; + rsi_against_position = false; + bars_against_count = 0; + return; + } + + // Exit conditions based on RSI target + if(current_position_type == POSITION_TYPE_BUY) + { + // Check if RSI is against the position (below oversold) + if(rsi_current < RSI_Oversold) + { + if(!rsi_against_position) + { + rsi_against_position = true; + bars_against_count = 1; + } + else + { + bars_against_count++; + } + + // Close position if RSI has been against for Y bars + if(bars_against_count >= BarsToWait) + { + ClosePosition(); + return; + } + } + else + { + // RSI is no longer against the position, reset counter + if(rsi_against_position) + { + rsi_against_position = false; + bars_against_count = 0; + } + + // Exit long position when RSI reaches buy target + if(rsi_current >= RSI_Target_Buy) + { + ClosePosition(); + } + } + } + else if(current_position_type == POSITION_TYPE_SELL) + { + // Check if RSI is against the position (above overbought) + if(rsi_current > RSI_Overbought) + { + if(!rsi_against_position) + { + rsi_against_position = true; + bars_against_count = 1; + } + else + { + bars_against_count++; + } + + // Close position if RSI has been against for Y bars + if(bars_against_count >= BarsToWait) + { + ClosePosition(); + return; + } + } + else + { + // RSI is no longer against the position, reset counter + if(rsi_against_position) + { + rsi_against_position = false; + bars_against_count = 0; + } + + // Exit short position when RSI reaches sell target + if(rsi_current <= RSI_Target_Sell) + { + ClosePosition(); + } + } + } +} + +//+------------------------------------------------------------------+ +//| Check for entry signals | +//+------------------------------------------------------------------+ +void CheckEntrySignals() +{ + // Buy signal: RSI crosses from oversold to above oversold (checking the actual crossover) + if(rsi_two_bars_ago <= RSI_Oversold && rsi_prev > RSI_Oversold) + { + OpenBuyPosition(); + } + + // Sell signal: RSI crosses from overbought to below overbought (checking the actual crossover) + if(rsi_two_bars_ago >= RSI_Overbought && rsi_prev < RSI_Overbought) + { + OpenSellPosition(); + } +} + +//+------------------------------------------------------------------+ +//| Open buy position | +//+------------------------------------------------------------------+ +void OpenBuyPosition() +{ + // Verify no position exists for THIS EA (magic number) on THIS symbol before opening + if(PositionExistsByMagic(_Symbol, MagicNumber)) + { + return; // Position already exists for this EA + } + + double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); + + if(trade.Buy(LotSize, _Symbol, ask, 0, 0, "RSI Scalping Buy")) + { + ulong new_ticket = trade.ResultOrder(); + if(new_ticket > 0) + { + // Verify position was opened for THIS EA (magic number) on THIS symbol + if(PositionSelectByTicketSymbolAndMagic(new_ticket, _Symbol, MagicNumber)) + { + position_ticket = new_ticket; + position_open = true; + current_position_type = POSITION_TYPE_BUY; + } + else + { + Print("Error: Position opened but doesn't match EA magic number or symbol"); + } + } + } +} + +//+------------------------------------------------------------------+ +//| Open sell position | +//+------------------------------------------------------------------+ +void OpenSellPosition() +{ + // Verify no position exists for THIS EA (magic number) on THIS symbol before opening + if(PositionExistsByMagic(_Symbol, MagicNumber)) + { + return; // Position already exists for this EA + } + + double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); + + if(trade.Sell(LotSize, _Symbol, bid, 0, 0, "RSI Scalping Sell")) + { + ulong new_ticket = trade.ResultOrder(); + if(new_ticket > 0) + { + // Verify position was opened for THIS EA (magic number) on THIS symbol + if(PositionSelectByTicketSymbolAndMagic(new_ticket, _Symbol, MagicNumber)) + { + position_ticket = new_ticket; + position_open = true; + current_position_type = POSITION_TYPE_SELL; + } + else + { + Print("Error: Position opened but doesn't match EA magic number or symbol"); + } + } + } +} + +//+------------------------------------------------------------------+ +//| Close current position | +//+------------------------------------------------------------------+ +void ClosePosition() +{ + // Close position using helper that verifies symbol AND magic number for THIS EA + if(ClosePositionByMagic(trade, _Symbol, MagicNumber)) + { + position_open = false; + position_ticket = 0; + rsi_against_position = false; + bars_against_count = 0; + } + else + { + // Position doesn't exist or wrong magic number - reset tracking + position_open = false; + position_ticket = 0; + rsi_against_position = false; + bars_against_count = 0; + } +} diff --git a/frontline/units/RSIScalpingMU/optimization.set b/frontline/units/RSIScalpingMU/optimization.set new file mode 100644 index 0000000000000000000000000000000000000000..5d564c8b56d753dd4c18da594fa238a2dc9b1be8 GIT binary patch literal 1820 zcmaKsTW`}q5QXO%iT~h7kPtL+nifzVTA%_6N=1SYPgTf`h@_4jCs4$12fnl8t?eWr z%X^(UbLO^xem}Rw);6@QO>E3Mvm3^?9r1VVG4nBF%hGU~+B5bij2+JI+dY$hVP9GUGFM`I*o`AFpyCo+-%hLp1 z$4-#`frL~$uK;w0-cyA3zaL&%TVkMM2I_>J{j z&}GT}s!*ce;v_cm@CLhz?37WllC?K?(NJs@r!OT}MRkB3XKrX+WfN*r@KV z?Hp#eudhiZAvyjnCVz4AjsuNX6o672xc(K~*XH5yuc|TN&Dn_W{ zlLq##?`t1jUav+kd-27@A7|XC6V>xkMji1nbndQfzm)7T=lC%RR;S=Cg1jQ= z9P0PZ;a^xU;UNY?*r?vG;38%Pr^>8HT63(4W_(W%M0?lP8OVCywph`uSGQ?LJst5Y zOUmMLz*k1yGwmf=ee&9?q#kEg=bF#0#kbmD-vs*;`%c95S}9iZAf4C)B0sPf_V7S9 znur(ZEYMXQxlWH4ubzqKZa**1*<&>ZN7+@k7WSG5ZECpwa(P#DL(W^&Y~^=_@d|&& Td;0D2^>Bn%*=y|*!|UTO4UjRn literal 0 HcmV?d00001 diff --git a/frontline/units/RSIScalpingMU/report.html b/frontline/units/RSIScalpingMU/report.html new file mode 100644 index 0000000000000000000000000000000000000000..950f95baad48155ec775a3c377697b84a5632aca GIT binary patch literal 2231020 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%0AWjNV& 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�W*{nYrqbJ2L@n%Bqt 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 literal 0 HcmV?d00001 diff --git a/frontline/units/RSIScalpingMU/report.png b/frontline/units/RSIScalpingMU/report.png new file mode 100644 index 0000000000000000000000000000000000000000..5a26c1dc956e4f517c4b4a15ff98c82b1bd61b86 GIT binary patch literal 8829 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 L?~d~A$IkyBo(n?L literal 0 HcmV?d00001 diff --git a/frontline/units/RSIScalpingNVDA/main.mq5 b/frontline/units/RSIScalpingNVDA/main.mq5 index 74b2310..173bfec 100644 --- a/frontline/units/RSIScalpingNVDA/main.mq5 +++ b/frontline/units/RSIScalpingNVDA/main.mq5 @@ -10,17 +10,17 @@ #include #include "../_united/MagicNumberHelpers.mqh" -//--- Input parameters -input ENUM_TIMEFRAMES TimeFrame = PERIOD_M15; // Timeframe for Analysis -input int RSI_Period = 8; // RSI Period +//--- Input parameters — synced with Desktop 123.set (2026.05.13) +input ENUM_TIMEFRAMES TimeFrame = PERIOD_M20; // Timeframe for Analysis +input int RSI_Period = 14; // RSI Period input ENUM_APPLIED_PRICE RSI_Applied_Price = PRICE_CLOSE; // RSI Applied Price -input double RSI_Overbought = 36; // RSI Overbought Level -input double RSI_Oversold = 38; // RSI Oversold Level -input double RSI_Target_Buy = 90; // RSI Target for Buy Exit -input double RSI_Target_Sell = 70; // RSI Target for Sell Exit -input int BarsToWait = 5; // Bars to wait when RSI goes against position -input double LotSize = 50; // Lot Size -input int MagicNumber = 12345; // Magic Number +input double RSI_Overbought = 6; // RSI Overbought Level +input double RSI_Oversold = 66; // RSI Oversold Level +input double RSI_Target_Buy = 98; // RSI Target for Buy Exit +input double RSI_Target_Sell = 52; // RSI Target for Sell Exit +input int BarsToWait = 12; // Bars to wait when RSI goes against position +input double LotSize = 5; // Lot Size +input int MagicNumber = 129102315; // Magic Number input int Slippage = 3; // Slippage in points //--- Global variables diff --git a/frontline/units/RSIScalpingTSLA/main.mq5 b/frontline/units/RSIScalpingTSLA/main.mq5 index 66897e9..5c53a5d 100644 --- a/frontline/units/RSIScalpingTSLA/main.mq5 +++ b/frontline/units/RSIScalpingTSLA/main.mq5 @@ -10,17 +10,17 @@ #include #include "../_united/MagicNumberHelpers.mqh" -//--- Input parameters -input ENUM_TIMEFRAMES TimeFrame = PERIOD_H1; // Timeframe for Analysis +//--- Input parameters — synced with Desktop 123.set (2026.05.13) +input ENUM_TIMEFRAMES TimeFrame = PERIOD_M20; // Timeframe for Analysis input int RSI_Period = 14; // RSI Period input ENUM_APPLIED_PRICE RSI_Applied_Price = PRICE_CLOSE; // RSI Applied Price -input double RSI_Overbought = 54; // RSI Overbought Level -input double RSI_Oversold = 73; // RSI Oversold Level -input double RSI_Target_Buy = 87; // RSI Target for Buy Exit -input double RSI_Target_Sell = 33; // RSI Target for Sell Exit -input int BarsToWait = 1; // Bars to wait when RSI goes against position -input double LotSize = 50; // Lot Size -input int MagicNumber = 125421321; // Magic Number +input double RSI_Overbought = 32; // RSI Overbought Level +input double RSI_Oversold = 86; // RSI Oversold Level +input double RSI_Target_Buy = 100; // RSI Target for Buy Exit +input double RSI_Target_Sell = 24; // RSI Target for Sell Exit +input int BarsToWait = 34; // Bars to wait when RSI goes against position +input double LotSize = 5; // Lot Size +input int MagicNumber = 129102315; // Magic Number input int Slippage = 3; // Slippage in points //--- Global variables diff --git a/frontline/units/RSIScalpingXAUUSD/report.html b/frontline/units/RSIScalpingXAUUSD/report.html deleted file mode 100644 index 203dcf4c2f35164885b9198c4af8936996e6cca7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5649556 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

d$`p4;?zf-c8`TKl~jK}wJg(@#N*;PeTZ~f6r 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 Axc~qF diff --git a/frontline/units/RSIScalpingXAUUSD/report.png b/frontline/units/RSIScalpingXAUUSD/report.png deleted file mode 100644 index c2c91f23144f0b71a7c7da2a97f0945d84553ea9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8629 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 diff --git a/frontline/units/SuperEMAXAUUSD/SuperEMA.set b/frontline/units/SuperEMAXAUUSD/SuperEMA.set deleted file mode 100644 index f52ec17..0000000 --- a/frontline/units/SuperEMAXAUUSD/SuperEMA.set +++ /dev/null @@ -1,36 +0,0 @@ -; SuperEMA — defaults aligned with lab/EAs/SuperEMA.mq5 (v1.01) -; Load from Strategy Tester → Inputs → context menu → Load -; -; === Market === -InpSymbol= -InpTimeframe=15||15||0||49153||N -InpLots=0.01||0.01||0.01||0.10||N -InpSlippagePoints=55||20||5||120||Y -InpMagic=940001||940001||1||9400010||N -; === EMA (trend & structure) === -InpEmaFast=40||20||10||120||Y -InpEmaMid=180||60||15||200||Y -InpEmaSlow=125||100||25||400||Y -InpEmaTrendBars=3||1||1||3||Y -; === CCI === -InpCciPeriod=17||7||1||28||Y -InpCciOverbought=80.0||80.0||10.0||140.0||Y -InpCciOversold=-140.0||-140.0||10.0||-80.0||Y -InpPullbackCciLookback=20||4||2||24||Y -; === MACD (histogram = main - signal) === -InpMacdFast=14||8||2||20||Y -InpMacdSlow=38||20||2||40||Y -InpMacdSignal=9||5||1||15||Y -; === Strategy === -InpEntryStyle=1||0||1||2||Y -InpOneTradeOnly=true||false||0||true||N -InpUseStructuralSL=false||false||0||true||Y -InpSlBufferPoints=110.0||20.0||10.0||200.0||Y -; === Exits (so trades do not run forever) === -InpExitOnTrendFlip=false||false||0||true||Y -InpExitOnMacdFlip=false||false||0||true||Y -InpExitOnCciZeroCross=true||false||0||true||Y -InpMaxHoldingBars=168||48||24||480||Y -InpExitBelowMidEma=false||false||0||true||Y -; === Debug === -InpDebugLogs=false||false||0||true||N diff --git a/frontline/units/SuperEMAXAUUSD/main.mq5 b/frontline/units/SuperEMAXAUUSD/main.mq5 deleted file mode 100644 index 07831c3..0000000 --- a/frontline/units/SuperEMAXAUUSD/main.mq5 +++ /dev/null @@ -1,448 +0,0 @@ -//+------------------------------------------------------------------+ -//| SuperEMA.mq5 | -//| EMA + CCI + MACD histogram — trend filter, momentum confirmation | -//+------------------------------------------------------------------+ -#property strict -#property version "1.01" - -#include - -enum ENUM_ENTRY_STYLE -{ - ENTRY_CCIZERO_MACD = 0, // EMA trend + CCI crosses zero + MACD histogram agrees - ENTRY_LAMBERT = 1, // EMA trend + CCI crosses ±100 + MACD histogram agrees - ENTRY_PULLBACK = 2 // Uptrend: pullback to fast EMA + CCI was oversold + CCI crosses up through 0 + MACD > 0 (mirror for sells) -}; - -input group "=== Market ===" -input string InpSymbol = ""; -input ENUM_TIMEFRAMES InpTimeframe = PERIOD_M15; -input double InpLots = 0.01; -input int InpSlippagePoints = 55; -input int InpMagic = 940001; - -input group "=== EMA (trend & structure) ===" -input int InpEmaFast = 40; -input int InpEmaMid = 180; -input int InpEmaSlow = 125; -input int InpEmaTrendBars = 3; // closed bar shift for EMA reads - -input group "=== CCI ===" -input int InpCciPeriod = 17; -input double InpCciOverbought = 80.0; -input double InpCciOversold = -140.0; -input int InpPullbackCciLookback = 20; // bars to check prior CCI oversold/overbought - -input group "=== MACD (histogram = main - signal) ===" -input int InpMacdFast = 14; -input int InpMacdSlow = 38; -input int InpMacdSignal = 9; - -input group "=== Strategy ===" -input ENUM_ENTRY_STYLE InpEntryStyle = ENTRY_LAMBERT; -input bool InpOneTradeOnly = true; -input bool InpUseStructuralSL = false; -input double InpSlBufferPoints = 110; - -input group "=== Exits (so trades do not run forever) ===" -input bool InpExitOnTrendFlip = false; // close when price vs slow EMA flips against position -input bool InpExitOnMacdFlip = false; // close when MACD histogram flips against position -input bool InpExitOnCciZeroCross = true; // long: CCI crosses below 0; short: CCI crosses above 0 -input int InpMaxHoldingBars = 168; // 0 = disabled (e.g. ~8 days M15) -input bool InpExitBelowMidEma = false; // long: close if close < mid EMA (invalidation) - -input group "=== Debug ===" -input bool InpDebugLogs = false; - -CTrade trade; -datetime g_lastBarTime = 0; - -string WorkSymbol() -{ - return (InpSymbol == "" || InpSymbol == NULL) ? _Symbol : InpSymbol; -} - -void Log(const string s) -{ - if(InpDebugLogs) - Print("[SuperEMA] ", s); -} - -bool IsNewBar(const string sym, const ENUM_TIMEFRAMES tf) -{ - datetime t = iTime(sym, tf, 0); - if(t <= 0 || t == g_lastBarTime) - return false; - g_lastBarTime = t; - return true; -} - -double EmaAt(const string sym, const ENUM_TIMEFRAMES tf, const int period, const int shift) -{ - int h = iMA(sym, tf, period, 0, MODE_EMA, PRICE_CLOSE); - if(h == INVALID_HANDLE) - return 0.0; - double b[1]; - if(CopyBuffer(h, 0, shift, 1, b) <= 0) - { - IndicatorRelease(h); - return 0.0; - } - IndicatorRelease(h); - return b[0]; -} - -double CciAt(const string sym, const ENUM_TIMEFRAMES tf, const int period, const int shift) -{ - int h = iCCI(sym, tf, period, PRICE_TYPICAL); - if(h == INVALID_HANDLE) - return 0.0; - double b[1]; - if(CopyBuffer(h, 0, shift, 1, b) <= 0) - { - IndicatorRelease(h); - return 0.0; - } - IndicatorRelease(h); - return b[0]; -} - -bool MacdHistAt(const string sym, const ENUM_TIMEFRAMES tf, const int fast, const int slow, const int signal, const int shift, double &hist) -{ - int h = iMACD(sym, tf, fast, slow, signal, PRICE_CLOSE); - if(h == INVALID_HANDLE) - return false; - double mainLine[1], sigLine[1]; - if(CopyBuffer(h, 0, shift, 1, mainLine) <= 0 || CopyBuffer(h, 1, shift, 1, sigLine) <= 0) - { - IndicatorRelease(h); - return false; - } - IndicatorRelease(h); - hist = mainLine[0] - sigLine[0]; - return true; -} - -bool TrendUp(const string sym, const int sh) -{ - double c = iClose(sym, InpTimeframe, sh); - double emaS = EmaAt(sym, InpTimeframe, InpEmaSlow, sh); - return (emaS > 0.0 && c > emaS); -} - -bool TrendDown(const string sym, const int sh) -{ - double c = iClose(sym, InpTimeframe, sh); - double emaS = EmaAt(sym, InpTimeframe, InpEmaSlow, sh); - return (emaS > 0.0 && c < emaS); -} - -bool CciCrossAboveZero(const string sym) -{ - double c1 = CciAt(sym, InpTimeframe, InpCciPeriod, 1); - double c2 = CciAt(sym, InpTimeframe, InpCciPeriod, 2); - return (c2 <= 0.0 && c1 > 0.0); -} - -bool CciCrossBelowZero(const string sym) -{ - double c1 = CciAt(sym, InpTimeframe, InpCciPeriod, 1); - double c2 = CciAt(sym, InpTimeframe, InpCciPeriod, 2); - return (c2 >= 0.0 && c1 < 0.0); -} - -bool CciCrossAbove100(const string sym) -{ - double c1 = CciAt(sym, InpTimeframe, InpCciPeriod, 1); - double c2 = CciAt(sym, InpTimeframe, InpCciPeriod, 2); - return (c2 < InpCciOverbought && c1 > InpCciOverbought); -} - -bool CciCrossBelowMinus100(const string sym) -{ - double c1 = CciAt(sym, InpTimeframe, InpCciPeriod, 1); - double c2 = CciAt(sym, InpTimeframe, InpCciPeriod, 2); - return (c2 > InpCciOversold && c1 < InpCciOversold); -} - -bool HadCciOversoldRecently(const string sym) -{ - for(int i = 2; i <= InpPullbackCciLookback + 1; i++) - { - double v = CciAt(sym, InpTimeframe, InpCciPeriod, i); - if(v <= InpCciOversold) - return true; - } - return false; -} - -bool HadCciOverboughtRecently(const string sym) -{ - for(int i = 2; i <= InpPullbackCciLookback + 1; i++) - { - double v = CciAt(sym, InpTimeframe, InpCciPeriod, i); - if(v >= InpCciOverbought) - return true; - } - return false; -} - -bool PullbackNearFastEmaLong(const string sym) -{ - double emaF = EmaAt(sym, InpTimeframe, InpEmaFast, 1); - double lo = iLow(sym, InpTimeframe, 1); - if(emaF <= 0.0) - return false; - return (lo <= emaF + InpSlBufferPoints * _Point * 3.0); -} - -bool PullbackNearFastEmaShort(const string sym) -{ - double emaF = EmaAt(sym, InpTimeframe, InpEmaFast, 1); - double hi = iHigh(sym, InpTimeframe, 1); - if(emaF <= 0.0) - return false; - return (hi >= emaF - InpSlBufferPoints * _Point * 3.0); -} - -int PositionsByMagic(const string sym, const int magic) -{ - int n = 0; - for(int i = PositionsTotal() - 1; i >= 0; i--) - { - ulong t = PositionGetTicket(i); - if(t == 0) - continue; - if(PositionGetString(POSITION_SYMBOL) == sym && (int)PositionGetInteger(POSITION_MAGIC) == magic) - n++; - } - return n; -} - -void ComputeSLTP(const bool isBuy, const double entry, double &sl, double &tp) -{ - const string sym = WorkSymbol(); - sl = 0.0; - tp = 0.0; - if(!InpUseStructuralSL) - return; - double emaM = EmaAt(sym, InpTimeframe, InpEmaMid, InpEmaTrendBars); - double buf = InpSlBufferPoints * _Point; - if(isBuy) - sl = emaM - buf; - else - sl = emaM + buf; -} - -int BarsSinceOpen(const string sym, const datetime openTime) -{ - if(openTime <= 0) - return 0; - int sh = iBarShift(sym, InpTimeframe, openTime, false); - if(sh < 0) - return 999999; - return sh; -} - -void ClosePositionTicket(const ulong ticket, const string reason) -{ - trade.SetExpertMagicNumber(InpMagic); - if(trade.PositionClose(ticket)) - Log("Close: " + reason); -} - -void ManageSuperEMAExits(const string sym) -{ - for(int i = PositionsTotal() - 1; i >= 0; i--) - { - ulong ticket = PositionGetTicket(i); - if(ticket == 0) - continue; - if(!PositionSelectByTicket(ticket)) - continue; - if(PositionGetString(POSITION_SYMBOL) != sym) - continue; - if((int)PositionGetInteger(POSITION_MAGIC) != InpMagic) - continue; - - ENUM_POSITION_TYPE ptype = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - datetime openTime = (datetime)PositionGetInteger(POSITION_TIME); - - double h1 = 0.0; - if(!MacdHistAt(sym, InpTimeframe, InpMacdFast, InpMacdSlow, InpMacdSignal, 1, h1)) - continue; - - bool closeLong = false; - bool closeShort = false; - string reason = ""; - - if(InpMaxHoldingBars > 0) - { - int held = BarsSinceOpen(sym, openTime); - if(held >= InpMaxHoldingBars) - { - if(ptype == POSITION_TYPE_BUY) - closeLong = true; - else - closeShort = true; - reason = "time stop (max bars)"; - } - } - - if(ptype == POSITION_TYPE_BUY) - { - if(InpExitOnTrendFlip && TrendDown(sym, InpEmaTrendBars)) - { - closeLong = true; - reason = "trend flip (below slow EMA)"; - } - if(InpExitOnMacdFlip && h1 < 0.0) - { - closeLong = true; - reason = "MACD histogram < 0"; - } - if(InpExitOnCciZeroCross && CciCrossBelowZero(sym)) - { - closeLong = true; - reason = "CCI crossed below zero"; - } - if(InpExitBelowMidEma) - { - double c = iClose(sym, InpTimeframe, 1); - double emaM = EmaAt(sym, InpTimeframe, InpEmaMid, 1); - if(emaM > 0.0 && c < emaM) - { - closeLong = true; - reason = "close below mid EMA"; - } - } - if(closeLong) - ClosePositionTicket(ticket, reason); - } - else if(ptype == POSITION_TYPE_SELL) - { - if(InpExitOnTrendFlip && TrendUp(sym, InpEmaTrendBars)) - { - closeShort = true; - reason = "trend flip (above slow EMA)"; - } - if(InpExitOnMacdFlip && h1 > 0.0) - { - closeShort = true; - reason = "MACD histogram > 0"; - } - if(InpExitOnCciZeroCross && CciCrossAboveZero(sym)) - { - closeShort = true; - reason = "CCI crossed above zero"; - } - if(InpExitBelowMidEma) - { - double c = iClose(sym, InpTimeframe, 1); - double emaM = EmaAt(sym, InpTimeframe, InpEmaMid, 1); - if(emaM > 0.0 && c > emaM) - { - closeShort = true; - reason = "close above mid EMA"; - } - } - if(closeShort) - ClosePositionTicket(ticket, reason); - } - } -} - -int OnInit() -{ - string sym = WorkSymbol(); - if(!SymbolSelect(sym, true)) - { - Print("SuperEMA: cannot select symbol ", sym); - return INIT_FAILED; - } - trade.SetExpertMagicNumber(InpMagic); - trade.SetDeviationInPoints(InpSlippagePoints); - return INIT_SUCCEEDED; -} - -void OnTick() -{ - string sym = WorkSymbol(); - if(_Symbol != sym) - { - static datetime lastLog = 0; - datetime tb = iTime(_Symbol, PERIOD_M1, 0); - if(tb != lastLog && InpDebugLogs) - { - lastLog = tb; - Log("Chart symbol differs from WorkSymbol; attach to " + sym + " or set InpSymbol empty."); - } - return; - } - - if(!IsNewBar(sym, InpTimeframe)) - return; - - // Exits must run every bar; do not skip when a position exists (otherwise trades never close with SL=0/TP=0). - ManageSuperEMAExits(sym); - - if(InpOneTradeOnly && PositionsByMagic(sym, InpMagic) > 0) - return; - - const int sh = InpEmaTrendBars; - double h1 = 0.0, h2 = 0.0; - if(!MacdHistAt(sym, InpTimeframe, InpMacdFast, InpMacdSlow, InpMacdSignal, 1, h1) || - !MacdHistAt(sym, InpTimeframe, InpMacdFast, InpMacdSlow, InpMacdSignal, 2, h2)) - return; - - bool up = TrendUp(sym, sh); - bool dn = TrendDown(sym, sh); - - bool wantBuy = false; - bool wantSell = false; - - switch(InpEntryStyle) - { - case ENTRY_CCIZERO_MACD: - if(up && CciCrossAboveZero(sym) && h1 > 0.0) - wantBuy = true; - if(dn && CciCrossBelowZero(sym) && h1 < 0.0) - wantSell = true; - break; - - case ENTRY_LAMBERT: - if(up && CciCrossAbove100(sym) && h1 > 0.0) - wantBuy = true; - if(dn && CciCrossBelowMinus100(sym) && h1 < 0.0) - wantSell = true; - break; - - case ENTRY_PULLBACK: - if(up && HadCciOversoldRecently(sym) && CciCrossAboveZero(sym) && h1 > 0.0 && PullbackNearFastEmaLong(sym)) - wantBuy = true; - if(dn && HadCciOverboughtRecently(sym) && CciCrossBelowZero(sym) && h1 < 0.0 && PullbackNearFastEmaShort(sym)) - wantSell = true; - break; - } - - MqlTick tick; - if(!SymbolInfoTick(sym, tick)) - return; - - double sl = 0.0, tp = 0.0; - - if(wantBuy && !wantSell) - { - ComputeSLTP(true, tick.ask, sl, tp); - if(trade.Buy(InpLots, sym, tick.ask, sl, tp, "SuperEMA long")) - Log(StringFormat("BUY ask=%.5f sl=%.5f cci=%.2f macdHist=%.5f", tick.ask, sl, - CciAt(sym, InpTimeframe, InpCciPeriod, 1), h1)); - } - else if(wantSell && !wantBuy) - { - ComputeSLTP(false, tick.bid, sl, tp); - if(trade.Sell(InpLots, sym, tick.bid, sl, tp, "SuperEMA short")) - Log(StringFormat("SELL bid=%.5f sl=%.5f cci=%.2f macdHist=%.5f", tick.bid, sl, - CciAt(sym, InpTimeframe, InpCciPeriod, 1), h1)); - } -} diff --git a/lab/EAs/CandleChartPattern/CandleChartPattern_Genetic_Optimization.set b/lab/EAs/CandleChartPattern/CandleChartPattern_Genetic_Optimization.set new file mode 100644 index 0000000..86c6f65 --- /dev/null +++ b/lab/EAs/CandleChartPattern/CandleChartPattern_Genetic_Optimization.set @@ -0,0 +1,26 @@ +; CandleChartPattern/main.mq5 — Strategy Tester → Inputs → Load +; Format: Name=Value||From||Step||To||Optimize(Y/N) +; Value = load default (aligned with EA + Desktop 123.set 2026.05.14). From/Step/To used when Y. +; +; === Market === +InpSymbol= +InpLots=0.01||0.01||0.01||0.2||N +InpMagic=771001||771001||1||771001||N +InpSlippagePoints=30||30||1||300||N +InpMaxSpreadPoints=50||10||5||200||Y +; === Timeframes === +; Enum timeframes: keep fixed during optimization (change manually if needed). +InpSignalTF=15||0||0||49153||N +InpConfirmTF=16385||0||0||49153||N +; === Patterns (signal TF, shift 1) === +InpUseEngulfing=true||false||0||true||Y +InpUseHammerPin=true||false||0||true||Y +InpMinBodyPoints=5.0||2.0||0.5||25.0||Y +InpHammerWickRatio=2.0||1.2||0.1||4.0||Y +; === HTF confirmation === +InpRequireHtfCandleDir=true||false||0||true||Y +InpRequireHtfPattern=false||false||0||true||Y +; === Behaviour === +InpOnlyOnePosition=true||false||0||true||N +InpCloseOnReverseSignal=true||false||0||true||Y +InpCloseOnAdversePattern=true||false||0||true||Y diff --git a/lab/EAs/CandleChartPattern/main.mq5 b/lab/EAs/CandleChartPattern/main.mq5 new file mode 100644 index 0000000..2048753 --- /dev/null +++ b/lab/EAs/CandleChartPattern/main.mq5 @@ -0,0 +1,332 @@ +//+------------------------------------------------------------------+ +//| CandleChartPattern.mq5 | +//| Lab EA: candle patterns on signal TF + HTF confirmation. | +//| No SL/TP. Exit on opposite signal or adverse pattern. | +//+------------------------------------------------------------------+ +#property copyright "Lab" +#property link "" +#property version "1.01" +#property strict + +#include + +input group "=== Market ===" +input string InpSymbol = ""; // empty = chart symbol +input double InpLots = 0.01; +input int InpMagic = 771001; +input int InpSlippagePoints = 30; +input int InpMaxSpreadPoints = 50; // 0 = ignore + +input group "=== Timeframes ===" +input ENUM_TIMEFRAMES InpSignalTF = PERIOD_M15; // patterns evaluated here (bar 1 = last closed) +input ENUM_TIMEFRAMES InpConfirmTF = PERIOD_H1; // must be >= InpSignalTF for stable bias (not enforced) + +input group "=== Patterns (signal TF, shift 1) ===" +input bool InpUseEngulfing = true; +input bool InpUseHammerPin = true; +input double InpMinBodyPoints = 5.0; // min body size for engulfing (points) +input double InpHammerWickRatio = 2.0; // shadow >= ratio * body for hammer/pin + +input group "=== HTF confirmation ===" +input bool InpRequireHtfCandleDir = true; // HTF last closed bar same direction as trade idea +input bool InpRequireHtfPattern = false; // if true, same pattern class must also print on HTF bar 1 + +input group "=== Behaviour ===" +input bool InpOnlyOnePosition = true; +input bool InpCloseOnReverseSignal = true; // close long if validated short setup appears (and vice versa) +input bool InpCloseOnAdversePattern = true; // close long on bearish engulf / bear pin on signal or HTF + +CTrade g_trade; +string g_sym; +datetime g_lastSignalBarTime = 0; + +ENUM_ORDER_TYPE_FILLING ResolveFilling(const string sym) +{ + const long mask = SymbolInfoInteger(sym, SYMBOL_FILLING_MODE); + if((mask & SYMBOL_FILLING_IOC) == SYMBOL_FILLING_IOC) + return ORDER_FILLING_IOC; + if((mask & SYMBOL_FILLING_FOK) == SYMBOL_FILLING_FOK) + return ORDER_FILLING_FOK; + return ORDER_FILLING_RETURN; +} + +bool SpreadOk(const string sym) +{ + if(InpMaxSpreadPoints <= 0) + return true; + const double point = SymbolInfoDouble(sym, SYMBOL_POINT); + if(point <= 0.0) + return false; + const double spreadPts = (SymbolInfoDouble(sym, SYMBOL_ASK) - SymbolInfoDouble(sym, SYMBOL_BID)) / point; + return (spreadPts <= (double)InpMaxSpreadPoints); +} + +bool IsNewSignalBar() +{ + const datetime t = iTime(g_sym, InpSignalTF, 0); + if(t <= 0) + return false; + if(t == g_lastSignalBarTime) + return false; + g_lastSignalBarTime = t; + return true; +} + +double BodyPoints(const string s, const ENUM_TIMEFRAMES tf, const int sh) +{ + const double o = iOpen(s, tf, sh); + const double c = iClose(s, tf, sh); + const double point = SymbolInfoDouble(s, SYMBOL_POINT); + if(point <= 0.0) + return 0.0; + return MathAbs(c - o) / point; +} + +bool BullishEngulfing(const string s, const ENUM_TIMEFRAMES tf, const int sh) +{ + if(!InpUseEngulfing) + return false; + const double o1 = iOpen(s, tf, sh); + const double c1 = iClose(s, tf, sh); + const double o2 = iOpen(s, tf, sh + 1); + const double c2 = iClose(s, tf, sh + 1); + if(c2 >= o2) + return false; + if(c1 <= o1) + return false; + if(BodyPoints(s, tf, sh) < InpMinBodyPoints || BodyPoints(s, tf, sh + 1) < InpMinBodyPoints) + return false; + return (o1 <= c2 && c1 >= o2); +} + +bool BearishEngulfing(const string s, const ENUM_TIMEFRAMES tf, const int sh) +{ + if(!InpUseEngulfing) + return false; + const double o1 = iOpen(s, tf, sh); + const double c1 = iClose(s, tf, sh); + const double o2 = iOpen(s, tf, sh + 1); + const double c2 = iClose(s, tf, sh + 1); + if(c2 <= o2) + return false; + if(c1 >= o1) + return false; + if(BodyPoints(s, tf, sh) < InpMinBodyPoints || BodyPoints(s, tf, sh + 1) < InpMinBodyPoints) + return false; + return (o1 >= c2 && c1 <= o2); +} + +bool BullishHammer(const string s, const ENUM_TIMEFRAMES tf, const int sh) +{ + if(!InpUseHammerPin) + return false; + const double o = iOpen(s, tf, sh); + const double c = iClose(s, tf, sh); + const double h = iHigh(s, tf, sh); + const double l = iLow(s, tf, sh); + const double body = MathAbs(c - o); + const double lower = MathMin(o, c) - l; + const double upper = h - MathMax(o, c); + const double point = SymbolInfoDouble(s, SYMBOL_POINT); + if(point <= 0.0 || body < point * 0.1) + return false; + return (lower >= InpHammerWickRatio * body && upper <= body); +} + +bool BearishPinBar(const string s, const ENUM_TIMEFRAMES tf, const int sh) +{ + if(!InpUseHammerPin) + return false; + const double o = iOpen(s, tf, sh); + const double c = iClose(s, tf, sh); + const double h = iHigh(s, tf, sh); + const double l = iLow(s, tf, sh); + const double body = MathAbs(c - o); + const double lower = MathMin(o, c) - l; + const double upper = h - MathMax(o, c); + const double point = SymbolInfoDouble(s, SYMBOL_POINT); + if(point <= 0.0 || body < point * 0.1) + return false; + return (upper >= InpHammerWickRatio * body && lower <= body); +} + +bool BullishPatternBar(const string s, const ENUM_TIMEFRAMES tf, const int sh) +{ + return BullishEngulfing(s, tf, sh) || BullishHammer(s, tf, sh); +} + +bool BearishPatternBar(const string s, const ENUM_TIMEFRAMES tf, const int sh) +{ + return BearishEngulfing(s, tf, sh) || BearishPinBar(s, tf, sh); +} + +bool HtfBullishClosedBar(const string s, const ENUM_TIMEFRAMES htf) +{ + return (iClose(s, htf, 1) > iOpen(s, htf, 1)); +} + +bool HtfBearishClosedBar(const string s, const ENUM_TIMEFRAMES htf) +{ + return (iClose(s, htf, 1) < iOpen(s, htf, 1)); +} + +bool ConfirmLong(const string s) +{ + if(!InpRequireHtfCandleDir && !InpRequireHtfPattern) + return true; + + if(InpRequireHtfCandleDir && !HtfBullishClosedBar(s, InpConfirmTF)) + return false; + + if(InpRequireHtfPattern && !BullishPatternBar(s, InpConfirmTF, 1)) + return false; + + return true; +} + +bool ConfirmShort(const string s) +{ + if(!InpRequireHtfCandleDir && !InpRequireHtfPattern) + return true; + + if(InpRequireHtfCandleDir && !HtfBearishClosedBar(s, InpConfirmTF)) + return false; + + if(InpRequireHtfPattern && !BearishPatternBar(s, InpConfirmTF, 1)) + return false; + + return true; +} + +bool ValidatedLongSetup(const string s) +{ + if(!BullishPatternBar(s, InpSignalTF, 1)) + return false; + return ConfirmLong(s); +} + +bool ValidatedShortSetup(const string s) +{ + if(!BearishPatternBar(s, InpSignalTF, 1)) + return false; + return ConfirmShort(s); +} + +bool HasOurPosition(const string s, const int magic, int &dir) +{ + dir = -1; + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + const ulong ticket = PositionGetTicket(i); + if(ticket == 0 || !PositionSelectByTicket(ticket)) + continue; + if(PositionGetString(POSITION_SYMBOL) != s) + continue; + if((int)PositionGetInteger(POSITION_MAGIC) != magic) + continue; + const long typ = PositionGetInteger(POSITION_TYPE); + dir = (typ == POSITION_TYPE_BUY) ? 0 : 1; + return true; + } + return false; +} + +bool CloseOurPositions(const string s, const int magic) +{ + bool ok = true; + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + const ulong ticket = PositionGetTicket(i); + if(ticket == 0 || !PositionSelectByTicket(ticket)) + continue; + if(PositionGetString(POSITION_SYMBOL) != s) + continue; + if((int)PositionGetInteger(POSITION_MAGIC) != magic) + continue; + if(!g_trade.PositionClose(ticket)) + ok = false; + } + return ok; +} + +int OnInit() +{ + g_sym = (StringLen(InpSymbol) == 0) ? _Symbol : InpSymbol; + if(!SymbolSelect(g_sym, true)) + { + Print("SymbolSelect failed: ", g_sym); + return INIT_FAILED; + } + + g_trade.SetExpertMagicNumber(InpMagic); + g_trade.SetDeviationInPoints(InpSlippagePoints); + g_trade.SetTypeFilling(ResolveFilling(g_sym)); + + return INIT_SUCCEEDED; +} + +void OnDeinit(const int reason) +{ +} + +void OnTick() +{ + if(!IsNewSignalBar()) + return; + + if(Bars(g_sym, InpSignalTF) < 5 || Bars(g_sym, InpConfirmTF) < 5) + return; + + if(!SpreadOk(g_sym)) + return; + + const bool longSetup = ValidatedLongSetup(g_sym); + const bool shortSetup = ValidatedShortSetup(g_sym); + + int dir = -1; + bool has = HasOurPosition(g_sym, InpMagic, dir); + + if(has) + { + if(dir == 0) + { + bool adverse = false; + if(InpCloseOnAdversePattern) + { + if(BearishPatternBar(g_sym, InpSignalTF, 1) || BearishPatternBar(g_sym, InpConfirmTF, 1)) + adverse = true; + } + const bool reverse = (InpCloseOnReverseSignal && shortSetup); + if(adverse || reverse) + CloseOurPositions(g_sym, InpMagic); + } + else if(dir == 1) + { + bool adverse = false; + if(InpCloseOnAdversePattern) + { + if(BullishPatternBar(g_sym, InpSignalTF, 1) || BullishPatternBar(g_sym, InpConfirmTF, 1)) + adverse = true; + } + const bool reverse = (InpCloseOnReverseSignal && longSetup); + if(adverse || reverse) + CloseOurPositions(g_sym, InpMagic); + } + } + + has = HasOurPosition(g_sym, InpMagic, dir); + + if(InpOnlyOnePosition && has) + return; + + if(longSetup && !shortSetup) + { + const double ask = SymbolInfoDouble(g_sym, SYMBOL_ASK); + g_trade.Buy(InpLots, g_sym, ask, 0.0, 0.0, "CandlePattern long"); + } + else if(shortSetup && !longSetup) + { + const double bid = SymbolInfoDouble(g_sym, SYMBOL_BID); + g_trade.Sell(InpLots, g_sym, bid, 0.0, 0.0, "CandlePattern short"); + } +} diff --git a/lab/EAs/Derivative.mq5 b/lab/EAs/Derivative.mq5 new file mode 100644 index 0000000..eed4ffc --- /dev/null +++ b/lab/EAs/Derivative.mq5 @@ -0,0 +1,1582 @@ +//+------------------------------------------------------------------+ + +//| Derivative.mq5 | + +//| EA: finite-difference d1–d3 of price + optional demo signals | + +//| (Former indicator — attach as Expert Advisor on chart.) | + +//+------------------------------------------------------------------+ + +#property copyright "Lab" + +#property link "" + +#property version "3.00" + +#property strict + +#include + +#include + +#property description "DERIVATIVE_CALC EA v3 — derivatives + optional trades; canvas strip or legacy DerivativePlots." + +#property description "Canvas mode draws d1/d2/d3 at bottom without indicators; legacy mode optional." + +enum ENUM_DERIVATIVE_VIEW + +{ + + DERIVATIVE_ALL = 0, + + DERIVATIVE_LEVEL_1 = 1, + + DERIVATIVE_LEVEL_2 = 2, + + DERIVATIVE_LEVEL_3 = 3 + +}; + +input group "=== Instrument ===" + +input string InpSymbol = ""; // blank = chart symbol + +input group "=== Series ===" + +input ENUM_TIMEFRAMES InpSignalTF = PERIOD_CURRENT; // PERIOD_CURRENT = chart TF + +input ENUM_APPLIED_PRICE InpAppliedPrice = PRICE_CLOSE; + +input group "=== Layout (reporting focus) ===" + +input ENUM_DERIVATIVE_VIEW InpWhichDerivative = DERIVATIVE_ALL; // Which values drive Comment / optional trade filter + +input group "=== Calculus discretization ===" + +input int InpDiffStep = 1; + +input bool InpNormalizePoints = true; + +input group "=== Smoothing ===" + +input int InpSmoothPeriod = 0; + +input group "=== On-chart guide (labels on main window) ===" + +input bool InpShowHelpPanel = true; + +input color InpHelpTitleColor = clrWhite; + +input color InpHelpBodyColor = clrSilver; + +input group "=== Display ===" + +input bool InpShowComment = true; // Status line + d1/d2/d3 on chart + +input int InpCommentThrottleMs = 200; // Min real-time ms between Comment() calls (0=off). Visual tester floods redraws without this. + +input bool InpDebugTrace = false; // Experts/Journal: derivatives + attach diagnostics + +input group "=== Canvas strip (EA draws d1/d2/d3 — no indicator .ex5) ===" + +input bool InpUseCanvasPlots = true; // Three stacked strips at bottom (bitmap on main window) + +input int InpCanvasPlotBars = 320; // Bars across width (series 0 = current) + +input int InpCanvasPanelHeight = 210; // Total pixel height for three strips + +input int InpCanvasBottomMargin = 28; // From chart bottom (CORNER_LEFT_LOWER) + +input int InpCanvasSideMargin = 4; // Left/right inset + +input int InpCanvasRedrawMs = 350; // Min ms between canvas rebuilds + +input color InpCanvasBgColor = clrBlack; + +input color InpCanvasGridColor = clrDimGray; + +input group "=== Legacy: DerivativePlots indicator (optional) ===" + +input bool InpAutoAttachDerivativePlots = false; // Requires DerivativePlots.ex5 in Indicators + +input bool InpAttachPlotsInTester = false; // Non-visual tester: set true if .ex5 present + +input string InpPlotsIndicatorPath = "DerivativePlots"; // .ex5 basename in Indicators folder + +input bool InpPlotsSeparateWindows = false; // Three iCustom instances + stacked subwindows + +input bool InpPlotsUnifyYScale = true; // DerivativePlots InpUnifyPlotYScale + +input group "=== Optional demo trading (off by default) ===" + +input bool InpTradeEnabled = false; + +input double InpLots = 0.01; + +input ulong InpMagic = 931001; + +input int InpSlippagePoints = 30; + +input int InpAtrPeriod = 14; + +input double InpSlAtrMult = 2.0; + +input double InpTpAtrMult = 3.0; + +CTrade g_trade; + +datetime g_lastBarTime = 0; + +string g_chartSymbol = ""; + +bool g_pendingDerivativePlotsAttach = false; + +bool g_derivativePlotsFailedToLoad = false; + +bool g_derivPlotsAttachDone = false; + +uint g_lastCommentWallMs = 0; + +CCanvas g_deriv_canvas; + +bool g_deriv_canvas_created = false; + +uint g_lastCanvasRedrawMs = 0; + +const string HELPER_FAMILY = "DerivRead"; + +const string DERIV_CANVAS_OBJ = "DerivEA_CanvasStrip_v3"; + +void CommentThrottled(const string text) + +{ + + if(InpCommentThrottleMs <= 0) + + { + + Comment(text); + + return; + + } + + const uint now = GetTickCount(); + + if(g_lastCommentWallMs != 0 && (now - g_lastCommentWallMs) < (uint)InpCommentThrottleMs) + + return; + + g_lastCommentWallMs = now; + + Comment(text); + +} + +string DerivativePlotsMissingHint() + +{ + + if(!g_derivativePlotsFailedToLoad || !InpAutoAttachDerivativePlots) + + return ""; + + const string want = TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL5\\Indicators\\" + InpPlotsIndicatorPath + ".ex5"; + + return "\n--- DerivativePlots NOT loaded ---\nPlace compiled file:\n" + want + + + "\n(Navigator: Indicators -> right-click -> Open folder -> paste .mq5, Compile.)"; + +} + +string HelpPrefix() + +{ + + return HELPER_FAMILY + "_EA_L" + IntegerToString((int)InpWhichDerivative) + "_"; + +} + +void DeleteOurHelpObjects() + +{ + + const string px = HelpPrefix(); + + ObjectDelete(0, px + "title"); + + ObjectDelete(0, px + "body"); + + ObjectDelete(0, px + "interp"); + +} + +bool LabelCreateMain(const string name, const int corner, const int xd, const int yd, + + const string text, const color clr, const int fontSize, const int anchor) + +{ + + if(!ObjectCreate(0, name, OBJ_LABEL, 0, 0, 0)) + + return false; + + ObjectSetInteger(0, name, OBJPROP_CORNER, corner); + + ObjectSetInteger(0, name, OBJPROP_ANCHOR, anchor); + + ObjectSetInteger(0, name, OBJPROP_XDISTANCE, xd); + + ObjectSetInteger(0, name, OBJPROP_YDISTANCE, yd); + + ObjectSetString(0, name, OBJPROP_TEXT, text); + + ObjectSetInteger(0, name, OBJPROP_COLOR, clr); + + ObjectSetInteger(0, name, OBJPROP_FONTSIZE, fontSize); + + ObjectSetString(0, name, OBJPROP_FONT, "Consolas"); + + ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false); + + ObjectSetInteger(0, name, OBJPROP_HIDDEN, true); + + return true; + +} + +void TryBuildHelpPanel() + +{ + + if(!InpShowHelpPanel) + + { + + DeleteOurHelpObjects(); + + return; + + } + + const string px = HelpPrefix(); + + ObjectDelete(0, px + "title"); + + ObjectDelete(0, px + "body"); + + ObjectDelete(0, px + "interp"); + + const int x0 = 8; + + string title = "DERIVATIVE_CALC EA — readout\n"; + + string body = ""; + + string interp = ""; + + if(InpWhichDerivative == DERIVATIVE_ALL) + + { + + body = + + "d1 = slope of price / step h (velocity)\n" + + "d2 = change of d1 (acceleration)\n" + + "d3 = change of d2 (jerk)\n" + + "See Experts log + Comment line for numbers."; + + interp = "Optional demo trades use Which derivative + sign rules (inputs)."; + + } + + else if(InpWhichDerivative == DERIVATIVE_LEVEL_1) + + { + + title = "EA focus: d1 only\n"; + + body = "d1 > 0 : rising over h bars; < 0 falling; cross 0 : flip."; + + interp = "Demo buy bias if d1>0 & d2>0 when trade enabled."; + + } + + else if(InpWhichDerivative == DERIVATIVE_LEVEL_2) + + { + + title = "EA focus: d2 only\n"; + + body = "d2 : momentum building (+) or fading (-) vs d1."; + + interp = "Use with price context."; + + } + + else + + { + + title = "EA focus: d3 only\n"; + + body = "d3 : noisy; regime / climax hints."; + + interp = "Large |d3| → acceleration changing fast."; + + } + + if(!LabelCreateMain(px + "title", CORNER_LEFT_UPPER, x0, 20, title, InpHelpTitleColor, 10, ANCHOR_LEFT_UPPER)) + + return; + + if(!LabelCreateMain(px + "body", CORNER_LEFT_UPPER, x0, 42, body, InpHelpBodyColor, 8, ANCHOR_LEFT_UPPER)) + + { + + ObjectDelete(0, px + "title"); + + return; + + } + + if(!LabelCreateMain(px + "interp", CORNER_LEFT_LOWER, x0, 8, interp, InpHelpBodyColor, 8, ANCHOR_LEFT_LOWER)) + + { + + ObjectDelete(0, px + "title"); + + ObjectDelete(0, px + "body"); + + return; + + } + +} + +double AppliedFromRates(const MqlRates &r) + +{ + + switch(InpAppliedPrice) + + { + + case PRICE_OPEN: return r.open; + + case PRICE_HIGH: return r.high; + + case PRICE_LOW: return r.low; + + case PRICE_CLOSE: return r.close; + + case PRICE_MEDIAN: return (r.high + r.low) * 0.5; + + case PRICE_TYPICAL: return (r.high + r.low + r.close) / 3.0; + + case PRICE_WEIGHTED:return (r.high + r.low + r.close + r.close) / 4.0; + + default: return r.close; + + } + +} + +void SmoothPriceArray(const int total, const double &src[], double &dst[]) + +{ + + ArrayResize(dst, total); + + const int p = InpSmoothPeriod; + + if(p <= 1) + + { + + ArrayCopy(dst, src); + + return; + + } + + const double alpha = 2.0 / (p + 1.0); + + const int oldest = total - 1; + + double ema = src[oldest]; + + dst[oldest] = ema; + + for(int i = oldest - 1; i >= 0; i--) + + { + + ema = alpha * src[i] + (1.0 - alpha) * ema; + + dst[i] = ema; + + } + +} + +double SrcAt(const int i, const bool useSmooth, const double &smooth[], const double &raw[]) + +{ + + return useSmooth ? smooth[i] : raw[i]; + +} + +bool ComputeDerivatives(const string sym, const ENUM_TIMEFRAMES tf, + + double &out_d1, double &out_d2, double &out_d3) + +{ + + out_d1 = out_d2 = out_d3 = 0.0; + + const int h = MathMax(InpDiffStep, 1); + + const int needBars = 50 + h * 6; + + MqlRates rates[]; + + ArraySetAsSeries(rates, true); + + const int n = CopyRates(sym, tf, 0, needBars, rates); + + if(n < h * 3 + 5) + + return false; + + double raw[]; + + ArrayResize(raw, n); + + ArraySetAsSeries(raw, true); + + for(int i = 0; i < n; i++) + + raw[i] = AppliedFromRates(rates[i]); + + double smoothed[]; + + SmoothPriceArray(n, raw, smoothed); + + const bool useSmooth = (InpSmoothPeriod > 1); + + const double scale = InpNormalizePoints ? SymbolInfoDouble(sym, SYMBOL_POINT) : 1.0; + + if(scale <= 0.0) + + return false; + + const int i = 1; + + if(i + h >= n) + + return false; + + const double d1_i = (SrcAt(i, useSmooth, smoothed, raw) - SrcAt(i + h, useSmooth, smoothed, raw)) / ((double)h * scale); + + if(i + 2 * h >= n) + + { + + out_d1 = d1_i; + + return true; + + } + + const double d1_ip = (SrcAt(i + h, useSmooth, smoothed, raw) - SrcAt(i + 2 * h, useSmooth, smoothed, raw)) / ((double)h * scale); + + const double d2_i = (d1_i - d1_ip) / ((double)h * scale); + + if(i + 3 * h >= n) + + { + + out_d1 = d1_i; + + out_d2 = d2_i; + + return true; + + } + + const double d1_ip2 = (SrcAt(i + 2 * h, useSmooth, smoothed, raw) - SrcAt(i + 3 * h, useSmooth, smoothed, raw)) / ((double)h * scale); + + const double d2_ip = (d1_ip - d1_ip2) / ((double)h * scale); + + const double d3_i = (d2_i - d2_ip) / ((double)h * scale); + + out_d1 = d1_i; + + out_d2 = d2_i; + + out_d3 = d3_i; + + return true; + +} + +double CanvasSeriesAt(const int row, const int si, + + const double &d1[], const double &d2[], const double &d3[]) + +{ + + if(row == 0) + + return d1[si]; + + if(row == 1) + + return d2[si]; + + return d3[si]; + +} + +bool ComputeDerivativeSeries(const string sym, const ENUM_TIMEFRAMES tf, + + const int plotBars, + + double &d1[], double &d2[], double &d3[]) + +{ + + const int h = MathMax(InpDiffStep, 1); + + const int need = plotBars + h * 4 + 10; + + MqlRates rates[]; + + ArraySetAsSeries(rates, true); + + const int n = CopyRates(sym, tf, 0, need, rates); + + if(n < h * 3 + 5) + + return false; + + double raw[]; + + ArrayResize(raw, n); + + ArraySetAsSeries(raw, true); + + for(int i = 0; i < n; i++) + + raw[i] = AppliedFromRates(rates[i]); + + double smoothed[]; + + SmoothPriceArray(n, raw, smoothed); + + const bool useSmooth = (InpSmoothPeriod > 1); + + const double scale = InpNormalizePoints ? SymbolInfoDouble(sym, SYMBOL_POINT) : 1.0; + + if(scale <= 0.0) + + return false; + + ArrayResize(d1, plotBars); + + ArrayResize(d2, plotBars); + + ArrayResize(d3, plotBars); + + ArrayInitialize(d1, EMPTY_VALUE); + + ArrayInitialize(d2, EMPTY_VALUE); + + ArrayInitialize(d3, EMPTY_VALUE); + + const int d1Count = MathMin(plotBars, n - h); + + for(int si = 0; si < d1Count; si++) + + d1[si] = (SrcAt(si, useSmooth, smoothed, raw) - SrcAt(si + h, useSmooth, smoothed, raw)) / ((double)h * scale); + + for(int si = 0; si < plotBars; si++) + + { + + if(si + 2 * h >= n || si + h >= d1Count) + + break; + + d2[si] = (d1[si] - d1[si + h]) / ((double)h * scale); + + } + + for(int si = 0; si < plotBars; si++) + + { + + if(si + 3 * h >= n) + + break; + + if(si + h >= plotBars) + + break; + + if(d2[si] == EMPTY_VALUE || d2[si + h] == EMPTY_VALUE) + + continue; + + d3[si] = (d2[si] - d2[si + h]) / ((double)h * scale); + + } + + return true; + +} + +void UpdateDerivativeCanvasStrip() + +{ + + if(!InpUseCanvasPlots) + + return; + + ENUM_TIMEFRAMES tf = InpSignalTF; + + if(tf == PERIOD_CURRENT) + + tf = (ENUM_TIMEFRAMES)Period(); + + double d1[], d2[], d3[]; + + if(!ComputeDerivativeSeries(g_chartSymbol, tf, InpCanvasPlotBars, d1, d2, d3)) + + return; + + const int chartW = (int)ChartGetInteger(0, CHART_WIDTH_IN_PIXELS); + + if(chartW < 80) + + return; + + const int panelW = MathMax(60, chartW - InpCanvasSideMargin * 2); + + const int panelH = MathMax(90, InpCanvasPanelHeight); + + const int x0 = InpCanvasSideMargin; + + const int y0 = InpCanvasBottomMargin; + + if(!g_deriv_canvas_created) + + { + + if(!g_deriv_canvas.CreateBitmapLabel(0, 0, DERIV_CANVAS_OBJ, x0, y0, panelW, panelH, COLOR_FORMAT_ARGB_NORMALIZE)) + + { + + if(InpDebugTrace) + + Print("DERIVATIVE_CALC: canvas CreateBitmapLabel failed err=", GetLastError()); + + return; + + } + + ObjectSetInteger(0, DERIV_CANVAS_OBJ, OBJPROP_CORNER, CORNER_LEFT_LOWER); + + ObjectSetInteger(0, DERIV_CANVAS_OBJ, OBJPROP_ANCHOR, ANCHOR_LEFT_LOWER); + + ObjectSetInteger(0, DERIV_CANVAS_OBJ, OBJPROP_SELECTABLE, false); + + ObjectSetInteger(0, DERIV_CANVAS_OBJ, OBJPROP_HIDDEN, true); + + g_deriv_canvas_created = true; + + } + + else + + { + + g_deriv_canvas.Resize(panelW, panelH); + + ObjectSetInteger(0, DERIV_CANVAS_OBJ, OBJPROP_XDISTANCE, x0); + + ObjectSetInteger(0, DERIV_CANVAS_OBJ, OBJPROP_YDISTANCE, y0); + + } + + g_deriv_canvas.Erase(ColorToARGB(InpCanvasBgColor, 255)); + + const int rows = 3; + + const int rowH = MathMax(24, panelH / rows); + + const uint clrLines[3] = { + + ColorToARGB(clrDodgerBlue, 235), + + ColorToARGB(clrOrange, 235), + + ColorToARGB(clrMagenta, 235) + + }; + + const string tags[3] = { "d1 velocity", "d2 acceleration", "d3 jerk" }; + + const int nPts = MathMin(InpCanvasPlotBars, ArraySize(d1)); + + if(nPts < 3) + + { + + g_deriv_canvas.Update(); + + return; + + } + + for(int r = 0; r < rows; r++) + + { + + const int yBase = r * rowH; + + const int midY = yBase + rowH / 2; + + g_deriv_canvas.LineAA(0.0, (double)midY, (double)(panelW - 1), (double)midY, ColorToARGB(InpCanvasGridColor, 70)); + + double vmin = DBL_MAX; + + double vmax = -DBL_MAX; + + for(int si = 0; si < nPts; si++) + + { + + const double v = CanvasSeriesAt(r, si, d1, d2, d3); + + if(v == EMPTY_VALUE || !MathIsValidNumber(v)) + + continue; + + if(v < vmin) + + vmin = v; + + if(v > vmax) + + vmax = v; + + } + + if(vmin == DBL_MAX) + + continue; + + if(MathAbs(vmax - vmin) < 1e-15) + + { + + vmin -= 1.0; + + vmax += 1.0; + + } + + g_deriv_canvas.FontSet("Consolas", -90); + + g_deriv_canvas.TextOut(4, yBase + 2, tags[r], ColorToARGB(clrSilver, 220)); + + const double denom = (double)MathMax(1, nPts - 1); + + for(int si = 0; si < nPts - 1; si++) + + { + + const double v0 = CanvasSeriesAt(r, si, d1, d2, d3); + + const double v1 = CanvasSeriesAt(r, si + 1, d1, d2, d3); + + if(v0 == EMPTY_VALUE || v1 == EMPTY_VALUE) + + continue; + + const double xf0 = (double)(panelW - 1) * (double)(nPts - 1 - si) / denom; + + const double xf1 = (double)(panelW - 1) * (double)(nPts - 2 - si) / denom; + + const double t0 = (v0 - vmin) / (vmax - vmin); + + const double t1 = (v1 - vmin) / (vmax - vmin); + + const int py0 = yBase + 3 + (int)((double)(rowH - 6) * (1.0 - t0)); + + const int py1 = yBase + 3 + (int)((double)(rowH - 6) * (1.0 - t1)); + + g_deriv_canvas.LineAA(xf0, (double)py0, xf1, (double)py1, clrLines[r]); + + } + + } + + g_deriv_canvas.Update(); + + ChartRedraw(0); + +} + +bool HasOurPosition(const string sym) + +{ + + for(int i = PositionsTotal() - 1; i >= 0; i--) + + { + + const ulong t = PositionGetTicket(i); + + if(t == 0 || !PositionSelectByTicket(t)) + + continue; + + if(PositionGetString(POSITION_SYMBOL) != sym) + + continue; + + if((ulong)PositionGetInteger(POSITION_MAGIC) != InpMagic) + + continue; + + return true; + + } + + return false; + +} + +double AtrPoints(const string sym, const ENUM_TIMEFRAMES tf) + +{ + + const int h = iATR(sym, tf, InpAtrPeriod); + + if(h == INVALID_HANDLE) + + return 0.0; + + double b[]; + + ArraySetAsSeries(b, true); + + if(CopyBuffer(h, 0, 1, 1, b) != 1) + + { + + IndicatorRelease(h); + + return 0.0; + + } + + IndicatorRelease(h); + + const double pt = SymbolInfoDouble(sym, SYMBOL_POINT); + + return (pt > 0.0 ? b[0] / pt : 0.0); + +} + +void RemoveDerivativePlotsIndicatorsFromChart() + +{ + + const int nw = (int)ChartGetInteger(0, CHART_WINDOWS_TOTAL); + + for(int w = nw - 1; w >= 0; w--) + + { + + const int nc = ChartIndicatorsTotal(0, w); + + for(int k = nc - 1; k >= 0; k--) + + { + + const string nm = ChartIndicatorName(0, w, k); + + if(StringFind(nm, "DERIV_") >= 0 || + + StringFind(nm, "DERIV_PLOTS") >= 0 || + + StringFind(nm, InpPlotsIndicatorPath) >= 0 || + + StringFind(nm, "DerivativePlots") >= 0) + + ChartIndicatorDelete(0, w, nm); + + } + + } + +} + +bool DerivativePlotsAlreadyOnChart() + +{ + + const int nw = (int)ChartGetInteger(0, CHART_WINDOWS_TOTAL); + + for(int w = 0; w < nw; w++) + + { + + const int nc = ChartIndicatorsTotal(0, w); + + for(int k = 0; k < nc; k++) + + { + + const string nm = ChartIndicatorName(0, w, k); + + if(StringFind(nm, "DERIV_") >= 0 || StringFind(nm, "DERIV_PLOTS") >= 0 || + + StringFind(nm, InpPlotsIndicatorPath) >= 0) + + return true; + + } + + } + + return false; + +} + +// Pass every DerivativePlots input (same order as .mq5) so each WhichDerivative gets its own handle. + +int MakeDerivativePlotsHandle(const string sym, const ENUM_TIMEFRAMES tf, + + const ENUM_DERIVATIVE_VIEW which, const bool unifyY) + +{ + + return iCustom(sym, tf, InpPlotsIndicatorPath, + + InpAppliedPrice, + + which, + + unifyY, + + InpDiffStep, + + InpNormalizePoints, + + InpSmoothPeriod, + + true, + + InpDebugTrace, + + false); + +} + +bool AttachDerivativePlotsIndicator(const string sym, const ENUM_TIMEFRAMES tf) + +{ + + if(!InpAutoAttachDerivativePlots) + + return false; + + if(g_derivPlotsAttachDone) + + return true; + + const string wantPath = TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL5\\Indicators\\" + InpPlotsIndicatorPath + ".ex5"; + + // ChartIndicatorAdd(chart, subwindow, handle). Subwindow index: use ChartWindowsTotal() before each add + + // so new panes are appended below existing windows (ATR etc.). Fixed 1,2,3 collides with other indicators. + + const bool unifyPass = InpPlotsSeparateWindows ? false : InpPlotsUnifyYScale; + + if(InpPlotsSeparateWindows) + + { + + ResetLastError(); + + const int ind1 = MakeDerivativePlotsHandle(sym, tf, DERIVATIVE_LEVEL_1, unifyPass); + + if(ind1 == INVALID_HANDLE) + + { + + g_derivativePlotsFailedToLoad = true; + + Print("DERIVATIVE_CALC: iCustom(", InpPlotsIndicatorPath, ", d1) failed err=", GetLastError(), + + ". Required:\n ", wantPath); + + if(InpDebugTrace) + + PrintFormat("DERIVATIVE_CALC dbg iCustom d1 sym=%s tf=%s", sym, EnumToString(tf)); + + return false; + + } + + ResetLastError(); + + const int ind2 = MakeDerivativePlotsHandle(sym, tf, DERIVATIVE_LEVEL_2, unifyPass); + + if(ind2 == INVALID_HANDLE) + + { + + IndicatorRelease(ind1); + + g_derivativePlotsFailedToLoad = true; + + Print("DERIVATIVE_CALC: iCustom(", InpPlotsIndicatorPath, ", d2) failed err=", GetLastError(), + + ". Required:\n ", wantPath); + + return false; + + } + + ResetLastError(); + + const int ind3 = MakeDerivativePlotsHandle(sym, tf, DERIVATIVE_LEVEL_3, unifyPass); + + if(ind3 == INVALID_HANDLE) + + { + + IndicatorRelease(ind1); + + IndicatorRelease(ind2); + + g_derivativePlotsFailedToLoad = true; + + Print("DERIVATIVE_CALC: iCustom(", InpPlotsIndicatorPath, ", d3) failed err=", GetLastError(), + + ". Required:\n ", wantPath); + + return false; + + } + + if(InpDebugTrace) + + PrintFormat("DERIVATIVE_CALC dbg triple iCustom handles ind1=%d ind2=%d ind3=%d (should differ)", + + ind1, ind2, ind3); + + RemoveDerivativePlotsIndicatorsFromChart(); + + int sw = (int)ChartGetInteger(0, CHART_WINDOWS_TOTAL); + + ResetLastError(); + + const bool ok1 = ChartIndicatorAdd(0, sw, ind1); + + const int err1 = GetLastError(); + + sw = (int)ChartGetInteger(0, CHART_WINDOWS_TOTAL); + + ResetLastError(); + + const bool ok2 = ChartIndicatorAdd(0, sw, ind2); + + const int err2 = GetLastError(); + + sw = (int)ChartGetInteger(0, CHART_WINDOWS_TOTAL); + + ResetLastError(); + + const bool ok3 = ChartIndicatorAdd(0, sw, ind3); + + const int err3 = GetLastError(); + + IndicatorRelease(ind1); + + IndicatorRelease(ind2); + + IndicatorRelease(ind3); + + if(!ok1 || !ok2 || !ok3) + + { + + g_derivativePlotsFailedToLoad = true; + + Print("DERIVATIVE_CALC: ChartIndicatorAdd (3 panes) failed ok=", ok1, ",", ok2, ",", ok3, + + " err=", err1, ",", err2, ",", err3, ". File: ", wantPath); + + return false; + + } + + g_derivativePlotsFailedToLoad = false; + + g_derivPlotsAttachDone = true; + + ChartRedraw(0); + + Print("DERIVATIVE_CALC: DerivativePlots attached as three stacked subwindows (indices chosen from CHART_WINDOWS_TOTAL)."); + + if(InpDebugTrace) + + PrintFormat("DERIVATIVE_CALC dbg triple attach OK sym=%s tf=%s", sym, EnumToString(tf)); + + return true; + + } + + ResetLastError(); + + const int ind = MakeDerivativePlotsHandle(sym, tf, InpWhichDerivative, unifyPass); + + if(ind == INVALID_HANDLE) + + { + + g_derivativePlotsFailedToLoad = true; + + Print("DERIVATIVE_CALC: iCustom(\"", InpPlotsIndicatorPath, "\") failed err=", GetLastError(), + + ". MT5 could not read the compiled indicator. Required file:\n ", wantPath, + + "\nCopy lab\\\\EAs\\\\DerivativePlots.mq5 into that Indicators folder, open in MetaEditor, press Compile (F7)."); + + if(InpDebugTrace) + + PrintFormat("DERIVATIVE_CALC dbg iCustom sym=%s tf=%s applied=%d which=%d unify=%s h=%d norm=%s sm=%d", + + sym, EnumToString(tf), (int)InpAppliedPrice, (int)InpWhichDerivative, + + InpPlotsUnifyYScale ? "on" : "off", + + InpDiffStep, InpNormalizePoints ? "on" : "off", InpSmoothPeriod); + + return false; + + } + + RemoveDerivativePlotsIndicatorsFromChart(); + + int sw = (int)ChartGetInteger(0, CHART_WINDOWS_TOTAL); + + ResetLastError(); + + const bool ok = ChartIndicatorAdd(0, sw, ind); + + const int errAfterAdd = GetLastError(); + + IndicatorRelease(ind); + + if(!ok) + + { + + g_derivativePlotsFailedToLoad = true; + + Print("DERIVATIVE_CALC: ChartIndicatorAdd failed err=", errAfterAdd, + + ". Expected file present: ", wantPath); + + return false; + + } + + g_derivativePlotsFailedToLoad = false; + + g_derivPlotsAttachDone = true; + + ChartRedraw(0); + + Print("DERIVATIVE_CALC: subwindow indicator attached (inputs synced from EA)."); + + if(InpDebugTrace) + + PrintFormat("DERIVATIVE_CALC dbg attach OK handle_was_valid ChartIndicatorAdd err=%d sym=%s tf=%s sw=%d", + + errAfterAdd, sym, EnumToString(tf), sw); + + return true; + +} + +void TryDemoTrade(const string sym, const ENUM_TIMEFRAMES tf, + + const double d1, const double d2, const double d3) + +{ + + if(!InpTradeEnabled || HasOurPosition(sym)) + + return; + + bool wantBuy = false; + + bool wantSell = false; + + switch(InpWhichDerivative) + + { + + case DERIVATIVE_ALL: + + case DERIVATIVE_LEVEL_1: + + wantBuy = (d1 > 0.0 && d2 > 0.0); + + wantSell = (d1 < 0.0 && d2 < 0.0); + + break; + + case DERIVATIVE_LEVEL_2: + + wantBuy = (d2 > 0.0); + + wantSell = (d2 < 0.0); + + break; + + default: + + wantBuy = (d3 > 0.0); + + wantSell = (d3 < 0.0); + + break; + + } + + if(!wantBuy && !wantSell) + + return; + + MqlTick tick; + + if(!SymbolInfoTick(sym, tick)) + + return; + + const double atrPts = AtrPoints(sym, tf); + + const double pt = SymbolInfoDouble(sym, SYMBOL_POINT); + + const double slPts = MathMax(atrPts * InpSlAtrMult, 10.0); + + const double tpPts = MathMax(atrPts * InpTpAtrMult, 10.0); + + double sl = 0.0, tp = 0.0; + + if(wantBuy) + + { + + sl = tick.ask - slPts * pt; + + tp = tick.ask + tpPts * pt; + + g_trade.Buy(InpLots, sym, tick.ask, sl, tp, "DERIVATIVE_CALC demo"); + + } + + else if(wantSell) + + { + + sl = tick.bid + slPts * pt; + + tp = tick.bid - tpPts * pt; + + g_trade.Sell(InpLots, sym, tick.bid, sl, tp, "DERIVATIVE_CALC demo"); + + } + +} + +int OnInit() + +{ + + g_derivPlotsAttachDone = false; + + g_lastCommentWallMs = 0; + + g_chartSymbol = InpSymbol; + + StringTrimLeft(g_chartSymbol); + + StringTrimRight(g_chartSymbol); + + if(StringLen(g_chartSymbol) == 0) + + g_chartSymbol = _Symbol; + + if(!SymbolSelect(g_chartSymbol, true)) + + { + + Print("DERIVATIVE_CALC EA: cannot select symbol ", g_chartSymbol); + + return INIT_FAILED; + + } + + g_trade.SetExpertMagicNumber((long)InpMagic); + + g_trade.SetDeviationInPoints(InpSlippagePoints); + + g_trade.SetTypeFillingBySymbol(g_chartSymbol); + + ENUM_TIMEFRAMES tf = InpSignalTF; + + if(tf == PERIOD_CURRENT) + + tf = (ENUM_TIMEFRAMES)Period(); + + Print("DERIVATIVE_CALC EA started on ", g_chartSymbol, " ", EnumToString(tf), + + ". This is an Expert Advisor — not the Accelerator indicator."); + + if(InpDebugTrace) + + PrintFormat("DERIVATIVE_CALC dbg chart_TF=%s signal_TF=%s normalize=%s h=%d sm=%d tester=%s visual=%s", + + EnumToString((ENUM_TIMEFRAMES)Period()), EnumToString(tf), + + InpNormalizePoints ? "on" : "off", InpDiffStep, InpSmoothPeriod, + + MQLInfoInteger(MQL_TESTER) ? "yes" : "no", + + MQLInfoInteger(MQL_VISUAL_MODE) ? "yes" : "no"); + + DeleteOurHelpObjects(); + + TryBuildHelpPanel(); + + // Do not call iCustom / ChartIndicatorAdd here — Strategy Tester treats failed indicator load in OnInit as a critical error. + + // Attachment runs on first OnTick instead (see g_pendingDerivativePlotsAttach). + + if(InpUseCanvasPlots) + + { + + RemoveDerivativePlotsIndicatorsFromChart(); + + EventSetMillisecondTimer(120); + + } + + else + + EventKillTimer(); + + if(InpAutoAttachDerivativePlots && !InpUseCanvasPlots) + + { + + RemoveDerivativePlotsIndicatorsFromChart(); + + const bool in_tester = (MQLInfoInteger(MQL_TESTER) != 0); + + const bool visual = (MQLInfoInteger(MQL_VISUAL_MODE) != 0); + + const bool skip_tester_attach = (in_tester && !visual && !InpAttachPlotsInTester); + + if(skip_tester_attach) + + { + + Print("DERIVATIVE_CALC: non-visual Strategy Tester - skipping DerivativePlots attach. ", + + "Use visual mode for subwindow plots, or set InpAttachPlotsInTester=true if DerivativePlots.ex5 is in MQL5\\Indicators\\."); + + } + + else + + { + + g_pendingDerivativePlotsAttach = true; + + Print("DERIVATIVE_CALC: DerivativePlots attach scheduled on first tick (OnInit cannot safely load custom indicators in tester)."); + + } + + } + + return INIT_SUCCEEDED; + +} + +void OnDeinit(const int reason) + +{ + + EventKillTimer(); + + if(g_deriv_canvas_created) + + { + + g_deriv_canvas.Destroy(); + + g_deriv_canvas_created = false; + + } + + ObjectDelete(0, DERIV_CANVAS_OBJ); + + g_derivPlotsAttachDone = false; + + DeleteOurHelpObjects(); + + Comment(""); + +} + +void OnTimer() + +{ + + if(!InpUseCanvasPlots) + + return; + + const uint now = GetTickCount(); + + if(InpCanvasRedrawMs > 0 && g_lastCanvasRedrawMs != 0 && + + (now - g_lastCanvasRedrawMs) < (uint)InpCanvasRedrawMs) + + return; + + g_lastCanvasRedrawMs = now; + + UpdateDerivativeCanvasStrip(); + +} + +void OnTick() + +{ + + ENUM_TIMEFRAMES tf = InpSignalTF; + + if(tf == PERIOD_CURRENT) + + tf = (ENUM_TIMEFRAMES)Period(); + + if(g_pendingDerivativePlotsAttach && !InpUseCanvasPlots) + + { + + g_pendingDerivativePlotsAttach = false; + + AttachDerivativePlotsIndicator(g_chartSymbol, tf); + + } + + const datetime barOpen = iTime(g_chartSymbol, tf, 0); + + if(barOpen == 0) + + return; + + if(barOpen == g_lastBarTime) + + return; + + g_lastBarTime = barOpen; + + double d1 = 0.0, d2 = 0.0, d3 = 0.0; + + if(!ComputeDerivatives(g_chartSymbol, tf, d1, d2, d3)) + + { + + if(InpDebugTrace) + + PrintFormat("DERIVATIVE_CALC dbg ComputeDerivatives FAILED sym=%s tf=%s bar=%s pt=%.12g", + + g_chartSymbol, EnumToString(tf), TimeToString(barOpen, TIME_DATE | TIME_MINUTES), + + SymbolInfoDouble(g_chartSymbol, SYMBOL_POINT)); + + if(InpShowComment) + + CommentThrottled("DERIVATIVE_CALC: not enough bars yet on " + g_chartSymbol + " " + EnumToString(tf) + + + DerivativePlotsMissingHint()); + + return; + + } + + if(InpDebugTrace) + + PrintFormat("DERIVATIVE_CALC dbg bar=%s sym=%s chart_TF=%s signal_TF=%s | d1=%.8g d2=%.8g d3=%.8g | pt=%.12g norm=%s h=%d", + + TimeToString(barOpen, TIME_DATE | TIME_MINUTES), g_chartSymbol, + + EnumToString((ENUM_TIMEFRAMES)Period()), EnumToString(tf), + + d1, d2, d3, SymbolInfoDouble(g_chartSymbol, SYMBOL_POINT), + + InpNormalizePoints ? "on" : "off", InpDiffStep); + + if(InpShowComment) + + { + + string c = "DERIVATIVE_CALC EA | " + g_chartSymbol + + + "\nChart TF: " + EnumToString((ENUM_TIMEFRAMES)Period()) + + + " Signal TF (inputs): " + EnumToString(tf) + + + "\nd1=" + DoubleToString(d1, 4) + " d2=" + DoubleToString(d2, 4) + " d3=" + DoubleToString(d3, 4) + + + "\n(InpWhichDerivative=" + IntegerToString((int)InpWhichDerivative) + + + " h=" + IntegerToString(InpDiffStep) + " sm=" + IntegerToString(InpSmoothPeriod) + ")" + + + (InpUseCanvasPlots + + ? "\nPlots: EA canvas strip (bottom of chart)." + + : ("\nPlots below: DerivativePlots indicator." + DerivativePlotsMissingHint())); + + CommentThrottled(c); + + } + + TryDemoTrade(g_chartSymbol, tf, d1, d2, d3); + +} + +//+------------------------------------------------------------------+ + diff --git a/lab/EAs/DerivativePlots.mq5 b/lab/EAs/DerivativePlots.mq5 new file mode 100644 index 0000000..5671e9f --- /dev/null +++ b/lab/EAs/DerivativePlots.mq5 @@ -0,0 +1,425 @@ +//+------------------------------------------------------------------+ +//| DerivativePlots.mq5 | +//| Subwindow line plots for d1 / d2 / d3 — use with Derivative EA | +//| Compile into MQL5\\Indicators\\ (same name). EA can ChartIndicatorAdd.| +//+------------------------------------------------------------------+ +#property copyright "Lab" +#property link "" +#property version "1.10" +#property indicator_separate_window +#property indicator_buffers 3 +#property indicator_plots 3 +#property description "Plots d1 d2 d3 below chart. Match inputs to Derivative EA." + +#property indicator_label1 "d1 velocity" +#property indicator_type1 DRAW_LINE +#property indicator_color1 clrDodgerBlue +#property indicator_width1 1 + +#property indicator_label2 "d2 acceleration" +#property indicator_type2 DRAW_LINE +#property indicator_color2 clrOrange +#property indicator_width2 1 + +#property indicator_label3 "d3 jerk" +#property indicator_type3 DRAW_LINE +#property indicator_color3 clrMagenta +#property indicator_width3 1 + +enum ENUM_DERIVATIVE_VIEW +{ + DERIVATIVE_ALL = 0, + DERIVATIVE_LEVEL_1 = 1, + DERIVATIVE_LEVEL_2 = 2, + DERIVATIVE_LEVEL_3 = 3 +}; + +input group "=== Source ===" +input ENUM_APPLIED_PRICE InpAppliedPrice = PRICE_CLOSE; + +input group "=== Layout ===" +input ENUM_DERIVATIVE_VIEW InpWhichDerivative = DERIVATIVE_ALL; // Single-line modes clear other buffers to EMPTY_VALUE so Y-scale matches the visible line +input bool InpUnifyPlotYScale = true; // Scale d2,d3 for comparable magnitude when normalized (shared subwindow) + +input group "=== Calculus ===" +input int InpDiffStep = 1; +input bool InpNormalizePoints = true; + +input group "=== Smoothing ===" +input int InpSmoothPeriod = 0; + +input group "=== Status ===" +input bool InpShowValueBanner = true; // Text label; short name is DERIV_ALL / DERIV_d1 / DERIV_d2 / DERIV_d3 for ChartWindowFind + +input group "=== Debug (Experts / Journal) ===" +input bool InpDebugTrace = false; // Print diagnostics to Experts tab +input bool InpDebugLogEveryCalculate = false; // Log every OnCalculate (very verbose) + +double ExtD1[]; +double ExtD2[]; +double ExtD3[]; + +string g_deriv_chart_title = "DERIV_ALL"; +string g_deriv_stat_obj = "DerivPV_ALL"; + +void SetupDerivIdentity() +{ + switch(InpWhichDerivative) + { + case DERIVATIVE_ALL: + g_deriv_chart_title = "DERIV_ALL"; + g_deriv_stat_obj = "DerivPV_ALL"; + break; + case DERIVATIVE_LEVEL_1: + g_deriv_chart_title = "DERIV_d1"; + g_deriv_stat_obj = "DerivPV_d1"; + break; + case DERIVATIVE_LEVEL_2: + g_deriv_chart_title = "DERIV_d2"; + g_deriv_stat_obj = "DerivPV_d2"; + break; + default: + g_deriv_chart_title = "DERIV_d3"; + g_deriv_stat_obj = "DerivPV_d3"; + break; + } +} + +// OnCalculate passes OHLC with index 0 = oldest bar (non-series). Do not ArraySetAsSeries() those arrays. + +double AppliedPriceRowNs(const int pos, const double &open[], const double &high[], + const double &low[], const double &close[]) +{ + switch(InpAppliedPrice) + { + case PRICE_OPEN: return open[pos]; + case PRICE_HIGH: return high[pos]; + case PRICE_LOW: return low[pos]; + case PRICE_CLOSE: return close[pos]; + case PRICE_MEDIAN: return (high[pos] + low[pos]) * 0.5; + case PRICE_TYPICAL: return (high[pos] + low[pos] + close[pos]) / 3.0; + case PRICE_WEIGHTED: return (high[pos] + low[pos] + close[pos] + close[pos]) / 4.0; + default: return close[pos]; + } +} + +void SmoothPriceArrayNs(const int total, const double &src[], double &dst[]) +{ + ArrayResize(dst, total); + const int p = InpSmoothPeriod; + if(p <= 1) + { + ArrayCopy(dst, src); + return; + } + const double alpha = 2.0 / (p + 1.0); + dst[0] = src[0]; + for(int pos = 1; pos < total; pos++) + dst[pos] = alpha * src[pos] + (1.0 - alpha) * dst[pos - 1]; +} + +double SrcNs(const int pos, const bool useSmooth, const double &smooth[], const double &raw[]) +{ + return useSmooth ? smooth[pos] : raw[pos]; +} + +double DerivativeScalePts() +{ + double pt = SymbolInfoDouble(_Symbol, SYMBOL_POINT); + if(pt <= 0.0 || !MathIsValidNumber(pt)) + pt = _Point; + if(!InpNormalizePoints) + return 1.0; + if(pt <= 0.0) + return 1.0; + return pt; +} + +void DerivPlotsTrace(const int rates_total, const int prev_calculated, + const int h, const int min_bars, const double scale, const bool useSmooth, + const double &close[], const double &WorkNs[], const datetime &time[]) +{ + if(!InpDebugTrace) + return; + + static int s_call = 0; + s_call++; + + const int newest = rates_total - 1; + const datetime barOpen = time[newest]; + + static datetime s_prevBarOpen = 0; + const bool isNewBarTime = (barOpen != s_prevBarOpen); + if(isNewBarTime) + s_prevBarOpen = barOpen; + + const bool fullRecalc = (prev_calculated == 0); + + if(InpDebugLogEveryCalculate) + { + PrintFormat("DERIV_PLOTS #%d prev_calc=%d rates=%d bar=%s | d1[0]=%.8g d2[0]=%.8g d3[0]=%.8g", + s_call, prev_calculated, rates_total, TimeToString(barOpen, TIME_DATE | TIME_MINUTES), + ExtD1[0], ExtD2[0], ExtD3[0]); + return; + } + + if(fullRecalc) + { + const double pt = SymbolInfoDouble(_Symbol, SYMBOL_POINT); + const double rawStep = (newest >= h) ? (WorkNs[newest] - WorkNs[newest - h]) : 0.0; + PrintFormat("DERIV_PLOTS FULL_CALC #%d sym=%s rates=%d prev_calc=%d h=%d min_need=%d smooth=%s which=%d", + s_call, _Symbol, rates_total, prev_calculated, h, min_bars, + useSmooth ? "on" : "off", (int)InpWhichDerivative); + PrintFormat(" scale=%.12g normalize=%s SYPOINT=%.12g _Point=%.12g SYM_DIGITS=%d", + scale, InpNormalizePoints ? "on" : "off", pt, _Point, + (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS)); + PrintFormat(" close[oldest]=%.8f close[newest]=%.8f rawStep(newest..newest-h)=%.8f", + close[0], close[newest], rawStep); + PrintFormat(" series buf [0]=current bar: d1=%.8g d2=%.8g d3=%.8g (EMPTY_VALUE=%.8g)", + ExtD1[0], ExtD2[0], ExtD3[0], EMPTY_VALUE); + } + else if(isNewBarTime) + { + PrintFormat("DERIV_PLOTS BAR %s rates=%d prev_calc=%d | d1[0]=%.8g d2[0]=%.8g d3[0]=%.8g", + TimeToString(barOpen, TIME_DATE | TIME_MINUTES), rates_total, prev_calculated, + ExtD1[0], ExtD2[0], ExtD3[0]); + } +} + +string FormatPlotVal(const double v) +{ + if(v == EMPTY_VALUE || !MathIsValidNumber(v)) + return "—"; + return DoubleToString(v, 4); +} + +void UpdateValueBanner(const int rates_total) +{ + if(!InpShowValueBanner || rates_total < 1) + return; + + string txt = ""; + switch(InpWhichDerivative) + { + case DERIVATIVE_ALL: + txt = StringFormat("d1=%s d2=%s d3=%s (h=%d sm=%d%s)", + FormatPlotVal(ExtD1[0]), FormatPlotVal(ExtD2[0]), FormatPlotVal(ExtD3[0]), + InpDiffStep, InpSmoothPeriod, InpUnifyPlotYScale ? " unifyY" : ""); + break; + case DERIVATIVE_LEVEL_1: + txt = StringFormat("d1=%s", FormatPlotVal(ExtD1[0])); + break; + case DERIVATIVE_LEVEL_2: + txt = StringFormat("d2=%s", FormatPlotVal(ExtD2[0])); + break; + default: + txt = StringFormat("d3=%s", FormatPlotVal(ExtD3[0])); + break; + } + + IndicatorSetString(INDICATOR_SHORTNAME, g_deriv_chart_title); + + const int sub = ChartWindowFind(0, g_deriv_chart_title); + if(sub < 0) + return; + + if(ObjectFind(0, g_deriv_stat_obj) < 0) + { + if(!ObjectCreate(0, g_deriv_stat_obj, OBJ_LABEL, sub, 0, 0)) + return; + ObjectSetInteger(0, g_deriv_stat_obj, OBJPROP_CORNER, CORNER_LEFT_UPPER); + ObjectSetInteger(0, g_deriv_stat_obj, OBJPROP_ANCHOR, ANCHOR_LEFT_UPPER); + ObjectSetInteger(0, g_deriv_stat_obj, OBJPROP_XDISTANCE, 6); + ObjectSetInteger(0, g_deriv_stat_obj, OBJPROP_YDISTANCE, 16); + ObjectSetInteger(0, g_deriv_stat_obj, OBJPROP_COLOR, clrSilver); + ObjectSetInteger(0, g_deriv_stat_obj, OBJPROP_FONTSIZE, 9); + ObjectSetString(0, g_deriv_stat_obj, OBJPROP_FONT, "Consolas"); + ObjectSetInteger(0, g_deriv_stat_obj, OBJPROP_SELECTABLE, false); + ObjectSetInteger(0, g_deriv_stat_obj, OBJPROP_HIDDEN, true); + } + ObjectSetString(0, g_deriv_stat_obj, OBJPROP_TEXT, txt); +} + +// Hide unused buffers from autoscale: DRAW_NONE plots can still skew separate-window limits if buffers hold numbers. +void MaskBuffersForDerivativeView() +{ + switch(InpWhichDerivative) + { + case DERIVATIVE_ALL: + break; + case DERIVATIVE_LEVEL_1: + ArrayInitialize(ExtD2, EMPTY_VALUE); + ArrayInitialize(ExtD3, EMPTY_VALUE); + break; + case DERIVATIVE_LEVEL_2: + ArrayInitialize(ExtD1, EMPTY_VALUE); + ArrayInitialize(ExtD3, EMPTY_VALUE); + break; + default: + ArrayInitialize(ExtD1, EMPTY_VALUE); + ArrayInitialize(ExtD2, EMPTY_VALUE); + break; + } +} + +void ApplyDerivativeViewMode() +{ + switch(InpWhichDerivative) + { + case DERIVATIVE_ALL: + PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_LINE); + PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_LINE); + PlotIndexSetInteger(2, PLOT_DRAW_TYPE, DRAW_LINE); + PlotIndexSetInteger(0, PLOT_LINE_COLOR, clrDodgerBlue); + PlotIndexSetInteger(1, PLOT_LINE_COLOR, clrOrange); + PlotIndexSetInteger(2, PLOT_LINE_COLOR, clrMagenta); + PlotIndexSetInteger(0, PLOT_LINE_WIDTH, 2); + PlotIndexSetInteger(1, PLOT_LINE_WIDTH, 3); + PlotIndexSetInteger(2, PLOT_LINE_WIDTH, 3); + PlotIndexSetInteger(0, PLOT_LINE_STYLE, STYLE_SOLID); + PlotIndexSetInteger(1, PLOT_LINE_STYLE, STYLE_SOLID); + PlotIndexSetInteger(2, PLOT_LINE_STYLE, STYLE_SOLID); + PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, EMPTY_VALUE); + PlotIndexSetDouble(2, PLOT_EMPTY_VALUE, EMPTY_VALUE); + break; + case DERIVATIVE_LEVEL_1: + PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_LINE); + PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_NONE); + PlotIndexSetInteger(2, PLOT_DRAW_TYPE, DRAW_NONE); + PlotIndexSetInteger(0, PLOT_LINE_COLOR, clrDodgerBlue); + PlotIndexSetInteger(0, PLOT_LINE_WIDTH, 2); + PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE); + break; + case DERIVATIVE_LEVEL_2: + PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_NONE); + PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_LINE); + PlotIndexSetInteger(2, PLOT_DRAW_TYPE, DRAW_NONE); + PlotIndexSetInteger(1, PLOT_LINE_COLOR, clrOrange); + PlotIndexSetInteger(1, PLOT_LINE_WIDTH, 3); + PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, EMPTY_VALUE); + break; + default: + PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_NONE); + PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_NONE); + PlotIndexSetInteger(2, PLOT_DRAW_TYPE, DRAW_LINE); + PlotIndexSetInteger(2, PLOT_LINE_COLOR, clrMagenta); + PlotIndexSetInteger(2, PLOT_LINE_WIDTH, 3); + PlotIndexSetDouble(2, PLOT_EMPTY_VALUE, EMPTY_VALUE); + break; + } +} + +int OnInit() +{ + SetIndexBuffer(0, ExtD1, INDICATOR_DATA); + SetIndexBuffer(1, ExtD2, INDICATOR_DATA); + SetIndexBuffer(2, ExtD3, INDICATOR_DATA); + SetupDerivIdentity(); + ApplyDerivativeViewMode(); + IndicatorSetString(INDICATOR_SHORTNAME, g_deriv_chart_title); + const int dig = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS); + IndicatorSetInteger(INDICATOR_DIGITS, MathMax(6, dig)); + if(InpDebugTrace) + PrintFormat("DERIV_PLOTS INIT sym=%s applied=%s h=%d sm=%d norm=%s dbg_every_calc=%s", + _Symbol, EnumToString(InpAppliedPrice), InpDiffStep, InpSmoothPeriod, + InpNormalizePoints ? "on" : "off", InpDebugLogEveryCalculate ? "on" : "off"); + return INIT_SUCCEEDED; +} + +void OnDeinit(const int reason) +{ + ObjectDelete(0, g_deriv_stat_obj); +} + +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[]) +{ + const int h = MathMax(InpDiffStep, 1); + const int min_bars = 3 * h + 2; + + ApplyDerivativeViewMode(); + + ArrayResize(ExtD1, rates_total); + ArrayResize(ExtD2, rates_total); + ArrayResize(ExtD3, rates_total); + ArraySetAsSeries(ExtD1, true); + ArraySetAsSeries(ExtD2, true); + ArraySetAsSeries(ExtD3, true); + ArrayInitialize(ExtD1, EMPTY_VALUE); + ArrayInitialize(ExtD2, EMPTY_VALUE); + ArrayInitialize(ExtD3, EMPTY_VALUE); + + if(rates_total < min_bars) + { + if(InpDebugTrace) + PrintFormat("DERIV_PLOTS SHORT_HISTORY sym=%s rates=%d need=%d (3*h+2, h=%d) — buffers left EMPTY", + _Symbol, rates_total, min_bars, h); + return rates_total; + } + + double WorkNs[]; + ArrayResize(WorkNs, rates_total); + for(int pos = 0; pos < rates_total; pos++) + WorkNs[pos] = AppliedPriceRowNs(pos, open, high, low, close); + + static double SmoothNs[]; + SmoothPriceArrayNs(rates_total, WorkNs, SmoothNs); + + const bool useSmooth = (InpSmoothPeriod > 1); + const double scale = DerivativeScalePts(); + + // Bar index pos: 0 = oldest, rates_total-1 = newest. Map to series buffer si = rates_total - 1 - pos (0 = current bar). + const double hs = (double)h * scale; + const bool unify = InpUnifyPlotYScale; + + for(int pos = h; pos < rates_total; pos++) + { + const double d1 = (SrcNs(pos, useSmooth, SmoothNs, WorkNs) - SrcNs(pos - h, useSmooth, SmoothNs, WorkNs)) / ((double)h * scale); + const int si = rates_total - 1 - pos; + ExtD1[si] = d1; + } + + for(int pos = 2 * h; pos < rates_total; pos++) + { + const double d1_pos = (SrcNs(pos, useSmooth, SmoothNs, WorkNs) - SrcNs(pos - h, useSmooth, SmoothNs, WorkNs)) / ((double)h * scale); + const double d1_pm = (SrcNs(pos - h, useSmooth, SmoothNs, WorkNs) - SrcNs(pos - 2 * h, useSmooth, SmoothNs, WorkNs)) / ((double)h * scale); + double d2 = (d1_pos - d1_pm) / ((double)h * scale); + if(unify) + d2 *= hs; + const int si = rates_total - 1 - pos; + ExtD2[si] = d2; + } + + for(int pos = 3 * h; pos < rates_total; pos++) + { + const double d1_pos = (SrcNs(pos, useSmooth, SmoothNs, WorkNs) - SrcNs(pos - h, useSmooth, SmoothNs, WorkNs)) / ((double)h * scale); + const double d1_pm = (SrcNs(pos - h, useSmooth, SmoothNs, WorkNs) - SrcNs(pos - 2 * h, useSmooth, SmoothNs, WorkNs)) / ((double)h * scale); + const double d1_pm2 = (SrcNs(pos - 2 * h, useSmooth, SmoothNs, WorkNs) - SrcNs(pos - 3 * h, useSmooth, SmoothNs, WorkNs)) / ((double)h * scale); + const double d2_pos = (d1_pos - d1_pm) / ((double)h * scale); + const double d2_pm = (d1_pm - d1_pm2) / ((double)h * scale); + double d3 = (d2_pos - d2_pm) / ((double)h * scale); + if(unify) + d3 *= hs * hs; + const int si = rates_total - 1 - pos; + ExtD3[si] = d3; + } + + MaskBuffersForDerivativeView(); + + DerivPlotsTrace(rates_total, prev_calculated, h, min_bars, scale, useSmooth, close, WorkNs, time); + + UpdateValueBanner(rates_total); + + return rates_total; +} + +//+------------------------------------------------------------------+ diff --git a/lab/EAs/TFXNZDUSD.mq5 b/lab/EAs/TFXNZDUSD.mq5 new file mode 100644 index 0000000..fb85078 --- /dev/null +++ b/lab/EAs/TFXNZDUSD.mq5 @@ -0,0 +1,383 @@ +//+------------------------------------------------------------------+ +//| TFXNZDUSD.mq5 | +//| NZDUSD: HTF directional bias + intraday bearish→bullish shift | +//| Mirrors a reactive workflow: higher TFs for bias (D1/W1), | +//| lower TFs (H4–M15) for confirmation — long bias / pullback / | +//| reclaim entry. Not predictive; signals on closed bars. | +//+------------------------------------------------------------------+ +#property copyright "Lab" +#property link "" +#property version "1.01" +#property description "NZDUSD long-bias EA: D1/W1 trend filter, intraday EMA cross after pullback streak, ATR risk." + +#include + +input group "=== Symbol ===" +input string InpSymbol = "NZDUSD"; // Spot FX symbol (broker-specific) + +input group "=== Timeframes (thesis) ===" +input ENUM_TIMEFRAMES InpBiasTF = PERIOD_D1; // Directional bias (monthly/weekly/daily idea → D1 default) +input ENUM_TIMEFRAMES InpHigherBiasTF = PERIOD_W1; // Optional second bias filter +input ENUM_TIMEFRAMES InpSignalTF = PERIOD_H4; // Intraday environment shift (H4 or lower) + +input group "=== HTF bias (long-only, reactive) ===" +input bool InpUseWeeklyBias = true; // Require W1 close > W1 EMA +input int InpBiasEmaPeriod = 50; // EMA period on bias TFs +input bool InpAllowCounterBias = false; // If false, skip longs when D1 close < D1 EMA + +input group "=== Intraday shift (bearish → bullish) ===" +input int InpFastEma = 8; +input int InpSlowEma = 21; +input int InpMinBearishBars = 3; // Min consecutive bars with fast EMA < slow before cross-up +input bool InpRequireBullBody = true; // Bullish closed candle on cross bar + +input group "=== Risk ===" +input double InpLots = 0.10; +input int InpMagic = 926001; +input int InpSlippagePoints = 20; +input int InpMaxSpreadPoints = 40; +input bool InpUseAtrStops = true; +input int InpAtrPeriod = 14; +input double InpSlAtrMult = 1.5; +input double InpTpAtrMult = 2.5; +input double InpMinStopPoints = 50; +input int InpMaxPositions = 1; + +input group "=== Session (optional) ===" +input bool InpUseSessionFilter = false; +input int InpSessionStartHour = 7; // Server hour start +input int InpSessionEndHour = 20; // Server hour end (exclusive if cross midnight handled below) + +CTrade g_trade; + +int g_atrSig = INVALID_HANDLE; +int g_emaBiasD1 = INVALID_HANDLE; +int g_emaBiasW1 = INVALID_HANDLE; +int g_emaFastSig = INVALID_HANDLE; +int g_emaSlowSig = INVALID_HANDLE; + +/// Effective TFs after sanity check (genetic optimizers often pass invalid ENUM integers). +ENUM_TIMEFRAMES g_effBiasTF = PERIOD_D1; +ENUM_TIMEFRAMES g_effHigherBiasTF = PERIOD_W1; +ENUM_TIMEFRAMES g_effSignalTF = PERIOD_H4; + +datetime g_lastSignalBar = 0; + +// Maps garbage timeframe integers from optimization to nearest supported standard period. +ENUM_TIMEFRAMES NearestStandardTf(const ENUM_TIMEFRAMES raw) +{ + if(PeriodSeconds(raw) > 0) + return raw; + + const ENUM_TIMEFRAMES cand[] = + { + PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1 + }; + const long r = (long)raw; + ENUM_TIMEFRAMES best = PERIOD_H4; + long bestDist = -1; + for(int i = 0; i < ArraySize(cand); i++) + { + if(PeriodSeconds(cand[i]) <= 0) + continue; + const long diff = r - (long)cand[i]; + const long d = (diff >= 0 ? diff : -diff); + if(bestDist < 0 || d < bestDist) + { + bestDist = d; + best = cand[i]; + } + } + return best; +} + +string WorkSymbol() +{ + string s = InpSymbol; + StringTrimLeft(s); + StringTrimRight(s); + // .set files sometimes concatenate optimization payload into string inputs (e.g. "NZDUSD||0||...") + const int bar = StringFind(s, "|"); + if(bar >= 0) + s = StringSubstr(s, 0, bar); + StringTrimRight(s); + return (StringLen(s) > 0 ? s : _Symbol); +} + +bool SessionOk() +{ + if(!InpUseSessionFilter) + return true; + MqlDateTime dt; + TimeToStruct(TimeCurrent(), dt); + int h = dt.hour; + if(InpSessionStartHour <= InpSessionEndHour) + return (h >= InpSessionStartHour && h < InpSessionEndHour); + return (h >= InpSessionStartHour || h < InpSessionEndHour); +} + +double Buf1(const int handle, const int shift) +{ + double b[]; + ArraySetAsSeries(b, true); + if(CopyBuffer(handle, 0, shift, 1, b) != 1) + return 0.0; + return b[0]; +} + +bool CopyClose(const string sym, const ENUM_TIMEFRAMES tf, const int shift, double &out) +{ + double c[]; + ArraySetAsSeries(c, true); + if(CopyClose(sym, tf, shift, 1, c) != 1) + return false; + out = c[0]; + return true; +} + +bool HtfLongBias(const string sym) +{ + double cD1 = 0.0, eD1 = 0.0; + if(!CopyClose(sym, g_effBiasTF, 1, cD1)) + return false; + eD1 = Buf1(g_emaBiasD1, 1); + if(eD1 <= 0.0) + return false; + if(!InpAllowCounterBias && cD1 <= eD1) + return false; + + if(InpUseWeeklyBias) + { + double cW1 = 0.0, eW1 = 0.0; + if(!CopyClose(sym, g_effHigherBiasTF, 1, cW1)) + return false; + eW1 = Buf1(g_emaBiasW1, 1); + if(eW1 <= 0.0) + return false; + if(cW1 <= eW1) + return false; + } + return true; +} + +int CountConsecutiveBearishEma(const string sym, const int fromShift, const int maxLookback) +{ + double f[], s[]; + ArraySetAsSeries(f, true); + ArraySetAsSeries(s, true); + int need = maxLookback + fromShift; + if(CopyBuffer(g_emaFastSig, 0, 0, need, f) < need) + return 0; + if(CopyBuffer(g_emaSlowSig, 0, 0, need, s) < need) + return 0; + + int n = 0; + for(int i = fromShift; i < fromShift + maxLookback; i++) + { + if(f[i] <= s[i]) + n++; + else + break; + } + return n; +} + +bool BullishCrossOnLastClosedBar(const string sym) +{ + double f1 = Buf1(g_emaFastSig, 1); + double s1 = Buf1(g_emaSlowSig, 1); + double f2 = Buf1(g_emaFastSig, 2); + double s2 = Buf1(g_emaSlowSig, 2); + if(f1 <= 0.0 || s1 <= 0.0 || f2 <= 0.0 || s2 <= 0.0) + return false; + + bool crossedUp = (f1 > s1 && f2 <= s2); + if(!crossedUp) + return false; + + int bearStreak = CountConsecutiveBearishEma(sym, 2, 32); + if(bearStreak < InpMinBearishBars) + return false; + + if(InpRequireBullBody) + { + MqlRates r[]; + ArraySetAsSeries(r, true); + if(CopyRates(sym, g_effSignalTF, 1, 1, r) != 1) + return false; + if(r[0].close <= r[0].open) + return false; + } + return true; +} + +double NormalizeVolumeLots(const string sym, double lots) +{ + double minLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN); + double maxLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX); + double step = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP); + if(step > 0.0) + lots = MathFloor(lots / step) * step; + if(lots < minLot) + lots = minLot; + if(lots > maxLot) + lots = maxLot; + return lots; +} + +int CountOurPositions(const string sym) +{ + int total = 0; + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + ulong ticket = PositionGetTicket(i); + if(ticket == 0 || !PositionSelectByTicket(ticket)) + continue; + if(PositionGetString(POSITION_SYMBOL) != sym) + continue; + if((int)PositionGetInteger(POSITION_MAGIC) != InpMagic) + continue; + total++; + } + return total; +} + +bool SpreadOk(const string sym) +{ + long spreadPts = SymbolInfoInteger(sym, SYMBOL_SPREAD); + return ((double)spreadPts <= (double)InpMaxSpreadPoints); +} + +void ComputeStopsBuy(const string sym, const double entry, double &sl, double &tp) +{ + double ptsSl = InpMinStopPoints; + double ptsTp = InpMinStopPoints * 2.0; + if(InpUseAtrStops && g_atrSig != INVALID_HANDLE) + { + double atr = Buf1(g_atrSig, 1); + if(atr > 0.0) + { + double atrPts = atr / SymbolInfoDouble(sym, SYMBOL_POINT); + ptsSl = MathMax(atrPts * InpSlAtrMult, InpMinStopPoints); + ptsTp = MathMax(atrPts * InpTpAtrMult, InpMinStopPoints); + } + } + double p = SymbolInfoDouble(sym, SYMBOL_POINT); + sl = entry - ptsSl * p; + tp = entry + ptsTp * p; + + long stopsLevel = SymbolInfoInteger(sym, SYMBOL_TRADE_STOPS_LEVEL); + double minDist = (double)stopsLevel * p; + if(minDist > 0.0) + { + if(entry - sl < minDist) + sl = entry - minDist; + if(tp - entry < minDist) + tp = entry + minDist; + } + int dg = (int)SymbolInfoInteger(sym, SYMBOL_DIGITS); + sl = NormalizeDouble(sl, dg); + tp = NormalizeDouble(tp, dg); +} + +int OnInit() +{ + string sym = WorkSymbol(); + if(!SymbolSelect(sym, true)) + { + Print("TFXNZDUSD: symbol not available: ", sym); + return INIT_FAILED; + } + + g_effBiasTF = NearestStandardTf(InpBiasTF); + g_effHigherBiasTF = NearestStandardTf(InpHigherBiasTF); + g_effSignalTF = NearestStandardTf(InpSignalTF); + if(g_effBiasTF != InpBiasTF || g_effHigherBiasTF != InpHigherBiasTF || g_effSignalTF != InpSignalTF) + Print("TFXNZDUSD: resolved TFs — bias ", EnumToString(g_effBiasTF), " (in ", (long)InpBiasTF, ")", + " W1 ", EnumToString(g_effHigherBiasTF), " (in ", (long)InpHigherBiasTF, ")", + " signal ", EnumToString(g_effSignalTF), " (in ", (long)InpSignalTF, ")"); + + if(InpBiasEmaPeriod < 1 || InpFastEma < 1 || InpSlowEma < 1 || InpAtrPeriod < 1) + { + Print("TFXNZDUSD: EMA/ATR period must be >= 1"); + return INIT_PARAMETERS_INCORRECT; + } + + g_trade.SetExpertMagicNumber(InpMagic); + g_trade.SetDeviationInPoints(InpSlippagePoints); + g_trade.SetTypeFillingBySymbol(sym); + + g_emaBiasD1 = iMA(sym, g_effBiasTF, InpBiasEmaPeriod, 0, MODE_EMA, PRICE_CLOSE); + g_emaBiasW1 = iMA(sym, g_effHigherBiasTF, InpBiasEmaPeriod, 0, MODE_EMA, PRICE_CLOSE); + g_emaFastSig = iMA(sym, g_effSignalTF, InpFastEma, 0, MODE_EMA, PRICE_CLOSE); + g_emaSlowSig = iMA(sym, g_effSignalTF, InpSlowEma, 0, MODE_EMA, PRICE_CLOSE); + g_atrSig = iATR(sym, g_effSignalTF, InpAtrPeriod); + + if(g_emaBiasD1 == INVALID_HANDLE || g_emaFastSig == INVALID_HANDLE || g_emaSlowSig == INVALID_HANDLE || + g_atrSig == INVALID_HANDLE) + { + Print("TFXNZDUSD: indicator init failed — check InpBiasTF/InpHigherBiasTF/InpSignalTF & symbol history"); + return INIT_FAILED; + } + if(InpUseWeeklyBias && g_emaBiasW1 == INVALID_HANDLE) + { + Print("TFXNZDUSD: W1 bias handle failed"); + return INIT_FAILED; + } + + Print("TFXNZDUSD: ", sym, " eff TFs: bias=", EnumToString(g_effBiasTF), " higher=", EnumToString(g_effHigherBiasTF), + " signal=", EnumToString(g_effSignalTF)); + return INIT_SUCCEEDED; +} + +void OnDeinit(const int reason) +{ + if(g_emaBiasD1 != INVALID_HANDLE) IndicatorRelease(g_emaBiasD1); + if(g_emaBiasW1 != INVALID_HANDLE) IndicatorRelease(g_emaBiasW1); + if(g_emaFastSig != INVALID_HANDLE) IndicatorRelease(g_emaFastSig); + if(g_emaSlowSig != INVALID_HANDLE) IndicatorRelease(g_emaSlowSig); + if(g_atrSig != INVALID_HANDLE) IndicatorRelease(g_atrSig); +} + +void OnTick() +{ + string sym = WorkSymbol(); + datetime barOpen = iTime(sym, g_effSignalTF, 0); + if(barOpen == 0) + return; + if(barOpen == g_lastSignalBar) + return; + + datetime prevBar = iTime(sym, g_effSignalTF, 1); + if(prevBar == 0) + return; + + g_lastSignalBar = barOpen; + + if(!SessionOk()) + return; + if(!SpreadOk(sym)) + return; + + if(CountOurPositions(sym) >= InpMaxPositions) + return; + + if(!HtfLongBias(sym)) + return; + + if(!BullishCrossOnLastClosedBar(sym)) + return; + + MqlTick tick; + if(!SymbolInfoTick(sym, tick)) + return; + + double lots = NormalizeVolumeLots(sym, InpLots); + double sl = 0.0, tp = 0.0; + ComputeStopsBuy(sym, tick.ask, sl, tp); + + if(!g_trade.Buy(lots, sym, tick.ask, sl, tp, "TFX NZDUSD shift")) + Print("TFXNZDUSD Buy failed ret=", g_trade.ResultRetcode(), " ", g_trade.ResultRetcodeDescription()); +} + +//+------------------------------------------------------------------+ diff --git a/lab/EAs/TFXNZDUSD_Genetic_Optimization.set b/lab/EAs/TFXNZDUSD_Genetic_Optimization.set new file mode 100644 index 0000000..633c283 --- /dev/null +++ b/lab/EAs/TFXNZDUSD_Genetic_Optimization.set @@ -0,0 +1,42 @@ +; saved for genetic optimization — TFXNZDUSD.mq5 (Strategy Tester → Inputs → Load) +; Repo format: Parameter=Value||Step||Min||Max||Optimize(Y/N) +; ENUM_TIMEFRAMES: H1=16385, H4=16388, D1=16408, W1=32769 +; Do NOT optimize InpSignalTF as Min–Max integers — MT5 genetic samples invalid values (e.g. 16386) +; between real enums and OnInit fails. Compare H1 vs H4 in separate runs, or rely on EA TF resolution. + +; === Symbol === +; String inputs: use bare name OR Value||Value||Value||Value||N — never use 0 as middle field (MT5 may feed the whole line into the string). +InpSymbol=NZDUSD + +; === Timeframes (thesis) === +InpBiasTF=16408||0||16408||16408||N +InpHigherBiasTF=32769||0||32769||32769||N +InpSignalTF=16388||0||16388||16388||N + +; === HTF bias (long-only, reactive) === +InpUseWeeklyBias=true||false||0||true||N +InpBiasEmaPeriod=50||2||34||120||Y +InpAllowCounterBias=false||false||0||true||N + +; === Intraday shift (bearish → bullish) === +InpFastEma=8||1||5||34||Y +InpSlowEma=21||2||15||55||Y +InpMinBearishBars=3||1||2||10||Y +InpRequireBullBody=true||false||0||true||N + +; === Risk === +InpLots=0.1||0.01||0.1||0.1||N +InpMagic=926001||0||926001||926001||N +InpSlippagePoints=20||0||20||20||N +InpMaxSpreadPoints=40||5||20||60||Y +InpUseAtrStops=true||false||0||true||N +InpAtrPeriod=14||1||7||28||Y +InpSlAtrMult=1.5||0.1||1.0||3.5||Y +InpTpAtrMult=2.5||0.2||1.5||5.0||Y +InpMinStopPoints=50.0||5.0||30.0||120.0||Y +InpMaxPositions=1||0||1||1||N + +; === Session (optional) === +InpUseSessionFilter=false||false||0||true||N +InpSessionStartHour=7||0||7||7||N +InpSessionEndHour=20||0||20||20||N diff --git a/lab/EAs/TFXXAUUSDScalper.mq5 b/lab/EAs/TFXXAUUSDScalper.mq5 new file mode 100644 index 0000000..c029180 --- /dev/null +++ b/lab/EAs/TFXXAUUSDScalper.mq5 @@ -0,0 +1,367 @@ +//+------------------------------------------------------------------+ +//| TFXXAUUSDScalper.mq5 | +//| Gold (XAUUSD) Donchian breakout scalper — momentum / range | +//| breakout style suited to impulse-or-consolidate dynamics. | +//+------------------------------------------------------------------+ +#property copyright "Lab" +#property link "" +#property version "1.00" +#property description "Donchian channel breakout on XAUUSD; optional consolidation filter; percent-risk or fixed lots." + +#include + +input group "=== Instrument ===" +input string InpSymbol = "XAUUSD"; + +input group "=== Session ===" +input ENUM_TIMEFRAMES InpSignalTF = PERIOD_M5; +input bool InpUseSessionFilter = false; +input int InpSessionStartHour = 7; +input int InpSessionEndHour = 22; + +input group "=== Donchian breakout ===" +input int InpDonchianPeriod = 20; // Lookback for channel high/low (past bars exclude signal bar) +input bool InpRequireFreshBreak = true; // Close[2] inside prior upper/lower band (no churn) +input bool InpTradeLong = true; +input bool InpTradeShort = true; + +input group "=== Consolidation filter (horizontal → breakout) ===" +input bool InpUseNarrowChannelFilter = false; +input double InpMaxChannelWidthAtrMult = 3.0; // Upper-Lower <= this * ATR(shift 2) + +input group "=== Stops & targets (Nick-style RR) ===" +input int InpSlBufferPoints = 30; // Beyond opposite Donchian / structural low-high +input double InpTpRiskReward = 2.0; // TP distance = RR * risk distance +input bool InpUseMidStopFallback = false; // Optional tighter SL at channel mid (more aggressive) + +input group "=== Risk ===" +input bool InpUsePercentRisk = true; +input double InpRiskPercent = 1.0; // % balance per trade (video example) +input double InpFixedLots = 0.10; +input int InpMagic = 928001; +input int InpSlippagePoints = 50; +input int InpMaxSpreadPoints = 60; +input int InpMaxPositions = 1; + +input group "=== Indicators ===" +input int InpAtrPeriod = 14; + +CTrade g_trade; + +int g_atr = INVALID_HANDLE; +datetime g_lastBar = 0; + +string WorkSymbol() +{ + string s = InpSymbol; + StringTrimLeft(s); + StringTrimRight(s); + const int bar = StringFind(s, "|"); + if(bar >= 0) + s = StringSubstr(s, 0, bar); + StringTrimRight(s); + return (StringLen(s) > 0 ? s : _Symbol); +} + +bool SessionOk() +{ + if(!InpUseSessionFilter) + return true; + MqlDateTime dt; + TimeToStruct(TimeCurrent(), dt); + const int h = dt.hour; + if(InpSessionStartHour <= InpSessionEndHour) + return (h >= InpSessionStartHour && h < InpSessionEndHour); + return (h >= InpSessionStartHour || h < InpSessionEndHour); +} + +double DonchianUpper(const string sym, const ENUM_TIMEFRAMES tf, const int period, const int shiftAnchor) +{ + if(period < 1) + return 0.0; + double mx = -DBL_MAX; + for(int i = shiftAnchor + 1; i <= shiftAnchor + period; i++) + { + const double hi = iHigh(sym, tf, i); + if(hi > mx) + mx = hi; + } + return mx; +} + +double DonchianLower(const string sym, const ENUM_TIMEFRAMES tf, const int period, const int shiftAnchor) +{ + if(period < 1) + return 0.0; + double mn = DBL_MAX; + for(int i = shiftAnchor + 1; i <= shiftAnchor + period; i++) + { + const double lo = iLow(sym, tf, i); + if(lo < mn) + mn = lo; + } + return mn; +} + +double AtrAt(const int shift) +{ + double b[]; + ArraySetAsSeries(b, true); + if(g_atr == INVALID_HANDLE || CopyBuffer(g_atr, 0, shift, 1, b) != 1) + return 0.0; + return b[0]; +} + +double NormalizeLots(const string sym, double lots) +{ + double mn = SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN); + double mx = SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX); + double st = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP); + if(st > 0.0) + lots = MathFloor(lots / st) * st; + if(lots < mn) + lots = mn; + if(lots > mx) + lots = mx; + return lots; +} + +bool MoneyPerLotAtSl(const string sym, const ENUM_ORDER_TYPE type, const double openPrice, const double slPrice, double &lossPerLot) +{ + lossPerLot = 0.0; + double p = 0.0; + if(!OrderCalcProfit(type, sym, 1.0, openPrice, slPrice, p)) + return false; + lossPerLot = MathAbs(p); + return (lossPerLot > 0.0); +} + +double LotsFromPercentRisk(const string sym, const ENUM_ORDER_TYPE type, const double openPrice, const double slPrice) +{ + double perLotLoss = 0.0; + if(!MoneyPerLotAtSl(sym, type, openPrice, slPrice, perLotLoss)) + return InpFixedLots; + + const double balance = AccountInfoDouble(ACCOUNT_BALANCE); + const double riskMoney = balance * (InpRiskPercent / 100.0); + if(riskMoney <= 0.0 || perLotLoss <= 0.0) + return NormalizeLots(sym, InpFixedLots); + + double lots = riskMoney / perLotLoss; + return NormalizeLots(sym, lots); +} + +bool SpreadOk(const string sym) +{ + const long sp = SymbolInfoInteger(sym, SYMBOL_SPREAD); + return ((double)sp <= (double)InpMaxSpreadPoints); +} + +int CountMagicPositions(const string sym) +{ + int n = 0; + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + const ulong t = PositionGetTicket(i); + if(t == 0 || !PositionSelectByTicket(t)) + continue; + if(PositionGetString(POSITION_SYMBOL) != sym) + continue; + if((int)PositionGetInteger(POSITION_MAGIC) != InpMagic) + continue; + n++; + } + return n; +} + +void BuildStopsBuy(const string sym, const double entry, const double upperD1, const double lowerD1, + double &sl, double &tp) +{ + const double pt = SymbolInfoDouble(sym, SYMBOL_POINT); + const double buf = (double)InpSlBufferPoints * pt; + double riskDist = entry - (lowerD1 - buf); + sl = lowerD1 - buf; + + if(InpUseMidStopFallback) + { + const double mid = (upperD1 + lowerD1) * 0.5; + const double distMid = entry - mid; + if(distMid > 0 && distMid < riskDist) + { + sl = mid - buf; + riskDist = entry - sl; + } + } + + const long lvl = SymbolInfoInteger(sym, SYMBOL_TRADE_STOPS_LEVEL); + const double minD = (double)lvl * pt; + if(minD > 0.0 && entry - sl < minD) + sl = entry - minD; + + riskDist = entry - sl; + tp = entry + riskDist * InpTpRiskReward; + + if(minD > 0.0 && tp - entry < minD) + tp = entry + minD; + + const int dg = (int)SymbolInfoInteger(sym, SYMBOL_DIGITS); + sl = NormalizeDouble(sl, dg); + tp = NormalizeDouble(tp, dg); +} + +void BuildStopsSell(const string sym, const double entry, const double upperD1, const double lowerD1, + double &sl, double &tp) +{ + const double pt = SymbolInfoDouble(sym, SYMBOL_POINT); + const double buf = (double)InpSlBufferPoints * pt; + double riskDist = (upperD1 + buf) - entry; + sl = upperD1 + buf; + + if(InpUseMidStopFallback) + { + const double mid = (upperD1 + lowerD1) * 0.5; + const double distMid = mid - entry; + if(distMid > 0 && distMid < riskDist) + { + sl = mid + buf; + riskDist = sl - entry; + } + } + + const long lvl = SymbolInfoInteger(sym, SYMBOL_TRADE_STOPS_LEVEL); + const double minD = (double)lvl * pt; + if(minD > 0.0 && sl - entry < minD) + sl = entry + minD; + + riskDist = sl - entry; + tp = entry - riskDist * InpTpRiskReward; + + if(minD > 0.0 && entry - tp < minD) + tp = entry - minD; + + const int dg = (int)SymbolInfoInteger(sym, SYMBOL_DIGITS); + sl = NormalizeDouble(sl, dg); + tp = NormalizeDouble(tp, dg); +} + +bool NarrowChannelOk(const string sym, const ENUM_TIMEFRAMES tf, const int period) +{ + if(!InpUseNarrowChannelFilter) + return true; + const double up = DonchianUpper(sym, tf, period, 2); + const double lo = DonchianLower(sym, tf, period, 2); + const double atr = AtrAt(2); + if(up <= 0 || lo <= 0 || atr <= 0) + return false; + const double width = up - lo; + return (width <= atr * InpMaxChannelWidthAtrMult); +} + +int OnInit() +{ + const string sym = WorkSymbol(); + if(!SymbolSelect(sym, true)) + { + Print("TFXXAUUSDScalper: symbol not available: ", sym); + return INIT_FAILED; + } + if(InpDonchianPeriod < 2) + { + Print("TFXXAUUSDScalper: InpDonchianPeriod must be >= 2"); + return INIT_PARAMETERS_INCORRECT; + } + + g_trade.SetExpertMagicNumber(InpMagic); + g_trade.SetDeviationInPoints(InpSlippagePoints); + g_trade.SetTypeFillingBySymbol(sym); + + g_atr = iATR(sym, InpSignalTF, InpAtrPeriod); + if(g_atr == INVALID_HANDLE) + { + Print("TFXXAUUSDScalper: ATR init failed"); + return INIT_FAILED; + } + + Print("TFXXAUUSDScalper: ", sym, " ", EnumToString(InpSignalTF), + " Donchian=", InpDonchianPeriod, " RR=", InpTpRiskReward, + " risk%=", (InpUsePercentRisk ? DoubleToString(InpRiskPercent, 2) : "off")); + return INIT_SUCCEEDED; +} + +void OnDeinit(const int reason) +{ + if(g_atr != INVALID_HANDLE) + IndicatorRelease(g_atr); + g_atr = INVALID_HANDLE; +} + +void OnTick() +{ + const string sym = WorkSymbol(); + const datetime t0 = iTime(sym, InpSignalTF, 0); + if(t0 == 0 || t0 == g_lastBar) + return; + g_lastBar = t0; + + if(!SessionOk() || !SpreadOk(sym)) + return; + if(CountMagicPositions(sym) >= InpMaxPositions) + return; + + const int p = InpDonchianPeriod; + const double c1 = iClose(sym, InpSignalTF, 1); + const double c2 = iClose(sym, InpSignalTF, 2); + if(c1 <= 0.0 || c2 <= 0.0) + return; + + const double up1 = DonchianUpper(sym, InpSignalTF, p, 1); + const double lo1 = DonchianLower(sym, InpSignalTF, p, 1); + const double up2 = DonchianUpper(sym, InpSignalTF, p, 2); + const double lo2 = DonchianLower(sym, InpSignalTF, p, 2); + + if(up1 <= 0 || lo1 <= 0 || up2 <= 0 || lo2 <= 0) + return; + + if(!NarrowChannelOk(sym, InpSignalTF, p)) + return; + + bool longSig = InpTradeLong && (c1 > up1); + bool shortSig = InpTradeShort && (c1 < lo1); + + if(InpRequireFreshBreak) + { + longSig = longSig && (c2 <= up2); + shortSig = shortSig && (c2 >= lo2); + } + + if(!longSig && !shortSig) + return; + + MqlTick tick; + if(!SymbolInfoTick(sym, tick)) + return; + + if(longSig && !shortSig) + { + double sl = 0.0, tp = 0.0; + BuildStopsBuy(sym, tick.ask, up1, lo1, sl, tp); + const double lots = InpUsePercentRisk ? LotsFromPercentRisk(sym, ORDER_TYPE_BUY, tick.ask, sl) : NormalizeLots(sym, InpFixedLots); + if(!g_trade.Buy(lots, sym, tick.ask, sl, tp, "TFX Gold Donchian↑")) + Print("Buy failed ", g_trade.ResultRetcode(), " ", g_trade.ResultRetcodeDescription()); + return; + } + + if(shortSig && !longSig) + { + double sl = 0.0, tp = 0.0; + BuildStopsSell(sym, tick.bid, up1, lo1, sl, tp); + const double lots = InpUsePercentRisk ? LotsFromPercentRisk(sym, ORDER_TYPE_SELL, tick.bid, sl) : NormalizeLots(sym, InpFixedLots); + if(!g_trade.Sell(lots, sym, tick.bid, sl, tp, "TFX Gold Donchian↓")) + Print("Sell failed ", g_trade.ResultRetcode(), " ", g_trade.ResultRetcodeDescription()); + return; + } + + // Bothtrue — rare; skip to avoid ambiguous execution +} + +//+------------------------------------------------------------------+ diff --git a/lab/EAs/TFXXAUUSDScalper_Genetic_Optimization.set b/lab/EAs/TFXXAUUSDScalper_Genetic_Optimization.set new file mode 100644 index 0000000..a1dc8cf --- /dev/null +++ b/lab/EAs/TFXXAUUSDScalper_Genetic_Optimization.set @@ -0,0 +1,44 @@ +; TFXXAUUSDScalper.mq5 — Strategy Tester → Inputs → Load (Genetic optimization) +; Format: Parameter=Value||Step||Min||Max||Optimize(Y/N) +; +; ENUM_TIMEFRAMES (MT5): M1=1 M5=5 M15=15 M30=30 H1=16385 H4=16388 D1=16408 +; Keep InpSignalTF fixed (single integer). Do not use Min–Max sweeps on enums — genetic +; often tries invalid values between named periods and OnInit fails. +; +; Baseline aligned with Desktop 123.set (2026.05.08); magic corrected to 928001 (EA default). + +; === Instrument === +InpSymbol=XAUUSD + +; === Session === +InpSignalTF=5||0||5||5||N +InpUseSessionFilter=false||false||0||true||N +InpSessionStartHour=7||0||7||7||N +InpSessionEndHour=22||0||22||22||N + +; === Donchian breakout === +InpDonchianPeriod=20||2||10||80||Y +InpRequireFreshBreak=true||false||0||true||N +InpTradeLong=true||false||0||true||N +InpTradeShort=true||false||0||true||N + +; === Consolidation filter (horizontal → breakout) === +InpUseNarrowChannelFilter=false||false||0||true||N +InpMaxChannelWidthAtrMult=3.0||0.5||1.5||6.0||Y + +; === Stops & targets (Nick-style RR) === +InpSlBufferPoints=30||5||10||120||Y +InpTpRiskReward=2.0||0.25||1.25||4.0||Y +InpUseMidStopFallback=false||false||0||true||N + +; === Risk === +InpUsePercentRisk=true||false||0||true||N +InpRiskPercent=1.0||0.15||0.25||2.5||Y +InpFixedLots=0.1||0.01||0.1||0.1||N +InpMagic=928001||0||928001||928001||N +InpSlippagePoints=50||0||50||50||N +InpMaxSpreadPoints=60||5||20||100||Y +InpMaxPositions=1||0||1||1||N + +; === Indicators === +InpAtrPeriod=14||1||7||28||Y diff --git a/lab/ematerminator/READY_EMACrossOverXAUUSD.mq5 b/lab/ematerminator/READY_EMACrossOverXAUUSD.mq5 new file mode 100644 index 0000000..3f3fdc2 --- /dev/null +++ b/lab/ematerminator/READY_EMACrossOverXAUUSD.mq5 @@ -0,0 +1,458 @@ +//+------------------------------------------------------------------+ +//| ScoringTrade.mq5 | +//| Generated by ChatGPT | +//| | +//+------------------------------------------------------------------+ +#property strict +#include + +// Input parameters +input int MagicNumber = 42; +input int scoreThreshold = 5200; // Score threshold for trade entry +input int slopeThreshold = 93; // EMA slope threshold +input double maxScore = 7900; // Max score value for clamping +input int cooldownMinutes = 18; // Cooldown period in minutes (37 minutes) +input int tradeCooldownMinutes = 24; // Trade debounce cooldown period (5 minutes) +input ENUM_TIMEFRAMES emaTimeFrame = PERIOD_H1; // EMA Timeframe +input double delayClampAbsolute = 1690; +input int emaPeriod = 64; // EMA period +input double crossOverStep = 950; +input double slopeThresholdStep = 635; +input double emaDistanceStep = 150; +input double emaDecayStep = 0; +input double decayMultiplier = 0.08; // Decay multiplier +input double distanceThreshold = 28.5; // Set your distance threshold (adjust as necessary) +input double atrMultiplier = 7.6; // Multiplier for dynamic SL and TP calculation +input double TrailingStop = 5; +input bool UseTrailingStop = true; +input int maxCrossoverTrades = 4; // Maximum number of trades per crossover +input double max_drawdown = 0.1; // Maximum drawdown percentage +input bool resetCrossoverTradeOnDistance = false; +input int resetCrossoverNumber = 0; +input double minimumLotSize = 0.01; +input int maxTimeInPosition = 9; +input int tradeLengthThreshold = 98; +input int reverseTP = 32; +input int reverseLotSizeMultiplier = 15; +input int secondaryPositionHoldTime = 32; +// Global variables +int emaHandle; // EMA handle +double prevScore = 0; // Previous score +double currentScore = 0; // Current score +double emaPrevValue = 0; // Previous EMA value +double emaCurrentValue = 0; // Current EMA value +double emaSlope = 0; // EMA slope value +CTrade trade; // Trading object + +datetime lastCrossoverTime = 0; // Time of last crossover +datetime lastTradeTime = 0; // Time of last trade +int crossoverTradeCount = 0; // Count of trades after each crossover + + +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() { + // Create EMA handle (e.g., 14-period EMA on the closing price) + emaHandle = iMA(Symbol(), emaTimeFrame, emaPeriod, 0, MODE_EMA, PRICE_CLOSE); + + if (emaHandle == INVALID_HANDLE) { + Print("Failed to create EMA handle"); + return INIT_FAILED; + } + + return INIT_SUCCEEDED; +} + +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) { + if (emaHandle != INVALID_HANDLE) { + IndicatorRelease(emaHandle); + emaHandle = INVALID_HANDLE; + } +} + +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() { + // Buffer to hold the EMA values + double emaBuffer[]; + + // Get dynamic lot size based on current balance and max drawdown + double lotSize = CalculateLotSize(); + + if(lotSize < minimumLotSize) { + lotSize = minimumLotSize; + } + + // Get the current Ask and Bid prices + double Ask = SymbolInfoDouble(Symbol(), SYMBOL_ASK); + double Bid = SymbolInfoDouble(Symbol(), SYMBOL_BID); + + // Copy the last 2 EMA values (current and previous) + int copied = CopyBuffer(emaHandle, 0, 0, 2, emaBuffer); + if (copied < 2) { + Print("Failed to copy EMA values. Error code: ", GetLastError()); + return; + } + + // Get the current and previous EMA values + emaPrevValue = emaBuffer[1]; // Previous EMA value (index 1) + emaCurrentValue = emaBuffer[0]; // Current EMA value (index 0) + + // Calculate the EMA slope (change in EMA values) + emaSlope = - (emaCurrentValue - emaPrevValue) * 100; + + // Check for price action crossover with EMA + double closePrev = iClose(Symbol(), Period(), 1); // Close of previous bar + double closeCurr = iClose(Symbol(), Period(), 0); // Close of current bar + + // Check if enough time has passed for the cooldown (cooldownMinutes) + if (TimeCurrent() - lastCrossoverTime >= cooldownMinutes * 60) { + if (closePrev < emaPrevValue && closeCurr > emaCurrentValue) { // Bullish crossover + Print("Bullish crossover"); + currentScore += crossOverStep; + crossoverTradeCount = 0; // Reset trade count after new crossover + lastCrossoverTime = TimeCurrent(); // Update the last crossover time + } + else if (closePrev > emaPrevValue && closeCurr < emaCurrentValue) { // Bearish crossover + Print("Bearish crossover"); + currentScore -= crossOverStep; + crossoverTradeCount = 0; // Reset trade count after new crossover + lastCrossoverTime = TimeCurrent(); // Update the last crossover time + } + } + + // Check EMA slope + if (emaSlope > slopeThreshold) { // Positive slope + currentScore += slopeThresholdStep; + } + else if (emaSlope < -slopeThreshold) { // Negative slope + currentScore -= slopeThresholdStep; + } + else { + if (MathAbs(currentScore) > delayClampAbsolute) { + currentScore *= decayMultiplier; + } + } + + if(UseTrailingStop) { + ApplyTrailingStop(); + } + + // Calculate distance to EMA and adjust score + double priceToEmaDistance = closeCurr - emaCurrentValue; // Distance between the current price and the EMA + + if (MathAbs(priceToEmaDistance) > distanceThreshold) { + if (priceToEmaDistance > 0) { // Bullish (price above EMA) + currentScore += emaDistanceStep; + Print("Bullish distance score added. Price: ", closeCurr, " EMA: ", emaCurrentValue); + } + else if (priceToEmaDistance < 0) { // Bearish (price below EMA) + currentScore -= emaDistanceStep; + Print("Bearish distance score added. Price: ", closeCurr, " EMA: ", emaCurrentValue); + } + } + else { + if (currentScore > 0) { + currentScore -= emaDecayStep; + } + else { + currentScore += emaDecayStep; + } + } + + // Close all positions if score crosses zero + if ((prevScore > 0 && currentScore <= 0) || (prevScore < 0 && currentScore >= 0)) { + Close_Position_MN(MagicNumber); + } + + // Update the previous score + prevScore = currentScore; + + if (crossoverTradeCount > maxCrossoverTrades) { + return; + } + + // Debounce check: Ensure enough time has passed since the last trade + if (TimeCurrent() - lastTradeTime >= tradeCooldownMinutes * 60) { + // Calculate ATR (Average True Range) for stop loss calculation + double atrArray[]; + int atrPeriod = 14; // ATR period (can be adjusted) + int copied = CopyBuffer(iATR(Symbol(), Period(), atrPeriod), 0, 0, 1, atrArray); + if (copied < 1) { + Print("Failed to get ATR values. Error code: ", GetLastError()); + return; + } + + // Get the current price (using Bid price) + double currentPrice = Bid; + // Get ATR value + double atrValue = atrArray[0]; // Latest ATR value + + // Get the minimum stop level and freeze level for the symbol + long stopLevel = SymbolInfoInteger(Symbol(), SYMBOL_TRADE_STOPS_LEVEL); + long freezeLevel = SymbolInfoInteger(Symbol(), SYMBOL_TRADE_FREEZE_LEVEL); + + // Calculate the minimum stop loss in price units (converted from pips) + double minStopLoss = stopLevel * SymbolInfoDouble(Symbol(), SYMBOL_POINT); + double minFreezeLevel = freezeLevel * SymbolInfoDouble(Symbol(), SYMBOL_POINT); + + // Dynamic Stop Loss and Take Profit calculation based on ATR + double dynamicSL = atrValue * atrMultiplier; + double dynamicTP = atrValue * atrMultiplier; + + // Adjust SL and TP if they are smaller than the minimum stop level + dynamicSL = MathMax(dynamicSL, minStopLoss); + dynamicTP = MathMax(dynamicTP, dynamicSL); // Ensure TP is at least the same as SL + + // Trade logic based on the score + if (currentScore > scoreThreshold) { // Buy signal + if ((!PositionSelect(Symbol()) || PositionGetInteger(POSITION_MAGIC) != MagicNumber) + && crossoverTradeCount < maxCrossoverTrades) { + Print("maxCrossover"); + Print(crossoverTradeCount); + // Open buy position with dynamic SL and TP + trade.SetExpertMagicNumber(MagicNumber); + if (trade.Buy(lotSize, Symbol(), currentPrice, Bid - dynamicSL, 0)) { + Print("Buy order executed with score: ", currentScore); + crossoverTradeCount++; // Increment trade count + lastTradeTime = TimeCurrent(); // Update the last trade time + } + } + } + else if (currentScore < -scoreThreshold) { // Sell signal + if ((!PositionSelect(Symbol()) || PositionGetInteger(POSITION_MAGIC) != MagicNumber) + && crossoverTradeCount < maxCrossoverTrades) { + Print("maxCrossover"); + Print(crossoverTradeCount); + // Open sell position with dynamic SL and TP + trade.SetExpertMagicNumber(MagicNumber); + if (trade.Sell(lotSize, Symbol(), currentPrice, Ask + dynamicSL, 0)) { + Print("Sell order executed with score: ", currentScore); + crossoverTradeCount++; // Increment trade count + lastTradeTime = TimeCurrent(); // Update the last trade time + } + } + } + } else { + Print("Trade skipped due to debounce: ", currentScore); + } + + // Check existing positions for profit and place reverse trade if needed + CheckPositions(); +} + +//+------------------------------------------------------------------+ +//| Check existing positions for profit and place reverse trade if needed | +//+------------------------------------------------------------------+ +//+------------------------------------------------------------------+ +//| Check existing positions for duration and place reverse trade if needed | +//+------------------------------------------------------------------+ +void CheckPositions() { + // Check if there are any open positions + if (PositionsTotal() > 0) { + // Check if there are exactly 2 open positions + if (PositionsTotal() == 2) { + for (int i = 0; i < PositionsTotal(); i++) { + ulong ticket = PositionGetTicket(i); + if (PositionSelectByTicket(ticket)) { + datetime openTime = (datetime)PositionGetInteger(POSITION_TIME); + long tradeLength = (long)(TimeCurrent() - openTime); + + // Check if the trade has been open for more than the secondaryPositionHoldTime + if (tradeLength > secondaryPositionHoldTime * 60) { // Convert threshold to seconds + // Close all positions + CloseAllPositions(); + Print("All positions closed due to exceeding secondaryPositionHoldTime"); + return; // Exit the function after closing all positions + } + } + } + } else if (PositionsTotal() < 2) { + for (int i = 0; i < PositionsTotal(); i++) { + ulong ticket = PositionGetTicket(i); + if (PositionSelectByTicket(ticket)) { + double profit = PositionGetDouble(POSITION_PROFIT); + datetime openTime = (datetime)PositionGetInteger(POSITION_TIME); + long tradeLength = (long)(TimeCurrent() - openTime); + + // Check if the trade has been open for more than the tradeLengthThreshold + if (tradeLength > tradeLengthThreshold * 60) { // Convert threshold to seconds + double lotSize = PositionGetDouble(POSITION_VOLUME); + double newLotSize = lotSize * reverseLotSizeMultiplier; // 10 times the original lot size + + crossoverTradeCount = maxCrossoverTrades + 1; + + // Place a reverse trade + if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) { + trade.SetExpertMagicNumber(MagicNumber); + if (trade.Sell(newLotSize, Symbol(), SymbolInfoDouble(Symbol(), SYMBOL_BID))) { + Print("Reversal sell order executed with increased lot size"); + } else { + Print("Failed to execute reversal sell order"); + } + } else if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) { + trade.SetExpertMagicNumber(MagicNumber); + if (trade.Buy(newLotSize, Symbol(), SymbolInfoDouble(Symbol(), SYMBOL_ASK))) { + Print("Reversal buy order executed with increased lot size"); + } else { + Print("Failed to execute reversal buy order"); + } + } + } + + // Close the trade if profit meets the take profit level + if (profit >= reverseTP) { + Close_Position_MN(MagicNumber); + CloseAllPositions(); + } + + // Check if there is only one position and its volume is lotSize * reverseLotSizeMultiplier + if (PositionsTotal() == 1 && PositionGetDouble(POSITION_VOLUME) == minimumLotSize * reverseLotSizeMultiplier) { + trade.PositionClose(ticket); + Print("Single position with volume equal to lotSize * reverseLotSizeMultiplier closed"); + } + + // Get the current Ask and Bid prices + double Ask = SymbolInfoDouble(Symbol(), SYMBOL_ASK); + double Bid = SymbolInfoDouble(Symbol(), SYMBOL_BID); + + + // Check if the double down trade is exited by stop loss + if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && PositionGetDouble(POSITION_SL) > 0 && Bid <= PositionGetDouble(POSITION_SL)) { + // Close the original trade + CloseOriginalTrade(); + } else if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && PositionGetDouble(POSITION_SL) > 0 && Ask >= PositionGetDouble(POSITION_SL)) { + // Close the original trade + CloseOriginalTrade(); + } + } + } + } + } +} + +// Function to close the original trade +void CloseOriginalTrade() { + for (int i = PositionsTotal() - 1; i >= 0; i--) { + ulong ticket = PositionGetTicket(i); + if (PositionSelectByTicket(ticket)) { + if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) { + trade.PositionClose(ticket); + Print("Original buy position closed due to double down stop loss."); + } else if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) { + trade.PositionClose(ticket); + Print("Original sell position closed due to double down stop loss."); + } + } + } +} +//+------------------------------------------------------------------+ +//| Function to close all positions | +//+------------------------------------------------------------------+ +void CloseAllPositions() { + // Loop through all positions and close them + for (int i = PositionsTotal() - 1; i >= 0; i--) { + ulong ticket = PositionGetTicket(i); + if (PositionSelectByTicket(ticket)) { + if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) { + trade.PositionClose(ticket); + Print("Buy position closed at score crossover."); + } + else if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) { + trade.PositionClose(ticket); + Print("Sell position closed at score crossover."); + } + } + } +} + +void ApplyTrailingStop() +{ + for(int i=PositionsTotal()-1; i>=0; i--) + { + string symbol = PositionGetSymbol(i); + ulong PositionTicket = PositionGetTicket(i); + long trade_type = PositionGetInteger(POSITION_TYPE); + + if(PositionGetInteger(POSITION_MAGIC) != MagicNumber) { + continue; + } + + double POINT = SymbolInfoDouble( symbol, SYMBOL_POINT ); + int DIGIT = (int) SymbolInfoInteger( symbol, SYMBOL_DIGITS ); + + + if(trade_type == 0) + { + double Bid = NormalizeDouble(SymbolInfoDouble(symbol,SYMBOL_BID),DIGIT); + + if(Bid-PositionGetDouble(POSITION_PRICE_OPEN) > NormalizeDouble(POINT * TrailingStop,DIGIT)) + { + if(PositionGetDouble(POSITION_SL) < NormalizeDouble(Bid - POINT * TrailingStop,DIGIT)) + { + trade.PositionModify(PositionTicket,NormalizeDouble(Bid - POINT * TrailingStop,DIGIT),PositionGetDouble(POSITION_TP)); + } + } + } + + if(trade_type == 1) + { + double Ask = NormalizeDouble(SymbolInfoDouble(symbol,SYMBOL_ASK),DIGIT); + + if((PositionGetDouble(POSITION_PRICE_OPEN) - Ask) > NormalizeDouble( POINT * TrailingStop,DIGIT)) + { + if((PositionGetDouble(POSITION_SL) > NormalizeDouble(Ask + POINT * TrailingStop,DIGIT)) || (PositionGetDouble(POSITION_SL)==0)) + { + trade.PositionModify(PositionTicket,NormalizeDouble(Ask + POINT * TrailingStop,DIGIT),PositionGetDouble(POSITION_TP)); + } + } + } + } +} + +void Close_Position_MN(ulong magicNumber) +{ + int total = PositionsTotal(); + for(int i = total - 1; i >= 0; i--) + { + ulong ticket = PositionGetTicket(i); + + // Use PositionSelect by symbol instead of ticket + string symbol = PositionGetSymbol(i); + if(PositionSelect(symbol)) + { + if (PositionGetInteger(POSITION_MAGIC) == magicNumber && PositionGetInteger(POSITION_TICKET) == ticket) + { + if(symbol == _Symbol) // Verify the symbol + { + Print("MN ", magicNumber); + trade.PositionClose(ticket); + } + } + } + else + { + int errorCode = GetLastError(); + Print("aaaa PositionSelect failed with error code: ", errorCode); + } + } +} + +//+------------------------------------------------------------------+ +//| Calculate the dynamic lot size based on max drawdown | +//+------------------------------------------------------------------+ +double CalculateLotSize() +{ + double balance = AccountInfoDouble(ACCOUNT_BALANCE); // Get account balance + double allowedDrawdown = balance * max_drawdown; // Calculate allowed drawdown in account currency + double baseDrawdownPerLot = 150; // Assumed drawdown per 0.01 lots as per backtest + + // Calculate lot size based on maximum drawdown + double lotSize = (allowedDrawdown / baseDrawdownPerLot) * 0.01; + return NormalizeDouble(lotSize, 2); // Normalize lot size to 2 decimal places +} diff --git a/lab/ematerminator/READY_EMACrossOverXAUUSD_Genetic_Optimization.set b/lab/ematerminator/READY_EMACrossOverXAUUSD_Genetic_Optimization.set new file mode 100644 index 0000000..07722d6 --- /dev/null +++ b/lab/ematerminator/READY_EMACrossOverXAUUSD_Genetic_Optimization.set @@ -0,0 +1,55 @@ +; READY_EMACrossOverXAUUSD.mq5 — Genetic optimization (sanitized ranges) +; Load: Strategy Tester → Inputs → Load +; Format: Name=Default||Min||Step||Max||Y/N +; +; Units (read before optimizing): +; slopeThreshold — |ΔEMA|×100 per chart bar; ~93 ≈ $0.93 EMA move (H1 EMA, checked each tick) +; distanceThreshold — |price−EMA| in price ($ for XAUUSD) +; cooldown* — minutes +; atrMultiplier — stop distance = ATR(14) × multiplier (price $) +; TrailingStop — trail in symbol POINTS (0.01 pt on XAU: 500≈$5). EA default 5≈$0.05 — set uses 500 for tests. +; reverseTP — close reversal basket when profit ≥ this (account currency) +; reverseLotSizeMultiplier — reversal volume = position volume × this (dangerous above ~5) +; score* — arbitrary units; keep threshold ~4–10× crossOverStep or ~8–15 ticks of slope step +; +; ENUM_TIMEFRAMES: H1=16385 — fixed; do not sweep enum range. + +; === fixed === +MagicNumber=42||42||1||42||N +minimumLotSize=0.01||0.01||0||0.01||N +emaTimeFrame=16385||16385||0||16385||N +UseTrailingStop=true||false||0||true||N +maxScore=7900||7900||0||7900||N +emaDecayStep=0||0||0||0||N +resetCrossoverTradeOnDistance=false||false||0||false||N +resetCrossoverNumber=0||0||0||0||N +maxTimeInPosition=9||9||0||9||N +max_drawdown=0.1||0.1||0||0.1||N + +; === EMA / slope (price-scaled) === +emaPeriod=64||40||4||88||Y +slopeThreshold=93||50||5||140||Y +distanceThreshold=28.5||12.0||2.0||45.0||Y + +; === score increments (keep proportional to scoreThreshold) === +scoreThreshold=5200||3500||250||7000||Y +crossOverStep=950||600||50||1400||Y +slopeThresholdStep=635||350||50||950||Y +emaDistanceStep=150||75||25||250||Y +delayClampAbsolute=1690||1000||100||2500||Y +decayMultiplier=0.08||0.03||0.01||0.15||Y + +; === timing === +cooldownMinutes=18||8||2||35||Y +tradeCooldownMinutes=24||12||3||48||Y +maxCrossoverTrades=4||2||1||6||Y + +; === stops / trail === +atrMultiplier=7.6||4.0||0.5||12.0||Y +TrailingStop=500||200||50||1000||Y + +; === reversal / hold (minutes & account $) === +tradeLengthThreshold=98||60||10||180||Y +secondaryPositionHoldTime=32||15||5||60||Y +reverseTP=32||15||5||80||Y +reverseLotSizeMultiplier=15||4||1||20||Y diff --git a/self-coding-agent/README.md b/self-coding-agent/README.md new file mode 100644 index 0000000..f244561 --- /dev/null +++ b/self-coding-agent/README.md @@ -0,0 +1,79 @@ +# Self-coding agent (MQL5 + MT5 + Ollama, long-running) + +This is a **local, long-running loop** that calls **Ollama** on your machine, lets the model **read/write allowed paths** in this repo (including MQL5 under `frontline/` and `lab/`), **fetch documentation** over HTTP, and optionally run the **Python MT5 backtest harness** in `backtesting/MT5/`. It keeps a **journal** and a small **evolution** memory so each iteration can build on the last. + +It does **not** embed inside MetaTrader as an EA. For **Strategy Tester** on `.mq5` files, MT5’s terminal still has to compile and run tests; this agent automates the **Python** side and file edits. MQL5 compile verification can be added later via MetaEditor CLI if you want strict compile checks. + +## What “indefinite” means here + +`main.py` runs until you press **Ctrl+C** (or the process is stopped by your supervisor). For true daemon operation, run it under **Windows Task Scheduler**, **NSSM**, **systemd**, or a container restart policy. + +Set `loop.max_iterations` to `0` in `config.yaml` for unlimited iterations (default in `config.example.yaml`). + +## Requirements + +- **Python 3.10+** +- **Ollama** running locally (`ollama serve`) with a model pulled (see `ollama list`; `config.example.yaml` defaults to `qwen2.5-coder:7b`). +- Optional: **MetaTrader 5** installed and logged in for `run_backtest` / `MetaTrader5` Python package (see `backtesting/MT5/README.md`) + +## Quick start + +```powershell +cd d:\profitable-expert-advisor\self-coding-agent +python -m venv .venv +.\.venv\Scripts\activate +pip install -r requirements.txt +copy config.example.yaml config.yaml +# Edit config.yaml: set ollama.model, mission, allowed_path_prefixes if needed +python main.py +``` + +### CLI overrides (good for smoke tests) + +```powershell +python main.py --max-iterations 2 --model qwen2.5-coder:7b --no-mt5-backtest --sleep-seconds 0 +``` + +### Automated smoke tests (no Ollama) + +```powershell +python -m unittest discover -s tests -p "test_*.py" -v +``` + +On first failure to connect to Ollama, the loop backs off and retries (see `loop.consecutive_error_limit`). + +## Configuration + +- **`config.yaml`**: optional; if missing, `config.example.yaml` is used as defaults. +- **`workspace_root`**: default `..` resolves to the **repository root** (parent of `self-coding-agent/`). +- **`allowed_path_prefixes`**: hard sandbox for `read_file` / `write_file` / `list_dir`. Tighten this in production. +- **`mt5_backtest`**: toggles subprocess calls to `backtesting/MT5/run_backtest.py`. +- **`cursor.open_in_cursor_after_write`**: if `true`, tries `cursor ` on each write (requires `cursor` on PATH). + +## Cursor integration + +- **This script is not the Cursor IDE.** It complements Cursor: you can leave it running while you work in Cursor on the same repo. +- **Programmatic Cursor agents** (outside this repo) use the Cursor TypeScript SDK; see the Cursor SDK skill in your environment if you want CI/agents that call Cursor Cloud APIs with credentials. +- **Practical hybrid workflow:** run this agent for breadth (many small iterations, local model cost = $0); use Cursor for focused refactors, reviews, and hard problems. + +## Self-evolve / self-improve (what is implemented) + +- **`state/journal.jsonl`**: one JSON record per iteration (reflection, actions, errors). +- **`state/evolution.json`**: stores recent backtest stdout/stderr tails when `run_backtest` runs, so later prompts include a short “what happened last time” hint. + +This is **deliberately minimal**: you can extend `agent/memory.py` to track numeric metrics, Pareto fronts, or mutation of parameters. + +## Safety notes + +- The model can only touch paths under **`allowed_path_prefixes`**. +- There is **no arbitrary shell** tool; only `run_backtest` and `run_python` with an allowlisted script path under the repo. +- **`fetch_url`** is HTTP(S) only; responses are size-capped. + +## Ollama API + +The client uses `POST /api/chat` with `stream: false`. Compatible with current Ollama HTTP API. + +## Troubleshooting + +- **`json.JSONDecodeError`**: the agent now prints a truncated copy of the model output to the console. Try a coder-tuned model, lower `temperature`, or raise `num_ctx` in `ollama.options`. +- **MT5 backtest fails**: run `python backtesting/MT5/test_setup.py` from repo root with MT5 open; see `backtesting/MT5/QUICKSTART.md`. On Windows, avoid Unicode symbols in console scripts (this repo’s `test_setup.py` uses ASCII markers like `[OK]`). diff --git a/self-coding-agent/__pycache__/main.cpython-312.pyc b/self-coding-agent/__pycache__/main.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..25092de1016ce58c9656d173c777b7623d82cee1 GIT binary patch literal 789 zcmZva&ubGw6vyA}PBzmtNqZ2iidAx{Iiwe{ha!R?QamK09>Nk>w%tj)>Fn$>y9uVJ z6fG@yY4H&Mg_1wTQ&g-S>_LhLZ-Lx;5NGlO0(A~E-#7EVZ$9&w&$(O%)Udwe#zO>f zse|dT#sUrhD$xZGJj5VCHbPn(%&-l$n#>HajS(0?F-`SU6+Ifc@j5&ACP5=VyF1o4 zQT{nfrhaNPZd}i5AyN4MN#o}AY)>=I)a)7KoDn}}*&t`8ZIf(g=Eqk zfSK~DYFVVz`6&#w_iF9gdMy%R-A~+2MoaW*fKL> zT-BWs`a_NQGzxbEeHqbv8c*ntctsuuq1R;eiMXRe-L7~?O#>4lbOD7+$XvkEFOof~ ze#oDZ+ST`M?BxdqnaN=z6b< literal 0 HcmV?d00001 diff --git a/self-coding-agent/agent/__init__.py b/self-coding-agent/agent/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/self-coding-agent/agent/__pycache__/__init__.cpython-312.pyc b/self-coding-agent/agent/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..08daaf733117b7b3a85c35c6c0a069a176cfadc9 GIT binary patch literal 161 zcmX@j%ge<81Z%IdWP#|%AOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<=|o!Q&5zjmRXXR zl#{BPT2YW%RHB=hQkGeqUldcEnvuWb1ma>4<0CU8BV!RWkOct9<0!`f literal 0 HcmV?d00001 diff --git a/self-coding-agent/agent/__pycache__/config.cpython-312.pyc b/self-coding-agent/agent/__pycache__/config.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4ab3e92c0824ceea1c3ca815dec17ed1190c0252 GIT binary patch literal 2379 zcmah~O-vg{6rR~#du^|ONDKk;Q#n9zH^k&WiYkOkLzAWl+LTBYF38$=$8;Ur>&`9& zB0F)VO2us?$O#TPI5(oCQVzZJQZ-d?y+E7_Yem#ni7NF*OQlGh`eyAlX@bW8M<}-X&hzqt% z$hflZxH~Jx#fFV1?%@y-i1$9OM@zRk;kW1e4K}@JTjp>($>M(1tGd1r;sMpCx?v8& zEW#X8CDj9S%Pc4R|70O#Y)MKkr<;nY={aKrzJ(7J^HZ6#_@UgaB@AmxGs!ut!R&%R zoE&e$k>J#3W8Vm+U$$yE6p(YSB3Hm^=KIQU&NhrDK1OI9ViftJP~Z#PG@@rr(J?P@ z1-=tLOphbE-&l`!zhouspbwjpa=F)blf1BR4l2hT5d9?Op=^A zUZ+Vtm(nKt^RqMnk!<1z#xQ}D(7G=;A1lX}gsSgA>0GU)V=;I;SZ#^?jRaS3S(w9f z$7_;*fiIuEd0snOB$?5mj+ai^4<DrM@tuKV(`nGpWl2UcGLo`^W)|5rS4^MZoC>ewt=v> z@8QsTxP5W(_F&~;HQe(!e0Z6A!GruSrugk)#q22tW-L9ei;?9`< z0Y*DvYBmvda4h1Tadh+s^o~)M3(al-p&R2htU1%`=+buYcE0L!fqNC}BL6DZCaV{F z6!1;n$${6=zty&lz0|;-VMiGRw4IR-AhJmJGM<4$_c5}ckpqmp!3bMU7AzqTjh6po2-zeW$QmUcI<4|wqojC!ZcSWB|dlt;4 z%T=jsMd$+bT~XVij{bLhhobzWsB7q$m~6fPunV?ZyP_`xv&b-eSqm~YRIGB&twL=! z-;IJ@^*dFxlL^pm`4KC4O{Z6lypkjds_W);uD@UAEq;=i_C;GFC5E1vChQSQrY0?( zlFWb0W;=j==SN^uZ^GZ`1yVvaUtm63j;`$Psti|sa_QWg`KW=~n`qpXM8xnz036}kvG%C=Qrq3{^gbI*PO z>;z;ScF&3|Imf1>2wbc;B&+3Lc<%@z@N|I^ChsJ+g=?zQL# literal 0 HcmV?d00001 diff --git a/self-coding-agent/agent/__pycache__/loop.cpython-312.pyc b/self-coding-agent/agent/__pycache__/loop.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac225622dcfa62659979ec5962f52f99e8fea245 GIT binary patch literal 9664 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 N6Q}&G44k!*e*>yMr=tJ> literal 0 HcmV?d00001 diff --git a/self-coding-agent/agent/__pycache__/ollama_client.cpython-312.pyc b/self-coding-agent/agent/__pycache__/ollama_client.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..748735b7423509c0785c980022d47af424aafbc2 GIT binary patch literal 1597 zcmZ`(-D?|15Z~2(-^uc4n#8eNQ5iRK?V3XRU=vDYIWK0Y7zC_N5_CcVT93X7;yp zGqdw+M~8`E{qnn9@+E}!#Yep0TP%Dq5Aa&@xgs8B8^Z9_>0TI+s9fbu>!`L65%M}NRE70s;QAg zlt_wHN4W?#cKq)MmE;$35Q^k`YK-*`s%eo{(q7`FMCv_lJ8@*G>5*PCPI_%0t1tq) z_5b#o0l9`9<6-oFV_CYqi3iPt<{gdLEk3gd+y-KnnfA(Hlp}8#5RX8?62G zLTJ1$VtdrhFN7pdp+T#Zh?H@u=rV44)C)ix6kIL=22WnA1|q1-goK1EPPJU2*(BF* z+5k}{J`s6peWm+WN;7F4|($B5K%aG6d+N zPiYfK9ko)(>RlgS8{f<{%vZP0Ju*k@Q;)k}Y4!~?drm*mQtJb21DnNNW4MJR<;-`(&1BE|^xE{MwDrd7bR#*kikrIehu#m~yZS)0vuk~E zZSl*cRr#p~{w*C@o$Ke<&TmXK%)#Hx%vMi*s+sCuFRm3gyhbWrzp`hY+9=+oyH;i| z)xR@1@#D}>BR`Bh__Q(k;lm3Lr*Zszj~RZzJ3JP{-3sHs%8T!Cs4F?xuYb3_a{ zB4!K`53yaN@6iE>h-82q>KEaiRDJhd@+N$WF-PZsv?Pr2pXl{{Wc`Ik8)$SNC840% zvF54%mUSBULQY!}@W)oFr2ucKs58^jgruX?aLW*qiBi37?^Y72#y=gPBO`$RFRoB| Ap#T5? literal 0 HcmV?d00001 diff --git a/self-coding-agent/agent/__pycache__/tools.cpython-312.pyc b/self-coding-agent/agent/__pycache__/tools.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33654ec530393495b9fe0b3402e7fd7f503e612a GIT binary patch literal 13322 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 YXnN-#ErNlzeM({e_%v&ySCb9;A37OF3jhEB literal 0 HcmV?d00001 diff --git a/self-coding-agent/agent/config.py b/self-coding-agent/agent/config.py new file mode 100644 index 0000000..6cac834 --- /dev/null +++ b/self-coding-agent/agent/config.py @@ -0,0 +1,42 @@ +from __future__ import annotations + +import copy +from pathlib import Path +from typing import Any, Dict + +import yaml + +AGENT_DIR = Path(__file__).resolve().parent.parent + + +def _deep_merge(base: Dict[str, Any], override: Dict[str, Any]) -> Dict[str, Any]: + out = copy.deepcopy(base) + for k, v in override.items(): + if k in out and isinstance(out[k], dict) and isinstance(v, dict): + out[k] = _deep_merge(out[k], v) + else: + out[k] = copy.deepcopy(v) + return out + + +def default_config() -> Dict[str, Any]: + example = AGENT_DIR / "config.example.yaml" + if example.is_file(): + with example.open("r", encoding="utf-8") as f: + return yaml.safe_load(f) or {} + return {} + + +def load_config() -> Dict[str, Any]: + path = AGENT_DIR / "config.yaml" + base = default_config() + if not path.is_file(): + return base + with path.open("r", encoding="utf-8") as f: + user = yaml.safe_load(f) or {} + return _deep_merge(base, user) + + +def workspace_path(cfg: Dict[str, Any]) -> Path: + rel = cfg.get("workspace_root", "..") + return (AGENT_DIR / rel).resolve() diff --git a/self-coding-agent/agent/loop.py b/self-coding-agent/agent/loop.py new file mode 100644 index 0000000..c4185cf --- /dev/null +++ b/self-coding-agent/agent/loop.py @@ -0,0 +1,210 @@ +from __future__ import annotations + +import json +import time +import traceback +from typing import Any, Dict, List + +from .config import load_config, workspace_path +from .memory import append_journal, load_evolution, maybe_update_evolution, tail_journal +from .ollama_client import chat +from .tools import ToolExecutor, ToolError, parse_model_json + + +ACTION_SCHEMA = r""" +You must reply with ONLY a single raw JSON object (no markdown fences, no commentary) of this form: +{ + "reflection": "short reasoning", + "actions": [ + {"type": "list_dir", "path": "frontline/units"}, + {"type": "read_file", "path": "relative/path/from/repo/root.mq5"}, + {"type": "write_file", "path": "self-coding-agent/generated/example.txt", "content": "file contents"}, + {"type": "fetch_url", "url": "https://..."}, + {"type": "run_backtest", "strategy": "RSIReversalStrategy", "symbol": "XAUUSD", "start": "2023-01-01", "end": "2024-01-01", "timeframe": "H1"}, + {"type": "run_python", "script_relative": "backtesting/MT5/test_setup.py", "args": []} + ] +} + +Rules: +- Paths are relative to the repository root and must stay under allowed prefixes. +- Prefer reading before writing; keep edits minimal and compile-friendly for MQL5. +- Use fetch_url for MQL5 documentation pages when unsure about APIs. +- run_backtest uses the repo's Python MT5 harness (MetaTrader 5 terminal must be installed/running). +- If you only need to think, use an empty actions list. +""" + + +def build_system_message(cfg: Dict[str, Any]) -> str: + mission = str(cfg.get("mission") or "").strip() + prefixes = cfg.get("allowed_path_prefixes") or [] + return ( + mission + + "\n\nAllowed path prefixes (read/write/list):\n" + + "\n".join(f"- {p}" for p in prefixes) + + "\n\n" + + ACTION_SCHEMA + ) + + +def build_user_message( + iteration: int, + last_results: str, + journal_tail: str, + evolution_hint: str, +) -> str: + parts = [ + f"Iteration: {iteration}", + "Previous tool results (JSON):\n```json\n" + + last_results + + "\n```", + ] + if journal_tail.strip(): + parts.append("Recent journal (tail):\n" + journal_tail) + if evolution_hint.strip(): + parts.append("Evolution memory hint:\n" + evolution_hint) + parts.append( + "Plan the next improvements and output your JSON response. " + "If this is iteration 1 and there is no parse error yet, prefer list_dir/read_file only; " + "avoid run_backtest until you have read relevant code." + ) + return "\n\n".join(parts) + + +def run_loop( + *, + max_iterations: int | None = None, + model: str | None = None, + sleep_seconds: float | None = None, + mt5_backtest_enabled: bool | None = None, +) -> None: + cfg = load_config() + if mt5_backtest_enabled is not None: + cfg.setdefault("mt5_backtest", {})["enabled"] = bool(mt5_backtest_enabled) + ws = workspace_path(cfg) + ex = ToolExecutor(cfg, ws) + + ollama = cfg.get("ollama") or {} + base_url = str(ollama.get("base_url", "http://127.0.0.1:11434")) + model_name = str(model or ollama.get("model", "llama3.2")) + options = ollama.get("options") or {} + + loop_cfg = cfg.get("loop") or {} + max_iters = int(max_iterations if max_iterations is not None else loop_cfg.get("max_iterations", 0)) + sleep_s = float(sleep_seconds if sleep_seconds is not None else loop_cfg.get("sleep_seconds", 2.0)) + err_limit = int(loop_cfg.get("consecutive_error_limit", 15)) + + mem_cfg = cfg.get("memory") or {} + journal_max = int(mem_cfg.get("journal_max_lines", 80)) + + system = build_system_message(cfg) + + iteration = 0 + consecutive_errors = 0 + last_results_json = json.dumps({"info": "No previous tool results yet."}) + + while True: + iteration += 1 + if max_iters and iteration > max_iters: + print(f"Stopping: reached max_iterations={max_iters}", flush=True) + return + + ev = load_evolution(cfg) + ev_notes = ev.get("notes") or [] + evolution_hint = "" + if ev_notes: + evolution_hint = json.dumps(ev_notes[-3:], ensure_ascii=False) + + journal_tail = tail_journal(cfg, journal_max) + user = build_user_message(iteration, last_results_json, journal_tail, evolution_hint) + + messages: List[Dict[str, str]] = [ + {"role": "system", "content": system}, + {"role": "user", "content": user}, + ] + + try: + raw = chat(base_url, model_name, messages, options=options) + try: + plan = parse_model_json(raw) + except json.JSONDecodeError: + tail = raw if len(raw) <= 4000 else raw[:4000] + "\n...[truncated]..." + print("Model returned non-JSON; raw (truncated):\n" + tail + "\n---", flush=True) + raise + actions = plan.get("actions") or [] + if not isinstance(actions, list): + raise ValueError("actions must be a list") + + results: List[Dict[str, Any]] = [] + backtest_blob = "" + max_actions = 12 + for i, action in enumerate(actions[:max_actions]): + if not isinstance(action, dict): + results.append({"ok": False, "error": "action must be an object"}) + continue + try: + r = ex.execute(action) + results.append({"action": action, "result": r}) + if action.get("type") == "run_backtest": + stdout = str((r or {}).get("stdout") or "") + stderr = str((r or {}).get("stderr") or "") + backtest_blob = stdout + "\n" + stderr + except ToolError as e: + results.append({"action": action, "result": {"ok": False, "error": str(e)}}) + except Exception as e: + results.append( + {"action": action, "result": {"ok": False, "error": f"{type(e).__name__}: {e}"}} + ) + + last_results_json = json.dumps( + { + "reflection": plan.get("reflection"), + "parsed_ok": True, + "tool_results": results, + }, + ensure_ascii=False, + ) + + if backtest_blob.strip(): + maybe_update_evolution(cfg, iteration, backtest_blob) + + append_journal( + cfg, + { + "iteration": iteration, + "reflection": plan.get("reflection"), + "actions": actions[:max_actions], + "ok": True, + }, + ) + + consecutive_errors = 0 + print( + f"[iter {iteration}] ok reflection={str(plan.get('reflection', ''))[:160]!r} " + f"actions={len(actions[:max_actions])}", + flush=True, + ) + time.sleep(max(0.0, sleep_s)) + + except KeyboardInterrupt: + print("Interrupted by user; exiting.", flush=True) + return + except Exception as e: + consecutive_errors += 1 + err_text = f"{type(e).__name__}: {e}\n{traceback.format_exc()[-4000:]}" + print(err_text, flush=True) + append_journal( + cfg, + { + "iteration": iteration, + "ok": False, + "error": err_text, + }, + ) + last_results_json = json.dumps({"parse_or_run_error": err_text}, ensure_ascii=False) + backoff = min(300.0, float(2 ** min(consecutive_errors, 8))) + if consecutive_errors >= err_limit: + print( + f"Many consecutive errors ({consecutive_errors}); sleeping {backoff:.1f}s before retry.", + flush=True, + ) + time.sleep(backoff) diff --git a/self-coding-agent/agent/memory.py b/self-coding-agent/agent/memory.py new file mode 100644 index 0000000..401c568 --- /dev/null +++ b/self-coding-agent/agent/memory.py @@ -0,0 +1,83 @@ +from __future__ import annotations + +import json +from datetime import datetime, timezone +from pathlib import Path +from typing import Any, Dict, List + +from .config import AGENT_DIR + + +def _utc_now_iso() -> str: + return datetime.now(timezone.utc).replace(microsecond=0).isoformat() + + +def journal_path(cfg: Dict[str, Any]) -> Path: + return AGENT_DIR / "state" / "journal.jsonl" + + +def evolution_path(cfg: Dict[str, Any]) -> Path: + rel = (cfg.get("memory") or {}).get("evolution_path", "state/evolution.json") + return (AGENT_DIR / rel).resolve() + + +def append_journal(cfg: Dict[str, Any], record: Dict[str, Any]) -> None: + p = journal_path(cfg) + p.parent.mkdir(parents=True, exist_ok=True) + line = json.dumps(record, ensure_ascii=False) + "\n" + with p.open("a", encoding="utf-8") as f: + f.write(line) + + +def tail_journal(cfg: Dict[str, Any], max_lines: int) -> str: + p = journal_path(cfg) + if not p.is_file(): + return "" + lines: List[str] = [] + with p.open("r", encoding="utf-8") as f: + for line in f: + lines.append(line.rstrip("\n")) + tail = lines[-max_lines:] if max_lines > 0 else lines + return "\n".join(tail) + + +def load_evolution(cfg: Dict[str, Any]) -> Dict[str, Any]: + p = evolution_path(cfg) + if not p.is_file(): + return { + "version": 1, + "created": _utc_now_iso(), + "best": None, + "notes": [], + } + with p.open("r", encoding="utf-8") as f: + return json.load(f) + + +def save_evolution(cfg: Dict[str, Any], data: Dict[str, Any]) -> None: + p = evolution_path(cfg) + p.parent.mkdir(parents=True, exist_ok=True) + with p.open("w", encoding="utf-8") as f: + json.dump(data, f, indent=2, ensure_ascii=False) + + +def maybe_update_evolution( + cfg: Dict[str, Any], + iteration: int, + backtest_stdout: str, +) -> str: + """ + Heuristic: if stdout mentions profit / return, store snippet for self-improve prompts. + """ + ev = load_evolution(cfg) + snippet = backtest_stdout[-6000:] if backtest_stdout else "" + note = { + "t": _utc_now_iso(), + "iteration": iteration, + "stdout_tail": snippet[-2000:], + } + notes = ev.get("notes") or [] + notes.append(note) + ev["notes"] = notes[-200:] + save_evolution(cfg, ev) + return json.dumps(note, ensure_ascii=False) diff --git a/self-coding-agent/agent/ollama_client.py b/self-coding-agent/agent/ollama_client.py new file mode 100644 index 0000000..a23c4e9 --- /dev/null +++ b/self-coding-agent/agent/ollama_client.py @@ -0,0 +1,32 @@ +from __future__ import annotations + +import json +from typing import Any, Dict, List, Optional + +import httpx + + +def chat( + base_url: str, + model: str, + messages: List[Dict[str, str]], + options: Optional[Dict[str, Any]] = None, + timeout: float = 600.0, +) -> str: + url = base_url.rstrip("/") + "/api/chat" + payload: Dict[str, Any] = { + "model": model, + "messages": messages, + "stream": False, + } + if options: + payload["options"] = options + with httpx.Client(timeout=timeout) as client: + r = client.post(url, json=payload) + r.raise_for_status() + data = r.json() + msg = data.get("message") or {} + content = msg.get("content") + if not isinstance(content, str): + raise RuntimeError(f"Unexpected Ollama response: {json.dumps(data)[:800]}") + return content diff --git a/self-coding-agent/agent/tools.py b/self-coding-agent/agent/tools.py new file mode 100644 index 0000000..5ba4a83 --- /dev/null +++ b/self-coding-agent/agent/tools.py @@ -0,0 +1,201 @@ +from __future__ import annotations + +import json +import subprocess +import re +from pathlib import Path +from typing import Any, Dict +from urllib.parse import urlparse + +import httpx + +from .config import AGENT_DIR + + +class ToolError(Exception): + pass + + +def _norm_rel(p: str) -> str: + return p.replace("\\", "/").strip().lstrip("/") + + +class ToolExecutor: + def __init__(self, cfg: Dict[str, Any], workspace: Path): + self.cfg = cfg + self.workspace = workspace + prefixes = cfg.get("allowed_path_prefixes") or [] + self.prefixes = tuple(_norm_rel(x) for x in prefixes) + + def _resolve_under_workspace(self, rel: str) -> Path: + rel_n = _norm_rel(rel) + if rel_n.startswith("..") or "/../" in f"/{rel_n}/": + raise ToolError("Path traversal is not allowed") + path = (self.workspace / rel_n).resolve() + try: + path.relative_to(self.workspace) + except ValueError as e: + raise ToolError("Path escapes workspace") from e + ok = any( + rel_n == pref.rstrip("/") or rel_n.startswith(pref.rstrip("/") + "/") + for pref in self.prefixes + ) + if not ok: + raise ToolError(f"Path not allowed by allowed_path_prefixes: {rel_n}") + return path + + def execute(self, action: Dict[str, Any]) -> Dict[str, Any]: + t = action.get("type") + if t == "read_file": + return self._read_file(str(action.get("path", ""))) + if t == "write_file": + return self._write_file(str(action.get("path", "")), str(action.get("content", ""))) + if t == "list_dir": + return self._list_dir(str(action.get("path", ""))) + if t == "fetch_url": + return self._fetch_url(str(action.get("url", ""))) + if t == "run_backtest": + return self._run_backtest(action) + if t == "run_python": + return self._run_python(action) + raise ToolError(f"Unknown action type: {t!r}") + + def _read_file(self, rel: str) -> Dict[str, Any]: + path = self._resolve_under_workspace(rel) + if not path.is_file(): + return {"ok": False, "error": f"Not a file: {rel}"} + text = path.read_text(encoding="utf-8", errors="replace") + if len(text) > 120_000: + text = text[:120_000] + "\n\n...[truncated]..." + return {"ok": True, "path": rel, "content": text} + + def _write_file(self, rel: str, content: str) -> Dict[str, Any]: + path = self._resolve_under_workspace(rel) + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(content, encoding="utf-8") + cursor_cfg = (self.cfg.get("cursor") or {}) + if cursor_cfg.get("open_in_cursor_after_write"): + try: + subprocess.Popen( + ["cursor", str(path)], + cwd=str(self.workspace), + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) + except OSError: + pass + return {"ok": True, "path": rel, "bytes": len(content.encode("utf-8"))} + + def _list_dir(self, rel: str) -> Dict[str, Any]: + path = self._resolve_under_workspace(rel) + if not path.is_dir(): + return {"ok": False, "error": f"Not a directory: {rel}"} + names = sorted(p.name for p in path.iterdir()) + return {"ok": True, "path": rel, "entries": names[:500]} + + def _fetch_url(self, url: str) -> Dict[str, Any]: + web = self.cfg.get("web") or {} + timeout = float(web.get("fetch_timeout_seconds", 25)) + max_bytes = int(web.get("max_response_bytes", 400_000)) + u = urlparse(url) + if u.scheme not in ("http", "https") or not u.netloc: + raise ToolError("Only http(s) URLs with a host are allowed") + with httpx.Client(timeout=timeout, follow_redirects=True) as client: + r = client.get(url, headers={"User-Agent": "self-coding-agent/1.0"}) + r.raise_for_status() + body = r.content[:max_bytes] + ctype = r.headers.get("content-type", "") + text = body.decode("utf-8", errors="replace") + if len(text) > 80_000: + text = text[:80_000] + "\n\n...[truncated]..." + return {"ok": True, "url": url, "status": r.status_code, "content_type": ctype, "text": text} + + def _run_backtest(self, action: Dict[str, Any]) -> Dict[str, Any]: + mt5cfg = self.cfg.get("mt5_backtest") or {} + if not mt5cfg.get("enabled", True): + return {"ok": False, "skipped": True, "reason": "mt5_backtest.enabled is false"} + py = str(mt5cfg.get("python_executable", "python")) + script_rel = str(mt5cfg.get("script_relative", "backtesting/MT5/run_backtest.py")) + script = (self.workspace / _norm_rel(script_rel)).resolve() + try: + script.relative_to(self.workspace) + except ValueError as e: + raise ToolError("Backtest script outside workspace") from e + if not script.is_file(): + return {"ok": False, "error": f"Missing script: {script}"} + + strategy = str(action.get("strategy") or mt5cfg.get("default_strategy", "RSIReversalStrategy")) + symbol = str(action.get("symbol") or mt5cfg.get("default_symbol", "XAUUSD")) + start = str(action.get("start") or mt5cfg.get("default_start", "2023-01-01")) + end = str(action.get("end") or mt5cfg.get("default_end", "2024-01-01")) + timeframe = str(action.get("timeframe") or "H1") + + cmd = [ + py, + str(script), + "--strategy", + strategy, + "--symbol", + symbol, + "--start", + start, + "--end", + end, + "--timeframe", + timeframe, + ] + proc = subprocess.run( + cmd, + cwd=str(self.workspace), + capture_output=True, + text=True, + encoding="utf-8", + errors="replace", + ) + out = (proc.stdout or "") + ("\n" + proc.stderr if proc.stderr else "") + return { + "ok": proc.returncode == 0, + "returncode": proc.returncode, + "stdout": proc.stdout[-20000:] if proc.stdout else "", + "stderr": proc.stderr[-20000:] if proc.stderr else "", + } + + def _run_python(self, action: Dict[str, Any]) -> Dict[str, Any]: + rel = _norm_rel(str(action.get("script_relative", ""))) + if not rel.endswith(".py"): + raise ToolError("run_python only supports .py scripts") + script = self._resolve_under_workspace(rel) + if not script.is_file(): + return {"ok": False, "error": f"Missing script: {rel}"} + args = action.get("args") or [] + if not isinstance(args, list) or not all(isinstance(a, str) for a in args): + raise ToolError("args must be a list of strings") + py = str((self.cfg.get("mt5_backtest") or {}).get("python_executable", "python")) + cmd = [py, str(script), *args] + proc = subprocess.run( + cmd, + cwd=str(self.workspace), + capture_output=True, + text=True, + encoding="utf-8", + errors="replace", + ) + return { + "ok": proc.returncode == 0, + "returncode": proc.returncode, + "stdout": (proc.stdout or "")[-20000:], + "stderr": (proc.stderr or "")[-20000:], + } + + +def parse_model_json(text: str) -> Dict[str, Any]: + s = text.strip().lstrip("\ufeff") + fence = re.search(r"```(?:json)?\s*([\s\S]*?)\s*```", s, re.IGNORECASE) + if fence: + s = fence.group(1).strip() + if not s.lstrip().startswith("{"): + start = s.find("{") + end = s.rfind("}") + if start != -1 and end != -1 and end > start: + s = s[start : end + 1] + return json.loads(s) diff --git a/self-coding-agent/config.example.yaml b/self-coding-agent/config.example.yaml new file mode 100644 index 0000000..13c38ad --- /dev/null +++ b/self-coding-agent/config.example.yaml @@ -0,0 +1,51 @@ +# Copy to config.yaml and adjust. config.yaml is loaded if present. + +ollama: + base_url: "http://127.0.0.1:11434" + # Use a model you have pulled locally (`ollama list`). Coder-tuned models follow JSON better. + model: "qwen2.5-coder:7b" + # Options passed to Ollama /api/chat + options: + temperature: 0.35 + num_ctx: 8192 + +workspace_root: ".." # relative to self-coding-agent/ — repo root + +# Only paths under workspace_root matching these prefixes are readable/writable. +allowed_path_prefixes: + - "frontline/" + - "lab/" + - "self-coding-agent/generated/" + - "backtesting/MT5/" + +loop: + max_iterations: 0 # 0 = run forever until SIGINT/SIGTERM + sleep_seconds: 2.0 # pause between iterations + consecutive_error_limit: 15 # then exponential backoff (cap 300s) + +memory: + journal_max_lines: 80 # tail of journal.jsonl injected into prompts + evolution_path: "state/evolution.json" + +mt5_backtest: + enabled: true + python_executable: "python" + script_relative: "backtesting/MT5/run_backtest.py" + default_strategy: "RSIReversalStrategy" + default_symbol: "XAUUSD" + default_start: "2023-01-01" + default_end: "2024-01-01" + +web: + fetch_timeout_seconds: 25 + max_response_bytes: 400000 + +cursor: + # Optional: if `cursor` is on PATH, open generated files after writes (best-effort). + open_in_cursor_after_write: false + +mission: | + You are an autonomous coding agent for this trading/research repo. + Improve MQL5 Expert Advisors under frontline/units/ and lab/EAs/, or Python strategies + under backtesting/MT5/. Use actions to read files, write files, fetch docs from URLs, + and run backtests. Prefer small, testable edits. Output valid JSON only. diff --git a/self-coding-agent/generated/README.txt b/self-coding-agent/generated/README.txt new file mode 100644 index 0000000..c2816f8 --- /dev/null +++ b/self-coding-agent/generated/README.txt @@ -0,0 +1,2 @@ +This directory is writable by the self-coding agent (see allowed_path_prefixes in config). +Place generated snippets, notes, or experimental MQL5 here before promoting them into frontline/. diff --git a/self-coding-agent/main.py b/self-coding-agent/main.py new file mode 100644 index 0000000..887461c --- /dev/null +++ b/self-coding-agent/main.py @@ -0,0 +1,61 @@ +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + +_ROOT = Path(__file__).resolve().parent +if str(_ROOT) not in sys.path: + sys.path.insert(0, str(_ROOT)) + +from agent.loop import run_loop + + +def _parse_args() -> argparse.Namespace: + p = argparse.ArgumentParser(description="Self-coding agent (Ollama + sandboxed tools)") + p.add_argument( + "--max-iterations", + type=int, + default=None, + help="Stop after N iterations (overrides config). Default: from config, 0 = infinite.", + ) + p.add_argument("--model", type=str, default=None, help="Ollama model name (overrides config).") + p.add_argument( + "--sleep-seconds", + type=float, + default=None, + help="Pause after each successful iteration (overrides config).", + ) + p.add_argument( + "--no-mt5-backtest", + action="store_true", + help="Disable subprocess MT5 Python backtests for this run.", + ) + p.add_argument( + "--mt5-backtest", + action="store_true", + help="Force-enable MT5 Python backtests for this run.", + ) + return p.parse_args() + + +def main() -> None: + args = _parse_args() + mt5: bool | None = None + if args.no_mt5_backtest and args.mt5_backtest: + raise SystemExit("Use only one of --no-mt5-backtest / --mt5-backtest") + if args.no_mt5_backtest: + mt5 = False + elif args.mt5_backtest: + mt5 = True + + run_loop( + max_iterations=args.max_iterations, + model=args.model, + sleep_seconds=args.sleep_seconds, + mt5_backtest_enabled=mt5, + ) + + +if __name__ == "__main__": + main() diff --git a/self-coding-agent/requirements.txt b/self-coding-agent/requirements.txt new file mode 100644 index 0000000..2c8ef07 --- /dev/null +++ b/self-coding-agent/requirements.txt @@ -0,0 +1,2 @@ +httpx>=0.27.0 +PyYAML>=6.0.1 diff --git a/self-coding-agent/state/.gitignore b/self-coding-agent/state/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/self-coding-agent/state/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/self-coding-agent/tests/__pycache__/test_smoke.cpython-312.pyc b/self-coding-agent/tests/__pycache__/test_smoke.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..35dc464a016ae22a129054afd9ffbde8baaf90c0 GIT binary patch literal 3435 zcmcImT}&L;6~6PcJH!64fMWxVvB!&3v$Tur$c-B0Mk1JoSTdvzFWJ~yk9Y1av&_zH z?#u#9pu!53vHD;~dGMkpiXUyc4}I-Z)tA2XrCV?yQ%7wTRaM^Hf)vS5J?GA@frTh} zXfNW-{rT?Md*^)ToAal5JVKyteV-}w0$!pt()2>5 zV$VVBtiY0ouM}TAh&F`%J|BqzhTkS^wU-i^M5!aw!N-c#S?bDkm5yYN;EmoOhPpzG zHYyhf4tjnh1#_9B92o&*^jna}XtxoY0bi^OP9+zAbcol+lt8LdRZ7JduDxAyW~k;- z*K@T2+tDU1OE2jfqwiHrMvc^vcBNtuYvrmp?buqnq*ZLwL%3#`ZqAvdOiR0s{pqrH z2A8sfL*?ojEj{}c{#;7%qq=Q7p6;2B?M}d0eoObJzrtvyL_cadx{=K}cHS)b?Q;&B zam#v+X3Kzq<=B+tSYz`vSMeO?ca(MJ(rn2wsFf|cj-6}Vh(8+q5VkR}_Xs5!0azv) z!U_RiiC|^8wd{9I!71NDPnXfrCG^wS%l*h;;r$ESjQcT!CBb{Xz9=*qv?MN)Vk1s` zU&AblhKP(aq+LFIBT`0Wf$SoyBo&%ixG+u`)v8WKD>%cE>({U2Wh3t=8O>WXhi@`D ztR?4@Kh%;sAG$Dp_u3LdBYtET<_q(_(txBy)&{=@@o-(rys`Hxy7f@4 zFBmRfNYk`uuU{O#T4qk(^z<7RP1E@@Y)R|Jtm!)JDsD;V9K*B=X}v&g?<(gIw^318-$++wMi2rv@f{f ziG}>sv{NZed&8PDb0DUyC8qBuy=s|av@H{I%P=_rvjgYy%&|SowCPz)OgFi7ZAtT( zZo*W7#o;u*z*qvF49}O6I00A(E=U%&8A@q0#mu_FWANlk7 zv3mE<)?;sQal4baou~<)hSowgvNCxm?m!VJ#@xQ&? z=qKlhE6hO^_zw7i>V(Wo?~pkGIK!}{f|{X?XBuNr1hg><6+_;%=tA3-v5||H$A(G< z!w{sDR;on#$7#reBEn_o0piC3VqDQpm%1#4y8=$Iv(RT)HL-JO5Z%g(7dR`R^wBNL znWF};QWjo1oE$B%H2TYc`4*0Rp{D*G@7#=^sK-y#s_XI8zlqQ`Dm1AR{q4K;?vahy z>t9Pa{WV_4$$8 zB>=Tj3BA1CrG!R>0Ez3U$0gmgv)NRyuVk}^lMAFdU-2poq?w_v`I1|8eYIIG`U>W? zW!_+N!v)3<_9=|Ijx|dWz#!vYU%oOqIR)E2#=ei(uxVqp0)fLiV<@N;_r&=X0C8Oi ziW?P!F{;BBd>Q;k{2ll*9=he$&(sUS2jw+34rnB^`w5t*k{}45liWW^@=Fr=D@lAo zdj6qASI0m2#ir6%SNhhKlbgz!x^m`$P*(<*<h&3j&I4zt?`@V zw

jB@%P_b0(KZRKre6ZN$~N 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 K?f>@CpZ)_kQm#}0 diff --git a/frontline/cluster-fuck/RSICrossOverReversalXAUUSD/main.mq5 b/frontline/cluster-fuck/RSICrossOverReversalXAUUSD/main.mq5 deleted file mode 100644 index 8412fa6..0000000 --- a/frontline/cluster-fuck/RSICrossOverReversalXAUUSD/main.mq5 +++ /dev/null @@ -1,295 +0,0 @@ -// Input Parameters -#include -#include "../_united/MagicNumberHelpers.mqh" - -input group "Trade Management" -input int MagicNumber = 7; -input int rsiPeriod = 19; // RSI period -input int overboughtLevel = 93; // Overbought level (RSI > 70 for sell) -input int oversoldLevel = 22; // Oversold level (RSI < 30 for buy) -input double entryRSIBuySpread = 0; -input double entryRSISellSpread = 0; -input double lotSize = 0.1; // Trade lot size -input int slippage = 3; // Slippage for orders -input int cooldownSeconds = 209; // Cooldown period in seconds -input ENUM_TIMEFRAMES TimeFrame1 = PERIOD_M1; // RSI Timeframe -input ENUM_TIMEFRAMES TimeFrame2 = PERIOD_M1; // EMA Timeframe -input ENUM_TIMEFRAMES BarTimeFrame = PERIOD_M12; // EMA Timeframe -input int emaPeriod = 140; // EMA period -input double emaSlopeThreshold = 105; // EMA slope threshold for trend strength -input double exitBuyRSI = 86; -input double exitSellRSI = 10; -input double TrailingStop = 295; -input double emaDistanceThreshold = 165; -input int tradingHourOneBegin = 24; -input int tradingHourOneEnd = 22; -input int tradingHourTwoBegin = 6; -input int tradingHourTwoEnd = 19; -datetime bartime; -// RSI Handle -int rsiHandle; - -input bool Sunday =false; // Sunday -input bool Monday =false; // Monday -input bool Tuesday =true; // Tuesday -input bool Wednesday=true; // Wednesday -input bool Thursday =true; // Thursday -input bool Friday =false; // Friday -input bool Saturday =false; // Saturday - -bool WeekDays[7]; - -void WeekDays_Init() - { - WeekDays[0]=Sunday; - WeekDays[1]=Monday; - WeekDays[2]=Tuesday; - WeekDays[3]=Wednesday; - WeekDays[4]=Thursday; - WeekDays[5]=Friday; - WeekDays[6]=Saturday; - } - -bool WeekDays_Check(datetime aTime) - { - MqlDateTime stm; - TimeToStruct(aTime,stm); - return(WeekDays[stm.day_of_week]); - } - - -// EMA Handle -int emaHandle; -double previousRSIDef = 0; -// Create CTrade object for executing trades -CTrade trade; - -// Track the last trade time -datetime lastTradeTime = 0; - -void OnInit() { - WeekDays_Init(); - - // Create RSI handle - rsiHandle = iRSI(_Symbol, TimeFrame1, rsiPeriod, PRICE_CLOSE); - if (rsiHandle == INVALID_HANDLE) { - Print("Error creating RSI handle: ", GetLastError()); - return; - } - - // Create EMA handle - emaHandle = iMA(_Symbol, TimeFrame2, emaPeriod, 0, MODE_EMA, PRICE_CLOSE); - if (emaHandle == INVALID_HANDLE) { - Print("Error creating EMA handle: ", GetLastError()); - return; - } - - // Initialization successful - Print("RSI and EMA Reversal Strategy Initialized."); -} - -void OnTick() { - if(bartime==iTime(_Symbol,BarTimeFrame,0))return; - bartime=iTime(_Symbol,BarTimeFrame,0); - - // Check if RSI data is available - double rsi[]; - if (CopyBuffer(rsiHandle, 0, 0, 2, rsi) <= 0) { - Print("Error copying RSI data: ", GetLastError()); - return; - } - - // Check if EMA data is available - double ema[]; - if (CopyBuffer(emaHandle, 0, 0, 2, ema) <= 0) { - Print("Error copying EMA data: ", GetLastError()); - return; - } - - // Get the current time - datetime currentTime = TimeCurrent(); - - - int currentHour = TimeHour(TimeCurrent()); - - if(!WeekDays_Check(TimeTradeServer())) { - Close_Position_MN(MagicNumber); - return; - } - - if (!(currentHour < tradingHourOneEnd && currentHour > tradingHourOneBegin || currentHour < tradingHourTwoEnd && currentHour > tradingHourTwoBegin)) - { - - Close_Position_MN(MagicNumber); - return; // Prevent further trading during this time - } - - - // Ensure there is at least one position - bool hasPosition = PositionExistsByMagic(_Symbol, MagicNumber); - - - - // Get the current and previous RSI values - double currentRSI = rsi[0]; - double previousRSI = rsi[1]; - - if(previousRSIDef == 0) { - previousRSIDef = currentRSI; - return; - } - - // Get the current and previous EMA values - double currentEMA = ema[0]; - double previousEMA = ema[1]; - - // Calculate the EMA slope (difference between current and previous EMA values) - double emaSlope = (currentEMA - previousEMA) * 100; - Print(emaSlope); - - double closeCurr = iClose(Symbol(), Period(), 0); // Close of current bar - // ** NEW CODE: Calculate distance to EMA and adjust score ** - double priceToEmaDistance = (closeCurr - currentEMA) * 10; // Distance between the current price and the EMA - Print("priceToEmaDistance"); - Print(priceToEmaDistance); - - - // Determine if there are existing buy or sell positions - bool isBuyPosition = false; - bool isSellPosition = false; - if (hasPosition) { - if (PositionSelectByMagic(_Symbol, MagicNumber)) { - int positionType = PositionGetInteger(POSITION_TYPE); - if (positionType == POSITION_TYPE_BUY) { - isBuyPosition = true; - } else if (positionType == POSITION_TYPE_SELL) { - isSellPosition = true; - } - } - } - - ApplyTrailingStop(); - - // Check if the cooldown period has elapsed since the last trade - bool cooldownPassed = (currentTime - lastTradeTime) >= cooldownSeconds; - - // Check if EMA slope is above the threshold (indicating strong trend) - bool isTrendStrong = MathAbs(emaSlope) > emaSlopeThreshold || MathAbs(priceToEmaDistance) > emaDistanceThreshold; - - // Close trade logic when RSI crosses 50 - if (isBuyPosition && currentRSI > exitBuyRSI) { - // Close buy position - Close_Position_MN(MagicNumber); - lastTradeTime = currentTime; // Update last trade time - } - - if (isSellPosition && currentRSI < exitSellRSI) { - Close_Position_MN(MagicNumber); - lastTradeTime = currentTime; // Update last trade time - - } - - - // If the EMA slope is strong, do not place new trades - if (isTrendStrong) { - Close_Position_MN(MagicNumber); - lastTradeTime = currentTime; // Update last trade time - Print("Strong trend detected (EMA slope), skipping new trade."); - return; - } - - // SELL logic (RSI crosses over the overbought level) - if (currentRSI < overboughtLevel - entryRSISellSpread && previousRSIDef >= overboughtLevel && !isSellPosition && !hasPosition && cooldownPassed) { - trade.SetExpertMagicNumber(MagicNumber); - if (trade.Sell(lotSize, _Symbol, 0, 0, "Sell Order")) { - Print("Sell order placed."); - lastTradeTime = currentTime; // Update last trade time - } else { - Print("Error placing sell order: ", GetLastError()); - } - } - - // BUY logic (RSI crosses below the oversold level) - if (currentRSI > oversoldLevel + entryRSIBuySpread && previousRSIDef <= oversoldLevel && !isBuyPosition && !hasPosition && cooldownPassed) { - trade.SetExpertMagicNumber(MagicNumber); - if (trade.Buy(lotSize, _Symbol, 0, 0, "Buy Order")) { - Print("Buy order placed."); - lastTradeTime = currentTime; // Update last trade time - } else { - Print("Error placing buy order: ", GetLastError()); - } - } - - previousRSIDef = currentRSI; -} - -void OnDeinit(const int reason) { - // Release RSI and EMA handles on deinitialization - if (rsiHandle != INVALID_HANDLE) { - IndicatorRelease(rsiHandle); - Print("RSI handle released."); - } - if (emaHandle != INVALID_HANDLE) { - IndicatorRelease(emaHandle); - Print("EMA handle released."); - } -} - - -void Close_Position_MN(ulong magicNumber) -{ - // Use helper function to close position by magic number - ClosePositionByMagic(trade, _Symbol, (int)magicNumber); -} - -void ApplyTrailingStop() -{ - Print("Scanning for trailing stop"); - - // Check if position exists with our magic number - if(!PositionSelectByMagic(_Symbol, MagicNumber)) - { - return; // No position with our magic number - } - - ulong PositionTicket = PositionGetInteger(POSITION_TICKET); - long trade_type = PositionGetInteger(POSITION_TYPE); - string symbol = _Symbol; - - double POINT = SymbolInfoDouble(symbol, SYMBOL_POINT); - int DIGIT = (int) SymbolInfoInteger(symbol, SYMBOL_DIGITS); - - if(trade_type == POSITION_TYPE_BUY) - { - double Bid = NormalizeDouble(SymbolInfoDouble(symbol, SYMBOL_BID), DIGIT); - - if(Bid - PositionGetDouble(POSITION_PRICE_OPEN) > NormalizeDouble(POINT * TrailingStop, DIGIT)) - { - if(PositionGetDouble(POSITION_SL) < NormalizeDouble(Bid - POINT * TrailingStop, DIGIT)) - { - ModifyPositionByMagic(trade, symbol, MagicNumber, - NormalizeDouble(Bid - POINT * TrailingStop, DIGIT), - PositionGetDouble(POSITION_TP)); - } - } - } - else if(trade_type == POSITION_TYPE_SELL) - { - double Ask = NormalizeDouble(SymbolInfoDouble(symbol, SYMBOL_ASK), DIGIT); - - if((PositionGetDouble(POSITION_PRICE_OPEN) - Ask) > NormalizeDouble(POINT * TrailingStop, DIGIT)) - { - if((PositionGetDouble(POSITION_SL) > NormalizeDouble(Ask + POINT * TrailingStop, DIGIT)) || - (PositionGetDouble(POSITION_SL) == 0)) - { - ModifyPositionByMagic(trade, symbol, MagicNumber, - NormalizeDouble(Ask + POINT * TrailingStop, DIGIT), - PositionGetDouble(POSITION_TP)); - } - } - } -} - -int TimeHour(datetime when=0){ if(when == 0) when = TimeCurrent(); - return when / 3600 % 24; -} \ No newline at end of file diff --git a/frontline/cluster-fuck/RSIMidPointHijackXAUUSD/main.mq5 b/frontline/cluster-fuck/RSIMidPointHijackXAUUSD/main.mq5 deleted file mode 100644 index de9ddb3..0000000 --- a/frontline/cluster-fuck/RSIMidPointHijackXAUUSD/main.mq5 +++ /dev/null @@ -1,604 +0,0 @@ -//+------------------------------------------------------------------+ -//| RSIFollowReverseEMACrossOver.mq5 | -//| Copyright 2024, MetaQuotes Ltd. | -//| https://www.mql5.com | -//+------------------------------------------------------------------+ -#property copyright "Copyright 2024, MetaQuotes Ltd." -#property link "https://www.mql5.com" -#property version "1.00" - -#include -#include -#include "../_united/MagicNumberHelpers.mqh" - -// Input Parameters -input group "General Settings" -input ENUM_TIMEFRAMES InpTimeframe = PERIOD_H1; // Trading Timeframe -input double InpLotSize = 0.1; // Lot Size -input int InpMagicNumberRSIFollow = 1001; // Magic Number RSI Follow -input int InpMagicNumberRSIReverse = 1002;// Magic Number RSI Reverse -input int InpMagicNumberEMACross = 1003; // Magic Number EMA Cross - -input group "Strategy Switches" -input bool InpEnableRSIFollow = true; // Enable RSI Follow Strategy -input bool InpEnableRSIReverse = true; // Enable RSI Reverse Strategy -input bool InpEnableEMACross = true; // Enable EMA Cross Strategy -input bool InpEnableStrategyLock = true; // Enable Strategy Lock -input double InpLockProfitThreshold = 6.0; // Lock Profit Threshold (pips) -input bool InpCloseOppositeTrades = true; // Close Opposite Trades When Profiting - -input group "RSI Follow Strategy" -input int InpRSIPeriod = 32; // RSI Period -input int InpRSIOverbought = 78; // RSI Overbought Level -input int InpRSIOversold = 46; // RSI Oversold Level -input int InpRSIExitLevel = 44; // RSI Exit Level -input int InpRSIFollowStartHour = 23; // RSI Follow Start Hour (0-23) -input int InpRSIFollowEndHour = 8; // RSI Follow End Hour (0-23) -input bool InpRSIFollowCloseOutsideHours = false; // Close trades outside trading hours - -input group "RSI Reverse Strategy" -input int InpRSIReversePeriod = 59; // RSI Period -input int InpRSIReverseOverbought = 51; // RSI Overbought Level -input int InpRSIReverseOversold = 49; // RSI Oversold Level -input int InpRSIReverseCrossLevel = 53; // RSI Cross Level -input int InpRSIReverseExitLevel = 48; // RSI Exit Level -input int InpRSIReverseStartHour = 7; // RSI Reverse Start Hour (0-23) -input int InpRSIReverseEndHour = 13; // RSI Reverse End Hour (0-23) -input bool InpRSIReverseCloseOutsideHours = false; // Close trades outside trading hours -input int InpRSIReverseCooldownBars = 15; // RSI Reverse Cooldown (bars) -input bool InpRSIReverseCooldownOnLoss = true; // Apply cooldown only on loss - -input group "EMA Cross Strategy" -input int InpEMAPeriod = 120; // EMA Period -input int InpEMACrossStartHour = 8; // EMA Cross Start Hour (0-23) -input int InpEMACrossEndHour = 14; // EMA Cross End Hour (0-23) -input bool InpEMACrossCloseOutsideHours = true; // Close trades outside trading hours -input bool InpUseEMADistanceEntry = true; // Use EMA Distance Entry -input double InpEMADistancePips = 160.0; // EMA Distance Threshold (pips) -input int InpEMADistancePeriod = 26; // EMA Distance Period (bars) - -// Global Variables -int rsiHandle; -int rsiReverseHandle; -int emaHandle; -bool rsiOverbought = false; -bool rsiOversold = false; -bool rsiReverseOverbought = false; -bool rsiReverseOversold = false; -CTrade trade; -CPositionInfo positionInfo; -bool emaCrossBuySignal = false; -bool emaCrossSellSignal = false; -int emaCrossSignalBar = 0; -datetime lastBarTime = 0; -datetime rsiReverseLastCloseTime = 0; -bool rsiReverseInCooldown = false; -double lastBarRSI = 0; // Store last bar's RSI value -double lastBarRSIReverse = 0; // Store last bar's RSI Reverse value -double lastBarEMA = 0; // Store last bar's EMA value -double lastBarClose = 0; // Store last bar's close value -double lastBarEMAPrev = 0; // Store previous bar's EMA value -double lastBarClosePrev = 0; // Store previous bar's close value - -//+------------------------------------------------------------------+ -//| Expert initialization function | -//+------------------------------------------------------------------+ -int OnInit() -{ - // Initialize indicators - rsiHandle = iRSI(_Symbol, InpTimeframe, InpRSIPeriod, PRICE_CLOSE); - rsiReverseHandle = iRSI(_Symbol, InpTimeframe, InpRSIReversePeriod, PRICE_CLOSE); - emaHandle = iMA(_Symbol, InpTimeframe, InpEMAPeriod, 0, MODE_EMA, PRICE_CLOSE); - - if(rsiHandle == INVALID_HANDLE || rsiReverseHandle == INVALID_HANDLE || emaHandle == INVALID_HANDLE) - { - Print("Error creating indicators"); - return INIT_FAILED; - } - - // Initialize trade settings - trade.SetExpertMagicNumber(InpMagicNumberRSIFollow); - trade.SetMarginMode(); - trade.SetTypeFillingBySymbol(_Symbol); - trade.SetDeviationInPoints(10); - - // Initialize last bar time - datetime time[]; - if(CopyTime(_Symbol, InpTimeframe, 0, 1, time) > 0) - { - lastBarTime = time[0]; - } - - return(INIT_SUCCEEDED); -} - -//+------------------------------------------------------------------+ -//| Check if new bar has formed | -//+------------------------------------------------------------------+ -bool IsNewBar() -{ - datetime time[]; - if(CopyTime(_Symbol, InpTimeframe, 0, 1, time) > 0) - { - if(time[0] != lastBarTime) - { - lastBarTime = time[0]; - return true; - } - } - return false; -} - -//+------------------------------------------------------------------+ -//| Expert deinitialization function | -//+------------------------------------------------------------------+ -void OnDeinit(const int reason) -{ - // Release indicator handles - IndicatorRelease(rsiHandle); - IndicatorRelease(rsiReverseHandle); - IndicatorRelease(emaHandle); -} - -//+------------------------------------------------------------------+ -//| Check if current time is within trading hours | -//+------------------------------------------------------------------+ -bool IsWithinTradingHours(int startHour, int endHour) -{ - MqlDateTime currentTime; - TimeToStruct(TimeCurrent(), currentTime); - - if(startHour <= endHour) - { - return (currentTime.hour >= startHour && currentTime.hour < endHour); - } - else - { - return (currentTime.hour >= startHour || currentTime.hour < endHour); - } -} - -//+------------------------------------------------------------------+ -//| Check if position exists for given magic number AND symbol | -//+------------------------------------------------------------------+ -bool HasPosition(int magic) -{ - // Use helper function that verifies BOTH symbol AND magic number for THIS EA - return PositionExistsByMagic(_Symbol, magic); -} - -//+------------------------------------------------------------------+ -//| Check if any strategy has profitable position | -//+------------------------------------------------------------------+ -bool HasProfitablePosition(int excludeMagic) -{ - bool hasProfitable = false; - for(int i = PositionsTotal() - 1; i >= 0; i--) - { - if(positionInfo.SelectByIndex(i)) - { - if(positionInfo.Magic() != excludeMagic) - { - double profit = positionInfo.Profit(); - if(profit > InpLockProfitThreshold * _Point) - { - hasProfitable = true; - // If enabled, close opposite trades - if(InpCloseOppositeTrades) - { - // Check if this is an opposite trade to the excluded magic number - if((excludeMagic == InpMagicNumberRSIFollow && positionInfo.Magic() == InpMagicNumberRSIReverse) || - (excludeMagic == InpMagicNumberRSIReverse && positionInfo.Magic() == InpMagicNumberRSIFollow) || - (excludeMagic == InpMagicNumberEMACross && (positionInfo.Magic() == InpMagicNumberRSIReverse || positionInfo.Magic() == InpMagicNumberRSIFollow)) || - ((excludeMagic == InpMagicNumberRSIFollow || excludeMagic == InpMagicNumberRSIReverse) && positionInfo.Magic() == InpMagicNumberEMACross)) - { - ClosePosition(positionInfo.Magic()); - } - } - } - } - } - } - return hasProfitable; -} - -//+------------------------------------------------------------------+ -//| Check for RSI Follow Strategy signals | -//+------------------------------------------------------------------+ -void CheckRSIFollowStrategy() -{ - // Check if within trading hours - if(!IsWithinTradingHours(InpRSIFollowStartHour, InpRSIFollowEndHour)) - { - if(InpRSIFollowCloseOutsideHours) - { - if(HasPosition(InpMagicNumberRSIFollow)) - { - ClosePosition(InpMagicNumberRSIFollow); - } - } - return; - } - - // Check strategy lock - if(InpEnableStrategyLock && HasProfitablePosition(InpMagicNumberRSIFollow)) - return; - - // Use lastBarRSI instead of copying buffer - if(lastBarRSI > InpRSIOverbought) - rsiOverbought = true; - else if(lastBarRSI < InpRSIOversold) - rsiOversold = true; - - // Check for entry signals - if(rsiOverbought && lastBarRSI < InpRSIExitLevel) - { - // Sell signal - if(!HasPosition(InpMagicNumberRSIFollow)) - { - trade.SetExpertMagicNumber(InpMagicNumberRSIFollow); - trade.Sell(InpLotSize, _Symbol, 0, 0, 0, "RSI Follow"); - } - rsiOverbought = false; - } - else if(rsiOversold && lastBarRSI > InpRSIExitLevel) - { - // Buy signal - if(!HasPosition(InpMagicNumberRSIFollow)) - { - trade.SetExpertMagicNumber(InpMagicNumberRSIFollow); - trade.Buy(InpLotSize, _Symbol, 0, 0, 0, "RSI Follow"); - } - rsiOversold = false; - } -} - -//+------------------------------------------------------------------+ -//| Check if RSI Reverse is in cooldown | -//+------------------------------------------------------------------+ -bool IsRSIReverseInCooldown() -{ - if(InpRSIReverseCooldownBars <= 0) - return false; - - if(!rsiReverseInCooldown) - return false; - - datetime time[]; - if(CopyTime(_Symbol, InpTimeframe, 0, 1, time) > 0) - { - datetime currentBarTime = time[0]; - datetime cooldownEndTime = rsiReverseLastCloseTime + InpRSIReverseCooldownBars * PeriodSeconds(InpTimeframe); - - if(currentBarTime >= cooldownEndTime) - { - rsiReverseInCooldown = false; - return false; - } - } - - return true; -} - -//+------------------------------------------------------------------+ -//| Check for RSI Reverse Strategy signals | -//+------------------------------------------------------------------+ -void CheckRSIReverseStrategy() -{ - // Check if within trading hours - if(!IsWithinTradingHours(InpRSIReverseStartHour, InpRSIReverseEndHour)) - { - if(InpRSIReverseCloseOutsideHours) - { - if(HasPosition(InpMagicNumberRSIReverse)) - { - ClosePosition(InpMagicNumberRSIReverse); - } - } - return; - } - - // Check strategy lock - if(InpEnableStrategyLock && HasProfitablePosition(InpMagicNumberRSIReverse)) - return; - - // Check cooldown - if(IsRSIReverseInCooldown()) - return; - - // Use lastBarRSIReverse instead of copying buffer - if(lastBarRSIReverse > InpRSIReverseOverbought) - rsiReverseOverbought = true; - else if(lastBarRSIReverse < InpRSIReverseOversold) - rsiReverseOversold = true; - - // Check for entry signals - if(rsiReverseOverbought && lastBarRSIReverse < InpRSIReverseCrossLevel) - { - // Sell signal - if(!HasPosition(InpMagicNumberRSIReverse)) - { - trade.SetExpertMagicNumber(InpMagicNumberRSIReverse); - trade.Sell(InpLotSize, _Symbol, 0, 0, 0, "RSI Reverse"); - } - rsiReverseOverbought = false; - } - else if(rsiReverseOversold && lastBarRSIReverse > InpRSIReverseCrossLevel) - { - // Buy signal - if(!HasPosition(InpMagicNumberRSIReverse)) - { - trade.SetExpertMagicNumber(InpMagicNumberRSIReverse); - trade.Buy(InpLotSize, _Symbol, 0, 0, 0, "RSI Reverse"); - } - rsiReverseOversold = false; - } -} - -//+------------------------------------------------------------------+ -//| Check for EMA Cross Strategy signals | -//+------------------------------------------------------------------+ -void CheckEMACrossStrategy() -{ - // Check if within trading hours - if(!IsWithinTradingHours(InpEMACrossStartHour, InpEMACrossEndHour)) - { - if(InpEMACrossCloseOutsideHours) - { - if(HasPosition(InpMagicNumberEMACross)) - { - ClosePosition(InpMagicNumberEMACross); - } - } - return; - } - - // Check strategy lock - if(InpEnableStrategyLock && HasProfitablePosition(InpMagicNumberEMACross)) - return; - - // Check for cross signals using stored values - if(lastBarEMAPrev < lastBarClosePrev && lastBarEMA > lastBarClose) - { - // Buy cross signal - emaCrossBuySignal = true; - emaCrossSellSignal = false; - emaCrossSignalBar = 0; - } - else if(lastBarEMAPrev > lastBarClosePrev && lastBarEMA < lastBarClose) - { - // Sell cross signal - emaCrossSellSignal = true; - emaCrossBuySignal = false; - emaCrossSignalBar = 0; - } - - // Check for distance entry conditions - if(InpUseEMADistanceEntry) - { - if(emaCrossBuySignal) - { - // Check if price has moved above EMA by the required distance for the required period - bool distanceConditionMet = true; - double emaHistory[], closeHistory[]; - ArraySetAsSeries(emaHistory, true); - ArraySetAsSeries(closeHistory, true); - - if(CopyBuffer(emaHandle, 0, 0, InpEMADistancePeriod, emaHistory) > 0 && - CopyClose(_Symbol, InpTimeframe, 0, InpEMADistancePeriod, closeHistory) > 0) - { - for(int i = 0; i < InpEMADistancePeriod; i++) - { - double distance = (closeHistory[i] - emaHistory[i]) / _Point; - if(distance < InpEMADistancePips) - { - distanceConditionMet = false; - break; - } - } - - if(distanceConditionMet && !HasPosition(InpMagicNumberEMACross)) - { - trade.SetExpertMagicNumber(InpMagicNumberEMACross); - trade.Buy(InpLotSize, _Symbol, 0, 0, 0, "EMA Cross Distance"); - emaCrossBuySignal = false; - } - } - } - else if(emaCrossSellSignal) - { - // Check if price has moved below EMA by the required distance for the required period - bool distanceConditionMet = true; - double emaHistory[], closeHistory[]; - ArraySetAsSeries(emaHistory, true); - ArraySetAsSeries(closeHistory, true); - - if(CopyBuffer(emaHandle, 0, 0, InpEMADistancePeriod, emaHistory) > 0 && - CopyClose(_Symbol, InpTimeframe, 0, InpEMADistancePeriod, closeHistory) > 0) - { - for(int i = 0; i < InpEMADistancePeriod; i++) - { - double distance = (emaHistory[i] - closeHistory[i]) / _Point; - if(distance < InpEMADistancePips) - { - distanceConditionMet = false; - break; - } - } - - if(distanceConditionMet && !HasPosition(InpMagicNumberEMACross)) - { - trade.SetExpertMagicNumber(InpMagicNumberEMACross); - trade.Sell(InpLotSize, _Symbol, 0, 0, 0, "EMA Cross Distance"); - emaCrossSellSignal = false; - } - } - } - } - else - { - // Original cross entry logic using stored values - if(lastBarEMAPrev < lastBarClosePrev && lastBarEMA > lastBarClose) - { - // Buy signal - if(!HasPosition(InpMagicNumberEMACross)) - { - trade.SetExpertMagicNumber(InpMagicNumberEMACross); - trade.Buy(InpLotSize, _Symbol, 0, 0, 0, "EMA Cross"); - } - } - else if(lastBarEMAPrev > lastBarClosePrev && lastBarEMA < lastBarClose) - { - // Sell signal - if(!HasPosition(InpMagicNumberEMACross)) - { - trade.SetExpertMagicNumber(InpMagicNumberEMACross); - trade.Sell(InpLotSize, _Symbol, 0, 0, 0, "EMA Cross"); - } - } - } - - // Increment signal bar counter - if(emaCrossBuySignal || emaCrossSellSignal) - { - emaCrossSignalBar++; - // Reset signals if they're too old (optional, can be removed if not needed) - if(emaCrossSignalBar > InpEMADistancePeriod * 2) - { - emaCrossBuySignal = false; - emaCrossSellSignal = false; - } - } -} - -//+------------------------------------------------------------------+ -//| Expert tick function | -//+------------------------------------------------------------------+ -void OnTick() -{ - // Only process on new bar - if(!IsNewBar()) - return; - - // Get indicator values for the new bar - double rsi[], rsiReverse[], ema[], close[]; - ArraySetAsSeries(rsi, true); - ArraySetAsSeries(rsiReverse, true); - ArraySetAsSeries(ema, true); - ArraySetAsSeries(close, true); - - // Store previous values - lastBarEMAPrev = lastBarEMA; - lastBarClosePrev = lastBarClose; - - // Get new values - if(CopyBuffer(rsiHandle, 0, 0, 1, rsi) > 0) - lastBarRSI = rsi[0]; - - if(CopyBuffer(rsiReverseHandle, 0, 0, 1, rsiReverse) > 0) - lastBarRSIReverse = rsiReverse[0]; - - if(CopyBuffer(emaHandle, 0, 0, 1, ema) > 0) - lastBarEMA = ema[0]; - - if(CopyClose(_Symbol, InpTimeframe, 0, 1, close) > 0) - lastBarClose = close[0]; - - // Check for new signals - if(InpEnableRSIFollow) - CheckRSIFollowStrategy(); - if(InpEnableRSIReverse) - CheckRSIReverseStrategy(); - if(InpEnableEMACross) - CheckEMACrossStrategy(); - - // Check for exit conditions - CheckExitConditions(); -} - -//+------------------------------------------------------------------+ -//| Check exit conditions for all strategies | -//+------------------------------------------------------------------+ -void CheckExitConditions() -{ - if(InpEnableRSIFollow) - { - // Check RSI Follow exit conditions - if(HasPosition(InpMagicNumberRSIFollow)) - { - if((positionInfo.PositionType() == POSITION_TYPE_BUY && lastBarRSI < InpRSIExitLevel) || - (positionInfo.PositionType() == POSITION_TYPE_SELL && lastBarRSI > InpRSIExitLevel)) - { - ClosePosition(InpMagicNumberRSIFollow); - } - } - } - - if(InpEnableRSIReverse) - { - // Check RSI Reverse exit conditions - if(HasPosition(InpMagicNumberRSIReverse)) - { - if((positionInfo.PositionType() == POSITION_TYPE_BUY && lastBarRSIReverse < InpRSIReverseExitLevel) || - (positionInfo.PositionType() == POSITION_TYPE_SELL && lastBarRSIReverse > InpRSIReverseExitLevel)) - { - ClosePosition(InpMagicNumberRSIReverse); - } - } - } - - if(InpEnableEMACross) - { - // Check EMA Cross exit conditions using stored values - if(HasPosition(InpMagicNumberEMACross)) - { - if((positionInfo.PositionType() == POSITION_TYPE_BUY && lastBarEMA > lastBarClose) || - (positionInfo.PositionType() == POSITION_TYPE_SELL && lastBarEMA < lastBarClose)) - { - ClosePosition(InpMagicNumberEMACross); - } - } - } -} - -//+------------------------------------------------------------------+ -//| Close position by magic number | -//+------------------------------------------------------------------+ -void ClosePosition(int magic) -{ - // Close position using helper that verifies symbol AND magic number for THIS EA - // First check if position exists for this EA on this symbol - if(!PositionExistsByMagic(_Symbol, magic)) - { - return; // No position for this EA on this symbol - } - - // Get the position ticket for this EA on this symbol - ulong ticket = GetPositionTicketByMagic(_Symbol, magic); - if(ticket == 0) - { - return; // No valid ticket found - } - - // Check if this is RSI Reverse position and update cooldown - if(magic == InpMagicNumberRSIReverse) - { - if(PositionSelectByTicketSymbolAndMagic(ticket, _Symbol, magic)) - { - datetime time[]; - if(CopyTime(_Symbol, InpTimeframe, 0, 1, time) > 0) - { - rsiReverseLastCloseTime = time[0]; - // Only enter cooldown if it's a loss or if cooldown on loss is disabled - double profit = PositionGetDouble(POSITION_PROFIT); - if(!InpRSIReverseCooldownOnLoss || profit < 0) - { - rsiReverseInCooldown = true; - } - } - } - } - - // Close the position using helper function - ClosePositionByMagic(trade, _Symbol, magic); -} diff --git a/frontline/cluster-fuck/RSIMidPointHijackXAUUSD/report.html b/frontline/cluster-fuck/RSIMidPointHijackXAUUSD/report.html deleted file mode 100644 index a731713c85028a333a92aff102220079456ff170..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5214578 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�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 vAM9L`7oZ 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