【问题标题】:How to filter traded symbols in Metatrader 4 / MQL4如何在 Metatrader 4 / MQL4 中过滤交易品种
【发布时间】:2019-12-16 20:58:55
【问题描述】:

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

如何在不为现有的每个 FX 对构建 if-statements 的情况下实现过滤器? 如果可能,该解决方案应独立于所使用的经纪商(因为所提供的外汇对可能因经纪商而异,因此一种常见的方法是全押解决方案)。

这是我当前的代码,不区分 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】:

    这可能是最简单的方法。前缀符号可能是一个问题(例如 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 集合可以快速工作)。

    没有直接的方法来询问交易品种是外汇、差价合约、股票、加密货币还是其他任何东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-21
      • 2021-07-23
      • 2023-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多