0%

magic functions:

  1. %time: 记录script运行时间
  2. %timeit: 循环n次,记录平均执行时间
  3. %run & %prun: 分析script的执行效率
  4. %lprun: 分析一条语句在function中执行效率
  5. %mprun: 查看script脚本使用内存量
  6. %memit: 循环n次,记录平均内存使用量

安装

pip install jupyter_contrib_nbextensions
pip install line-profiler
pip install psutil
pip install memory_profiler

jupyter load 插件

%load_ext line_profiler
%load_ext memory_profiler

Time Profiling

time & timeit

In [7]: %time {1 for i in xrange(10*1000000)}
CPU times: user 0.72 s, sys: 0.16 s, total: 0.88 s
Wall time: 0.75 s

In [8]: %timeit 10*1000000
10000000 loops, best of 3: 38.2 ns per loop

In [9]: %timeit -n 1000 10*1000000
1000 loops, best of 3: 67 ns per loop

%prun

In [10]: from time import sleep

In [11]: def foo(): sleep(1)

In [12]: def bar(): sleep(2)

In [13]: def baz(): foo(), bar()

In [14]: %prun baz()
7 function calls in 3.001 seconds

Ordered by: internal time

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     2    3.001    1.500    3.001    1.500 {time.sleep}
     1    0.000    0.000    3.001    3.001 <ipython-input-17-c32ce4852c7d>:1(baz)
     1    0.000    0.000    2.000    2.000 <ipython-input-11-2689ca7390dc>:1(bar)
     1    0.000    0.000    1.001    1.001 <ipython-input-10-e11af1cc2c91>:1(foo)
     1    0.000    0.000    3.001    3.001 <string>:1(<module>)
     1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

Memory Profiling

%mprun

In [17]: %mprun -f foo foo(100000)
Filename: foo.py

Line #    Mem usage    Increment   Line Contents
================================================
     1    20.590 MB     0.000 MB   def foo(n):
     2    20.590 MB     0.000 MB       phrase = 'repeat me'
     3    21.445 MB     0.855 MB       pmul = phrase * n
     4    25.020 MB     3.574 MB       pjoi = ''.join([phrase for x in xrange(n)])
     5    25.020 MB     0.000 MB       pinc = ''
     6    43.594 MB    18.574 MB       for x in xrange(n):
     7    43.594 MB     0.000 MB           pinc += phrase
     8    41.102 MB    -2.492 MB       del pmul, pjoi, pinc

在jupyter中运行报如下错误:

ERROR: Could not find file <ipython-input-10-6aab78230286>
NOTE: %mprun can only be used on functions defined in physical files, and not in the IPython environment.

%memit

In [18]: %memit -r 3 [x for x in xrange(1000000)]
maximum of 3: 75.320312 MB per loop

参考

http://jupyter-contrib-nbextensions.readthedocs.io/en/latest/install.html#install-the-python-package

http://mortada.net/easily-profile-python-code-in-jupyter.html

https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/

http://pynash.org/2013/03/06/timing-and-profiling/

http://nbviewer.jupyter.org/gist/jiffyclub/3062428

http://www.xavierdupre.fr/app/mlstatpy/helpsphinx/notebooks/completion_profiling.html

https://pypi.python.org/pypi/memory_profiler/0.41

https://github.com/rkern/line_profiler

Python量化交易实战
欢迎您扫码订阅我的微信公众号: pyquant

制作启动盘

  • 下载 RASPBIAN STRETCH WITH DESKTOP,地址如下

https://www.raspberrypi.org/downloads/raspbian/

  • 使用SDFormatter 格式化sd卡
  • 使用win32diskimager将 .img文件写入sd卡

安装kodi

参考如下步骤

http://kodi.wiki/view/HOW-TO:Install_Kodi_on_Raspberry_Pi

mac 添加nfs服务

在 /etc/exports 文件中添加如下内容,IP地址为树莓派ip地址

/Users/eryk/Documents/movie 192.168.1.10 (rw)

然后启动nfs服务,树莓派可以从mac目录读取视频文件

sudo nfsd enable
sudo nfsd update
sudo nfsd status

树莓派开机mount nfs目录

使用如下命令mount nfs 目录

sudo mount 192.168.1.4:/Users/eryk/Documents/movie /home/pi/movie

如果想在树莓派开机启动自动mount nfs目录,需要在/etc/fstab中添加如下设置

192.168.1.4:/Users/eryk/Documents/movie /home/pi/movie nfs defaults 0 0

kodi设置中文

  1. system–>settings–>Interface–>skin,把 fonts 改成 Arial based;
  2. system–>settings–>Interface–>Regional,改Language改成Chinese(Simple)
Python量化交易实战
欢迎您扫码订阅我的微信公众号: pyquant

转自:http://www.dataivy.cn/blog/data_etl/?wt_tb=1|1511709850969

当数据质量校验完成后,针对有问题的数据要进行的是数据清洗和转换,另外还包括对正常数据的转换。数据清洗的主要作用包括:纠正错误、删除重复项、统一规格、修正逻辑、转换构造和数据压缩。

1. 纠正错误

错误数据是数据源环境中经常出现的一类问题。数据错误的形式包括:

  • 数据值错误:数据直接是错误的,例如超过固定域集、超过极值、拼写错误、属性错误、源错误等。
  • 数据类型错误:数据的存储类型不符合实际情况,如日期类型的以数值型存储,时间戳存为字符串等。
  • 数据编码错误:数据存储的编码错误,例如将UTF-8写成UTF-80。
  • 数据格式错误:数据的存储格式问题,如半角全角字符、中英文字符等。
  • 数据异常错误:如数值数据输成全角数字字符、字符串数据后面有一个回车操作、日期越界、数据前后有不可见字符等。
  • 依赖冲突:某些数据字段间存储依赖关系,例如城市与邮政编码应该满足对应关系,但可能存在二者不匹配的问题。
  • 多值错误:大多数情况下,每个字段存储的是单个值,但也存在一个字段存储多个值的情况,其中有些可能是不符合实际业务规则的。
    这类错误产生的原因是业务系统不够健全,尤其是在数据产生之初的校验和入库规则不规范,导致在接收输入后没有进行判断或无法检测而直接写入后台数据库造成的。

2. 删除重复项

由于各种原因,数据中可能存在重复记录或重复字段(列),对于这些重复项目(行和列)需要做去重处理。

对于重复项的判断,基本思想是“排序和合并”,先将数据库中的记录按一定规则排序,然后通过比较邻近记录是否相似来检测记录是否重复。这里面其实包含了两个操作,一是排序,二是计算相似度。

常见的排序算法:

  • 插入排序
  • 冒泡排序
  • 选择排序
  • 快速排序
  • 堆排序
  • 归并排序
  • 基数排序
  • 希尔排序

常见的判断相似度的算法:

  • 基本的字段匹配算法
  • 标准化欧氏距离
  • 汉明距离
  • 夹角余弦
  • 杰卡德距离
  • 马氏距离
  • 曼哈顿距离
  • 闵可夫斯基距离
  • 欧氏距离
  • 切比雪夫距离
  • 相关系数
  • 信息熵

对于重复的数据项,尽量需要经过业务确认并进行整理提取出规则。在清洗转换阶段,对于重复数据项尽量不要轻易做出删除决策,尤其不能将重要的或有业务意义的数据过滤掉,校验和重复确认的工作必不可少。

3. 统一规格

由于数据源系统分散在各个业务线,不同业务线对于数据的要求、理解和规格不同,导致对于同一数据对象描述规格完全不同,因此在清洗过程中需要统一数据规格并将一致性的内容抽象出来。

数据字段的规则大致可以从以下几个方面进行统一:

  • 名称,对于同一个数据对象的名称首先应该是一致的。例如对于访问深度这个字段,可能的名称包括访问深度、人均页面浏览量、每访问PV数。
  • 类型:同一个数据对象的数据类型必须统一,且表示方法一致。例如普通日期的类型和时间戳的类型需要区分。
  • 单位:对于数值型字段,单位需要统一。例如万、十万、百万等单位度量。
  • 格式:在同一类型下,不同的表示格式也会产生差异。例如日期中的长日期、短日期、英文、中文、年月日制式和缩写等格式均不一样。
  • 长度:同一字段长度必须一致。
  • 小数位数:小数位数对于数值型字段尤为重要,尤其当数据量累积较大时会因为位数的不同而产生巨大偏差。
  • 计数方法:对于数值型等的千分位、科学计数法等的计数方法的统一。
  • 缩写规则:对于常用字段的缩写,例如单位、姓名、日期、月份等的统一。例如将周一表示为Monday还是Mon还是M。
  • 值域:对于离散型和连续型的变量都应该根据业务规则进行统一的值域约束。
  • 约束:是否允许控制、唯一性、外键约束、主键等的统一。

统一数据规格的过程中,需要重要的一点是确认不同业务线带来数据的规格一致性,这需要业务部门的参与、讨论和确认,以明确不同体系数据的统一标准。

4. 修正逻辑

在多数据源的环境下,很可能存在数据异常或冲突的问题。

例如不同的数据源对于订单数量的数据统计冲突问题,结果出现矛盾的记录。通常,这是由于不同系统对于同一个数据对象的统计逻辑不同而造成的,逻辑的不一致会直接导致结果的差异性;除了统计逻辑和口径的差异,也有因为源数据系统基于性能的考虑,放弃了外键约束,从而导致数据不一致的结果;另外,也存在极小的数据丢失的可能性,通常由于并发量和负载过高、服务器延迟甚至宕机等原因导致的数据采集的差异。

对于这类的数据矛盾,首先需要明确各个源系统的逻辑、条件、口径,然后定义一套符合各个系统采集逻辑的规则,并对异常源系统的采集逻辑进行修正。

某些情况下,也可能存在业务规则的错误导致的数据采集的错误,此时需要从源头纠正错误的采集逻辑,然后再进行数据清洗和转换。

5. 转换构造

数据变换是数据清理过程的重要步骤,是对数据的一个的标准的处理,几乎所有的数据处理过程都会涉及该步骤。数据转换常见的内容包括:数据类型转换、数据语义转换、数据值域转换、数据粒度转换、表/数据拆分、行列转换、数据离散化、数据离散化、提炼新字段、属性构造、数据压缩等。

数据类型转换

当数据来自不同数据源时,不同类型的数据源数据类型不兼容可能导致系统报错。这时需要将不同数据源的数据类型进行统一转换为一种兼容的数据类型。

数据语义转换

传统数据仓库中基于第三范式可能存在维度表、事实表等,此时在事实表中会有很多字段需要结合维度表才能进行语义上的解析。例如,假如字段M的业务含义是浏览器类型,其取值分为是1/2/3/4/5,这5个数字如果不加转换则很难理解为业务语言,更无法在后期被解读和应用。

数据粒度转换

业务系统一般存储的是明细数据,有些系统甚至存储的是基于时间戳的数据,而数据仓库中的数据是用来分析的,不需要非常明细的数据,一般情况下,会将业务系统数据按照数据仓库中不同的粒度需求进行聚合。

表/数据拆分

某些字段可能存储多中数据信息,例如时间戳中包含了年、月、日、小时、分、秒等信息,有些规则中需要将其中部分或者全部时间属性进行拆分,以此来满足多粒度下的数据聚合需求。同样的,一个表内的多个字段,也可能存在表字段拆分的情况。

行列转换

某些情况下,表内的行列数据会需要进行转换(又称为转置),例如协同过滤的计算之前,user和term之间的关系即互为行列并且可相互转换,可用来满足基于项目和基于用户的相似度推荐计算。

数据离散化

将连续取值的属性离散化成若干区间,来帮助消减一个连续属性的取值个数。例如对于收入这个字段,为了便于做统计,根据业务经验可能分为几个不同的区间:0~3000、3001~5000、5001~10000、10001~30000、大于30000,或者在此基础上分别用1、2、3、4、5来表示。

数据标准化

不同字段间由于字段本身的业务含义不同,有些时间需要消除变量之间不同数量级造成的数值之间的悬殊差异。例如将销售额进行离散化处理,以消除不同销售额之间由于量级关系导致的无法进行多列的复合计算。数据标准化过程还可以用来解决个别数值较高的属性对聚类结果的影响。

提炼新字段

很多情况下,需要基于业务规则提取新的字段,这些字段也称为复合字段。这些字段通常都是基于单一字段产生,但需要进行复合运算甚至复杂算法模型才能得到新的指标。

属性构造

有些建模过程中,也会需要根据已有的属性集构造新的属性。例如,几乎所有的机器学习都会讲样本分为训练集、测试集、验证集三类,那么数据集的分类(或者叫分区)就属于需要新构建的属性,用户做机器学习不同阶段的样本使用。

提示 在某些场景中,也存在一些特殊转换方法。例如在机器学习中,有些值是离散型的数据但存在一定意义,例如最高学历这个字段中包含博士、研究生、大学、高中这4个值,某些算法不支持直接对文本进行计算,此时需要将学历这个字段进行转换。常见的方法是将值域集中的每个值拆解为一个字段,每个字段取值为0或1(布尔型或数值型)。这时,就会出现4个新的字段,对于一条记录来看(通常是一个人),其最高学历只能满足一个,例如字段博士为1,那么其余的字段(研究生、大学、高中)则为0。因此这个过程实际上是将1个字段根据值域(4个值的集合)拆解为4个字段。

6. 数据压缩

数据压缩是指在保持原有数据集的完整性和准确性,不丢失有用信息的前提下,按照一定的算法和方式对数据进行重新组织的一种技术方法。

对大规模的数据进行复杂的数据分析与数据计算通常需要耗费大量时间,所以在这之前需要进行数据的约减和压缩,减小数据规模,而且还可能面临交互式的数据挖掘,根据数据挖掘前后对比对数据进行信息反馈。这样在精简数据集上进行数据挖掘显然效率更高,并且挖掘出来的结果与使用原有数据集所获得结果基本相同。

数据压缩的意义不止体现在数据计算过程中,还有利于减少存储空间,提高其传输、存储和处理效率,减少数据的冗余和存储的空间,这对于底层大数据平台具有非常重要的意义。

数据压缩有多种方式可供选择:

  • 数据聚合:将数据聚合后使用,例如如果汇总全部数据,那么基于更粗粒度的数据更加便利。
  • 维度约减:通过相关分析手动消除多余属性,使得参与计算的维度(字段)减少;也可以使用主成分分析、因子分析等进行维度聚合,得到的同样是更少的参与计算的数据维度。
  • 数据块消减:利用聚类或参数模型替代原有数据,这种方式常见于多个模型综合进行机器学习和数据挖掘。
  • 数据压缩:数据压缩包括无损压缩和有损压缩两种类型。数据压缩常用于磁盘文件、视频、音频、图像等。
Python量化交易实战
欢迎您扫码订阅我的微信公众号: pyquant

深圳市价委托的类型有五种,分别为:对手方最优价格、本方最优价格、最优五档即时成交剩余撤销、即时成交剩余撤销(FAK)、全额成交或撤销委托(FOK)。

对手方最优价格委托

对手方最优价格委托指投资者无须指定委托价格,当委托申报指令进入交易主机时,交易主机以当时集中申报簿有效竞价范围内对手方队列的最优价格为其指定价格的委托类型。

  1. “对手方最优价格委托”无需输入指定价格,如果当时交易主机中集中申报簿的对手方队列中存在有效申报,则与当时对手方队列中价格最优的申报成交;“价格最优的申报”是指集中申报簿中买方“买一”队列或卖方“卖一”队列。
  2. 没有完全成交的“对手方最优价格委托”将以限价形式保存在交易主机集中申报簿的本方队列中,其指定价格为委托已成交部分的成交价,也就是委托申报进入交易主机当时对手方队列的最优价格.
  3. 如果当时集中申报簿中对手方队列没有有效对手盘,交易主机直接对“对手方最优价格委托”作撤单处理。

本方最优价格委托

本方最优价格委托是指投资者无须指定委托价格,当委托申报指令进入交易主机时,交易主机以当时集中申报簿有效竞价范围内本方队列最优价格为其指定价格的委托类型。

  1. “本方最优价格委托”无需输入指定价格,如果当时交易主机中集中申报簿的本方队列存在有效申报,则以当时本方队列的最优价格为指定价格以限价形式保存在交易主机的集中申报簿中;
  2. 如果当时集中申报簿本方队列中没有有效申报,交易主机对“本方最优价格委托”作撤销处理。

即时成交剩余撤销委托

即时成交剩余撤销委托是指无需指定委托价格,委托进入交易主机时能立即成交部分即予以撮合,未成交部分立即自动撤销的委托方式,一笔委托可以同对手方数笔不同价格的委托撮合成交。

  1. “即时成交剩余撤销委托”无需指定价格,如果当时交易主机集中申报簿的对手方队列中存在有效申报,则按对手方申报队列顺序以对手方价格为成交价进行逐笔配对;
  2. “即时成交剩余撤销委托”可以与不同价格的对手方委托撮合成交,直至无有效对手盘(即在涨跌幅限制范围内或在最后一笔成交价为基础的有效竞价范围内交易主机中现有的对手方队列中无委托);
  3. 若“即时成交剩余撤销委托”成交后有剩余的委托(包括部分成交、未有成交的情形),交易主机立即对剩余部分作撤单处理。

最优五档即时成交剩余撤销委托

“最优五档即时成交剩余撤销委托”是为了避免市场价格波动过大而对“即时成交剩余撤销委托”的改良。其与“即时成交剩余撤销委托”方式的区别就在于“即时成交剩余撤销委托”可以与对手方数笔不同价格的委托撮合,直至无有效对手盘,而“最优五档即时成交剩余撤销委托”只能与一定范围内的对手方队列成交。

全额成交或撤销委托

全额成交或撤销委托是指无需指定委托价格,委托进入交易主机时能立即全部成交即予以撮合,否则委托全部撤销的委托方式,该委托可以与对手方数笔不同价格的委托撮合成交。

问题

  1. 市价委托可以撤单吗

    根据《深圳证券交易所交易规则》,市价申报主要包括:对手方最优价格申报、本方最优价格申报、最优五档即时成交剩余撤销申报、即时成交剩余撤销申报、全额成交或撤销申报等五种,其中对手方最优价格申报和本方最优价格申报部分成交时,未成交部分可以主动撤单,其余情况主机会自动撤单,而不能主动撤单。

测试结果

  1. 市价委托(深圳对方最优价格)
    • 买入: 按照涨停价下单
    • 卖出: 按照价格0下单
  2. 市价委托(深圳本方最优价格)
    • 买入: 按照买一价下单,按照时间优先原则排列订单
    • 卖出: 按照卖一价下单,按照时间优先原则排列订单
  3. 市价委托(深圳即时成交剩余撤销)
    • 买入: 按照涨停价下单
  4. 市价委托(上海五档即成剩撤 / 深圳五档即成剩撤)
    • 卖出: 按照价格0下单
  5. 市价委托(深圳全额成交或撤销)
    • 买入: 按照涨停价下单,买入量大于5档时还会继续买入
  6. 市价委托(上海五档即成转限价)

参考

深圳证券交易所关于五种市价委托方式的业务说明
http://www.szse.cn/UpFiles/Attach/1045/2005/11/14/1442302347.doc

Python量化交易实战
欢迎您扫码订阅我的微信公众号: pyquant

TradeX 是为从事股票程序化交易的投资者提供一个接口,通过将自己的交易策略编写成计算机代码,实现自动 自动快速读取行情进行分析,以及股票下单、撤单、查询,做到股票的全自动买卖。

优势

  1. 多语言支持: 封装 C++,C#,Python,Delphi,Java,VB
  2. 支持 Level 2 行情(专用账户版,用户需自行购买通达信 Level2 行情账户)包含十档行情、逐笔成交、买卖队列和深圳逐笔委托行情(上交所不对外提供逐笔委托),需开通通达信的 Level 2 金融终端账户
  3. 支持扩展行情: 包含期货、期权、三版、港股数据
  4. 支持股票五档实时行情,实测速度比 TdxhqApi 快 10%~30%;包含各周期 K 线、分时、分笔成交,五档行情,F10 公司信息资料
  5. 社区活跃
  6. 支持市场上绝大部分券商
  7. 接口是 tcp 直连获取行情

劣势:

  1. 所有行情接口均要求客户端主动查询请求行情数据,而非推送行情;每种行情接口各自对应于不同的通讯协议。每种行情接口的都可以建立单连接和批量多连接;如果要快速获取大量股票数据,则可能需要用到批量多连接。
  2. 只支持windows系统,32 位的 Python 2.7 / Python 3.6.x

问题:

  1. 需要自行维护停牌/退市股票列表,否则查询股票时服务器会自动返回600839的行情信息
  2. 分笔数据间隔3s,建议更小的时间间隔获取数据,否则最多可能出现3s延迟
  3. 不支持使用同一 Level 2 行情账户同时从多点连接,如果的确需要,您需要购买多个 Level 2 账户。 普通的五档实时行情、扩展行情没有任何 IP 限制,可以多点登录连接
Python量化交易实战
欢迎您扫码订阅我的微信公众号: pyquant

手续费

包括期货交易所和期货公司收取,期货公司手续费是交易所基础上的1.1 ~ 1.5 倍

书籍推荐

  1. 道:斯坦利·克罗的《期货交易策略》和江恩的《如何从商品期货交易中获利》
  2. 术:中国期货业协会编的《铁矿石期货》,我们必须要了解铁矿石供给来源、中国铁矿石的进口量、铁矿石需求情况、铁矿石现货有哪些关键指标

关于大周期和小周期趋势问题

把握好小周期,积少成多

期货定义

期货合约指由期货交易所统一制订的、规定在将来某一特定的时间和地点交割一定数量和质量实物商品或金融商品的标准化合约。

期货交易所

  1. 商品期货交易所:大连商品期货交易所、郑州商品期货交易所、上海期货交易所
  2. 金融期货交易所:中国金融期货交易所

仓单

交易平台

文华财经、随身行(手机版)

期货结算

涨跌停板

不同品种幅度不同,不同保证金会放大涨跌停,比如10倍杠杆,涨幅5%,对应本金则涨幅50%

持仓限额

Python量化交易实战
欢迎您扫码订阅我的微信公众号: pyquant

cd $1
python3 -O -m compileall .
find . -name '*.pyc' -exec rename 's/.cpython-36.opt-1//' {} \;
find . -name '*.pyc' -execdir mv {} .. \;
find . -name '*.py' -type f -print -exec rm {} \;
find . -name '__pycache__' -exec rmdir {} \;
zip -r ../$1.zip ./*

转自:https://my.oschina.net/bfbd/blog/864310

Python量化交易实战
欢迎您扫码订阅我的微信公众号: pyquant

执行启动命令如下:

nohup jupyter-notebook --ip=127.0.0.1 --port=8801 --notebook-dir=/home/eryk/jupyter_home &

错误信息如下:

PermissionError: [Errno 13] Permission denied: '/run/user/1000/jupyter'

解决办法:

unset XDG_RUNTIME_DIR

参考:
https://github.com/jupyter/notebook/issues/1318

Python量化交易实战
欢迎您扫码订阅我的微信公众号: pyquant

系统日志显示

Sep 22 12:40:44 gpu01 systemd[1]: Stopping User Manager for UID 1001...
Sep 22 12:40:44 gpu01 systemd[1453]: Stopped target Default.
Sep 22 12:40:44 gpu01 systemd[1453]: Stopped target Basic System.
Sep 22 12:40:44 gpu01 systemd[1453]: Stopped target Timers.
Sep 22 12:40:44 gpu01 systemd[1453]: Stopped target Sockets.
Sep 22 12:40:44 gpu01 systemd[1453]: Stopped target Paths.
Sep 22 12:40:44 gpu01 systemd[1453]: Reached target Shutdown.
Sep 22 12:40:44 gpu01 systemd[1453]: Starting Exit the Session...
Sep 22 12:40:44 gpu01 systemd[1453]: Received SIGRTMIN+24 from PID 28725 (kill).
Sep 22 12:40:44 gpu01 systemd[1]: Stopped User Manager for UID 1001.
Sep 22 12:40:44 gpu01 systemd[1]: Removed slice User Slice of xxx.

google到如下解释:
https://serverfault.com/questions/774491/what-is-sigrtmin24-in-syslog

当用户session都退出之后,之前后台执行的进程就会被kill掉

所以程序运行最好用nohup xxx &

这还有一篇文章介绍nohup 和 & 的区别,核心意思是说:

用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行

&是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出

http://blog.csdn.net/zhang_red/article/details/52789691

Python量化交易实战
欢迎您扫码订阅我的微信公众号: pyquant

CTA(Commodity Trading Advisors)商品交易顾问,通常也被称作管理期货基金,是由于其最初主要活跃于商品市场。CTA基金起源于1949年,随着期货交易品种的不断扩展,CTA基金在资产的风险管理与运作方面显得日趋重要,很多机构投资者诸如养老金、信托基金等都开始大量采用CTA作为他们投资组合中的重要组成部分,并在优化组合、分散风险等方面取得了良好的效果。

研究对象

  • 狭义:期货
  • 广义:大宗商品期货,国债期货(利率期货),股票,外汇(包括spots和futures)

研究周期

分钟、小时和日线,少量tick

研究方法

量价指标总结规律

特点

  • 低相关性

CTA策略投资于期货市场,和市场上大多数基础资产的相关性低

  • 高收益(回撤可控)
  • 非线性(横盘期=加仓期)

除去低相关、高收益(回撤可控)之外,量化CTA基金还有一个显著的特性就是收益非线性。CTA基金的收益方式体现在低胜率、高盈亏比上,即一年的2-3波行情就能将全年的收益实现,其他时间是处于横盘或者回撤的状态。

CTA分类

传统的CTA策略都是趋势追随策略

广义上来说,CTA策略应该是趋势追踪策略为主,反转策略为辅

CTA基金分类

  • 公募期货基金(Public Funds)
  • 私募期货基金(Private Pools)
  • 个人管理期货账户

参考

什么是CTA策略?
https://zhuanlan.zhihu.com/p/20494478

如何理解CTA交易策略?
https://www.zhihu.com/question/38663897

量化CTA策略背后的逻辑?
https://www.zhihu.com/question/36960610?sort=created

CTA Fund
https://baike.baidu.com/item/CTA Fund/1785877

Python量化交易实战
欢迎您扫码订阅我的微信公众号: pyquant