[SOLVED] Индикаторы неправильно инстанцируются при вызове/создании из индикатора другого рабочего таймфрейма. - страница 4

 
nicholishen:

...

Я хочу особенно поблагодарить вас за всю вашу помощь... если бы не ваша снисходительность, я не знаю, где бы я нашел мотивацию, чтобы стремиться дальше! /s

Я видел здесь десятки таких людей, как вы. Они знают все лучше других, они не слушают, они перекладывают свои собственные недостатки на другого (другого пользователя, модератора, брокера, платформу, Metaquotes, ОС или что-то еще...).

Похоже, вы ничему здесь не учитесь. Это НЕ баг, это то, как разработчики задумали свою платформу. Я понимаю, почему вы говорите, что это баг, я открыл для себя MT5 и то, как она работает, много лет назад. Если бы вы имели это в виду и приняли это, вы бы увидели гораздо раньше, в чем была проблема: ваш подход и ваше понимание.

Но нет, вы все еще продолжаете говорить, что это "баг" или "серьезный недостаток", это просто смешно. Архитектура MT5, использующая асинхронное поведение функций - это то, что делает эту платформу намного быстрее, чем MT4, конечно, с этим не всегда легко справиться. Главная ошибка Metaquotes здесь - неполная, непонятная или отсутствующая документация.

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

 
Alain Verleyen:

Я видел здесь десятки таких людей, как вы. Они знают все лучше других, они не слушают, они перекладывают свои собственные недостатки на другого (другого пользователя, модератора, брокера, платформу, Metaquotes, ОС или что-то еще...).

Похоже, вы ничему здесь не учитесь. Это НЕ баг, это то, как разработчики задумали свою платформу. Я понимаю, почему вы говорите, что это баг, я открыл для себя MT5 и то, как она работает, много лет назад. Если бы вы имели это в виду и приняли это, вы бы увидели гораздо раньше, в чем была проблема: ваш подход и ваше понимание.

Но нет, вы все еще продолжаете говорить, что это "баг" или "серьезный недостаток", это просто смешно. Архитектура MT5, использующая асинхронное поведение функций - это то, что делает эту платформу намного быстрее, чем MT4, конечно, с этим не всегда легко справиться. Главная ошибка Metaquotes здесь - неполная, непонятная или отсутствующая документация.

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

Запуск всех индикаторов на одном потоке без метода рекурсивного вызова следующей итерации, кроме установки таймера - это недостаток. Вы хотите поговорить о скорости? Вместо того, чтобы вернуть обработку в очередь, я просто потратил лишние мс на обходной путь. Возможно, это не конец света, но все же требует обходного пути. Я очень благодарен тем, кто помог мне понять обходной путь и почему он был необходим, учитывая ограничения платформы. Я все еще пытаюсь понять, что вы привнесли в дискуссию, кроме снисхождения, однако.
 
nicholishen:
Запуск всех индикаторов на одном потоке без метода рекурсивного вызова следующей итерации, кроме установки таймера - это недостаток. Вы хотите поговорить о скорости? Вместо того, чтобы вернуть обработку в очередь, я просто потратил лишние мс на обходной путь. Возможно, это не конец света, но все же требует обходного пути. Я очень благодарен тем, кто помог мне понять обходной путь и почему он был необходим, учитывая ограничения платформы. Я все еще пытаюсь понять, что вы привнесли в дискуссию, кроме снисхождения, однако.

Я нахожу вас очень агрессивным. С самого начала я просто пытался объяснить вам, что происходит, исходя из моего многолетнего опыта работы с MT5. Я не снисходителен, я опытен и экспериментировал, и я заслуживаю уважения (как и каждый). Вот только из поста #14 я вижу, что вы хотите, чтобы это работало без нового тика, но в том же посте я почувствовал себя оскорбленным вашим словом "яростно", так что я сдался.

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

 

Я долго ломал голову над этим вопросом.

Для тех, кто еще столкнулся с этой проблемой, похоже, есть простое решение.

Добавьте переменную уровня модуля (RunOnce), чтобы определить, когда мы запускаем OnCalculate в первый раз. При первом запуске верните ноль и установите переменную в true, чтобы предотвратить дальнейшие прерывания.


bool RunOnce = false;

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 == prev_calculated) return (rates_total);
   if (!RunOnce) {
      RunOnce = true;
      return (0);
   }
  
REST OF YOUR CODE HERE.


Мне это очень помогло, надеюсь, поможет и вам.

[SOLVED]Indicators are not properly instantiated when called/created from an Indicator of different working time-frame.
[SOLVED]Indicators are not properly instantiated when called/created from an Indicator of different working time-frame.
  • 2017.01.30
  • www.mql5.com
UPDATE: See the workaround below CopyBuffer() throws an error of 4806 (Indicator data not accessible) when calling an indicator with a different Ti...
 
Спасибо за решение