4-11 6,103 views
1.策略思想
结合日线趋势和tick走势,确定开仓。开仓之后,依据tick趋势加仓或平仓。
2.日线趋势判断
本文中的方法是基于dual thrust 和 R-Break思想的变形,以日内趋势跟踪为主,但同时考虑了反转的可能性。
2.1 参数
通过前N交易日的收盘价、最高价和最低价计算出一个Range。然后利用Range和当日的open price计算出六个价格:突破买入价(BBreak)、观察卖出价(SSetup)、反转卖出价(Senter)、反转买入价(Benter)、观察买入价(BSetup)、突破卖出价(SBreak)六个价格。以此来形成当前交易日盘中交易的触发条件,六个价格间的距离可用适当参数进行调整。
2.2 趋势判断
- 突破交易规则:价格向上突破BBreak买入,向下突破SBreak
- 反转交易规则:空单情况下,价格跌破BSetup后,开始反弹,当反弹超过Benter后多单入场;多单情况下,价格突破SSetup后,开始回调,当回调超过Senter后空单入场。
3.基于tick开仓、加仓、止损、止盈
本处即采用海龟交易。(参考 < 海龟交易系统的实现 > ) 该指标是有Richard Donchian发明的,该指标用周期内的最高价和最低价来显示市场价格的波动性,当其通道窄时表示市场波动较小,反之通道宽则表示市场波动比较大。
3.1 唐奇安通道
- 上轨:hh=Max(最高低,T1)
- 下轨:ll=Min(最低价,T1)
- 上图中显示的时day,但适用于所有的bar,如15 minute的数据。
3.2 趋势判断
当价格冲冲破上轨是就是可能的买入信号;反之,冲破下轨时就是可能的卖出信号。
3.3 买卖份额
买卖份额需要考虑过去的波幅,使得波动值处在资金的一个范围内,如1%。
3.3.1 ATR
首先介绍真实波幅,是以下三个值中的最大值:
1、当前交易日最高价和最低价的波幅
2、前一交易日的收盘价与当前交易日最高价的波幅3、前一交易日的收盘价与当前交易日最低价的波幅
用公式写就是:
- 那么一个周期内的波幅,可以用ATR值来衡量,计算公式为:
- 实际上ATR是True Range的T2周期的简单平均SMA,也可使用指数平均EMA。计算ATR的周期T2一般比计算上下轨的T1大。
3.3.2 建仓份额
- coef 是合约一手的数量,如螺纹钢 一手10吨,而限价指令簿显示5元,那么一手就是50元。 容易得知,上面的开仓单位波动1个ATR其实就是总资金的0.01. Unit的计算是实时的。
3.3.3 加仓份额
若股价在上一次买入(或加仓)的基础上上涨了r×ATR,如r=1 则加仓1个Unit。
4.交易逻辑
结合日线和tick趋势,判断买入和卖出
4.1 入场方案
- 买多:日线上升为true,close[-1]>=hh
- 买空:日线下降为true,close[-1]<=ll
4.2 加仓
- 买多加仓:close[−1]>cost+r×ATR
- 买空加仓:close[−1]<cost−r×ATR 操作中我们令当日连续加仓最大2两次。包括跨日的连续加仓最大四次。
- 4.3 出场方案:
基本要求:
- 卖多1: 买空时
- 卖空1: 买多时
止损\止盈方案:times_loss×ATR 为最大损失;times_win×ATR 为最大盈利;
4.4 参数讨论
一般times_loss>=2×ATR。 防止tick交易太快,有噪声影响趋势越明显,times_loss可相对较大。
times_win>3×times_loss。即加入了一个止盈倍数 简单令r=timesloss/4。一般r>1,防止加仓太快。
调仓周期 15m。 ATR计算用5、10、15个左右的15m的bar。 突破用过去的3、4个左右的bar即可
day信号的range取2、3或4日的数据。测试上三日较好
具体参数需要调整。防止回撤较大,可以让time_loss较小
-
5.程序实现
策略实现部分采用四个类来实现:
DataCenter: 用于存储分钟数据Trans: 用于合约更改时,平掉所有仓位
DaySignal: 用于计算当日趋势
Signal: 用于判断开仓、加仓、平仓
Trader: 用于交易