Hi,
Can some kind soul help me in solving the error " array out of range in " . This happens only in certain pairs. This EA set sSToploss based on last few candles. Here is the code
Thanks a lot
Can some kind soul help me in solving the error " array out of range in " . This happens only in certain pairs. This EA set sSToploss based on last few candles. Here is the code
Inserted Code
#property copyright "Copyright 2014, susbin" #property link "http://www.mql5.com" #property version "1.00" #property strict //--- input parameters input ENUM_TIMEFRAMES LookTimeFrame=5; input bool Virtual=false; input bool Dynamic=true; input bool AllTrade=true; input int OnlyMagicNumber=4444; input string OnlyComment=""; input int LookBackCandles=10; input int AddToPeak=10; input int AddHardStopForBroker=10; input int MaximumStopLoss=100; input int MinimumStopLoss=10; input bool Displayscreen=true; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- ObjectsDeleteAll(EMPTY,OBJ_LABEL); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- double dSLBuy=0.0,dSLSell=0.0; int CmtLen=StringLen(OnlyComment); for(int x=0;x<OrdersTotal();x++) { if(OrderSelect(x,0)==true && OrderSymbol()==Symbol()) { if(AllTrade==true) { if(OrderType()==OP_BUY) { dSLBuy=iLow(OrderSymbol(),LookTimeFrame,iLowest(OrderSymbol(),LookTimeFrame,MODE_LOW,LookBackCandles,1))-AddToPeak*Pip(OrderSymbol()); dSLBuy=fmin(dSLBuy,OrderOpenPrice()-MinimumStopLoss*Pip(OrderSymbol())); dSLBuy=fmax(dSLBuy,OrderOpenPrice()-MaximumStopLoss*Pip(OrderSymbol())); if(AddHardStopForBroker>0 && Virtual==false) dSLBuy-=AddHardStopForBroker*Pip(OrderSymbol()); if(OrderStopLoss()==0.0) { if(Virtual==false) { bool bOrdMod=OrderModify(OrderTicket(),0.0,dSLBuy,OrderTakeProfit(),0); } else { static double dLSL=0.0; if(dLSL==0.0) dLSL=fmax(iLow(OrderSymbol(),LookTimeFrame,iLowest(OrderSymbol(),LookTimeFrame,MODE_LOW,LookBackCandles,1))-AddToPeak*Pip(OrderSymbol()),fmin(OrderOpenPrice()-MaximumStopLoss*Pip(OrderSymbol()),OrderOpenPrice()-MinimumStopLoss*Pip(OrderSymbol()))); if(MarketInfo(OrderSymbol(),MODE_ASK)<=dLSL && OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),4,clrBlue))dLSL=0.0; } } } if(OrderType()==OP_SELL) { dSLSell=iHigh(OrderSymbol(),LookTimeFrame,iHighest(OrderSymbol(),LookTimeFrame,MODE_HIGH,LookBackCandles,1))+AddToPeak*Pip(OrderSymbol()); dSLSell=fmax(dSLSell,Bid+MinimumStopLoss*Pip(OrderSymbol())); dSLSell=fmin(dSLSell,Bid+MaximumStopLoss*Pip(OrderSymbol())); if(AddHardStopForBroker>0 && Virtual==false) dSLSell+=AddHardStopForBroker*Pip(OrderSymbol()); if(OrderStopLoss()==0.0) { if(Virtual==false) bool bOrdMod=OrderModify(OrderTicket(),0.0,dSLSell,OrderTakeProfit(),0); else { static double dLSL=0.0; if(dLSL==0.0) dSLSell=fmin(iHigh(OrderSymbol(),LookTimeFrame,iHighest(OrderSymbol(),LookTimeFrame,MODE_HIGH,LookBackCandles,1))+AddToPeak*Pip(OrderSymbol()),fmax(Bid+MaximumStopLoss*Pip(OrderSymbol()),Bid+MinimumStopLoss*Pip(OrderSymbol()))); if(MarketInfo(OrderSymbol(),MODE_BID)>=dSLSell && OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),4,clrRed))dLSL=0.0; } } } } if(AllTrade==false && OrderMagicNumber()==OnlyMagicNumber) { if(OrderType()==OP_BUY) { dSLBuy=iLow(OrderSymbol(),LookTimeFrame,iLowest(OrderSymbol(),LookTimeFrame,MODE_LOW,LookBackCandles,1))-AddToPeak*Pip(OrderSymbol()); dSLBuy=fmin(dSLBuy,MarketInfo(OrderSymbol(),MODE_ASK)-MinimumStopLoss*Pip(OrderSymbol())); dSLBuy=fmax(dSLBuy,MarketInfo(OrderSymbol(),MODE_ASK)-MaximumStopLoss*Pip(OrderSymbol())); if(AddHardStopForBroker>0 && Virtual==false) dSLBuy-=AddHardStopForBroker*Pip(OrderSymbol()); if(OrderStopLoss()==0.0) { if(Virtual==false) bool bOrdMod=OrderModify(OrderTicket(),0.0,dSLBuy,OrderTakeProfit(),0); else { static double dLSL; if(dLSL==0.0) dLSL=fmax(iLow(OrderSymbol(),LookTimeFrame,iLowest(OrderSymbol(),LookTimeFrame,MODE_LOW,LookBackCandles,1))-AddToPeak*Pip(OrderSymbol()),fmin(MarketInfo(OrderSymbol(),MODE_ASK)-MaximumStopLoss*Pip(OrderSymbol()),MarketInfo(OrderSymbol(),MODE_ASK)-MinimumStopLoss*Pip(OrderSymbol()))); if(MarketInfo(OrderSymbol(),MODE_ASK)<=dLSL && OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),4,clrBlue))dLSL=0.0; } } } if(OrderType()==OP_SELL) { dSLSell=iHigh(OrderSymbol(),LookTimeFrame,iHighest(OrderSymbol(),LookTimeFrame,MODE_HIGH,LookBackCandles,1))+AddToPeak*Pip(OrderSymbol()); dSLSell=fmax(dSLSell,Bid+MinimumStopLoss*Pip(OrderSymbol())); dSLSell=fmin(dSLSell,Bid+MaximumStopLoss*Pip(OrderSymbol())); if(AddHardStopForBroker>0 && Virtual==false) dSLSell+=AddHardStopForBroker*Pip(OrderSymbol()); if(OrderStopLoss()==0.0) { if(Virtual==false) bool bOrdMod=OrderModify(OrderTicket(),0.0,dSLSell,OrderTakeProfit(),0); else { static double dLSL=0.0; if(dLSL==0.0) dSLSell=fmin(iHigh(OrderSymbol(),LookTimeFrame,iHighest(OrderSymbol(),LookTimeFrame,MODE_HIGH,LookBackCandles,1))+AddToPeak*Pip(OrderSymbol()),fmax(Bid+MaximumStopLoss*Pip(OrderSymbol()),Bid+MinimumStopLoss*Pip(OrderSymbol()))); if(MarketInfo(OrderSymbol(),MODE_BID)>=dSLSell && OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),4,clrRed))dLSL=0.0; } } } } if(AllTrade==false && StringSubstr(OrderComment(),0,CmtLen)==OnlyComment) { if(OrderType()==OP_BUY) { dSLBuy=iLow(OrderSymbol(),LookTimeFrame,iLowest(OrderSymbol(),LookTimeFrame,MODE_LOW,LookBackCandles,1))-AddToPeak*Pip(OrderSymbol()); dSLBuy=fmin(dSLBuy,MarketInfo(OrderSymbol(),MODE_ASK)-MinimumStopLoss*Pip(OrderSymbol())); dSLBuy=fmax(dSLBuy,MarketInfo(OrderSymbol(),MODE_ASK)-MaximumStopLoss*Pip(OrderSymbol())); if(AddHardStopForBroker>0 && Virtual==false) dSLBuy-=AddHardStopForBroker*Pip(OrderSymbol()); if(OrderStopLoss()==0.0 || (Dynamic==true && OrderStopLoss()!=dSLBuy)) { if(Virtual==false) bool bOrdMod=OrderModify(OrderTicket(),0.0,dSLBuy,OrderTakeProfit(),0); else { static double dLSL=0.0; if(dLSL==0.0) dLSL=fmax(iLow(OrderSymbol(),LookTimeFrame,iLowest(OrderSymbol(),LookTimeFrame,MODE_LOW,LookBackCandles,1))-AddToPeak*Pip(OrderSymbol()),fmin(MarketInfo(OrderSymbol(),MODE_ASK)-MaximumStopLoss*Pip(OrderSymbol()),MarketInfo(OrderSymbol(),MODE_ASK)-MinimumStopLoss*Pip(OrderSymbol()))); if(MarketInfo(OrderSymbol(),MODE_ASK)<=dLSL && OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),4,clrBlue))dLSL=0.0; } } } if(OrderType()==OP_SELL || OrderType()==OP_SELLLIMIT || OrderType()==OP_BUYLIMIT) { dSLSell=iHigh(OrderSymbol(),LookTimeFrame,iHighest(OrderSymbol(),LookTimeFrame,MODE_HIGH,LookBackCandles,1))+AddToPeak*Pip(OrderSymbol()); dSLSell=fmax(dSLSell,Bid+MinimumStopLoss*Pip(OrderSymbol())); dSLSell=fmin(dSLSell,Bid+MaximumStopLoss*Pip(OrderSymbol())); if(AddHardStopForBroker>0 && Virtual==false) dSLSell+=AddHardStopForBroker*Pip(OrderSymbol()); if(OrderStopLoss()==0.0) { if(Virtual==false) bool bOrdMod=OrderModify(OrderTicket(),0.0,dSLSell,OrderTakeProfit(),0); else { static double dLSL=0.0; if(dLSL==0.0) dSLSell=fmin(iHigh(OrderSymbol(),LookTimeFrame,iHighest(OrderSymbol(),LookTimeFrame,MODE_HIGH,LookBackCandles,1))+AddToPeak*Pip(OrderSymbol()),fmax(Bid+MaximumStopLoss*Pip(OrderSymbol()),Bid+MinimumStopLoss*Pip(OrderSymbol()))); if(MarketInfo(OrderSymbol(),MODE_BID)>=dSLSell && OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),4,clrRed))dLSL=0.0; } } } } } } if(Displayscreen==true) { string sSymArr[]; string sPriceArr[]; string sOrdTypArr[]; string sOrdSL[]; int Cnt=Total(AllTrade,CmtLen); ArrayResize(sSymArr,Cnt); ArrayResize(sPriceArr,Cnt); ArrayResize(sOrdTypArr,Cnt); ArrayResize(sOrdSL,Cnt); int cnt=0; for(int x=0;x<OrdersTotal();x++) { if(OrderSelect(x,0)==true && OrderSymbol()==Symbol()) { cnt++; if(AllTrade) { sSymArr[x]=OrderSymbol(); sPriceArr[x]=DoubleToStr(OrderOpenPrice(),_Digits); if(OrderType()==OP_BUY) sOrdTypArr[x]="Buy"; if(OrderType()==OP_SELL) sOrdTypArr[x]="Sell"; if(!Virtual) sOrdSL[x]=DoubleToStr(OrderStopLoss(),_Digits); else { if(OrderType()==OP_BUY) sOrdSL[x]=DoubleToStr(dSLBuy,_Digits); if(OrderType()==OP_SELL) sOrdSL[x]=DoubleToStr(dSLSell,_Digits); } } else { if(OrderMagicNumber()==OnlyMagicNumber || StringSubstr(OrderComment(),0,CmtLen)==OnlyComment) { sSymArr[x]=OrderSymbol(); sPriceArr[x]=DoubleToStr(OrderOpenPrice(),_Digits); if(OrderType()==OP_BUY) sOrdTypArr[x]="Buy"; if(OrderType()==OP_SELL) sOrdTypArr[x]="Sell"; if(!Virtual) sOrdSL[x]=DoubleToStr(OrderStopLoss(),_Digits); else { if(OrderType()==OP_BUY) sOrdSL[x]=DoubleToStr(dSLBuy,_Digits); if(OrderType()==OP_SELL) sOrdSL[x]=DoubleToStr(dSLSell,_Digits); } } } } } for(int x=1;x<=Cnt;x++) { CreateDisplay(IntegerToString(x),10,20*x,sSymArr[x-1]+" "+sOrdTypArr[x-1]+" Price: "+sPriceArr[x-1]+" SL: "+sOrdSL[x-1]); } if(Cnt<=0) ObjectsDeleteAll(0,OBJ_LABEL); } } //+------------------------------------------------------------------+ int Total(bool bAllTrade,int Clen) { int iCnt=0; for(int x=0;x<OrdersTotal();x++) { if(OrderSelect(x,0)==true && OrderSymbol()==Symbol()) { if(bAllTrade==true) { iCnt++; } else if(bAllTrade==false && OrderMagicNumber()==OnlyMagicNumber) { iCnt++; } else if(bAllTrade==false && StringSubstr(OrderComment(),0,Clen)==OnlyComment) { iCnt++; } } } return(iCnt); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CreateDisplay(string name,int x,int y,string text,int fontsize=9,string fontname="Arial",color fontcolor=clrWhite) { ObjectCreate(name,OBJ_LABEL,0,0,0.0); ObjectSet(name,OBJPROP_XDISTANCE,x); ObjectSet(name,OBJPROP_YDISTANCE,y); ObjectSetText(name,text,fontsize,fontname,fontcolor); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double Pip(string sSym) { int dig=(int)MarketInfo(sSym,MODE_DIGITS); if(dig!=2 && dig!=4) return(MarketInfo(sSym,MODE_POINT)*10.0); return(MarketInfo(sSym,MODE_POINT)); } //+------------------------------------------------------------------+
Thanks a lot
https://forexsignal.win/?mref=5