夜盘时段随机指标策略图
在四小时K线上运行的随机指标振荡器,只允许在夜间动作。有意思的地方是时钟而不是振荡器:夜盘时段从傍晚开始,到第二天早晨结束,因此它的开始时刻在一天之中比结束时刻更晚,而单个“工作时间”(Working time)模块无法描述这样的区间。于是本图把夜晚拆成两半——一半在午夜之前,一半在午夜之后——并在其他任何模块查看它之前,先把两半合成一个统一的答案。
策略概览
- 整张图由已完成的四小时K线驱动,因此每个决策都建立在已收盘的K线上,任何环节都不会对仍在形成中的K线做出反应。
- 随机指标振荡器(Stochastic)在这些K线上运行,%K 取 14 根K线,%D 取 3 根,转换器(Converter)从它的取值中挑出 %K 线;%D 只用于绘图,从不参与交易。
- 两个工作时间(Working time)模块读取每根K线开盘的时刻:一个覆盖 21:00 到 23:59:59,另一个覆盖 00:00 到 06:00。它们中的任何一个单独都不构成夜晚。
- 一个设为“异或”(Exclusive or)的逻辑条件(Logical condition)模块把两半合成一个夜间信号。两半不可能重叠,因此同一时刻最多只有一半是打开的,而该模块在同时拿到两半结果之后,每根K线给出一次答案。
- 两个比较(Comparison)模块把 %K 与超卖、超买水平作对比;另外两个把持仓与零作对比,从而告诉本图当前是空仓、多头还是空头。
- 四个逻辑条件的“与”(And)门把这三项事实——夜间、振荡器、持仓——组合成两个入场和两个出场,因此在时钟不认可时,任何一个门都无法触发。
- 入场由运行在“开仓”(Open position)条件下的持仓修改(Position modify)模块完成:只有在持仓恰好为零时,才会发出 Order Volume 数量的市价委托,正是这一点让一个信号不会变成一连串的委托。
- 图表面板绘制K线、振荡器,以及本图产生的每一笔委托和成交,因此夜间窗口可以直接从图上读出来。
入场与出场规则
- 做多入场: 当夜间窗口打开、持仓为零且 %K 低于超卖水平时,做多的门触发,持仓修改(Position modify)按市价买入 Order Volume。该模块上的“开仓”(Open position)条件意味着:在持仓再次平掉之前,同样读数的重复出现不会改变任何东西。
- 做空入场: 镜像的一侧:夜间窗口打开、持仓为零且 %K 高于超买水平,做空的门触发,持仓修改在同样的“开仓”条件下按市价卖出 Order Volume。
- 离场: 这里没有止盈、没有止损,也没有按时间强制平仓。多头由相反方向的极端读数平掉——持仓为多头时 %K 高于超买水平;空头则由持仓为空头时 %K 低于超卖水平平掉,两者都通过设为“平仓”(Close position)的持仓修改(Position modify)模块完成,该模块自行读取未平仓数量。出场同样位于夜间窗口之内,因此夜里开出的持仓会被持有过白天,到下一个夜里才被释放。平仓与反手是两个彼此独立的事件:平掉多头的那个极端读数只是让持仓归零,之后同类的又一次读数才会开出空头。
参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| Candles | 04:00:00 | 四小时周期,由数据中可用的更小K线合成。只处理已完成的K线,每根K线以其开盘时刻计时,正是这一点决定它属于哪个时段。 |
| %K Length | 14 | %K 线的回看长度:振荡器用多少根K线来衡量收盘价。 |
| %D Length | 3 | %D 线的平滑长度。它只画在面板上,不参与任何条件。 |
| Evening Half From | 21:00:00 | 夜晚位于午夜之前那一半的开始时刻。请让两半彼此分开:它们应当在午夜相接,而不是互相重叠。 |
| Evening Half Until | 23:59:59 | 傍晚那一半的结束时刻。在午夜前一秒结束它,从而不会碰到紧随其后的那一半。 |
| Morning Half From | 00:00:00 | 夜晚位于午夜之后那一半的开始时刻,也就是午夜本身。 |
| Morning Half Until | 06:00:00 | 早晨那一半的结束时刻,同时也是夜晚的结束。过了这个时刻,图中任何一个门都无法触发,直到傍晚那一半重新打开。 |
| Oversold Level | 30 | 低于该水平时 %K 被视为超卖:持仓为零时它开出多头,持有空头时它平掉空头。 |
| Overbought Level | 70 | 高于该水平时 %K 被视为超买:持仓为零时它开出空头,持有多头时它平掉多头。 |
| Order Volume | 1 | 两个入场发出的数量。出场忽略它,直接平掉所有未平仓部分。 |
图表详情
- K线(Candles) 模块订阅四小时周期序列并打开只取已形成K线的开关,它给发出的每个值都打上该K线开盘时刻的时间戳。时钟模块读取的正是这个时间戳,因此一根K线属于其开盘小时所落入的那个时段,无论随后的四个小时里发生了什么。
- 指标(Indicator) 承载随机指标振荡器,只有在指标形成之后才继续向下传递数值,因此历史数据最初的几根K线只用来启动计算,而不产生信号。转换器(Converter) 从振荡器的取值中读出 %K 字段,把一个普通数字交给比较模块。
- 两个工作时间(Working time)模块正是本图的重点。每个模块只在一天中的时间处于自身那两个边界之间时为真,这意味着单个模块永远无法描述跨越午夜的窗口:它的开始时刻会晚于结束时刻,检查永远不可能通过。把夜晚在午夜处切开,就得到两个普通窗口,而它们上方的逻辑条件(Logical condition)模块又把夜晚重新拼回一体。
- 持仓(Position) 由三个比较(Comparison)模块同时与一个取值为零的变量(Variable)作对比——等于、大于、小于——正是这三个答案把两个入场门与两个出场门区分开来。超卖、超买水平以及委托数量同样是变量,因此本图所争论的每一个数字都是参数,而不是埋在某个模块里的取值。
- 四个持仓修改(Position modify)模块按这些门动作。两个入场带有“开仓”条件,并从数量变量中取得手数;两个出场带有“平仓”条件且不需要数量,因为平仓委托的数量由它所平掉的持仓决定。它们的委托和成交与K线、振荡器一起送往图表面板(Chart panel)。
使用方法
将 .json 文件导入 Designer,在回测器中用历史数据运行,然后根据自己的交易品种调整参数或方块,确认无误后再用于实盘。