Warrior_EA/Variables/Inputs.mqh

136 lines
12 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:35:54 +02:00
//+------------------------------------------------------------------+
//| Inputs.mqh |
//| AnimateDread |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "AnimateDread"
#property link "https://www.mql5.com"
#include "..\Enumerations\InputEnums.mqh"
//--- Every "input string ..._Settings"/"AISignals" below this point (Expert_Settings, MM_Settings,
//--- Entry_Settings, Trailing_Settings, NNetworks_Settings, Indicator_Settings, AISignals,
//--- SF_Settings, NF_Settings, DOM_Settings) is a group-divider label, not a real setting - MetaTrader's
//--- Inputs tab renders an `input string` whose value equals its own comment as a section header in
//--- the dialog. Consumed entirely by the terminal's GUI, never read by any MQL5 statement in this
//--- codebase - that's expected, not a dead/unwired input.
2025-05-30 16:35:54 +02:00
//--- Expert General Settings
input string Expert_Settings = "Warrior EA Configuration"; // Warrior EA Configuration
input ulong Expert_MagicNumber = 2024; // Unique identifier for EA's orders
//--- The chart control panel's "Delete && Reset Weights" button does the same thing interactively,
//--- but only works on a live chart with a visible GUI. This input remains the way to force a
//--- reset headlessly - Strategy Tester runs, genetic/complete optimization, and .set-file-driven
//--- automation have no chart to click a button on - so it is NOT made redundant by the panel.
input bool trainingMode = false; // Headless equivalent of panel's Reset Weights button
input bool Expert_EveryTick = false; // Calculate technical analysis on every tick
input bool VerboseMode = false; // Detailed logging in the journal
2025-05-30 16:35:54 +02:00
//--- Money Management Settings
input string MM_Settings = "Money Management Settings"; // Money Management Settings
input MONEY_MANAGEMENT_STRATEGY MM_STRATEGY = FIXED_RISK; // Select MM strategy
input double Money_FixLot_Lots = 0.01; // Fixed trading volume [0.01-10]
input MONEY_RISK_PERCENT_PRESET Money_Risk_Percent = RISK_PCT_1; // Percentage of account balance to risk per trade
2025-05-30 16:35:54 +02:00
//--- Entry Strategy Settings
input string Entry_Settings = "Entry Settings"; // Entry Settings
input TRADING_DIRECTION tradingdirection = BOTH; // Allowed trading direction (Buy, Sell, Both)
2025-05-30 16:35:54 +02:00
input ENTRY_MULTIPLIER Entry_Multiplier = MARKET; // Entry price offset multiplier based on ATR
input BARS_EXPIRATION Signal_Expiration = BARS_X3; // Time to expiration for pending orders (in bars)
input bool UseDatabaseRanking = false; // Use time based win rates for filters weights
input ATR_MULTIPLIER SL_Atr_Multiplier = ATR_x3; // Stop-loss distance beyond swing high/low, as a multiple of ATR
input RISK_REWARD_RATIO Min_Risk_Reward_Ratio = RR_1x2; // Minimum reward:risk ratio required to open a trade
input SL_TP_SOURCE SLTP_Source = SLTP_RULE_BASED; // SL/TP sizing method
input CONFIDENCE_SOURCE Confidence_Source = CONF_AI; // Confidence source for AI SL/TP, AI exit, and AI lot sizing
input bool Use_AI_Exit = false; // Close position early when confidence reverses against it
input THRESHOLDS_PRESET AI_Exit_Threshold = T70; // Min. confidence required to trigger an early AI exit
input bool Use_AI_Lot_Sizing = false; // Scale lot size by confidence (Intelligent MM strategy only)
2025-05-30 16:35:54 +02:00
//--- Trailing Stop Settings
input string Trailing_Settings = "Trailing Settings"; // Trailing Settings
input TRAILING_STRATEGY TrailingStrategy = TRAILING_STRATEGY_NONE; // Default Trailing stop strategy
//--- Neural Networks Settings
input string NNetworks_Settings = "Neural Networks Settings"; // Neural Networks Settings
input AI_CHOICE AIType = MLP; // Artificial Intelligence algorithm
// Restores the SGD/ADAM choice the early EA had before it was hardcoded to ADAM. Now honored by
// all three signal types (PAI/CONV/LSTM) - CNeuronLSTMOCL has an accelerated SGD+momentum kernel
// (LSTM_UpdateWeightsMomentum, AI\Network.mqh) alongside its original Adam-only one. SGD's own
// learning rate/momentum are the SgdLearningRate/SgdMomentum inputs (AI\Network.mqh), not a
// multiple of Adam's rate.
input ENUM_OPTIMIZATION TrainingOptimizer = ADAM; // Weight-update optimizer (PAI/CONV/LSTM)
input TRAINING_YEARS_PRESET StudyPeriods = YEARS_10; // No. of years for AI Training
input PERCENTAGE_PRESETS MinWR = PCT_80; // Min. Win Rate to stop training
input PERCENTAGE_PRESETS MinRecall = PCT_60; // Min. per-class OOS recall to stop training
input PERCENTAGE_PRESETS MinSignalConfidence = PCT_50; // Min. winning-class confidence to fire a live Buy/Sell (3-class head)
input int SignalClusterWindow = 6; // Non-max suppression: min bars between same-direction signals (0 = off, keeps every bar)
input OOS_SPLIT_PRESET OOSSplit = OOS_30; // Out-of-sample holdout, share of study period never trained on
input CLASS_SAMPLE_WEIGHT_PRESET ClassSampleWeight = CSW_15; // Currently unused - class balance is oversampling-only now
input FOCAL_GAMMA_PRESET FocalLossGamma = FG_20; // Focal-loss exponent - down-weights confident examples
input OUTPUT_NEURONS_COUNT OutputNeuronsCount = OUTPUT_CLASSIFICATION; // Type of output algorithm
input FIRST_LAYER_NEURONS InitialNeurons = NEURONS_1000; // No. of neurons in first hidden layer
input HIDDEN_LAYERS_COUNT HiddenLayersCount = LAYERS_4; // No. of hidden layers
input MIN_NEURONS_COUNT MinNeuronsCount = MIN_NEURONS_20; // Min. No. neurons per hidden layer
input NEURONS_REDUCTION_FACTOR NeuronsReduction = RF_70; // Neurons reduction per hidden layer
input SWING_CONFIRMATION_PRESET SwingConfirmationBars = SC_100; // Bars to wait before trusting a ZigZag reversal as a label
input MAX_ERAS_PRESET MaxErasPerRun = ME_1000; // Safety cap: max eras per training call before pausing
input RETRY_COOLDOWN_PRESET TrainRetryCooldownSec = RC_60; // Seconds to wait after era cap before retrying training
2025-05-30 16:35:54 +02:00
//--- Global Indicator Settings
input string Indicator_Settings = "Indicator Settings"; // Input Data Settings (applies globally)
// Was PERIOD_5 - smaller than ADZigZag's own InpDepth=12 (CustomIndicators\ADZigZag.mq5), meaning
// the model's feature window covered less than half of what its own training label (a confirmed
// ZigZag swing pivot) requires to even exist. It was structurally unable to see enough bars to
// recognize the swing structure it was being asked to classify - a plausible root cause of the
// erratic (non-converging, 0-90% swinging) Buy/Sell OOS recall observed across many real training
// runs. PERIOD_20 gives comfortable margin above Depth=12 for a full swing leg to be visible.
input IND_PERIODS_PRESETS ind_Periods = PERIOD_20; // Number of candles to analyse
2025-05-30 16:35:54 +02:00
input ENUM_APPLIED_VOLUME VolumeData = VOLUME_TICK; // Volume Data
input string AISignals = "AI Signals"; // AI Signals
input bool EnableVolume = true; // Analyse Volume Patterns
input bool EnableTime = true; // Analyse Temporal Patterns
input bool EnableATR = true; // Analyse Volatility Patterns
// Direction/magnitude/age of the last CONFIRMED ZigZag swing (see BufferTempDataCompute()'s
// m_useSwingContext block) - reads the same ADZigZag indicator the training labels already come from,
// under the same repainting embargo (SwingConfirmationBars above), so it stays lookahead-safe.
input bool EnableSwingContext = true; // Analyse ZigZag Swing Context Patterns
// Event proximity + impact only (minutes since/until the nearest symbol-relevant calendar event,
// weighted by impact) - not actual-vs-forecast deviation, since a release's outcome isn't knowable
// ahead of time the way its scheduled time is (see System\NewsRelevance.mqh's declaration comment).
input bool EnableNews = false; // Analyse News Event Proximity/Impact Patterns
input NF_LOOKBACK_PRESETS NewsFeatureWindowMinutes = M60; // How far the news feature looks back/ahead
input bool EnableADCumulativeDelta = false; // Analyse AD Cumulative Delta Patterns
input bool EnableADShorteningOfThrust = false; // Analyse AD Shortening of Thrust Patterns
input bool EnableADWyckoffEventStream = false; // Analyse AD Wyckoff Event Stream Patterns
input bool EnableADWyckoffFailedStructure = false; // Analyse AD Wyckoff Failed Structure Patterns
input bool EnableADWyckoffSignificantBarInversion = false; // Analyse AD Wyckoff Significant Bar Inversion Patterns
input bool AutoTuneIndicators = false; // Randomly search AD indicator params for better OOS accuracy
input TUNE_TRIALS_PRESET IndicatorTuneTrials = TT_8; // No. of tuning trials to run when AutoTuneIndicators is enabled
2025-05-30 16:35:54 +02:00
//--- Time Filter Settings
input string SF_Settings = "Time Related Settings"; // Session Filter Settings
input CLOSE_DAY_OF_WEEK targetDayOfWeek = CLOSE_EVERYDAY; // Preferred day for closing positions
input CLOSE_HOUR_OF_DAY targetHour = CH_22; // Preferred hour for closing positions
input CLOSE_MINUTE_OF_HOUR targetMinutes = CM_0; // Preferred minute for closing positions
2025-05-30 16:35:54 +02:00
input bool SF_trade_LondonSession = false; // Trade during London session
input bool SF_trade_TokyoSession = false; // Trade during Tokyo session
input bool SF_trade_NewYorkSession = true; // Trade during New York session
input ENTRY_HOUR_OF_DAY ITF_GoodHourOfDay = -1; // Preferred trading hour
2025-05-30 16:35:54 +02:00
input int ITF_BadHoursOfDay = 0; // Hours to avoid trading
input TIME_FILTER_DAY_OF_WEEK ITF_GoodDayOfWeek = -1; // Preferred trading day
2025-05-30 16:35:54 +02:00
input int ITF_BadDaysOfWeek = 0; // Days to avoid trading
//--- News Filter Settings
input string NF_Settings = "News Filter Settings"; // News Filter Settings
input NF_LOOKBACK_PRESETS NF_LookMinutes = M60; // Lookback period to avoid trading around news
2025-05-30 16:35:54 +02:00
input NF_IMPACT_PRESETS NF_MinImpact = HOLIDAYS; // Minimum news impact to filter out
//--- Market Depth (DOM) Settings
input string DOM_Settings = "Market Depth Settings"; // Market Depth (DOM) Settings
// Availability is verified once in OnInit() (MarketBookAdd + a brief poll for real data) BEFORE any
// neural network is initialized - if this symbol/broker doesn't provide real Depth of Market, this
// input is treated as false for the whole run, the user is alerted via a popup, and the filter below
// is never created. Not a trained NN input feature: MT5 only exposes the CURRENT order book (no
// historical DOM), so it participates as a live-only, rule-based confirmation/veto in the same
// weighted Direction() composite the News/Session/ITF filters already use - see
// Signals\SignalMarketDepth.mqh's class-level comment for the full rationale.
input bool EnableMarketDepth = false; // Order-book imbalance as live filter (needs broker DOM)
input DOM_DEPTH_LEVELS_PRESET DOM_DepthLevels = DOM_LEVELS_5; // No. of book levels per side summed into the imbalance ratio
input DOM_IMBALANCE_SCALE_PRESET DOM_ImbalanceScale = DOM_SCALE_100; // Influence of book imbalance on composite signal
input DOM_MAX_SPREAD_MULTIPLE_PRESET DOM_MaxSpreadMultiple = DOM_SPREADMULT_3x; // Veto entries when spread exceeds this multiple of its average
//--- Risk Guard Settings
input string RiskGuard_Settings = "Risk Guard Settings"; // Risk Guard Settings
//--- Blocks new entries only (never closes existing positions - see Signals\SignalRiskGuard.mqh's
//--- class-level comment) once either limit is breached. RISK_LIMIT_DISABLED (0) on both means this
//--- filter is a permanent no-op, same convention as DOM_SPREADMULT_OFF above.
input RISK_LIMIT_PCT_PRESET MaxDailyLossPct = RISK_LIMIT_DISABLED; // Halt entries for the day once loss exceeds this % of balance
input RISK_LIMIT_PCT_PRESET MaxDrawdownPct = RISK_LIMIT_DISABLED; // Halt entries once drawdown from equity peak exceeds this %