这个为啥运行不了,不能回测

 
extern    int     均线参数一=34;
extern    int     均线参数二=55;
extern    int     均线参数三=89;
enum     X1
  {
   比例下单=0,                                 
   固定下单=1,                                
  };
extern   X1        加仓方式=比例下单;     
extern    double   亏损比=0.1;
extern    double   最大开仓量=1;
extern    int      最大止损=80;
extern    double   固定下单量=0.1;
extern    double   赔率=4;
extern    int      分型停顿参数=10;
extern    int      保护性止损均线周期=89;
extern    double   移动系数=1;
extern    int      魔术号=123456;
extern    int      滑点=35;
extern    string   备注="分型停顿";
bool      数据显示开关=false;
double    多单=0.1;
double    空单=0.1;
string    名称=Symbol()+IntegerToString(魔术号); 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {

   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
        double  多单止损=Low[iLowest(Symbol(),0,MODE_LOW,分型停顿参数,1)];
        double  多单止盈=Close[1]+赔率*(Close[1]-多单止损); 
        double  多单下单量=AccountBalance()*亏损比/(1000*(Close[1]-多单止损));
        
        double  空单止损=High[iHighest(Symbol(),0,MODE_HIGH,分型停顿参数,1)];
        double  空单止盈=Close[1]-赔率*(空单止损-Close[1]); 
        double  空单下单量=AccountBalance()*亏损比/(1000*(空单止损-Close[1]));
              
        if(加仓方式==比例下单){多单=MathMin(MathMax(多单下单量,0.01),最大开仓量);空单=MathMin(MathMax(空单下单量,0.01),最大开仓量);}
        if(加仓方式==固定下单){多单=固定下单量;空单=固定下单量;}
        
        if(底分型停顿()==true && 多头持仓()==0 && 多头持仓()==0 && 多头排列( )==true )  
        {
         int 开仓=OrderSend(Symbol(),OP_BUY,多单,Ask,滑点,多单止损,多单止盈,备注,魔术号,0,Red);
        }
        if(顶分型停顿()==true && 空头持仓()==0 && 空头持仓()==0 && 空头排列( )==true )  
        {
         int ticket=OrderSend(Symbol(),OP_SELL,空单,Bid,滑点,空单止损,空单止盈,备注,魔术号,0,Green);
        }
  }
//+------------------------------------------------------------------+
//|当前持仓                                                          |
//+------------------------------------------------------------------+
int 多头持仓()
  {
   int a=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==魔术号)
           {
            if(OrderType()==OP_BUY)
              {
               a=a+1;
              }
           }
        }
     }
   return(a);
  }
//+------------------------------------------------------------------+
int 空头持仓()
  {
   int a=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==魔术号)
           {
            if(OrderType()==OP_SELL)
              {
               a=a+1;
              }
           }
        }
     }
   return(a);
  }
//+------------------------------------------------------------------+
//分型停顿信号判断                                                   |
//+------------------------------------------------------------------+ 
bool  顶分型停顿( )    
  {
     bool  出现顶分型停顿=false;
     int 顶分型顶点位置=iHighest(Symbol(),0,MODE_HIGH,分型停顿参数,1);
     int 最近最低价位置=iLowest(Symbol(),0,MODE_LOW,顶分型顶点位置,2);
     if(顶分型顶点位置>最近最低价位置&&Close[1]<Low[最近最低价位置])
      {
       出现顶分型停顿=true;
      }
     return(出现顶分型停顿);
  }
  
bool  底分型停顿( )    
  {
     bool  出现底分型停顿=false;
     int 底分型顶点位置=iLowest(Symbol(),0,MODE_LOW,分型停顿参数,1);
     int 最近最高价位置=iHighest(Symbol(),0,MODE_HIGH,底分型顶点位置,2);
     if(底分型顶点位置>最近最高价位置&&Close[1]>High[最近最高价位置])
      {
       出现底分型停顿=true;
      }
     return(出现底分型停顿);
  }
//+------------------------------------------------------------------+
//均线判断当前趋势                                                   |
//+------------------------------------------------------------------+ 
//找出最近交叉点
int   K线金叉标记()
 {
      int   a=0;
      for(int i=0;i<10000;i++)
       { 
        if( iMA(Symbol(),0,均线参数二,0,MODE_EMA,PRICE_CLOSE,i)>=iMA(Symbol(),0,均线参数三,0,MODE_EMA,PRICE_CLOSE,i))
         {
          a=i;
          return(a);
         }
       }
    return(a);
 }
int   K线死叉标记()
 {
      int   a=0;
      for(int i=0;i<10000;i++)
       { 
        if( iMA(Symbol(),0,均线参数二,0,MODE_EMA,PRICE_CLOSE,i)<iMA(Symbol(),0,均线参数三,0,MODE_EMA,PRICE_CLOSE,i))
          {
            a=i;
            return(a);
          }
       }
    return(a);
 } 
//多空趋势
bool  多头排列( )    
  {
   bool  多头=false;
   for(int i=0;i<K线金叉标记();i++)
   if(iMA(Symbol(),0,均线参数一,0,MODE_EMA,PRICE_CLOSE,i)>iMA(Symbol(),0,均线参数二,0,MODE_EMA,PRICE_CLOSE,i) &&
      iMA(Symbol(),0,均线参数二,0,MODE_EMA,PRICE_CLOSE,i)>iMA(Symbol(),0,均线参数三,0,MODE_EMA,PRICE_CLOSE,i))
    {
     多头=true;
    }
   else
    {
     多头=false;
     break;
    }
   return(多头);
  }
bool  空头排列( )    
  {
   bool  空头=false;
   for(int i=0;i<K线死叉标记();i++)
   if(iMA(Symbol(),0,均线参数一,0,MODE_EMA,PRICE_CLOSE,i)<iMA(Symbol(),0,均线参数二,0,MODE_EMA,PRICE_CLOSE,i) &&
      iMA(Symbol(),0,均线参数二,0,MODE_EMA,PRICE_CLOSE,i)<iMA(Symbol(),0,均线参数三,0,MODE_EMA,PRICE_CLOSE,i))
    {
     空头=true;
    }
   else
    {
     空头=false;
     break;
    }
   return(空头);
  }
 
sheri_lanyue:
extern    int     均线参数一=34;
extern    int     均线参数二=55;
extern    int     均线参数三=89;
enum     X1
  {
   比例下单=0,                                 
   固定下单=1,                                
  };
extern   X1        加仓方式=比例下单;     
extern    double   亏损比=0.1;
extern    double   最大开仓量=1;
extern    int      最大止损=80;
extern    double   固定下单量=0.1;
extern    double   赔率=4;
extern    int      分型停顿参数=10;
extern    int      保护性止损均线周期=89;
extern    double   移动系数=1;
extern    int      魔术号=123456;
extern    int      滑点=35;
extern    string   备注="分型停顿";
bool      数据显示开关=false;
double    多单=0.1;
double    空单=0.1;
string    名称=Symbol()+IntegerToString(魔术号); 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {

   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
        double  多单止损=Low[iLowest(Symbol(),0,MODE_LOW,分型停顿参数,1)];
        double  多单止盈=Close[1]+赔率*(Close[1]-多单止损); 
        double  多单下单量=AccountBalance()*亏损比/(1000*(Close[1]-多单止损));
        
        double  空单止损=High[iHighest(Symbol(),0,MODE_HIGH,分型停顿参数,1)];
        double  空单止盈=Close[1]-赔率*(空单止损-Close[1]); 
        double  空单下单量=AccountBalance()*亏损比/(1000*(空单止损-Close[1]));
              
        if(加仓方式==比例下单){多单=MathMin(MathMax(多单下单量,0.01),最大开仓量);空单=MathMin(MathMax(空单下单量,0.01),最大开仓量);}
        if(加仓方式==固定下单){多单=固定下单量;空单=固定下单量;}
        
        if(底分型停顿()==true && 多头持仓()==0 && 多头持仓()==0 && 多头排列( )==true )  
        {
         int 开仓=OrderSend(Symbol(),OP_BUY,多单,Ask,滑点,多单止损,多单止盈,备注,魔术号,0,Red);
        }
        if(顶分型停顿()==true && 空头持仓()==0 && 空头持仓()==0 && 空头排列( )==true )  
        {
         int ticket=OrderSend(Symbol(),OP_SELL,空单,Bid,滑点,空单止损,空单止盈,备注,魔术号,0,Green);
        }
  }
//+------------------------------------------------------------------+
//|当前持仓                                                          |
//+------------------------------------------------------------------+
int 多头持仓()
  {
   int a=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==魔术号)
           {
            if(OrderType()==OP_BUY)
              {
               a=a+1;
              }
           }
        }
     }
   return(a);
  }
//+------------------------------------------------------------------+
int 空头持仓()
  {
   int a=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==魔术号)
           {
            if(OrderType()==OP_SELL)
              {
               a=a+1;
              }
           }
        }
     }
   return(a);
  }
//+------------------------------------------------------------------+
//分型停顿信号判断                                                   |
//+------------------------------------------------------------------+ 
bool  顶分型停顿( )    
  {
     bool  出现顶分型停顿=false;
     int 顶分型顶点位置=iHighest(Symbol(),0,MODE_HIGH,分型停顿参数,1);
     int 最近最低价位置=iLowest(Symbol(),0,MODE_LOW,顶分型顶点位置,2);
     if(顶分型顶点位置>最近最低价位置&&Close[1]<Low[最近最低价位置])
      {
       出现顶分型停顿=true;
      }
     return(出现顶分型停顿);
  }
  
bool  底分型停顿( )    
  {
     bool  出现底分型停顿=false;
     int 底分型顶点位置=iLowest(Symbol(),0,MODE_LOW,分型停顿参数,1);
     int 最近最高价位置=iHighest(Symbol(),0,MODE_HIGH,底分型顶点位置,2);
     if(底分型顶点位置>最近最高价位置&&Close[1]>High[最近最高价位置])
      {
       出现底分型停顿=true;
      }
     return(出现底分型停顿);
  }
//+------------------------------------------------------------------+
//均线判断当前趋势                                                   |
//+------------------------------------------------------------------+ 
//找出最近交叉点
int   K线金叉标记()
 {
      int   a=0;
      for(int i=0;i<10000;i++)
       { 
        if( iMA(Symbol(),0,均线参数二,0,MODE_EMA,PRICE_CLOSE,i)>=iMA(Symbol(),0,均线参数三,0,MODE_EMA,PRICE_CLOSE,i))
         {
          a=i;
          return(a);
         }
       }
    return(a);
 }
int   K线死叉标记()
 {
      int   a=0;
      for(int i=0;i<10000;i++)
       { 
        if( iMA(Symbol(),0,均线参数二,0,MODE_EMA,PRICE_CLOSE,i)<iMA(Symbol(),0,均线参数三,0,MODE_EMA,PRICE_CLOSE,i))
          {
            a=i;
            return(a);
          }
       }
    return(a);
 } 
//多空趋势
bool  多头排列( )    
  {
   bool  多头=false;
   for(int i=0;i<K线金叉标记();i++)
   if(iMA(Symbol(),0,均线参数一,0,MODE_EMA,PRICE_CLOSE,i)>iMA(Symbol(),0,均线参数二,0,MODE_EMA,PRICE_CLOSE,i) &&
      iMA(Symbol(),0,均线参数二,0,MODE_EMA,PRICE_CLOSE,i)>iMA(Symbol(),0,均线参数三,0,MODE_EMA,PRICE_CLOSE,i))
    {
     多头=true;
    }
   else
    {
     多头=false;
     break;
    }
   return(多头);
  }
bool  空头排列( )    
  {
   bool  空头=false;
   for(int i=0;i<K线死叉标记();i++)
   if(iMA(Symbol(),0,均线参数一,0,MODE_EMA,PRICE_CLOSE,i)<iMA(Symbol(),0,均线参数二,0,MODE_EMA,PRICE_CLOSE,i) &&
      iMA(Symbol(),0,均线参数二,0,MODE_EMA,PRICE_CLOSE,i)<iMA(Symbol(),0,均线参数三,0,MODE_EMA,PRICE_CLOSE,i))
    {
     空头=true;
    }
   else
    {
     空头=false;
     break;
    }
   return(空头);
  }
 
lizhongwei123:
均线交叉逻辑不对