Hey guys,
I have this code that I wrote and in my mind it works perfectly however my mind seems to be wrong and it doesn't know why.
So I tracked the issue to a specific part but I still have no idea what is causing it to fail.
There are no errors of any significance either.
Here is the part where it seems to fail at:
Here is the full code:
If you guys could give me your wisdom that'd be much appreciated.
Thanks!
I have this code that I wrote and in my mind it works perfectly however my mind seems to be wrong and it doesn't know why.
So I tracked the issue to a specific part but I still have no idea what is causing it to fail.
There are no errors of any significance either.
Here is the part where it seems to fail at:
Inserted Code
if(Trades[7,RowNumber2] == 1)
{
if(Ask <= Trades[2,RowNumber2] && Trades[6,RowNumber] == 0)
{
int Ticket = OrderSend(Symbol(), OP_SELL, Lots, Ask, Slippage, Trades[4,RowNumber2], 0, NULL, Trades[1,RowNumber], 0, Blue);
Trades[6,RowNumber] = 1;
//Print("---MagicNumber = ", MagicNumber, "---");
ArrayCounter2 = 0;
RowNumber2 = 0;
}
}
else
{
ArrayCounter2 = ArrayCounter2 + 1;
RowNumber2 = RowNumber2 + 1;
} Here is the full code:
Inserted Code
//+------------------------------------------------------------------+
//| FTB.mq4 |
//| AntiVi |
//| https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "AntiVi"
#property strict
extern int MagicNumber = 10001;
extern double Lots = 0.1;
extern double TrailingStop = 0;
extern int Slippage = 3;
extern double EntryGap = 0.00500;
extern int BrokerDigits = 5;
extern int AllowableDrawdown = 25;
extern int MaxDrawdown = 610;
extern bool MoneyManagement = false;
double Entry;
double StopLoss;
double TakeProfit;
double HalfCandleSize;
double Middle;
double OpenCheck;
double CloseCheck;
double Trades [8][20]; //ArrayNumber | MagicNumber | Entry | Stoploss | WaitCounter | ExpirationTime | Entered | Populated
int SignalTime;
int BarsOnChart = Bars;
int IsNewCandle;
int OrderError = 0;
int RowNumber = 0;
int RowNumber2 = 0;
int ArrayCounter = 0;
int ArrayCounter2 = 0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
Trades[0,0] = 1; Trades[0,1] = 2; Trades[0,2] = 3; Trades[0,3] = 4; Trades[0,4] = 5;
Trades[0,5] = 6; Trades[0,6] = 7; Trades[0,7] = 8; Trades[0,8] = 9; Trades[0,9] = 10;
Trades[0,10] = 11; Trades[0,11] = 12; Trades[0,12] = 13; Trades[0,13] = 14; Trades[0,14] = 15;
Trades[0,15] = 16; Trades[0,16] = 17; Trades[0,17] = 18; Trades[0,18] = 19; Trades[0,19] = 20;
Print("-----------");
Print("ArrayNumber = ", Trades[0,RowNumber]);
Print("MagicNumber = ", Trades[1,RowNumber]);
Print("Entry = ", Trades[2,RowNumber]);
Print("Stoploss = ", Trades[3,RowNumber]);
Print("WaitCounter = ", Trades[4,RowNumber]);
Print("ExpirationTime = ", Trades[5,RowNumber]);
Print("Entered = ", Trades[6,RowNumber]);
Print("Populated = ", Trades[7,RowNumber]);
Print("-----------");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(BarsOnChart != Bars) //Checking for new closed candles
{
BarsOnChart = Bars;
IsNewCandle = 1;
}
else
{
IsNewCandle = 0;
}
if(IsNewCandle == 1) //Checking if a new candle has closed
{
SignalTime = Hour() - 1;
if((SignalTime > 8) && (SignalTime < 14) && (High[1] > High[2])) //Check to see if signal candle has a higher high than the candle before and is within the timeframe
{
HalfCandleSize = (High[1] - Low[1]) / 2; //Calculates half of the candle size
Middle = Low[1] + HalfCandleSize; //Calculates the middle of the candle
OpenCheck = Middle - Open[1]; //Calculates distance between open and middle
CloseCheck = Middle - Close[1]; //Calculates distance between close and middle
if(OpenCheck > 0 && CloseCheck > 0) //checks to see if candle closes in lower half
{
Entry = NormalizeDouble(Low[1] - 0.0001, 5); //Reason for OrderSend Error 130 is that the Entry Entry is too close to Current Market Entry
StopLoss = NormalizeDouble(High[1] + 0.0005, 5);
while(ArrayCounter < 20)
{
if(Trades[7,RowNumber] == 0)
{
Trades[1,RowNumber] = MagicNumber;
Trades[2,RowNumber] = Entry;
Trades[3,RowNumber] = StopLoss;
Trades[4,RowNumber] = 0;
Trades[5,RowNumber] = 0;
Trades[6,RowNumber] = 0;
Trades[7,RowNumber] = 1;
MagicNumber = MagicNumber + 1;
Print("-----------");
Print("ArrayNumber = ", Trades[0,RowNumber]);
Print("MagicNumber = ", Trades[1,RowNumber]);
Print("Entry = ", Trades[2,RowNumber]);
Print("Stoploss = ", Trades[3,RowNumber]);
Print("WaitCounter = ", Trades[4,RowNumber]);
Print("ExpirationTime = ", Trades[5,RowNumber]);
Print("Entered = ", Trades[6,RowNumber]);
Print("Populated = ", Trades[7,RowNumber]);
Print("-----------");
break;
}
else
{
ArrayCounter = ArrayCounter + 1;
RowNumber = RowNumber + 1;
}
}
ArrayCounter = 0;
RowNumber = 0;
}
}
}
while(ArrayCounter2 < 20)
{
if(Trades[7,RowNumber2] == 1)
{
if(Ask <= Trades[2,RowNumber2] && Trades[6,RowNumber] == 0)
{
int Ticket = OrderSend(Symbol(), OP_SELL, Lots, Ask, Slippage, Trades[4,RowNumber2], 0, NULL, Trades[1,RowNumber], 0, Blue);
Trades[6,RowNumber] = 1;
//Print("---MagicNumber = ", MagicNumber, "---");
ArrayCounter2 = 0;
RowNumber2 = 0;
}
}
else
{
ArrayCounter2 = ArrayCounter2 + 1;
RowNumber2 = RowNumber2 + 1;
}
}
if(ArrayCounter2 == 20)
{
ArrayCounter2 = 0;
RowNumber2 = 0;
}
} If you guys could give me your wisdom that'd be much appreciated.
Thanks!