138 lines
4.6 KiB
MQL5
138 lines
4.6 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| TLBSimon Gold Scalper 0/0 + Risk Guard - Auto Setup |
| |||
//| Version: 1.0 - Forge MQL5 Starter |
| |||
//| Stack: XAUUSD M15 London Breakout PF1.48 |
| |||
//+------------------------------------------------------------------+
| |||
#property copyright "TLBSimon - NBS Certified, 1800+ days live"
| |||
#property version "1.00"
| |||
#property strict
| |||
| |||
//--- INPUTS - editable from Set screen (ako chce Tradetron klient)
| |||
input group "=== EMA Scalping Core ==="
| |||
input int FastEMA = 21;
| |||
input int SlowEMA = 55;
| |||
input ENUM_TIMEFRAMES Timeframe = PERIOD_M15;
| |||
| |||
input group "=== Risk Guard - TLBSimon ==="
| |||
input double LotSize = 0.01;
| |||
input int StopLossPoints = 300; // 30 pips na Gold
| |||
input int TakeProfitPoints = 600;
| |||
input double DailyMaxDD_Percent = 3.0; // Daily 3% blocker
| |||
input double TotalMaxDD_Percent = 8.0; // Total 8% blocker
| |||
| |||
input group "=== Session Filter ==="
| |||
input int LondonStartHour = 8;
| |||
input int LondonEndHour = 11;
| |||
| |||
double daily_start_balance = 0;
| |||
datetime daily_reset_time = 0;
| |||
| |||
//+------------------------------------------------------------------+
| |||
int OnInit()
| |||
{
| |||
Print("TLBSimon Bot - Auto Setup Start");
| |||
| |||
// Auto setup - kontrola symbolu
| |||
if(StringFind(_Symbol, "GOLD") < 0 && StringFind(_Symbol, "XAU") < 0)
| |||
{
| |||
Print("WARNING: Odporucany symbol XAUUSD, teraz mas: ", _Symbol);
| |||
}
| |||
| |||
// Risk Guard - uloz start balance
| |||
daily_start_balance = AccountInfoDouble(ACCOUNT_BALANCE);
| |||
daily_reset_time = TimeCurrent();
| |||
| |||
Print("Setup OK: FastEMA=", FastEMA, " SlowEMA=", SlowEMA, " Lot=", LotSize);
| |||
Print("Risk Guard: Daily ", DailyMaxDD_Percent, "% Total ", TotalMaxDD_Percent, "%");
| |||
Print("Forge: forge.mql5.com/TLBSimon - Ready to trade");
| |||
| |||
return(INIT_SUCCEEDED);
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
void OnDeinit(const int reason)
| |||
{
| |||
Print("TLBSimon Bot - Vypnuty. Dovod: ", reason);
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
bool RiskGuard_Check()
| |||
{
| |||
double balance = AccountInfoDouble(ACCOUNT_BALANCE);
| |||
double equity = AccountInfoDouble(ACCOUNT_EQUITY);
| |||
double dd = (daily_start_balance - equity) / daily_start_balance * 100.0;
| |||
| |||
// Daily reset o polnoci
| |||
if(TimeCurrent() - daily_reset_time > 86400)
| |||
{
| |||
daily_start_balance = balance;
| |||
daily_reset_time = TimeCurrent();
| |||
Print("Daily reset - novy start balance: ", daily_start_balance);
| |||
}
| |||
| |||
if(dd >= DailyMaxDD_Percent)
| |||
{
| |||
Print("RISK GUARD BLOCK: Daily DD ", dd, "% >= ", DailyMaxDD_Percent, "% - STOP TRADING TODAY");
| |||
return false;
| |||
}
| |||
| |||
// Total DD check
| |||
double total_dd = (AccountInfoDouble(ACCOUNT_BALANCE) - equity) / AccountInfoDouble(ACCOUNT_BALANCE) * 100.0;
| |||
if(total_dd >= TotalMaxDD_Percent)
| |||
{
| |||
Print("RISK GUARD BLOCK: Total DD ", total_dd, "% - STOP");
| |||
return false;
| |||
}
| |||
| |||
return true;
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
bool LondonSession()
| |||
{
| |||
MqlDateTime dt;
| |||
TimeToStruct(TimeCurrent(), dt);
| |||
return (dt.hour >= LondonStartHour && dt.hour <= LondonEndHour);
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
void OnTick()
| |||
{
| |||
// 1. Risk Guard prvy
| |||
if(!RiskGuard_Check()) return;
| |||
| |||
// 2. Session filter
| |||
if(!LondonSession()) return;
| |||
| |||
// 3. Iba 1 trade naraz - Gold scalper 0/0
| |||
if(PositionsTotal() > 0) return;
| |||
| |||
// 4. EMA logika - Fast EMA crossover Slow EMA
| |||
double ema_fast[], ema_slow[];
| |||
CopyBuffer(iMA(_Symbol, Timeframe, FastEMA, 0, MODE_EMA, PRICE_CLOSE), 0, 0, 3, ema_fast);
| |||
CopyBuffer(iMA(_Symbol, Timeframe, SlowEMA, 0, MODE_EMA, PRICE_CLOSE), 0, 0, 3, ema_slow);
| |||
ArraySetAsSeries(ema_fast, true);
| |||
ArraySetAsSeries(ema_slow, true);
| |||
| |||
bool buy_signal = ema_fast[1] > ema_slow[1] && ema_fast[2] <= ema_slow[2];
| |||
bool sell_signal = ema_fast[1] < ema_slow[1] && ema_fast[2] >= ema_slow[2];
| |||
| |||
if(buy_signal)
| |||
{
| |||
// BUY
| |||
double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
| |||
double sl = ask - StopLossPoints * _Point;
| |||
double tp = ask + TakeProfitPoints * _Point;
| |||
// trade request...
| |||
Print("BUY Signal EMA crossover ", FastEMA, "/", SlowEMA, " Ask=", ask);
| |||
}
| |||
| |||
if(sell_signal)
| |||
{
| |||
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
| |||
double sl = bid + StopLossPoints * _Point;
| |||
double tp = bid - TakeProfitPoints * _Point;
| |||
Print("SELL Signal EMA crossover ", FastEMA, "/", SlowEMA, " Bid=", bid);
| |||
}
| |||
}
| |||
//+------------------------------------------------------------------+
|