程序化交易策略的进阶设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
为此,设置三个止损参数:
Numeric InitialStop(20); Numeric BreakEvenStop(30); Numeric TrailingStop(50); // 初始止损(千分之N) // 保本止损(千分之N) // 追踪止损(千分之N)
三种止损的代码可以放在一起处理,取最有利的 价格作为止损(赢)价。
13
例2:四周规则突破
交易规则:
价格突破20周期高点(日线即四周),做多; 价格突破20周期低点,做空;
14
进场部分代码
计算四周高低价 HiBand = highest(high[1],Length); LoBand = lowest(low[1],Length); 突破四周高点进场做多(以多头模型为例) If ( MarketPosition == 0 && high >= HiBand) { MyPrice = Max( HiBand, Open); buy(lots,MyPrice); return; }
9
例1:单均线包络线
交易规则:
以简单移动平均线判断趋势,收盘价在均线之上为多
头趋势,在均线之下为空头趋势;
为过滤均线假突破,在均线基础上加减一定百分比形
成围绕均线的上下两条通道;
价格盘中突破上轨,进场做多或平空反多; 价格盘中突破下轨,进场做空或平多反空;
10
包络线的设计
方法一:均线百分比
12
再进场条件设计
再进场必须突破跟踪止盈出场前的高点或低点
If ( bLongStoped and MarketPosition == 0 and High >= UpperBand and High > HigherAfterEntry ) { MyPrice = Max(UpperBand,HigherAfterEntry); If(Open > MyPrice) MyPrice = Open; Buy(Lots,MyPrice); bLongStoped = false; Return; }
逆势策略
RSI、KDJ、假突破系统 。。。。
结果:
顺势系统基本都是盈利的系统 震荡指标逆势策略很难盈利 震荡指标顺势策略也是盈利的系统
RSI 逆势系统
RSI逆势系统收益曲线
RSI 顺势系统
RSI顺势系统收益曲线
交易策略设计的几大环节
进场条件 出场条件 出场后的再进场条件 其他过滤条件 头寸管理
程序化交易策略的进阶设计
蔡云华 深圳开拓者科技有限公司
1
内容安排
经典交易策略的设计思路和实现
组合测试和策略评估
套利对冲策略的设计
2
选择什么样的交易策略?
顺势还是逆势? 长线还是短线? 日内还是隔夜?
投机还是对冲?
策略简单测试
顺势策略
单均线、四周规则、布林线、MACD。。。
MA = AverageFC(Close,Length); UpperBand = MA[1] * (1 + FilterPercent * 0.01 ); LowerBand = MA[1] * (1 - FilterPercent * 0.01 );
方法二:均线加ATR的一定比例
ATRValue = AvgTrueRange(ATRLength); MA = AverageFC(Close,Length); UpperBand = MA[1] + ATRValue[1] * EnvNumATR; LowerBand = MA[1] – ATRValue[1] * EnvNumATR;
套利对冲策略的测试
用Data0, Data1…的Buy/Sell指令
价差K线公式 (1)
价差K线公式 (2)
价差的四周规则系统(1)
价差的四周规则系统(2)
胶和锌对冲
铜和白糖对冲
谢谢大家!
39
11
出场条件设计
使用了反向突破止损和跟踪止盈相结合的出场方式; 跟踪止盈采用的是盈利峰值价回落ATR的一定比例后触发止损。 多头出场部分代码如下: 止损价的设置 StopLine = LowerBand; if (StopLine < HigherAfterEntry - ATRValue[1] * TrailStopNumATR) StopLine = HigherAfterEntry - ATRValue[1] * TrailStopNumATR; 止损的触发 If(Low <= StopLine) { MyPrice = StopLine; If(Open < MyPrice) MyPrice = Open; Sell(0,MyPrice); bLongStoped = true; }
// 追踪止损的价位超过保本止损价,止损价随盈利峰值价的上升同步提高 If (StopLine < HigherAfterEntry*(1-TrailingStop/1000)) StopLine = HigherAfterEntry*(1-TrailingStop/1000);
Commentary("止损价:"+Text(StopLine)); // 止损触发 If(Low <= StopLine) { MyPrice = StopLine; If(Open < MyPrice) MyPrice = Open; Sell(Lots,MyPrice); bLongStoped = True; // 止损后设置标志 Commentary("Long Position Stoped at "+text(MyPrice)); }
组合报告
等市值测试
策略评估指标
收益风险比 调整收益风险比 最大资金回撤 根据评估指标计算最优头寸
对冲交易的优势
防范系统风险 提高波动率,增加交易机会 通过算法交易,提高流动性 降低博弈强度
套利对冲策略的设计
价差回归型的对冲策略 价差趋势跟踪策略
价差K线及技术指标 运用经典的趋势跟踪策略
多头止损部分的代码
// 初始止损 StopLine = EntryPrice * (1-InitialStop/1000); // 达到保本止损条件,将止损位上移到保本的价位 If (HigherAfterEntry >= EntryPrice * (1+BreakEvenStop/1000)) StopLine = EntryPrice;
16
例3:双均线交叉系统
交易规则: 如果短期均线上穿长期均线,做多,如原来持有空单 ,则先平空单,再建多仓 如果短期均线下穿长期均线,做空,如原来持有多单 ,则先平多单,再建空单
17
出场部分设计
我们使用三种类型的止损设置:
进场后设置初始止损;
有一定盈利后设置保本止损; 盈利增大后使用追踪止盈(峰值价回落ATR倍数);
15
出场部分设计
采用更小周期的反向突破作为保护性止损; 同时采用跟踪止盈的策略。 ……
StopLine = LoBand2; If (StopLine < HigherAfterEntry - ATRValue[1] * TrailStopNumATR) StopLine = HigherAfterEntry - ATRValue[1] * TrailStopNumATR; If(Low <= StopLine) { MyPrice = Min(StopLine, Open); Sell(0,MyPrice); }
进出场的更多过滤条件
技术指标 K线形态 成交量或持仓量 背离走势 (举例)
头寸调整
问题的提出:
一个正期望的系统能否通过亏损增加头寸的头 寸调整方式改进收益曲线?
测试代码 (1)
测试代码 (2)
测试代码 (3)Βιβλιοθήκη Baidu
测试结果
组合测试
单品种多策略组合 多品种单策略组合 TB组合测试 组合测试的头寸分配