Forex
Google

Go Back   Forex Trading > Metatrader Training > Metatrader 4 mql 4 - Development course > Questions
Forex Forum Register FAQ Members List Calendar Search Today's Posts Mark Forums Read


Register in Forex TSD!
Trading Systems Leaders in this forum (automated trading systems) are winning more than 3000 pips in a month (30000$ investing one lot every time).
Click here to register and get more information

Reply
 
LinkBack Thread Tools Display Modes
  #1 (permalink)  
Old 12-21-2005, 06:00 PM
alanlaw alanlaw is offline
Junior Member
 
Join Date: Dec 2005
Posts: 11
alanlaw is on a distinguished road
Question Problem in using ind_buffer

Dear all

I try to add a moving average to macd histogram. The color of the line will change if the histogram cross this line. So, I use two arrays, ind_buffer5 and ind_buffer6 to hold the moving average values. I don't why my indicator can only show the value in ind_buffer5 and the value of ind_buffer6 is always zero. Therefore, I simple subsitute different value to ind_buffer6,e.g. ind_buffer6=0.01*i. But the result is still the same. All the values in ind_buffer6 are zero. I kown that the maximun number of indicator_buffer is 8. I didn't exceed its limit. Why this happen??

Could anyone help me solving these problem?

thank you very much

Victor

PHP Code:
//+------------------------------------------------------------------+ 
//|                                                  Custom MACD.mq4 | 
//|                      Copyright ?2004, MetaQuotes Software Corp. | 
//|                                       [url]http://www.metaquotes.net/[/url] | 
//+------------------------------------------------------------------+ 
#property  copyright "Copyright ?2004, MetaQuotes Software Corp." 
#property  link      "http://www.metaquotes.net/" 
//---- indicator settings 
#property  indicator_separate_window 
#property  indicator_buffers 6 
#property  indicator_color1  OrangeRed 
#property  indicator_color2  Yellow 
#property  indicator_color3  Lime 
#property  indicator_color4  OrangeRed 
#property  indicator_color5  Aqua 
#property  indicator_color6  Red 
//int indicator_color3; 
//---- indicator parameters 
extern int FastEMA=19
extern int SlowEMA=89
extern int SignalSMA=13
extern int HisEMA=5
//extern double Interval=0.001; 
//---- indicator buffers 
double     ind_buffer1[]; 
double     ind_buffer2[]; 
double     ind_buffer3[]; 
double     ind_buffer4[]; 
double     ind_buffer5[]; 
double     ind_buffer6[]; 
double     temp,temp1
double     temp2[],temp3[]; 
//+------------------------------------------------------------------+ 
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+ 
int init() 
  { 
//---- drawing settings 
   
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1); 
   
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1); 
   
SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,1); 
   
SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,1); 
   
SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,1); 
   
SetIndexStyle(5,DRAW_LINE,STYLE_SOLID,1); 
   
SetIndexDrawBegin(1,SignalSMA); 
   
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1  ); 
//---- indicator buffers mapping 
   
if(!SetIndexBuffer(0,ind_buffer1) && !SetIndexBuffer(1,ind_buffer2)&& !SetIndexBuffer(2,ind_buffer3)&& !SetIndexBuffer(3,ind_buffer4)&& !SetIndexBuffer(4,ind_buffer5)) 
      Print(
"cannot set indicator buffers!"); 
//---- name for DataWindow and indicator subwindow label 
   
IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalSMA+")"); 
   
SetIndexLabel(0,"MACD"); 
   
SetIndexLabel(1,"Signal"); 
    
//---- initialization done 
    
   
return(0); 
  } 
//+------------------------------------------------------------------+ 
//| Moving Averages Convergence/Divergence                           | 
//+------------------------------------------------------------------+ 
int start() 
  { 
   
int limit
   
int counted_bars=IndicatorCounted(); 
//---- check for possible errors 
   
if(counted_bars<0) return(-1); 
//---- last counted bar will be recounted 
   
if(counted_bars>0counted_bars--; 
   
limit=Bars-counted_bars
    
   
ArrayResizetemp2limit); 
   
ArraySetAsSeries(temp2,true); 
   
ArrayResizetemp3limit); 
   
ArraySetAsSeries(temp3,true); 
    
//---- macd counted in the 1-st buffer 
   
for(int i=0i<limiti++) 
      
ind_buffer1[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i); 
//---- signal line counted in the 2-nd buffer 
   
for(i=0i<limiti++) 
      
ind_buffer2[i]=iMAOnArray(ind_buffer1,Bars,SignalSMA,0,MODE_SMA,  i); 
     
   for(
i=0i<limiti++) 
      { 
       
temp=3.8*(ind_buffer1[i]-ind_buffer2[i]); 
       
temp1=(ind_buffer1[i]-ind_buffer2[i])-(ind_buffer1[i+1]-ind_buffer2    [i+1]); 
       if(
temp1>0) {ind_buffer3[i]=temp;ind_buffer4[i]=0;} 
       else       {
ind_buffer3[i]=0;ind_buffer4[i]=temp;} 
        
      } 
       
   for(
i=0i<limiti++) 
      { 
         
temp2[i]=3.8*(ind_buffer1[i]-ind_buffer2[i]); 
      }    
       
   for(
i=0i<limiti++) 
      { 
         
temp3[i]=iMAOnArray(temp2,Bars,HisEMA,0,MODE_EMA,i); 
         if(
temp2[i]>temp3[i]) {ind_buffer5[i]=temp3[i];ind_buffer6[i]=0;} 
         else {
ind_buffer5[i]=0;ind_buffer6[i]=temp3[i];} 
      } 
       
//---- done 
   
return(0); 
  } 
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 12-21-2005, 06:59 PM
beerhunter's Avatar
beerhunter beerhunter is offline
Member
 
Join Date: Nov 2005
Posts: 43
beerhunter is on a distinguished road
Add this to the init() function:


SetIndexBuffer(0,ind_buffer1);
SetIndexBuffer(1,ind_buffer2);
SetIndexBuffer(2,ind_buffer3);
SetIndexBuffer(3,ind_buffer4);
SetIndexBuffer(4,ind_buffer5);
SetIndexBuffer(5,ind_buffer6);
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #3 (permalink)  
Old 12-21-2005, 09:16 PM
codersguru's Avatar
codersguru codersguru is offline
Senior Member
 
Join Date: Oct 2005
Posts: 987
codersguru has a spectacular aura aboutcodersguru has a spectacular aura aboutcodersguru has a spectacular aura about
Arrow SetIndexBuffer!

alanlaw,

You forgot to set the SetIndexBuffer for ind_buffer6

Change this line:

PHP Code:
if(!SetIndexBuffer(0,ind_buffer1) && !SetIndexBuffer(1,ind_buffer2)&& !SetIndexBuffer(2,ind_buffer3)&& !SetIndexBuffer(3,ind_buffer4)&& !SetIndexBuffer(4,ind_buffer5)) 
To:

PHP Code:
if(!SetIndexBuffer(0,ind_buffer1) && !SetIndexBuffer(1,ind_buffer2)&& !SetIndexBuffer(2,ind_buffer3)&& !SetIndexBuffer(3,ind_buffer4)&& !SetIndexBuffer(4,ind_buffer5) && !SetIndexBuffer(5,ind_buffer6)) 
And tell me what do you think?

Quote:
Originally Posted by alanlaw
Dear all

I try to add a moving average to macd histogram. The color of the line will change if the histogram cross this line. So, I use two arrays, ind_buffer5 and ind_buffer6 to hold the moving average values. I don't why my indicator can only show the value in ind_buffer5 and the value of ind_buffer6 is always zero. Therefore, I simple subsitute different value to ind_buffer6,e.g. ind_buffer6=0.01*i. But the result is still the same. All the values in ind_buffer6 are zero. I kown that the maximun number of indicator_buffer is 8. I didn't exceed its limit. Why this happen??

Could anyone help me solving these problem?

thank you very much

Victor

PHP Code:
//+------------------------------------------------------------------+ 
 //|                                                  Custom MACD.mq4 | 
 //|                      Copyright ?2004, MetaQuotes Software Corp. | 
 //|                                       http://www.metaquotes.net/ | 
 //+------------------------------------------------------------------+ 
 #property  copyright "Copyright ?2004, MetaQuotes Software Corp." 
 #property  link      "http://www.metaquotes.net/" 
 //---- indicator settings 
 #property  indicator_separate_window 
 #property  indicator_buffers 6 
 #property  indicator_color1  OrangeRed 
 #property  indicator_color2  Yellow 
 #property  indicator_color3  Lime 
 #property  indicator_color4  OrangeRed 
 #property  indicator_color5  Aqua 
 #property  indicator_color6  Red 
 //int indicator_color3; 
 //---- indicator parameters 
 
extern int FastEMA=19
 
extern int SlowEMA=89
 
extern int SignalSMA=13
 
extern int HisEMA=5
 
//extern double Interval=0.001; 
 //---- indicator buffers 
 
double     ind_buffer1[]; 
 
double     ind_buffer2[]; 
 
double     ind_buffer3[]; 
 
double     ind_buffer4[]; 
 
double     ind_buffer5[]; 
 
double     ind_buffer6[]; 
 
double     temp,temp1
 
double     temp2[],temp3[]; 
 
//+------------------------------------------------------------------+ 
 //| Custom indicator initialization function                         | 
 //+------------------------------------------------------------------+ 
 
int init() 
   { 
 
//---- drawing settings 
    
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1); 
    
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1); 
    
SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,1); 
    
SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,1); 
    
SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,1); 
    
SetIndexStyle(5,DRAW_LINE,STYLE_SOLID,1); 
    
SetIndexDrawBegin(1,SignalSMA); 
    
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1  ); 
 
//---- indicator buffers mapping 
if(!SetIndexBuffer(0,ind_buffer1) && !SetIndexBuffer(1,ind_buffer2)&& !SetIndexBuffer(2,ind_buffer3)&& !SetIndexBuffer(3,ind_buffer4)&& !SetIndexBuffer(4,ind_buffer5)) 
       Print(
"cannot set indicator buffers!"); 
 
//---- name for DataWindow and indicator subwindow label 
    
IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalSMA+")"); 
    
SetIndexLabel(0,"MACD"); 
    
SetIndexLabel(1,"Signal"); 
     
 
//---- initialization done 
     
    
return(0); 
   } 
 
//+------------------------------------------------------------------+ 
 //| Moving Averages Convergence/Divergence                           | 
 //+------------------------------------------------------------------+ 
 
int start() 
   { 
    
int limit
    
int counted_bars=IndicatorCounted(); 
 
//---- check for possible errors 
    
if(counted_bars<0) return(-1); 
 
//---- last counted bar will be recounted 
    
if(counted_bars>0counted_bars--; 
    
limit=Bars-counted_bars
     
    
ArrayResizetemp2limit); 
    
ArraySetAsSeries(temp2,true); 
    
ArrayResizetemp3limit); 
    
ArraySetAsSeries(temp3,true); 
     
 
//---- macd counted in the 1-st buffer 
    
for(int i=0i<limiti++) 
       
ind_buffer1[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i); 
 
//---- signal line counted in the 2-nd buffer 
    
for(i=0i<limiti++) 
       
ind_buffer2[i]=iMAOnArray(ind_buffer1,Bars,SignalSMA,0,MODE_SMA,  i); 
      
    for(
i=0i<limiti++) 
       { 
        
temp=3.8*(ind_buffer1[i]-ind_buffer2[i]); 
        
temp1=(ind_buffer1[i]-ind_buffer2[i])-(ind_buffer1[i+1]-ind_buffer2    [i+1]); 
        if(
temp1>0) {ind_buffer3[i]=temp;ind_buffer4[i]=0;} 
        else       {
ind_buffer3[i]=0;ind_buffer4[i]=temp;} 
         
       } 
        
    for(
i=0i<limiti++) 
       { 
          
temp2[i]=3.8*(ind_buffer1[i]-ind_buffer2[i]); 
       }    
        
    for(
i=0i<limiti++) 
       { 
          
temp3[i]=iMAOnArray(temp2,Bars,HisEMA,0,MODE_EMA,i); 
          if(
temp2[i]>temp3[i]) {ind_buffer5[i]=temp3[i];ind_buffer6[i]=0;} 
          else {
ind_buffer5[i]=0;ind_buffer6[i]=temp3[i];} 
       } 
        
 
//---- done 
    
return(0); 
   } 
__________________
Hope it helps !
Coders' Guru
Senior MQL programmer:
www.xpworx.com/custom.htm
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #4 (permalink)  
Old 12-22-2005, 07:48 AM
alanlaw alanlaw is offline
Junior Member
 
Join Date: Dec 2005
Posts: 11
alanlaw is on a distinguished road
Thanks to Beerhunter and codersguru

Dear Beerhunter and codersguru

My problem is solved after following your suggestion. Thank you very much for your reply titled "IMA and IMAOnArray" and "Problem in ind_buffer". I know how to program C++ before, but I face many difficulties in programming MQL4. I can't program my MACD sucessfully without your help. Let me say thanks once again.

Thank you very much.

Best Regards

Victor
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


Similar Threads
Thread Thread Starter Forum Replies Last Post
Problem with .ex4................. EFX General Discussion 4 10-21-2006 07:23 AM
Problem with BGcross EA Andrewsurfer Expert Advisors - Metatrader 4 2 05-26-2006 06:13 AM
Backtesting Problem juanchoc Expert Advisors - Metatrader 4 3 05-23-2006 03:26 PM
My First EA problem demag Questions 4 02-10-2006 08:18 AM
I've a Problem here hellkas Metatrader 4 6 11-04-2005 12:30 AM


All times are GMT. The time now is 10:41 AM.