全局止损计时器策略图
入场由价格决定,出场由资金决定。动量指标穿越其中性水平时,会沿移动平均线已经指向的方向开仓;从这一刻起,策略的浮动结果就接管了这笔交易:策略盈亏 (Strategy P&L) 模块监视浮动数值的每一次变化,只要它跌到资金止损或达到资金目标,就立即平掉持仓,无论此时各指标给出什么信号。
策略概览
- 整张图只由一条K线序列供数:五分钟周期,且仅取已完成的K线——两个指标、收盘价转换器以及各常量变量的触发都来自它。
- 动量指标衡量价格在其自身周期内走过的幅度;交叉 (Crossing) 模块把它与保存在变量中的水平值比较,只在两者互换位置的那一刻触发:上穿输出 true,下穿输出 false。
- 一个逻辑非把同一次交叉转成下穿事件,因此一个交叉模块同时服务两个方向,而两者绝不会在同一根K线上一起触发。
- 转换器从K线中取出收盘价,两个比较判断它位于移动平均线之上还是之下,这就是两个入场都必须通过的趋势过滤。
- 持仓模块与零比较了三次:空仓用于把守入场,多头和空头分别启用两个信号出场。
- 每个入场闸门都是三个判断的逻辑与——交叉、收盘价相对移动平均线的一侧,以及空仓——入场本身是一笔仅从空仓发出的市价委托,因此在持仓期间到来的信号不会改变任何东西。
- 策略盈亏模块没有输入,也没有自己的K线节拍:浮动结果每变化一次它就输出一次,两个比较把这个数值与保存在变量中的资金止损和资金目标作对照。
- 资金判定与两个反向交叉判定汇入同一个组合 (Combination) 模块,由它驱动唯一一个设为平仓的持仓修改 (Position modify) 模块:无论哪个理由先出现,持仓都由同一笔市价委托平掉。
入场与出场规则
- 做多入场: 动量上穿其水平值,K线收盘价高于移动平均线,且持仓为空。持仓修改模块以市价买入设定的下单手数。
- 做空入场: 动量下穿其水平值——同一个交叉模块的输出经逻辑非读取——K线收盘价低于移动平均线,且持仓为空。持仓修改模块以市价卖出设定的下单手数。
- 离场: 有三个理由会平掉交易,而三者都终结于同一个模块。策略的浮动结果跌到资金止损;或者达到资金目标;或者在持仓期间动量反向穿越其水平值。前两个是在每次盈亏变化时检查的,而不是按K线节拍,因此快速行情可以在K线内部就得到回应;第三个每根已完成K线检查一次。平仓委托的数量按当前持仓计算,因此总是让策略回到空仓,绝不会一步反手。
参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| Candles | 00:05:00 | 整张图运行所依据的K线序列周期;只使用已完成的K线。 |
| Momentum Length | 10 | 动量指标的周期长度——衡量价格走势要回溯多远。 |
| EMA Length | 20 | 移动平均线的周期长度,它决定入场只允许在趋势的哪一侧进行。 |
| Momentum Level | 0 | 动量所比较的水平值。零是它的中性值:高于零表示价格比一个周期长度之前更高,低于零则更低。 |
| Order Volume | 1 | 两个入场的下单数量(手)。平仓委托不使用该值,而是按持仓计算。 |
| Money Stop | -250 | 浮动持仓的亏损额(以账户货币计),达到该值时平仓。为负数。 |
| Money Target | 500 | 浮动持仓的盈利额(以账户货币计),达到该值时平仓。 |
图表详情
- 两个指标都被设置为只输出已形成的最终值,因此未完成的K线不可能产生交叉。
- 动量所比较的水平值保存在变量里,而不是写在比较模块内部,正因如此它才成为一个方案参数,不必打开图就能修改和优化。
- 每个常量变量都是被触发的——三个由K线驱动的变量由K线序列触发,两个资金阈值由浮动盈亏触发——因为变量只保存数值,只有被请求时才会输出。
- 入场都带有空仓条件,因此只从空仓触发。没有它,持仓每变化一次就会发出一笔市价委托,整个运行会被无用的成交塞满。
- 资金止损和资金目标是以账户货币计价的金额,而不是价格上的距离,因此把这张图移到另一个交易品种上时,必须连同下单手数一起重新换算。
使用方法
将 .json 文件导入 Designer,在回测器中用历史数据运行,然后根据自己的交易品种调整参数或方块,确认无误后再用于实盘。