Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Нужно пополнить счет? Пополняй удобным тебе способом!
Олег
84
Олег 2012.02.28 14:50 

Написал советника, используя некоторые базовые скрипты.

Скомпилировал, устранил ошибки. Сейчас их нет.

Начал пробовать тестировать - нет результата.

В журнале выдает ошибку - TestGenerator: unmatched data error (volume limit 3592 at 2012.02.08 10:00 exceeded).

Подскажите, в чем проблема ?

_________________________________________________________________________________________________



//+------------------------------------------------------------------
                                          // Численные значения для М30
extern double StopLoss     = 20;          // SL для открываемого ордера
extern double TakeProfit   = 50;          // ТР для открываемого ордера
extern double Lots         = 0.1;         // Жестко заданное колич. лотов
extern double TrailingStop = 10;          // Trail stop in points
extern double Prots        = 0.4;         // Процент свободных средств

//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()                                  // Внутренние переменные
  {
  double MA_1Current,MA_1Previous,MA_2Current, MA_2Previous;
  double MA_3Current, MA_3Previous, StochMCurrent, StochMPrevious;
  double StochSCurrent, StochSPrevious, MacdSCurrent, MacdSPrevious;
  int cnt=0, ticket, total;
  
//+------------------------------------------------------------------+
       
                                              //Описание функций технических индикаторов.
MA_1Current    = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0);              // МА_1 0 бар
MA_1Previous   = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,1);              // МА_1 1 бар
MA_2Current    = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);             // МА_2 0 бар
MA_2Previous   = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,1);             // МА_2 1 бар
MA_3Current    = iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,0);             // МА_3 0 бар
MA_3Previous   = iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,1);             // МА_3 1 бар
StochMCurrent  = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);    // Sto_M 0 бар
StochMPrevious = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1);    // Sto_M 1 бар
StochSCurrent  = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);  // Sto_S 0 бар
StochSPrevious = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1);  // Sto_S 1 бар
MacdSCurrent   = iMACD(NULL,0,5,7,3,PRICE_CLOSE,MODE_SIGNAL,0);       // MACD_S 0 бар
MacdSPrevious  = iMACD(NULL,0,5,7,3,PRICE_CLOSE,MODE_SIGNAL,1);       // MACD_S 1 бар

                                                   //Проверка наличия открытых ордеров. 
total=OrdersTotal(); 
if(total<1)
  {
   //Определение торговых критериев.
   //Проверяем возможность открытия длинной позиции.                                              
   if(Bid<MA_3Current && MA_1Current<MA_2Current && MA_2Current<MA_3Current &&   
      MacdSCurrent<0 && MacdSPrevious>0 && StochMPrevious>70 && 
      StochMPrevious>StochSPrevious && MA_1Previous>MA_2Previous)
     {   
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point);
      return(0);   
     }    
   //Проверяем возможность открытия короткой позиции.  
   if(Bid>MA_3Current && MA_1Current>MA_2Current && MA_2Current>MA_3Current &&   
      MacdSCurrent>0 && MacdSPrevious<0 && StochMPrevious<30 &&  
      StochMPrevious<StochSPrevious && MA_1Previous<MA_2Previous)
     {   
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point);
      return(0); 
     }
   return(0);                          
  }      
//+------------------------------------------------------------------+
                                                   //Контроль открытых позиций.
for(cnt=0;cnt<total;cnt++)  
  {      
   OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);  
   if(OrderType()<=OP_SELL &&                     // это открытая позиция? OP_BUY или OP_SELL.         
      OrderSymbol()==Symbol())                    // инструмент совпадает?       
     {         
      if(OrderType()==OP_BUY)                     // открыта длинная позиция.           
        {                                         // проверка необходимости закрытия позиции. 
         if(StochMCurrent>StochSCurrent &&  StochMPrevious<StochSPrevious && 
            MacdSCurrent>MacdSPrevious)
             {
              OrderClose(OrderTicket(),OrderLots(),Bid,3);      // закрываем позицию.  
              return(0);                          // выход.
             }
                                                  // проверка - трейлинг стоп ставить?                       
         if(TrailingStop>0) 
           {
            if(Bid-OrderOpenPrice()>Point*TrailingStop)
              {
               if(OrderStopLoss()<Bid-Point*TrailingStop)
                 {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,
                              OrderTakeProfit(),0);
                  return(0);
                 }
              }
           }
        }
      else // Иначе, это короткая позиция.
        {
                                // проверка необходимости закрытия позиции.
         if(StochMCurrent<StochSCurrent &&  StochMPrevious>StochSPrevious && 
            MacdSCurrent<MacdSPrevious)
           {
            OrderClose(OrderTicket(),OrderLots(),Ask,3);      // закрываем позицию.
            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);
                  return(0);
                 }
              }
           }
        }   
     }
  }
return(0);
}
//Конец.  


}
//Конец.

Victor Nikolaev
Модератор
14046
Victor Nikolaev 2012.02.28 14:59  
aleks-tomsk:

Написал советника, используя некоторые базовые скрипты.

Скомпилировал, устранил ошибки. Сейчас их нет.

Начал пробовать тестировать - нет результата.

В журнале выдает ошибку - TestGenerator: unmatched data error (volume limit 3592 at 2012.02.08 10:00 exceeded).

Подскажите, в чем проблема ?

_________________________________________________________________________________________________


Для тестирования кроме советника обычно нужна история. Ее у Вас похоже пока нету, судя по ошибке
Олег
84
Олег 2012.02.28 15:37  
Vinin:

Для тестирования кроме советника обычно нужна история. Ее у Вас похоже пока нету, судя по ошибке

А как ее создать, историю? Или Вы имеете в виду описание стратегии?
Victor Nikolaev
Модератор
14046
Victor Nikolaev 2012.02.28 15:39  
aleks-tomsk:

А как ее создать, историю? Или Вы имеете в виду описание стратегии?

История это исторические данные. Их можно закачать и загрузить.
Олег
84
Олег 2012.02.28 15:42  
Vinin:

История это исторические данные. Их можно закачать и загрузить.

А где про это можно узнать подробнее?
Boris
3883
Boris 2012.02.28 17:01  
Нажмите F2!
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий