close

今天我們來討論,在MQL5中,如何來讀取多商品的報價資訊,並且將價格加以計算,完成三角套利的動作。

以下範例中,我們將透過EA,做到同時賣出USDJPY、買進USDCHF、買進CHFJPY,完成套利模組。

為了讀取商品資訊,本範例將使用 SymbolInfoDouble 函數。


其中第一個參數為商品名稱,第二個參數為 ENUM_SYMBOL_INFO_DOUBLE (可用谷哥查找)。

讀取多商品價格資訊的方法如下

USDJPY_Bid=SymbolInfoDouble("USDJPY.",SYMBOL_BID);

USDCHF_Ask=SymbolInfoDouble("USDCHF.",SYMBOL_ASK);

CHFJPY_Ask=SymbolInfoDouble("CHFJPY.",SYMBOL_ASK);

 

完整程式範例如下

000.png

 

由以上程式得知,透過CTrade 功能,市價賣出USDJPY、市價買進USDCHF、市價買進CHFJPY,並且在價差-0.03內完成

當條件達到後,印出如下資訊

002.png

 

實際成交價格

SELL USDJPY 109.056,BUY USDCHF 0.94334,BUY CHFJPY 115.652

109.056/0.94334=115.6062 相較於115.652 價差大約在0.05,因為市價所以有滑價

001.png

 

 

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Trade\Trade.mqh>
CTrade m_Trade;

void OnTick()
  {
   double USDJPY_Bid,USDCHF_Ask,CHFJPY_Ask;
   //Bid銀行的買價,客戶的賣價。Ask銀行的賣價,客戶的買價
   double CP_CHFJPY;//CHFJPY合成理論價。
   double Spread;//價差。
   USDJPY_Bid=SymbolInfoDouble("USDJPY.",SYMBOL_BID); 
   USDCHF_Ask=SymbolInfoDouble("USDCHF.",SYMBOL_ASK);
   CHFJPY_Ask=SymbolInfoDouble("CHFJPY.",SYMBOL_ASK);  
   CP_CHFJPY = USDJPY_Bid/USDCHF_Ask;
   Spread = CP_CHFJPY-CHFJPY_Ask;
   if(Spread > -0.03 )
    {     
     m_Trade.Sell(0.01,"USDJPY.");
     m_Trade.Buy (0.01,"USDCHF.");
     m_Trade.Buy (0.01,"CHFJPY.");
     printf("※賣出USDJPY與買進USDCHF,等於CHFJPY理論賣出價:"+CP_CHFJPY);
     printf("CHFJPY買進價:"+CHFJPY_Ask);
     printf("二者相減,若價差接近1者,成本越低"+Spread);
    }
  }

 

 

以上純屬個人程式語言學習分享

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 興小弟讀書筆記 的頭像
    興小弟讀書筆記

    興小弟讀書筆記

    興小弟讀書筆記 發表在 痞客邦 留言(0) 人氣()