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

 
Vitaly Muzichenko:

К сожалению, статью не встречал, может кто другой подскажет.

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

Я ставлю мышкой.

  • Щелчок выше цены+Ctrl - Sell Limit
  • Щелчок ниже цены+Ctrl -Buy Limit
  • Щелчок выше цены+Ctrl+Shift - Buy Stop
  • Щелчок ниже цены+Ctrl+Shift - Sell Stop
Можно ещё с шифтом ставить BuyStopLimit и SellStopLimit
 
Artyom Trishkin:

Я ставлю мышкой.

  • Щелчок выше цены+Ctrl - Sell Limit
  • Щелчок ниже цены+Ctrl -Buy Limit
  • Щелчок выше цены+Ctrl+Shift - Buy Stop
  • Щелчок ниже цены+Ctrl+Shift - Sell Stop
Можно ещё с шифтом ставить BuyStopLimit и SellStopLimit

Панель управления из этой статьи https://www.mql5.com/ru/articles/62 будет работать в тестере (только кнопки)?

Создание активных панелей управления на MQL5 для торговли
Создание активных панелей управления на MQL5 для торговли
  • 2010.04.15
  • Евгений
  • www.mql5.com
Удобство имеет большое значение в работе, а тем более в работе трейдера, где скорость и точность решают многое. При подготовке терминала к работе каждый настраивает своё рабочее место максимально комфортно для себя, чтобы в максимально короткий срок можно было совершить анализ и войти в рынок. Но реальность такова, что разработчики не могут...
 
Sergey Savinkin:

Панель управления из этой статьи https://www.mql5.com/ru/articles/62 будет работать в тестере (только кнопки)?

Так попробуйте - что мешает?

Я просто написал, как сам в визуализаторе ставлю отложки.

 
Artyom Trishkin:

Так попробуйте - что мешает?

Я просто написал, как сам в визуализаторе ставлю отложки.

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

 
Хорошая статья, но в тестере не вызывается событие OnChartEvent()кнопки не работают. Решение проблемы нашел на форуме https://www.mql5.com/ru/forum/42817/page2
Использование переменных в событии OnChartEvent индикатора в тестере
Использование переменных в событии OnChartEvent индикатора в тестере
  • 2016.02.25
  • www.mql5.com
При тестировании в эксперте можно обрабатывать пользовательские события с помощью функции OnChartEvent(), но в индикаторах эта функция в тестере не вызывается.
 

Подскажите, почему когда я в нижеописанном коде меняю c close[i-1] на close[i-2] происходит Array of Range? Код написан строго по книге по MQL5, но там не описанно, почему при смещении цены более чем на 2 ячейки происходит выход за пределы буфера. 

  {
   int values_to_copy;
   int start;
   int calculated=BarsCalculated (iBands1_handle);

   
   if (calculated <=0)
   {
    return (0);
   }
   if (prev_calculated==0 || calculated!=bars_calculated)
   {
    start=1;
    if (calculated> rates_total) values_to_copy=rates_total;
    else values_to_copy=calculated;
    }
    else
    {
   start=rates_total-1;
   values_to_copy=1;
   }
   
   if(!FillArrayFrom_iBands1_handleBuffer(Base,Upper,Lower,iBands1_handle,values_to_copy)) return(0);

   for (int i=start; i <rates_total &&!IsStopped ();i++)
   {
    Print("C ", close[i-2]);
   }
 
clickaider:

Подскажите, почему когда я в нижеописанном коде меняю c close[i-1] на close[i-2] происходит Array of Range? Код написан строго по книге по MQL5, но там не описанно, почему при смещении цены более чем на 2 ячейки происходит выход за пределы буфера. 

Я так понимаю, речь идёт про индикатор. Так вот, рассматривайте два случая доступа к массиву-таймсерии "close": (1) что будет когда "start" равен "1" и  (2) что будет когда "start" равен "rates_total-1".

Просто вычислите в уме получившийся индекс массива "close", если попытаться сделать "close[i-2]" для случая (1) и для случая (2).

 
Vladimir Karputov:

Я так понимаю, речь идёт про индикатор. Так вот, рассматривайте два случая доступа к массиву-таймсерии "close": (1) что будет когда "start" равен "1" и  (2) что будет когда "start" равен "rates_total-1".

Просто вычислите в уме получившийся индекс массива "close", если попытаться сделать "close[i-2]" для случая (1) и для случая (2).

Спасибо, я проверил, там нужно было в значении start = 1 поставить число больше 1, отладка показала, что ошибка происходит, когда в начале пересчета массив close пытается взять значение с еще не появившейся ячейки.

 
подскажите пожалуйста ким механизмом я могу записывать информацию в массив , а потом его оттуда воспроизводить и потом при надобности опять перезаписывать его но не весь а определённые ячейки . или стирать с них информацию ,  допустим при закрытии сделки стирается информация о сделке. Массив двух мерный время открытия и длина свечи в пипсах. очень интересен этот механизм .  ещё цикл туда вставить и было бы очень прекрасно . хочется создать на этом примере советника с применением высшей математики, а именно тройной интеграл . допустим x и y известны цена и время находим z - в данном случае подразумевается мною . а это уже секрет . спасибо за понимание .    
 
Еще вопрос - если в этом коде поставить условие так, что цена закрытия будет выше линии (допустим это условие по факту так и есть до запуска программы), код работает как положено, но если прописать обратное условие, т.е разнополярные на текущий момент условия до запуска кода, по отладке данные будут идти некоррректно. Подскажите, почему это происходит? Ведь это же только сравнение в операторе условия, почему это должно вообще пагубно влиять на работу кода?
   for (int i = start; i < rates_total &&!IsStopped ();i++)
   {
    if(close[i] > Upper[i])
    Print("C ", close[i]);
    
Пример: если
if(close[i] < Upper[i])

То результат отладки следующий:

Данные идут корректно, обновляясь с периодичностью, равной скорости обновления цены

А вот если поставить изначально такое условие:

if(close[i] > Upper[i])

То результат будет уже некорректен:

То есть значения цен закрытия уже не совпадают с ценой текущей


Почему так происходит, я не могу понять.

Основной блок кода в посте  
Причина обращения: