全实战成长系列-30堂实战课跑通量化交易, 平台见识(华尔街见闻),by 用 Python 的交易员
CTA 策略
- Commodity Trading Advisor, 海外更多成为 Trending Following,追涨杀跌
- 适合的品种: 期货,外汇,CFD ( &数字币 Maybe?)
- 多空双向交易,容易做空(A股不适合)
- 带有较高杠杆,可以把一份资金分散到更多品种
- 流动性较高,建仓的时候不至于造成特别大的 market impact
- 波动性明显
- 交易频率
- 低频:基于日线,持仓在数日到数周
- 中频:基于小时线/数分钟线,持仓数小时
- 中高频:基于分钟线/秒线,持仓一小时以内
- 著名机构
- AHL,英仕曼集团
- Winton,元盛资产
- 富善投资
- 思勰投资
- 持续迭代
- 数据研究
- 策略开发
- 历史回测
- 实盘允许
- 对比分析
- 策略构成
- 信号生成
- 基于历史行情数据,进行时间序列分析,生成买卖指令;实盘,历史数据指当前所有的历史数据
- 指令的生成过程
- 信号:给出具体的买卖方向和数量:
- 买还是卖(基于技术指标和模型)
- 双均线金叉死叉
- RSI 超买超卖
- 收盘价突破布林带下轨
- 回归模型上涨/下跌预期高于阈值
- 买卖时机
- T 时候(立即执行), T 收盘, T + 1 开盘: 双均线金叉,RSI 跌破 30
- T + n 时刻(未来执行), T 收盘, T + 1 开盘后任意时刻: K 线运行盘中突破通道上轨
- 买还是卖(基于技术指标和模型)
- 过滤:剔除不好的交易机会(震荡市剔除均线缠绕)
- 趋势的本质,是稳定的单边大波动;CTA 的目标是识别趋势同向交易;减少假突破的亏损,需要过滤信号(市场波动不够大,忽略信号)
- 独立指标:DMI,ATR
- 信号内嵌:通道,RSI 极值区
- 出场:
- 反向信号:金叉之后死叉,突破上轨买入后,突破下轨,则卖出
- 止损逻辑:
- 固定止损:亏损固定金额(比例)之后平仓止损
- 移动止损(止盈):从最高点跌落固定比例
- 信号:给出具体的买卖方向和数量:
- 组合构建
- 简单组合:直接使用信号给出的交易数量,适用于中高频或中频策略
- 风险平衡:结合信号给出的数量和市场风险度调整,适用于低频策略
- 交易执行
- 信号和执行结合:策略代码直接生成指令并发送委托管理交易(简单组合),交易管理比较细粒度,追求速度,适用于中高频
- 信号和执行分离:组合构建支持更加复杂的一些规则,适用于低频(海龟)
- 信号生成
海龟策略
- 概念
- 系统化交易策略,按照系统性的规则去执行交易
- 1983 年两位交易员的赌约,30 多年历史;柯蒂斯·费思,19 岁加入海龟,4 年狂赚 3150 万美元
- 最经典的量化交易策略,低频 CTA
- 数量化分析(纸笔计算器) + 系统化执行(打电话交易)
- 构成
- 交易信号
- 通道突破
- 顺势加仓
- 风控止损
- 组合构建
- 品种选择
- 单位持仓
- 风险分配
- 交易执行:当年没有自动化交易系统
- 交易信号
- 品种选择
- 期货,包括商品和股指
- 杠杆外汇
- 数字货币,现货和期货合约
- 通道突破:
- Donchian Channel: 本质是找过去 N 日最为重要的支撑和阻力,简单粗暴行之有效
- 短周期
- 突破 20 日通道开仓
- 过滤上笔盈利
- 反向突破 10 日通道平仓
- 长周期
- 突破 55 日通道开仓
- 反向突破 20 日通道平仓
- 单位持仓
- 风险度量 N: True range (真实波动范围) 的指数移动平均 (EMA), 通常用 ATR 代替 (SMA)
- 单位持仓 Unit:
Unit = (总资金 * 1%) / (N * 合约乘数)
- 在特定时间,每个合约有自己特定的 Unit
- 信号发出交易指令时,会以 Unit 作为买卖数量单位
- E.g.
总资金 = 500万
,N = 80
,合约乘数 = 300
=>Unit = 2.083
约等于 2
- 顺势加仓
- 突破通道,开仓 Unit,记录入场价 Entry 和 N
- 价格顺着仓位移动,每移动
0.5N
,加仓 Unit - 加仓后将新的加仓价格记为 Entry,用于止损(Entry >= 平均加仓成本, 锁定利润, 降低风险)
- 单合约最大持仓,4 Unit,入场后最多加仓 3 次
- 风控止损(做多为例)
- 价格跌破
Entry - 2N
, 平掉全部多头仓位 - 因此最多总资金亏损 2% (
1% * 总资金 / (N * 合约乘数) * 2N * 合约乘数
) - 最新 Entry 高于平均建仓成本,所以整体风险在变小
- 最大持仓限制(Units),单品种4,高关联6,低关联10, 整个组合12
- 价格跌破
限价单
- 常见委托
- 限价单:所有交易所提供
- 市价单:绝大部分交易所提供;危险情况:挂单很少的时候,会吃掉所有的对手单,把价格打穿
- 停止单:少数交易所提,部分经济商提供
- 本质上是条件委托, 满足条件发出
- 为保证成交, 通常会发出市价单或超价停止单
- 最早用于止损, Stop Loss Order
- 两种不同的停止单
- 交易所(经济商)停止单
- 优点:保存在交易所或券商系统内,不用担心本地状况
- 缺点:场内交易员(交易所后台)能够看到,可能被定向爆破
- 本地停止单
- 优点:只有交易员本人能看到,不用担心泄漏底牌
- 缺点:保存在本地电脑,关机失效;触发有延时,会导致滑点
- 交易所(经济商)停止单
- 海龟和停止单
- T 日收盘后,计算上下轨作为 T + 1 日的交易依据
- T + 1 日内,突破上下轨立即执行交易
- 假如等到收盘,由于 alpha 衰减速度快,可能损失大量利润
- 突破后的成交价格需要基于停止单撮合规则
- 停止单撮合规则
- 买入, T 日收盘挂出停止单价格为 P
- T + 1 日 K 线
high < P
, 停止单未触发 - T + 1 日 K 线
high >= P
, 成交价max(P, open)
,假如开盘价已经大于 P, 直接以开盘价成交, 否则会未来函数
- T + 1 日 K 线
- 卖出, T 日收盘挂出停止单价格为 P
- T + 1 日 K 线
low > P
, 停止单未触发 - T + 1 日 K 线
low <= P
, 成交价min(P, open)
,假如开盘价已经小于 P, 直接以开盘价成交, 否则会未来函数
- T + 1 日 K 线
- 买入, T 日收盘挂出停止单价格为 P
- 难点
- K线内部成交
- 无论长短周期,要求在突破通道的瞬间,立即执行交易,而非等到收盘
- K 线周期大, Tick 数据量太大,只能用 K 线数据回测(?)
- ZipLine or 三大矿无法回测
- 短周期信号的过滤
- 短周期信号用于捕捉短期的快速趋势,缺点是容易出现假突破大量亏损
- 为避免假突破,投资组合在,上次盈利时,要放弃本次指令
- 需要在信号中统计盈亏, 而不是回测结束后统计, 多次加仓(顺势)&一次平仓要算为一次开平
- 单位持仓: Unit = (总资本 * 1%) / (N * 合约乘数),合约乘数即一个指数跳动对应的钱
- 无持仓时,随 K 线更新 N 和 Unit
- 触发开仓是,固定住交易时的 N 和 Unit
- 信号层给出买卖指令的具体数量,组合层限制单品种暴露的风险
- 平仓后,清除固定的 N 和 Unit
- K线内部成交