通过外汇对冲手段稳定获利的可行性验证 - 牛云杰

NosenLiu 2021-12-14 原文


通过外汇对冲手段稳定获利的可行性验证


  上一篇博文谈了谈股票预测方面的问题,这一篇就谈谈外汇交易吧。

  对冲是金融领域的常见操作之一,即利用市场的不对称性,在不同市场进行方向相反的交易来保证稳定收益。我是在观看了李永乐老师对足彩对冲的原理讲解之后(http://www.iqiyi.com/w_19rz0551xx.html),才有了这个想法。

  对于一次足彩的投注来说,仅有两个投注方向,即看好A队或看好B队。如果想通过对冲来获得稳定的收益,必须根据不同的博彩公司开出的盘口,来计算是否有套利空间。如果在同一家博彩公司同时进行正、反方向的投注,肯定会入不敷出,因此足彩的对冲需要在不同的博彩公司完成方向相反的投注。不同于足彩的投注,外汇交易由于有多种外汇的存在,每一种货币都会与其他货币产生相应的汇率,理论上在一个有N种货币的外汇市场中,存在的汇率应有

种。即每两种货币之间都会产生汇率,且产生正向与反向两种汇率。例如欧元与美元两种货币,正向汇率是1欧元兑1.1599美元,反向汇率是1美元兑0.8616欧元。

  一般来说,直接用两种货币进行对冲,肯定是无法产生收益的,两种相反方向的汇率相乘必定小于1,如欧元换美元再换欧元,1欧元经过这两笔操作,得到1.1599*0.8616=0.99936984欧元。那么,能不能通过第三方货币的加入,经过三角循环交易,获得大于1的收益。为验证对冲获利的可能性,我利用python爬虫,来对汇率进行实时爬取,计算同一时刻人民币、美元、欧元有没有循环交易套利的空间。

 

图1.三角对冲示意图

  由图1可以看出,我们需要对两个方向的交易进行验证,外圈是人民币→美元→欧元→人民币的交易方向,内圈是人民币→欧元→美元→人民币的交易方向。为此我们需要获得6种汇率,即:人民币兑美元、美元兑人民币、人民币兑欧元、欧元兑人民币、美元兑欧元、欧元兑美元。

  这里通过新浪财经的网站获取实时汇率,获取这6种对应汇率的URL

1 self.usdcny_url = \'http://finance.sina.com.cn/money/forex/hq/USDCNY.shtml\'  
2 self.cnyusd_url = \'http://finance.sina.com.cn/money/forex/hq/CNYUSD.shtml\'
3 self.eurcny_url = \'http://finance.sina.com.cn/money/forex/hq/EURCNY.shtml\'
4 self.cnyeur_url = \'http://finance.sina.com.cn/money/forex/hq/CNYEUR.shtml\'
5 self.usdeur_url = \'http://finance.sina.com.cn/money/forex/hq/USDEUR.shtml\'
6 self.eurusd_url = \'http://finance.sina.com.cn/money/forex/hq/EURUSD.shtml\'

  之后对页面源码进行观察,发现其汇率会以文本的形式显示在<div id=’quoteWrap’>标签下的<h5>标签内。又由于网页是使用ajax技术动态刷新的,需要对动态页面进行爬取,所以我们选用selenium+phantomJS来对汇率进行爬取。

  因为这次仅仅是对三角对冲的获利可能性进行验证,因此程序很简单,分为两个函数,一个函数负责爬取汇率,另一个函数分两个方向计算交易获利情况。当交易后的数值大于1的时候,即判断有套利空间。

爬取汇率函数:

 1     def get_exchange(self):
 2         # 使用selenium通过PhantomJS来进行网络请求
 3         tag = 0
 4         while(tag==0):
 5             driver = webdriver.PhantomJS()
 6             try:
 7                 # C-人民币 U-美元 E-欧元
 8                 driver.get(self.usdcny_url)
 9                 UC = float(BeautifulSoup(driver.page_source,\'html.parser\').find(\'div\',id=\'quoteWrap\').find(\'h5\').text)
10                 driver.get(self.cnyusd_url)
11                 CU = float(BeautifulSoup(driver.page_source,\'html.parser\').find(\'div\',id=\'quoteWrap\').find(\'h5\').text)
12                 driver.get(self.eurcny_url)
13                 EC = float(BeautifulSoup(driver.page_source,\'html.parser\').find(\'div\',id=\'quoteWrap\').find(\'h5\').text)
14                 driver.get(self.cnyeur_url)
15                 CE = float(BeautifulSoup(driver.page_source,\'html.parser\').find(\'div\',id=\'quoteWrap\').find(\'h5\').text)
16                 driver.get(self.usdeur_url)
17                 UE = float(BeautifulSoup(driver.page_source,\'html.parser\').find(\'div\',id=\'quoteWrap\').find(\'h5\').text)
18                 driver.get(self.eurusd_url)
19                 EU = float(BeautifulSoup(driver.page_source,\'html.parser\').find(\'div\',id=\'quoteWrap\').find(\'h5\').text)
20                 print(u\'汇率获取完毕 \')
21                 print(\'美-人:\',UC,\' 人-美:\',CU,\' 欧-人:\',EC,\' 人-欧:\',CE,\' 美-欧:\',UE,\' 欧-美:\',EU)
22                 tag=1
23             except:
24                 print(u\'爬取数据故障,正在重新爬取。\')
25                 time.sleep(5)
26         if tag==1:
27             return {\'uc\':UC,\'cu\':CU,\'ec\':EC,\'ce\':CE,\'ue\':UE,\'eu\':EU}

利润计算函数:

1     def calc_profit(self,exchange_dic):
2         begin_money = 1000
3         end1 = begin_money*exchange_dic[\'cu\']*exchange_dic[\'ue\']*exchange_dic[\'ec\']
4         end2 = begin_money*exchange_dic[\'ce\']*exchange_dic[\'eu\']*exchange_dic[\'uc\']
5         profit1 = (end1-begin_money)/begin_money
6         profit2 = (end2-begin_money)/begin_money

程序代码在我的GitHub上有分享。

https://github.com/NosenLiu/exchange_proift

  最初的时候,设定每30秒进行一次爬取计算,发现确实是有套利空间的,留下类似下方的记录。

图2.套利空间验证结果记录

  可以看出,存在某些时间段,通过一次三角循环交易可以获取稳定收益。一次三角对冲的理论收益大约在万分之一左右。那么一个交易日中有多少次机会可以对冲呢?为此,我将程序进行修改,设定大约每20秒计算一次,如果有套利空间的话,自动记录到文件里面,无法获得收益则不进行记录。经过了一个小时的午睡时间。发现日志文件里产生了35条类似下图的记录。

图3.一小时内三角对冲结果记录样本(部分)

  粗略计算,每20秒爬取计算一次的话,一个小时约爬取计算180次,其中有35次拥有套利空间,即大约有20%的时间,可以从外汇市场进行三角对冲套利!! 这可不得了,按一次套利万分之一的收益来算,一个小时35次对冲交易,可以获取千分之3.5的收益!每天交易一个小时,一个月交易20天的话,一个月的收益率就有7.2%!!!

  当然,上面的推断都是基于0交易佣金的基础上的。各个外汇平台的规定都有所不同,一般来讲收佣金的平台,点差小;不收佣金的平台点差大,相对来讲也就更难以发掘三角对冲的套利空间。

  这么一算,似乎真金白银就在眼前。抱着早日实现财务自由的梦想,咱说干就干,初步的想法是基于某个外汇交易平台网站,爬取其中的外汇数据,使用selenium 这个Web应用程序测试工具实现自动下单完成交易的功能(毕竟手动交易太慢了,而且汇率稍微变动一点,套利空间就很有可能消失)。

  可是当我真正着手开始做的时候,发现问题果然没那么简单。每个外汇平台都有自己的交易软件,想要获取其中的数据并且实现自动交易功能基本没有可能~~,看起来最有希望的福汇平台也是基于web的纯flash界面,普通爬虫根本就不好使,而flash内部的信息交互方式我也是完全不了解。感觉一下子就触碰到知识盲区了,陷入深深的无力感。

图4.福汇平台的纯flash交易界面

  后来也有想过使用抓包软件之类的来获取外汇交易平台的汇率数据。主要存在以下两方面困难:一是抓包操作的自动化处理难以实现,没有在网络上找到现成的抓包+解析工具;二是即使获取了平台汇率数据,没有外汇交易平台的内部接口,自动化交易功能也难以达成。

  当然,有困难并不代表着没有办法实现,通过外挂插件或对平台软件进行反编译的方法理论上是可以完成自动交易功能的,这里也欢迎各位朋友参与讨论。

 

发表于
2018-09-01 19:58 
牛云杰 
阅读(3564
评论(4
编辑 
收藏 
举报

 

版权声明:本文为NosenLiu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/NosenLiu/p/9571396.html

通过外汇对冲手段稳定获利的可行性验证 - 牛云杰的更多相关文章

  1. BAT 前端开发面经 —— 吐血总结

    阿里,腾讯,百度,前端开发 面试整理,包含思考过程与答案 更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开 […]...

  2. 用好Word 2010中英文翻译功能,毕业论文不再愁 – Office软件技巧

    用好Word 2010中英文翻译功能,毕业论文不再愁 最近,多数高校生在书写毕业论文,尤其是摘要部分需要英文, […]...

  3. 设置文件的默认程序和添加程序到打开方式的解决办法 – 夜owl

    正常情况下安装程序之后,程序会自动关联文件,打开文件自动打开程序,并且加载打开的文件或者项目。 如果没系统没有 […]...

  4. 记一次MySQL删库的数据恢复 – 张大大123

    记一次MySQL删库的数据恢复 昨天因为不可描述的原因,数据库直接被 drop database删除。在第一时 […]...

  5. Github使用指南-从新手到专家 – xirong

    Github使用指南-从新手到专家 个人从刚刚开始接触github,啥都不知道,不会用,不知道能够用来干什么, […]...

  6. 一拍即合 – 智能证件照、形象照一站式服务平台 on the App Store

    一拍即合 – 智能证件照、形象照一站式服务平台 on the App Store...

  7. SVN常见问题及解决方案 – 王吉元

    SVN常见问题及解决方案 1. 隐藏文件.svn目录删除了怎么办 Checkout后,工作空间下.svn目录下 […]...

  8. 系统架构设计师第七章 软件架构设计 – liyyanli

    系统架构设计师第七章 软件架构设计     第七章 软件架构设计 考试大纲:  软件架构的概念 软件架构风格 […]...

随机推荐

  1. 设计模式读书笔记

    设计模式这是第三遍看了,每工作两年回头看都会有新的一些感受,最近时间比较宽裕把基础的知识复习复习巩固巩固。 基 […]...

  2. Java网络编程 — 网络协议

    OSI网络七层协议 为使不同计算机厂家的计算机能够互相通信,以便在更大的范围内建立计算机网络,有必要建立一个国 […]...

  3. Docker下安装Jenkins

     Docker安装参见:https://www.cnblogs.com/hackyo/p/9280042.ht […]...

  4. 数据库的基础操作

    任务二:数据库和表的基本操作 2.1数据库的基础知识 1.创建数据库 创建数据库就是在数据库系统中划分一块存储 […]...

  5. 一个完整的jmeter APP登录接口测试实例

    最终效果: 知识点: 通过HTTP信息头管理器, 正则表达式提取器 提取登录要用的token,memcard, […]...

  6. HTML在透明输入框里添加图标的实现代码

    这篇文章主要介绍了HTML在透明输入框里添加图标的实现代码,代码简单易懂,非常不错对大家的学习或工作具有一定的 […]...

  7. linux下查找命令总结

    查找命令总结,which,whereis,find,locate,type http://blog.csdn. […]...

  8. PDF怎么转换为CAD文件?这两种方法你的会

    在日常的办公中,我们最常见的文件格式就是PDF格式的,因为PDF文件的安全性是比较高的,可以防止不小心触碰到键 […]...

展开目录

目录导航