Hi,
I tried trading the NZD news on the 5 min chart yesterday with my EA but I got an error that says: Order Sell 0.6 NZDUSD opening at 0.00000 failed [Off quotes]
Usually this does not happen.
I checked the charts and saw that there was an unusually large gap in price between the current and previous candle which my order was being opened.
This could be the reason why the order was being opened at 0.00000 because the broker was not sending any price momentarily. It is like a form of slippage.
But my EA was supposed to open trades between 22:00 to 22:30 GMT +1.
It did not open any more trades after receiving that error.
Why is that so?
Could it be due to the OrderSend part of the code?
//+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder |
//| http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//| |
//| In no event will author be liable for any damages whatsoever. |
//| Use at your own risk. |
//| |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#property copyright "Expert Advisor Builder"
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 0.6;
extern int Slippage = 1000;
extern bool UseStopLoss = False;
extern int StopLoss = 30;
extern bool UseTakeProfit = False;
extern int TakeProfit = 60;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
int BarCount;
int Current;
bool TickCheck = False;
bool buyFlag = false, sellFlag = false;
datetime barStart = 0;
double stoploss;
bool InTrade = false;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
bool TradingTime = false;
double Duration = 35*60;
//Remember to increase StartTime*, StopTime* and StartTime* + Duration numbers!
datetime StartTime = StrToTime("2010.7.28 22:00");
datetime StopTime = StartTime + Duration;
datetime StartTime2 = StrToTime("");
datetime StopTime2 = StartTime2 + Duration;
datetime StartTime3 = StrToTime("");
datetime StopTime3 = StartTime3 + Duration;
double Upper1 = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_UPPER, Current + 1);
double Lower1 = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_LOWER, Current + 1);
double Middle1 = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Open1 = iOpen(NULL, 0, Current + 1);
double Close1 = iClose(NULL, 0, Current + 1);
double High1 = iHigh(NULL, 0, Current + 1);
double Low1 = iLow(NULL, 0, Current + 1);
//Buy
//Close1 > Open1 && High1 > Upper1
//Sell
//Close1 < Open1 && Low1 < Lower1
//CloseBuy
//Close1 < Open1 && Close1 < Middle1
//CloseSell
//Close1 > Open1 && Close1 > Middle1
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
if (barStart < Time[0]) //start of new bar
{
barStart = Time[0];
buyFlag = false;
sellFlag = false;
if(StartTime < StopTime && TimeCurrent() >= StartTime && TimeCurrent() < StopTime)
{
TradingTime = true;
}
if(StartTime2 < StopTime2 && TimeCurrent() >= StartTime2 && TimeCurrent() < StopTime2)
{
}
if(StartTime3 < StopTime3 && TimeCurrent() >= StartTime3 && TimeCurrent() < StopTime3)
{
}
}
//Check position
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
if (buyFlag == false && Close1 < Open1 && Close1 < Middle1)
{
InTrade = false;
Order = SIGNAL_CLOSEBUY;
}
if (buyFlag == false && Close1 < stoploss)
{
InTrade = false;
Order = SIGNAL_CLOSEBUY;
}
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
if (sellFlag == false && Close1 > Open1 && Close1 > Middle1)
{
InTrade = false;
Order = SIGNAL_CLOSESELL;
}
if (sellFlag == false && Close1 > stoploss)
{
InTrade = false;
Order = SIGNAL_CLOSESELL;
}
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if (TradingTime == true && InTrade == false && Close1 > Open1 && Close1 > Upper1)
{
Order = SIGNAL_BUY;
stoploss = Open1;
InTrade = true;
buyFlag = true;
}
if (TradingTime == true && InTrade == false && Close1 < Open1 && Close1 < Lower1)
{
Order = SIGNAL_SELL;
stoploss = Open1;
InTrade = true;
sellFlag = true;
}
//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+
//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
//+------------------------------------------------------------------+
I tried trading the NZD news on the 5 min chart yesterday with my EA but I got an error that says: Order Sell 0.6 NZDUSD opening at 0.00000 failed [Off quotes]
Usually this does not happen.
I checked the charts and saw that there was an unusually large gap in price between the current and previous candle which my order was being opened.
This could be the reason why the order was being opened at 0.00000 because the broker was not sending any price momentarily. It is like a form of slippage.
But my EA was supposed to open trades between 22:00 to 22:30 GMT +1.
It did not open any more trades after receiving that error.
Why is that so?
Could it be due to the OrderSend part of the code?
//+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder |
//| http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//| |
//| In no event will author be liable for any damages whatsoever. |
//| Use at your own risk. |
//| |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#property copyright "Expert Advisor Builder"
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 0.6;
extern int Slippage = 1000;
extern bool UseStopLoss = False;
extern int StopLoss = 30;
extern bool UseTakeProfit = False;
extern int TakeProfit = 60;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
int BarCount;
int Current;
bool TickCheck = False;
bool buyFlag = false, sellFlag = false;
datetime barStart = 0;
double stoploss;
bool InTrade = false;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
bool TradingTime = false;
double Duration = 35*60;
//Remember to increase StartTime*, StopTime* and StartTime* + Duration numbers!
datetime StartTime = StrToTime("2010.7.28 22:00");
datetime StopTime = StartTime + Duration;
datetime StartTime2 = StrToTime("");
datetime StopTime2 = StartTime2 + Duration;
datetime StartTime3 = StrToTime("");
datetime StopTime3 = StartTime3 + Duration;
double Upper1 = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_UPPER, Current + 1);
double Lower1 = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_LOWER, Current + 1);
double Middle1 = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Open1 = iOpen(NULL, 0, Current + 1);
double Close1 = iClose(NULL, 0, Current + 1);
double High1 = iHigh(NULL, 0, Current + 1);
double Low1 = iLow(NULL, 0, Current + 1);
//Buy
//Close1 > Open1 && High1 > Upper1
//Sell
//Close1 < Open1 && Low1 < Lower1
//CloseBuy
//Close1 < Open1 && Close1 < Middle1
//CloseSell
//Close1 > Open1 && Close1 > Middle1
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
if (barStart < Time[0]) //start of new bar
{
barStart = Time[0];
buyFlag = false;
sellFlag = false;
if(StartTime < StopTime && TimeCurrent() >= StartTime && TimeCurrent() < StopTime)
{
TradingTime = true;
}
if(StartTime2 < StopTime2 && TimeCurrent() >= StartTime2 && TimeCurrent() < StopTime2)
{
}
if(StartTime3 < StopTime3 && TimeCurrent() >= StartTime3 && TimeCurrent() < StopTime3)
{
}
}
//Check position
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
if (buyFlag == false && Close1 < Open1 && Close1 < Middle1)
{
InTrade = false;
Order = SIGNAL_CLOSEBUY;
}
if (buyFlag == false && Close1 < stoploss)
{
InTrade = false;
Order = SIGNAL_CLOSEBUY;
}
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
if (sellFlag == false && Close1 > Open1 && Close1 > Middle1)
{
InTrade = false;
Order = SIGNAL_CLOSESELL;
}
if (sellFlag == false && Close1 > stoploss)
{
InTrade = false;
Order = SIGNAL_CLOSESELL;
}
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if (TradingTime == true && InTrade == false && Close1 > Open1 && Close1 > Upper1)
{
Order = SIGNAL_BUY;
stoploss = Open1;
InTrade = true;
buyFlag = true;
}
if (TradingTime == true && InTrade == false && Close1 < Open1 && Close1 < Lower1)
{
Order = SIGNAL_SELL;
stoploss = Open1;
InTrade = true;
sellFlag = true;
}
//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+
//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
//+------------------------------------------------------------------+