605faf5310
Add cluster audit pipeline, united EA updates, brochure generators, and publication hygiene (gitignore, MT5 path desensitization, pre-upload scan). Remove tracked reports, models, and binary artifacts from the repo. Co-authored-by: Cursor <cursoragent@cursor.com>
118 lines
8.6 KiB
Python
118 lines
8.6 KiB
Python
"""United EA (main.mq5) strategy registry — defaults from 123.set + audit ranges."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import MetaTrader5 as mt5
|
|
|
|
TF = {
|
|
"M10": mt5.TIMEFRAME_M10,
|
|
"M15": mt5.TIMEFRAME_M15,
|
|
"M20": mt5.TIMEFRAME_M20,
|
|
"M30": mt5.TIMEFRAME_M30,
|
|
"H1": mt5.TIMEFRAME_H1,
|
|
"H4": mt5.TIMEFRAME_H4,
|
|
}
|
|
|
|
# Strategies enabled in 123.set, ordered for sequential audit.
|
|
UNITED_STRATEGIES: list[dict] = [
|
|
{"id": "united_darvas", "engine": "darvas", "symbol": "XAUUSD", "tf": "M15", "lot": 0.05,
|
|
"enable_key": "EnableDarvasBox", "lot_key": "LOT_DB_DarvasBox",
|
|
"defaults": {"box_period": 24, "box_deviation": 90000, "ma_period": 30,
|
|
"trend_threshold": 1.2, "volume_threshold": 0,
|
|
"stop_loss_pts": 300, "take_profit_pts": 950},
|
|
"opt": {"box_period": (12, 48, 4), "box_deviation": (40000, 150000, 5000),
|
|
"trend_threshold": (0.3, 5.0, 0.3), "stop_loss_pts": (250, 900, 50),
|
|
"take_profit_pts": (350, 1200, 50), "ma_period": (30, 120, 15)}},
|
|
{"id": "united_rsi_cross", "engine": "rsi_crossover", "symbol": "XAUUSD", "tf": "M15", "lot": 0.06,
|
|
"enable_key": "EnableRSICrossOverReversal", "lot_key": "LOT_RC_RSICrossOver",
|
|
"defaults": {"rsi_period": 19, "overbought_level": 85, "oversold_level": 25, "ema_period": 140,
|
|
"ema_slope_threshold": 105, "ema_distance_threshold": 350, "exit_buy_rsi": 86,
|
|
"exit_sell_rsi": 10, "trailing_stop_pts": 295, "cooldown_seconds": 120,
|
|
"use_trend_strength_filter": True, "entry_rsi_buy_spread": 0, "entry_rsi_sell_spread": 0,
|
|
"tuesday": True, "wednesday": True, "thursday": True,
|
|
"trading_hour_one_begin": 0, "trading_hour_one_end": 22,
|
|
"trading_hour_two_begin": 6, "trading_hour_two_end": 19},
|
|
"opt": {"overbought_level": (70, 92, 3), "oversold_level": (15, 40, 3),
|
|
"ema_distance_threshold": (200, 600, 50), "cooldown_seconds": (60, 300, 30)}},
|
|
{"id": "united_rsi_scalp_appl", "engine": "rsi_scalp", "symbol": "AAPL", "tf": "M15", "lot": 15.0,
|
|
"enable_key": "EnableRSIScalpingAPPL", "lot_key": "LOT_RS_APPL",
|
|
"defaults": {"rsi_period": 8, "rsi_overbought": 64, "rsi_oversold": 30,
|
|
"rsi_target_buy": 67, "rsi_target_sell": 2, "bars_to_wait": 5,
|
|
"use_trailing": True, "trail_distance_pts": 70, "trail_activation_pts": 39, "tf": "M15",
|
|
"skip_short_hour_after": 17, "use_reversal_escape": False,
|
|
"use_rsi_against_exit": False, "max_adverse_atr": 2.5, "min_ob_depth": 0},
|
|
"opt": {"rsi_period": (6, 14, 1), "rsi_overbought": (60, 75, 2), "rsi_oversold": (22, 35, 2),
|
|
"rsi_target_buy": (60, 80, 3), "bars_to_wait": (5, 12, 1),
|
|
"trail_distance_pts": (50, 120, 10), "skip_short_hour_after": (15, 20, 1)}},
|
|
{"id": "united_rsi_scalp_adbe", "engine": "rsi_scalp", "symbol": "ADBE", "tf": "H1", "lot": 40.0,
|
|
"enable_key": "EnableRSIScalpingADBE", "lot_key": "LOT_RS_ADBE",
|
|
"defaults": {"rsi_period": 15, "rsi_overbought": 16, "rsi_oversold": 42,
|
|
"rsi_target_buy": 67, "rsi_target_sell": 62, "bars_to_wait": 8,
|
|
"use_trailing": True, "trail_distance_pts": 425, "trail_activation_pts": 18.5, "tf": "H1"},
|
|
"opt": {"rsi_period": (6, 21, 1), "rsi_overbought": (50, 90, 3), "rsi_oversold": (10, 70, 3),
|
|
"bars_to_wait": (1, 12, 1), "trail_distance_pts": (50, 500, 25)}},
|
|
{"id": "united_rsi_scalp_btc", "engine": "rsi_scalp", "symbol": "BTCUSD", "tf": "H1", "lot": 0.03,
|
|
"enable_key": "EnableRSIScalpingBTCUSD", "lot_key": "LOT_RS_BTCUSD",
|
|
"defaults": {"rsi_period": 14, "rsi_overbought": 90, "rsi_oversold": 73,
|
|
"rsi_target_buy": 88, "rsi_target_sell": 48, "bars_to_wait": 6,
|
|
"use_trailing": True, "trail_distance_pts": 120, "trail_activation_pts": 0, "tf": "H1"},
|
|
"opt": {"rsi_period": (6, 21, 1), "rsi_overbought": (50, 95, 3), "rsi_oversold": (20, 80, 3),
|
|
"bars_to_wait": (1, 8, 1), "trail_distance_pts": (40, 300, 20)}},
|
|
{"id": "united_rsi_scalp_nvda", "engine": "rsi_scalp", "symbol": "NVDA", "tf": "M15", "lot": 50.0,
|
|
"enable_key": "EnableRSIScalpingNVDA", "lot_key": "LOT_RS_NVDA",
|
|
"defaults": {"rsi_period": 8, "rsi_overbought": 36, "rsi_oversold": 38,
|
|
"rsi_target_buy": 90, "rsi_target_sell": 70, "bars_to_wait": 5,
|
|
"use_trailing": True, "trail_distance_pts": 375, "trail_activation_pts": 75, "tf": "M15"},
|
|
"opt": {"rsi_period": (6, 21, 1), "bars_to_wait": (1, 8, 1), "trail_distance_pts": (50, 500, 25)}},
|
|
{"id": "united_rsi_scalp_tsla", "engine": "rsi_scalp", "symbol": "TSLA", "tf": "H1", "lot": 5.0,
|
|
"enable_key": "EnableRSIScalpingTSLA", "lot_key": "LOT_RS_TSLA",
|
|
"defaults": {"rsi_period": 14, "rsi_overbought": 54, "rsi_oversold": 73,
|
|
"rsi_target_buy": 87, "rsi_target_sell": 33, "bars_to_wait": 1,
|
|
"use_trailing": True, "trail_distance_pts": 900, "trail_activation_pts": 950, "tf": "H1"},
|
|
"opt": {"rsi_period": (6, 21, 1), "bars_to_wait": (1, 6, 1), "trail_distance_pts": (100, 1000, 50)}},
|
|
{"id": "united_rsi_scalp_xau", "engine": "rsi_scalp", "symbol": "XAUUSD", "tf": "H1", "lot": 0.02,
|
|
"enable_key": "EnableRSIScalpingXAUUSD", "lot_key": "LOT_RS_XAUUSD",
|
|
"defaults": {"rsi_period": 14, "rsi_overbought": 71, "rsi_oversold": 57,
|
|
"rsi_target_buy": 80, "rsi_target_sell": 57, "bars_to_wait": 1,
|
|
"use_trailing": True, "trail_distance_pts": 71, "trail_activation_pts": 41, "tf": "H1"},
|
|
"opt": {"rsi_period": (6, 21, 1), "rsi_overbought": (55, 85, 3), "rsi_oversold": (40, 75, 3),
|
|
"bars_to_wait": (1, 4, 1), "trail_distance_pts": (20, 150, 10)}},
|
|
{"id": "united_rsi_asian_eur", "engine": "rsi_asian", "symbol": "EURUSD", "tf": "M15", "lot": 0.04,
|
|
"enable_key": "EnableRSIReversalAsianEURUSD", "lot_key": "LOT_RRA_EURUSD",
|
|
"defaults": {"rsi_period": 28, "overbought_level": 60, "oversold_level": 8,
|
|
"asian_session_start": 0, "asian_session_end": 8, "use_rsi_exit": True, "rsi_exit_level": 55},
|
|
"opt": {"overbought_level": (50, 80, 5), "oversold_level": (5, 40, 5)}},
|
|
{"id": "united_rsi_asian_aud", "engine": "rsi_asian", "symbol": "AUDUSD", "tf": "M15", "lot": 0.03,
|
|
"enable_key": "EnableRSIReversalAsianAUDUSD", "lot_key": "LOT_RRA_AUDUSD",
|
|
"defaults": {"rsi_period": 28, "overbought_level": 68, "oversold_level": 30,
|
|
"asian_session_start": 0, "asian_session_end": 8, "use_rsi_exit": True, "rsi_exit_level": 48,
|
|
"close_outside_session": True},
|
|
"opt": {"overbought_level": (55, 80, 5), "oversold_level": (15, 45, 5)}},
|
|
{"id": "united_st_xau", "engine": "simple_trendline", "symbol": "XAUUSD", "tf": "H1", "lot": 0.03,
|
|
"enable_key": "EnableSimpleTrendlineXAUUSD", "lot_key": "LOT_ST_XAUUSD",
|
|
"defaults": {"signal_tf": "H1", "higher_tf": "M10", "ma_period": 65, "ma_method": "ema",
|
|
"htf_bars_to_scan": 500, "touch_tolerance_pts": 220, "break_buffer_pts": 110},
|
|
"opt": {"ma_period": (40, 120, 10), "touch_tolerance_pts": (100, 350, 25),
|
|
"break_buffer_pts": (50, 200, 15)}},
|
|
{"id": "united_st_ger40", "engine": "simple_trendline", "symbol": "GER40", "tf": "M15", "lot": 0.04,
|
|
"enable_key": "EnableSimpleTrendlineGER40", "lot_key": "LOT_ST_GER40",
|
|
"defaults": {"signal_tf": "M15", "higher_tf": "M15", "ma_period": 65, "ma_method": "lwma",
|
|
"htf_bars_to_scan": 1200, "touch_tolerance_pts": 100, "break_buffer_pts": 80},
|
|
"opt": {"ma_period": (40, 120, 10), "touch_tolerance_pts": (50, 200, 15)}},
|
|
{"id": "united_rsi_secret", "engine": "rsi_secret", "symbol": "XAUUSD", "tf": "M30", "lot": 0.07,
|
|
"enable_key": "EnableRSISecretSauce", "lot_key": "LOT_RSS_SecretSauce",
|
|
"defaults": {"rsi_period": 16, "rsi_overbought": 72.5, "rsi_oversold": 32.5,
|
|
"stop_loss_atr": 2.75, "take_profit_atr": 5.0, "min_bars_between_trades": 7},
|
|
"opt": {"rsi_overbought": (60, 80, 2), "rsi_oversold": (25, 45, 2), "stop_loss_atr": (1.5, 4, 0.5)}},
|
|
{"id": "united_usdjpy", "engine": "usdjpy_buster", "symbol": "USDJPY", "tf": "M20", "lot": 0.09,
|
|
"enable_key": "EnableUSDJPYBuster", "lot_key": "LOT_UB_USDJPY",
|
|
"defaults": {"range_start_hour": 3, "range_end_hour": 6, "close_hour": 18,
|
|
"min_range_pts": 15, "order_buffer_pts": 4.75, "first_trade_only": False,
|
|
"allow_long": True, "allow_short": True, "use_take_profit": False},
|
|
"opt": {"min_range_pts": (8, 40, 4), "order_buffer_pts": (2, 12, 1)}},
|
|
]
|
|
|
|
PERIODS = {
|
|
"2021-2026": ("2021-01-01", "2026-06-01"),
|
|
}
|