Отслеживать
1
0
Ответвление
У вас уже есть ответвление Warrior_EA
2
ответвлён от animatedread/Warrior_EA
Warrior_EA/research/ExportAll.mq5
AnimateDread ff46cfd57e research(dipz): the vol-gated dip-buy on four indices - screens, bear test, reconciliation
Recovered live config (z20 <= -1.5, exit SMA20 / 10 bars, 3xATR) plus a
Garman-Klass vol-regime gate. Expectancy is monotone in the vol regime in
IS, OOS and full sample, 4/4 indices; the gate reverses on USDJPY/XAUUSD.
D1 2008-2026 survives 2008/2020/2022 (maxDD 2.8%, ret/DD 7.74); the gate
halves trades, so it belongs on H4, never D1. reconcile.py matches the EA
to the backtest trade by trade; combine_charts.py rebuilds the account
curve from per-chart tester runs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 13:24:57 -04:00

87 строки
3,8 КиБ
MQL5

//+------------------------------------------------------------------+
//| ExportAll.mq5 - bars (per timeframe list) to Common\Files |
//| Throwaway research tool. Opens no trades. |
//| |
//| Run via the strategy tester with an ini whose tested symbol has |
//| the DEEPEST history (EURUSD D1 from 1995): the tester only |
//| serves history from ~1 year before FromDate, so the tested |
//| symbol's range sets the ceiling for every CopyRates below. |
//| |
//| NOTE: H4 requests for symbols other than the tested one failed |
//| with err=4401 (history not ready) on a D1 pass. Export H4 in a |
//| SEPARATE H4 pass rather than expecting one run to do both. |
//| The calendar is NOT exportable here at all - see ExportCalendar. |
//+------------------------------------------------------------------+
#property copyright "claude"
#property version "1.10"
input string ExportTag = "bars";
input string SymbolsD1 = "SP500,NAS100,US30,DAX40,UK100,ESXEUR,F40EUR,JPN225,ASXAUD,HSIHKD,IBXEUR,EURUSD,GBPUSD,USDJPY,USDCHF,USDCAD,AUDUSD,NZDUSD,EURJPY,EURGBP,GBPJPY,AUDJPY,XAUUSD,XAGUSD,XTIUSD,XBRUSD,BTCUSD,ETHUSD";
input string SymbolsH4 = "";
input bool DoCalendar = false;
bool DumpBars(const string sym, const ENUM_TIMEFRAMES tf)
{
MqlRates r[];
ArraySetAsSeries(r, false); // oldest -> newest, matches numpy
int got = CopyRates(sym, tf, 0, 500000, r);
if(got <= 0)
{
PrintFormat("ExportAll: %s %s CopyRates failed (err=%d)", sym, EnumToString(tf), GetLastError());
return false;
}
string name = StringFormat("%s_%s_%s.csv", ExportTag, sym, EnumToString(tf));
int h = FileOpen(name, FILE_WRITE | FILE_CSV | FILE_ANSI | FILE_COMMON, ',');
if(h == INVALID_HANDLE)
return false;
FileWrite(h, "time", "open", "high", "low", "close", "tick_volume", "spread");
int digits = (int)SymbolInfoInteger(sym, SYMBOL_DIGITS);
if(digits <= 0)
digits = 5;
for(int i = 0; i < got; i++)
FileWrite(h, TimeToString(r[i].time, TIME_DATE | TIME_MINUTES),
DoubleToString(r[i].open, digits), DoubleToString(r[i].high, digits),
DoubleToString(r[i].low, digits), DoubleToString(r[i].close, digits),
(string)r[i].tick_volume, (string)r[i].spread);
FileClose(h);
PrintFormat("ExportAll: %s %s -> %d bars (%s .. %s)", sym, EnumToString(tf), got,
TimeToString(r[0].time, TIME_DATE), TimeToString(r[got - 1].time, TIME_DATE));
return true;
}
void DumpList(const string list, const ENUM_TIMEFRAMES tf, int &ok, int &fail)
{
string syms[];
int n = StringSplit(list, ',', syms);
for(int i = 0; i < n; i++)
{
string s = syms[i];
StringTrimLeft(s);
StringTrimRight(s);
if(StringLen(s) == 0)
continue;
//--- without SymbolSelect an unlisted symbol reads back as zero bars and
//--- looks like missing history rather than an unselected symbol.
if(!SymbolSelect(s, true))
PrintFormat("ExportAll: SymbolSelect(%s) failed (err=%d)", s, GetLastError());
if(DumpBars(s, tf))
ok++;
else
fail++;
}
}
//--- OnDeinit, not OnInit: by then the tester has walked the whole range, so
//--- CopyRates returns every bar of the pass rather than only the warm-up.
void OnDeinit(const int reason)
{
int ok = 0, fail = 0;
if(StringLen(SymbolsD1) > 0)
DumpList(SymbolsD1, PERIOD_D1, ok, fail);
if(StringLen(SymbolsH4) > 0)
DumpList(SymbolsH4, PERIOD_H4, ok, fail);
PrintFormat("ExportAll: DONE bars ok=%d fail=%d", ok, fail);
}
int OnInit(void) { return(INIT_SUCCEEDED); }
void OnTick(void) { }