Use the code format button </> to format your post. You can auto-indent your code with the Styler, Tools->Styler in MetaEditor.
The MA 1 and 2 values will never differ because they get the same handle.
void OnTick() { double mymovingaveragearray1[],mymovingaveragearray2[]; int movingaveragedefinition1 = iMA {_Symbol,_Period,20,0,MODE_EMA,PRICE_CLOSE}; int movingaveragedefinition2 = iMA {_Symbol,_Period,20,0,MODE_EMA,PRICE_CLOSE}; ArraySetAsSeries(mymovingaveragearray1,true); ArraySetAsSeries(mymovingaveragearray2,true); CopyBuffer(movingaveragedefinition1,0,0,3,mymovingaveragearray1); CopyBuffer(movingaveragedefinition2,0,0,3,mymovingaveragearray2); if( (mymovingaveragearray1[0]>mymovingaveragearray2[0]) && ((mymovingaveragearray1[1]<mymovingaveragearray2[1]) ) { Comment("BUY"); } if( (mymovingaveragearray1[0]<mymovingaveragearray2[0]) && ((mymovingaveragearray1[1]>mymovingaveragearray2[1]) ) { Comment("SELL"); } }
Answer above, look at the MA parameters, they don't differ. I guess you want short and long MA, so get the periods right.
'(...)' and '{...}' are different things in this language, so you need to understand this first.
input int MAPeriodFast=10; input int MAPeriodSlow=20; double MovingAverageBuffer1[]; double MovingAverageBuffer2[]; int MovingAverageHandle1; int MovingAverageHandle2; int OnInit() { MovingAverageHandle1=iMA(_Symbol,_Period,MAPeriodFast,0,MODE_EMA,PRICE_CLOSE); MovingAverageHandle2=iMA(_Symbol,_Period,MAPeriodSlow,0,MODE_EMA,PRICE_CLOSE); //ArraySetAsSeries(mymovingaveragearray1,true); //ArraySetAsSeries(mymovingaveragearray2,true); <-- not needed, 'true' is default in MQL5 return(INIT_SUCCEEDED); } void OnTick() { int start=0; int count=3; CopyBuffer(MovingAverageHandle1,MAIN_LINE,start,count,MovingAverageBuffer1); // <-- use speaking names as argument, it helps to understand your code better CopyBuffer(MovingAverageHandle2,MAIN_LINE,start,count,MovingAverageBuffer2); if( MovingAverageBuffer1[0]>MovingAverageBuffer2[0] && MovingAverageBuffer1[1]<MovingAverageBuffer2[1] ) { Comment("BUY"); } if( MovingAverageBuffer1[0]<MovingAverageBuffer2[0] && MovingAverageBuffer1[1]>MovingAverageBuffer2[1] ) { Comment("SELL"); } }
Try this one. I've moved some of the intializing code to OnInit().

You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
void OnTick()
{
double mymovingaveragearray1[],mymovingaveragearray2[];
int movingaveragedefinition1 = iMA {_Symbol,_Period,20,0,MODE_EMA,PRICE_CLOSE};
int movingaveragedefinition2 = iMA {_Symbol,_Period,20,0,MODE_EMA,PRICE_CLOSE};
ArraySetAsSeries(mymovingaveragearray1,true);
ArraySetAsSeries(mymovingaveragearray2,true);
CopyBuffer(movingaveragedefinition1,0,0,3,mymovingaveragearray1);
CopyBuffer(movingaveragedefinition2,0,0,3,mymovingaveragearray2);
if(
(mymovingaveragearray1[0]>mymovingaveragearray2[0])
&&
((mymovingaveragearray1[1]<mymovingaveragearray2[1])
)
{
Comment("BUY");
}
if(
(mymovingaveragearray1[0]<mymovingaveragearray2[0])
&&
((mymovingaveragearray1[1]>mymovingaveragearray2[1])
)
{
Comment("SELL");
}
}
any error in this or its the way i m compiling?