Ищу тестовый Грааль!

 
Короче, ищу subj. Вот мои требования к нему:

- полный исходный код советника-робота (полного робота!);
- использование только стандартных индюкаторов/осцилл в традиционных "непрерывных" интерпретациях - например, RSI+MACD+Envelopes;
- число таких фильтров - не менее 2-3, а лучше больше;
- никаких каналов, Фиб, уровней поддержки/сопротивления, Зигзагов;
- приличная прибыльность на тестовом периоде порядка нескольких лет;
- не пипсовщик;
- использование цен только одного ряда (например, только Close, или только Open).

Такая беспримерная наглость обусловлена тем, что мне он не нужен для рубки реальной капусты. Я знаю цену таким Граалям: почти все они ничего не стоят. Нужен он мне исключительно как мальчик для садистских экспериментов: я собираюсь прогнать его через собственную жесткую процедуру тестирования. Если окажется, что он ее пройдет с честью, приславший его узнает об этом немного позднее. И, конечно, желательно, чтобы он удовлетворял всем формальным критериям устойчивости, принятым в сообществе.

Вначале была идея использовать для этой цели обычный советник MACD, идущий в стандартной сборке от MQ. В принципе результат не так и плох: на 20 месяцах (EURUSD, часовки) после оптимизации по ценам открытия выходит около 2000 пипсов на 108 сделках. Матожидание сделки - 18 с копейками (лот 0.1), просадка с 1000 депозита - порядка 20%. Неплохо, но все же не настолько, чтобы новичок пищал бы от радости и был готов купить его без нормального тестирования и в виде черного ящика.

Тут есть программеры, которые таких Граалей уже кучу написали или видели. Если вы предоставите такой Грааль, который в форвард-тесте сливает, вы ничего не потеряете. Если есть предложения - пишите на мыло, указанное в моем профиле. Заодно я и поясню подробнее, для чего он на самом деле мне нужен. Спасибо.
 
Вот нашел у себя от 4 июля 2005 года. Даже забыл уже про него. Я его уже выкладывал пару раз, не смотря на то, что его трудно назвать подгонкой, торговать так и не поставил. В нем есть маленькая недоговороннесть, но она в принципе устранима :)

#property copyright "VG version indicator, expert version Rosh"
//---- input parameters
extern int       ATRperiod=13;
extern int Slippage=3;
extern double Lots=0.1;
extern double    K_revers=0.1;
extern int       ExpertMagicNumber=1019;
double price=0.0,dk;
int trend,myBars=0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int cnt,ticket,total,mode,totalExpert,CloseResult,i; 
  double value;   
  bool LongOrderExist=false,ShortOrderExist=false,CloseOrderResult;  
//---- 
   SetTrace(); // Трассировка позиций   
 
//************ Проверка позиций советника ******************************
   totalExpert=0;
   total=OrdersTotal();
   if (OrdersTotal()>0)
      {
      for (cnt=0;cnt<total;cnt++)
         {
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
         if ((OrderMagicNumber()==ExpertMagicNumber)&&(Symbol()==OrderSymbol())) 
            {
            totalExpert++;
            if (OrderType()==OP_BUY) LongOrderExist=true;
            if (OrderType()==OP_SELL) ShortOrderExist=true;
            }
         }
      }
//************ Проверка позиций советника ******************************
 
//************ Первичная настройка **************************************
   if (price==0.0)
      {
      if (Close[31]>Open[31]) 
         {
         trend=1;
         dk=iATR(NULL,0,ATRperiod,32);
         price=Close[31]-dk;
         }
      else
         {
         trend=-1;
         dk=iATR(NULL,0,ATRperiod,32);
         price=Close[31]+dk;
         }   
      for (int shift=30;shift>0;shift--)
         {      
         dk=iATR(NULL,0,ATRperiod,shift+1);
         if (trend > 0) 
            {
            if (Low[shift] > price)  price = Close[shift];
            value = price - dk;
            if (Close[shift] < value) 
               {
               price = Close[shift];
               value = price + dk;
               trend = -1;
               }
            } 
         }
         if (trend <0) 
            {
            if (High[shift] < price) price = Close[shift];
            value = price + dk;
            if (Close[shift] > value) 
               {
               price = Close[shift];
               value = price- dk;
               trend = 1;
               }
            }
      }//if (price==0.0)
//************ Первичная настройка **************************************
 
   if (myBars==Bars) return(0);
   Print("Всего ордеров=",total);
   myBars=Bars;
   
//************ Отслеживание тренда **************************************
 
   dk=iATR(NULL,0,ATRperiod,1);
   if (trend > 0) 
      {
      if (Low[1] > price)  price = Close[1];
      value = price - dk;
      if (Close[1] < value) 
         {
         price = Close[1];
         value = price + dk;
         trend = -1;
         }
      } 
 
   if (trend < 0) 
      {
      if (High[1] < price) price = Close[1];
      value = price + dk;
      if (Close[1] > value) 
         {
         price = Close[1];
         value = price- dk;
         trend = 1;
         }
      }
   
//************ Отслеживание тренда **************************************
 
   Print("totalExpert=",totalExpert);
//************ Выставление первого ордера *******************************
   
   if (totalExpert==0)  // выставление первого ордера
      {
      if (trend==1) // ордеров нет, тренд восходящий
         {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0.0,0.0,"buy",ExpertMagicNumber,0,Blue);
         if(ticket<0)
            {
            Print("OrderSend failed with error #",GetLastError());
            return(0);
            }
         return(0);
         }
      if (trend==-1) // ордеров нет, тренд нисходящий
         {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0.0,0.0,"sell",ExpertMagicNumber,0,Red);
         if(ticket<0)
            {
            Print("OrderSend failed with error #",GetLastError());
            return(0);
            }
         return(0);
         }
      }//      if (totalExpert==0)
//************ Выставление первого ордера *******************************
 
//************ Переворот ************************************************
 
   if (totalExpert>0)
      {
      if  ((LongOrderExist)&&(trend==-1))
         {
         for (i=OrdersTotal()-1;i>=0; i--) // закрываем ордера в Long
            {
            OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
            mode=OrderType();
            if (mode==OP_BUY)
               {
               Print("Закрываем Long ордеров ",OrdersTotal());
               CloseResult=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,White);
               if (CloseOrderResult==false) 
                  {
                  Print("OrderClose failed with error #",GetLastError());
                  return(0);
                  }
               Sleep(30000);
               }            
            }//for              
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0.0,0.0,"sell",ExpertMagicNumber,0,Red);
         if(ticket<0)
            {
            Print("OrderSend failed with error #",GetLastError());
            return(0);
            }
         return(0);
 
         }
 
      if  ((ShortOrderExist)&&(trend==1))
         {
         for (i=OrdersTotal()-1;i>=0; i--) // закрываем ордера в Short
            {
            OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
            mode=OrderType();
            if (mode==OP_SELL)
               {
               Print("Закрываем Short ордеров ",OrdersTotal());
               CloseResult=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White);
               if (CloseOrderResult==false) 
                  {
                  Print("OrderClose failed with error #",GetLastError());
                  return(0);
                  }
               Sleep(30000);
               }               
            }//for
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0.0,0.0,"buy",ExpertMagicNumber,0,Blue);
         if(ticket<0)
            {
            Print("OrderSend failed with error #",GetLastError());
            return(0);
            }
         return(0);
                          
         }
      }
 
 
//************ Переворот ******************************************************
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Rosh, а эта функция где?

   SetTrace(); // Трассировка позиций
 
Можете ее выбросить. Она никак не связана с алгоритмом торговли, а предназначена только для рисования стрелок при тестировании.
 
Rosh, спасибо, вижу. Абсолютно по всем моим критериям подходит, кроме одного пункта - последнего ("использование цен только одного ряда (например, только Close, или только Open)").

И еще один вопросик: пытался я его тестировать и даже оптимизировать (часовки, цены открытия), но ни одного положительного результата нет! Может, подскажешь область прибыльности?
 
Странно, неужели не совсем тот. Нужно тестить на Евре 4-часах по ценам открытия. Сейчас поверить не могу, если не тот, поищу еще раз.
 
Ага, все-таки дает профит, но в 2004 году. Дальше вроде как сливает. Ладно, отложим его на потом, а пока я все же надеюсь на новых кандидатов.

Мое последнее требование - использование цен только одного ряда (например, только Close, или только Open) - остается. Если оно нарушено, я не смогу его тестировать, так как нет нужного инструментария.
 

А какой у вас замысел?
Может вот это подойдет?
http://grailholder.blogspot.com
Пишите, поговорим.

 
Aleksey24, это не то же самое, что ты в теме 'g' опубликовал? Я написал тебе в блог.
 

Советую изучить:
http://forum.viac.ru/viewtopic.php?p=68234#68234

Там Rosh выложил пипсовик - просто бомба.

Если бы не черезмерное количество сделок - самый натуральный грааль.

Я например игрался с ним 3 дня - результаты обалденно-устойчивые.

Но так как я так и не поверил в логику этого алгоритма, пришлось отправить в утиль.

 
А чему там верить, Aleksey24? Логика тривиальна, а сама система в долговременном плане не может ничего иного, как сливать или давать такие бешеные просадки, что мама не горюй. Тестирование системы на 3 днях - это несерьезно, извини.
Причина обращения: