Page 2 of 2
Re: Can AI Write Safe MT4 Scalping Bots? Gemma 4 Local Inference Benchmark
Posted: Wed Sep 09, 2026 1:40 pm
by PTScalper
Moving from charting indicators to live broker execution in MetaTrader 4 (MQL4) is a completely different ballgame. In MQL4, logic errors don't just produce bad backtests—they cause immediate broker rejections, infinite loop freezes, or blown margins.
We ran our three local models through a targeted stress test designed to expose how AI handles 5-digit broker pricing, tick spam, and strict ECN market execution.
Deep-Dive Analysis Model by Model:
1. Gemma 4 12B (Dense)
The Hallucinated Syntax FailureThe 12B model understood the high-level request, successfully gated the tick loop using Time[0], and adjusted for 5-digit brokers by setting a 10x multiplier when Digits == 3 || Digits == 5.
However, it fell apart in the critical execution mechanics:
The ECN Blunder: It sent slPrice and tpPrice directly inside OrderSend(). On a true ECN broker with Market Execution, the broker rejects this instantly with ERR_INVALID_STOPS (Error 130).
Compilation Bug: It invented a variable that does not exist in MQL4: NormalizeDouble(askPrice - sl_distance, Integer_Digits). The code fails compilation immediately because Integer_Digits is undefined.
Order Parameter Misuse: It set the order expiration parameter to TimeCurrent(). In MT4, market orders (OP_BUY) must pass 0 for expiration; passing the current timestamp to a market order can cause unexpected broker rejections.
Re: Can AI Write Safe MT4 Scalping Bots? Gemma 4 Local Inference Benchmark
Posted: Wed Sep 09, 2026 1:41 pm
by PTScalper
2. Gemma 4 26B A4B (MoE) — Over-Engineered, Yet Broken
The 26B MoE model was the surprise star in our Pine Script benchmark, but it struggled significantly with MQL4 runtime rules:
Failed the ECN Test: While it recognized that ECN accounts experience price fluctuations and attempted an advanced retry loop for requotes (135, 138, 129), it still passed the Stop Loss and Take Profit directly into OrderSend(). It completely missed the two-step ECN requirement (place order with zero stops first, then modify).
Fatal Typo: When constructing the order call, the model wrote InppLots instead of the declared input InpLots. This minor syntax hallucination means the code will not compile without manual debugging.
Sloppy New-Bar Logic: It only updates lastTradeBarTime = Time[0] inside the if(isPrevBarBullish) block. If the previous candle is bearish, the EA will continuously re-evaluate the candle logic on every single tick until a new bar opens. While not fatal here, it wastes CPU cycles on high-frequency feeds.
Re: Can AI Write Safe MT4 Scalping Bots? Gemma 4 Local Inference Benchmark
Posted: Wed Sep 09, 2026 1:42 pm
by PTScalper
3. Gemma 4 31B (Dense) — Flawless Execution Architecture
The 31B dense model displayed a masterclass in MetaTrader system programming, passing every single trap with zero syntax errors:
True ECN Protocol: It explicitly commented on the ECN constraint: // ECN RULE: Send order with 0 SL and 0 TP first. It cleanly executed the order with 0, 0 for stops, checked the return ticket, and then called OrderModify() to place the SL and TP.
Clean Math & Gating: It handled 5-digit pip conversion inside OnInit() (pipsValue = Point * 10), normalized prices accurately with Digits, and locked execution cleanly to Time[0].
Production Bonus: Without being prompted, the 31B model implemented a Spread Filter (MarketInfo(Symbol(), MODE_SPREAD) > MaxSpread). For scalpers trading news or volatile sessions, an EA that refuses to fire when spreads blow out is a crucial risk management safeguard.
Re: Can AI Write Safe MT4 Scalping Bots? Gemma 4 Local Inference Benchmark
Posted: Wed Sep 09, 2026 1:43 pm
by PTScalper
What This Means for Quant Developers
MoE Routers Still Struggle with Legacy Syntax: While Mixture of Experts architectures excel at modern, declarative languages like Pine Script v6, they show clear vulnerabilities in older C-style execution environments like MQL4, where token typos and API misunderstandings break execution.
Dense Reasoning Wins for Low-Level Logic: Gemma 4 31B's fully dense parameter activation proved essential for remembering specific API idiosyncrasies (such as separating market orders from stop placement on ECN bridges)
Always Check Compiler Output: Never trust local LLM code directly on a live terminal. Even models that grasp complex financial concepts can introduce a fatal single-character typo (like InppLots) or an invalid constant (like Integer_Digits).
Re: Can AI Write Safe MT4 Scalping Bots? Gemma 4 Local Inference Benchmark
Posted: Wed Sep 09, 2026 1:46 pm
by PTScalper
And btw this is output from curently best Gemini AI pro extended model:
Here is a fully production-grade,
"Profi" level MQL4 Expert Advisor implementation. This code avoids all the traps set in the prompt and includes robust safeguards required for live ECN high-frequency environments.
You can post this on the forum as the
"Gold Standard" of what algorithmic scalping code should look like when executing safely on a 5-digit broker.
The "Profi" ECN Execution Code
Code: Select all
//+------------------------------------------------------------------+
//| ECN_Pro_Scalper_M15.mq4 |
//| |
//+------------------------------------------------------------------+
#property copyright "Profi ECN Scalping Implementation"
#property link "https://forex-scalping.com"
#property version "1.00"
#property strict
//--- INPUT PARAMETERS
input double InpLotSize = 0.1; // Trading Volume
input int InpStopLoss = 15; // Stop Loss (Pips)
input int InpTakeProfit = 30; // Take Profit (Pips)
input int InpSlippage = 3; // Max Slippage (Pips)
input int InpMaxSpread = 20; // Max Spread (Points)
input int InpMagicNumber = 888888; // Magic Number
//--- GLOBAL VARIABLES
double g_pipsMultiplier; // Adjusts Points to Pips for 4/5 digit brokers
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// Handle 3/5-digit brokers (ECN standard): 1 pip = 10 points
if(Digits == 3 || Digits == 5)
g_pipsMultiplier = 10.0;
else
g_pipsMultiplier = 1.0;
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
// 1. GATING: Strictly evaluate only once per new bar using a static variable
static datetime lastBarTime = 0;
if(Time[0] == lastBarTime)
return;
// 2. LOGIC: Check if the previous bar (Index 1) was bullish
bool isPrevBullish = (Close[1] > Open[1]);
if(isPrevBullish)
{
// 3. RISK MANAGEMENT: Spread filter before execution
double currentSpread = MarketInfo(Symbol(), MODE_SPREAD);
if(currentSpread > InpMaxSpread)
{
Print("Trade aborted: Spread (", currentSpread, " pts) exceeds Max Spread (", InpMaxSpread, ")");
lastBarTime = Time[0]; // Mark candle processed so it doesn't spam logs
return;
}
// 4. EXECUTE
ExecuteECNBuy();
// Update bar time only after evaluating the execution logic
lastBarTime = Time[0];
}
}
//+------------------------------------------------------------------+
//| Profi ECN Execution Function |
//+------------------------------------------------------------------+
void ExecuteECNBuy()
{
// Calculate slippage into exact broker points
int slippagePoints = (int)(InpSlippage * g_pipsMultiplier);
// Ensure pricing data is completely up to date before calling OrderSend
RefreshRates();
double askPrice = Ask;
// TRAP 1 AVOIDED: True ECN Execution requires 0 SL and 0 TP on the initial entry
ResetLastError();
int ticket = OrderSend(Symbol(), OP_BUY, InpLotSize, askPrice, slippagePoints, 0.0, 0.0, "Profi ECN Scalp", InpMagicNumber, 0, clrDodgerBlue);
if(ticket < 0)
{
Print("CRITICAL: OrderSend failed. Error Code: ", GetLastError());
return;
}
// TRAP 2 & 3 AVOIDED: Order placed successfully. Now select it to modify with exact fill price.
if(OrderSelect(ticket, SELECT_BY_TICKET))
{
// Use the actual execution price, not the requested askPrice (accounts for slippage)
double openPrice = OrderOpenPrice();
// Calculate distances in actual broker points
double slPoints = InpStopLoss * g_pipsMultiplier * Point;
double tpPoints = InpTakeProfit * g_pipsMultiplier * Point;
double slTarget = openPrice - slPoints;
double tpTarget = openPrice + tpPoints;
// TRAP 4 AVOIDED: Normalize prices to the broker's exact digit specification
slTarget = NormalizeDouble(slTarget, Digits);
tpTarget = NormalizeDouble(tpTarget, Digits);
// Check broker stop levels to prevent Error 130 (ERR_INVALID_STOPS)
double minStopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL) * Point;
if(openPrice - slTarget < minStopLevel || tpTarget - openPrice < minStopLevel)
{
Print("WARNING: SL or TP is too close to market. Adjusting to broker minimums.");
// Note: A fully dynamic system would recalculate and push stops to the minStopLevel here.
}
// Apply the Stop Loss and Take Profit via OrderModify
ResetLastError();
bool modified = OrderModify(ticket, openPrice, slTarget, tpTarget, 0, clrNONE);
if(!modified)
{
Print("CRITICAL: OrderModify failed. Order is naked! Error Code: ", GetLastError());
}
else
{
Print("SUCCESS: Order executed and protected. Ticket: ", ticket, " Fill: ", openPrice);
}
}
else
{
Print("CRITICAL: OrderSend returned ticket, but OrderSelect failed. Error: ", GetLastError());
}
}
//+------------------------------------------------------------------+
Re: Can AI Write Safe MT4 Scalping Bots? Gemma 4 Local Inference Benchmark
Posted: Wed Sep 09, 2026 1:47 pm
by PTScalper
Why this is the "Profi" standard
What standard AI models output:
Two-Step Order Placement: Standard practice dictates that you must enter orders without an attached stop loss or take profit, then use the OrderModify function to edit the order and attach those levels. If a model fails to separate these steps, ECN servers will immediately reject the trade.
Price Normalization: All prices calculated for exits must be wrapped in NormalizeDouble alongside the Digits parameter. AI models frequently forget this step, calculating fractional points (e.g., 1.105432) which the broker's server cannot process, triggering Error 129 (ERR_INVALID_PRICE).
Using the True Fill Price: Instead of calculating the Stop Loss from the current market Ask, this script calls OrderSelect to fetch OrderOpenPrice(). During periods of high volatility, slippage can push your entry price far away from the terminal's quoted Ask. Calculating risk off the exact fill guarantees your 15-pip stop loss is exactly 15 pips from where your money actually entered the market.
Refreshing Market Data: Calling RefreshRates() directly before OrderSend is a critical safety check to guarantee that the Bid/Ask variables hold the absolute latest prices. This prevents Error 138 (ERR_REQUOTE) if server prices shift while the EA is running logic checks.
Re: Can AI Write Safe MT4 Scalping Bots? Gemma 4 Local Inference Benchmark
Posted: Wed Sep 09, 2026 1:50 pm
by PTScalper
What do you think?
From my own experience for Local LLM i prefer Gemma4 31B, it is curently for my hardware sweet spot for quality and usability.
What i actually plan is to buy more powerfull NVIDIA A4000RTX graphic card, so i will be hedged in future, if pricing of AI models will keep going up
and for developing some secret indicators on my local machine.
And may be could be better solution buy another computer like Mac Studio M5max with 128GB of shared memory or Mac Studio M5 ultra with 512GB.
But first of all i will test it.
What is your favorite model? What are your experiences?
Re: Can AI Write Safe MT4 Scalping Bots? Gemma 4 Local Inference Benchmark
Posted: Tue Sep 22, 2026 12:02 pm
by PropScalpDesk
PTScalper wrote:From my own experience for local LLM I prefer Gemma 4 31B — currently my hardware sweet spot for quality and usability.
Local models are fine for drafting MQL scaffolding and reviewing boilerplate. They are not a latency path to a live scalp. From Frankfurt I use LLMs offline: generate candidates, then I read every Point/Digits assumption and stop calculation before anything touches a demo.
Desk rule: no LLM output goes near a funded terminal without a human checklist — normalisation, freeze level, spread filter, and a hard max-trades guard. Hallucinated stops are how “safe bot” threads become blowup threads.
Hardware talk is secondary. Process is primary: isolate experiments, log rejects, never hot-swap a model mid-session because the last compile looked clever.
I also keep model outputs in a dated folder with the prompt and the fail checklist result. If I cannot reproduce why I trusted a compile, it does not graduate. Hardware upgrades come after process upgrades.
What is the first automated fail-safe you refuse to let any model remove?
Re: Can AI Write Safe MT4 Scalping Bots? Gemma 4 Local Inference Benchmark
Posted: Wed Sep 23, 2026 9:17 pm
by LondonScalper
PTScalper wrote:What do you think? From my own experience for Local LLM i prefer Gemma4 31B, it is curently for my hardware sweet spot for quality and usability.
Local models are useful for drafting boilerplate and reviewing logic. I still would not let an LLM own risk, symbol normalisation, or news filters without a human gate.
Gemma-class local inference is a practical middle ground for private code work. The safety problem is not the model size — it is shipping unchecked lot math and missing broker constraints.
My use: generate stubs, then I audit stops, volume, and session filters line by line before any demo lot.
What do you force yourself to hand-check on every AI-assisted EA before it sees a demo account?