Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 419

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

Попробуйте так.

Инициализируем массив OrderBU[1].

Сначала увеличиваем размер массива ( ArrayResize(OrderBU,NorderBU+1) ), затем OrderBU[NorderBU]=OrderTicket();NorderBU++;

 
new-rena:

Попробуйте так.

Инициализируем массив OrderBU[1].

Сначала увеличиваем размер массива ( ArrayResize(OrderBU,NorderBU+1) ), затем OrderBU[NorderBU]=OrderTicket();NorderBU++;

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

 Подскажите пожалуйста такой момент.

К примеру, у нас есть на графике индикатор Williams Percent Range(%R), и мы из навигатора перетаскиваем в его окно индикатор On Balance Volume(OBV). 

https://charts.mql5.com/8/675/xauusd-h4-metaquotes-software-corp.png 

 %R - работает в диапазоне 0 - -100 %, у OBV - нет конкретной привязки.

Когда OBV находится в окне %R, мы визуально видим, что он заходит за -20 или -80%.

Как в советнике получить данные о том что  OBV находится выше -20% или ниже -80%.

Как привязать OBV в кастомном индикаторе к диапазону 0 - -100 %?  Нормализовать его к нему (диапазону)? Как это сделать?  

Нормализовать  OBV к %R , я так понимаю, не надо (картинка будет другая).

Может это элементарно, я с этим просто не сталкивался.   

 
-Aleks-:
Подскажите пожалуйста, как реализовать в коде такую вещь.
Есть базовая переменная A, если она меньше нуля, то используем ещё пять переменных - значение присваиваются из функции вызова индикатора - iCustom.
Получив значения их надо ранжировать - найти значения больше и меньше переменной A и из двух групп определить - максимальное, минимальное, среднее значение.
Думаю, что надо использовать массив, но не совсем понимаю как.

 if (p1>p2&&p1>p3) , if (p2>p1&&p2>p3) ,   if (p3>p2&&p3>p1)

я так делаю,  

 

Нужен плавающий параметр Лота, первый лот задает пользователь далее к данному параметру  больше не обращаемся, а советник работает сам и при убытке  поднимает лот на максимально указанный в программе  ( или внешней переменной ) , при прибыли уменьшил его на указанное количество . 

Если параметр впишу в "Init " советник перестанет обращаться к внешней переменной лота ? 

или как это сделать?  

это примерное выражение . 

 
Здрвствуйте. Подскажите пожалуйста как использовать данные о новостях в советнике? Нужен ли индикатор для этого, или Советник может сам найти важные новстьи? 
 
Leanid Aladzyeu:

 if (p1>p2&&p1>p3) , if (p2>p1&&p2>p3) ,   if (p3>p2&&p3>p1)

я так делаю,  

Этого не удобно, особенно при большом количестве параметров...

Интересно решение через массив. Особенно интересно, как найти ближайшее значение переменной при усреднении общего числа значений.

 
first_may:

Добрый вечер. Пытаюсь написать простой советник на пересечении тенкана и кинджуна. Вот код:

void OnTick()

void OnTick()

  {

   TradeSignal_20();

  }


int TradeSignal_20()

  {

   int sig=0;


   if(h_ich==INVALID_HANDLE)

   {

      h_ich=iIchimoku(Symbol(),Period(),IKHtenkansen,IKHkijunsen,IKHsenkouspanb);

      return(0);

   }

   else

   {

      if (CopyBuffer(h_ich,0,0,3,ich1_buffer)<2) return(0); // TENKANSEN_LINE

      if (CopyBuffer(h_ich,1,0,3,ich2_buffer)<2) return(0); // KIJUNSEN_LINE

      if (!ArraySetAsSeries(ich1_buffer,true)) return(0);

      if (!ArraySetAsSeries(ich2_buffer,true)) return(0);

   }

   

   //--- проводим проверку условия и устанавливаем значение для sig

   if (ich1_buffer[1]>ich2_buffer[1]) sig=1;

   else if(ich1_buffer[1]<ich2_buffer[1]) sig=-1;

   else sig=0;

   

   if (ich1_buffer[1]>ich2_buffer[1])

      if (ich1_buffer[2]<ich2_buffer[2])

         Alert(Symbol()+": покупка");

   

   if (ich1_buffer[1]<ich2_buffer[1])

      if (ich1_buffer[2]>ich2_buffer[2])

         Alert(Symbol()+": продажа");

   

   

   //--- возвращаем торговый сигнал

   return (sig);

  }

//+------------------------------------------------------------------+

 

Как сделать так, что бы алерт вызывался  только один раз, а не постоянно?

Прогонять не каждый тик, а как нужно.
 
Vasiliy Smirnov:
Прогонять не каждый тик, а как нужно.
А как нужно? При открытии нового бара - тогда сделайте проверку на новый бар...
Причина обращения: