//+------------------------------------------------------------------+ //| SwingVolumes_1.06.mq5 | //| Swing Volumes v1.06 Copyright 2015, fxborg | //| http://blog.livedoor.jp/fxborg/ | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, fxborg" #property link "http://blog.livedoor.jp/fxborg/" #property version "1.06" #property indicator_separate_window #property indicator_buffers 8 #property indicator_plots 3 #property indicator_type1 DRAW_HISTOGRAM #property indicator_type2 DRAW_HISTOGRAM #property indicator_type3 DRAW_LINE #property indicator_type4 DRAW_LINE #property indicator_color1 DodgerBlue #property indicator_color2 Red #property indicator_color3 Lime #property indicator_color4 Orange #property indicator_width1 4 #property indicator_width2 4 #property indicator_width3 2 //--- input int TotalPeriod=4; // Total Period input int MaPeriod=3; // Ma Period input ENUM_TIMEFRAMES CalcTF=PERIOD_M5; // Calclation TimeFrame //--- int RangePeriod=10; //--- int Scale=PeriodSeconds(PERIOD_CURRENT)/PeriodSeconds(CalcTF); //--- //--- #define DIR_UP 1.0 #define DIR_DOWN -1.0 #define DIR_NONE 0.0 //--- //--- double UpVolBuffer[]; double DnVolBuffer[]; double SwingUpVolBuffer[]; double SwingDnVolBuffer[]; double SwingMaBuffer[]; double DirBuffer[]; double LastDir1Buffer[]; double LastTimeBuffer[]; //--- //---- declaration of global variables int min_rates_total; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { if(PeriodSeconds(PERIOD_CURRENT)0) first=prev_calculated-2; else { for(i=0; itime[i]-10) { //--- if(tf_dir[pos]==DIR_DOWN)dn_vol+=tf_rates[pos].tick_volume; if(tf_dir[pos]==DIR_UP) up_vol+=tf_rates[pos].tick_volume; if(tf_dir[pos]==DIR_NONE) { dn_vol=0; up_vol=0; break; } //--- } //--- if(pos==tf_rates_total-1) { LastTimeBuffer[i]=(double)time[i]; LastDir1Buffer[i]=tf_dir[pos]; } //--- } if(dn_vol==0 && up_vol==0) { SwingUpVolBuffer[i]= SwingUpVolBuffer[i-1]; SwingDnVolBuffer[i]= SwingDnVolBuffer[i-1]; continue; } //--- UpVolBuffer[i]=(double)up_vol; DnVolBuffer[i]=(double)dn_vol*-1; double main_ar=0.0; for(j=0; j(rates[i].high-rates[i].low)) { return dir1; } if(ar*1.2dn1+dn0) { if(dir1==DIR_UP && up1>dn1 && up0up1 && dn0(high[i]-low[i])) { DirBuffer[i]=DirBuffer[i-1]; return; } if(atr*1.2dn1+dn0) { if(DirBuffer[i-1]==DIR_UP && up1>dn1 && up0dn1+dn0) { if(DirBuffer[i-1]==DIR_DOWN && dn1>up1 && dn0