以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- [求助]加仓状态下能否实现分别平仓 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=175874) |
-- 作者:樱桃丸子 -- 发布时间:2020/5/6 11:38:10 -- [求助]加仓状态下能否实现分别平仓 请问图表交易可否实现加仓状态下不同条件的各自平仓?谢谢 |
-- 作者:FireScript -- 发布时间:2020/5/6 11:55:33 -- 能。写多个平仓语句即可。 sell(平仓条件1 and holding>0,平仓量1,market); sell(平仓条件2 and holding>0,平仓量2,market);
|
-- 作者:樱桃丸子 -- 发布时间:2020/5/6 14:34:49 -- 请老师帮忙检查一下下面语句的错误之处,为什么加仓之后会的平仓信号会把首仓的仓位都平掉? 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 |
-- 作者:FireScript -- 发布时间:2020/5/6 14:50:03 -- 你后面平仓的量都是变量s1控制的,这个是计算出来的变值还是一个定值呢?是不是s1的计算有问题。你这里代码没有s1的定义部分,我也不太好判断。 |
-- 作者:樱桃丸子 -- 发布时间:2020/5/6 15:06:56 -- s1:=1; x1:=2; 对不起,漏写了。
|
-- 作者:樱桃丸子 -- 发布时间:2020/5/6 15:09:16 -- 其实就是想实现各自的仓位用不同的平仓条件各自管理出场,这样可以吗? |
-- 作者:FireScript -- 发布时间:2020/5/6 15:18:49 -- 你这个都是定值。信号2的平仓也都是按量平仓的。不可能出现超量的平仓。你看下具体是哪个信号平仓的。你这里每个信号不都是标识了么。 是不是最后全平触发的? |
-- 作者:樱桃丸子 -- 发布时间:2020/5/6 15:26:48 -- 老师能否依照上面的大概思路,写一个例子,主要可以实现在加仓之后用不同的平仓条件分别管理各自仓位的出场,谢谢 |
-- 作者:FireScript -- 发布时间:2020/5/6 16:05:11 -- 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编辑过]
|
-- 作者:樱桃丸子 -- 发布时间:2020/5/7 13:46:44 -- 老师,还是不对呀,如果按照3楼我的写法就会出现加仓之后只平掉了加仓部分的仓位,之后才会平首仓的仓位而且会按照加仓部分的平仓条件处理首仓。 |