首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Metatrader 4/ MQL4中过滤交易符号

如何在Metatrader 4/ MQL4中过滤交易符号
EN

Stack Overflow用户
提问于 2019-12-16 20:58:55
回答 1查看 901关注 0票数 1

我正在寻找一个的解决方案,只有在我的循环中考虑真正的外汇对。我不希望CFDs、大宗商品、白银、黄金等被包括在内,因为它们在计算pips等方面有着完全不同的逻辑(我想将数据用于FX仪表板)。

如果不为现有的每一对FX构建if-statements,我如何实现过滤器呢?如果可能的话,解决方案应该独立于所使用的代理(因为所提供的FX对可能因代理而异,所以通用的解决方案将是全面的解决方案)。

,这是我当前的代码,不能区分fx和非fx:

代码语言:javascript
复制
   /*
      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() + ">|"; 
      }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-21 14:20:14

这可能是最简单的方法。前缀符号可能是一个问题(例如,mEURUSD),但通过根据前缀大小移动StringSubstr值很容易解决。后缀不是一个问题,因为我们采取前6个字符的符号字符串。

代码语言:javascript
复制
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,Stock,Crypto还是其他什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59364202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档