//+------------------------------------------------------------------+ //| hiro.mq4 | //| Rondo | //| http://fx-dollaryen.seesaa.net/ | //+------------------------------------------------------------------+ #property copyright "Rondo" #property link "http://fx-dollaryen.seesaa.net/" #property version "1.0" #property strict #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Blue #property indicator_color2 Red enum select{ counts = 0, //陰線陽線の本数比較 volume = 1 //ボリューム値をベース }; input select compare = 1; //比較対象 double up[], down[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { SetIndexStyle(0, DRAW_ARROW); SetIndexStyle(1, DRAW_ARROW); SetIndexArrow(0, SYMBOL_ARROWUP); SetIndexArrow(1, SYMBOL_ARROWDOWN); SetIndexBuffer(0, up); SetIndexBuffer(1, down); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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 limit=rates_total-prev_calculated; if(limit > 0){ int m1totalBars = iBars(NULL, PERIOD_M1); int bufIndex = iBarShift(NULL, 0, iTime(NULL, PERIOD_M1, m1totalBars)); for(int i=m1totalBars; i>=0; i--){ static int volUp, volDown; if(compare == 0){ if(iOpen(NULL, PERIOD_M1, i) < iClose(NULL, PERIOD_M1, i)) volUp += 1; if(iOpen(NULL, PERIOD_M1, i) > iClose(NULL, PERIOD_M1, i)) volDown += 1; } else{ int vol = (int)iVolume(NULL, PERIOD_M1, i); if(iOpen(NULL, PERIOD_M1, i) < iClose(NULL, PERIOD_M1, i)) volUp += vol; if(iOpen(NULL, PERIOD_M1, i) > iClose(NULL, PERIOD_M1, i)) volDown += vol; } int index = iBarShift(NULL, 0, iTime(NULL, PERIOD_M1, i)); if(bufIndex != index){ double open1 = iOpen(NULL, 0, bufIndex); double close1 = iClose(NULL, 0, bufIndex); if(volUp > volDown && open1 >= close1) up[bufIndex] = iLow(NULL, 0, bufIndex); if(volUp < volDown && open1 <= close1) down[bufIndex] = iHigh(NULL, 0, bufIndex); volUp = 0; volDown = 0; bufIndex = index; } } } return(rates_total); } //+------------------------------------------------------------------+