CopyBuffer и использование в индикаторе данных индикатора с другого таймфрейма - страница 2

 
viktor lubimov:
как не странно, но перезапуск OnCalculate вместе с ChartRedraw() не помогает.

Ну да, оно то работает как надо, то не работает. У меня тоже такое было, я тогда не нашел ни причины, ни способа решения.

Можно как-нибудь программно эмулировать обновление или приход нового тика 

 
Комбинатор:

Ну да, оно то работает как надо, то не работает. У меня тоже такое было, я тогда не нашел ни причины, ни способа решения.

Можно как-нибудь программно эмулировать обновление или приход нового тика 

То есть, сейчас вызов OnCalculate() не равно приходу нового тика. Поэтому здесь наверное только разработчики терминала могут помочь. )
 
Комбинатор:
Завести таймер и эмулировать OnCalculate

Да, так работает.

Только запускать пересчет нужно не только когда не получилось загрузить данные, но и при обновлении истории любого используемого символа/тф. У меня вот так работает индикатор iIndex:

void OnTimer()
{
//--- Если была загружена более глубокая история
        if ( IsHistoryUpdated() )
        {
                PrevCalculated  = 0;
        }

        // Если по любой причине не было расчетов, пробуем расчитаться принудительно
        if ( PrevCalculated <= 0 )
        {
                double p[];
                OnCalculate( LastRatesTotal, LastRatesTotal, 0, p );
        }
}

bool IsHistoryUpdated()
{
        for ( int s = 0; s < SymbolsCount; s ++ )
        {
                //--- Получим первую дату по символу/периоду
                datetime series_first_date = (datetime)SeriesInfoInteger( Symbols[s], TimeFrame, SERIES_FIRSTDATE );

                //--- Если даты отличаются, значит была загрузка более глубокой истории
                if ( series_first_date != FirstDate[s] )
                {
                        //--- Выведем сообщение в журнал
                        if ( FirstDate[s] != NULL )
                        {
                                Print( Symbols[s], ", ", EnumToString( TimeFrame ), ": history has been loaded (", series_first_date, " > ", FirstDate[s], ")..." );
                                FirstDate[s] = series_first_date;
                                return(true);
                        }

                        //--- Запомним дату
                        FirstDate[s] = series_first_date;

                        return(false);
                }
        }

        return(false);
}

 

Тут только один ТФ (TimeFrame), зато много инструментов (массив Symbols[]) .

 
Viktor Lubimov:

вопрос в первую очередь к поддержке метаквотов 

но может ктото уже нашел решение этой проблемы в рамках существующих инструментов.

понадобилось использовать в индикаторе другой индикатор с другого таймфрейма того же инструмента

чтото типа того что используется в этом примере из справки по mql5

https://www.mql5.com/ru/docs/series/copybuffer

но только вместо

ma_handle=iMA(Symbol(),0,period,shift,smootMode,price); 

я написал 

после этого данный индикатор, текст которого представлю ниже, перестал рисоваться при инициализации, а только после прихода очередного тика, или после внесения каких либо изменений в окно графика (например добавления другого индикатора). то есть только после повторного вызова функции OnCalculate. первый вызов функции натыкается на то что BarsCalculated и CopyBuffer выдают ошибки о неготовности данных (4806). при этом ошибка не исчезает даже если я ставлю проверку BarsCalculated в бесконечный цикл - то есть со временем данные не становятся готовыми (Sleep как известно в индикаторе нельзя использовать). второй же вызов функции OnCalculate приводит к положительному результату.

все вышеописанное приводит к тому что индикатор не рисуется в оффлайне. это очень неудобно.


итого вопрос. как данную проблему можно решить.  самое очевидно что приходит в голову инициировать както перезапуск функции OnCalculate. но я не нашел возможно ли это сделать. возвращать 0 из OnCalculate не помогает.

какие будут идеи. 


текст кода (немного измененный стандартный пример отсюда https://www.mql5.com/ru/docs/series/copybuffer) 






Скажите пожалуйста кто-то решил эту проблему ??


 
Tango_X:
Скажите пожалуйста кто-то решил эту проблему ??
В моем предыдущем сообщении рабочий рецепт. Допилите и пользуйтесь.
Причина обращения: