分类
技術分析 是什麼

编写脚本并整合交易策略

先给出模仿的论文策略图:

量化交易入门

回溯测试的目的是提供证据,证明通过上述过程确定的策略在应用于历史数据和样本外数据时都是有利可图的。 这预示着战略将如何在“现实世界”中发挥作用。 但是,由于各种原因,回测不是成功的保证。 它可能是量化交易中最微妙的领域,因为它带来了许多偏差,必须尽可能仔细考虑和消除。 我们将讨论常见的偏差类型,包括前瞻偏差,生存偏差和优化偏差(也称为“数据窥探”偏差)。 回溯测试中的其他重要领域包括历史数据的可用性和清洁度,考虑实际交易成本以及确定鲁棒的回测平台。 我们将在下面的执行系统部分进一步讨论交易成本

一旦确定了战略,就必须获得历史数据,通过这些数据进行测试,或许可以进行改进。 所有资产类别中都有大量数据供应商。 它们的成本通常随着数据的质量,深度和及时性而变化。 开始量化交易者的传统起点(至少在零售层面)是使用雅虎财经的免费数据集。 我不会在这里过多地提供提供者,而是在处理历史数据集时我想集中讨论一般问题。

  • 准确性与数据的整体质量有关 - 是否包含任何错误。 错误有时很容易识别,例如使用尖峰滤波器,它会在时间序列数据中挑出不正确的“尖峰”并对其进行校正。 在其他时候,他们很难被发现。 通常需要有两个或更多提供者,然后相互检查他们的所有数据
  • 生存偏差通常是免费或廉价数据集的“特征”。 具有生存偏差的数据集意味着它不包含不再交易的资产。 就股票而言,这意味着已退市/破产股票。 这种偏差意味着在这样的数据集上测试的任何股票交易策略都可能比在“现实世界”中表现更好,因为已经预先选择了历史“赢家”
  • 公司行为包括公司执行的“后勤”活动,这些活动通常会导致原始价格的阶跃性变化,不应包括在价格回报的计算中。 股息和股票分割的调整是常见的罪魁祸首。 必须在这些动作中的每一个上执行称为后调整的过程。 必须非常小心,不要将股票分割与真正的回报调整混淆。 很多交易员都被公司行动所困扰!

为了执行回测程序,必须使用软件平台。 您可以选择专用的backtest软件,例如Tradestation,数字平台(如Excel或MATLAB),或者使用Python或C ++等编程语言进行完全自定义实现。 我不会过多地关注Tradestation(或类似的),Excel或MATLAB,因为我相信创建一个完整的内部技术堆栈(由于下面列出的原因)。 这样做的好处之一是,即使使用非常先进的统计策略,也可以紧密集成回测软件和执行系统。 特别是对于HFT策略,使用自定义实现至关重要。

执行系统是由策略生成的交易列表由代理发送和执行的手段。 尽管贸易生成可以是半自动化甚至是全自动化的,但执行机制可以是手动,半手动(即“一键”)或完全自动化。 对于LFT策略,手动和半手动技术很常见。 对于HFT策略,有必要创建一个完全自动化的执行机制,该机制通常与交易生成器紧密耦合(由于策略和技术的相互依赖)。

有很多方法可以与经纪人联系。它们的范围从通过电话呼叫您的经纪人到全自动高性能应用程序编程接口(API)。理想情况下,您希望尽可能自动执行交易。这使您可以专注于进一步的研究,并允许您运行多种策略甚至更高频率的策略(事实上,如果没有自动执行,HFT基本上是不可能的)。上面概述的常用回溯测试软件,如MATLAB,Excel和Tradestation,适用于频率较低,策略较简单的软件。然而,有必要构建一个用高性能语言(如C ++)编写的内部执行系统,以便进行任何真正的HFT。作为一则轶事,在我曾经受雇的基金中,我们有一个10分钟的“编写脚本并整合交易策略 交易循环”,我们每10分钟下载一次新的市场数据,然后在同一时间段内根据该信息执行交易。这是使用优化的Python脚本。对于接近分钟级或者秒级频率数据的任何事情,我相信C / C ++会更理想

在较大的基金中,优化执行通常不是量化交易者的领域。 编写脚本并整合交易策略 然而,在较小的商店或高频交易公司中,交易员是执行者,因此通常需要更广泛的技能组合。 如果您希望受雇于基金,请记住这一点。 您的编程技能与统计学和计量经济学人才一样重要,甚至更重要!

落在执行旗下的另一个主要问题是交易成本最小化。 交易成本通常有三个组成部分:佣金(或税),即经纪人,交易所和证券交易委员会(或类似的政府监管机构)收取的费用; 滑点,这是您打算填写的订单与实际填写的订单之间的差异; 价差,即被交易证券的买入/卖出价格之间的差价。 注意,差价不是恒定的,并且取决于市场中当前的流动性(即买/卖订单的可用性)

执行系统的最后一个主要问题是策略性能与回测性能的分歧。 这可能由于多种原因而发生。 在考虑回测时,我们已经深入讨论了前瞻偏差和优化偏差。 但是,某些策略无法在部署之前轻松测试这些偏差。 这主要发生在HFT中。 执行系统中可能存在错误以及交易策略本身没有出现在回溯测试中但是确实会出现在实际交易中。 在部署策略之后,市场可能会受到制度变更的影响。 新的监管环境,不断变化的投资者情绪和宏观经济现象都会导致市场行为的分歧,从而导致策略的盈利能力出现分歧。

量化交易难题的最后一部分是风险管理过程。 “风险”包括我们讨论过的所有先前的偏见。 它包括技术风险,例如位于相同交换机的服务器突然发生硬盘故障。 它包括经纪风险,例如经纪人破产(不像听起来那么疯狂,考虑到最近MF Global的恐慌!)。 简而言之,它涵盖了几乎所有可能干扰交易实施的内容,其中有许多来源。 全书都致力于量化策略的风险管理,所以我不会试图在这里阐明所有可能的风险来源。

风险管理还包括所谓的最优资本配置,这是投资组合理论的一个分支。 这是将资本分配给一系列不同策略以及这些策略中的交易的手段。 这是一个复杂的领域,依赖于一些非平凡的数学。 最佳资本分配和策略杠杆相关的行业标准称为凯利标准。 编写脚本并整合交易策略 由于这是一篇介绍性文章,我将不再详述其计算方法。 凯利标准对回报的统计性质做出了一些假设,这在金融市场中并不常见,因此交易者在实施时往往保守。

风险管理的另一个关键组成部分是处理自己的心理状况。 有许多认知偏见可以渗透到交易中。 虽然如果策略是单独的,那么算法交易的问题就少了! 一个常见的偏差是损失厌恶( loss aversion ),即失败的位置因为需要意识亏损的痛苦而没有关闭。 同样,利润也可能过早,因为担心失去已经获得的利润可能太大了。 另一种常见偏见称为新近偏差。 当交易者过分强调近期事件而不是长期事件时,这表明了这一点。 当然,还有一对经典的情绪偏见 - 恐惧和贪婪。 这些通常会导致杠杆率过低或过度杠杆化,这可能导致爆炸(即账户资产变为零或更差!)或利润减少

可以看出,量化交易是一个虽然非常有趣,但极其复杂的量化金融领域。 我在这篇文章中仅仅涉及了这个主题的表面,它已经变得相当长了! 那些我只给了一两句话的问题,都已经有一本书或者一篇论文去讨论。 因此,在申请量化基金交易工作之前,有必要进行大量的基础研究。 至少你需要大量的统计学和计量经济学背景,并且有很多实施经验,通过MATLAB,Python或R等编程语言。对于更高频率的更复杂的策略,你的技能很可能 包括Linux内核修改,C / C ++,汇编编程和网络延迟优化

如果您有兴趣尝试创建自己的算法交易策略,我的第一个建议是擅长编程。 我的偏好是尽可能多地构建数据抓取器,策略回溯测试器和执行系统。 如果你自己的资金在线上,你知道你已经完全测试了你的系统并意识到它的陷阱和特殊问题,你晚上睡不好吗? 将此外包给供应商,虽然可能在短期内节省时间,从长远来看代价可能非常昂贵

编写脚本并整合交易策略

python简单的基于做市商的股票高频交易策略

先给出模仿的论文策略图:

python简单的基于做市商的股票高频交易策略

#Firstly, I load the first day's data from table BHP_data,
#then create two lists for storing the mid price and time,
#and then use for loop to read each events imformation, and store the mid price and time data into list.
#afterwards, plot the first day data and time in a figure.

import mysql.connector
import pyodbc

connection = mysql.connector.connect(user= 'root', password = '51jingtI', host = '127.0.0.1', database = 'HF2')
cursor = connection.cursor()
cursor.execute("select * from BHP_data where date='2007-07-02'")
events_data = cursor.fetchall()

#create two lists for storing the mid price and time,
money = 100
mid_price_list 编写脚本并整合交易策略 = []
best_ask_price_list = []
best_bid_price_list = []

time_list = []
book = OrderBook()
book_list_bid = []
book_list_ask = []
profit_list = []

for data in events_data:
S_price = float(book.编写脚本并整合交易策略 best_ask_price())+0.001
S_PM_price = float(book.best_ask_price())-0.01
B_PM_price = float(book.best_bid_price())+0.01
B_price = float(book.best_bid_price())-0.001

#instrument, date, time, record_type, price, volume,bid_id, ask_id, direction, sameoffset, oppoffset, midoffset, timestamp):

plt.figure(figsize=(20,8))
plt.xlabel('volume')
plt.ylabel('Mid price')
plt.title('Mid price of BHP')
plt.plot(mid_price_list)
plt.show()

python多进程--交互-多极客编程

1.管道使用 ''' 管道Pipe ''' from multiprocessing import 编写脚本并整合交易策略 Process,Pipe def f(conn): conn.send('child message')#给主进程发送消息 conn.close() if __name__=='__main__': parent_conn,child_conn=Pipe() p=P

python简介及安装-多极客编程

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。● Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。● Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写

python处理下数据小脚本-多极客编程

python处理下数据小脚本 # -*- coding:UTF-8 -*- import os def wenjchuli(file_path): with open(file_path) as f, open(file_path+".bak", 'w') as f2: for line in f: if("Location" in line):

Python从零搭建Conf_Web配置管理平台-多极客编程

作者:Eagle某船舶行业科技公司,运维工程师,51Reboot学员。通过在51Reboot学习,由运维工程师转至运维开发工程师。完成公司自动化平台的构建,对运维开发有了自己的理解,空闲时间写了这么一个小的项目来和大家分享一下。环境CentOS 6/7 x64Python:2 .7.6Etcd: 3.2.18Confd:0 .16.0Nginx: 1.12.编写脚本并整合交易策略 1效果演示一,拓扑图:二、涉及软件ETD

使用pip遇到错误ImportError: No module named packaging.ve-多极客编程

由于需要用到pip,所以在Ubuntu上安装了一个,由于Python是2.7版本的,所以装的并不是pip3。 附pip安装命令: sudo apt-get install python-pip本来用得好好的,在执行一次之后突然报错:ImportError: No module named packaging.version之后任何和pip有关的操作都报上述错误,很迷,就连查看pip --versi

python 数据接口示例-多极客编程

1.示例一 1.1场景CMDB系统中大量应用实例更具应用实例登陆对应机器进行操作应用程序 1.2 接口数据结构格式如下: < "code": 0, "data": [< "appId": "AC15F42500000005E0AEADEB2998ED62", "createTime": "2020-03-05T15:22:32+08:00", "departmentId": 1086, "en

编写脚本并整合交易策略

BC Trader由世界上最长的比特币挖矿公司之一的Bitclub运营。BC Trader bot利用AI根据每个交易对的个人交易策略和风险承受能力执行微交易。它首先集成了8家交易平台:Binance,bitFlyer,Bitfinex,Bittrex,Coinbase Pro,HitBTC,Korbit和Kraken。一旦用户通过API连接到交易所,他们就可以根据自己的定制策略设置使用该帐户,并将资金保留在他们自己的交易平台账户中以确保资金安全。

ii. 交易者套餐1,000美元:提供多达7种交易对选项,可在2个交易平台进行交易,最高限额为 5,000美元;

iii. 精英套餐2,000美元:可以在5个交易平台交易多达15个交易对,最高限额为 15,000美元;

iv. 创始者套餐3,500美元:每天最高限额100,000美元,无限交易对,可在BC Trader支持的所有交易平台上交易。

Huobi目前是Cryptohoppe的高级合作伙伴,为交易平台用户每笔交易10%的折扣。 它还适用于其他八个交易平台,包括Poloniex,Coinbase Pro,Bittrex,KuCoin等,计划中未来会与HitBTC,Cobinhood,CEX.IO,Bitstamp和bitFlyer集成。

Basic套餐为0.编写脚本并整合交易策略 0032BTC /月,允许1000美元的交易限制,拥有1个实时交易机器人,电子邮件警报和回测功能;Regular套餐为0.0045 BTC /月,提供3个交易机器人;Pro套餐为0.0084 BTC /月,提供5个机器人,VIP套餐为0.0159 BTC /月,并提供10个实时交易机器人;Premium套餐为0.0396 BTC /月,提供25个实时交易机器人。后两者具有无限制的交易账户,可同时访问多种交易工具,电子邮件和短信提醒优先支持。

根据他们的网站显示,该软件目前被超过6000个用户24/7使用。主要运行自动执行交易策略,如Ichimoku,Ping-Pong,TSSL,Bollinger Bands,Gain,Step Gain,PingPong,1000Trades和Supergun。作为交易者,还可以使用EMA Love,Trend Watcher,Candlesticks和BB's。

通过追踪止损,止损限价策略或TSSL,用户/交易者能够定义他们的入场点或卖点。例如Ichimoku使用5条线作为交易指标,分别显示价格方向,趋势势头,阻力位和其他交易信号。使用Ping Pong,GunBot的交易员可以根据他们愿意承担的目标利润或损失来设定买入和卖出价格点。机器人能够根据Ping Pong策略执行用户设置的买入和卖出价格点,这点也是目前GunBot最受欢迎的策略。Bollinger Bands则主要采用三项指标,分别根据特定的周,月或区间跟踪市场价格,以观察在特定时间范围内的波动性。

通过一次性付款便可获得该软件的终身使用许可。入门版售价0.04 BTC,配备GunBot标准精简版,仅支持3种策略。标准版售价0.1 BTC,Pro售价 0.15,Ultimate 售价0.25 BTC。

此外,HaasBot允许交易者连接到Teleghram社交账户上查看数据的实时更新,并获取通知和报告。作为交易者,您可以访问50多个可自定义的技术指标以设计交易策略,目前适用于Linux,Mac OSX和Windows 7的桌面软件。

该软件预先构建了默认的机器人类型,以允许交易者快速轻松地开始交易。有一些适合初学者的机器人可随时订购,例如:指数机器人,Flash Crash机器人,交易平台套利机器人,做市机器人,Ping Pong Bot等。

例如,Flash Crash Bot在波动的市场中通过设置高于和/或低于指定基准价格的预订单以便以这些指定价格买入或卖出加密资产。当买入订单以低于基本价格的预定义价格点放置时,基本价格下移并且卖出放置在旧基准价格上的订单。当下达卖单时,基本价格上涨并且买入放置在旧基准价格上的订单。

编写脚本并整合交易策略

description

description

  • 想要连接交易接口?写好配置dict,调用engine.connect_gateway开始连接,所有初始化日志都会显示在单元格下方输出区域
  • 想要获取最新行情?调用engine.subscribe订阅行情更新,后续随时通过engine.get_tick获取的Tick数据,都保证是最新推送的结果,本地瞬间返回(和其他数据工具每次查询服务器,然后等待服务端数据返回的阻塞模式完全不同)
  • 想要交易?buy/sell/short/cover,传入vt_symbol、price、volume,直接执行委托(实盘账户请想清楚了再回车,不要乱点. )
  • 想要获取K线数据?配置好RQData账号后,调用get_bars即可任意获取想要的股票/期货的K线时间序列数据(RQData试用期延长到1个月了!申请链接戳这里)
  • 想要查询所有可交易合约?调用engine.get_all_contracts函数,可选参数use_df为True时将会以pandas.DataFrame数据结构返回,在Jupyter中更加便于分析
  • 想要查询账户的状态?engine.get_all_accounts/get_all_positions/get_all_active_orders任意查询资金、委托、持仓情况
  • 想要记录当前的运行信息?engine.write_log打印日志,engine.send_email发送邮件到指定邮箱(结合QQ邮箱就能实现微信实时通知)

OK~ 经过一段时间研究后,你已经精通了如何通过engine进行交易,尽管Jupyter用来做学习研究非常方便,但直接拿来跑实盘好像就有点安全隐患了(想象下你的篮子委托函数单元格不小心Shift-Enter. ),那么你可以选择使用脚本策略执行引擎,在一个完全独立的线程中运行你的脚本:

description

RPC服务

RPC,全称Remote Procedure 编写脚本并整合交易策略 Call(远程过程调用),主要用于实现跨进程或者跨网络的服务功能调用,具体其中的各项概念细节网上可以找到非常丰富的资料,这里就不展开了。

尽管传闻Python 3.8(或者3.9)计划将全局锁GIL由进程唯一改为解释器唯一,从而实现单Python进程能够真正利用多核CPU的全部性能,但截止目前2019年7月,Python 3.7依旧最多只能利用到CPU的单核性能。

  1. 协程,本质是用户态的逻辑流切换,对于IO密集型任务有用,但同样无法绕开GIL
  2. 多线程,由于GIL的存在,任意时间点永远只能有一个线程在运行,无法利用CPU多核
  3. 多进程,每个进程内有自己的GIL,得以完全利用CPU多核,但进程间的数据无法直接共享

作为互联网分布式架构的底层基础框架之一,RPC有着大量成熟的开源工具:gRPC、JSON-RPC、Thrift等等,这些工具的应用场景各有区别。对于量化交易程序中的一条腿,由客户端发起的主动函数调用,都能很方便的实现支持。但对于另一条腿,由服务端发起的被动事件推送,要么是无法实现,要么就得用双向RPC、Stream流返回等等非常复杂的办法。

除了支持Client端调用Server端注册好的函数功能外,Server端也能广播(publish)推送事件数据到客户端。在Windows上通过常规的TCP Socket来实现通讯,在Linux上则进一步支持性能更高的Local Socket(数据不过网卡,大约是TCP性能10倍+)。