Уважаемые эксперты.
Подскажите, пожалуйста, как сделать грамотную выборку из выборки в индикаторе, а именно:
Есть диапазон данных от 0 до limit (максимальное количество баров):
for(int k=0;k<limit;k++)
Как посчитать какие-ибо значения определенным размером в этом цикле?
Допустим всего 1000 баров, а нам нужно в этом цикле посчитать что-либо группами по, например, 20 баров (пусть будет сумма всех закрытий):
Верно ли так будет?
вот как вы написали - будет в корне неверно..
PS/ ну не учите уже программирование по MQL. Он хороший, удобный, но школу не заменяет.
PPS/ И с каждой версией всё более не заменяет
вот как вы написали - будет в корне неверно..
PS/ ну не учите уже программирование по MQL. Он хороший, удобный, но школу не заменяет.
PPS/ И с каждой версией всё более не заменяет
Ну второпях опечатку допустил:
m+=iClose[k+i];
Но не в этом смысл. Вопрос в самом цикле. Верно ли?
Ну второпях опечатку допустил:
m+=iClose[k+i];
Но не в этом смысл. Вопрос в самом цикле. Верно ли?
Уважаемые эксперты.
Подскажите, пожалуйста, как сделать грамотную выборку из выборки в индикаторе, а именно:
Есть диапазон данных от 0 до limit (максимальное количество баров):
for(int k=0;k<limit;k++)
Как посчитать какие-ибо значения определенным размером в этом цикле?
Допустим всего 1000 баров, а нам нужно в этом цикле посчитать что-либо группами по, например, 20 баров (пусть будет сумма всех закрытий):
Верно ли так будет?
почти.
во первых, непонятно что за выражение Close[k+i]++ ? ))))
во вторых, учитывайте что заходить за пределы limit нельзя, там нет свечей.
допустим рассмотрим последнюю интерацию первого цикла for. k будет равен limit -1.
а теперь вы к этому k прибавляете от 0 до 19. т.е. считаете свечи от limit -1 до limit +18.
в конкретно этом примере можно добавить еще одну проверку, вот так:
int countbars=5; for(int k=0;k<limit;k++) { for(int i=0;i<countbars && k<limit-countbars;i++) Print( iClose[k+i] ); }если это был чисто гипотетических пример, и вы спрашивали именно про цикл в цикле, то все верно, смысл вы поняли.
если не забудете вовремя обнулять m - то получится "скользящая сумма" по Close за countbars.
Это я понимаю, просто беспокоит нюанс:
k достигнет значения limit-1 (значения 999)
i достигнет значения countbars-1 (значения 19)
Что же тогда выдаст функция iClose[k+i], если бара № 999+19 не существует?
Это я понимаю, просто беспокоит нюанс:
k достигнет значения limit-1 (значения 999)
i достигнет значения countbars-1 (значения 19)
Что же тогда выдаст функция iClose[k+i], если бара № 999+19 не существует?
вылетит птичка )
которая называется "array out of range"
почти.
во первых, непонятно что за выражение Close[k+i]++ ? ))))
во вторых, учитывайте что заходить за пределы limit нельзя, там нет свечей.
допустим рассмотрим последнюю интерацию первого цикла for. k будет равен limit -1.
а теперь вы к этому k прибавляете от 0 до 20. т.е. считаете свечи от limit -1 до limit +18.
в конкретно этом примере можно добавить еще одну проверку, вот так:
for(int i=0;i<countbars && k<limit-countbars;i++)
Вот чего мне хватало!!! Ура! Вот про это я спрашивал! Спасибо огромнейшее!
Это я понимаю, просто беспокоит нюанс:
k достигнет значения limit-1 (значения 999)
i достигнет значения countbars-1 (значения 19)
Что же тогда выдаст функция iClose[k+i], если бара № 999+19 не существует?
не ходите в циклы если гарантированно во вложенных выходите за границы.
если все ваши вычисления/функции и проч. определены (то есть требуют и имеют разумное значение) для числа баров > 100 то пока этих баров меньше то и нечего в первый цикл входить.
Вот чего мне хватало!!! Ура! Вот про это я спрашивал! Спасибо огромнейшее!
ну это тоже не совсем верно, так как в последних 20 интерациях у вас будет посчтиано не 20 свечей как вы хотели, а 19 18 и так далее.
зависит от ваших задачь конечно.
корректней так:
int countbars=20; for(int k=0;k<limit;k++) { if(k+countbars-1 >= limit) break; for(int i=0;i<countbars;i++) Print( iClose[k+i] ); }
ну это тоже не совсем верно, так как в последних 20 интерациях у вас будет посчтиано не 20 свечей как вы хотели, а 19 18 и так далее.
зависит от ваших задачь конечно.
корректней так:
Вообще красивый код.
Да, все верно. Нужно именно по 20 свечей. То есть дойти до 80 свечи, посчитать от 80 до 100 и остановиться.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Уважаемые эксперты.
Подскажите, пожалуйста, как сделать грамотную выборку из выборки в индикаторе, а именно:
Есть диапазон данных от 0 до limit (максимальное количество баров):
for(int k=0;k<limit;k++)
Как посчитать какие-ибо значения определенным размером в этом цикле?
Допустим всего 1000 баров, а нам нужно в этом цикле посчитать что-либо группами по, например, 20 баров (пусть будет сумма всех закрытий):
Верно ли так будет?