mql4 - 检查 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 函数中。
解决方案
MQL5 中有一个函数OnTradeAction()
,每次执行某些交易操作时都会调用该函数。但不幸的是,此功能在 MQL4 中不可用。另一方面,您可以在内部实现一个函数,该函数OnTick()
将检查HistoryTraderTotal()
与先前保存的值相比增加的值,并在这种情况下执行您喜欢的所有步骤。更多的工作,但几乎相同。
OnTimer(){
Mt4OnTradeAction();
otherLogic();
}
Mt4OnTradeAction(){
static int historyTradesTotal=0;
if(HistoryTradesTotal()==historyTradesTotal) return;
historyTradesTotal = HistoryTradesTotal();
processingTrade();
}
推荐阅读
- node.js - 如何连接两个 docker 容器的文件系统
- powershell - invoke-restmethod 不断报错
- c# - 如何在 C# 中获取路径的一部分?
- ansible - ansible循环遍历具有多个项目的列表
- python - Opencv 4.1在jetson nano上与旧版本冲突
- android - 在 JobService 类的 onDataChange() 内工作时应用程序被冻结
- c# - 使用 .netCore 将多个参数传递给存储过程
- go - 解析具有多个值的 go 标志
- graphql - 在放大graphql中添加多对多连接
- css - Bootstrap 4中的列间距相等