MT5交易 期货回测EA代码例子
期货 EA回测的写法和外汇EA一样。 该EA是判断如果当前没有仓位的话就买入,设置止盈为卖一价加上10个跳,设置止损为卖一价减去10个跳,如果当前已经持仓了就等待仓位止盈或者止损。 首先引入Trade.mqh头文件,定义仓位,报单和报单返回结果的对象。
#include
CPositionInfo m_position;
MqlTradeRequest m_request;
MqlTradeResult m_result;
double tickSize=0;
获得当前图表品种每一跳的大小
int OnInit()
{
//---
//获得该品种每跳
tickSize=SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_SIZE);
//---
return(INIT_SUCCEEDED);
}
判断如果当前没有仓位的话就买入1手,设置止盈为卖一价加上10个跳,设置止损为卖一价减去10个跳,如果当前已经持仓了就等待仓位止盈或者止损。
void OnTick()
{
if(m_position.Select(Symbol())) //持仓中
{
}
else //没有持仓就对价开多仓
{
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个跳止损
m_request.tp =m_request.price +10*tickSize; //10个跳止盈
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);
}
}
}