Gennady Mazur: Oh e também, a função padrão suporta a execução de ordens, seu arquivamento, porque eu costumava usar o SeaTrade para abrir até chegar a uma troca onde as ordens não queriam ser executadas porque não havia como determinar o arquivamento
Gennady Mazur: Sim e os gurus deste fórum me garantiram em um tópico anterior que esta informação sempre vem ... quase instantaneamente ... e se o bilhete não é emitido quando o servidor responde positivamente, então a ordem falhou
Que disparate é esse?
Tente também convocar o evento da OnTradeTransaction. Em algum lugar eu tenho um exemplo de como ouvir todas as operações comerciais. Se não estou enganado, Rosh estava lá. Procure-o...
Em geral, é uma boa idéia inserir pausas entre as operações comerciais ;-)
Com sua experiência, é indecoroso fazer tais perguntas aqui.
Sergey, sim, eu tenho experiência suficiente ... Mas nunca é tarde demais para aprender ... e se você entendeu algo errado antes, e talvez tenha introduzido algo novo ... Não é difícil perguntar, talvez alguém o considere útil... ou talvez já tenha enfrentado este problema e agora tudo pode ser resolvido em 5 minutos.
Tente também se referir ao evento OnTradeTransaction. Em algum lugar houve um exemplo de escuta de todas as operações comerciais. Se não estou enganado, Rosh a afixou. Procure por ela...
O exemplo de escutas telefônicas deve estar emOrderSendAsync
Tente também se referir ao evento OnTradeTransaction. Em algum lugar houve um exemplo de escuta de todas as operações comerciais. Se não estou enganado, Rosh a afixou. Procure-o...
Em geral, é uma boa idéia inserir pausas entre as operações comerciais ;-)
Eu já estava pensando em hibernar, mas essa não é a melhor saída....
Gennady Mazur: Já estava pensando na hibernação, mas essa não é a melhor saída....
A hibernação é necessária não depois, mas entre as operações comerciais. Caso contrário, o servidor (corretor) não vai gostar da atividade do comerciante :-))
A melhor saída é esperar a chegada da transação. Em termos de transação, isto é "TRADE_TRANSACTION_DEAL_ADD".
Vladimir Karputov escreveu sobre isso muitas vezes. Procure também por filiais.
Aqui está uma escuta que eu encontrei.
//+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ voidOnTradeTransaction(constMqlTradeTransaction &trans, constMqlTradeRequest &request, constMqlTradeResult &result) { //--- staticint counter=0; // счетчик вызовов OnTradeTransaction() staticuint lasttime=0; // время последнего вызова OnTradeTransaction() //--- uint time=GetTickCount(); //--- если последняя транзакция была больше 1 секунды назад if(time-lasttime>1000) { counter=0; // значит, это новая торговая операция и можно сбросить счетчик if(IS_DEBUG_MODE) Print(" Новая торговая операция"); } lasttime=time; counter++; Print(counter,". ",__FUNCTION__); //--- результат выполнения торгового запроса ulong lastOrderID =trans.order; ENUM_ORDER_TYPE lastOrderType =trans.order_type; ENUM_ORDER_STATE lastOrderState=trans.order_state; //--- имя символа, по которому произошла транзакция string trans_symbol=trans.symbol; //--- тип транзакции ENUM_TRADE_TRANSACTION_TYPE trans_type=trans.type; switch(trans.type) { caseTRADE_TRANSACTION_POSITION: // изменение позиции { ulong pos_ID=trans.position; PrintFormat("MqlTradeTransaction: Position #%d %s modified: SL=%.5f TP=%.5f", pos_ID,trans_symbol,trans.price_sl,trans.price_tp); } break; caseTRADE_TRANSACTION_REQUEST: // отправка торгового запроса { PrintFormat("MqlTradeTransaction: TRADE_TRANSACTION_REQUEST"); break; } caseTRADE_TRANSACTION_DEAL_ADD: // добавление сделки { ulong lastDealID =trans.deal; ENUM_DEAL_TYPE lastDealType =trans.deal_type; double lastDealVolume=trans.volume; //--- идентификатор сделки во внешней системе - тикет, присваиваемый Московской биржей string Exchange_ticket=""; if(HistoryDealSelect(lastDealID)) Exchange_ticket=HistoryDealGetString(lastDealID,DEAL_EXTERNAL_ID); if(Exchange_ticket!="") Exchange_ticket=StringFormat("(MOEX deal=%s)",Exchange_ticket); PrintFormat("MqlTradeTransaction: %s deal #%d %s %s %.2f lot %s",EnumToString(trans_type), lastDealID,EnumToString(lastDealType),trans_symbol,lastDealVolume,Exchange_ticket); } break; caseTRADE_TRANSACTION_HISTORY_ADD: // добавление ордера в историю { //--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей string Exchange_ticket=""; if(lastOrderState==ORDER_STATE_FILLED) { if(HistoryOrderSelect(lastOrderID)) Exchange_ticket=HistoryOrderGetString(lastOrderID,ORDER_EXTERNAL_ID); if(Exchange_ticket!="") Exchange_ticket=StringFormat("(MOEX ticket=%s)",Exchange_ticket); } PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s %s",EnumToString(trans_type), lastOrderID,EnumToString(lastOrderType),trans_symbol,EnumToString(lastOrderState),Exchange_ticket); } break; default: // прочие транзакции { //--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей string Exchange_ticket=""; if(lastOrderState==ORDER_STATE_PLACED) { if(OrderSelect(lastOrderID)) Exchange_ticket=OrderGetString(ORDER_EXTERNAL_ID); if(Exchange_ticket!="") Exchange_ticket=StringFormat("MOEX ticket=%s",Exchange_ticket); } PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s",EnumToString(trans_type), lastOrderID,EnumToString(lastOrderType),EnumToString(lastOrderState),Exchange_ticket); } break; } //--- тикет ордера ulong orderID_result=result.order; string retcode_result=this.GetRetcodeID(result.retcode); if(orderID_result!=0) PrintFormat("MqlTradeResult: order #%d retcode=%s ",orderID_result,retcode_result); }
Dennis Kirichenko: A melhor saída é esperar que a transação chegue. Em termos de transação, isto é "TRADE_TRANSACTION_DEAL_ADD".
Aqui está uma escuta que eu encontrei.
//+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ voidOnTradeTransaction(constMqlTradeTransaction &trans, constMqlTradeRequest &request, constMqlTradeResult &result) { //--- staticint counter=0; // счетчик вызовов OnTradeTransaction() staticuint lasttime=0; // время последнего вызова OnTradeTransaction() //--- uint time=GetTickCount(); //--- если последняя транзакция была больше 1 секунды назад if(time-lasttime>1000) { counter=0; // значит, это новая торговая операция и можно сбросить счетчик if(IS_DEBUG_MODE) Print(" Новая торговая операция"); } lasttime=time; counter++; Print(counter,". ",__FUNCTION__); //--- результат выполнения торгового запроса ulong lastOrderID =trans.order; ENUM_ORDER_TYPE lastOrderType =trans.order_type; ENUM_ORDER_STATE lastOrderState=trans.order_state; //--- имя символа, по которому произошла транзакция string trans_symbol=trans.symbol; //--- тип транзакции ENUM_TRADE_TRANSACTION_TYPE trans_type=trans.type; switch(trans.type) { caseTRADE_TRANSACTION_POSITION: // изменение позиции { ulong pos_ID=trans.position; PrintFormat("MqlTradeTransaction: Position #%d %s modified: SL=%.5f TP=%.5f", pos_ID,trans_symbol,trans.price_sl,trans.price_tp); } break; caseTRADE_TRANSACTION_REQUEST: // отправка торгового запроса { PrintFormat("MqlTradeTransaction: TRADE_TRANSACTION_REQUEST"); break; } caseTRADE_TRANSACTION_DEAL_ADD: // добавление сделки { ulong lastDealID =trans.deal; ENUM_DEAL_TYPE lastDealType =trans.deal_type; double lastDealVolume=trans.volume; //--- идентификатор сделки во внешней системе - тикет, присваиваемый Московской биржей string Exchange_ticket=""; if(HistoryDealSelect(lastDealID)) Exchange_ticket=HistoryDealGetString(lastDealID,DEAL_EXTERNAL_ID); if(Exchange_ticket!="") Exchange_ticket=StringFormat("(MOEX deal=%s)",Exchange_ticket); PrintFormat("MqlTradeTransaction: %s deal #%d %s %s %.2f lot %s",EnumToString(trans_type), lastDealID,EnumToString(lastDealType),trans_symbol,lastDealVolume,Exchange_ticket); } break; caseTRADE_TRANSACTION_HISTORY_ADD: // добавление ордера в историю { //--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей string Exchange_ticket=""; if(lastOrderState==ORDER_STATE_FILLED) { if(HistoryOrderSelect(lastOrderID)) Exchange_ticket=HistoryOrderGetString(lastOrderID,ORDER_EXTERNAL_ID); if(Exchange_ticket!="") Exchange_ticket=StringFormat("(MOEX ticket=%s)",Exchange_ticket); } PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s %s",EnumToString(trans_type), lastOrderID,EnumToString(lastOrderType),trans_symbol,EnumToString(lastOrderState),Exchange_ticket); } break; default: // прочие транзакции { //--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей string Exchange_ticket=""; if(lastOrderState==ORDER_STATE_PLACED) { if(OrderSelect(lastOrderID)) Exchange_ticket=OrderGetString(ORDER_EXTERNAL_ID); if(Exchange_ticket!="") Exchange_ticket=StringFormat("MOEX ticket=%s",Exchange_ticket); } PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s",EnumToString(trans_type), lastOrderID,EnumToString(lastOrderType),EnumToString(lastOrderState),Exchange_ticket); } break; } //--- тикет ордера ulong orderID_result=result.order; string retcode_result=this.GetRetcodeID(result.retcode); if(orderID_result!=0) PrintFormat("MqlTradeResult: order #%d retcode=%s ",orderID_result,retcode_result); }
Sim, informações muito úteis... obrigado... E se você não ouvir e não dormir, há alguma outra maneira de avisar a EA que estamos esperando quando a ordem é positiva, mas ainda não há nenhuma posição?
Oh e também, a função padrão suporta a execução de ordens, seu arquivamento, porque eu costumava usar o SeaTrade para abrir até chegar a uma troca onde as ordens não queriam ser executadas porque não havia como determinar o arquivamento
SetTypeFilling
SetTypeFilling
Define o tipo de pedido através do preenchimento
Você define o que lhe convém.
Sim e os gurus deste fórum me garantiram em um tópico anterior que esta informação sempre vem ... quase instantaneamente ... e se o bilhete não é emitido quando o servidor responde positivamente, então a ordem falhou
Tente também convocar o evento da OnTradeTransaction. Em algum lugar eu tenho um exemplo de como ouvir todas as operações comerciais. Se não estou enganado, Rosh estava lá. Procure-o...
Em geral, é uma boa idéia inserir pausas entre as operações comerciais ;-)
Agora os gurus aqui também lhe ensinarão ))
Com sua experiência, é indecoroso fazer tais perguntas aqui.
Que disparate é esse?
Tente também se referir ao evento OnTradeTransaction. Em algum lugar houve um exemplo de escuta de todas as operações comerciais. Se não estou enganado, Rosh a afixou. Procure por ela...
SetTypeFilling
SetTypeFilling
Define o tipo de pedido através do preenchimento
Defina o que você achar melhor.
Que disparate é esse?
Tente também se referir ao evento OnTradeTransaction. Em algum lugar houve um exemplo de escuta de todas as operações comerciais. Se não estou enganado, Rosh a afixou. Procure-o...
Em geral, é uma boa idéia inserir pausas entre as operações comerciais ;-)
Já estava pensando na hibernação, mas essa não é a melhor saída....
A melhor saída é esperar a chegada da transação. Em termos de transação, isto é "TRADE_TRANSACTION_DEAL_ADD".
Vladimir Karputov escreveu sobre isso muitas vezes. Procure também por filiais.
Aqui está uma escuta que eu encontrei.
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//---
static int counter=0; // счетчик вызовов OnTradeTransaction()
static uint lasttime=0; // время последнего вызова OnTradeTransaction()
//---
uint time=GetTickCount();
//--- если последняя транзакция была больше 1 секунды назад
if(time-lasttime>1000)
{
counter=0; // значит, это новая торговая операция и можно сбросить счетчик
if(IS_DEBUG_MODE)
Print(" Новая торговая операция");
}
lasttime=time;
counter++;
Print(counter,". ",__FUNCTION__);
//--- результат выполнения торгового запроса
ulong lastOrderID =trans.order;
ENUM_ORDER_TYPE lastOrderType =trans.order_type;
ENUM_ORDER_STATE lastOrderState=trans.order_state;
//--- имя символа, по которому произошла транзакция
string trans_symbol=trans.symbol;
//--- тип транзакции
ENUM_TRADE_TRANSACTION_TYPE trans_type=trans.type;
switch(trans.type)
{
case TRADE_TRANSACTION_POSITION: // изменение позиции
{
ulong pos_ID=trans.position;
PrintFormat("MqlTradeTransaction: Position #%d %s modified: SL=%.5f TP=%.5f",
pos_ID,trans_symbol,trans.price_sl,trans.price_tp);
}
break;
case TRADE_TRANSACTION_REQUEST: // отправка торгового запроса
{
PrintFormat("MqlTradeTransaction: TRADE_TRANSACTION_REQUEST");
break;
}
case TRADE_TRANSACTION_DEAL_ADD: // добавление сделки
{
ulong lastDealID =trans.deal;
ENUM_DEAL_TYPE lastDealType =trans.deal_type;
double lastDealVolume=trans.volume;
//--- идентификатор сделки во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(HistoryDealSelect(lastDealID))
Exchange_ticket=HistoryDealGetString(lastDealID,DEAL_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX deal=%s)",Exchange_ticket);
PrintFormat("MqlTradeTransaction: %s deal #%d %s %s %.2f lot %s",EnumToString(trans_type),
lastDealID,EnumToString(lastDealType),trans_symbol,lastDealVolume,Exchange_ticket);
}
break;
case TRADE_TRANSACTION_HISTORY_ADD: // добавление ордера в историю
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_FILLED)
{
if(HistoryOrderSelect(lastOrderID))
Exchange_ticket=HistoryOrderGetString(lastOrderID,ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX ticket=%s)",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),trans_symbol,EnumToString(lastOrderState),Exchange_ticket);
}
break;
default: // прочие транзакции
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_PLACED)
{
if(OrderSelect(lastOrderID))
Exchange_ticket=OrderGetString(ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("MOEX ticket=%s",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),EnumToString(lastOrderState),Exchange_ticket);
}
break;
}
//--- тикет ордера
ulong orderID_result=result.order;
string retcode_result=this.GetRetcodeID(result.retcode);
if(orderID_result!=0)
PrintFormat("MqlTradeResult: order #%d retcode=%s ",orderID_result,retcode_result);
}
Em geral, é um bom tom para inserir pausas entre os ofícios ;-)
Eu não entendo o que significa seu sorriso?
Eu não esperava ouvi-lo dizer isso. O que pausa, ou você está brincando?
A melhor saída é esperar que a transação chegue. Em termos de transação, isto é "TRADE_TRANSACTION_DEAL_ADD".
Aqui está uma escuta que eu encontrei.
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//---
static int counter=0; // счетчик вызовов OnTradeTransaction()
static uint lasttime=0; // время последнего вызова OnTradeTransaction()
//---
uint time=GetTickCount();
//--- если последняя транзакция была больше 1 секунды назад
if(time-lasttime>1000)
{
counter=0; // значит, это новая торговая операция и можно сбросить счетчик
if(IS_DEBUG_MODE)
Print(" Новая торговая операция");
}
lasttime=time;
counter++;
Print(counter,". ",__FUNCTION__);
//--- результат выполнения торгового запроса
ulong lastOrderID =trans.order;
ENUM_ORDER_TYPE lastOrderType =trans.order_type;
ENUM_ORDER_STATE lastOrderState=trans.order_state;
//--- имя символа, по которому произошла транзакция
string trans_symbol=trans.symbol;
//--- тип транзакции
ENUM_TRADE_TRANSACTION_TYPE trans_type=trans.type;
switch(trans.type)
{
case TRADE_TRANSACTION_POSITION: // изменение позиции
{
ulong pos_ID=trans.position;
PrintFormat("MqlTradeTransaction: Position #%d %s modified: SL=%.5f TP=%.5f",
pos_ID,trans_symbol,trans.price_sl,trans.price_tp);
}
break;
case TRADE_TRANSACTION_REQUEST: // отправка торгового запроса
{
PrintFormat("MqlTradeTransaction: TRADE_TRANSACTION_REQUEST");
break;
}
case TRADE_TRANSACTION_DEAL_ADD: // добавление сделки
{
ulong lastDealID =trans.deal;
ENUM_DEAL_TYPE lastDealType =trans.deal_type;
double lastDealVolume=trans.volume;
//--- идентификатор сделки во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(HistoryDealSelect(lastDealID))
Exchange_ticket=HistoryDealGetString(lastDealID,DEAL_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX deal=%s)",Exchange_ticket);
PrintFormat("MqlTradeTransaction: %s deal #%d %s %s %.2f lot %s",EnumToString(trans_type),
lastDealID,EnumToString(lastDealType),trans_symbol,lastDealVolume,Exchange_ticket);
}
break;
case TRADE_TRANSACTION_HISTORY_ADD: // добавление ордера в историю
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_FILLED)
{
if(HistoryOrderSelect(lastOrderID))
Exchange_ticket=HistoryOrderGetString(lastOrderID,ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX ticket=%s)",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),trans_symbol,EnumToString(lastOrderState),Exchange_ticket);
}
break;
default: // прочие транзакции
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_PLACED)
{
if(OrderSelect(lastOrderID))
Exchange_ticket=OrderGetString(ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("MOEX ticket=%s",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),EnumToString(lastOrderState),Exchange_ticket);
}
break;
}
//--- тикет ордера
ulong orderID_result=result.order;
string retcode_result=this.GetRetcodeID(result.retcode);
if(orderID_result!=0)
PrintFormat("MqlTradeResult: order #%d retcode=%s ",orderID_result,retcode_result);
}
A melhor saída é esperar que a transação chegue. Em termos de transação, isto é "TRADE_TRANSACTION_DEAL_ADD".
Aqui está uma escuta que eu encontrei.
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//---
static int counter=0; // счетчик вызовов OnTradeTransaction()
static uint lasttime=0; // время последнего вызова OnTradeTransaction()
//---
uint time=GetTickCount();
//--- если последняя транзакция была больше 1 секунды назад
if(time-lasttime>1000)
{
counter=0; // значит, это новая торговая операция и можно сбросить счетчик
if(IS_DEBUG_MODE)
Print(" Новая торговая операция");
}
lasttime=time;
counter++;
Print(counter,". ",__FUNCTION__);
//--- результат выполнения торгового запроса
ulong lastOrderID =trans.order;
ENUM_ORDER_TYPE lastOrderType =trans.order_type;
ENUM_ORDER_STATE lastOrderState=trans.order_state;
//--- имя символа, по которому произошла транзакция
string trans_symbol=trans.symbol;
//--- тип транзакции
ENUM_TRADE_TRANSACTION_TYPE trans_type=trans.type;
switch(trans.type)
{
case TRADE_TRANSACTION_POSITION: // изменение позиции
{
ulong pos_ID=trans.position;
PrintFormat("MqlTradeTransaction: Position #%d %s modified: SL=%.5f TP=%.5f",
pos_ID,trans_symbol,trans.price_sl,trans.price_tp);
}
break;
case TRADE_TRANSACTION_REQUEST: // отправка торгового запроса
{
PrintFormat("MqlTradeTransaction: TRADE_TRANSACTION_REQUEST");
break;
}
case TRADE_TRANSACTION_DEAL_ADD: // добавление сделки
{
ulong lastDealID =trans.deal;
ENUM_DEAL_TYPE lastDealType =trans.deal_type;
double lastDealVolume=trans.volume;
//--- идентификатор сделки во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(HistoryDealSelect(lastDealID))
Exchange_ticket=HistoryDealGetString(lastDealID,DEAL_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX deal=%s)",Exchange_ticket);
PrintFormat("MqlTradeTransaction: %s deal #%d %s %s %.2f lot %s",EnumToString(trans_type),
lastDealID,EnumToString(lastDealType),trans_symbol,lastDealVolume,Exchange_ticket);
}
break;
case TRADE_TRANSACTION_HISTORY_ADD: // добавление ордера в историю
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_FILLED)
{
if(HistoryOrderSelect(lastOrderID))
Exchange_ticket=HistoryOrderGetString(lastOrderID,ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX ticket=%s)",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),trans_symbol,EnumToString(lastOrderState),Exchange_ticket);
}
break;
default: // прочие транзакции
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_PLACED)
{
if(OrderSelect(lastOrderID))
Exchange_ticket=OrderGetString(ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("MOEX ticket=%s",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),EnumToString(lastOrderState),Exchange_ticket);
}
break;
}
//--- тикет ордера
ulong orderID_result=result.order;
string retcode_result=this.GetRetcodeID(result.retcode);
if(orderID_result!=0)
PrintFormat("MqlTradeResult: order #%d retcode=%s ",orderID_result,retcode_result);
}
E se você não ouvir e não dormir, há alguma outra maneira de avisar a EA que estamos esperando quando a ordem é positiva, mas ainda não há nenhuma posição?