//------------------------------------------------------------------ #property copyright "mladen" #property link "www.forex-station.com" //------------------------------------------------------------------ #property indicator_separate_window #property indicator_minimum 0 #property indicator_maximum 100 #property indicator_buffers 2 #property indicator_color1 clrLimeGreen #property indicator_color2 clrRed #property indicator_width1 2 #property indicator_style2 STYLE_DOT #property strict // // // input int KPeriod = 5; input int DPeriod = 3; input int Slowing = 3; input ENUM_MA_METHOD MAMode = MODE_EMA; enum enStoPrice { pr_close, // Close/Close pr_open, // Open/Open pr_high, // High/High pr_low, // Low/Low pr_median, // Median/Median pr_typical, // Typical/Typical pr_weighted, // Weighted/Weighted pr_hilo // Low/High }; input enStoPrice Price = pr_close; input double Level1 = 80; input double Level2 = 20; double sto[],sig[],HighesBuffer[],LowesBuffer[],HighesBuffera[],LowesBuffera[]; //------------------------------------------------------------------ // //------------------------------------------------------------------ int OnInit() { IndicatorBuffers(6); SetIndexBuffer(0,sto,INDICATOR_DATA); SetIndexStyle(0,DRAW_LINE); SetIndexLabel(0,"Stochastic"); SetIndexBuffer(1,sig,INDICATOR_DATA); SetIndexStyle(0,DRAW_LINE); SetIndexLabel(1,"Signal"); SetIndexBuffer(2,HighesBuffer); SetIndexBuffer(3,LowesBuffer); SetIndexBuffer(4,HighesBuffera); SetIndexBuffer(5,LowesBuffera); SetLevelValue(0,Level1); SetLevelValue(1,Level2); IndicatorShortName("Stochastic ("+(string)KPeriod+","+(string)DPeriod+","+(string)Slowing+")"); return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { } //------------------------------------------------------------------ // //------------------------------------------------------------------ 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[]) { int i,limit = rates_total-(prev_calculated>0 ? prev_calculated : 1); // // // for(i=limit; i>=0; i--) { if (Price==pr_hilo) { LowesBuffera[i] = low[i]; HighesBuffera[i] = high[i]; } else { LowesBuffera[i] = iMA(NULL,0,1,0,MODE_SMA,(int)Price,i); HighesBuffera[i]= iMA(NULL,0,1,0,MODE_SMA,(int)Price,i); } LowesBuffer[i] = LowesBuffera[ArrayMinimum(LowesBuffera,KPeriod,i)]; HighesBuffer[i]= HighesBuffera[ArrayMaximum(HighesBuffera,KPeriod,i)]; // // // double sumlo = 0.0,sumhi = 0.0; for(int k=0;k