请问图表交易可否实现加仓状态下不同条件的各自平仓?谢谢
能。写多个平仓语句即可。
sell(平仓条件1 and holding>0,平仓量1,market);
sell(平仓条件2 and holding>0,平仓量2,market);
请老师帮忙检查一下下面语句的错误之处,为什么加仓之后会的平仓信号会把首仓的仓位都平掉?
VARIABLE:w:=0,mkwz1:=0,mkwz2:=0;
开空条件:=ama<ama1&&cross(下轨,c);
if 开空条件 and holding=0 then
begin
空1:BUYSHORT(1,x1,market);
w:=1;
mkwz1:=close;
hh1:=l;
end
if l<hh1 then hh1:=L;
cz1:=intpart(mkwz1+(mkwz1*mm));
初止条件1:=c>=cz1;
if w=1 then begin
止5:sellshort(a15,x1,MARKETR );
止损1:sellshort(初止条件1,x1,MARKET);
end
if w=1 then begin
if z2<=41z then
begin
止4:sellshort(b41,x1, marketr);
end
else begin
if a14 then begin
盈14:sellshort(1,x1,marketr);
end
end
end
if w=1 then begin
if z5<=31z then
begin
止3:sellshort(b31,x1, marketr);
end
else begin
if a13 then begin
盈13:sellshort(1,x1,marketr);
end
end
end
if w=1 then begin
if z10<=21z then
begin
止2:sellshort(b21,x1, marketr);
end
else begin
if a12 then begin
盈12:sellshort(1,x1,marketr);
end
end
end
if w=1 then begin
if z20<=11d then
begin
止1:sellshort(b11,x1, marketr);
end
else begin
if a11 then begin
盈11:sellshort(1,x1,marketr);
end
end
end
//第二仓信号;
yy:=intpart(mkwz1-mkwz1*MM);
jc1:=hh1<=yy;
if w=1 and jc1 and 开空条件 then
begin
空2:BUYSHORT(1,s1,market);
w:=2;
hh2:=l;
mkwz2:=c;
end
if l<hh2 then hh2:=l;
cz:=intpart(mkwz2+(mkwz2*0.04));
初止条件:=c>=cz;
全平条件:=ama>ama1;
if w=2 then begin
止损:sellshort(初止条件,s1,MARKET);
止盈5:sellshort(a5,s1,MARKETR );
end
if w=2 then begin
if z2<=4z then
begin
止盈4:sellshort(b4,s1, marketr);
end
else begin
if a4 then begin
盈4:sellshort(1,s1,marketr);
end
end
end
if w=2 then begin
if z5<=3z then
begin
止盈3:sellshort(b3,s1, marketr);
end
else begin
if a3 then begin
盈3:sellshort(1,s1,marketr);
end
end
end
if w=2 then begin
if z10<=2z then
begin
止盈2:sellshort(b2,s1, marketr);
end
else begin
if a2 then begin
盈2:sellshort(1,s1,marketr);
end
end
end
if w=2 then begin
if z20<=1d then
begin
止盈1:sellshort(b1,s1, marketr);
end
else begin
if a1 then begin
盈1:sellshort(1,s1,marketr);
end
end
end
if holding<0 and 全平条件 then begin
全平:sellshort(1,0,market);
w:=0;
end
你后面平仓的量都是变量s1控制的,这个是计算出来的变值还是一个定值呢?是不是s1的计算有问题。你这里代码没有s1的定义部分,我也不太好判断。
其实就是想实现各自的仓位用不同的平仓条件各自管理出场,这样可以吗?
你这个都是定值。信号2的平仓也都是按量平仓的。不可能出现超量的平仓。你看下具体是哪个信号平仓的。你这里每个信号不都是标识了么。 是不是最后全平触发的?
老师能否依照上面的大概思路,写一个例子,主要可以实现在加仓之后用不同的平仓条件分别管理各自仓位的出场,谢谢
VARIABLE:mark1:=0,mark2:=0;//开仓和加仓用2个不同的全局变量来做控制。加仓是在首次开仓后有仓位基础上执行。
input:n(9,1,100,10),p1(3,2,40,4),p2(3,2,40,4);//参数设置
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:=SMA(RSV,P1,1);
D:=SMA(K,P2,1);
J:=3*K-2*D,NODRAW;
input:p(26,20,100,8),s(12,5,40,4),m(9,2,60,6);
DIFF :=EMA(CLOSE,S) - EMA(CLOSE,P);
DEA :=EMA(DIFF,M);
MACD1 :=2*(DIFF-DEA), COLORSTICK;
macdjc:cross(diff,dea),NODRAW;//macd金叉
macdsc:cross(dea,diff),NODRAW;
kdjjc:cross(k,d),NODRAW;//kdj金叉
kdjsc:cross(d,k),NODRAW;
s1:=1;
s2:=2;
if macdjc and holding=0 then
begin
开1:buy(1,s1,market);
mark1:=1;
end
if macdsc and holding>0 and mark1=1 then
begin
平1:sell(holding>0,s1,market);
mark1:=0;//平仓时候重置全局变量
end
if kdjjc and holding>0 and mark2=0 then //加仓部分
begin
开2:buy(1,s2,market);
mark2:=1;
end
if kdjsc and holding>0 and mark2=1 then
begin
平2:sell(holding>0,s2,market);
mark2:=0; //平仓时候重置全局变量
end
if holding>0 and cross(ma(c,50),ma(c,5)) then begin
全平:sell(1,0,market);
mark1:=0;//平仓时候重置全局变量
mark2:=0;//平仓时候重置全局变量
end
[此贴子已经被作者于2020/5/7 14:29:29编辑过]
老师,还是不对呀,如果按照3楼我的写法就会出现加仓之后只平掉了加仓部分的仓位,之后才会平首仓的仓位而且会按照加仓部分的平仓条件处理首仓。