Ошибки, баги, вопросы - страница 3364

 
lynxntech #:

не появляется,

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

Проверяйте успешность работы функции. Если данных ещё нет - выходите из обработчика с возвратом 0
 
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- проверим минимальный расчет баров
   if(rates_total<min_rates_total)
      return(RESET);
//--- проверка на новый бар
   if(prev_calculated==rates_total)
      return(rates_total);
//----
   int start,bar,indexD1;
   double openDay;
//---- 
   if(prev_calculated>rates_total || prev_calculated<=0) 
     {
        start=min_rates_total; 
      //start=rates_total-10; 
      //--- 
      ArrayInitialize(Buffer1,EMPTY_VALUE);
      ArrayInitialize(Buffer2,EMPTY_VALUE);
      ArrayInitialize(Buffer3,EMPTY_VALUE);
     }
   else
      start=prev_calculated; 

остальное 2 функции которые выше и перемножения математические

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

 
Alexey Viktorov #:

Зачем? Зачем в выходные должен работать  OrderCheck()???

Да и приоритет ошибок существует. Пусть эта ошибка имеет самый низкий приоритет. Тогда в выходные будет отловлена любая другая ошибка. И только если других нет, то будет сообщено о том, что рынок закрыт. И каждый программист может поставить условие по дню недели.

Потом не забывайте о том, что отладка и тестер работает мимо сервера брокера. При запуске собрал нужные данные и отключился…  Разве не так? И какое дело мне до закрытого рынка, если я работаю в отладчике или тестере?

У нас разное понимание штатной OrderCheck. Напишите свою OrderCheck и пользуйтесь ей. Например, в MT4Orders так и сделано, вплоть до успешного прохождения валидатора Маркета.

 
Artyom Trishkin #:
Данные должны подгрузиться. 
В инете обратитесь к нужному таймфрейму, например, iTime. Это должно запустить подгрузку данных. 

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

 
lynxntech #:

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

Когда ничего ещё не просчитано, идëт инициализация буферов. Вот результат этой инициализации и отображается скрытием линий. А следующего тика нет для прорисовки. 
 
Artyom Trishkin #:
Когда ничего ещё не просчитано, идëт инициализация буферов. Вот результат этой инициализации и отображается скрытием линий. А следующего тика нет для прорисовки. 

если перезайти на график по символу, все нормально показывает, только при старте нет отрисовки

 
fxsaber #:

У нас разное понимание штатной OrderCheck. Напишите свою OrderCheck и пользуйтесь ей. Например, в MT4Orders так и сделано, вплоть до успешного прохождения валидатора Маркета.

Спасибо, конечно, за предложение, но эту библу даже читать никогда не буду. Не нравится мне ваш стиль написания. А пользоваться не понимая что должно происходить противоречит моим принципам.

Узнать, что рынок закрыт надо до того как отправить OrderSend(). Если вы знаете функцию которая возвращает код этой ошибки пожалуйста напишите.

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

 
Alexey Viktorov #:

1. Ну если это будет только при условии, что работает советник, то целесообразность есть.

2. Но тут-же напрашивается и другой вариант. А если вы решили переключить на другой счёт, применить другой профиль? И пошло-поехало. Такие навороты поднимутся… Проще приучить себя к внимательности и не работать с тестером если на этом счёте работает советник. Да ещё если счёт реальный.

1. Ага! Значит целесообразность всё таки есть? Т.е., даже ссаный блокнот заботится о пользователе, сообщая предупреждение о закрытии несохранённого документа, а МТ5 настолько суров, что не моргнув глазом закрывается по живому советнику? - не порядок ведь, об этом я и написал в первом сообщении.

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

Посмотрите, как органично впишется новый функционал в интерфейс терминала:

хорошо же? и чем это вам лично помешает или навредит? не навредит, тогда зачем нужно было тормозить и оспаривать нововведение, ведь моё сообщение было адресовано разработчикам!


ЗЫ. Прошу отписаться тех, кому данное предлежание разработчикам видится целесообразным и нужным.

 
Andrey Dik #:

ЗЫ. Прошу отписаться тех, кому данное предлежание разработчикам видится целесообразным и нужным.

Сейчас подтверждение просит при запущенной оптимизации, это очень хорошо.

Думаю было бы полезно вообще подтверждение при закрытии не зависимо запущен советник или нет.

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

Несколько раз закрывал терминал вместо графика)

 
Andrey Dik #:

ЗЫ. Прошу отписаться тех, кому данное предлежание разработчикам видится целесообразным и нужным.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2020.03.20 08:36

В MT5 нет никакой защиты от случайного закрытия Терминала. Недавно был такой сценарий.

  • Терминал и браузер раскрыты на все окно. Нахожусь в браузере.
  • Браузер завис, жму на крестик в правом-верхнем углу.
  • Не закрывается, жму еще несколько раз.
  • В определенный момент во время нажатий браузер закрывается - исчезает окно. И в это время крестик Терминала под курсором, куда жал.
  • Терминал закрывается, при этом настолько быстро, что это просто не заметно. Особенно, когда открыто много Терминалов.

Это очень неприятная ситуация во время, например, пакетной Оптимизации. Но еще хуже - для боевого советника. Можно тупо не заметить, что прикончил свой боевой Терминал.


Поставил такую защиту.

void OnDeinit( const int Reason )
{
  if (Reason == REASON_CLOSE)
    MessageBox("Terminal is being closed!");
}

При закрытии появляется сообщение на пять секунд. Поэтому можно понять, что на самом деле произошло. Странно, что в Терминале нет защиты.

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