以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- 这个反手模型可以写出来吗,我没写出来呢 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=150064) |
|
-- 作者:gogokuer -- 发布时间:2017/4/5 15:17:29 -- 这个反手模型可以写出来吗,我没写出来呢 满足条件开多或者开空后,亏损1%,平仓然后反手,是上次开仓数量的2倍;盈利超过1%后,回撤50%,平所有仓。怎么我写的不对呢。。。 M:=1; VARIABLE:AA:=0; N:=1; KD:CROSS(MA(C,5),MA(C,10)); KK:CROSS(MA(C,10),MA(C,5)); DTKS:=HOLDING>0 AND C<=ENTERPRICE-M/100*ENTERPRICE; KTKS:=HOLDING<0 AND C>=ENTERPRICE+M/100*ENTERPRICE; DTYL:=HOLDING>0 AND HHV(H,ENTERBARS)-AVGENTERPRICE>M/100*ENTERPRICE&&c<ENTERPRICE+(HHV(H,ENTERBARS)-c)/2; KTYL:=HOLDING<0 AND llV(l,ENTERBARS)-AVGENTERPRICE>M/100*ENTERPRICE&&c>ENTERPRICE-(llV(l,ENTERBARS)-c)/2; if KD then begin BUY(AA=0&&HOLDING=0,N,MARKET); AA:=N; END if KK THEN BEGIN BUYSHORT(AA=0&&HOLDING=0,N,MARKET); AA:=-N; END IF DTKS AND HOLDING>0 THEN BEGIN sell(AA>0,0,MARKET); BUYSHORT(AA>0,2,MARKET); AA:=ABS(AA)*(-2); END IF DTYL AND HOLDING>0 THEN BEGIN SELL(AA>0,0,MARKET); AA:=0; END IF KTKS AND HOLDING<0 THEN BEGIN sellshort(AA<0,0,MARKET); BUY(AA<0,4,MARKET); AA:=ABS(AA)*2; END IF KTYL AND HOLDING<0 THEN BEGIN SELLSHORT(AA<0,0,MARKET); AA:=0; END 资产:asset,noaxis; 可用现金:cash(0),linethick0; |
|
-- 作者:qq代人发帖 -- 发布时间:2017/4/5 15:44:41 -- //开多为例 VARIABLE:n=1,x=0;//n是开仓手数 if kd and holding=0 then buy(1,n,marketr); if (c-ENTERPRICE)/enterprice>=0.01 and holding>0 then begin //盈利超过1%平仓,手数赋值为2倍 sell(1,holding,marketr); n:=2*n; x:=1; //记录盈利1% end hh:=hhv(h,enterbars+1); if x=1 and 2*(hh-c)>=hh-enterprice and holding>0 then begin //盈利超过1%后,回撤50% sell(1,holding,marketr); n:=1; x:=0; end |
|
-- 作者:gogokuer -- 发布时间:2017/4/5 16:08:06 --
|
|
-- 作者:qq代人发帖 -- 发布时间:2017/4/5 16:45:59 -- 平仓后当天不再开仓?还是永远不要再开仓? |
|
-- 作者:gogokuer -- 发布时间:2017/4/5 17:07:54 -- 盈利1%后,回撤50%,然后平仓后,满足KD或者KK后才开仓。不反手了。 |
|
-- 作者:qq代人发帖 -- 发布时间:2017/4/5 17:24:29 -- 参考2楼写法 |
|
-- 作者:gogokuer -- 发布时间:2017/4/6 9:22:36 -- 为什么我改成这样依然运行不了我的那个意思的呢?就是说盈利1%后,盈利回撤50%平掉之前的所有仓;亏损1%后,如果之前开仓是N手的,反手做2N手,直到亏第三次,那就不反手了,直接平仓,怎么下面的源码只能运行一段时间呢? VARIABLE:AA:=0; KD:CROSS(MA(C,5),MA(C,10)); KK:CROSS(MA(C,10),MA(C,5)); DTKS:=HOLDING>0 AND C<=ENTERPRICE-M/100*ENTERPRICE; KTKS:=HOLDING<0 AND C>=ENTERPRICE+M/100*ENTERPRICE; DTYL:=HOLDING>0 AND HHV(H,ENTERBARS+1)-AVGENTERPRICE>M/100*ENTERPRICE&&c<ENTERPRICE+(HHV(H,ENTERBARS)-c)/2; KTYL:=HOLDING<0 AND llV(l,ENTERBARS+1)-AVGENTERPRICE<-M/100*ENTERPRICE&&c>ENTERPRICE-(llV(l,ENTERBARS)-c)/2; m:=1; n:=1; if KD then begin BUY(AA=0&&HOLDING=0,1,MARKETR); AA:=1; END if KK THEN BEGIN BUYSHORT(AA=0&&HOLDING=0,2,MARKETR); AA:=-1; END //开仓 IF DTKS AND HOLDING>0 THEN BEGIN sell(AA=1,HOLDING,MARKETR); BUYSHORT(AA=1,2,MARKETR); AA:=-2; END IF DTYL AND HOLDING>0 THEN BEGIN SELL(AA=1,HOLDING,MARKETR); AA:=0; END IF KTKS AND HOLDING<0 THEN BEGIN sellshort(AA=-1,HOLDING,MARKETR); BUY(AA=-1,2,MARKETr); AA:=2; END IF KTYL AND HOLDING<0 THEN BEGIN SELLSHORT(AA=-1,HOLDING,MARKETR); AA:=0; END //一次平 IF DTKS AND HOLDING>0 THEN BEGIN sell(AA=2,HOLDING,MARKETR); BUYSHORT(AA=2,4,MARKETR); AA:=-4; END IF DTYL AND HOLDING>0 THEN BEGIN SELL(AA=2,HOLDING,MARKETR); AA:=0; END IF KTKS AND HOLDING<0 THEN BEGIN sellshort(AA=-2,HOLDING,MARKETr); BUY(AA=-2,4,MARKETr); AA:=4; END IF KTYL AND HOLDING<0 THEN BEGIN SELLSHORT(AA=-2,0,MARKETR); AA:=0; END //二次平 IF DTKS AND HOLDING>0 THEN BEGIN sell(AA=4,HOLDING,MARKETR); AA:=0; END IF DTYL AND HOLDING>0 THEN BEGIN SELL(AA=4,HOLDING,MARKETR); AA:=0; END IF KTKS AND HOLDING<0 THEN BEGIN sellshort(AA=-4,HOLDING,MARKETr); AA:=0; END IF KTYL AND HOLDING<0 THEN BEGIN SELLSHORT(AA=-4,0,MARKETR); AA:=0; END [此贴子已经被作者于2017/4/6 9:22:54编辑过]
|
|
-- 作者:qq代人发帖 -- 发布时间:2017/4/6 16:13:22 -- 上边有点问题,套用下边这个 //开多为例 [此贴子已经被作者于2017/4/6 16:14:23编辑过]
|
|
-- 作者:gogokuer -- 发布时间:2017/4/6 17:02:15 -- 为什么写出来之后,最大的开仓手数只有2手? KD:CROSS(MA(C,5),MA(C,10)); KK:CROSS(MA(C,10),MA(C,5)); //开多为例 VARIABLE:x=0;//n是开仓手数 n:=1; if kd and holding=0 then buy(1,n,marketr); if (enterprice-c)/enterprice>=0.01 and holding>0 then begin //亏损超过1%平仓,平仓反手开仓以前的2倍 sell(1,holding,marketr); buyshort(holding=0,2*n,marketr); end if (c-enterprice)/enterprice>=0.01 then x:=1;//记录盈利超过1% hh:=hhv(h,enterbars+1); if x=1 and 2*(hh-c)>=hh-enterprice and holding<0 then begin //盈利超过1%后,回撤50% sellshort(1,holding,marketr); n:=1; x:=0; end if kk and holding=0 then buyshort(1,n,marketr); if (c-enterprice)/enterprice>=0.01 and holding<0 then begin //亏损超过1%平仓,平仓反手开仓以前的2倍 sellshort(1,holding,marketr); buy(holding=0,2*n,marketr); end if (c-enterprice)/enterprice<=-0.01 then x:=1;//记录盈利超过1% ll:=llv(l,enterbars+1); if x=1 and 2*(c-ll)>=enterprice-ll and holding>0 then begin //盈利超过1%后,回撤50% sell(1,holding,marketr); n:=1; x:=0; end |
|
-- 作者:wenarm -- 发布时间:2017/4/6 17:11:39 -- 因为n始终都是1. |