My语言跨周期模型的编写

Author: , Created: 2019-07-09 10:15:08, Updated: 2019-07-16 15:37:53

为什么我们需要跨周期模型的编写?

交易中,大周期趋势是向上的而小周期趋势是向下的,应该顺着哪个方向呢?

如果依照顺势而为的交易理念顺着大趋势的方向,那么会遇到两个问题:一是小趋势逆着大趋势变化很大时手中的筹码可能形成很大的浮亏,甚至会让人受不了而砍仓。二是小趋势若发生大的转向也会引起大趋势的转向,等发现大趋势转向时再砍仓为时已晚。

img

如上图例子: 30分钟周期的M头的反转信号出现,开盘40多点的跳空很可能触发空单条件,而1分钟的小周期却是一开始顺势下跌没有多长时间就开始回补,最高涨了43.8点,这么大的浮亏很容易就触发了早早设置好的止损单了。

因此,掌握大小周期之间的关系,掌握最佳操作时机就是跨周期分析要研究的问题。跨周期分析实质上就是要解决小的波动如何影响大的趋势,或大的趋势如何限制小的趋势的问题。

跨周期的另一个应用体现在共振理论。

先讲一个小故事:在第一次世界大战中,一队德国士兵迈着整齐的步伐,通过一座桥,结果把桥踩塌。就桥梁的本身负载能力而言,远远大过这队德国士兵的重量,但由于士兵步调整齐、节奏一致,结果大桥在这种齐力的作用下而倒塌,这就是共振的作用。当短频率与长频率出现倍数的关系时,就会产生共振。

img

共振理论在交易市场中的体现:市场的波动率或内在周期性因素,来自市场时间与价位的倍数关系。当市场的内在波动频率与外来市场推动力量的频率产生倍数关系时,市场便会出现共振关系,令市场产生向上或向下的巨大作用。

函数在跨周期模型中的应用

// 本代码演示如何引用不同周期的公式在同一代码里
// #EXPORT扩展语法, 以#END结束标记为一个公式,可以声明多个
#EXPORT TEST 
均值1:EMA(C, 20);
均值2:EMA(C, 10);
#END // 结束

#IMPORT [MIN,15,TEST] AS VAR15 // 引用公式, K线周期用15分钟
#IMPORT [MIN,30,TEST] AS VAR30 // 引用公式, K线周期用30分钟
CROSSUP(VAR15.均值1, VAR30.均值1),BPK;
CROSSDOWN(VAR15.均值2, VAR30.均值2),SPK;
十五分最高价:VAR15.HIGH;
三十分最高价:VAR30.HIGH;
AUTOFILTER;

更多详情请见:https://www.fmz.com/digest-topic/2569

跨周期模型的结构与编程

跨周期模型的基本结构:

  • 第一步:建立被引用的模型 FORMULA

  • 第二步:建立跨周期模型,可按照以下方式套用

#IMPORT [PERIOD,N,FORMULA] AS VAR
A1:VAR.A;

A1>REF(A1,1),BPK;
A1<REF(A1,1),SPK;

…

AUTOFILTER;

例子1:在五分钟周期引用昨天日K线的收盘价

  • 第一步:创建指标1
CC:REF(C,1);
  • 第二步:创建跨周期指标2
#IMPORT[DAY,1,A] AS A1
C1:A1.CC;
  • 第三步:将指标2应用到5分钟K线图

以上是一个简单的例子和代码框架,接下来我们写一个更加复杂的结构。

例子2:立足于30分钟周期图表,当30分钟周期MACD指标显示红柱,且成交量较前一根放量;大级别周期(日线及1小时)均线都呈多头排列配合;则按小级别周期(15分钟或5分钟)KD指标金叉为买入点。

DIFF : EMA(CLOSE,12) - EMA(CLOSE,26);
DEA  : EMA(DIFF,9);
#IMPORT[DAY,1,MM] AS MM1
MD1:MM1.M1;
MD2:MM1.M2;
MD3:MM1.M3;
#IMPORT[HOUR,1,MM] AS MM2
MH1:MM2.M1;
MH2:MM2.M2;
MH3:MM2.M3;
#IMPORT[MIN,15,KD] AS KD1
K1:=KD1.K;
D1:=KD1.D;
#IMPORT[MIN,5,KD] AS KD2
K2:=KD2.K;
D2:=KD2.D;
TMP1:= DIFF>DEA&&VOL>REF(VOL,1);
TMP2:=(MD1>MD2&&MD2>MD3)&&(MH1>MH2&&MH2>MH3);
TMP3:=(CROSSUP(K1,D1)||CROSSUP(K2,D2);
TMP1&&TMP2&&TMP3,BK(10);

关于例子中不明白的函数的解释和用法,请参照发明者量化平台的官方API文档和My语言文档:https://www.fmz.com/digest-topic/2569

让我们再尝试一个均线的跨周期例子。

例子3:三屏交易系统;当月线图趋势向上,而周线图的振荡指标向下时,做多;当月线图趋势向下,而周线图的振荡指标向上时,做空。

  • 第一步:编写被引用的SPJY
EMA1:EMA(C,13);
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100
K:SMA(RSV,3,1);
D:SMA(K,3,1);
J:3*K-2*D;
  • 第二步:建立三屏交易系统
#IMPORT [ MONTH,1,SPJY] AS VAR1
YMA:=VAR1.EMA1;
#IMPORT [ WEEK,1,SPJY] AS VAR2
ZJ:=VAR2.J;
LL:=VALUEWHEN(YMA>REF(YMA,1)&&ZJ<30,L);
HH:=VALUEWHEN(YMA<REF(YMA,1)&&ZJ>70,H);
YMA>REF(YMA,1)&&ZJ<30,BK;//月线的趋势向上,周线的振荡指标向下
YMA<REF(YMA,1)&&ZJ>70,SK;//月线的趋势向下,周线的振荡指标向上
C<LL,SP;//多头止损出场
C>HH,BP;//空头止损出场
C<LLV(L,20),SP;//多头出场条件
C>HHV(H,20),BP;//空头出场条件
AUTOFILTER;

注意:跨周期指标、模型支持小周期引用大周期,也可以大周期引用小周期,注意数据的引用。

指标DAYBAR

N:=BARSLAST(DATE<>REF(DATE,1))+1;

#IMPORT[HOUR,1,DAYBAR] AS VAR1
N1:VAR1.N;
盘中3分钟引用1小时周期的当日K线根数,20个3分钟周期N1才变动。

#IMPORT[MIN,3,DAYBAR] AS VAR2
N2:VAR2.N;
盘中1小时引用3分钟周期的当日K线的根数N,1小时中存在20个N2值变动。

以上便是My语言在跨周期策略编写方面的一些简单应用,读者可以灵活发挥各种周期与指标组合,以达到自己想要的效果,特别是数字货币方面,因为永续合约的出现,运用My语言的高效性,可以免去类似商品期货中的主力合约更换问题,读者只要把重心放在策略逻辑的设计上,不用担心合约到期的问题。

注意事项

  • 跨周期、跨合约模型中被引用的指标(模型)中不能存在引用。

  • 一个跨周期、跨合约模型最多支持6个引用语句。

  • 整个My语言中使用跨周期、跨合约数据源总量不能超过50个。(每次独立合成、引用、计算的数据为一个数据源)


More