Есть готовый пример как в Code base, так и в поставке терминала.
Rosh, да, конечно - понимаю. Пытаюсь сам разобраться с написанием индикаторов, скриптов. Если у кого-нибудь будет время подсказать ошибку - буду признателен.
double iMAOnArray( double array[], int total, int period, int ma_shift, int ma_method, int shift) array[] - Массив с данными.
У Вас
double MyATR; ATRBuffer1[i] = iMAOnArray(MyATR,0,PerATR,0,MODE_SMA,1);
Ну и по ссылке
double TempBuffer[]; while(i>=0) { ... TempBuffer[i]=MathMax(high,prevclose)-MathMin(low,prevclose); } i--; } ... for(i=0; i<limit; i++) AtrBuffer[i]=iMAOnArray(TempBuffer,Bars,AtrPeriod,0,MODE_SMA,i);
Для iMaOnArray нужен обратный цикл. Не так давно кто-то ветку создавал (спасибо :) ). Иначе будет некорректно рассчитываться в онлайне. Поэтому:
for(i=limit; i>=0; i--) AtrBuffer[i]=iMAOnArray(TempBuffer,Bars,AtrPeriod,0,MODE_SMA,i);
, спасибо.
Для iMaOnArray нужен обратный цикл. Не так давно кто-то ветку создавал (спасибо :) ). Иначе будет некорректно рассчитываться в онлайне. Поэтому:
Да, уже встречал где-то об этом упоминание. Может быть я неправильно выбрал функцию для определения среднего арифметического массива за период, других функций для этого в МетаТрэйдере нет?
В Омеге просто SMA(((High-Low)/Low), PerATR), да и в Вэлсе не мудрёно - SMA.Series(((High-Low)/Low), PerATR)[bar-1]
Для iMaOnArray нужен обратный цикл. Не так давно кто-то ветку создавал (спасибо :) ). Иначе будет некорректно рассчитываться в онлайне. Поэтому:
Хотя, SergNF, для этих целей указывает i++, если не ошибаюсь.
Всё сделал согласно рекомендаций SergNF, индикатор всё-равно не кажет, что не так:
#property copyright "Copyright © 2010, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Red //---- input parameters extern int PerATR = 13; //---- buffers double ATRBuffer1[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ATRBuffer1); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i, Counted_bars, limit; double MyATR[]; //---- Counted_bars=IndicatorCounted(); i=Bars-Counted_bars-1; while(i>=0) { double prevclose=Close[i+1]; MyATR[i] = (MathMax(High,prevclose)-MathMin(Low,prevclose))/MathMin(Low,prevclose); i--; } limit=Bars-Counted_bars; for(i=0; i<limit; i++) ATRBuffer1[i]=iMAOnArray(MyATR,Bars,PerATR,0,MODE_SMA,i); //---- return(0); } //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
После, некоторого, опыта работы с Омегой и ВелсЛаб, пришёл черёд подразобраться и с МетаТрэйдерер.
Для попытки разобраться с массивами, попытался создать аналог ATR. Бьюсь третьи сутки с простым кодом, не могу проникнуться философией МетаТрэйдерер, подскажите, что не так: