| / | Forum |
|
bonechair
2007.10.10 23:53
Hi
I have seen this question asked many times: The Heiken Ashi Indicator //+------------------------------------------------------------------+
//| Heiken Ashi.mq4 |
//| Copyright c 2004, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
//| For Heiken Ashi we recommend next chart settings ( press F8 or |
//| select on menu 'Charts'->'Properties...'): |
//| - On 'Color' Tab select 'Black' for 'Line Graph' |
//| - On 'Common' Tab disable 'Chart on Foreground' checkbox and |
//| select 'Line Chart' radiobutton |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 White
#property indicator_color3 Red
#property indicator_color4 White
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 3
#property indicator_width4 3
//----
extern color color1 = Red;
extern color color2 = White;
extern color color3 = Red;
extern color color4 = White;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
//----
int ExtCountedBars=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//|------------------------------------------------------------------|
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_HISTOGRAM, 0, 1, color1);
SetIndexBuffer(0, ExtMapBuffer1);
SetIndexStyle(1,DRAW_HISTOGRAM, 0, 1, color2);
SetIndexBuffer(1, ExtMapBuffer2);
SetIndexStyle(2,DRAW_HISTOGRAM, 0, 3, color3);
SetIndexBuffer(2, ExtMapBuffer3);
SetIndexStyle(3,DRAW_HISTOGRAM, 0, 3, color4);
SetIndexBuffer(3, ExtMapBuffer4);
//----
SetIndexDrawBegin(0,10);
SetIndexDrawBegin(1,10);
SetIndexDrawBegin(2,10);
SetIndexDrawBegin(3,10);
//---- indicator buffers mapping
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexBuffer(3,ExtMapBuffer4);
SetIndexBuffer(4,ExtMapBuffer5);
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//---- TODO: add your code here
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
double haOpen, haHigh, haLow, haClose;
if(Bars<=10) return(0);
ExtCountedBars=IndicatorCounted();
//---- check for possible errors
if (ExtCountedBars<0) return(-1);
//---- last counted bar will be recounted
if (ExtCountedBars>0) ExtCountedBars--;
int pos=Bars-ExtCountedBars-1;
while(pos>=0)
{
haOpen=(ExtMapBuffer3[pos+1]+ExtMapBuffer4[pos+1])/2;
haClose=(Open[pos]+High[pos]+Low[pos]+Close[pos])/4;
haHigh=MathMax(High[pos], MathMax(haOpen, haClose));
haLow=MathMin(Low[pos], MathMin(haOpen, haClose));
if (haOpen<haClose)
{
ExtMapBuffer1[pos]=haLow;
ExtMapBuffer2[pos]=haHigh;
ExtMapBuffer5[pos]=1;
GlobalVariableSet("heikenh",1);
}
else
{
ExtMapBuffer1[pos]=haHigh;
ExtMapBuffer2[pos]=haLow;
ExtMapBuffer5[pos]=2;
GlobalVariableSet("heikenh",2);
}
ExtMapBuffer3[pos]=haOpen;
ExtMapBuffer4[pos]=haClose;
pos--;
}
//----
return(0);
}
//+------------------------------------------------------------------+
How on earth do you get a value out of this thing. As you can see I got it right by making it a Global Variable but I want todo it with Icustom: double ha1 = iCustom(Symbol(),Period(),"Heiken Ashi",4,0); I created an indexbuffer 4 and thats what I want to get. I cant even get value 1,2 or 3? Anybody got anyidea where I'm going wrong? L. |
|
Championship Report: Fourth Week (23 – 30 October) The fourth week of the Automated Trading Championship 2006 has ended. A month had already passed since the start of this competition, however, two months are still yet to come, therefore let us strike some balance. |
|
phy
2007.10.11 00:01
"I have seen this question asked many times" What was the answer many times? There are 4 extern variables in the indicator, but you aren't setting them in your iCustom() |
|
bonechair
2007.10.11 00:35
Sorry I'm still learning.
Would you please be so generous and give me an example I dont have a clue what to put there? ha1 = iCustom(Symbol(),Period(),"Heiken Ashi",?,?,?,?,4,0); |
|
phy
2007.10.11 01:20
Parameters:
Sample:
declaration:
... deleted...
#property indicator_width3 3
#property indicator_width4 3 //---- extern color color1 = Red; extern color color2 = White; extern color color3 = Red; extern color color4 = White; //---- buffers ... deleted... ha1 = iCustom(Symbol(), Period(), "Heiken Ashi", color1, color2, color3,
color4, 4, 0);
|
|
DxdCn
2007.10.11 08:44
you can delete extern color color1 = Red; and then use: double ha1 = iCustom(Symbol(),Period(),"Heiken Ashi",4,0); |
|
bonechair
2007.10.11 10:06
THanks Guys. I actually tried both these last night and it still didn't work. But
now I set the 4 to 0 and started getting numbers. So it must be working.
Now Im trying to get 4 to work, Im still getting 0. I noticed this: #property indicator_buffers 4
Oops. And YES! I got it working, thank you so much |
|
DxdCn
2007.10.11 14:15
NO. #property indicator_buffers 4 so only double ha1 = iCustom(Symbol(),Period(),"Heiken Ashi",0~3,0); |
|
bonechair
2007.10.11 14:56
I know, I added a 5th one.
double ExtMapBuffer5[];
But Ive never seen 0~3 , can you use that? |
|
phy
2007.10.11 16:23
Good eye, DxdCn |
|
DxdCn
2007.10.11 17:37
Yes, my code all right! double ExtMapBuffer5[]; but: #property indicator_buffers 4 so even you set : SetIndexBuffer(4,ExtMapBuffer5); double ha1 = iCustom(Symbol(),Period(),"Heiken Ashi",4,0); can not work!!! Since : |
|
bonechair
2007.10.11 21:34
I said I know, Just relax!!! I should have been more clear before. I changed it
to 5 long before you even mentioned it, how else would I get 4 to work.
I'm new at mql4 scripting but NOT new at programming. Now I'm sitting with a new problem: ha1 = iCustom("EURUSD", "PERIOD_M1", "Heiken", 4, 0); ha2 = iCustom("EURUSD", "PERIOD_H1", "Heiken", 4, 0); Its on 2 different Periods but it keeps spitting out the same number and changes at the same time. Even if I try 0 to 3, same number. I have no idea why? Anybody know? |