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://freshnews.top