Please consider which section is most appropriate — https://www.mql5.com/en/forum/172166/page6#comment_49114893
That is not an issue with the Strategy Tester. That is an issue with the EA, the MQL program you are testing — you will need to fix the EA's logic and code.
Thank you
How to fix?
trade.Buy(volume,Symbol(),0,SL,0)
A single line of code will not fix the issue. You need to analyse your entire code logic and correct it.
#include <Trade\Trade.mqh> CTrade trade; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if (PositionsTotal()==0) { double price=SymbolInfoDouble(_Symbol,SYMBOL_ASK); double SL=price-100*Point(); double TP=price+100*Point(); trade.Buy(0.01,Symbol(),0,SL,TP); } }
Think about your code logic!
- What will happen when your position hits the stop-loss or the take-profit?
- It will close, and what do you think "PositionsTotal()" will then return?
- It will return zero, and what do you think your code will do?
- It will place another trade!
Programming is about thinking in logical sequencial steps!
Think about your code logic!
- What will happen when your position hits the stop-loss or the take-profit?
- It will close, and what do you think "PositionsTotal()" will then return?
- It will return zero, and what do you think your code will do?
- It will place another trade!
Programming is about thinking in logical sequencial steps!
I know that
My problem is after position close
The order is closed by a Sell order and thus I receive 2 orders and 2 deals for each order I opened and I want to prevent this.
Yes, that is normal. That is how orders, positions and deals work in MT5.
Please read the following ...
Orders, Positions and Deals in MetaTrader 5
MetaQuotes, 2011.02.01 16:13
Creating a robust trading robot cannot be done without an understanding of the mechanisms of the MetaTrader 5 trading system. The client terminal receives the information about the positions, orders, and deals from the trading server. To handle this data properly using the MQL5, it's necessary to have a good understanding of the interaction between the MQL5-program and the client terminal.
Yes, there is. In your trade "History" tab, enable the "Orders & Deals" view (instead of "Positions" view) and you will see.
When you place a "buy" order and a "buy" position is opened, there is a "buy/in" deal for it. And when it hits one of the stops, then there is another "sell" order and a "sell/out" deal for that too.
The opening deal is called the "in" deal, and the closing deal is called the "out" deal.
Now I understand your question more clearly.
You were not referring to the EA placing a opposite position, you were referring to the reverse order/deal that accompanies the closing of a position.
That is how it works. To close a position, there is always a "out" order/deal to close it, just as there is a "in" order/deal to open it.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use