Подскажите плиз какая разница м.у этими операторами и в чём она заключается и как она влияет на процесс
for(i=0; i<limit; i++)
и
for ( i = limit; i >= 0; i --)
Прямой и обратный цикл.
Если учитывать, что limit в обоих случаях у вас - одна и та же переменная, то во втором случае цикл неверный и приведёт к критической ошибке - выход за пределы массива (если в коде есть #property strict)
Обратный цикл нужен, например, при переборе открытых позиций и их удалении чтобы позиции не пропускались и удалялись все. Но для этого нужно написать цикл так:
for ( i = limit-1; i >= 0; i --)
limit - это почти наверняка из индикаторов.
При рассчёте индикатора при направлении индексации как в таймсерии прямой цикл будет означать, что значения индикатора рассчитываются с конца, то есть из настоящего в прошлое. При обратном цикле значения индикатора будут рассчитываться от прошлого к настоящему.
да, это из индикатора,
пытаюсь сделать так, чтоб расчёты и прорисовка велась из прошлого в настоящее, но не пойму как это сделать
и как это прописать в операторе? и что нужно прописать вместо лимит?
просматривая документацию, учебник, не хватает понимания как это сделать
да, это из индикатора,
пытаюсь сделать так, чтоб расчёты и прорисовка велась из прошлого в настоящее, но не пойму как это сделать
и как это прописать в операторе? и что нужно прописать вместо лимит?
просматривая документацию, учебник, не хватает понимания как это сделать
Ну вот вам пример. Что рисует - да фигзнает, берёт среднее между OHLC несколько баров назад (в настройках задаётся) и OHLC текущего бара индекса цикла i.
Просто как пример цикла от начала истории до "сейчас"
//+------------------------------------------------------------------+ //| TestLimit.mq4 | //| Copyright 2016, Artem A. Trishkin, Skype artmedia70 | //| https://login.mql5.com/ru/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70" #property link "https://login.mql5.com/ru/users/artmedia70" #property version "1.00" #property strict #property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "LineOHLC" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 2 //+------------------------------------------------------------------+ //| input variables | //+------------------------------------------------------------------+ input int NumCalculatedBars=5; // Количество баров усреднения int numCalculatedBars; //--- indicator buffers double Buffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,Buffer); numCalculatedBars=(NumCalculatedBars<1)?1:NumCalculatedBars; //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- if(rates_total<numCalculatedBars) return(0); int limit=rates_total-prev_calculated; if(limit>1) { limit=rates_total-numCalculatedBars-1; } //--- цикл от начала истории до "сейчас" for(int i=limit; i>=0; i--) { Buffer[i]=(GetValueHistory(i,numCalculatedBars,open,high,low,close)+(open[i]+high[i]+low[i]+close[i])*0.25)*0.5; } Comment("\nlimit=",limit); //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ double GetValueHistory(int i, int shift, const double &open[], const double &high[], const double &low[], const double &close[]) { return((open[i+shift]+high[i+shift]+low[i+shift]+close[i+shift])*0.25); // возвращаем OHLC i+сдвиг (Зачем? да фиг знает...) } //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Подскажите плиз какая разница м.у этими операторами и в чём она заключается и как она влияет на процесс
и