热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python量化交易实战策略,python量化交易系统

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理本文章来自腾讯云作者:somenzz想要学习Python?有问题


正文文字和图片来源于互联网,仅用于学习、交流,无商业用途。 版权归原作者所有。 如果有问题请马上联系我处理


这篇文章来自腾讯云的作者somenzz


你想学Python吗? 问题不能在第一时间解决吗? 看看这里的“1039649593”满足了你的需求。 资料都上传到文件了,可以自己下载。 还有很多最新的2020python学习资料。


点击查看


什么是量化交易? 百科全书中是这样介绍的


所谓量化交易,就是用先进的数学模型取代人为的主观判断,利用计算机技术从海量的历史数据中选出带来超额收益的多种“大概率”事件来制定策略,大大减少投资者情绪波动的影响,市场出现极端狂热或悲观的情况


量化交易覆盖范围广,程序交易、算法交易、高频交易、自动化交易平台等也可视为量化交易。


其最大的优点是可以避免心理素质原因导致的交易风险。 另外,计算机不睡觉,不需要人工实时操作,可以满足人们躺着赚钱的愿景。 当然,实际上需要人及时介入,防止算法突然失效导致巨额交易损失。


使用程序进行定量交易。 基本上,将交易请求发送到交易所以实现交易。 证券公司和交易所通常为投资者提供API接口。 例如,Gemini交易所的公开行情API可以通过如下简单的HTTP GET请求获得最近的比特币对美元的价格和最近的成交量:


# # # # # # # Gemini行情接口# # # # # # # # https://API.Gemini.com/v1/pub ticker/: symbolimportjsonimportrer ' symbol=' BTC USD ' BTC _ data=requests.get (Gemini _ ticker.format (symbol ) ).json ) (print ) ) )。 indent=4) #######输出# # # # # # # { ' bid ' : ' 8825.88 '、' ask': '8827.52 '、' volume ' ' timestamp': 1560643800000 } ',' last': '8838.45'} ' '对于算法交易系统来说,API只是最底层的结构


Python是量化交易算法交易的基本需求之一以有效处理数据。 数据处理是Python的优势,特别是Numpy Pandas的组合使算法交易开发者的效率直线上升。


这里提供了用于攀登、格式化和绘制比特币过去一小时的价格曲线的Python代码。


* importmatplotlib.pyplotaspltimportpandasaspdimportrequests #选择要获取的数据期间periods='3600'# Http中的btc历史价格数据resp=requests 获取markets/gemini/BTCUSD/ohlc ),params={ ' periods ' : periods } } data=resp.JSON (#为pandasdataframedf=paramedf } ' HighPrice ',' LowPrice ',' ClosePrice ',' Volume ',' na ' ()输出DataFrame的前几行中的print(df.head ) ) btc价格曲线df ) clclc 7(######输出# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ) closetimeopenpricehighprice . closepricevolumena 015588432008030.558046.30 . 8011.2011.642968932.459964111588846800000 215588504008031.618036.14.8000.0015.659680125384.519063315588540008000.008016.29.8001.463。

8.171420 304342.0488924 1558857600 8002.69 8023.11 ... 8009.24 3.582830 28716.385009**

通过执行代码,我们便可能得到下图所示的曲线:


另外,有一些现有的便利交易平台可以执行自定义的 Python 策略,无需搭建量化交易框架。比如,Quantopian,就提供了基于 Zipline 的标准回测环境,国内也有诸如 BigQuant,果仁网等类似平台。

此外, Python 是各行各业广泛使用的编程语言,越来越多投资机构的交易部门,都开始使用 Python,因此对优秀的 Python 开发者产生了更多的需求,自然也让学习 Python 成了更有意义的投资。

量化交易必须了解什么是 REST

什么是 REST API,要理解 RESTful 架构,最好的方法就是去理解Representational State Transfer 这个词组到底是什么意思,它的每一个词代表了什么涵义。从其英文全称来看是表征状态转移,通过 url 定位资源,用 GET,POST,PUT,DELETE 等动词来描述操作。满足这种要求的 API ,就叫 REST API。

举几个例子吧:
1、Gemini 交易所 BTC 对 USD 的 ticker 接口:

GET https://api.gemini.com/v1/pubticker/btcusd

这里的 GET 是动词,后边的 url 是 ticker 这个资源的地址,所以这是一个 REST API 接口。

2、下面这样的,就不是严格的 REST API 接口。

POST https://api.restful.cn/accounts/delete/:username

因为 URI 中包含动词“delete”(删除),所以这个 URI 并不是指向一个资源。如果要修改成严格的 RESTful 接口,我们可以把它改成下面这样:

DELETE https://api.rest.cn/accounts/:username 手把手教你使用 API 下单

手动挂单显然太慢,也不符合量化交易的初衷。我们就来看看如何用代码实现自动化下单吧。

第一步,你需要做的是,注册一个 Gemini Sandbox 账号。请放心,这个测试账号不需要你充值任何金额,注册后即送大量虚拟现金。这口吻是不是听着特像网游宣传语,接下来就是“快来贪玩蓝月里找我吧”?哈哈,不过这个设定确实如此,所以赶紧来注册一个吧。

注册后,为了满足好奇,你可以先尝试着使用 web 界面自行下单。不过,事实上,未解锁的情况下是无法正常下单的,因此这样尝试并没啥太大意义。

所以第二步,我们需要来配置 API Key。User Settings,API Settings,然后点 GENERATE A NEW ACCOUNT API KEY.,记下 Key 和 Secret 这两串字符。因为窗口一旦消失,这两个信息就再也找不到了,需要你重新生成。配置到此结束。接下来,我们来看具体实现。

先强调一点,在量化系统开发的时候,你的心中一定要有清晰的数据流图。下单逻辑是一个很简单的 RESTful 的过程,和你在网页操作的一样,构造你的请求订单、加密请求,然后 post 给 gemini 交易所即可。

不过,因为涉及到的知识点较多,带你一步一步从零来写代码显然不太现实。所以,我们采用“先读懂后记忆并使用”的方法来学,下面即为这段代码:

import requestsimport jsonimport base64import hmacimport hashlibimport datetimeimport timebase_url = "https://api.sandbox.gemini.com"endpoint = "/v1/order/new"url = base_url + endpointgemini_api_key = "account-zmidXEwP72yLSSybXVvn"gemini_api_secret = "375b97HfE7E4tL8YaP3SJ239Pky9".encode()t = datetime.datetime.now()payload_nOnce= str(int(time.mktime(t.timetuple())*1000))payload = { "request": "/v1/order/new", "nonce": payload_nonce, "symbol": "btcusd", "amount": "5", "price": "3633.00", "side": "buy", "type": "exchange limit", "options": ["maker-or-cancel"]}encoded_payload = json.dumps(payload).encode()b64 = base64.b64encode(encoded_payload)signature = hmac.new(gemini_api_secret, b64, hashlib.sha384).hexdigest()request_headers = { 'Content-Type': "text/plain", 'Content-Length': "0", 'X-GEMINI-APIKEY': gemini_api_key, 'X-GEMINI-PAYLOAD': b64, 'X-GEMINI-SIGNATURE': signature, 'Cache-Control': "no-cache"}respOnse= requests.post(url, data=None, headers=request_headers)new_order = response.json()print(new_order)########## 输出 ##########{'order_id': '239088767', 'id': '239088767', 'symbol': 'btcusd', 'exchange': 'gemini', 'avg_execution_price': '0.00', 'side': 'buy', 'type': 'exchange limit', 'timestamp': '1561956976', 'timestampms': 1561956976535, 'is_live': True, 'is_cancelled': False, 'is_hidden': False, 'was_forced': False, 'executed_amount': '0', 'remaining_amount': '5', 'options': ['maker-or-cancel'], 'price': '3633.00', 'original_amount': '5'}

RESTful 的 POST 请求,通过 requests.post 来实现。post 接受三个参数,url、data 和 headers。这里的 url 等价于 https://api.sandbox.gemini.com/v1/order/new . ,但是在代码中分两部分写。第一部分是交易所 API 地址;第二部分,以斜杠开头,用来表示统一的 API endpoint。我们也可以在其他交易所的 API 中看到类似的写法,两者连接在一起,就构成了最终的 url。

而接下来大段命令的目的,是为了构造 request_headers。

另外,请注意 nonce,这是个很关键并且在网络通信中很常见的字段。因为网络通信是不可靠的,一个信息包有可能会丢失,也有可能重复发送,在金融操作中,这两者都会造成很严重的后果。丢包的话,我们重新发送就行了;但是重复的包,我们需要去重。虽然 TCP 在某种程度上可以保证,但为了在应用层面进一步减少错误发生的机会,Gemini 交易所要求所有的通信 payload 必须带有 nonce。

nonce 是个单调递增的整数。当某个后来的请求的 nonce,比上一个成功收到的请求的 nouce 小或者相等的时候,Gemini 便会拒绝这次请求。这样一来,重复的包就不会被执行两次了。另一方面,这样也可以在一定程度上防止中间人攻击:

一则是因为 nonce 的加入,使得加密后的同样订单的加密文本完全混乱;
二则是因为,这会使得中间人无法通过“发送同样的包来构造重复订单“进行攻击。
接下来的代码就很清晰了。我们要对 payload 进行 base64 和 sha384 算法非对称加密,其中 gemini_api_secret 为私钥;而交易所存储着公钥,可以对你发送的请求进行解密。最后,代码再将加密后的请求封装到 request_headers 中,发送给交易所,并收到 response,这个订单就完成了。


推荐阅读
  • 为了解决不同服务器间共享图片的需求,我们最初考虑建立一个FTP图片服务器。然而,考虑到项目是一个简单的CMS系统,为了简化流程,团队决定探索七牛云存储的解决方案。本文将详细介绍使用七牛云存储的过程和心得。 ... [详细]
  • 黑马头条项目:Vue 文章详情模块与交互功能实现
    本文详细介绍了如何在黑马头条项目中配置文章详情模块的路由、获取和展示文章详情数据,以及实现关注、点赞、不喜欢和评论功能。通过这些步骤,您可以全面了解如何开发一个完整的前端文章详情页面。 ... [详细]
  • 本文介绍如何使用 Angular 6 的 HttpClient 模块来获取 HTTP 响应头,包括代码示例和常见问题的解决方案。 ... [详细]
  • 本文探讨了在 SQL Server 中使用 JDBC 插入数据时遇到的问题。通过详细分析代码和数据库配置,提供了解决方案并解释了潜在的原因。 ... [详细]
  • 当unique验证运到图片上传时
    2019独角兽企业重金招聘Python工程师标准model:public$imageFile;publicfunctionrules(){return[[[na ... [详细]
  • 2017-2018年度《网络编程与安全》第五次实验报告
    本报告详细记录了2017-2018学年《网络编程与安全》课程第五次实验的具体内容、实验过程、遇到的问题及解决方案。 ... [详细]
  • 基于机器学习的人脸识别系统实现
    本文介绍了一种使用机器学习技术构建人脸识别系统的实践案例。通过结合Python编程语言和深度学习框架,详细展示了从数据预处理到模型训练的完整流程,并提供了代码示例。 ... [详细]
  • 本文将详细介绍多个流行的 Android 视频处理开源框架,包括 ijkplayer、FFmpeg、Vitamio、ExoPlayer 等。每个框架都有其独特的优势和应用场景,帮助开发者更高效地进行视频处理和播放。 ... [详细]
  • 本文探讨了为何相同的HTTP请求在两台不同操作系统(Windows与Ubuntu)的机器上会分别返回200 OK和429 Too Many Requests的状态码。我们将分析代码、环境差异及可能的影响因素。 ... [详细]
  • SDN网络拓扑发现机制解析
    本文深入探讨了SDN(软件定义网络)中拓扑发现的原理与实现方法,重点介绍了LLDP协议在OpenFlow环境中的应用,并讨论了非OpenFlow设备存在时的链路发现策略。 ... [详细]
  • 深入解析RDMA中的队列对(Queue Pair)
    本文将详细探讨RDMA架构中的关键组件——队列对(Queue Pair,简称QP),包括其基本概念、硬件与软件实现、QPC的作用、QPN的分配机制以及用户接口和状态机。通过这些内容,读者可以更全面地理解QP在RDMA通信中的重要性和工作原理。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • 本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ... [详细]
  • 本文详细介绍如何使用 Python 集成微信支付的三种主要方式:Native 支付、APP 支付和 JSAPI 支付。每种方式适用于不同的应用场景,如 PC 网站、移动端应用和公众号内支付等。 ... [详细]
  • 本文详细介绍了虚拟专用网(Virtual Private Network, VPN)的概念及其通过公共网络(如互联网)构建临时且安全连接的技术特点。文章探讨了不同类型的隧道协议,包括第二层和第三层隧道协议,并提供了针对IPSec、GRE以及MPLS VPN的具体配置指导。 ... [详细]
author-avatar
狂风
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有