//+------------------------------------------------------------------+ //| VolumeAshiv1.00.mq5 | //| VolumeAshi v1.00 Copyright 2015, fxborg | //| http://blog.livedoor.jp/fxborg/ | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, fxborg" #property link "http://blog.livedoor.jp/fxborg/" #property version "1.00" #property indicator_separate_window #property indicator_buffers 8 #property indicator_plots 1 #property indicator_type1 DRAW_COLOR_CANDLES #property indicator_color1 Gray,DodgerBlue,Red #property indicator_width1 1 //--- input ENUM_TIMEFRAMES CalcTF=PERIOD_M5; // Calclation TimeFrame input int ResetMode=1; // 1:Year / 2:Month / 3:Week /4:Day input int ResetHour=0; // Reset Time(Hour) //--- //--- int Scale=PeriodSeconds(PERIOD_CURRENT)/PeriodSeconds(CalcTF); //--- //--- #define DIR_UP 1.0 #define DIR_DOWN 2.0 #define DIR_NONE 0.0 //--- double OpenBuffer[]; double HighBuffer[]; double LowBuffer[]; double CloseBuffer[]; double DirBuffer[]; //--- double UpVolBuffer[]; double DnVolBuffer[]; double TimeBuffer[]; //--- //---- 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; i(time[i]-10)) { //--- up_vol+= ((double)tf_rates[pos].tick_volume) * dir; dn_vol+= ((double)tf_rates[pos].tick_volume) * (1.0-dir); } //--- } MqlDateTime tm0,tm1,yesterday; TimeToStruct(time[i],tm0); TimeToStruct(time[i-1],tm1); bool isReset=false; bool is_update=false; if(tm1.hour!=tm0.hour && tm0.hour==ResetHour) { is_update=true; TimeBuffer[i]=(double)time[i]; TimeToStruct((datetime)TimeBuffer[i-1],yesterday); if(ResetMode==1 && tm0.year != yesterday.year ) isReset=true; if(ResetMode==2 && tm0.mon != yesterday.mon) isReset=true; if(ResetMode==3) { int w1=getWeekNumber(tm0.day_of_year,tm0.day_of_week); int w2=getWeekNumber(yesterday.day_of_year,yesterday.day_of_week); if(w1!=w2) isReset=true; } if(ResetMode==4) isReset=true; } if(!is_update)TimeBuffer[i]=TimeBuffer[i-1]; //--- UpVolBuffer[i]=(double)up_vol; DnVolBuffer[i]=(double)dn_vol*-1; OpenBuffer[i] = (isReset) ? 0.0: CloseBuffer[i-1]; HighBuffer[i] = OpenBuffer[i] + UpVolBuffer[i]; LowBuffer[i] = OpenBuffer[i] + DnVolBuffer[i]; CloseBuffer[i] = OpenBuffer[i] + (UpVolBuffer[i]+DnVolBuffer[i]); DirBuffer[i] =(OpenBuffer[i]0) return 1.0; if(dn>0 && up==0) return 0.0; if(dn==0 && up==0) return 0.5; double dir=(up/(up+dn)); if(dir>0.7) return 1.0; if(dir<0.3) return 0.0; return dir; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int getWeekNumber(const int day_of_year,const int day_of_week) { int iDay=(day_of_week)%7+1; // convert day to standard index (1=Mon,...,7=Sun) return(int)MathFloor(((day_of_year-iDay)+10)/7); // calculate standard week number } //+------------------------------------------------------------------+