以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- 关于策略编写问题? (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=145886) |
-- 作者:tanyongde -- 发布时间:2017/1/4 9:07:36 -- 关于策略编写问题? 下面策略没信号,辛苦修改一下。 策略思路: 1 上穿20曰线平空开多,下穿20日线平多开空 2 上穿20日线开多后,再次上穿60日线,这持有多单,只能在下穿60日线平多(小级别建仓,大级别平仓) 2 下穿20日线开空后,再次下穿60日线,这持有空单,只能在上穿60日线平空(小级别建仓,大级别平仓) 3 止盈和止损,两种条件holding<0 and h>=min(enterprice+zsx,kstop1) 和holding>0 and l<=max(enterprice-zsx,dstop1) input:p(10,1,200,1); input:length(10,10,120,10); input:zs(3,1,10,1); input:k1(5,1,15,1); variable:cc = 0;
variable:exitprice1= 0;
variable:enterprice1= 0 ;
line1:ref(ma(close,20),1); line2:ref(ma(close,120),1); tr1 :=max(max((high-low),abs(ref(close,1)-high)),abs(ref(close,1)-low)); atr:=ma(tr1,length); zsx:=ifelse(zs*ref(atr,1)<0.02*ref(c,1),0.02*ref(c,1),zs*ref(atr,1)); enterbars1:=enterbars+1; dstop1:=hhv(h,enterbars1)-k1*ref(atr,1);//平多价 kstop1:=llv(l,enterbars1)+k1*ref(atr,1);//平空价 long1:=cross(h,line1); short1:=cross(line1,l); long2:=cross(h,line2); short2:=cross(line2,l); if holding<0 and cc=-2 then sellshort(1,p,limitr,exitprice1),ignorecheckprice; if holding<0 and cc=-1 then sellshort(1,p,limitr,exitprice1),ignorecheckprice; if holding=0 and cc=0 then buy(1,p,limitr ,enterprice1),ignorecheckprice; if holding>0 and cc=2 then sell(1,p,limitr,exitprice1),ignorecheckprice; if holding>0 and cc=1 then sell(1,p,limitr,exitprice1),ignorecheckprice; if holding=0 and cc=0 then buyshort(1,p,limitr,enterprice1),ignorecheckprice; if holding<0 and cc=-2 and long2 then begin exitprice1:=h+mindiff; cc:=0; end if holding<0 and cc=-1 and short2 then cc:=-2; if holding<0 and cc=-1 and long1 then begin exitprice1:=h+mindiff; cc:=0; end if holding>0 and cc=2 and short2 then begin exitprice1:=l-mindiff; cc:=0; end if holding>0 and cc=1 and long2 then cc:=2; if holding>0 and cc=1 and short1 then begin exitprice1:=l-mindiff; cc:=0; end if holding=0 and long1 and cc=0 then begin enterprice1:=h+mindiff; cc:=1; end if holding=0 and short1 and cc=0 then begin enterprice1:=l+mindiff; cc:=-1; end if holding<0 and h>=min(enterprice+zsx,kstop1) and cc<0 then begin exitprice1:=min(enterprice+zsx,kstop1)+mindiff; cc:=0; end if holding>0 and l<=max(enterprice-zsx,dstop1) and cc>0 then begin exitprice1:=max(enterprice-zsx,dstop1)-mindiff; cc=0; end |
-- 作者:jinzhe -- 发布时间:2017/1/4 9:11:18 -- ,limitr ,enterprice1 开仓下单价格是这样写的, enterprice1的初值是0,所以问题是,用0的价格下单要表达什么意思? |
-- 作者:tanyongde -- 发布时间:2017/1/4 10:16:02 -- 用enterprice1全局变量的意思是:想用限价开平仓,每次上下穿时价格加减mindiff委托 |
-- 作者:tanyongde -- 发布时间:2017/1/4 10:18:02 -- 因为每次上下穿价格不一样 |
-- 作者:jinzhe -- 发布时间:2017/1/4 10:22:47 -- 但是你的条件写的简单,还没有上下穿就触发了,导致了下单价格是0 所以这个下单价格为0你是要表达什么意思? |
-- 作者:jinzhe -- 发布时间:2017/1/4 10:23:57 -- if holding=0 and cc=0 then buy(1,p,limitr ,enterprice1),ignorecheckprice; 你的下单语句是这样写的,cc的初值是0,没持仓时holding也是0,那么就是第一根k就满足了开仓条件,然后以0的价格下单 |
-- 作者:tanyongde -- 发布时间:2017/1/4 10:47:36 -- 我明白你的意思,怎样编写,才能实现策略思路? 策略思路: 1 上穿20曰线平空开多,下穿20日线平多开空 2 上穿20日线开多后,再次上穿60日线,这持有多单,只能在下穿60日线平多(小级别建仓,大级别平仓) 2 下穿20日线开空后,再次下穿60日线,这持有空单,只能在上穿60日线平空(小级别建仓,大级别平仓) 3 止盈和止损,两种条件holding<0 and h>=min(enterprice+zsx,kstop1) 和holding>0 and l<=max(enterprice-zsx,dstop1) |
-- 作者:tanyongde -- 发布时间:2017/1/4 10:48:54 -- 策略思路核心是:小级别建仓,大级别平仓 |
-- 作者:jinzhe -- 发布时间:2017/1/4 10:55:18 -- 什么是“小级别建仓,大级别平仓”? |
-- 作者:tanyongde -- 发布时间:2017/1/4 11:30:22 -- 1 就是小级别建仓后,满足大级别建仓条件,只能按大级别平仓条件平仓,不再按小级别条件平仓 2 小级别建仓后,不满足大级别建仓条件,按小级别条件平仓.
|