剛開始準(zhǔn)備在MT4中寫EA。MQL4語言有點像C,讀起來還相對簡單。
比較有意思的是通過OANDA下載的MT4客戶端,會給你提供兩個應(yīng)用程序,一個editor,一個交易窗口。
editor中有非常詳細(xì)的幫助文檔,強(qiáng)調(diào)一遍,非常詳細(xì)。而且還支持中文。
在editor里面編寫完成之后,調(diào)試的內(nèi)容都會反應(yīng)在你的交易窗口中,非常方便。
但是對于python,沒有像MT4那么完整的一套外匯交易框架,起碼現(xiàn)在我沒有找到。
我尋思著,反正學(xué)習(xí)MQL4和ORANDA?v20的接口都是學(xué),倒不如用一個現(xiàn)成的框架,因為調(diào)試起來真是太方便了,如果有兩三塊屏幕的話就更是錦上添花了。
之后逛了些外匯論壇,呵呵,MT4可以掛在專用的VPS執(zhí)行,但是要是布在自己搭的服務(wù)器上可能要費點事,甚至我根本不會完成這件事。
算了,畢竟python相對還算熟,在一陣選擇恐懼癥過后,堅決選擇了python,開始學(xué)習(xí)OANDA的接口v20
分析思路
上篇文章我通過分析外匯市場每天的交易量,得到了一些規(guī)律。通過這些規(guī)律,我們可以設(shè)計一個策略。
首先需要糾正一下。上篇文章在解釋這張圖的時候有些不準(zhǔn)確。我上網(wǎng)查了些資料
The foreign exchange ("forex" or "FX") currency market is not traded on a regulated exchange like stocks and commodities.
?Rather, the market consists of a network of financial institutions and retail trading brokers which each have their own individual hours of operation. Since most participants trade between the hours of 8:00 a.m. and 4:00 p.m. in their local time zone, these times are used as the market open and close times, respectively.
通過以上信息可知,大部分交易所的開放時間都在本地的8:00AM至4:00PM。所以對于那張趨勢圖,我簡單修改下。
圖中的5點,其實是紐約的本地時間3點,也就是說倫敦的8點,正是倫敦交易所開始營業(yè)的時間,圖中的10點,是紐約的8點,是紐約交易所營業(yè)的時間。
可以看到,在倫敦時間12點的時候,交易量已經(jīng)有上升的趨勢。在紐約開盤的時候,交易量達(dá)到了以小峰值。
之后的時間,之后英鎊/美元貨幣對仍然會活躍交易,其他的貨幣對都會出現(xiàn)下降趨勢。倫敦交易所在圖中的13點閉市。之后交易量開始上升,直至紐約時間的13點,達(dá)到全天的峰值。
但是沒有維持太長時間就迅速回落。之后在紐約時間19點的時候,東京開始交易,交易量達(dá)到峰值,balabala....
這次分析和之前的分析還是有些出入的。之前說交易量的最高峰在歐洲市場和北美市場重疊的部分,不過今天來看,情況不是這樣的。
在紐約時間13點的時候,交易量達(dá)到了全天的峰值,對此我又展開一次分析調(diào)查。也不知道分析得對不對,看到這里的朋友,覺得有錯誤請指正,謝謝。
我看了下Economic Calendar。發(fā)現(xiàn)美國發(fā)生經(jīng)濟(jì)活動的時間大多在紐約時間10點至16點,而歐洲大多發(fā)生在倫敦時間8點至13點。
看出來了吧?

理由有些牽強(qiáng),但感覺還是有些道理的。
ok,我們撇開基本面分析,回到結(jié)論來。不管分析如何,規(guī)律反正已經(jīng)反映在了圖上。
我們就利用這個規(guī)律來分析下交易數(shù)據(jù)。
數(shù)據(jù)采集
上篇文章已經(jīng)簡單介紹了下如何采集外匯的數(shù)據(jù)。不過用的是github上的樣本代碼,沒怎么仔細(xì)看。接下來我介紹下如何用v20接口來分析外匯數(shù)據(jù)。
我采集了在OANDA中所有以EUR為基礎(chǔ)貨幣的貨幣交易對的交易數(shù)據(jù)。
在采集交易數(shù)據(jù)之前,需要件創(chuàng)建一個session
from oandapyV20 import API
def client_session(token):
????return API(access_token=token)
為了以后方便分析,自己定義一個采集貨幣對的方法
import oandapyV20.endpoints.accounts as accounts
def get_symbol(client, account_id, select):
????r = accounts.AccountInstruments(accountID=account_id)
????ins = client.request(r)
????return [item['name'] for item in ins['instruments'] if item['name'][:3] == select]
這里需要說明一下的是,OANDA里面的數(shù)據(jù),返回類型都是json,什么json?
為了便于理解,我把它當(dāng)做就是一個大dict,dict里面的value是個list,list里面又裝了一些dict。你要是說你不懂dict,那我只能說你還是先看看python的基礎(chǔ)吧。
獲取完貨幣對之后,可以通過?InstrumentsCandlesFactory?類來獲取交易數(shù)據(jù),具體使用方法在
http://developer.oanda.com/rest-live-v20/introduction/
文檔寫得很有趣,感覺像是玩俄羅斯方塊,一直處于方塊被消除的狀態(tài),爽。
from oandapyV20.contrib.factories import InstrumentsCandlesFactory
def frame_factory(client, instr, params):
? ? ......
????for r in InstrumentsCandlesFactory(instrument=instr, params=params):
????????client.request(r)
????????rv = r.response.get('candles')
????????for candle in rv:
????????????tra_time = candle.get('time')[0:19]
????????????try:
? ? ? ? ? ? ? ? ......
????????????except Exception as e:
????????????????print(e, r)
????????????????pass
????return pd.DataFrame(structure, columns=['time', 'complete', 'open', 'high', 'low', 'close', 'volume'])
#?將數(shù)據(jù)存儲在hdf文件中
store = pd.HDFStore('./data/history.h5')
params = dict()
params['from'] = '2018-03-15T00:00:00Z'
params['to'] = '2018-03-16T00:00:00Z'
for item in ins:
? ? params['granularity'] = 'M1'
? ? instr = item
? ? store[item] = frame_factory(client, item, params)
store.close()
數(shù)據(jù)分析
數(shù)據(jù)已經(jīng)采集完成,接下來就是分析日內(nèi)交易數(shù)據(jù)。
這里倒沒有用到什么機(jī)器學(xué)習(xí)的知識,都是一些統(tǒng)計學(xué)的內(nèi)容。我計算了一些指標(biāo),還是通過可視化的手段將其展示出來,過濾掉一些小幣種:
根據(jù)上圖,我覺得,起碼均值回歸策略在外匯市場是行不通的,你根本阻擋不了它一通下跌的趨勢。我們不妨做以下策略(假設(shè))
如果在倫敦開盤至紐約開盤這段時間內(nèi),價格出現(xiàn)新高,就看多;出現(xiàn)新低,就看空。
在紐約閉市前進(jìn)行平倉。
為什么這么做?
成交量意味著趨勢的確定,如果開盤時歐洲人就不斷做空,拉低價格,隨著美洲人的蘇醒,交易量不斷擴(kuò)大,趨勢逐漸明確。
當(dāng)然,你不能確定當(dāng)天國際上又會出現(xiàn)什么幺蛾子新聞來影響匯率了。那就不在這篇粗鄙的文章討論范圍之內(nèi)了,那叫做NLP。
當(dāng)然,以上都只是假設(shè),具體方案我還不確定,畢竟接觸時間不長,還有好多東西要學(xué),日后研究下再繼續(xù)在文章里討論。
當(dāng)然,重要的是,得去實踐。真理都是實踐出來的。
下回繼續(xù)研究咯~