金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 5268|回复: 9

HOLDING =0 的问题?

[复制链接]

79

主题

190

帖子

200

积分

Rank: 2

等级: 标准版

注册:
2022-1-10
曾用名:
发表于 2022-11-30 23:10 | 显示全部楼层 |阅读模式
//交易条件
PKKDCOND:=(CROSS(FRAMAOB,UP) AND HOLDING=0) OR ( HOLDING<0 AND C > ENTERPRICE + EX*MADX ) OR ( HOLDING<0 AND C > ELLV + EX*MADX ); //
PDKKCOND:=(CROSS(DOWN,FRAMAOB) AND HOLDING=0) OR  ( HOLDING>0 AND C < ENTERPRICE -EX*MADX ) OR ( HOLDING>0 AND C <EHHV -EX*MADX ) ; //  




//交易条件
PKKDCOND:=CROSS(FRAMAOB,UP) OR ( HOLDING<0 AND C > ENTERPRICE + EX*MADX ) OR ( HOLDING<0 AND C > ELLV + EX*MADX ); //

PDKKCOND:=CROSS(DOWN,FRAMAOB) OR  ( HOLDING>0 AND C < ENTERPRICE -EX*MADX ) OR ( HOLDING>0 AND C <EHHV -EX*MADX ) ; //  




带HOLDING=0, 极差, 为什么会不一样? 理论上,写不写HOLDING =0 是一样的。

HOLDING 0 有.JPG
HOLDING 0 无.JPG
回复

使用道具 举报

38

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2022-11-30 23:32 | 显示全部楼层
怎么可能会一样。你holding放在主干条件中。单独看这个条件,
PKKDCOND:=(CROSS(FRAMAOB,UP) AND HOLDING=0) ;//有它的情况下,以持有空仓情况为例,平空条件在交叉时,holding=0是不成立的。在这个位置是不会发生反手开平的动作的。
没有它时,则会直接平空反手。

换句话说:你上面的条件,一旦开仓后,之后的平仓都是依靠后面两个or条件完成的。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

79

主题

190

帖子

200

积分

Rank: 2

等级: 标准版

注册:
2022-1-10
曾用名:
 楼主| 发表于 2022-12-1 07:58 | 显示全部楼层
谢谢
回复

使用道具 举报

79

主题

190

帖子

200

积分

Rank: 2

等级: 标准版

注册:
2022-1-10
曾用名:
 楼主| 发表于 2022-12-2 15:54 | 显示全部楼层
//交易条件
PKKDCOND:=(CROSS(FRAMAOB,UP) AND HOLDING=0) OR ( HOLDING<0 AND C > ENTERPRICE + KS*MAD ) OR ( HOLDING<0 AND C > ELLV + X*KS*MAD ); //
PDKKCOND:=(CROSS(DOWN,FRAMAOB) AND HOLDING=0) OR  ( HOLDING>0 AND C < ENTERPRICE -KS*MAD ) OR ( HOLDING>0 AND C <EHHV -X*KS*MAD ) ; //  

//交易指令
SELLSHORT(PKKDCOND AND HOLDING<0,HOLDING,MARKET);
BUY(PKKDCOND AND HOLDING=0,SS,MARKET);
SELL(PDKKCOND AND HOLDING>0,HOLDING,MARKET);
BUYSHORT(PDKKCOND AND HOLDING=0,SS,MARKET);

请问交易指令里的 HOLDING=0 没发挥作用吗?
回复

使用道具 举报

70

主题

191

帖子

301

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-18
曾用名:
发表于 2022-12-2 16:01 | 显示全部楼层
PKKDCOND,PDKKCOND  你这个里面已经有HOLDING=0的控制了
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

79

主题

190

帖子

200

积分

Rank: 2

等级: 标准版

注册:
2022-1-10
曾用名:
 楼主| 发表于 2022-12-2 17:48 | 显示全部楼层
我的原意是: 原来的开仓指令里面也有HOLDING=0, 为什么有差别?
回复

使用道具 举报

79

主题

190

帖子

200

积分

Rank: 2

等级: 标准版

注册:
2022-1-10
曾用名:
 楼主| 发表于 2022-12-2 20:17 | 显示全部楼层
HOLING=0, 在开仓指令里是默认的, 我的问题:主干里的权限是不是大于 交易指令里的权限?我的原始问题就是这个问题。
回复

使用道具 举报

38

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2022-12-2 21:13 | 显示全部楼层
不是,这个归根到底,其实就是条件嵌套造成的逻辑差异。

你上的代码简化后(把所有的or之类的干掉。你可以认为总条件是c>o)就是这个结构
总条件中不含holding=0时:
[PEL] 复制代码
if  c>o then begin
       if holding<0 then begin
            sellshort(1,1,market);
       end

    if holding=0 then begin
            buy(1,1,market);
   end
end


那么上述代码整体逻辑执行时,当c>o时(无论是否有持仓都能进入判断体内),之后才判断第2行和第6行的子条件是否成立。这种情况类似于,无论你带不带礼物都能到正常进入朋友家的小区大门,然后在朋友家的2个孩子分别判断礼物是不是他们喜欢的。如果喜欢才给他们自己的房间开门。

总条件中含holding=0时:
[PEL] 复制代码
if  c>o and holding=0 then begin
       if holding<0 then begin
            sellshort(1,1,market);
       end

    if holding=0 then begin
            buy(1,1,market);
   end
end

你想下,总条件中有holding=0的限制时,当总条件成立时,但是除非你是第一次空仓时才能进入到语句内,之后因为holding不再等于0.  逻辑不可能再进入到子判断体中。
相当于朋友家的其中一个孩子,先在小区大门口等着你,发现你带的礼物不是他要的,直接就把你拒之小区大门门外。即使你手里有另外几个孩子喜欢的礼物,关键你根本没有到朋友家里呢。

条件嵌套的整体过程是:
外部条件先被判断,内部条件后被判断,就像家里总闸和卧室电闸的关系。



金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

79

主题

190

帖子

200

积分

Rank: 2

等级: 标准版

注册:
2022-1-10
曾用名:
 楼主| 发表于 2022-12-5 15:43 | 显示全部楼层
我测了所有的品种, 没 HOLDING=0, 回测效果好了很多。弄不懂是不是其他指标在这个问题上的反应不一样。
回复

使用道具 举报

38

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2022-12-5 16:13 | 显示全部楼层
本帖最后由 技术006 于 2022-12-5 16:29 编辑

这是因为你逻辑不一样了。
1.在主干条件中带有HOLDING=0和不带有holidng=0。两者只在第一次开仓位置会一样。(原因是第一次开仓前holding=0)。[这点您能理解吧]
2.当你本身就持有仓位时,那么当下面条件中,红色成立时,而绿色部分不成立时。就会产生本质区别。
红色部分成立 and HOLDING=0,就变成了不成立(因为holing有持仓),无法进入判断体内。
红色部分成立 (不带HOLDING=0) 那么就一定会进入判断体内。
(CROSS(FRAMAOB,UP) AND HOLDING=0) OR ( HOLDING<0 AND C > ENTERPRICE + KS*MAD ) OR ( HOLDING<0 AND C > ELLV + X*KS*MAD );

关于HOLDING=0在下单语句内的解释:
如果HOLDING=0在判断体之内,等同于是内部分支。内部结构的执行过程以平空开多为例:
当主干条件成立时,执行到sellshort语句,如果HOLDING<0则平空,否者不执行。代码如下:
sellshort(HOLDING<0,1,MARKET)==》等价于
if  HOLDING<0 then  begin
     sellshort(1,1,MARKET)
end
之后才到buy语句,
buy(HOLDING=0,1,MARKET)==》等价于
if  HOLDING=0 then  begin
     buy(1,1,MARKET)
end
这两个if是并列的。只要满足主干条件,这两个if都会分别判断一次(无论是否成立)。
你上面的问题:你自己从第一个信号位置开始逐个对比分析,就会找到差异,但是你的条件有点多,建议你用我前面给你的代码,也能分析出逻辑上的差别。两个不同的逻辑结果自然不同。


金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-9-2 04:43 , Processed in 0.109242 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表