Мультивалютный индикатор

 

Доброго времени суток.

Пытаюсь анализировать несколько валютных пар.

Использую функции типа Handle = iMA("USDJPY", timeFrame, Fast, 0, MA_Method, Price) для различных пар

затем int calculated=BarsCalculated(Handle); 

Проблема:

Количество "rates_total" для графика к которому прикреплен индикатор, почти всегда отличается от аналогичного параметра дополнительных валютных пар, если на текущем графике баров меньше, чем на истории дополнительных валют, то расчет и прорисовка идет, если нет, то нет.

Вопрос: Как догрузить или засинхронизировать количество баров различных валютных пар?

Заранее благодарю. 

Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Доступ к таймсериям и индикаторам / Bars - Документация по MQL5
 

Спасибо за информацию. Я примерно такую штуку и пытаюсь сообразить. Но у этого индикатора наблюдаются такие же проблемы как и у моего, если увеличить количество калькулируемых баров, то происходит рассинхронизация (у MultiCurrencyIndex.mq5 по умолчанию =500). Где-то в хелпе мт5, не помню точно где, встречал текст смысл которого заключался в том, что исторические данные имеют ограничения для устранения ресурсных перегрузок.

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

 
tmp1204:

Спасибо за информацию. Я примерно такую штуку и пытаюсь сообразить. Но у этого индикатора наблюдаются такие же проблемы как и у моего, если увеличить количество калькулируемых баров, то происходит рассинхронизация (у MultiCurrencyIndex.mq5 по умолчанию =500). Где-то в хелпе мт5, не помню точно где, встречал текст смысл которого заключался в том, что исторические данные имеют ограничения для устранения ресурсных перегрузок.

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

надо синхронизировать по барам времени :

1. на текущем таймфрейме берете последний бар

2. смотрите его время

3. в цикле начиная от текущего бара начинаете уменьшать время и по этому времени берете цену из таймсерии (ТС) другой валюты

4. если цены в другой ТС нет, то заполняем пробел предыдущей ценой - это и есть синхронизация

http://forum.tradelikeapro.ru/index.php?topic=4490.msg77475#msg77475

int Synchronize(const int start)
{
    datetime currentTime = datetime(SeriesInfoInteger(_Symbol, _Period, SERIES_LASTBAR_DATE));

    for (int i = 0; i < Currencies.Total(); i++)
    {
        CSymbol * s = Currencies.At(i);

        ArrayResize(s.SyncClose, MaxBars);
        ArrayResize(s.AverageFast, MaxBars);
        ArrayResize(s.AverageSlow, MaxBars);
        
        ArrayInitialize(s.SyncClose, 0);
        ArrayInitialize(s.AverageFast, 0);
        ArrayInitialize(s.AverageSlow, 0);

        int closeIndex = ArraySize(s.Close) - 1;

        s.SyncClose[MaxBars - 1] = s.Close[closeIndex]; // наичнаем с последнего бара, который точно существует

        for (int k = MaxBars - 1; k > start - 1; k--)
        {
            if (GetBarByTime(s.Name, _Period, currentTime) > 0 && closeIndex > 0) // если бар с ценой есть в другой ТС, то берем его по индексу
            {
                closeIndex--;
            }

            s.SyncClose[k] = s.Close[closeIndex];            
            currentTime -= PeriodSeconds(); // переходим к сл. временному бару
        }

        ExponentialMAOnBuffer(MaxBars, start, 0, InpPeriodFast, s.SyncClose, s.AverageFast);
        ExponentialMAOnBuffer(MaxBars, start, 0, InpPeriodSlow, s.SyncClose, s.AverageSlow);
    }

    return(1);
}

Чтобы просто инициировать подгрузку истории другой валюты достаточно вызвать одну из функций CopyX() или Bars() для желаемой валюты, если они возвращают 0 или -1, то выходить из обработчика и ждать сл. тика.

[Статистический арбитраж и корреляция валют] - Currency Correlation - Индикаторы - Trade Like A Pro
  • forum.tradelikeapro.ru
Название Индикатора: Currency Correlation Сайт продажи: бесплатный Описание: Идея взята отсюда _http://www.mql5.com/en/code/991. Идея - смотрим корреляции валют на сайте на сайте Forex Ticket или Oanda - следим за расхождением коррелируемых валют и входим на выравнивании. Благодаря индикатору не надо ползти на сайт чтобы узнать насколько...