MQL4. Канал

 
Кто знает как прописать в советнике запрет открытия ордеров внутри канала? 
 
Anna_89:
Кто знает как прописать в советнике запрет открытия ордеров внутри канала? 

Если известны границы канала, то просто запрещаем открывать рыночные ордера. С отложениками сложнее, надо проверять находятся ли они внутри канала или вне его. Внутри - удаляем.

Правда есть еще спред. Его тоже надо учитывать.

Если просто, то примерно так для рыночных ордеров

double UP=0; // Верхняя граница
double DN=0; // Нижняя граница
double Price=0; // Текущая цена
....... // Расчет границ канала и текущей цены

if (Price<=UP && Price>=Dn) return;

...... // цена вне границ канала, продолжаем работу

 Для ускорения работы условие можно оптимизировать. Точнее упростить

 

Добавлю более оптимальное условие.

Если будет необходимость - переведу на понятный язык

if ((UP-Price)*(DN-Price)<=0) return;

 Просто умножение и простое логическое выражение выполняются быстрее чем сложное логическое

 
Victor Nikolaev:

Добавлю более оптимальное условие.

Если будет необходимость - переведу на понятный язык

 Просто умножение и простое логическое выражение выполняются быстрее чем сложное логическое

Напиши логин скайпа. Мне интересно пообщаться с хорошим программистом.
 
Anna_89:
Напиши логин скайпа. Мне интересно пообщаться с хорошим программистом.
можешь подсказать как прописать условие открытия и закрытия индикатора zigzag? Я уже все перепробовала, но советник не открывает по сигналам zigzag.
 
Anna_89:
можешь подсказать как прописать условие открытия и закрытия индикатора zigzag? Я уже все перепробовала, но советник не открывает по сигналам zigzag.

Подскажи пожалуйста где в коде вставляется if ((UP-Price)*(DN-Price)<=0) return;

У меня все равно выходят сделки внутри канала.

 
   double MA_1=0; // Верхняя граница
   double MA_2=0; // Нижняя граница
   double Price=0; // Текущая цена
   
   double MA_0=iCustom(Symbol(),0,"TriangularMA centered abands alerts 2",TimeFrames,HalfLength,Price,BandsDeviations,1,1);
   MA_1=iCustom(Symbol(),0,"TriangularMA centered abands alerts 2",TimeFrames,HalfLength,Price,BandsDeviations,1,2);
   MA_2=iCustom(Symbol(),0,"TriangularMA centered abands alerts 2",TimeFrames,HalfLength,Price,BandsDeviations,1,3);
   
   int tiket,cnt,total=OrdersTotal();

   if(Time[0]==prevtime)
      return(0);
   prevtime=Time[0];

   if(OrdersTotal()<1)
   if((MA_1-Price)*(MA_2-Price)>=0)
     {
      if(MA_1<MA_0)
        {
         tiket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0,"",Magic,0,clrGreen);
         if(tiket>0)
           {
            if(OrderSelect(tiket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
           }
         else
           {
            Print("Error opening BUY order : ",GetLastError());
            return(0);
           }
        }
      else if(MA_2>MA_0)
        {
         tiket=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,"",Magic,0,clrRed);
         if(tiket>0)
           {
            if(OrderSelect(tiket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
           }
         else
           {
            Print("Error opening SELL order : ",GetLastError());
            return(0);
           }
        }
     }
 
Anna_89:

Подскажи пожалуйста где в коде вставляется if ((UP-Price)*(DN-Price)<=0) return;

У меня все равно выходят сделки внутри канала.

Разберите работу с функцией

https://docs.mql4.com/ru/indicators/icustom 

 

С ЗигЗагом помочь не с могу. 

iCustom - Документация на MQL4
  • docs.mql4.com
iCustom - Документация на MQL4
 
Если что, то скайп в профиле
Причина обращения: