iCustom + Heiken Ashi - High/Open and Close/Low pairs - always exactly the same??

 

Hi guys,

Just trying to build a doji detector for Heiken Ashi using iCustom.

bool check_for_heiken_doji() {
double HAHigh = NormalizeDouble(iCustom(NULL,0,"Heiken Ashi", 0, 0), Digits);
double HALow = NormalizeDouble(iCustom(NULL,0,"Heiken Ashi", 1, 0), Digits);
double HAOpen = NormalizeDouble(iCustom(NULL,0,"Heiken Ashi", 2, 0), Digits);
double HAClose = NormalizeDouble(iCustom(NULL,0,"Heiken Ashi", 3, 0), Digits);
Print("High: " + HAHigh, " Open: " + HAOpen, " Close: " + HAClose, " Low: " + HALow);
}

I'm probably doing something terribly obviously wrong, but my output is:

High: 40.12900000 Open: 40.12900000 Close: 39.59000000 Low: 39.59000000
High: 40.33600000 Open: 40.33600000 Close: 40.16000000 Low: 40.16000000
High: 40.43500000 Open: 40.43500000 Close: 40.43000000 Low: 40.43000000
High: 40.36200000 Open: 40.36200000 Close: 40.60000000 Low: 40.60000000


As you can see the high and open values are always the same, likewise for close/low. However, visual inspection of the bars indicates this is definately not the case! Even if i have the wrong buffer/OHLC, these values certainly shouldnt always be the same in pairs..

I don't understand if I am using the wrong buffer from the indicator, or incorrect syntax in iCustom... any ideas?

Thanks,

Sera

 
When I look at Heiken Ashi.mq4 I see
extern color color1 = Red;
extern color color2 = White;
extern color color3 = Red;
extern color color4 = White;
         ExtMapBuffer1[pos]=haHigh;
         ExtMapBuffer2[pos]=haLow;
        } 
      ExtMapBuffer3[pos]=haOpen;
      ExtMapBuffer4[pos]=haClose;
  1. You not passing any parameters to it, and add some defines to get the right buffer.
    color color1 = Red;
    color color2 = White;
    color color3 = Red;
    color color4 = White;
    #define HAHIGH      0
    #define HALOW       1
    #define HAOPEN      2
    #define HACLOSE     3
    double HAHigh = iCustom(NULL,0,"Heiken Ashi", color1,color2,color3,color4, HAHIGH, 0);
    There's never a need for normalize.
  2. Print("High: " + HAHigh, " Open: " + HAOpen, " Close: " + HAClose, " Low: " + HALow);
    Print defaults to 4 digits, try Print("High: ", PriceToStr(HAHigh)...
    //++++ These are adjusted for 5 digit brokers.
    int     pips2points;    // slippage  3 pips    3=points    30=points
    double  pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
    int     Digits.pips;    // DoubleToStr(dbl/pips2dbl, Digits.pips)
    int     init(){
        if (Digits == 5 || Digits == 3){    // Adjust for five (5) digit brokers.
                    pips2dbl    = Point*10; pips2points = 10;   Digits.pips = 1;
        } else {    pips2dbl    = Point;    pips2points =  1;   Digits.pips = 0; }
        // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
    }
    string  PriceToStr(double p){
        string pFrc = DoubleToStr(p, Digits);       if(Digits.pips==0) return(pFrc);
        string pPip = DoubleToStr(p, Digits-1);
        if (pPip+"0" == pFrc)       return(pPip);           return(pFrc);          }
    string  DeltaToPips(double d){
        if (d > 0)  string sign = "+";  else    sign = "";
        double pips = d / pips2dbl;
        string dPip = sign + DoubleToStr(pips, 0);  if(Digits.pips==0) return(dPip);
        string dFrc = sign + DoubleToStr(pips, Digits.pips);
        if (dPip+".0" == dFrc)      return(dPip);           return(dFrc);          }
    

 

Doh! Thanks mate, I totally forgot about the four candle color externs which obviously have to have a passed argument.

Cheers :)

 

Hey thanks again - I was about to post some more troubles I had - though I solved it - turns out I was trying to grab data from candle 0, which is 'new', no wonder I was having same pairs. looking at the last fully closed bar of index 1, and i get the right results.

Reason: