以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- 为什么这样不对,总是1 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=184427) |
-- 作者:haizxj -- 发布时间:2021/2/28 17:29:12 -- 为什么这样不对,总是1 思路是这样的,没亏损之前,一直用一手开平,如果亏损一次,则加一次手数,具体程序如下,可是发现一直是0,错在哪? VARIABLE: ss:=1; if NUMSEQLOSS=1 then ss:=1; if NUMSEQLOSS=2 then ss:=2; if NUMSEQLOSS=3 then ss:=4; if NUMSEQLOSS=4 then ss:=8; if NUMSEQLOSS>=4 then ss:=16; ma5:ma(c,5); ma10:ma(c,10); KD:ma5>ma10; PD:ma5<ma10; kk:pd; pk:kd; IF KD THEN BUY(1,ss,MARKET); IF kk THEN BUYSHORT(1,ss,MARKET); IF pd THEN SELL(1,ss,MARKET); IF pk THEN SELLSHORT(1,ss,MARKET);
|
-- 作者:FireScript -- 发布时间:2021/3/1 9:13:41 -- 你应该这样做: 在平仓的地方做判断,平仓后判断上笔盈亏。然后对全局变量做操作即可。 IF pd THEN
begin SELL(1,ss,MARKET); if NUMPROFIT(1)<0 then ss:=ss+1; end |
-- 作者:haizxj -- 发布时间:2021/3/1 11:54:57 -- VARIABLE: ss:=1; ma5:ma(c,5); ma10:ma(c,10); KD:ma5>ma10; PD:ma5<ma10; kk:pd; pk:kd; if pd THEN BEGIN
sell(1,ss,MARKET); if NUMSEQLOSS=1 then ss:=1; if NUMSEQLOSS=2 then ss:=2; if NUMSEQLOSS=3 then ss:=4; if NUMSEQLOSS=4 then ss:=8; if NUMSEQLOSS>=4 then ss:=16; end if pk THEN BEGIN
sellshort(1,ss,MARKET); if NUMSEQLOSS=1 then ss:=1; if NUMSEQLOSS=2 then ss:=2; if NUMSEQLOSS=3 then ss:=4; if NUMSEQLOSS=4 then ss:=8; if NUMSEQLOSS>=4 then ss:=16; end IF KD THEN BUY(1,ss,MARKET); IF kk THEN BUYSHORT(1,ss,MARKET); 这样还是不行, 如果用NUMPROFIT(1)<0 连赔四次,SS变化了
|
-- 作者:haizxj -- 发布时间:2021/3/1 11:58:25 -- VARIABLE: ss:=1; ma5:ma(c,5); ma10:ma(c,10); KD:ma5>ma10; PD:ma5<ma10; kk:pd; pk:kd; if pd THEN BEGIN
sell(1,ss,MARKET); if NUMPROFIT(1) then ss:=1; if NUMPROFIT(2) then ss:=2; if NUMPROFIT(3) then ss:=4; if NUMPROFIT(4) then ss:=8; if NUMPROFIT(5) then ss:=16; end if pk THEN BEGIN
sellshort(1,ss,MARKET); if NUMPROFIT(1) then ss:=1; if NUMPROFIT(2) then ss:=2; if NUMPROFIT(3) then ss:=4; if NUMPROFIT(4) then ss:=8; if NUMPROFIT(5) then ss:=16; end IF KD THEN BUY(1,ss,MARKET); IF kk THEN BUYSHORT(1,ss,MARKET); 如果这样全变成4
|
-- 作者:FireScript -- 发布时间:2021/3/1 12:02:20 -- NUMSEQLOSS 表示的是从历史到现在的连亏次数。 你亏10次 可能算一次连亏也可能是2次 都有可能。所以你上面那个代码 “ if NUMSEQLOSS=1 then ss:=1; if NUMSEQLOSS=2 then ss:=2; if NUMSEQLOSS=3 then ss:=4; if NUMSEQLOSS=4 then ss:=8; if NUMSEQLOSS>=4 then ss:=16; ” 是不对的。你不能用这个函数,也不能用这样的逻辑处理。
|
-- 作者:FireScript -- 发布时间:2021/3/1 12:05:39 -- http://www.weistock.com/bbs/dispbbs.asp?BoardID=4&ID=67366&skin=0 看这里的五楼吧。
|
-- 作者:haizxj -- 发布时间:2021/3/1 12:56:29 -- VARIABLE: n:=0; VARIABLE: ss=1; ma5:ma(c,5); ma10:ma(c,10); KD:ma5>ma10; PD:ma5<ma10; kk:pd; pk:kd; if pd THEN BEGIN
sell(1,ss,MARKET); if NUMPROFIT(1)>0 then n:=1; if NUMPROFIT(1)<0 then n:=n+1; end if pk THEN BEGIN
sellshort(1,ss,MARKET); if NUMPROFIT(1)>0 then n:=1; if NUMPROFIT(1)<0 then n:=n+1; end if n:=1 then ss:=1; if n:=2 then ss:=2; if n:=3 then ss:=4; if n:=4 then ss:=8; if n>=5 then ss:=16; IF KD THEN BUY(1,ss,MARKET); IF kk THEN BUYSHORT(1,ss,MARKET); 在图表上这里没有16,最大是8,而且那个五楼也是错的,要有冒号
|
-- 作者:FireScript -- 发布时间:2021/3/1 13:15:51 -- 你的平仓要改成全平 sellshort(1,holding,MARKET); sell(1,holding,MARKET); 否则 平仓盈亏那个函数无法统计的。它是按照全平处理的。
|
-- 作者:haizxj -- 发布时间:2021/3/1 13:27:41 -- 怎么平仓手数变成60,70手呢 我意思是如果连亏4次以上,就是五次以上时,按16手计算,不再增加,因为 实际没这么多钱
|
-- 作者:FireScript -- 发布时间:2021/3/1 13:33:57 -- 因为你条件是一直在满足,一直在加仓的。。 KD:ma5>ma10; PD:ma5<ma10; kk:pd; pk:kd; 你这几个条件满足了就是连续多个周期都会满足的。你累积到平仓时候,当然手数很多啦。 |