Индикатор Разные вопросы - страница 12

 

Нет причин, по которым оператор print не должен генерировать что-либо.

Если вы добавляете индикатор на новый график, печатается ли он (без изменения таймфрейма)?

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

 
honest_knave:

Нет причин, по которым оператор print не должен генерировать что-либо.

Если вы добавляете индикатор на новый график, печатается ли он (без изменения таймфрейма)?

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


Спасибо за быстрый комментарий, очень признателен.

Да! Он печатает сообщение либо Load Template, либо Add Indicator.

20...   ... EURUSD,M1: This Year1900

Но, как вы знаете, этот код может дать мне " 2017 ".

//--- 2nd time edited

Когда я перекомпилирую, он показывает правильный результат.

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

 
Max Enrik:


Спасибо за быстрый комментарий, ценю это.

Да! Он выводит сообщение ниже либо Load Template, либо Add Indicator.

Но, как вы знаете, этот код может дать мне " 2017 ".

//--- 2-й раз редактировалось

Когда я перекомпилирую, он показывает правильный результат.

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


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

Year() основан на времени сервера... если нет соединения, он не знает год.

Сравните это с:

TimeYear(TimeLocal())
 
honest_knave:


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

Year() основан на времени сервера... если нет соединения, он не знает год.

Сравните с этим:


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

Спасибо за ваш комментарий.

 

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

Вопрос: Достаточно ли этого метода для удаления всех объектов индикатора?

Любой совет будет лучше, спасибо.

int OnInit()
 {
  ObjectsDeleteAll( 0, prefix );
  
  // then all my indicator code here...
 }
 
Max Enrik:

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

Вопрос: Достаточно ли этого метода для удаления всех объектов индикатора?

Любой совет будет лучше, спасибо.


Это правильный способ удалить все объекты с текущего графика, которые начинаются с 'prefix'
 
honest_knave:

Это правильный способ удалить все объекты с текущего графика, которые начинаются с 'prefix'.

Круто! Спасибо за ваш ответ.
Теперь мне просто нужно посмотреть, как будет работать мой индикатор на следующий день.

(p.s Я не люблю тестировать свой индикатор с помощью Tester)

 

(Как только я сказал)

Я использую приведенный ниже код метода для моих нескольких индикаторов, которые не имеют никаких проблем, но только есть проблема, когда я запускаю платформу MT4, которая заключается в том, что индикаторы должны перезапустить платформу, которая обновляет только для правильных значений. Я сталкиваюсь с этой проблемой ТОЛЬКО один раз в день.

Вопрос: Итак, может ли нижеприведенная часть кода вызвать проблему, которая не может обновить правильные значения, пожалуйста?

Заранее спасибо.

int OnInit()
{
    //---
    datetime a = iTime( Symbol(), 0, 0 );
    int      b = iBarShift( Symbol(), 0, a );
    datetime c = iOpen( Symbol(), 0, b );
    //---
    return(0);
}
 

Код в OnInit() выполняется только один раз.

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

Без подключения к брокеру время будет неправильным.

Я бы предложил перенести ваш код из OnInit() или, по крайней мере, проверить IsConnected().

 
honest_knave:

Я бы предложил перенести ваш код из OnInit(), или хотя бы проверить IsConnected().

Никогда не использовал этот IsConnected(), я изучу этот вопрос.

Большое спасибо.