簡體   English   中英

如何在 Metatrader 4 / MQL4 中過濾交易品種

[英]How to filter traded symbols in Metatrader 4 / MQL4

我正在尋找一種解決方案,在我的循環中考慮真正的外匯對。 我不希望包含差價合約、商品、白銀、黃金等,因為它們在計算點等時具有完全不同的邏輯(我想將數據用於外匯儀表板)。

如何在不為現有的每個 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() + ">|"; 
      }

這可能是最簡單的方法。 前綴符號可能是一個問題(例如 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 集合添加到工作快)。

沒有直接的方法可以詢問一個符號是外匯、差價合約、股票、加密貨幣還是其他任何東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM