Советники: Советник по RSIOMA - страница 3

 


Потестим, может со временем стабильности прибавится:))

 

Если у кого не получается скачать вот код советника:

//+------------------------------------------------------------------+
//| FT_RSIOMA_EA.mq4.mq4
//| Copyright © 2010, FORTRADER.RU. Отклонение от средней
//| http://www.fortrader.ru Исследование для 64 выпуска журнала FORTRADER.RU
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, FORTRADER.RU. Отклонение от средней"
#property link      "http://www.fortrader.ru Исследование для 64 выпуска журнала FORTRADER.RU"
extern string i = "Настройки индикатора";
extern int RSIOMA          = 14;
extern int RSIOMA_MODE     = MODE_EMA;
extern int RSIOMA_PRICE    = PRICE_CLOSE;
extern int Ma_RSIOMA       = 21,
           Ma_RSIOMA_MODE  = MODE_EMA;
extern int BuyTrigger      = 80;
extern int SellTrigger     = 20;
extern color BuyTriggerColor  = DodgerBlue;
extern color SellTriggerColor = Magenta;
extern int MainTrendLong   = 50;
extern int MainTrendShort  = 50;
extern color MainTrendLongColor     = Red;
extern color MainTrendShortColor    = Green;
extern int      EA_Magic=12354;  
extern double InpLots      =0.1; 
extern int    InpTakeProfit=0;  
extern int    InpStopLoss  =0;  
int start()
  {int err;
  
   double STP = InpTakeProfit;
   double TKP = InpStopLoss;
   if(Digits==5 || Digits==3)
     {
      STP = STP*10;
      TKP = TKP*10;
     }
  //запускаем трейлинг стоп
  err=TrailingStop();
  //смотрим не было ли ошибок
  if(err<0){Print("TrailingStop()-  Ошибка трейлинга. "+GetLastError());return(0);}
  
double RSIOMA_1=iCustom(NULL, 0, "RSIOMA_v2",RSIOMA,RSIOMA_MODE,RSIOMA_PRICE,Ma_RSIOMA,Ma_RSIOMA_MODE,BuyTrigger,SellTrigger,BuyTriggerColor,SellTriggerColor,MainTrendLong,MainTrendShort,MainTrendLongColor,MainTrendShortColor,0,1);
double RSIOMA_2=iCustom(NULL, 0, "RSIOMA_v2",RSIOMA,RSIOMA_MODE,RSIOMA_PRICE,Ma_RSIOMA,Ma_RSIOMA_MODE,BuyTrigger,SellTrigger,BuyTriggerColor,SellTriggerColor,MainTrendLong,MainTrendShort,MainTrendLongColor,MainTrendShortColor,5,1);
double RSIOMA_1L=iCustom(NULL, 0, "RSIOMA_v2",RSIOMA,RSIOMA_MODE,RSIOMA_PRICE,Ma_RSIOMA,Ma_RSIOMA_MODE,BuyTrigger,SellTrigger,BuyTriggerColor,SellTriggerColor,MainTrendLong,MainTrendShort,MainTrendLongColor,MainTrendShortColor,0,2);
double RSIOMA_2L=iCustom(NULL, 0, "RSIOMA_v2",RSIOMA,RSIOMA_MODE,RSIOMA_PRICE,Ma_RSIOMA,Ma_RSIOMA_MODE,BuyTrigger,SellTrigger,BuyTriggerColor,SellTriggerColor,MainTrendLong,MainTrendShort,MainTrendLongColor,MainTrendShortColor,5,2);
if(RSIOMA_1<RSIOMA_2 && RSIOMA_1L>RSIOMA_2L && !ChPos(1) && timecontrol()==true){OpenOrderOnMarket(1,TKP,STP);}
if(RSIOMA_1>RSIOMA_2 && RSIOMA_1L<RSIOMA_2L && !ChPos(0) && timecontrol()==true){OpenOrderOnMarket(0,TKP,STP);}
if(RSIOMA_1>RSIOMA_2 && ChPos(1)){_OrderClose(0);}
if(RSIOMA_1<RSIOMA_2 && ChPos(0)){_OrderClose(1);}
//Print(RSIOMA_1+" "+RSIOMA_2);
   return(0);
  }
 //проверяет есть ли открытые ордера
int ChPos(int type) 
{//подробное описание: http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=100
   int i;bool col=false;
   for( i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) 
       {                                   
           if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && type==0&& OrderMagicNumber()==EA_Magic){col=true;}
           if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && type==1&& OrderMagicNumber()==EA_Magic){col=true;}
       }
    }   
return(col);
}
int OpenOrderOnMarket(int type,int slpips,int tppips)
{double op,sl,tp;int err;
   
   if(type==0)
   {
   op=Ask;if(slpips>0){sl=op-slpips*Point;}if(tppips>0){tp=op+tppips*Point;}
   err=OrderSend(Symbol(),OP_BUY,InpLots,NormalizeDouble(op,Digits),3,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),"56 FORTRADER.RU",EA_Magic,0,Red);
   if(err<0){Print("OrderSend()-  Ошибка OP_BUY.  op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);}
   }
   
   if(type==1)
   {
    op=Bid;if(slpips>0){sl=op+slpips*Point;}if(tppips>0){tp=op-tppips*Point;}
    err=OrderSend(Symbol(),OP_SELL,InpLots,NormalizeDouble(op,Digits),3,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),"56 FORTRADER.RU",EA_Magic,0,Red);
    if(err<0){Print("OrderSend()-  Ошибка OP_SELL.  op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);}
   }
return(0);
}
//Закрывает позицю по типу
int _OrderClose(int type)
   {//http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=99
   
   int err;
   for(int i=1; i<=OrdersTotal(); i++)          
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) 
        {
         if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && type==1 && OrderMagicNumber()==EA_Magic)
         {
          err=OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); 
          if(err<0){Print("OrderClose()-  Ошибка закрытия OP_BUY.  OrderTicket "+OrderTicket()+" OrderLots() "+OrderLots()+" Bid "+Bid+" "+GetLastError());return(-1);}
         }
         if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && type==0 && OrderMagicNumber()==EA_Magic)
         {
          err=OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); 
          if(err<0){Print("OrderClose()-  Ошибка закрытия OP_SELL.  OrderTicket "+OrderTicket()+" OrderLots() "+OrderLots()+" Ask "+Ask+" "+GetLastError());return(-1);}
         }
        }
       }
   return(0);
   }
extern int TrailingStop=20;
extern int TrailingStep=5;
int  TrailingStop()
{int i;bool err;int mn=1;
if(Digits==5 || Digits==3)
     {
      mn = 10;
     }
     
   for( i=1; i<=OrdersTotal(); i++)        
   {
      if(OrderSelect(i-1,SELECT_BY_POS)==true)
       {  
        if(TrailingStop>0 && OrderType()==OP_BUY && OrderSymbol()==Symbol())  
        {                
         if(Bid-OrderOpenPrice()>=TrailingStop*Point*mn && TrailingStop>0 && ( (Bid-Point*TrailingStop*mn)>OrderStopLoss() || OrderStopLoss()==0))
          {
           if(((Bid-Point*TrailingStop*mn)-OrderStopLoss())>=TrailingStep*Point*mn)
           {
            Print("ТРЕЙЛИМ");
            err=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop*mn,OrderTakeProfit(),0,Green);
            if(err==false){return(-1);}
            GlobalVariableSet(DoubleToStr(OrderTicket(),0),Bid);
           }//if(Bid>=OrderStopLoss()
          }//if(Bid-OrderOpenPrice()
         }//if(BBUSize>0
        }//if(OrderSelect(i
           
       if(OrderSelect(i-1,SELECT_BY_POS)==true)
       {
        if(OrderType()==OP_SELL && OrderSymbol()==Symbol() )  
        {        
         if(OrderOpenPrice()-Ask>=TrailingStop*Point*mn && TrailingStop>0 && (OrderStopLoss()>(Ask+TrailingStop*Point*mn) || OrderStopLoss()==0))
          {
           if((OrderStopLoss()-(Ask+TrailingStop*Point*mn))>TrailingStep*Point*mn || OrderStopLoss()==0)
           {
            Print("ТРЕЙЛИМ");
            err=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point*mn,OrderTakeProfit(),0,Green);
            if(err==false){return(-1);}
           }//if(Ask<=OrderStopLoss()
          }//if(OrderOpenPrice()
         }//if(BBUSize>0 
       }// if(OrderSelect
    }// for( i=1;
return(0);
}
extern int time=1; //1 - включено, 0 - выключено.
extern int starttime = 4; 
extern int stoptime = 9; 
//Ограничение по времени
int timecontrol()
{// Подробное описание http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=1
   if ( ( (Hour()>=0 && Hour()<=stoptime-1) ||  (Hour()>=starttime && Hour()<=23)) && starttime>stoptime)
      {
      return(1);
      }  
      if ( (Hour()>=starttime && Hour()<=stoptime-1) && starttime<stoptime)
      {
      return(1);
      }  
      
   if(time==0){ return(1);}
     
return(0);
}
 

При тесте на всех тиках в журнале так и пишет: 2010.12.21 23:02:35 2010.01.04 00:00 RSIOMA_v2 GBPUSD,H1: unknown subwindow number -1 for ObjectCreate function
может из а этого по всем тика так долго прогоняется.....

 
marker:

При тесте на всех тиках в журнале так и пишет: 2010.12.21 23:02:35 2010.01.04 00:00 RSIOMA_v2 GBPUSD,H1: unknown subwindow number -1 for ObjectCreate function
может из а этого по всем тика так долго прогоняется.....


По тикам тестить не нужно советники которые работают по 1 бару.(закрытому) В основном все мои советники работают по принципу работы на закрытом баре, поэтому моделирование по тикам не требуется.
 

Протестил с теми же настройками что и вчера, только время прооптил:

Тест периода оптиизации с 01.01.2010 по 02 октября 2010 года.

Форвард с 02 октября 2010 по 19 декабря 2010 года

Старт тайм 22, стоп тайм 8.

Возможно нужно прооптить заново за этот период уже вместе со всеми параметрами, но думаю результат не будет сильно отличаться.

Вывод: на форвард периоде советник при торговле по времени дает более стабильный результат, менее доходный, но не "рваный".

 
marker:

Он у меня сейчас стоял в терминале, но я его забыл отключить и он странно как то сделку открыл в селл в 22:00 на альп-и, на индикаторе жирная синяя пересекла тонкую синию сверху вниз,но они находятся внизу, совсем далеко от 80 и даже ниже 50, или так должно быть?:)


Он правильно сделку открыл? Вчера в 22:00.
 
marker:
marker:

Он у меня сейчас стоял в терминале, но я его забыл отключить и он странно как то сделку открыл в селл в 22:00 на альп-и, на индикаторе жирная синяя пересекла тонкую синию сверху вниз,но они находятся внизу, совсем далеко от 80 и даже ниже 50, или так должно быть?:)


Он правильно сделку открыл? Вчера в 22:00.

Это зависит от параметров которые в нем установлены.
 
fortrader.ru:
marker:
marker:

Он у меня сейчас стоял в терминале, но я его забыл отключить и он странно как то сделку открыл в селл в 22:00 на альп-и, на индикаторе жирная синяя пересекла тонкую синию сверху вниз,но они находятся внизу, совсем далеко от 80 и даже ниже 50, или так должно быть?:)


Он правильно сделку открыл? Вчера в 22:00.

Это зависит от параметров которые в нем установлены.

Параметры вроде были по умолчанию, меня удивило то что он внизу открылся, ниже 80 и 50....
 

У меня вот еще такой вопрос, может не по теме, но так как данный вопрос обсуждался в вашем журнале, то обращюсь к вам: журнал №17 от декабря 2009 года, статья Сортировка истории сделок (автор: Игорь Герасько). Хочу протестить портфель ботов ( у вас в журнале кстати тоже нечто подобное было), хочу установить 8 терминалов и повесить по одному советнику на каждый терминал, задав в каждом терминале один и тот же счет (почему именно так, потому что при установке 8 советников в один терминал все виснет). Так вот, хочу что бы все сделки (при помощи скрипта) сохранялись в один файл и там сортировались по советникам (по мэджикам), это возможно или нужно будет 8 скриптов и сделки каждого советника будут сохраняться в отдельный файл? И еще вопрос: есть ли такой скрипт под МТ5? Один из советников торгует на МТ5.

 
marker:
ramses:

почему то не получается скачать файлы

Я только что скачал, все ок:)

Как думаете фильтровать ложные сигналы? Запас по профиту огромнейший!! Как думаете увеличивать профит?
Причина обращения: