首页 > 解决方案 > 检查 Metatrader 4 交易历史中 OrdersHistoryTotal 的数量是否改变

问题描述

我想在交易结束后立即触发一个函数(=OrdersHistoryTotal至少增加 1)。

MQL4 中是否有针对此类场景的处理程序?

在我的特定设置中,我有以下功能pushSocket,它应该只在发生更改的情况下推送数据OrdersHistoryTotal

int i,hstTotal=OrdersHistoryTotal();
string historical_trades = "";

for(i=0;i<hstTotal;i++)
   {
        if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) continue;
        historical_trades = historical_trades +
           "historical_trades|" +
           version + "|" +
           DID + "|" +
           AccountNumber() + "|" +   
           IntegerToString(OrderTicket()) + "," +
           TimeToString(OrderOpenTime(), TIME_DATE|TIME_SECONDS) + "," +
           TimeToString(OrderCloseTime(), TIME_DATE|TIME_SECONDS) + "," +
           IntegerToString(OrderType()) + "," +
           DoubleToString(OrderLots(),2) + "," +
           OrderSymbol() + "," +
           DoubleToString(OrderOpenPrice(),5) + "," +
           DoubleToString(OrderClosePrice(),5) + "," +
           DoubleToString(OrderStopLoss(),5) + "," +
           DoubleToString(OrderTakeProfit(),5) + "," +
           DoubleToString(OrderCommission(),2) + "," + 
           DoubleToString(OrderSwap(),2) + "," +
           DoubleToString(OrderProfit(),2) + "," +
           "<" + OrderComment() + ">|";
    }    

      pushSocket.send(StringFormat("%s", historical_trades, true));

我试图插入一个计数器来比较它,但每次清理内存时都会删除计数器。上述函数嵌套在每秒执行的 onTick 函数中。

标签: mql4metatrader4

解决方案


MQL5 中有一个函数OnTradeAction(),每次执行某些交易操作时都会调用该函数。但不幸的是,此功能在 MQL4 中不可用。另一方面,您可以在内部实现一个函数,该函数OnTick()将检查HistoryTraderTotal()与先前保存的值相比增加的值,并在这种情况下执行您喜欢的所有步骤。更多的工作,但几乎相同。

OnTimer(){
    Mt4OnTradeAction();
    otherLogic();
} 

Mt4OnTradeAction(){ 
    static int historyTradesTotal=0;
    if(HistoryTradesTotal()==historyTradesTotal) return; 
    historyTradesTotal = HistoryTradesTotal(); 
    processingTrade();
}

推荐阅读