金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 1976|回复: 4

请老师帮忙排查一下问题

[复制链接]

43

主题

162

帖子

172

积分

Rank: 4

等级: 专业版

注册:
2022-8-5
曾用名:
发表于 2023-5-11 08:54 | 显示全部楼层 |阅读模式
两个策略交易同一品种时,其中一个策略有一个每次收盘前的平仓语句,有时会将另一个策略的持仓给平掉交易日志显示:
2023-05-10 22:59:08.165    【后台】FU00 TSell 第 195 行 策略:<LUHT> K线:2023.05.10 23:00:00 出现信号
2023-05-10 22:59:08.165    【后台】FU00 TSell 已成功触发下单操作 价格:0.000000 数量:0 类型:1 账户: 品种:FU00
2023-05-10 22:59:08.167    【后台】实际账户持仓 0
2023-05-10 22:59:08.167    【后台】FU00 TSellShort 第 196 行 策略:<LUHT> K线:2023.05.10 23:00:00 出现信号
2023-05-10 22:59:08.168    【后台】FU00 TSellShort 已成功触发下单操作 价格:0.000000 数量:0 类型:1 账户: 品种:FU00
2023-05-10 22:59:08.168    【后台】实际账户持仓 3
2023-05-10 22:59:08.169    【后台】下单已发送
2023-05-10 22:59:08.169    【后台】FU00 运行结束
2023-05-10 22:59:08.170    【下单】已经调整为 实际持仓为 3
2023-05-10 22:59:08.170    【下单】FU00 价0.000000 量3 买卖0 类型1 开平1 账户15365490756 Formula 1
2023-05-10 22:59:08.170    【下单】FU00 账户15365490756 进入平今仓调整 委托:3 总:3 今:3 平:2

代码段:
str:'luht'&stklabel;
SJKC:EXTGBDATA(str);//SJKC是控制手数的全局变量


变量输出

变量输出
截图202305110848461831.png
回复

使用道具 举报

43

主题

162

帖子

172

积分

Rank: 4

等级: 专业版

注册:
2022-8-5
曾用名:
 楼主| 发表于 2023-5-11 08:58 | 显示全部楼层
交易明细
截图202305110857329679.png
截图202305110858211795.png
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-5-11 10:01 | 显示全部楼层
本帖最后由 技术009 于 2023-5-11 10:05 编辑

参数是0时候就是全平的。你传递进去的sjkc为0.那么执行的就是对当前品种的全平的。
sjkc 使用时候,应该就近重新从全局变量里取一次值。否则全局变量值变化了未必会及时更新到sjkc上去。我是觉得你平仓地方判断的sjkc值有可能是没更新之前的值。

另外你2个策略有没有共享一个全局变量?如果有最好是分开为2个全局变量。



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

使用道具 举报

43

主题

162

帖子

172

积分

Rank: 4

等级: 专业版

注册:
2022-8-5
曾用名:
 楼主| 发表于 2023-5-11 10:44 | 显示全部楼层
参数是0时候就是全平的。你传递进去的sjkc为0.那么执行的就是对当前品种的全平的。这句不太理解

1,代码顺序是先平后开的,sjkc取的是开仓手数,应该是平仓后赋值为0;
IF REF(SPPC1,1) OR REF(SPPC2,1) OR REF(SPPC3,1) AND SJKC>0 THEN BEGIN
  TSELL(1,SJKC,MKT);
  TSELLSHORT(1,SJKC,MKT);
  EXTGBDATASET(str,0);
END
IF (BUYCD OR BUYCD1) AND EXTGBDATA(str)=0  AND TISPRVREMAIN(0)=0  AND TTYPEBAR(1,2)<>0 THEN BEGIN
        TBUY(1,KC,MKT);
        EXTGBDATASET(str,KC);
END

2,从交易明细里可以看出,’LUHT‘策略在22:30后平仓,变量输出:

2023-05-10 22:30:05.085           SJKC:2
2023-05-10 22:30:05.085           CJJG:2932
2023-05-10 22:30:05.086           KJJG:2932
2023-05-10 22:30:05.086           TENTERPRICE :2932
2023-05-10 22:30:05.086           BUYD:0
2023-05-10 22:30:05.086           SELLCD:0
2023-05-10 22:30:09.067           SJKC:2
2023-05-10 22:30:09.067           CJJG:2932
2023-05-10 22:30:09.067           KJJG:2932
2023-05-10 22:30:09.067           TENTERPRICE :2932
2023-05-10 22:30:09.071           BUYD:0
2023-05-10 22:30:09.071           SELLCD:0
2023-05-10 22:30:12.083           SJKC:0
2023-05-10 22:30:12.084           CJJG:2932
2023-05-10 22:30:12.084           KJJG:0
2023-05-10 22:30:12.084           TENTERPRICE :2932
2023-05-10 22:30:12.087           BUYD:0
2023-05-10 22:30:12.087           SELLCD:0
2023-05-10 22:30:16.553           SJKC:0
2023-05-10 22:30:16.553           CJJG:2932
2023-05-10 22:30:16.554           KJJG:0
2023-05-10 22:30:16.554           TENTERPRICE :2932
2023-05-10 22:30:16.557           BUYD:0
2023-05-10 22:30:16.557           SELLCD:0

sjkc在最近一次平仓前是被赋值了的,满足条件平仓后变量值由2变成了0,之后就一直是0 ,收盘前平仓的条件也是不满足的,为什么还会平仓?

3,没有共享一个全局变量,变量名也是不一样的
QQ截图20230511085949.png
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-5-11 13:05 | 显示全部楼层

参数是0时候就是全平的。你传递进去的sjkc为0.那么执行的就是对当前品种的全平的。这句不太理解”

就是当你平仓手数写0 的时候,就是全平的含义。

从日志来看,你当时执行的下单手数参数就是0,也就是sjkc是0. 并非下单后重置为0的。

IF REF(SPPC1,1) OR REF(SPPC2,1) OR REF(SPPC3,1)) AND SJKC>0

你这里原本的大于0的判断应该是没限制到的,加个括号应该就可以了。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-11 10:25 , Processed in 0.198936 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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