请高手修正:这个EA编译时提示\'(\'

 
楼主  收藏   举报   帖子创建时间:  2020-01-01 23:57 回复:0 关注量:890
div > 这个当均线交叉后在交叉点的上下10点或20点分别挂多空单的EA,是在阻力位和支撑位同时挂单EA的基础上修改的,原EA的功能是:阻力位R和支撑位S在属性里输入,首先取消阻力位和支撑位置间的所有挂单,然后,当一张订单处于开仓状态(挂单价格被触发),就取消另一张反方向的挂单。   要求修改为:当均线交叉后在交叉点的上下10点或20点分别挂多空单(带止赢止损和移动止损),当发生新交叉时立即开新挂单并自动取消未成交的旧挂单,当一方成交后自动取消另一反向的挂单,如果有持仓时不开新挂单。
*/
//+------------------------------------------------------------------+
//|                             Two Direction Order.mq4 |
//|               Copyright ?2010, metaQuotes Software Corp. |
//|                            http://www.metaquotes.net|
//+------------------------------------------------------------------+
#define Magic 020909 //
extern int Slippage=3;//滑点
//extern double R=1.4200;//Zone 的阻力位
//extern double S=1.4100;//Zone 的支撑位
extern double 止损= 10;
extern double 止盈=20;
extern double 手数=0.01;
extern double 与均线交叉点距离=10;
extern int FasterMA = 5;    //均线1的周期   
extern int SlowerMA = 24; //均线2的周期
extern int Trade_Bar = 1; //下单的时机,如果为1,表示等待当前的K线完成,下一根K线刚出现的时候才下单;如果为0表示只要当前的价格
                   //满足条件了就马上下单

int last_t = 0;         //这个是用来避免重复下单 
//----全局变量===================

int OrderTotal;//持仓总单数
int TickLong;//突破多单挂单单号
int TickShort;//突破空单挂单单号
int TickOther;

double LongOpenPrice;
double ShortOpenPrice;
double OtherOpenPrice;
           
int TypeLong; //突破多单订单类型
int TypeShort;//突破空单订单类型
int TypeOther;//区间订单类型

double StopLost;



//+------------------------------------------------------------------+
//| expert initialization function                       |
//+------------------------------------------------------------------+
int init()//初始化函数,负责程序变量及数据初始输入;只在程序调入时执行一次,一般不用重写内容。
   {
   

   
//----
    return(0);
   }
//+------------------------------------------------------------------+
//| expert deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()//反初始化函数,负责程序退出时,将数据从内存中清除;只在程序退出时,执行一次,一般不用重写内容。
   {

   
//----
    return(0);
   }
//+------------------------------------------------------------------+
//| expert start function                             |
//+------------------------------------------------------------------+
int start()
   {
   int Ticket; //自定义局部变量Ticket 用于记录每次下单后的状态,用于判断下单动作是否成功,如果不成功则做相应处理和提示
    int Ticket1;

    int OrderTotal=GetOrderTypeHolding();
   
   //----
   /////////////////////////////////////////////////////////////////// 
   ////////定义几个变量,从名字也可以很容易看出其代表的含义了: FasterMANow表示均线1当前的值、SlowerMANow表示均线2当前的值、 
   ///////FasterMAPrevious表示均线1的前值、SlowerMAPrevious表示均线2的前值;均线金叉,其实就是表示当均线1的前值小于均线2的前值, 
   ///////且均线1的当前值大于均线2的当前值。)
   double FasterMANow, SlowerMANow, FasterMAPrevious, SlowerMAPrevious; 
   

   //////////////////////////////////////////////////////////////////////////// 
   //////////下面是给各个变量赋值,iMA就是均线函数
   ///////////////////////////////////////////////////////////////////////////
   FasterMANow = iMA(NULL, 0, FasterMA, 0, MODE_EMA, PRICE_CLOSE, Trade_Bar); 
   SlowerMANow = iMA(NULL, 0, SlowerMA, 0, MODE_EMA, PRICE_CLOSE, Trade_Bar); 
   FasterMAPrevious = iMA(NULL, 0, FasterMA, 0, MODE_EMA, PRICE_CLOSE, Trade_Bar+1);
   SlowerMAPrevious = iMA(NULL, 0, SlowerMA, 0, MODE_EMA, PRICE_CLOSE, Trade_Bar+1);
   
   
   //////////////////////////////////////////////////////
   ///////////下面开始判断是否发生金叉了
   ///////////////////////////////////////////////////////
   if ((FasterMANow SlowerMANow) (FasterMAPrevious = SlowerMAPrevious)){
     
     if ((OrderTotal==0) (TotalOrders(Magic)==0) (Time[0] last_t)) ///如果当前的EA还没有下单
      {//1
       RefreshRates(); ///刷新市场报价
 
 // if(OrderTotal==0)//完全没有订单的情况
     
 //     Ticket=OrderSend( Symbol(), OP_BUYSTOP, 手数, R, Slippage,R-止损*Point, R+止盈*Point, Long , 020909, 0, Lime) ;
//      Ticket1=OrderSend( Symbol(), OP_SELLSTOP, 手数, S, Slippage,S+止损*Point, S-止盈*Point, Short , 020909, 0, Red) ;

     Ticket=OrderSend(Symbol(), OP_BUYSTOP, 手数, NormalizeDouble(Ask+与均线交叉点距离*Point,Digits), Slippage, NormalizeDouble(Ask-止损*Point+与均线交叉点距离*Point,Digits), NormalizeDouble(Ask+止盈*Point+与均线交叉点距离*Point,Digits), Long , Magic, 0, Lime);       
     Ticket1=OrderSend(Symbol(), OP_SELLSTOP, 手数, NormalizeDouble(Bid-与均线交叉点距离*Point,Digits), Slippage, NormalizeDouble(Bid+止损*Point+与均线交叉点距离*Point,Digits), NormalizeDouble(Bid-止盈*Point+与均线交叉点距离*Point,Digits), Long , Magic, 0, Red);
     
     
       last_t = Time[0];
          return (0); 
       
          if(Ticket=R TypeShort==OP_SELL)//突破空单已经开仓情况
 //       {//2-1-2
//       OrderDelete(TickLong, Yellow);//消突破多单挂单
//     }//2-1       
 //    }//2
 
   
     {//2 
     OrderDelete(TickOther, Yellow);//消区间空单挂单     
      if(LongOpenPrice =NormalizeDouble(Ask+与均线交叉点距离*Point,Digits)||ShortOpenPrice=NormalizeDouble(Ask+与均线交叉点距离*Point,Digits) TypeLong==OP_BUY)//突破多单已经开仓情况
       {//2-1-1
         OrderDelete(TickShort, Yellow);//消突破空单挂单
       }//2-1-1
       if(ShortOpenPrice =NormalizeDouble(Bid-与均线交叉点距离*Point,Digits) TypeShort==OP_SELL)//突破空单已经开仓情况
       {//2-1-2
         OrderDelete(TickLong, Yellow);//消突破多单挂单
       }//2-1-2
       }//2-1       
     }//2
     
    return(0);
    }
//====================自定义函数部分================================================ 
//+------------------------------------------------------------------+
//|自定义判断持仓情况                                 |
//+------------------------------------------------------------------+
int GetOrderTypeHolding()//从最近持仓单提取订单类型
   {//1
    OrderTotal=OrdersTotal();
   
    for(int i=OrdersTotal()-1;i i--)//循环条件
     {//1-1
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);//查找订单函数
      if(OrderSymbol()==Symbol())//如果仓单货币=目前的货币
       {//1-2
        StopLost=OrderStopLoss(); //自定义止损变量=返回的订单止损
        if(OrderOpenPrice( ) =NormalizeDouble(Ask+与均线交叉点距离*Point,Digits))
         {//1-2-1
            TickLong=OrderTicket();//突破多单挂单单号
            LongOpenPrice=OrderOpenPrice();
            TypeLong=OrderType();
         }//1-2-1
        if(OrderOpenPrice( )
打赏