Hi, Vladimir I have a pending order and when it is executed and closed I want to open a pending order at the exact same price as the previous closed order .. please what function I use to execute the order (MQL5) thank you so much ..
Ahmadahmad654 : Hi, Vladimir I have a pending order and when it is executed and closed I want to open a pending order at the exact same price as the previous closed order .. please what function I use to execute the order (MQL5) thank you so much ..
An order can only be pending. Therefore, the order cannot be closed - the order can only be deleted.
As I understand it: you are placing a pending order (its price is Price # 1). Then it works -> a position appears. Then the position is closed and you want to place a pending order again at the price Price # 1? Did I understand you correctly?
Ahmadahmad654 : Yes .. after activating the order and closing it on take profit
In this case, you need to work in steps. Step one: catch the moment of closing the transaction.
Transactions can be (by type of entry / exit): ENUM_DEAL_ENTRY
ENUM_DEAL_ENTRY
Identifier
Description
DEAL_ENTRY_IN
Entry in
DEAL_ENTRY_OUT
Entry out
DEAL_ENTRY_INOUT
Reverse
DEAL_ENTRY_OUT_BY
Close a position by an opposite one
We need to catch the deal DEAL_ENTRY_OUT - make it easy inOnTradeTransaction. Procedure: catches the transaction TRADE_TRANSACTION_DEAL_ADD (adding a deal to history) and see that it is a deal with typeDEAL_ENTRY_OUT
Code example:
//+------------------------------------------------------------------+//| Example DEAL_ENTRY_OUT.mq5 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"/*
barabashkakvn Trading engine 3.124
*/#include <Trade\SymbolInfo.mqh>
#include <Trade\DealInfo.mqh>
//---
CSymbolInfo m_symbol; // object of CSymbolInfo class
CDealInfo m_deal; // object of CDealInfo class//--- input parametersinputulong InpMagic = 200; // Magic number//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---if(!m_symbol.Name(Symbol())) // sets symbol name
{
Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
return(INIT_FAILED);
}
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---
}
//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction& trans,
constMqlTradeRequest& request,
constMqlTradeResult& result)
{
//---//--- get transaction type as enumeration valueENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif(type==TRADE_TRANSACTION_DEAL_ADD)
{
if(HistoryDealSelect(trans.deal))
m_deal.Ticket(trans.deal);
elsereturn;
if(m_deal.Symbol()==m_symbol.Name() && m_deal.Magic()==InpMagic)
{
if(m_deal.DealType()==DEAL_TYPE_BUY || m_deal.DealType()==DEAL_TYPE_SELL)
{
if(m_deal.Entry()==DEAL_ENTRY_OUT)
{
Print(m_deal.Time()," | ",m_deal.Symbol()," | ",m_deal.Price());
}
}
}
}
}
//+------------------------------------------------------------------+
A deal is the reflection of the fact of a trade operation execution based on an order that contains a trade request. Each trade is described by properties that allow to obtain information about it. In order to read values of properties, functions of the Identifier of a position, in the opening, modification or closing of which this deal took...
OK.. Step 1 # Open and execute a pending order at price# 1 Step 2 #: Close the position at price# 2 (m_deal.Price ()) Step 3 # Open a new pending order at a price #1 Please help me in a step#3
OK.. Step 1 # Open and execute a pending order at price# 1 Step 2 #: Close the position at price# 2 (m_deal.Price ()) Step 3 # Open a new pending order at a price #1 Please help me in a step#3
thank you very much.. best wishes
Yes, of course I will help.
You just say: Have you figured out how the code works in # 54? Do you understand how to catch a deal closing?
The code #54 gives us the transaction information that was closed
But m_deal.Price () == the deal's closing price Where can I find the deal opening price ? Best regards
When a pending order is triggered, a deal of the type 'DEAL_ENTRY_IN' appears.
We’ll slightly change the OnTradeTransaction procedure, now we can catch two deals: enter the market (DEAL_ENTRY_IN) and exit the market (DEAL_ENTRY_OUT).
//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction& trans,
constMqlTradeRequest& request,
constMqlTradeResult& result)
{
//---//--- get transaction type as enumeration valueENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif(type==TRADE_TRANSACTION_DEAL_ADD)
{
if(HistoryDealSelect(trans.deal))
m_deal.Ticket(trans.deal);
elsereturn;
if(m_deal.Symbol()==m_symbol.Name() && m_deal.Magic()==InpMagic)
{
if(m_deal.DealType()==DEAL_TYPE_BUY || m_deal.DealType()==DEAL_TYPE_SELL)
{
if(m_deal.Entry()==DEAL_ENTRY_IN)
{
string entry="in";
Print(m_deal.Time()," | ",m_deal.Symbol()," | ",entry," | ",m_deal.Price());
}
if(m_deal.Entry()==DEAL_ENTRY_OUT)
{
string entry="out";
Print(m_deal.Time()," | ",m_deal.Symbol()," | ",entry," | ",m_deal.Price());
}
}
}
}
}
Ahmadahmad654 : Thank you very much for helping me
This is only one way - catching online transactions.
And there is at least a way to work with trading history. You can determine what led to the 'OUT' deal - Stop Loss triggering or Take Profit triggering ...
But at this stage, I think you just need to use the idea from # 58
Allow the use of cookies to log in to the MQL5.com website.
Please enable the necessary setting in your browser, otherwise you will not be able to log in.
You are signed in. Two-factor authentication has been disabled. Set it up again and scan a new QR code, or continue with two-factor authentication disabled.
I have a pending order and when it is executed and closed
I want to open a pending order at the exact same price as the previous closed order .. please what function I use to execute the order (MQL5)
thank you so much ..
Hi, Vladimir
I have a pending order and when it is executed and closed
I want to open a pending order at the exact same price as the previous closed order .. please what function I use to execute the order (MQL5)
thank you so much ..
An order can only be pending. Therefore, the order cannot be closed - the order can only be deleted.
As I understand it: you are placing a pending order (its price is Price # 1). Then it works -> a position appears. Then the position is closed and you want to place a pending order again at the price Price # 1? Did I understand you correctly?
Yes .. after activating the order and closing it on take profit
In this case, you need to work in steps. Step one: catch the moment of closing the transaction.
Transactions can be (by type of entry / exit): ENUM_DEAL_ENTRY
ENUM_DEAL_ENTRY
Identifier
Description
DEAL_ENTRY_IN
Entry in
DEAL_ENTRY_OUT
Entry out
DEAL_ENTRY_INOUT
Reverse
DEAL_ENTRY_OUT_BY
Close a position by an opposite one
We need to catch the deal DEAL_ENTRY_OUT - make it easy in OnTradeTransaction. Procedure: catches the transaction TRADE_TRANSACTION_DEAL_ADD (adding a deal to history ) and see that it is a deal with type DEAL_ENTRY_OUT
Code example:
Please practice starting this advisor.
OK..
Step 1 # Open and execute a pending order at price# 1
Step 2 #: Close the position at price# 2 (m_deal.Price ())
Step 3 # Open a new pending order at a price #1
Please help me in a step#3
thank you very much.. best wishes
OK..
Step 1 # Open and execute a pending order at price# 1
Step 2 #: Close the position at price# 2 (m_deal.Price ())
Step 3 # Open a new pending order at a price #1
Please help me in a step#3
thank you very much.. best wishes
Yes, of course I will help.
You just say: Have you figured out how the code works in # 54 ? Do you understand how to catch a deal closing?
Good day, Mr. Vladimir
The code #54 gives us the transaction information that was closed
But m_deal.Price () == the deal's closing price
Where can I find the deal opening price?
Best regards
Good day, Mr. Vladimir
The code #54 gives us the transaction information that was closed
But m_deal.Price () == the deal's closing price
Where can I find the deal opening price ?
Best regards
When a pending order is triggered, a deal of the type 'DEAL_ENTRY_IN' appears.
We’ll slightly change the OnTradeTransaction procedure, now we can catch two deals: enter the market (DEAL_ENTRY_IN) and exit the market (DEAL_ENTRY_OUT).
Thank you very much for helping me
This is only one way - catching online transactions.
And there is at least a way to work with trading history. You can determine what led to the 'OUT' deal - Stop Loss triggering or Take Profit triggering ...
But at this stage, I think you just need to use the idea from # 58