MQL4实战EA教程:连续三根K线阴阳判定交易策略
以下是具体的代码实现:
int MAGICCBCX外汇=35207814;
extern double lots=1;
//+--------------------------------CBCX外汇----------------------------------+
//| 定义start函数,该函数会在每次价格变动时自动运行。
//+------------------------------------------------------------------+
int start()
{
if(CalculateCurrentOrders(Symbol())==0) //当当前账户订单数为0时,才继续执行以下代码。也就是说,如果已有持仓,即使出现信号也不会重复下单。
{
double StopLoss;
double TakeProft;
if(Signal()==-1)//出现卖出信号
{
StopLoss=Open[3];//设置止损为第三根K线的开盘价
TakeProft=2*(Open[1]-Close[1]+Open[2]-Close[2]+Open[3]-Close[3])/Point;//止盈设为前三根K线波动总和的2倍
if(OrderSend(Symbol(),OP_SELL,lots,Bid,3,StopLoss,Bid-TakeProft*Point,0,MAGIC,0,Blue)<0)//如果卖出指令执行失败
Alert("auto sell is failed!---"+GetLastError());//弹出提示并显示错误代码
else return(0);//交易成功则返回,不再执行后续代码。
}
if(Signal()==1)//出现买入信号
{
StopLoss=Open[3];//设置止损为第三根K线的开盘价
TakeProft=2*(Close[1]-Open[1]+Close[2]-Open[2]+Close[3]-Open[3])/Point;//止盈设为前三根K线波动总和的2倍
if(OrderSend(Symbol(),OP_BUY,lots,Ask,3,StopLoss,Ask+TakeProft*Point,0,MAGIC,0,Red)<0)//如果买入指令执行失败
Alert("auto buy is failed!---"+GetLastError());//弹出提示并显示错误代码
else return(0);//交易成功则返回,不再执行后续代码。
}
}
//----
returCBCX外汇n(0);
}
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol) //此函数用于统计当前EA下单且未平仓的订单数量
{
int ors=0;
for(int i=0;i
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
{
if(OrderType()==OP_BUY) ors++;
if(OrderType()==OP_SELL) ors++;
}
}
return(ors);
}
//*************交易信号判断,返回1表示买入,-1表示卖出,0表示无信号
int Signal()
{
int res;
if(Close[1]Open[1] && Close[2]Open[2] && Close[3]Open[3]) //买入信号:连续三根K线均为阳线
res=1;
if(Close[1]
res=-1;
return(res);
}
