以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- 恳请老师帮忙修改为金字塔能用的策略 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=184866) |
-- 作者:你幸福吗 -- 发布时间:2021/3/24 10:38:09 -- 恳请老师帮忙修改为金字塔能用的策略 原来用的文华策略,感觉挺好用,现在改用金字塔,恳请老师帮忙修改为金字塔能用的策略,感谢! WH8代码如下: <PARAM> [KPCL,0.000000,3333.000000,1.000000] [YKJ,0.000000,9999.000000,600.000000] [CK,0.000000,9999.000000,1.000000] </PARAM> <PARAMDEFAULTSET> 1 [333.000000,666.000000,333.000000,999.000000] [600.000000,1000.000000,1000.000000,1000.000000] [1.000000,1.000000,1.000000,1.000000] </PARAMDEFAULTSET> <CODE> //请手动输入参数YKJ(0,9999,2000) KPCL(0,3333,1)// A:=EMA(C,1); B:=EMA(C,5); NN:=BARSLAST(DATE<>REF(DATE,1))+1; NR:=VALUEWHEN(NN,DATE); SETEXPIREDATE(\'20181002\'); RQ:=990806; NXZ:=NR<(RQ); DRAWTEXT(NR>=RQ && ISLASTBAR=1,H,\'意\'),COLORWHITE,FONTSIZE20; BKN:=COUNTSIG(BK,50); SKN:=COUNTSIG(SK,50); M:=0.3; M1:=0.3; K1:=0.3; K2:=0.3; N:=BARSLAST(DATE<>REF(DATE,1))+1; OO:=VALUEWHEN(DATE<>REF(DATE,1),O); HH1:=REF(HHV(H,N*M),N); LL1:=REF(LLV(L,N*M),N); HC1:=REF(HHV(C,N*M),N); LC1:=REF(LLV(C,N*M),N); HH2:=REF(HHV(H,N*M1),N); LL2:=REF(LLV(L,N*M1),N); HC2:=REF(HHV(C,N*M1),N); LC2:=REF(LLV(C,N*M1),N); SELLR:=IFELSE((HH1-LC1)>=(HC1-LL1),HH1-LC1,HC1-LL1); BUYR:=IFELSE((HH2-LC2)>=(HC2-LL2),HH2-LC2,HC2-LL2); BT:=K1*BUYR; ST:=K2*SELLR; HH:=OO+BT; LL:=OO-ST; YK:=TPROFIT_REF(1)<YKJ*(KPCL*3) && TPROFIT_REF(2)<YKJ*(KPCL*3) && TPROFIT_REF(3)<YKJ*(KPCL*3); VL:=IFELSE(TNUMSEQLOSS>=2,3*KPCL,IFELSE(TNUMSEQLOSS=1,KPCL*2,KPCL)); VOX:=IFELSE(YK,VL,KPCL); BKVOL=0 && A>HH && NXZ && BKN=0 && A>B,BK(VOX); BKVOL>0 && A<LL && A<BKHIGH*0.99 && A<BKPRICE,SP(BKVOL); BKVOL>0 && A<HH && A<BKHIGH*0.98,SP(BKVOL); SKVOL=0 && A<LL && NXZ && SKN=0 && A<B,SK(VOX); SKVOL>0 && A>HH && A>SKLOW*1.01 && A>SKPRICE,BP(SKVOL); SKVOL>0 && A>LL && A>SKLOW*1.02,BP(SKVOL); SETALLSIGPRICETYPE(TRACING_ORDER); SETMOVEOPIPRICE(TRACING_ORDER); TRADE_OTHER(\'AUTO\'); P1:IFELSE(A>BKPRICE,BKHIGH*0.98,BKHIGH*0.99),DOT,COLORRED; P2:IFELSE(A<SKPRICE,SKLOW*1.02,SKLOW*1.01),DOT,COLORCYAN; CLOSEKLINE(2,CK); 累积盈亏..MONEYREAL-INITMONEY,COLORYELLOW,BOLD; //TRADE_OTHER(\'AUTO\');//映射交易主力合约 </CODE> <VERSION> 130112 </VERSION> <EDITTIME> 2018年12月29日19:28:20 </EDITTIME> <PROPERTY> 1 </PROPERTY> |
-- 作者:FireScript -- 发布时间:2021/3/24 11:15:38 -- 这部分什么意思: <PARAMDEFAULTSET> 1 [333.000000,666.000000,333.000000,999.000000] [600.000000,1000.000000,1000.000000,1000.000000] [1.000000,1.000000,1.000000,1.000000] </PARAMDEFAULTSET> <CODE> 请提供下说明。 是参数吗?但是又没有参数名,不清楚什么意思。 |
-- 作者:你幸福吗 -- 发布时间:2021/3/24 11:45:00 -- 这部分是参数,是<PARAM> [KPCL,0.000000,3333.000000,1.000000] [YKJ,0.000000,9999.000000,600.000000] [CK,0.000000,9999.000000,1.000000] 的参数默认值,最大值,最小值 |
-- 作者:FireScript -- 发布时间:2021/3/24 16:47:18 -- 其他软件的运行机制和具体函数实现都有很多差异性,这一点肯定存在,且我们也没办法去探究具体差异。另外还存在很多未知的细微差异,所以以下代码仅供参考。 通常我们是建议其他厂商转过来的客户将具体思路以文字方式描述后,再编写成代码。这种直接强行转换的,可能存在很多问题。 INPUT:KPCL(1,1,3333,1),YKJ(600,600,9999,1); A:=EMA(C,1); B:=EMA(C,5); NN:=BARSLAST(DATE<>REF(DATE,1))+1; NR:=VALUEWHEN(NN,DATE); RQ:=990806; //日期要在99年之前?? 原代码的思路似乎是判断日期要在99年周期,这里只能改下,否则出不了信号了。 NXZ:=NR>(RQ); DRAWTEXT(NR>=RQ and ISLASTBAR=1,H,\'意\'),COLORWHITE; BKN:TYPEBAR(1,1)>50 or not(TYPEBAR(1,1)); SKN:=TYPEBAR(1,3)>50 or not(TYPEBAR(1,3)); M:=0.3; M1:=0.3; K1:=0.3; K2:=0.3; N:=BARSLAST(DATE<>REF(DATE,1))+1; OO:=VALUEWHEN(DATE<>REF(DATE,1),O); HH1:=REF(HHV(H,N*M),N); LL1:=REF(LLV(L,N*M),N); HC1:=REF(HHV(C,N*M),N); LC1:=REF(LLV(C,N*M),N); HH2:=REF(HHV(H,N*M1),N); LL2:=REF(LLV(L,N*M1),N); HC2:=REF(HHV(C,N*M1),N); LC2:=REF(LLV(C,N*M1),N); SELLR:=IFELSE((HH1-LC1)>=(HC1-LL1),HH1-LC1,HC1-LL1); BUYR:=IFELSE((HH2-LC2)>=(HC2-LL2),HH2-LC2,HC2-LL2); BT:=K1*BUYR; ST:=K2*SELLR; HH:=OO+BT; LL:=OO-ST; YK:=NUMPROFIT(1)<YKJ*(KPCL*3) and NUMPROFIT(2)<YKJ*(KPCL*3) and NUMPROFIT(3)<YKJ*(KPCL*3); lkpd1:=NUMPROFIT(1)<0 and NUMPROFIT(2)<0; lkpd2:=NUMPROFIT(1)<0 and NUMPROFIT(2)>=0; VL:=IFELSE(lkpd1,3*KPCL,IFELSE(lkpd2,KPCL*2,KPCL)); VOX:=IFELSE(YK,VL,KPCL); buy(A>HH and NXZ and BKN and A>B and holding=0,VOX,market); BKHIGH:=hhv(h,ENTERBARS+1); sell(A<LL and A<BKHIGH*0.99 and A<ENTERPRICE,holding,market); sell(A<HH and A<BKHIGH*0.98,holding,market); buyshort(A<LL and NXZ and SKN and A<B and holding=0,VOX,market); SKLOW:=llv(l,ENTERBARS+1); sellshort(A>HH and A>SKLOW*1.01 and A>ENTERPRICE,holding,market); sellshort(A>LL and A>SKLOW*1.02,holding,market); //以下函数无法实现。请使用软件自带的追撤单功能 //SETALLSIGPRICETYPE(TRACING_ORDER); //SETMOVEOPIPRICE(TRACING_ORDER); //以下函数无法实现,请使用交易时候的下单映射功能 //TRADE_OTHER(\'AUTO\'); [此贴子已经被作者于2021/3/25 13:05:02编辑过]
|
-- 作者:你幸福吗 -- 发布时间:2021/3/25 11:43:49 -- 感谢老师!您辛苦了,能不能在代码后面给我加上注释,有的代码看不懂,十分谢谢! |
-- 作者:FireScript -- 发布时间:2021/3/25 16:10:22 -- 哪一句不太懂?不妨单独指出来,全注释下不太现实,有些指标变量的计算 大概只有最初写这个的人才知道是用来干嘛的,因为这些纯指标代码 是个人思路。是个人交易观点的体现,其他人未必能解读。 |
-- 作者:你幸福吗 -- 发布时间:2021/3/25 16:23:47 -- 这一段不是完全看得懂,希望老师能注释一下,谢谢啦!另外这个模型里是不是有偷价或者未来函数啊? LL1:=REF(LLV(L,N*M),N); HC1:=REF(HHV(C,N*M),N); LC1:=REF(LLV(C,N*M),N); HH2:=REF(HHV(H,N*M1),N); LL2:=REF(LLV(L,N*M1),N); HC2:=REF(HHV(C,N*M1),N); LC2:=REF(LLV(C,N*M1),N); SELLR:=IFELSE((HH1-LC1)>=(HC1-LL1),HH1-LC1,HC1-LL1); BUYR:=IFELSE((HH2-LC2)>=(HC2-LL2),HH2-LC2,HC2-LL2); BT:=K1*BUYR; ST:=K2*SELLR; HH:=OO+BT; LL:=OO-ST; YK:=NUMPROFIT(1)<YKJ*(KPCL*3) and NUMPROFIT(2)<YKJ*(KPCL*3) and NUMPROFIT(3)<YKJ*(KPCL*3); lkpd1:=NUMPROFIT(1)<0 and NUMPROFIT(2)<0; lkpd2:=NUMPROFIT(1)<0 and NUMPROFIT(2)>=0; VL:=IFELSE(lkpd1,3*KPCL,IFELSE(lkpd2,KPCL*2,KPCL)); VOX:=IFELSE(YK,VL,KPCL |
-- 作者:FireScript -- 发布时间:2021/3/26 9:31:20 -- 这部分代码也没啥好注释的啊。 HH1:=REF(HHV(H,N*M),N);//调用N周期前的 N*M周期的最高价 下面几个类似 LL1:=REF(LLV(L,N*M),N);HC1:=REF(HHV(C,N*M),N); LC1:=REF(LLV(C,N*M),N); HH2:=REF(HHV(H,N*M1),N); LL2:=REF(LLV(L,N*M1),N); HC2:=REF(HHV(C,N*M1),N); LC2:=REF(LLV(C,N*M1),N); SELLR:=IFELSE((HH1-LC1)>=(HC1-LL1),HH1-LC1,HC1-LL1); BUYR:=IFELSE((HH2-LC2)>=(HC2-LL2),HH2-LC2,HC2-LL2); BT:=K1*BUYR; ST:=K2*SELLR; HH:=OO+BT; LL:=OO-ST; YK:=NUMPROFIT(1)<YKJ*(KPCL*3) and NUMPROFIT(2)<YKJ*(KPCL*3) and NUMPROFIT(3)<YKJ*(KPCL*3);//判断最近三次盈亏是否分别达到某个数值。NUMPROFIT(N)是表示最近N次交易的盈亏 lkpd1:=NUMPROFIT(1)<0 and NUMPROFIT(2)<0;//连亏2次 lkpd2:=NUMPROFIT(1)<0 and NUMPROFIT(2)>=0;//最近一次交易亏损,上上次是盈利 |
-- 作者:你幸福吗 -- 发布时间:2021/4/9 7:28:58 -- 老师好,请问这个开仓为什么不是固定的一手?有时候开1手,有时候开3三手。如何控制开仓手数? |
-- 作者:FireScript -- 发布时间:2021/4/9 8:53:58 -- 他这个下单手数是指标计算出来的。并非固定手数。 你如果要固定手数: VOX:=IFELSE(YK,VL,KPCL); 这里你就把vox改成固定数值就行了。
|