我如何正确地开立市场订单? - 页 2 123456789 新评论 Vladimir Karputov 2017.02.03 16:19 #11 Gennady Mazur: 哦,还有,标准功能是否支持订单的执行,他们的备案,因为我曾经用SeaTrade开过,直到我到了一个交易所,订单不想执行,因为没有办法确定备案。设置类型填充设置类型填充通过填充来设置订单类型 你设定你认为合适的东西。 Denis Kirichenko 2017.02.03 16:20 #12 Gennady Mazur:是的,本论坛的大师们在以前的一个主题中向我保证,这些信息总是......几乎是即时的......如果在服务器作出积极回应时没有发出票据,那么订单就会失败。 这是什么乱七八糟的东西? 也尝试调用OnTradeTransaction 事件。在某处我有一个倾听所有贸易业务的例子。如果我没弄错的话,罗什也在那里。寻找它... 一般来说,在交易操作之间插入停顿是个好主意;-) Gennady Mazur 2017.02.03 16:21 #13 Sergey Chalyshev:现在,这里的大师们也会教你))。以你的经验,在这里问这种问题是不体面的。 谢尔盖,是的,我有足够的经验 ...但学习永远不会太晚......如果你之前误解了什么,也许会引入一些新的东西呢......。这并不难,也许别人会觉得有用......或者可能已经遇到了这样的问题,现在一切都可以在5分钟内解决了。 Vladimir Karputov 2017.02.03 16:23 #14 Dennis Kirichenko: 这是什么乱七八糟的东西? 也可以尝试参考OnTradeTransaction 事件。我在某处发现了一个倾听所有贸易业务的例子。如果我没记错的话,是Rosh发布的。搜索一下... 窃听的例子应该在OrderSendAsync 中出现 Gennady Mazur 2017.02.03 16:24 #15 Vladimir Karputov:设置类型填充设置类型填充设置订单的类型,通过填写 设置你认为合适的东西。 好了,你去....,原来问题是有用处的....,谢谢你。 Gennady Mazur 2017.02.03 16:26 #16 Dennis Kirichenko: 这是什么乱七八糟的东西? 也可以尝试参考OnTradeTransaction 事件。我在某处发现了一个倾听所有贸易业务的例子。如果我没记错的话,是Rosh发布的。寻找它... 一般来说,在交易操作之间插入停顿是个好主意;-) 我已经在考虑冬眠了,但这不是最好的办法.... Denis Kirichenko 2017.02.03 16:30 #17 Gennady Mazur:我已经在考虑冬眠了,但这不是最好的出路....。 休眠不是在交易操作 之后,而是在交易操作 之间需要。否则服务器(经纪人)将不喜欢交易者的活动 :-)) 最佳的出路是等待交易的到来。在交易方面,这就是 "TRADE_TRANSACTION_DEAL_AD"。弗拉基米尔-卡尔普托夫 曾多次写到这一点。也要搜索分支。 这是我找到的一份窃听录音。//+------------------------------------------------------------------+//| 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); } How do I open 初学者的问题 MQL5 MT5 MetaTrader MetaEditor build 1490 Sergey Chalyshev 2017.02.03 16:31 #18 Dennis Kirichenko: 一般来说,在交易之间插入停顿是一个好的基调;-)我不明白你的微笑是什么意思?我没有想到会听到你这么说。什么停顿,还是你在开玩笑? Sergey Chalyshev 2017.02.03 16:33 #19 Dennis Kirichenko: 最好的办法是等待交易的到来。在交易方面,这是 "TRADE_TRANSACTION_DEAL_ADD"。 这是我找到的一份窃听记录。//+------------------------------------------------------------------+//| 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); } 可怕的() Gennady Mazur 2017.02.03 16:35 #20 Dennis Kirichenko: 最好的办法是等待交易的到来。在交易方面,这是 "TRADE_TRANSACTION_DEAL_ADD"。 这是我找到的一份窃听录音。//+------------------------------------------------------------------+//| 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); } 是的,非常有用的信息...谢谢你... 如果你不听话,不睡觉,有没有其他办法让EA知道,当订单是正数但还没有位置时,我们在等待? 123456789 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
哦,还有,标准功能是否支持订单的执行,他们的备案,因为我曾经用SeaTrade开过,直到我到了一个交易所,订单不想执行,因为没有办法确定备案。
设置类型填充
设置类型填充
通过填充来设置订单类型
你设定你认为合适的东西。
是的,本论坛的大师们在以前的一个主题中向我保证,这些信息总是......几乎是即时的......如果在服务器作出积极回应时没有发出票据,那么订单就会失败。
也尝试调用OnTradeTransaction 事件。在某处我有一个倾听所有贸易业务的例子。如果我没弄错的话,罗什也在那里。寻找它...
一般来说,在交易操作之间插入停顿是个好主意;-)
现在,这里的大师们也会教你))。
以你的经验,在这里问这种问题是不体面的。
这是什么乱七八糟的东西?
也可以尝试参考OnTradeTransaction 事件。我在某处发现了一个倾听所有贸易业务的例子。如果我没记错的话,是Rosh发布的。搜索一下...
设置类型填充
设置类型填充
设置订单的类型,通过填写
设置你认为合适的东西。
这是什么乱七八糟的东西?
也可以尝试参考OnTradeTransaction 事件。我在某处发现了一个倾听所有贸易业务的例子。如果我没记错的话,是Rosh发布的。寻找它...
一般来说,在交易操作之间插入停顿是个好主意;-)
我已经在考虑冬眠了,但这不是最好的出路....。
最佳的出路是等待交易的到来。在交易方面,这就是 "TRADE_TRANSACTION_DEAL_AD"。
弗拉基米尔-卡尔普托夫 曾多次写到这一点。也要搜索分支。
这是我找到的一份窃听录音。
//| 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);
}
一般来说,在交易之间插入停顿是一个好的基调;-)
我不明白你的微笑是什么意思?
我没有想到会听到你这么说。什么停顿,还是你在开玩笑?
最好的办法是等待交易的到来。在交易方面,这是 "TRADE_TRANSACTION_DEAL_ADD"。
这是我找到的一份窃听记录。
//| 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);
}
最好的办法是等待交易的到来。在交易方面,这是 "TRADE_TRANSACTION_DEAL_ADD"。
这是我找到的一份窃听录音。
//| 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);
}
如果你不听话,不睡觉,有没有其他办法让EA知道,当订单是正数但还没有位置时,我们在等待?