Как можно заставить индикатор расчитываться с указанного бара и цены? Пробовал разобраться в коде пристраивая переменные начала координат, но индикатор либо рисуется каждый раз с бара находящегося рядом от указанного, то всё правильно но при вызове через icustom вообще непонятно как ведет себя...
Подскажите пожалуйста где происходит установка первой координаты, точнее куда можно вклинить свои значения чтобы далее работало корректно.
/**/ - отмечены строки которые я добавил в оригинальный код..
Подскажите пожалуйста где происходит установка первой координаты, точнее куда можно вклинить свои значения чтобы далее работало корректно.
/**/ - отмечены строки которые я добавил в оригинальный код..
//+------------------------------------------------------------------+ //| Parabolic Sub.mq4 | //| Copyright © 2004, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" //---- //Added Fix1 September 6, 2006 Advance Index if new bar by Stanley Fiala http://merlin4x.com #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Yellow //---- input parameters extern double Step = 0.02; extern double Maximum = 0.2; /**/extern int SAR_start; // Начальный бар (X) /**/extern double SAR_V_shift; // Цена с которой начать (Y) /**/extern bool SAR_dirlong; // Рассматривать как длинную или короткую позицию //---- buffers double SarBuffer[]; //---- int save_lastreverse; bool save_dirlong; double save_start; double save_last_high; double save_last_low; double save_ep; double save_sar; int bartime; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0, DRAW_ARROW); SetIndexArrow(0, 159); SetIndexBuffer(0, SarBuffer); //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void SaveLastReverse(int last, int dir, double start, double low, double high, double ep, double sar) { save_lastreverse = last; save_dirlong = dir; save_start = start; save_last_low = low; save_last_high = high; save_ep = ep; save_sar = sar; } //+------------------------------------------------------------------+ //| Parabolic Sell And Reverse system | //+------------------------------------------------------------------+ int start() { static bool first = true; bool dirlong; double start, last_high, last_low; double ep, sar, price_low, price_high, price; int i, counted_bars = IndicatorCounted(); int counted_bars_ii=0; //---- if(Bars < 3) return(0); //---- initial settings i = Bars - 2; //---- if(counted_bars == 0 || first) { first = false; dirlong = true; start = Step; last_high = -10000000.0; last_low = 10000000.0; //---- while(i > 0) { save_lastreverse = i; price_low = Low[i]; //---- if(last_low > price_low) last_low = price_low; price_high = High[i]; //---- if(last_high < price_high) last_high = price_high; //---- if(price_high > High[i+1] && price_low > Low[i+1]) break; //---- if(price_high < High[i+1] && price_low < Low[i+1]) { dirlong = false; break; } i--; } //---- initial zero /**/ if(counted_bars_ii == 0){i=SAR_start;} int k = i; //Print(" k=", k, " Bars=", Bars); //---- while(k < Bars) { SarBuffer[k] = 0.0; k++; } //---- check further /**/ if(counted_bars_ii == 0){dirlong=SAR_dirlong;} if(dirlong) { /**/ if(counted_bars_ii == 0){SarBuffer[i] = SAR_V_shift; ep = SAR_V_shift;} /**/ else {SarBuffer[i] = Low[i+1]; ep = High[i];} } else { /**/ if(counted_bars_ii == 0){SarBuffer[i] = SAR_V_shift; ep = SAR_V_shift;} /**/ else {SarBuffer[i] = High[i+1]; ep = Low[i];} } i--; } else { i = save_lastreverse; start = save_start; dirlong = save_dirlong; last_high = save_last_high; last_low = save_last_low; ep = save_ep; sar = save_sar; // Fix1 start // If new bar increment index if(Time[0] != bartime) { bartime = Time[0]; i++; } //Fix1 end } //---- while(i >= 0) { price_low = Low[i]; price_high = High[i]; //--- check for reverse from long to short if(dirlong && price_low < SarBuffer[i+1]) { SaveLastReverse(i, true, start, price_low, last_high, ep, sar); start = Step; dirlong = false; ep = price_low; last_low = price_low; SarBuffer[i] = last_high; i--; continue; } //--- check for reverse from short to long if(!dirlong && price_high > SarBuffer[i+1]) { SaveLastReverse(i, false, start, last_low, price_high, ep, sar); start = Step; dirlong = true; ep = price_high; last_high = price_high; SarBuffer[i] = last_low; i--; continue; } //sar(i) = sar(i+1)+start*(ep-sar(i+1)) /**/ if(counted_bars_ii == 0){price = SAR_V_shift;} /**/ else {price = SarBuffer[i+1];} sar = price + start*(ep - price); //---- if(dirlong) { if(ep < price_high && (start + Step) <= Maximum) start += Step; //---- if(price_high < High[i+1] && i == Bars - 2) sar = SarBuffer[i+1]; price = Low[i+1]; //---- if(sar > price) sar = price; price = Low[i+2]; //---- if(sar > price) sar = price; //---- if(sar > price_low) { SaveLastReverse(i, true, start, price_low, last_high, ep, sar); start = Step; dirlong = false; ep = price_low; last_low = price_low; SarBuffer[i] = last_high; i--; continue; } //---- if(ep < price_high) { last_high = price_high; ep = price_high; } } //dir-long else { if(ep > price_low && (start + Step) <= Maximum) start += Step; //---- if(price_low < Low[i+1] && i == Bars - 2) sar = SarBuffer[i+1]; price = High[i+1]; //---- if(sar < price) sar = price; price = High[i+2]; //---- if(sar < price) sar = price; //---- if(sar < price_high) { SaveLastReverse(i, false, start, last_low, price_high, ep,sar); start = Step; dirlong = true; ep = price_high; last_high = price_high; SarBuffer[i] = last_low; i--; continue; } //---- if(ep > price_low) { last_low = price_low; ep = price_low; } } //dir-short SarBuffer[i] = sar; i--; counted_bars_ii++; } //while //---- return(0); } //+------------------------------------------------------------------+