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-20-2005, 02:29 PM
alanlaw alanlaw is offline
Junior Member
 
Join Date: Dec 2005
Posts: 11
alanlaw is on a distinguished road
Question Urgent: iMAOnArray and IMA? (Revised. One more problem. Please help)

Dear All,

Could anyone tell me how to declare a array and than use the iMAOnArray or IMA function and to program a moving average on indicators, like macd histogram or momentum?

Please help me. Urgent.I have spend few days on working this.

Thank you very much.


Victor

Last edited by alanlaw : 12-20-2005 at 06:25 PM.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 12-20-2005, 04:46 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 iMAOnArray

Quote:
Originally Posted by alanlaw
Dear All,

Could anyone tell me how to declare a array and than use the iMAOnArray or IMA function and to program a moving average on indicators, like macd histogram or momentum?

Please help me. Urgent.I have spend few days on working this.

Thank you very much.


Victor
Hi Victor,
If I understood your problem correctly this code might help:
PHP Code:
//+------------------------------------------------------------------+
//|                                             iMAOnArray Demo.mq4 |
//|                                                     Codersguru |
//|                                         http://www.forex-tsd.com |
//+------------------------------------------------------------------+
#property copyright "Codersguru"
#property link      "http://www.forex-tsd.com"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue

//---- buffers
double ExtMapBuffer1[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   
SetIndexStyle(0,DRAW_LINE);
   
SetIndexBuffer(0,ExtMapBuffer1);
   
string short_name "iMAOnArray demo";
   
IndicatorShortName(short_name);
//----
   
return(1);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                     |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   
return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                             |
//+------------------------------------------------------------------+
int start()
  {
   
int i,limit;

   
double MyArray[]; //declare an array
   
   
int counted_bars=IndicatorCounted();
   if(
counted_bars>0counted_bars--;
   
limit=Bars-counted_bars;
   
   
ArrayResizeMyArraylimit); //resize the array to the number of bars
   
ArraySetAsSeries(MyArray,true); //reverse the array direction. 



   
for(i=0i<limiti++)
   {
   
MyArray[i] = iMA(NULL,0,13,8,MODE_EMA,PRICE_CLOSE,i);
   Print(
"MyArray = ",MyArray[i]);
   }
   for(
i=0i<limiti++)
   {
   
ExtMapBuffer1[i] = iMAOnArray(MyArray,limit,13,8,MODE_EMA,i);
   Print(
"ExtMapBuffer1 = " ExtMapBuffer1[i]);
   }


   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
  #3 (permalink)  
Old 12-20-2005, 05:58 PM
alanlaw alanlaw is offline
Junior Member
 
Join Date: Dec 2005
Posts: 11
alanlaw is on a distinguished road
Please help. Problem in using ind_buffer

Dear Coders' Guru

Wa!!! it's amazing!!! Thank's to Coders' Guru.
I can display my moving average after adding
" ArrayResize( temp2, limit);
ArraySetAsSeries(temp2,true);
ArrayResize( temp3, limit);
ArraySetAsSeries(temp3,true); "

But what is the logic behide?

I still have a problem. 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 you help me solve 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);
  } 

Last edited by alanlaw : 12-20-2005 at 06:13 PM.
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
URGENT Query junglelion Indicators - Metatrader 4 0 06-03-2007 09:16 PM
Is iMAOnArray() 'broken'.....? omelette General Discussion 6 04-30-2007 12:28 AM
Urgent !!! junglelion Expert Advisors - Metatrader 4 10 02-15-2007 03:37 PM
urgent plz waleed9091 Expert Advisors - Metatrader 4 5 05-14-2006 09:45 PM


All times are GMT. The time now is 03:01 AM.