以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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的情况。就是这么个区分了。 |