//------------------------------------------------------------------ #property copyright "© mladen, 2017" #property link "mladenfx@gmail.com" #property link "www.forex-station.com" #property version "1.00" //------------------------------------------------------------------ #property indicator_separate_window #property indicator_buffers 2 #property indicator_plots 1 #property indicator_label1 "value" #property indicator_type1 DRAW_COLOR_HISTOGRAM #property indicator_color1 clrSilver,clrLimeGreen,clrOrange #property indicator_width1 2 #property indicator_minimum 0 #property indicator_maximum 1 // // // // // input int PtrPeriod = 14; // Precision trend period input double PtrSensitivity = 3; // Precision trend sensitivity double val[],valc[]; //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // void OnInit() { SetIndexBuffer(0,val ,INDICATOR_CALCULATIONS); SetIndexBuffer(1,valc,INDICATOR_COLOR_INDEX); IndicatorSetString(INDICATOR_SHORTNAME,"Precision Trend (histo) ("+(string)PtrPeriod+","+(string)PtrSensitivity+")"); } //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // 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 (Bars(_Symbol,_Period)=0; k++) _ptWork[r][instanceNo+__avgr] += _ptWork[r-k][instanceNo+__range]; _ptWork[r][instanceNo+__avgr] /= k; _ptWork[r][instanceNo+__avgr] *= _sensitivity; // // // // // if (r==0) { _ptWork[r][instanceNo+__trend] = 0; _ptWork[r][instanceNo+__avgd] = _close[i]-_ptWork[r][instanceNo+__avgr]; _ptWork[r][instanceNo+__avgu] = _close[i]+_ptWork[r][instanceNo+__avgr]; _ptWork[r][instanceNo+__minc] = _close[i]; _ptWork[r][instanceNo+__maxc] = _close[i]; } else { _ptWork[r][instanceNo+__trend] = _ptWork[r-1][instanceNo+__trend]; _ptWork[r][instanceNo+__avgd] = _ptWork[r-1][instanceNo+__avgd]; _ptWork[r][instanceNo+__avgu] = _ptWork[r-1][instanceNo+__avgu]; _ptWork[r][instanceNo+__minc] = _ptWork[r-1][instanceNo+__minc]; _ptWork[r][instanceNo+__maxc] = _ptWork[r-1][instanceNo+__maxc]; // // // // // switch((int)_ptWork[r-1][instanceNo+__trend]) { case 0 : if (_close[i]>_ptWork[r-1][instanceNo+__avgu]) { _ptWork[r][instanceNo+__minc] = _close[i]; _ptWork[r][instanceNo+__avgd] = _close[i]-_ptWork[r][instanceNo+__avgr]; _ptWork[r][instanceNo+__trend] = 1; } if (_close[i]<_ptWork[r-1][instanceNo+__avgd]) { _ptWork[r][instanceNo+__maxc] = _close[i]; _ptWork[r][instanceNo+__avgu] = _close[i]+_ptWork[r][instanceNo+__avgr]; _ptWork[r][instanceNo+__trend] = 2; } break; case 1 : _ptWork[r][instanceNo+__avgd] = _ptWork[r-1][instanceNo+__minc] - _ptWork[r][instanceNo+__avgr]; if (_close[i]>_ptWork[r-1][instanceNo+__minc]) _ptWork[r][instanceNo+__minc] = _close[i]; if (_close[i]<_ptWork[r-1][instanceNo+__avgd]) { _ptWork[r][instanceNo+__maxc] = _close[i]; _ptWork[r][instanceNo+__avgu] = _close[i]+_ptWork[r][instanceNo+__avgr]; _ptWork[r][instanceNo+__trend] = 2; } break; case 2 : _ptWork[r][instanceNo+__avgu] = _ptWork[r-1][instanceNo+__maxc] + _ptWork[r][instanceNo+__avgr]; if (_close[i]<_ptWork[r-1][instanceNo+__maxc]) _ptWork[r][instanceNo+__maxc] = _close[i]; if (_close[i]>_ptWork[r-1][instanceNo+__avgu]) { _ptWork[r][instanceNo+__minc] = _close[i]; _ptWork[r][instanceNo+__avgd] = _close[i]-_ptWork[r][instanceNo+__avgr]; _ptWork[r][instanceNo+__trend] = 1; } } } return(_ptWork[r][instanceNo+__trend]); }