开仓条件:CROSS(C,MA(C,10))AND C>MA(C,5)*1.01;
开仓数值:MAX(REF(MA(C,10),1),(MA(C,5)*1.01));
AA:MA(CLOSE,8);
AB:=MA(CLOSE,13);
平仓条件:CROSS(ab,aa);
buy(开仓条件 and holding=0,1,limit,开仓数值);//开仓信号
sell((CROSS(AB,AA)),holding,market);//平仓信号
好像还不行 图表上没有信号显示
本地正常。
![dvubb 图片点击可在新窗口打开查看](skins/default/filetype/png.gif)
此主题相关图片如下:temp.png
![dvubb 图片点击可在新窗口打开查看](UploadFile/2021-3/20213161165795769.png)
唯一需要注意的是这里这个价格:
buy(开仓条件 and holding=0,1,limit,开仓数值),IGNORECHECKPRICE;//开仓信号
sell((CROSS(AB,AA)),holding,market);//平仓信号
很可能会超出所在K的价格范围,因此需要加一个函数处理下。
KD:=(C>=MA(C,10));//开多条件
PD1:=(C<MA(C,10));//平多条件收盘价小于10均线则平仓
PD2:=C<=AVGENTERPRICE-15*MINDIFF;//平多条件最新价低于买开仓价15个最小变动价位,多头止损
KK:=(C<MA(C,10)) ;//开空条件
PK1:=(C-AVGENTERPRICE)>=15*MINDIFF;//平空条件高于卖开仓价15个最小变动价位,空头止损;
PK2:=(C>=MA(C,10));//平空条件收盘价大于或等于10均线
空止盈:SELLSHORT(PK2,holding,market);//平空信号2
空止损:SELLSHORT(PK1,holding,market);//平空信号1
多止盈:SELL(PD1,holding,market);//平多信号1
开多:BUY(KD AND HOLDING=0,1,THISCLOSE);//开多信号
多止损:SELL(PD2,holding,market);//平多信号2
开空:BUYSHORT(KK AND HOLDING=0,1,THISCLOSE);//开空信号
hd:holding;
你好,如果这个策略做实盘 策略模板需要改进什么吗? 如果每次只有一单 每次开仓5手 平仓5手 实盘策略又是怎么写的?
1、每次只有一单,是指不要连续开仓?你的代码中已经限制了禁止连续开仓了,在开仓条件中用holding=0就可以控制。
2、开仓5手的话,那在开仓语句中,将手数改为5就可以,平仓数量继续用holding即可,例如:
开多:BUY(KD AND HOLDING=0,5,THISCLOSE);//开多信号
开空:BUYSHORT(KK AND HOLDING=0,5,THISCLOSE);//开空信号
平仓条件:CROSS(MA(C,5),C)AND C<MA(C,5)*0.995;
平仓数值: MAX(REF(MA(C,5),1),(MA(C,5)*0.995));
可以用平仓数值 来平仓吗 像前面的开仓数值一样 像这个这样(buy(开仓条件 and holding=0,1,limit,开仓数值)平仓条件你可以自己加上去就行了)
[此贴子已经被作者于2021/3/18 13:01:38编辑过]
1.你想要在满足什么条件下多次开仓呢。有逻辑才能有代码。一般要么是一个条件多次触发同样的语句。这种就是开仓时候不要加HOLDING=0的限制,反复满足就会反复开仓。要么就是写多个语句,作为单独的加仓语句。
2.
先算下保证金占用。
bzj1:abs(AVGENTERPRICE*HOLDING*TACCOUNT(41)*MULTIPLIER);//当前总保证金占用
然后获取下上次空仓时候的资金的值。
lastAsset:VALUEWHEN(HOLDING=0,asset);
用这2个算下比例。开仓时候判断下这个比例是否超出限制了。
逻辑上这样应该就行了。具体实现你可以尝试试下。
我发现这个策略在回测成交上面有个问题 假如我用5分钟回测 但是持仓周期有的一个月 好像成交按照日线级别来平仓的一样?这种情况不会出现在实盘吧