以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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=182094)

--  作者:HOPEWX
--  发布时间:2020/9/8 13:10:18
--  [求助]怎样控制这个里面加仓的时候重复开仓?
设计的思路是,MA3上穿MA7时,开多,如果连续2天收盘价大于MA17,加多。
第一次平多是MA7下穿MA3时,平一半多;连续2天收盘价小于MA17时,多全平;
反过来一样,但是实际运行中发现,会不停的加仓开多开空,请问这是哪里写错了吗?请指教,谢谢

VARIABLE:mark:=0;
ss:2;//
MA3:=MA(CLOSE,3);    //
MA7:=MA(CLOSE,7);   //
MA17:=MA(CLOSE,17);

KD1:=CROSS(MA3,MA7);
KD2:=EVERY(C>MA17,2);

KK1:=CROSS(MA7,MA3);
KK2:=EVERY(C<MA17,2);

开多1:KD1 and mark>=0;
开空1:KK1 and mark<=0;

加多:KD2;
加空:KK2;

平多1:KK1;
平空1:KD1;

全平多:KK2;
全平空:KD2;

//
if 开多1  then  begin
buy(holding=0,ss,market);
end

if 开空1 then 
begin
buyshort(holding=0,ss,market);
end

if 加多  then  begin
buy(holding>0,ss,market);
end

if 加空 then 
begin
buyshort(holding<0,ss,market);
end
 
if 平多1  and holding>0 then 
begin
sell(holding>0,holding/2,market);
mark:=-1;
end

if 平空1 and holding<0 then 
begin
sellshort(holding<0,holding/2,market);
mark:=1;
end

if 全平多  and holding>0 then 
begin
sell(holding>0,holding,market);
mark:=-1;
end

if 全平空 and holding<0 then 
begin
sellshort(holding<0,holding,market);
mark:=1;
end

--  作者:HOPEWX
--  发布时间:2020/9/8 13:12:33
--  
应该如何控制,加仓只加一次?

第一次平多或平空只平一半,后面的全平我这样写的可对?

--  作者:FireScript
--  发布时间:2020/9/8 13:18:30
--  
 “如果连续2天收盘价大于MA17”  这个条件
基本上只要是个上涨趋势,就会触发很多次, 反正空头的条件也是一样。



--  作者:HOPEWX
--  发布时间:2020/9/8 13:22:46
--  
是的,我的意思是,控制只加一次该如何用语句来控制呢?请您指点,谢谢
--  作者:FireScript
--  发布时间:2020/9/8 13:35:49
--  
 VARIABLE:mark:=0,mark1:=0,mark2:=0;
ss:2;//
MA3:=MA(CLOSE,3);    //
MA7:=MA(CLOSE,7);   //
MA17:=MA(CLOSE,17);

KD1:=CROSS(MA3,MA7);
KD2:=EVERY(C>MA17,2);

KK1:=CROSS(MA7,MA3);
KK2:=EVERY(C<MA17,2);

开多1:KD1 and mark>=0;
开空1:KK1 and mark<=0;

加多:KD2;
加空:KK2;

平多1:KK1;
平空1:KD1;

全平多:KK2;
全平空:KD2;

if 加多 and mark1=0  then  begin
加多仓:buy(holding>0,ss,market);
mark1:=mark1+1;
end

if 加空 and mark2=0 then
begin
加空仓:buyshort(holding<0,ss,market);
mark2:=mark2+1;
end



if 开多1  then  begin
buy(holding=0,ss,market);
mark1:=0;
end

if 开空1 then
begin
buyshort(holding=0,ss,market);
mark2:=0;
end


 
if 平多1  and holding>0 then
begin
sell(holding>0,holding/2,market);
mark:=-1;
end

if 平空1 and holding<0 then
begin
sellshort(holding<0,holding/2,market);
mark:=1;
end

if 全平多  and holding>0 then
begin
sell(holding>0,holding,market);
mark:=-1;
end

if 全平空 and holding<0 then
begin
sellshort(holding<0,holding,market);
mark:=1;
end


用全局变量控制下。另外我把加仓代码置开仓前面了。

--  作者:FireScript
--  发布时间:2020/9/8 13:37:42
--  
还有就是这个加仓,我只限制在开仓之后的加仓。如果中间减仓后又满足 加仓的条件也是忽略掉的。
--  作者:HOPEWX
--  发布时间:2020/9/8 15:29:14
--  
以下是引用FireScript在2020/9/8 13:37:42的发言:
还有就是这个加仓,我只限制在开仓之后的加仓。如果中间减仓后又满足 加仓的条件也是忽略掉的。
谢谢谢谢,我来测试下


--  作者:FireScript
--  发布时间:2020/9/8 16:03:14
--  
 好的。
--  作者:HOPEWX
--  发布时间:2020/9/8 16:13:27
--  
请问下,为什么要把加仓的代码放到开仓前面呢?这样会不会有些就不开了?
--  作者:FireScript
--  发布时间:2020/9/8 16:14:33
--  
也可以放在后面。只是这样 会有加仓 开仓在一个K的情况。就是这么个区分了。