今天我們來討論,在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);
完整程式範例如下
由以上程式得知,透過CTrade 功能,市價賣出USDJPY、市價買進USDCHF、市價買進CHFJPY,並且在價差-0.03內完成
當條件達到後,印出如下資訊
實際成交價格
SELL USDJPY 109.056,BUY USDCHF 0.94334,BUY CHFJPY 115.652
109.056/0.94334=115.6062 相較於115.652 價差大約在0.05,因為市價所以有滑價
#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);
}
}
以上純屬個人程式語言學習分享
留言列表