//+------------------------------------------------------------------+ //| Motivated | //| Copyright 2025, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #include "_includeEa.mqh" #include "Graphics/VisualSystem.mqh" #include "Systems/EventBus.mqh" #include "Graphics/VisualLevels.mqh" #include "ListenersBoot.mqh" EventBus bus; VisualSystem *g_visuals = NULL; ListenersBoot *listenersBoot = NULL; EAConfig config; _includeEa *ea; //--- Inputs input group " " input int TradeCount = 1; // Trades Count input int TradeDuration = 3; // Trade Duration input double Lots = 0.001; // Lot Size input int Stop_Loss = 100000; // Stop Loss (points) input int Take_Profit = 400000; // Take Profit (points) input ulong MagicNumber = 123456; // Magic Number //--- Trade Direction Control //input group "Trade Direction Control" input bool Allow_Buy = true; // Allow Buy Trades input bool Allow_Sell = true; // Allow Sell Trades //--- Risk Management //input group " " input bool UseMM = true; // Use Money Management input double RiskPercent = 5; // Risk Percentage input group " " //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { ObjectsDeleteAll(0); SetAetherNoirTheme(); // dark, muted, alien config.name = _Symbol; config.enabled = true; config.tradeDuration = TradeDuration; config.tradeCount = TradeCount; config.lotSize = Lots; config.stopLoss = Stop_Loss; config.takeProfit = Take_Profit; config.magicNumber = MagicNumber; config.allowBuy = Allow_Buy; config.allowSell = Allow_Sell; config.useMM = UseMM; config.riskPercent = RiskPercent; config.hidden = false; config.timeframe = PERIOD_CURRENT; ea = new _includeEa(config); g_visuals = new VisualSystem(); g_visuals.SetMinZoomForTexts(2); // Hide text if zoomed out too far (0-5 scale) g_visuals.SetAutoUpdate(true); // Automatically recalculate view bounds on render listenersBoot = new ListenersBoot(bus, g_visuals); //--- return(ea.OnInit()); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { delete ea; delete g_visuals; delete listenersBoot; // Force a chart redraw to clear the visual objects immediately ChartRedraw(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { ea.OnTick(); // g_visuals.Render(); } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { // Pass the event to the visual system so it can update its bounds if the user zooms or scrolls g_visuals.OnChartEvent(id, lparam, dparam, sparam); } //+------------------------------------------------------------------+ //| ÆTHER NOIR THEME – dark, muted, powdery alien luxury | //+------------------------------------------------------------------+ void SetAetherNoirTheme(color bg = C'38,36,34') // warm charcoal dust { const long cid = 0; // --- Muted dark palette: no glow, only soft dusty whispers --- color panel = bg; // 38,36,34 color gridSoft = C'52,50,48'; // barely visible grid color fg = C'185,180,175'; // soft limestone text (not white) color fgMuted = C'130,125,120'; // warm stone grey color bull = C'130,148,138'; // muted sage-grey (not green) color bear = C'165,140,145'; // dusty rose-mauve (not pink) color bidLine = C'140,145,155'; // faded steel blue-grey color askLine = C'160,150,160'; // ash lavender color stopLevel = C'120,130,140'; // muted slate color lastLine = C'180,165,150'; // soft blush-beige // --- Chart background / foreground --- ChartSetInteger(cid, CHART_COLOR_BACKGROUND, panel); ChartSetInteger(cid, CHART_COLOR_FOREGROUND, fg); ChartSetInteger(cid, CHART_COLOR_GRID, clrNONE); ChartSetInteger(cid, CHART_COLOR_CHART_LINE, fgMuted); // --- Candles / bars --- ChartSetInteger(cid, CHART_COLOR_CANDLE_BULL, bull); ChartSetInteger(cid, CHART_COLOR_CANDLE_BEAR, bear); ChartSetInteger(cid, CHART_COLOR_CHART_UP, bull); ChartSetInteger(cid, CHART_COLOR_CHART_DOWN, bear); // --- Market lines --- ChartSetInteger(cid, CHART_COLOR_BID, bidLine); ChartSetInteger(cid, CHART_COLOR_ASK, askLine); ChartSetInteger(cid, CHART_COLOR_LAST, lastLine); ChartSetInteger(cid, CHART_COLOR_STOP_LEVEL, stopLevel); // --- Volumes (hidden by default) --- ChartSetInteger(cid, CHART_COLOR_VOLUME, C'90,95,90'); // --- Clean, silent interface --- ChartSetInteger(cid, CHART_SHOW_GRID, false); ChartSetInteger(cid, CHART_SHOW_VOLUMES, CHART_VOLUME_HIDE); ChartSetInteger(cid, CHART_SHOW_ONE_CLICK, false); ChartSetInteger(cid, CHART_SHOW_TICKER, false); ChartSetInteger(cid, CHART_SHOW_PERIOD_SEP, false); ChartSetInteger(cid, CHART_SCALE, 2); // ChartSetInteger(cid, CHART_AUTOSCROLL, true); // ChartSetInteger(cid, CHART_SHIFT, true); ChartSetInteger(cid, CHART_SCALEFIX, false); ChartRedraw(cid); // Alien signature – muted and deliberate AetherNoirTag(cid, C'155,150,148'); // soft grey-taupe } //+------------------------------------------------------------------+ //| Æther Noir HUD Tag – "I whisper in the dark" | //+------------------------------------------------------------------+ void AetherNoirTag(const long cid, color textColor) { const string name = "AETHER_NOIR_TAG"; if(ObjectFind(cid, name) < 0) { ObjectCreate(cid, name, OBJ_LABEL, 0, 0, 0); ObjectSetInteger(cid, name, OBJPROP_CORNER, CORNER_LEFT_LOWER); ObjectSetInteger(cid, name, OBJPROP_XDISTANCE, 16); ObjectSetInteger(cid, name, OBJPROP_YDISTANCE, 16); ObjectSetInteger(cid, name, OBJPROP_SELECTABLE, false); ObjectSetInteger(cid, name, OBJPROP_HIDDEN, true); ObjectSetInteger(cid, name, OBJPROP_ZORDER, 500); } // Refined, light font – no harshness ObjectSetString(cid, name, OBJPROP_FONT, "Segoe UI Semilight"); ObjectSetInteger(cid, name, OBJPROP_FONTSIZE, 11); ObjectSetInteger(cid, name, OBJPROP_COLOR, textColor); // Tagline: dark, muted, structural alien ObjectSetString(cid, name, OBJPROP_TEXT, "◈ ÆTHER NOIR • muted:structure"); ChartRedraw(cid); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+