加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【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

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有