有您的持续关注
我们会做得更好

写法不错的均线系统EA



写法不错的均线系统EA汉化作者注释:
//[EA]MA经修改可赢利的
//写法很标准,多处可借签.

本网收集整理智能交易EA仅为MQL4编程爱好者提供语法及相关编程技巧的学习研究之用,智能交易存在极高的风险测试请用模拟盘,请勿用于实盘。写法不错的均线系统EA源码:

//[EA]MA经修改可赢利的
//写法很标准,多处可借签.
//+------------------------------------------------------------------+
//|                                         写法不错的均线系统EA.mq4 |
//|                                     Copyright 2014, QQ:125808047 |
//+------------------------------------------------------------------+
#property copyright "www.125808047.com"
#property link      "http://www.125808047.com/"

#define MAGICMA 20100604
//+------------------------------------------------------------------+

extern int    检查均线模式     = 1;                                                                      //1~4 种下单方式  1 仅开仓, 2 有止损无止赢, 3 有止赢无止损, 4 有止赢也有止损
extern double 赢利目标         = 150;                                                                    //
extern double 止损             = 30;                                                                     //
extern double 最大风险         = 0.3;                                                                    //资金控制,控制下单量
extern double 跟踪止损         = 25;                                                                     //
extern int    最大开仓次数     = 3;                                                                      //最多开仓次数限制 
extern double 最大手数         = 0.1;                                                                    //最多单仓持仓量限制 
extern int    是否允许跟踪止赢 = 0;                                                                      //非零就允许跟踪止赢
extern int    小时间框         = 5;
extern int    大时间框         = 15;


int 小均线周期=5,
    大均线周期=30,
    i,
    p2, 
    xxx,
    p1, 
    res;
double 手数; 
datetime 最后时间;                                                                                       //时间控制, 仅当一个时间周期完成才检查条件
bool 成功 = false;                               
//+----------------------初始化-------------------------------------+

int init()       
  { 
   手数 = 1; 
   最后时间 = NULL;
   return(0); 
  }

//+---------------------反初始化-------------------------------------+

int deinit() { return(0); } 

//+---------------------主程序---------------------------------------+


int start()
  {
   开仓前检查子();                                                                                       //开仓 平仓 条件检查 和操作

   if (是否允许跟踪止赢>0)   跟踪止损设置子();                                                                      //跟踪止赢
   return(0);
   }
   
//+-------确定下单量 子函数()----------------------------------------+

double 手数最佳化子() 
{
double lot =手数;

//MarketInfo(Symbol(),MODE_MINLOT);     相关信息
//MarketInfo(Symbol(),MODE_MAXLOT);
//MarketInfo(Symbol(),MODE_LOTSTEP);
lot=NormalizeDouble(最大风险 * AccountBalance()/AccountLeverage(),1);                                    //开仓量计算
if(lot<0.1)  lot=0.1;
if(lot>最大手数)  lot=最大手数;
return(lot);
}
  
//----------平买 单子函数()------------------------------------------+

void 平买子()
{
if (OrdersTotal() > 0 )   
  {
  for(i=OrdersTotal()-1; i>=0; i--)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)     break;
    if(OrderType()==OP_BUY) 
      {
      成功 = OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
      Sleep(5000); 
      }
    }
  }
}
//------------平卖 子函数()-------------------------------------------+

void 平卖子()
{
if (OrdersTotal( ) > 0 )   
{
  for(i=OrdersTotal()-1;i>=0;i--)
  {
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)     break;
  if(OrderType()==OP_SELL) 
    {
    成功 = OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
    Sleep(5000); 
    }
  }
}
}

//-----------------买卖平条件 子函数()------------------------------------------------+

int 买卖平条件子()                                                                                        // 在这个函数时可以更改设置你的交易信号 ( 这里使用MACD 和MA 做例子)
   {
    double 小均线1, 小均线2, 小均线3, 大均线1, 大均线2;

             小均线1= iMA(NULL,小时间框,4, 0,MODE_SMA,PRICE_MEDIAN,1);
             小均线2= iMA(NULL,小时间框,4, 0,MODE_SMA,PRICE_MEDIAN,2);
             小均线3= iMA(NULL,小时间框,4, 0,MODE_SMA,PRICE_MEDIAN,3);
             大均线1= iMA(NULL,大时间框,60,0,MODE_SMA,PRICE_MEDIAN,1);
             大均线2= iMA(NULL,大时间框,60,0,MODE_SMA,PRICE_MEDIAN,2);
             
   if(大均线1>大均线2  &&小均线2<小均线3  &&小均线1>小均线2)                                              // 买条件 大周期时间Ma在上升,小周期均线向上转折
       return (1);                                                                                        // 返回信号值为1
                                                                     
   if(大均线1<大均线2  &&小均线2>小均线3  &&小均线1<小均线2)                                              // 卖条件
       return (-1);                                                                                       // 卖信号
return (0);                                                                                               // 若上述信号值没有,则返回不交易信号0
}

//+---------------开仓前内容的检查 子函数()-------------------------+

int 现在买卖 = 0;

void 开仓前检查子()
{
if (Time[0] == 最后时间 ) return;                                                                         // 如果现在开盘时间与最后时间不同,则将现在的开盘时间赋给最后时间
最后时间 = Time[0];
现在买卖 = 买卖平条件子();                                                                                //将变量赋为 获取买卖条件子函数的信号值

if (现在买卖 == 1)                                                                                        //买 先结束已卖的
    平卖子();
if (现在买卖 == -1)                                                                                       //卖 先结束已买的
    平买子();
    
if (TimeDayOfWeek( TimeCurrent() )==1)                                                                    //如果 服务器时间的星期数为周一
  {
  if (TimeHour( TimeCurrent() ) <3 ) return;                                                              //且服务器的时间小时数在3点前,则不进行交易
  }
if (TimeDayOfWeek( TimeCurrent() )==5)
  {
  if (TimeHour( TimeCurrent() )>19 ) return;                                                              //周五晚19点后不做(服务器时间)
  }

if (OrdersTotal() >= 最大开仓次数) return ;                                                               //如果已持有开仓次数达到最大,不做  
                                          
if (现在买卖==0) return;                                                                                  //如果交易信号值为0,不交易

TradeOK();                                                                                                //去下单交易
}

//+------------------去下单交易 子函数()------------------------------+

void TradeOK()
{
int 错误 ;
if (现在买卖 == 1)                                                                                        //买信号
  {
    switch (检查均线模式)
    {
    case 1:   res=OrderSend(Symbol(),OP_BUY,手数最佳化子(),Ask,3, 0,              0,                  "",MAGICMA,0,Blue);break;
    case 2:   res=OrderSend(Symbol(),OP_BUY,手数最佳化子(),Ask,3, Ask-止损*Point, 0,                  "",MAGICMA,0,Blue);break;
    case 3:   res=OrderSend(Symbol(),OP_BUY,手数最佳化子(),Ask,3, 0,              Ask+赢利目标*Point, "",MAGICMA,0,Blue);break;
    case 4:   res=OrderSend(Symbol(),OP_BUY,手数最佳化子(),Ask,3, Ask-止损*Point, Ask+赢利目标*Point, "",MAGICMA,0,Blue);break;
    
    default : res=OrderSend(Symbol(),OP_BUY,手数最佳化子(),Ask,3, 0,              0,                  "",MAGICMA,0,Blue);break;
    }
    if (res <=0)
    {
    错误=GetLastError();
    if(错误==134) Print("错误134 :没钱了!! "); 
    if(错误==135) RefreshRates();   // 价格已发生变化
    }
    Sleep(5000); 
    return ;   
  }
if (现在买卖 == -1)                                                                                       //卖信号出现
  {
    switch (检查均线模式)
    {
    case 1:   res=OrderSend(Symbol(),OP_SELL,手数最佳化子(),Bid,3, 0,              0,                 "",MAGICMA,0,Red); break;
    case 2:   res=OrderSend(Symbol(),OP_SELL,手数最佳化子(),Bid,3, Bid+止损*Point, 0,                 "",MAGICMA,0,Red); break;
    case 3:   res=OrderSend(Symbol(),OP_SELL,手数最佳化子(),Bid,3, 0,              Bid-赢利目标*Point,"",MAGICMA,0,Red); break;
    case 4:   res=OrderSend(Symbol(),OP_SELL,手数最佳化子(),Bid,3, Bid+止损*Point, Bid-赢利目标*Point,"",MAGICMA,0,Red); break;
    
    default : res=OrderSend(Symbol(),OP_SELL,手数最佳化子(),Bid,3, 0,              0,                 "",MAGICMA,0,Red); break;
    }
    if (res <=0)
    {
    错误=GetLastError();
    if(错误==134) Print("错误134 :没钱了!!!! ");
    if(错误==135) RefreshRates();                                                                         // 价格已发生变化,再刷新一下数据
    }
    Sleep(5000);                                                                                          //等待5秒                  
    return ;   
  }
}

//+---------------------//跟踪止损 子函数---------------------------------------------+

void 跟踪止损设置子()   
{
bool 修改 = false;
for (i=0; i<OrdersTotal(); i++)
  {
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)     break;
  if (OrderType()==OP_BUY) 
    {
    if ((Bid -OrderOpenPrice()) > (跟踪止损*MarketInfo(OrderSymbol(), MODE_POINT)))                       //开仓价格 当前止损和当前价格比较判断是否要修改跟踪止赢设置
       {
      if (OrderStopLoss() < Bid -跟踪止损*MarketInfo(OrderSymbol(), MODE_POINT)) 
         {
          修改 = OrderModify(OrderTicket(), 
                           OrderOpenPrice(), 
                           Bid - 跟踪止损*MarketInfo(OrderSymbol(), MODE_POINT),
                           OrderTakeProfit(),
                           0, 
                           Green);
         }
       }
    } 
  else if (OrderType()==OP_SELL) 
    {
    if ((OrderOpenPrice() -Ask) > (跟踪止损*MarketInfo(OrderSymbol(), MODE_POINT)))                       //开仓价格 当前止损和当前价格比较判断是否要修改跟踪止赢设置
       {
        if ((OrderStopLoss()) > (Ask + 跟踪止损*MarketInfo(OrderSymbol(), MODE_POINT)))
           {     
            修改 = OrderModify(OrderTicket(), 
                             OrderOpenPrice(),
                             Ask + 跟踪止损*MarketInfo(OrderSymbol(),MODE_POINT), 
                             OrderTakeProfit(),
                             0, 
                             Tan);
           }
       }
    }
  }
} 
//+------------------------------------------------------------------+

如您喜欢此文章请点下面分享按钮↴峰汇在线 » 写法不错的均线系统EA
上一篇:
下一篇:
分享到:更多 ()