本帖最后由 技术009 于 2021-5-24 15:52 编辑
这是一个简易文华模型改金字塔教程
1、简易模型改法 文华boll模型 MID:MA(CLOSE,N);//求N个周期的收盘价均线,称为布林通道中轨 TMP2:=STD(CLOSE,M);//求M个周期内的收盘价的标准差 TOP:MID+P*TMP2;//布林通道上轨 BOTTOM:MID-P*TMP2;//布林通道下轨 CROSS(C,BOTTOM),BPK;//当最新价上穿下轨时,做多 CROSS(TOP,C),SPK;//当最新价下穿上轨时,做空 AUTOFILTER;
金字塔模型 简单改法: input:n(26,5,300,1),M(26,1,100,1),P(2,1,10,1);//定义参数 MID:MA(CLOSE,N);//求N个周期的收盘价均线,称为布林通道中轨 TMP2:=STD(CLOSE,M);//求M个周期内的收盘价的标准差 TOP:MID+P*TMP2;//布林通道上轨 BOTTOM:MID-P*TMP2;//布林通道下轨 CROSS(C,BOTTOM),BPK,TFILTER; CROSS(TOP,C),SPK,TFILTER;
金字塔模型 新交易系统改法: input:n(26,5,300,1),M(26,1,100,1),P(2,1,10,1);//定义参数 MID:MA(CLOSE,N);//求N个周期的收盘价均线,称为布林通道中轨 TMP2:=STD(CLOSE,M);//求M个周期内的收盘价的标准差 TOP:MID+P*TMP2;//布林通道上轨 BOTTOM:MID-P*TMP2;//布林通道下轨 if CROSS(C,BOTTOM) and holding<=0 then begin//当收盘价上穿下轨且有空仓或无仓时 sellshort(1,1,market);//平空 第一个1代表100%成立,第二个1代表下单手数(下同) buy(1,1,market);//开多 end if CROSS(TOP,C) and holding>=0 then begin //当收盘价下穿上轨且有多仓或无仓时 sell(1,1,market);//平多 buyshort(1,1,market);//开空 end
2、解决AUTOFILTER 通过实际工作中的交流,发现用户经简单转换后,稍了解下金字塔机制,改用Holding函数来控制,不再使用此函数的非常多,我想通过此贴,让大家少走弯路。 我们来研究下Autofilter的机制,它实际作用是,当我第一次满足条件后开仓,之后再满足条件不在开仓。即用成立条件和持仓来判断。 我们依然以文华的Boll模型为例: (这里我们不用cross函数,因为它是一个点.为了更直观的达到效果,我们用C>bottom ;C<top来替代金叉,死叉)
文华boll模型 MID:MA(CLOSE,N);//求N个周期的收盘价均线,称为布林通道中轨 TMP2:=STD(CLOSE,M);//求M个周期内的收盘价的标准差 TOP:MID+P*TMP2;//布林通道上轨 BOTTOM:MID-P*TMP2;//布林通道下轨 C>BOTTOM,BPK;//当最新价上穿下轨时,做多 TOP>C,SPK;//当最新价下穿上轨时,做空 AUTOFILTER;
现在我们在金字塔中用Holding函数可改为: //中间变量 MID:MA(CLOSE,N);//求N个周期的收盘价均线,称为布林通道中轨 TMP2:=STD(CLOSE,M);//求M个周期内的收盘价的标准差 TOP:MID+P*TMP2;//布林通道上轨 BOTTOM:MID-P*TMP2;//布林通道下轨 //交易条件 开多平空条件:=C>BOTTOM and holding<=0;//当最新价上穿下轨时,并且持空仓或无仓的情况下,做多 开空平多条件:=TOP>C and holding>=0;//当最新价下穿上轨时 并且持多仓或无仓的情况下,做空
//交易系统
加仓条件:=c>mid and holding=1;//当最新价大于中轨,且持一手多单,加仓 buy(加仓条件,手数,matket); 得到当前策略虚拟持仓量,多仓返回正数,空仓返回负数,无持仓返回0。
3、BARSBP、BARSSK、BAESSP在金字塔的实现 借助variable(全局变量)实现。 可以设置一个全局变量 以开多为例 variable:a=0; if 开多条件 then begin buy(); A:=A+1;//开始计数 end …… …… if TYPEBAR(1 , 1)>0 then A:=A+1;//每根K线+1 补充: typebar函数说明 得到当前位置之前上N次信号指定类型距当前周期 用法:
TYPEBAR(N,TYPE)N表示上次信号,
TYPE表示信号类型 0、无信号1、开多2、平多3、开空;4、平空 例如:TYPEBAR(2,1)表示:倒数第2个开多信号历时 更多variable用法请参考金字塔初级教程。
4、BKPRICE、BPPRICE、SKPRICE、SPPRICE在金字塔的实现。 金字塔对于开平仓价格 只有2个函数 enterprice(上次开仓价)和exitprice(上次平仓价)。 策略若需更灵活的使用,请参考variable(全局变量)的使用。 至于金字塔的后台是什么,它与图表程序化的差别,请看论坛置顶的帖子
5、crossup和crossdown在金字塔的实现。 这2个函数,在金字塔只有一个对应的函数cross. 只需要调整参数位置就能分别实现上穿和下穿。 比如 ma5金叉ma10 是cross(ma5,ma10);反过来ma5死叉ma10 则是cross(ma10,ma5) 仅仅需要调换下函数参数位置即可,非常方便。
6、hv,lv在金字塔的实现。 金字塔的hhv函数,这个和文化的是等效的,包含当前K在内。而hv,lv只需要进行简单的改写就能实现。 hv(h,N) 等效于ref(hhv(h,N),1); lv(l,N)等效于 ref(llv(l,N),1);
7、import,CALL_PLUS在函数在金字塔的实现。 金字塔有多种进行数据,指标调用的函数可以使用。 这2个函数可以用stkindi和stkindiex(相比stkindi函数,可指定调用的数据量)函数完全替换,但是具体使用方式上有所不同。 例如,调用macd指标的macd值并赋值给变量A。 A:stkindi('RB00','macd.macd1',0,6,0);//调用rb00 在日线级别的macd指标的macd1变量的值。如果不指定品种,则默认是当前品种
具体写法这里不在赘述,用户可自行参考函数说明。 另外还有“引用操作符”和“用户函数”的2种引用方式,用户可在函数列表里搜搜对应关键词查找函数说明。这2个函数灵活性不如stkindi函数,但是在效率上会更高效。
8.CHECKSIG函数的效果如何在金字塔上实现。 CHECKSIG函数可以设置对交易信号的处理方式。在金字塔里有2种信号处理方式:走完K和固定间隔,顾名思义就是在K线走完时候检测信号和每固定时间间隔时候检测信号,但是这个不是在代码中编写的,而且外部的一个设置。
CHECKSIG的方式和我们金字塔的固定间隔模式最为接近。固定间隔可以设置任意时间间隔,一样也可以分笔级别。如下图所示:
有区别的地方是: 1.金字塔处理信号的模式 默认是针对所有信号的。CHECKSIG是需要指定信号类型。 2.没有对信号的复核。金字塔无论固定间隔还是走完K,检测到信号即下单,不存在延迟复核的功能。
|