如何在Metatrader 4 / MQL4中过滤交易的交易品种

问题描述 投票:0回答:1

我正在寻找一种解决方案,以[在我的循环中考虑真实的外汇对。我不希望包含差价合约,商品,白银,黄金等,因为在计算点等时,它们具有完全不同的逻辑。(我想将这些数据用于外汇仪表板)。

[如何在不为每个现有的FX对建立if-statements的情况下实现过滤器来实现?如果可能的话,该解决方案应独立于所使用的经纪人(由于所提供的FX对可能因经纪人而异,因此一种通用的方法是全入式解决方案)。

这是我当前的代码,不能在fx和非fx之间分开:

/* 2.) Create a string format for each pending and running trade */ int live_orders = OrdersTotal(); string live_trades = ""; for(int i=live_orders; i >= 0; i--) { if(OrderSelect(i,SELECT_BY_POS)==false) continue; live_trades = live_trades + "live_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() + ">|"; }
mql4 metatrader4
1个回答
0
投票
这可能是最简单的方法。前缀符号可能是个问题(例如mEURUSD),但可以通过将StringSubstr值移动前缀大小来轻松解决。后缀不是问题,因为我们采用符号字符串的前6个字符。

const string FX_CURRENCIES[]={"EUR","GBP","USD","NZD","AUD","CHF","CAD","JPY"};//add other currencies if needed bool isFxPair(const string symbol){ return StringLen(symbol)>=6 && getCurrencyIdx(StringSubStr(symbol,0,3))>=0 && getCurrencyIdx(StringSubStr(symbol,3,3))>=0; } int getCurrencyIdx(const string smb){ for(int i=ArraySize(FX_CURRENCIES)-1;i>=0;i--){ if(FX_CURRENCIES[i]==smb) return i; } return -1; }

使用CStringArray和缓存FX符号可能是另一个可能会更快运行的好主意,但似乎使用了与上述类似的逻辑(但每次添加某些东西时都必须对缓存进行排序,以使CStringArray集合可以快速工作)。

没有直接方法可以查询符号是FX,CFD,股票,加密货币还是其他任何东西。

© www.soinside.com 2019 - 2024. All rights reserved.