а можно в 2 словах в чем же сама ошибка , если по вашей ссылке то получается вообще другой какбы счет баров, если сравнивать с mql4 , поскольку там подобной проблемы нету !
Проблемы нет. Просто MQL5 позволяет управлять индексацией в массивах. По умолчанию в open[] индексация как в стандартных массивах. Если нужна индексация как в таймсерии, то нужно использовать для установки ArraySetAsSeries().
Ваш пример можно поправить, например, так:
for(i=rates_total-Bars_;i<rates_total;i++)
{
ExtMapBuffer1[i]=open[i];
}
или так:
for(i=0;i<=Bars_;i++) { ExtMapBuffer1[rates_total-1-i]=open[rates_total-1-i]; }
Проблемы нет. Просто MQL5 позволяет управлять индексацией в массивах. По умолчанию в open[] индексация как в стандартных массивах. Если нужна индексация как в таймсерии, то нужно использовать для установки ArraySetAsSeries().
Ваш пример можно поправить, например, так:
или так:
В мт4 конечно в этом вопросе както попроще намного.
такс , попробывал 2 варианта , отрисовует уже указанное количество баров , указл 100 баров , но рисует сплошную линию , ане цены открытия каждого бара :
В мт4 конечно в этом вопросе както попроще намного.
такс , попробывал 2 варианта , отрисовует уже указанное количество баров , указл 100 баров , но рисует сплошную линию , ане цены открытия каждого бара :
Всё правильно рисует, у Вас на графике намного больше баров, а значение первых Bars_-100 баров не задано, инициализируйте их пустым значением ArrayInitialize(ExtMapBuffer1,EMPTY_VALUE); или "задайте" масштаб графика не более 100 последних баров.
Да , спасибо , щас работает как должно, просто основывался на mql4 , там както проще с индексацией баров.
Только вот еще вопрос , если код :
for(i=rates_total-Bars_;i<rates_total;i++)
{
ExtMapBuffer1[i]=open[i];
}
то нормально , если поставить функцию :
for(i=rates_total-Bars_;i<rates_total;i++) { ExtMapBuffer1[i]=iOpenMQL4(_Symbol,0,i); } double iOpenMQL4(string symbol,int tf,int index) { if(index < 0) return(-1); double Arr[]; ENUM_TIMEFRAMES timeframe=TFMigrate(tf); if(CopyOpen(symbol,timeframe, index, 1, Arr)>0) return(Arr[0]); else return(-1); }
по идее тоже самое , то уже выдает вообще непонятные значения :
что тут не так ?
что тут не так ?
Читайте справку CopyOpen
да я вкурсе , что с 0 и в глубь , но как тогда нужно использовать функцию iOpenMQL4(_Symbol,0,i); чтоб при
for(i=rates_total-Bars_;i<rates_total;i++) { ExtMapBuffer1[i]=iOpenMQL4(_Symbol,0,i); }
работало нормально , тоесть последние 100 баров например цены открытия рисовало ?
Кроме того еще скопировал стандартный ваш прописанный индикатор с функции https://www.mql5.com/ru/docs/indicators/icustom , там внизу в виде примера ,
по идее должно работать но выдает ошибку :
хотя нечего не менял , это ваш код , как было приписанно изначально.
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет всем !
Подскажите , либо я чтото не то делаю , поскольку еще в процессе изучения mql5 либо это ошибка mql5 .
Суть такова , запускаю простой цикл прорисовки по ценам открытия 10 баров :
рисует , но по идее по циклу условие i<=Bars тоесть меньше равно указанному количеству баров , но если смотрим на график то прорисовка по всем барам что есть :
а не по 10 барам , и также по функции while (i<=Bars)
в буфер почемуто попадает все количество баров , ане ограниченное количество.
В чем трабл ? как решить ?