как ввесли индикатор в советник?!

 

Есть индикатор Cronex Taichi сделанный по Ишимоку. https://www.mql5.com/ru/code/7335

Ни как не могу понять что я делаю не так, но этот индикатор ни как не хочет работать в советнике!?

Несколько раз прочитал комментарии к индикатору, вроде все правильно..?!

P.S. индикатор переименован в Новый ишимоку.

extern double Lots = 0.1;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double TrLer_1,TrLeb_1,Pril_3,Pril_2,Pril_1;
   double Pril3_3,Pril3_2,Pril3_1,FlatLevelUp,FlatLevelDn,Fr2,Fr1,Fg2,Fg1;
   double P_up0,P_down0,P_up1,P_down1;
   int i, cnt, ticket, total;
   bool flag=true;
   if(Bars<100)
     {
      Print("bars less than 100");
      return(0);  
     }
     // Проверяем стоит ли открываться
   
   cnt=OrdersHistoryTotal()-1;
   for(i=cnt;i>=0;i--) {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY )) continue;
      if(OrderOpenTime()>=Time[0]) { // Time[0] - если позиция открывается на нулевом баре текущего символа
         flag=false;
         break;
      }
   }
   cnt=OrdersTotal()-1;
   for(i=cnt;i>=0;i--) {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if(OrderOpenTime()>=Time[0]) { // Time[0] - если позиция открывается на нулевом баре текущего символа
         flag=false;
         break;
      }
   }
 
   FlatLevelUp=iCustom(0,0,"Новый ишимоку",9,26,52,4,1);
   FlatLevelDn=iCustom(0,0,"Новый ишимоку",9,26,52,5,1);
   Fr2=iCustom(0,0,"Новый ишимоку",9,26,52,1,1);
   Fr1=iCustom(0,0,"Новый ишимоку",9,26,52,1,1);
   Fg2=iCustom(0,0,"Новый ишимоку",9,26,52,2,1);
   Fg1=iCustom(0,0,"Новый ишимоку",9,26,52,2,1);
//задали все данные 
 
   // Проверка свободной маржи
   if(AccountFreeMargin()<(1000*Lots)) {
      Print("We have no money. Free Margin = ", AccountFreeMargin());
      return(0); 
   }
   total=OrdersTotal();
// Условие открытие позиции BUY
   if(Fr2<Fg2&&Fr1>Fg1&&(FlatLevelUp==0||FlatLevelDn==0)) 
   {
      if((total>0) || (!flag)) return(0);
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",0,0,Green);
      if(ticket>0) {
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Alert("Покупка: ",OrderOpenPrice()); 
      }  else Alert("ошибка:по цене ",OrderOpenPrice()); 
      return(0); 
   }
      
// Условие открытие позиции SELL
   if(Fr2>Fg2&&Fr1<Fg1&&(FlatLevelUp==0||FlatLevelDn==0)) 
   {
      if((total>0) || (!flag)) return(0);
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",0,0,Red);
      if(ticket>0) {
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Alert("Покупка: ",OrderOpenPrice()); 
      }  else Alert("ошибка:по цене ",OrderOpenPrice()); 
      return(0); 
   }
  
   for(i=cnt;i>=0;i--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) {
         if(OrderType()==OP_BUY) {// длинная позиция открыта
// условие закрытие длинной позиции
            if(Fr2>Fg2&&Fr1<Fg1) {
               OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); 
               return(0); 
            }
         }  else {
// условие закрытия короткой позиции
               if(Fr2<Fg2&&Fr1>Fg1) {
                  OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); 
                  return(0); 
               }
            }
      }
   }
   return(0);
}
 
знатоки если такие есть подсобите.
 
Kostay писал (а) >>
знатоки если такие есть подсобите.


перенести в код советника индикатор


https://www.mql5.com/ru/articles/1463

https://www.mql5.com/ru/articles/1456

---


но если у вас вобще не получается работать с индикатором то данные статьи лучше не читать

сначала как минимум Вы должны понять как работает индикатор!

спокойно работать с ним по iCustom

---

перенос делается в основном для поднятия скорости...

для увеличения секретности

 

Я понял, что автор просто хочет заставить работать выложенный код, до интеграции кода индикатора в советник еще как до Киева....

Проверьте номера буферов вызываемого индикатора, там собака порылась. С первого взгляда видно, что Вы разным переменным присваиваете одинаковые значения.

Пропишите Comment или Print для всех вызываемых значений, и все увидите.

   Fr2=iCustom(0,0,"Новый ишимоку",9,26,52,1,1);
  
Fr1=iCustom(0,0,"Новый ишимоку",9,26,52,1,1);//Fr1=Fr2
   Fg2=iCustom(0,0,"Новый ишимоку",9,26,52,2,1);
  
Fg1=iCustom(0,0,"Новый ишимоку",9,26,52,2,1);//Fg1=Fg2
 
granit77 писал (а) >>

Я понял, что автор просто хочет заставить работать выложенный код, до интеграции кода индикатора в советник еще как до Киева....

Проверьте номера буферов в вызываемого индикатора, там собака порылась. С первого взгляда видно, что Вы разным переменным присваиваете одинаковые значения.

Пропишите Comment или Print для всех вызываемых значений, и все увидите.


Да верно. Хочу чтоб этот индикатор просто заработал в советнике.

ошибку я исправил. До этого все индикаторы пользовательские вводил без проблем, все нормально.

Но этот...??

extern double Lots = 0.1;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double TrLer_1,TrLeb_1,Pril_3,Pril_2,Pril_1;
   double Pril3_3,Pril3_2,Pril3_1,FlatLevelUp,FlatLevelDn,Fr2,Fr1,Fg2,Fg1;
   double P_up0,P_down0,P_up1,P_down1;
   int i, cnt, ticket, total;
   bool flag=true;
   if(Bars<100)
     {
      Print("bars less than 100");
      return(0);  
     }
     // Проверяем стоит ли открываться
   
   cnt=OrdersHistoryTotal()-1;
   for(i=cnt;i>=0;i--) {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY )) continue;
      if(OrderOpenTime()>=Time[0]) { // Time[0] - если позиция открывается на нулевом баре текущего символа
         flag=false;
         break;
      }
   }
   cnt=OrdersTotal()-1;
   for(i=cnt;i>=0;i--) {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if(OrderOpenTime()>=Time[0]) { // Time[0] - если позиция открывается на нулевом баре текущего символа
         flag=false;
         break;
      }
   }
 
   FlatLevelUp=iCustom(0,0,"Новый ишимоку",9,26,52,4,1);
   FlatLevelDn=iCustom(0,0,"Новый ишимоку",9,26,52,5,1);
   Fr2=iCustom(0,0,"Новый ишимоку",9,26,52,1,2);
   Fr1=iCustom(0,0,"Новый ишимоку",9,26,52,1,1);
   Fg2=iCustom(0,0,"Новый ишимоку",9,26,52,2,2);
   Fg1=iCustom(0,0,"Новый ишимоку",9,26,52,2,1);
//задали все данные 
 
   // Проверка свободной маржи
   if(AccountFreeMargin()<(1000*Lots)) {
      Print("We have no money. Free Margin = ", AccountFreeMargin());
      return(0); 
   }
   total=OrdersTotal();
// Условие открытие позиции BUY
   if(Fr2<Fg2&&Fr1>Fg1&&(FlatLevelUp==0||FlatLevelDn==0)) 
   {
      if((total>0) || (!flag)) return(0);
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",0,0,Green);
      if(ticket>0) {
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Alert("Покупка: ",OrderOpenPrice()); 
      }  else Alert("ошибка:по цене ",OrderOpenPrice()); 
      return(0); 
   }
      
// Условие открытие позиции SELL
   if(Fr2>Fg2&&Fr1<Fg1&&(FlatLevelUp==0||FlatLevelDn==0)) 
   {
      if((total>0) || (!flag)) return(0);
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",0,0,Red);
      if(ticket>0) {
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Alert("Покупка: ",OrderOpenPrice()); 
      }  else Alert("ошибка:по цене ",OrderOpenPrice()); 
      return(0); 
   }
  
   for(i=cnt;i>=0;i--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) {
         if(OrderType()==OP_BUY) {// длинная позиция открыта
// условие закрытие длинной позиции
            if(Fr2>Fg2&&Fr1<Fg1) {
               OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); 
               return(0); 
            }
         }  else {
// условие закрытия короткой позиции
               if(Fr2<Fg2&&Fr1>Fg1) {
                  OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); 
                  return(0); 
               }
            }
      }
   }
   return(0);
}
 
Ковыряйтесь дальше, принтуйте значения  и "успех" придет. Я не знаток, поэтому делать Вам ничего не буду, но ободрить могу. Все там выводится, но советник сливной, пробовал. :)
 

спосибо за ободрение. Да вот только не все золото что блестит и наоборот.

а советник с некоторыми измененными данными (поэтому сливной!) а на ручнике хорошо идет вверх.

Хотя и на том спасибо "не знаток"!

 

Я не гонял Ваш советник, просто давненько уже, как выкинул свой советник по Taichi, оказавшийся сливным. Как и на пересечениях МА, советник снимал затяжные тренды, потом растрачивал

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

глазами и мозгами.

Мне не удалось устранить эти недостатки и я поставил на нем крест. Может быть, Вы найдете способ это поправить, удачи в поисках.

Причина обращения: