【MT4编程】mt4非常简单的EA代码,附带解析
(2012-11-19 09:25:57)
extern double
TakeProfit = 50;
extern
double Lots =
0.1;
extern
double TrailingStop =
30;
extern
double MACDOpenLevel=3;
extern
double MACDCloseLevel=2;
extern
double MATrendPeriod=26;
//+------------------------------------------------------------------+
//|
|
//+------------------------------------------------------------------+
int start()
{
double MacdCurrent,
MacdPrevious, SignalCurrent;
double SignalPrevious,
MaCurrent, MaPrevious;
int cnt,
ticket, total;
//
检测初始化数据
// 确定智能交易在图表中运行正常非常重要
//
用户在外部变量交易中不会产生任何错误
// 外部变量 (标准手数,
止损,赢利,
// 追踪止损) 在这种情况下,我们检测图表中赢利水平要小于100 柱
if(Bars<</SPAN>100)
{
Print("少于 100柱");
return(0);
}
if(TakeProfit<</SPAN>10)
{
Print("赢利少于10");
return(0); //
检测赢利水平
}
//
简化代码和加速通道
// 数据被放置在内部变量中
MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);
total=OrdersTotal();
if(total<</SPAN>1)
{
// 没有指定开单
if(AccountFreeMargin()<</SPAN>(1000*Lots))
{
Print("没有资金. 自由保证金 = ", AccountFreeMargin());
return(0);
}
// 尽可能检测看涨仓位 (BUY)
if(MacdCurrent<</SPAN>0
&& MacdCurrent>SignalCurrent && MacdPrevious<</SPAN>SignalPrevious &&
MathAbs(MacdCurrent)>(MACDOpenLevel*Point)
&& MaCurrent>MaPrevious)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd
sample",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY 定单开仓 : ",OrderOpenPrice());
}
else Print("错误BUY定单开仓 :
",GetLastError());
return(0);
}
// 尽可能检测卖空仓位(SELL)
if(MacdCurrent>0 && MacdCurrent<</SPAN>SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDOpenLevel*Point)
&& MaCurrent<</SPAN>MaPrevious)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd
sample",16384,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL 定单开仓 : ",OrderOpenPrice());
}
else Print("错误SELL定单开仓 :
",GetLastError());
return(0);
}
return(0);
}
// 正确进入市场很重要,
//
但正确退出市场更重要...
for(cnt=0;cnt<</SPAN>total;cnt++)
{
OrderSelect(cnt,
SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL
&&
// 检测开仓
OrderSymbol()==Symbol()) //
检测货币对
{
if(OrderType()==OP_BUY) // 看涨仓位开仓
{
// 需要平仓吗?
if(MacdCurrent>0 && MacdCurrent<</SPAN>SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDCloseLevel*Point))
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //平仓
return(0); // 退出
}
// 检测追踪止损
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<</SPAN>Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else //
去卖空仓位
{
// 需要平仓吗?
if(MacdCurrent<</SPAN>0
&& MacdCurrent>SignalCurrent &&
MacdPrevious<</SPAN>SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // 平仓
return(0); //退出
}
// 检测追踪止损
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop))
|| (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
//
结束
喜欢
0
赠金笔
加载中,请稍候......