Скачать MetaTrader 5

Передача произвольных данных на вход индикатора

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Есть возможность протестировать программу перед покупкой. Узнай как!
mkhln
12
mkhln 2013.11.29 15:30 

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

Код советника выглядит примерно так


int handle_wrapper;

int handle_SMA1;

int handle_SMA2;


int onInit()

{

    handle_wrapper = iCustom(_Symbol, _Period, "wrapper");

    handle_SMA1 = iMA(_Symbol, _Period, 9, 0, MODE_SMA, handle_wrapper);

    handle_SMA2 = iMA(_Symbol, _Period, 9, 0, MODE_SMA, PRICE_CLOSE);

}

void OnTick()
{     
    CopyRates(_Symbol, _Period, 0, 1, latest_rates);
    const double C = latest_rates[0].close;

    GlobalVariableSet("arg", C);

    CopyBuffer(handle_SMA1, 0, 0, 1, indicator_data);    

    const double SMA1 = indicator_data[0];

    CopyBuffer(handle_SMA2, 0, 0, 1, indicator_data);    

    const double SMA2 = indicator_data[0];

    Print("SMA1 = ", SMA1, "SMA2 = ", SMA2);

}

Код обертки

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
{
    const int first = prev_calculated == 0 ? begin : prev_calculated - 1;    

    const double value = GlobalVariableGet("arg");

    for (int i = first; i < rates_total; i++) 

    {

         output[i] = value;

    }

    return(rates_total);
}

Переход на новые рельсы: пользовательские индикаторы в MQL5
Переход на новые рельсы: пользовательские индикаторы в MQL5
  • 2009.11.23
  • Андрей
  • www.mql5.com
Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий