使用OANDA分析外汇数据

刚开始准备在MT4中写EA。MQL4语言有点像C,读起来还相对简单。

比较有意思的是通过OANDA下载的MT4客户端,会给你提供两个应用程序,一个editor,一个交易窗口。

editor中有非常详细的帮助文档,强调一遍,非常详细。而且还支持中文。

在editor里面编写完成之后,调试的内容都会反应在你的交易窗口中,非常方便。

但是对于python,没有像MT4那么完整的一套外汇交易框架,起码现在我没有找到。

我寻思着,反正学习MQL4和ORANDA v20的接口都是学,倒不如用一个现成的框架,因为调试起来真是太方便了,如果有两三块屏幕的话就更是锦上添花了。

之后逛了些外汇论坛,呵呵,MT4可以挂在专用的VPS执行,但是要是布在自己搭的服务器上可能要费点事,甚至我根本不会完成这件事。

算了,毕竟python相对还算熟,在一阵选择恐惧症过后,坚决选择了python,开始学习OANDA的接口v20

分析思路

上篇文章我通过分析外汇市场每天的交易量,得到了一些规律。通过这些规律,我们可以设计一个策略。

首先需要纠正一下。上篇文章在解释这张图的时候有些不准确。我上网查了些资料

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点,正是伦敦交易所开始营业的时间,图中的10点,是纽约的8点,是纽约交易所营业的时间。

可以看到,在伦敦时间12点的时候,交易量已经有上升的趋势。在纽约开盘的时候,交易量达到了以小峰值。

之后的时间,之后英镑/美元货币对仍然会活跃交易,其他的货币对都会出现下降趋势。伦敦交易所在图中的13点闭市。之后交易量开始上升,直至纽约时间的13点,达到全天的峰值。

但是没有维持太长时间就迅速回落。之后在纽约时间19点的时候,东京开始交易,交易量达到峰值,balabala....

这次分析和之前的分析还是有些出入的。之前说交易量的最高峰在欧洲市场和北美市场重叠的部分,不过今天来看,情况不是这样的。

在纽约时间13点的时候,交易量达到了全天的峰值,对此我又展开一次分析调查。也不知道分析得对不对,看到这里的朋友,觉得有错误请指正,谢谢。

我看了下Economic Calendar。发现美国发生经济活动的时间大多在纽约时间10点至16点,而欧洲大多发生在伦敦时间8点至13点。

看出来了吧?


理由有些牵强,但感觉还是有些道理的。

ok,我们撇开基本面分析,回到结论来。不管分析如何,规律反正已经反映在了图上。

我们就利用这个规律来分析下交易数据。

数据采集

上篇文章已经简单介绍了下如何采集外汇的数据。不过用的是github上的样本代码,没怎么仔细看。接下来我介绍下如何用v20接口来分析外汇数据。

我采集了在OANDA中所有以EUR为基础货币的货币交易对的交易数据。

在采集交易数据之前,需要件创建一个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里面的数据,返回类型都是json,什么json?

为了便于理解,我把它当做就是一个大dict,dict里面的value是个list,list里面又装了一些dict。你要是说你不懂dict,那我只能说你还是先看看python的基础吧。

获取完货币对之后,可以通过 InstrumentsCandlesFactory 类来获取交易数据,具体使用方法在

http://developer.oanda.com/rest-live-v20/introduction/

文档写得很有趣,感觉像是玩俄罗斯方块,一直处于方块被消除的状态,爽。

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'])

# 将数据存储在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()

数据分析

数据已经采集完成,接下来就是分析日内交易数据。

这里倒没有用到什么机器学习的知识,都是一些统计学的内容。我计算了一些指标,还是通过可视化的手段将其展示出来,过滤掉一些小币种:

根据上图,我觉得,起码均值回归策略在外汇市场是行不通的,你根本阻挡不了它一通下跌的趋势。我们不妨做以下策略(假设)

如果在伦敦开盘至纽约开盘这段时间内,价格出现新高,就看多;出现新低,就看空。

在纽约闭市前进行平仓。

为什么这么做?

成交量意味着趋势的确定,如果开盘时欧洲人就不断做空,拉低价格,随着美洲人的苏醒,交易量不断扩大,趋势逐渐明确。

当然,你不能确定当天国际上又会出现什么幺蛾子新闻来影响汇率了。那就不在这篇粗鄙的文章讨论范围之内了,那叫做NLP。

当然,以上都只是假设,具体方案我还不确定,毕竟接触时间不长,还有好多东西要学,日后研究下再继续在文章里讨论。

当然,重要的是,得去实践。真理都是实践出来的。

下回继续研究咯~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容