Эксперт без индикаторов! Прошу высказать свою критику и предложения[идеи] что можно улучшить

 
Что еще интересно это то что он не работает на тестере стратегий как надо это происходит изза того что тестер отрисовывает уже сформировавшиеся бары. Вообщем идея такая если high[1]<high[0] && low[1]<low[0] то buy в этом случае стоп лос ставим на low[1] после формирования очередного бара передвигаем его на новый уровени low. Меня интересуют Ваши мнения что можно улучшить, так как используя такой метот покупка и продажа происходит почти на каждом баре, нужен какой то фильтр чтобы действия выплнялись на сильных движениях. Думаю может както объемы сюда приписать. Но что то пока никаких свежых идей.
 
extern double TakeProfit = 11;
extern double Lots = 2;
extern double TrailingStop = 1;
extern double Delta = 3;
 
//+----------------------------------------------------------------+
 
int start()
  {
   
   double buy, sell;
 
   int cnt, ticket, total;
 
// initial data checks --------------------------------------------+
 
   if(Bars<100)
     {
      Print("bars less than 100");
      return(0);  
     }
   if(TakeProfit<2)
     {
      Print("TakeProfit less than 200");
      return(0);  // check TakeProfit
     }
 
       
   total=OrdersTotal();
   if(total<1) 
     {
      // no opened orders identified
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);  
        }
        
//      000000    00    00   00    00                                            00
//      00   00   00    00    00  00                                            0000
//      000000    00    00     0000                                           00000000
//      00   00   00    00      00                                               00
//      000000     000000       00                     0000000000000000000000000000
 
      if((Low[1]-Delta*Point)<Low[0] && (High[1]+Delta*Point)<High[0] )
      
        {                                         //Ask-TrailingStop*Point,Ask+TakeProfit*Point стоплос  работает при =1000
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Low[1]-Delta*Point,Ask+TakeProfit*Point,"priceEX",16384,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); //MODE_TRADES
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
        }
        
//      0000000   0000000   00        00               0000000000000000000000000000
//      00        00        00        00                                         00
//      0000000   00000     00        00                                      00000000 
//           00   00        00        00                                        0000
//      0000000   0000000   0000000   0000000                                    00
 
       if((High[1]+Delta*Point)>High[0] && (Low[1]-Delta*Point)>Low[0] )
        
        {                                         //Bid+TrailingStop*Point,Bid-TakeProfit*Point
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,5,High[1]+Delta*Point,Bid-TakeProfit*Point,"priceEX",16384,0,Red);
         if(ticket>0)
           {                                    
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); //,MODE_TRADES
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
      return(0);
     }
 
//                                                                                 00
//                                                                                00 
//      0000000   00         000000    0000000   00000000                        00 
//     00         00        00    00   00        00                     00      00
//     00         00        00    00   0000000   000000                  00   000
//     00         00        00    00        00   00                       000000
//      0000000   00000000   000000    0000000   00000000                  0000
  
   for(cnt=0;cnt<total;cnt++)
     {              
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);              
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())  
        {
         if(OrderType()==OP_BUY)   
           {
             if(Low[0]<(Low[1]-Delta*Point))
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid,5,Violet); 
                 return(0); // exit
                }
                
            // check for trailing stop
            if(TrailingStop>0)  
              {                 
               if(Low[1]>Low[2])
                 {
                  if(1==1)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Low[1]-Delta*Point,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else // go to short position
           {
           
           
              if(High[0]>(High[1]+Delta*Point))
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,5,Violet); 
               return(0); // exit
              }
              
            // check for trailing stop
            if(TrailingStop>0)  
              {                 
               if(High[1]<High[2])
                 {
                  if(1==1)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),High[1]+Delta*Point,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
  }
// the end.
 

Первым делом необходимо сузить территорию поиска.
Прежде чем улучшить, нужно решить что делать с таймфреймами?
На одних поставить стоп просто не дадут, на других поставив стоп мы можем месяц сидеть без работы. ИМХО.
Доказывать ничего не буду. Устал уже :)

 

Таймфрейм 4часа думаю стоп лос там установить можно. тейк профит не подбирал еще проблема в том что на истории этот советник не потестируешь! но если посмотреть на график 4часа usdjpy то мне кажется есть смысл в таком коде. Также может кто-то видит какието явные ошибки. Буду признателен есле мне на них укажут!

 

Пробовали ли Вы воспроизвести механизм одного рабочего цикла внутри четырёхчасового таймфрейма потиково, или по минутным данным?
Т.е. с момента отсутствия позиций до открытия, срабатывания, закрытия и опять отсутствия позиций?
Влияет ли использование нулевого бара на конечный итог работы цикла по Вашему мнению?

 
Да в данной системе необходимо именно потиковое формирование бара, если я правильно Вас понял. Т.к. совершение сделки необходимо именно при преодолении уровня high low. А как воспроизвести механизм потиково внутри 4часов не имею понятия понятия, пока. Сейчас поставил его на демо счет. Пока раз пять давал тейк профит. Вот возможность объеденится, на мой взгляд. Т.к. пока у меня никаких положительных идей нету. Возможно нужно как то соеденить систему на которую дал ссылку Roch с этой но я пока не разбирался.
 

Если разобрать весь механизм действия, то по принципу торговли советник можно назвать работающим "на пробой"?
Если это так, то нужно изучать пробойные системы и методы, так как у них есть свои специфические особенности без учёта которых затраты на небольшие флеты будут превышать прибыли от больших трендов.

 

Смотрю на визуализацию тестирования вашего советника и вижу, что тестер работает точно согласно запрограмированной логике и не отрисовывает сходу нулевой бар, а может моделировать его развитие согласно минутным графикам, например. Всё точно как заявлено разработчиками. Слава богу, ваш алгоритм открытия простой, поэтому наглядно легко определить правоту тестера. Попробуйте.

 
Может быть не совсем в тему, но хочу сказать, что если вы хотите, чтобы ваш Советник работал на 4-х часовом таймфрейме в процессе формирования нулевого бара, то Советник нужно приклеплять (и тестировать) на более мелких таймфреймах, а данные по барам 4-х часового таймфрейма (high[0] && low[0]) брать, используя или функции iHigh(), iLow(), или данные с текущего таймфрейма, согласовывая их со временем 4-х часовика (в 4-00, в 12-00 и т.п.).
Причина обращения: