MT5交易 期貨回測(cè)EA代碼例子
期貨 EA回測(cè)的寫法和外匯EA一樣。 該EA是判斷如果當(dāng)前沒有倉位的話就買入,設(shè)置止盈為賣一價(jià)加上10個(gè)跳,設(shè)置止損為賣一價(jià)減去10個(gè)跳,如果當(dāng)前已經(jīng)持倉了就等待倉位止盈或者止損。 首先引入Trade.mqh頭文件,定義倉位,報(bào)單和報(bào)單返回結(jié)果的對(duì)象。
#include
CPositionInfo m_position;
MqlTradeRequest m_request;
MqlTradeResult m_result;
double tickSize=0;
獲得當(dāng)前圖表品種每一跳的大小
int OnInit()
{
//---
//獲得該品種每跳
tickSize=SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_SIZE);
//---
return(INIT_SUCCEEDED);
}
判斷如果當(dāng)前沒有倉位的話就買入1手,設(shè)置止盈為賣一價(jià)加上10個(gè)跳,設(shè)置止損為賣一價(jià)減去10個(gè)跳,如果當(dāng)前已經(jīng)持倉了就等待倉位止盈或者止損。
void OnTick()
{
if(m_position.Select(Symbol())) //持倉中
{
}
else //沒有持倉就對(duì)價(jià)開多倉
{
m_request.action =TRADE_ACTION_DEAL;
m_request.symbol =Symbol();
m_request.volume =1;
m_request.type =ORDER_TYPE_BUY;
m_request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK); //printf("price " + m_request.price );
m_request.deviation=0;
m_request.sl =m_request.price -10*tickSize; //10個(gè)跳止損
m_request.tp =m_request.price +10*tickSize; //10個(gè)跳止盈
if(!OrderSend(m_request,m_result))
{
printf("TRADE_RETCODE_REQUOTE %d %s %d", m_result.retcode, m_result.comment,m_result.retcode_external);
Print("request.price = ",m_request.price," result.ask = ", m_result.ask," result.bid = ",m_result.bid);
}
}
}