以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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
--  
盈利超过1%后,回撤50%,平所有仓,平所有仓后不用再开仓的哦。

--  作者: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
--  

上边有点问题,套用下边这个

//开多为例
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

[此贴子已经被作者于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.