Do you really expect an answer? There are no mind readers here and our crystal balls are cracked. Always post all relevant code (using Code button) or attach the source file. We can't see your broken code.
Use the debugger or print out your variables, including _LastError and prices and find out why. Do you really expect us to debug your code for you?
Code debugging - Developing programs - MetaEditor Help
Error Handling and Logging in MQL5 - MQL5 Articles (2015)
Tracing, Debugging and Structural Analysis of Source Code - MQL5 Articles (2011)
Introduction to MQL5: How to write simple Expert Advisor and Custom Indicator - MQL5 Articles (2010)
/I don't expect you debug my code. I think its platform problem or broker. is this true: multipair expert adviser is crashes more than single pair؟ if it is true why it works in demo but crash after a while in real account
99.9% of the time, it is the code that is the problem and not the platform nor the broker.
But since you did not provide your code, you will have to debug it and figure out the problem on your own.
You also did not mention verifying your log files, so you should do that too.
this is my code:
//+------------------------------------------------------------------+ //| Zscore Diff 2 pairs EA.mq4 | //| Ronaldo Araújo de Farias | //| ronaldo.a.f@gmail.com | //+------------------------------------------------------------------+ #property copyright "mm" #property link "http://www.forexfactory.com" #property version "2.10" //--- main parameters //--- input parameters extern int Period_=500; extern string Pair2="NZDUSD"; //timeframe extern int tf=15; //pair number eurusd=1,usdchf=2,usdcad=3,gbpusd=4,nzdusd=5,audusd=6 extern int Pairnumber=5; //volume double lotss=0.56; //levels !note the zero level is not acouunted extern string HighLevelValues="4.5;5.5;6.5"; extern string LowLevelValues="-4.5;-5.5;-6.5"; int numberofleveles=8; extern double CloseHighAtLevel=0; double CloseLowAtLevel=- CloseHighAtLevel; int Slippage=5; int MAGICNUMBER; double High_Level_Value[]; bool High_Level_Actived[]; double Low_Level_Value[]; bool Low_Level_Actived[]; static datetime timeprev; int i, nHL, nLL, Instance,x; string arr[]; string arr1[]; string arrpair[]; string arrtf[]; string Current_Level="-"; //--idiff------------------------------------------------------------------------------------------ double iDiff(){ double s,desv_1,desv_2,MA_1,MA_2,c2; int j; MA_1 = iMA(Symbol(),0,Period_,0,MODE_SMA,PRICE_CLOSE,0); MA_2 = iMA(Pair2,0,Period_,0,MODE_SMA,PRICE_CLOSE,0); //---Calculates the sample standard deviation Pair 1 ------- s=0; for(j=0;j<Period_;j++){ s+=MathPow(MA_1-Close[j],2); } desv_1 = MathSqrt(s/(Period_-1)); if(desv_1 == 0) desv_1 = 0.00001; // divide zero protection s=0; for(j=0;j<Period_;j++){ //Close Pair 2 c2=iClose(Pair2,0,j); s+=MathPow(MA_2-c2,2); } desv_2 = MathSqrt(s/(Period_-1)); if(desv_2 == 0) desv_2 = 0.00001; // divide zero protection //---------------- c2=iClose(Pair2,0,0); double Zscore1=(Close[0]-MA_1)/desv_1; //Pair1 double Zscore2=(c2-MA_2)/desv_2; //Pair2 return (Zscore1-Zscore2); } //-----long and short----------------------------------------- int _Long(string pair, color cor, string comment,string level){ return ( OrderSend(pair,OP_BUY,lotss,MarketInfo(pair,MODE_ASK),Slippage,0,0,comment,MAGICNUMBER,0) ); } int _Short(string pair, color cor, string comment,string level){ return ( OrderSend(pair,OP_SELL,lotss,MarketInfo(pair,MODE_BID),Slippage,0,0,comment,MAGICNUMBER,0) ); } int Buy_And_Sell(string level, double zscore_diff=0){ //Buy first pair and Sell second pair _Long(Symbol(),Green, "L;" +level +";" +"+" +Pairnumber+"@" +tf+";" + zscore_diff,level ); _Short(Pair2,Green, "L;" +level +";" +"+" +Pairnumber+"@" +tf+";" + zscore_diff,level); Current_Level="L"+level; return(0); } int Sell_And_Buy(string level, double zscore_diff=0){ //Sell first pair and Buy second pair _Short(Symbol(),Red, "H;" +level +";" +"+" +Pairnumber+"@" +tf+";" + zscore_diff,level); _Long(Pair2,Green ,"H;" +level +";" +"+" +Pairnumber+"@" +tf+";" + zscore_diff,level); Current_Level="H"+level; return(0); } //------checkorder----------------------------------------------------- void CheckOrders(){ Current_Level="-"; int max_level=-1; // iterate the orders for (i=OrdersTotal()-1;i>=0;i--) { // select the order x=OrderSelect(i,SELECT_BY_POS); //Read OrderComent and parse fields //H or L; Level; Zscore_diff if (OrderMagicNumber()==MAGICNUMBER ) { StringSplit(OrderComment(), StringGetCharacter(";",0) , arr ); if (StrToInteger(arr[1])>max_level) max_level=arr[1]; } } if (max_level>-1){ for(i=0;i<=max_level;i++){ if (arr[0]=="H" ) High_Level_Actived[i]=true; if (arr[0]=="L" ) Low_Level_Actived[i]=true; } Current_Level=arr[0]+max_level; } } //-------------close order---------------------- int Close_All_Orders(){ // while there are open orders... while (OrdersTotal() > 0) { // iterate the orders for (i=OrdersTotal()-1;i>=0;i--) { // select the order x=OrderSelect(i,SELECT_BY_POS); if (OrderMagicNumber()==MAGICNUMBER ) { //Read OrderComent and parse fields //H or L; Level; Zscore_diff StringSplit(OrderComment(), StringGetCharacter("+",0) , arrpair ); StringSplit(arrpair[1], StringGetCharacter("@",0) , arrpair ); StringSplit(OrderComment(), StringGetCharacter("@",0) , arrtf ); StringSplit(arrtf[1], StringGetCharacter(";",0) , arrtf ); if (arrpair[0]==IntegerToString(Pairnumber)&&(arrtf[0]==IntegerToString(tf) )){ switch(OrderType()) { case OP_BUY: x=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol() ,MODE_BID),Slippage); break; case OP_SELL: x=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol() ,MODE_ASK),Slippage); break; default: x=OrderDelete(OrderTicket()); } } } } } for(i=0;i< ArraySize(High_Level_Value );i++){ Low_Level_Actived[i]=false; High_Level_Actived[i]=false; } return(0); } int MagicNumber(){ string pairs=Symbol()+Pair2; int sum=0; for (i=0;i<StringLen(pairs);i++){ sum+=MathPow(13,i)*StringGetChar(pairs, i); } return( MathMod(sum,32767) ); } //=================================================================================================================== //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { string Hs[], Ls[]; MAGICNUMBER=MagicNumber(); nHL=StringSplit(HighLevelValues, StringGetCharacter(";",0) , Hs ); nLL=StringSplit(LowLevelValues, StringGetCharacter(";",0) , Ls ); ArrayResize(High_Level_Value, nHL); ArrayResize(Low_Level_Value, nLL); ArrayResize(High_Level_Actived, nHL); ArrayResize(Low_Level_Actived, nLL); for (i=0;i<nHL;i++){ High_Level_Value[i]=StrToDouble(Hs[i]); High_Level_Actived[i]=false; } for (i=0;i<nLL;i++){ Low_Level_Value[i]=StrToDouble(Ls[i]); Low_Level_Actived[i]=false; } CheckOrders(); return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- ObjectDelete(0,"ObjName"); //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ void OnTick(){ //insurance miscalculation if ( Bars( Symbol(),0 )<Period_ || Bars( Pair2 ,0 )<Period_ ) return(0); //Display("Zscore Diff "+ Symbol() + "-" + Pair2 + ": " + NormalizeDouble(Diff,3) +" | "+ Current_Level); static datetime timeprev; if(timeprev==Time[0]) { return(0); //only execute on new bar } else if (timeprev==0) { timeprev=Time[0]; // do nothing if freshly added to chart return(0); } else { timeprev=Time[0]; double Diff = iDiff(); //double coint =icoint(); CheckOrders(); for(i=0;i<nHL-1;i++){ if(High_Level_Actived[i]==false){ if(Diff>High_Level_Value[i] &&Diff<High_Level_Value[i+1]){ High_Level_Actived[i]=true; Sell_And_Buy(i,Diff); } } if(Low_Level_Actived[i]==false){ if(Diff<Low_Level_Value[i]&&Diff>Low_Level_Value[i+1] ){ Low_Level_Actived[i]=true; Buy_And_Sell(i,Diff); } } if(Diff<=CloseHighAtLevel && High_Level_Actived[i]==true){ Close_All_Orders(); } if(Diff>=CloseLowAtLevel && Low_Level_Actived[i]==true){ Close_All_Orders(); } } Comment( // "---------------------------------------------------------" + "\n", "Pairs : " + Symbol() + " - " + Pair2 + "\n", "Zsocre: " + Diff +"\n" // "Level : " + Current_Level +"\n", // "Profit: " + Profit_By_Level(-1) + " pips" + "\n", // "---------------------------------------------------------"+ "\n ); } return(0); } //+------------------------------------------------------------------+
Your "Your "Close_All_Orders()" will go into an infinite loop and "freeze" if there are any orders that do not qualify by magic number or if it is unable to close those orders ...
int Close_All_Orders(){ // while there are open orders... while (OrdersTotal() > 0) ...
You should not rely on OdersTotal being zero because it will clash with manual trading or other EAs.
Also you are mixing old MQL4 event handlers with the newer MQL4+ handlers. Instead of init() and deinit(), use OnInit() and OnDeinit().
Also use "#property strict" to pick up on more errors and warnings and fix all of of then, including the warnings.
Thanks Fernando. I will apply your advises and I hope it will be resolved.
Your "Your "Close_All_Orders()" will go into an infinite loop and "freeze" if there are any orders that do not qualify by magic number or if it is unable to close those orders ...
You should not rely on OdersTotal being zero because it will clash with manual trading or other EAs.
Also you are mixing old MQL4 event handlers with the newer MQL4+ handlers. Instead of init() and deinit(), use OnInit() and OnDeinit().
Also use "#property strict" to pick up on more errors and warnings and fix all of of then, including the warnings.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hi every one
I wrote an arbitrage expert advisor which is trade two pairs in same time. expert is working good in demo account but when I change account to real, it s working for some time and also open positions but after a while it s freezing. restarting the MT4 don't solve the problem. again when i change account from real to demo it works.