Welcome to Forex-TSD!, one of the largest Forex forums worldwide, where you will be able to find the most complete and reliable Forex information imaginable.
From the list below, select the forum that you want to visit and register to post, as many times you want. It’s absolutely free. Click here for registering on Forex-TSD.
Exclusive Forum
The Exclusive Forum is the only paid section. Once you subscribe, you will get free access to real cutting-edge Trading Systems (automated and not), Indicators, Signals, Articles, etc., that will help and guide you, in ways that you could only imagine, with your Forex trading.
Elite Section
Get access to private discussions, specialized support, indicators and trading systems reported every week.
Advanced Elite Section
For professional traders, trading system developers and any other member who may need to use and/or convert, the most cutting-edge exclusive indicators and trading systems for MT4 and MT5.
I have a problem with issuing OP_SELLSTOP/OP_BUYSTOP.
For example, I ran a script on EURUSD 1 Hourly:
MyPrice = High[1] + (iATR(Symbol(),0,6,1)*1.5);
Ticket=OrderSend(Symbol(), OP_BUYSTOP, Lots, MyPrice,3, Low[1], 0,"BUYSTOP",0,0,Green);
MyPrice returns 1.16925750.
It gives me an error "2005.11.28 22:00:06 EURUSD,H1: invalid price 1.16925750 for OrderSend function". It is associated with error code: 4107.
So, I thought it was because of the rounding off issue. Hence, I replaced MyPrice with:
MyPrice = High[1] + NormalizeDouble(((iATR(Symbol(),0,6,1)*1.5),4);
Ticket=OrderSend(Symbol(), OP_BUYSTOP, Lots, MyPrice,3, Low[1], 0,"BUYSTOP",0,0,Green);
Now, I get "OrderSend BUYSTOP failed with error #4109" (ERR_TRADE_NOT_ALLOWED).
Even if I hardcoded the price like so, it still returns me #4109 error. Can anyone do me a favour and execute this, and tell me if it works?:
OrderSend("EURUSD", OP_BUYSTOP, 1, 1.1900, 3, Low[1], 0,"BUYSTOP",0,0,Green);
Has anyone got a successful OP_BUYSTOP/SELLSTOP sample? What does the above error really mean 4107 and 4109?
I have a problem with issuing OP_SELLSTOP/OP_BUYSTOP.
For example, I ran a script on EURUSD 1 Hourly:
MyPrice = High[1] + (iATR(Symbol(),0,6,1)*1.5);
Ticket=OrderSend(Symbol(), OP_BUYSTOP, Lots, MyPrice,3, Low[1], 0,"BUYSTOP",0,0,Green);
MyPrice returns 1.16925750.
It gives me an error "2005.11.28 22:00:06 EURUSD,H1: invalid price 1.16925750 for OrderSend function". It is associated with error code: 4107.
So, I thought it was because of the rounding off issue. Hence, I replaced MyPrice with:
MyPrice = High[1] + NormalizeDouble(((iATR(Symbol(),0,6,1)*1.5),4);
Ticket=OrderSend(Symbol(), OP_BUYSTOP, Lots, MyPrice,3, Low[1], 0,"BUYSTOP",0,0,Green);
Now, I get "OrderSend BUYSTOP failed with error #4109" (ERR_TRADE_NOT_ALLOWED).
Even if I hardcoded the price like so, it still returns me #4109 error. Can anyone do me a favour and execute this, and tell me if it works?:
OrderSend("EURUSD", OP_BUYSTOP, 1, 1.1900, 3, Low[1], 0,"BUYSTOP",0,0,Green);
Has anyone got a successful OP_BUYSTOP/SELLSTOP sample? What does the above error really mean 4107 and 4109?
Thanks!
TheExponential,
Your code worked for me, I don't know what's the problem with your platform (I'm using MT4 Build 186).
This is the code I used:
PHP Code:
//+------------------------------------------------------------------+
//| My_First_EA.mq4 |
//| Coders Guru |
//| http://www.forex-tsd.com |
//+------------------------------------------------------------------+
#property copyright "Coders Guru"
#property link "http://www.forex-tsd.com"
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
Thanks CodesGuru. That actually works as an EA on the same MT4 build as yours.
But I want to challenge you more, because the following does not work for me as a script (instead of EA). I think we have a bug!. Would you mind testing it for me.
Did you ever get this resolved. I'm having the same problem when building a "script" to close/open positions on a "single click". If I run it as an expert, it runs fine and will close all open positions. If I run it as a script, it fails with your error. I do know that it's tied to not being allowed to run live trades from a script, but wondered if you found a way to force an allow of live trades. (the Trader script that comes with MT4 won't even work due to the same error.
Yes in fact it is true that:
Anytime the price is bigger than number of decimal digits used for the pair, you need to normalizedouble to the correct number of digits.