Hi guys,
found great example of coding multi-currency EA (MT5) but when I do a simple trade test with Optimization (All Symbols in MarketWatch) I get error: "debug version detected, optimization cannot be started".
found great example of coding multi-currency EA (MT5) but when I do a simple trade test with Optimization (All Symbols in MarketWatch) I get error: "debug version detected, optimization cannot be started".
Inserted Code
#property copyright "nicholishen"
#property link "www.reddit.com/u/nicholishenFX"
#property version "1.00"
#include <Trade\SymbolInfo.mqh>
#include <Arrays\ArrayObj.mqh>
#include <Trade\Trade.mqh>
CTrade trade;
class MySymbol : public CSymbolInfo
{
protected:
ENUM_TIMEFRAMES m_period;
MqlRates m_rates[];
datetime m_bartime;
public:
MySymbol(const string symbol,ENUM_TIMEFRAMES period):m_period(period)
{
m_name = symbol;
ArraySetAsSeries(m_rates,true);
}
int BarsTotal() const { return ArraySize(m_rates);}
bool RefreshRates()
{
datetime btime = (datetime)SeriesInfoInteger(m_name,m_period,SERIES_LASTBAR_DATE);
if(m_bartime != btime || BarsTotal() < 300)
{
if(CopyRates(m_name,m_period,0,Bars(m_name,m_period),m_rates)<300)
return false;
m_bartime = btime;
}
return CSymbolInfo::RefreshRates();
}
double Open (const int i) const { return m_rates[i].open; }
double High (const int i) const { return m_rates[i].high; }
double Low (const int i) const { return m_rates[i].low ; }
double Close (const int i) const { return m_rates[i].close;}
datetime Time (const int i) const { return m_rates[i].time; }
};
class MySymbolCollection : public CArrayObj
{
public:
MySymbol* operator[](const int index)const{return(MySymbol*)At(index);}
bool Init(string &syms[])
{
Clear();
for(int i=0;i<ArraySize(syms);i++)
{
for(int j=0;j<SymbolsTotal(false);j++)
{
if(StringFind(SymbolName(j,false),syms[i])>=0)
{
Add(new MySymbol(SymbolName(j,false),Period()));
break;
}
}
}
EventSetTimer(1);
return true;
}
bool RefreshRates()
{
bool res = true;
for(int i=0;i<Total();i++)
if(!this[i].RefreshRates())
res = false;
return res;
}
};
string sym[]={ "EURUSD+","GBPUSD+"};
MySymbolCollection symbols;
//+------------------------------------------------------------------+
int OnInit()
{
//---
symbols.Init(sym);
symbols.RefreshRates();
//---
return(INIT_SUCCEEDED);
}
void OnTick()
{
//---
if(!symbols.RefreshRates())
{
Print(__FUNCTION__+" Waiting for data");
return;
}
// --- Simple trade test
double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
double Balance=AccountInfoDouble(ACCOUNT_BALANCE);
double Equity=AccountInfoDouble(ACCOUNT_EQUITY);
if (Equity >= Balance)
trade.Buy(0.01,NULL,Ask,0,(Ask+10*_Point),NULL);
}
//+------------------------------------------------------------------+
void OnTimer()
{
symbols.RefreshRates();
EventKillTimer();
}