金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 74|回复: 12

VARIABLE 变量问题

[复制链接]

9

主题

38

帖子

38

积分

Rank: 4

等级: 专业版

注册:
2025-12-17
曾用名:
发表于 2026-6-10 22:27 | 显示全部楼层 |阅读模式
我在后台程序化策略里用了 VARIABLE 变量来追踪价格穿透布林上下轨的极值

VARIABLE: PIERCE_LO=99999, PIERCE_HI=0;
IF LOW <= BB_LOWER AND LOW < PIERCE_LO THEN PIERCE_LO := LOW;
IF HIGH >= BB_UPPER AND HIGH > PIERCE_HI THEN PIERCE_HI := HIGH;

  发现一个问题:今天晚上启动策略后,PIERCE_LO 和 PIERCE_HI 的值是昨天甚至更早的数据残留。比如今天(6月10日)乙二醇 PIERCE_LO=4335,但这个穿透是好几天前发生的,今天根本没穿过下轨。导致开仓条件里 PIERCE_LO < 99999 判断为真,误开了仓位。

这个是什么原因呢?
有没有办法让 VARIABLE 只在策略内根据 K 线数据自行重算、避免这种情况呢?


2026-06-10 22:05:03  20500  JC=0  PL=4335.00  kd=0
2026-06-10 22:05:03  21000  JC=1  PL=4335.00  kd=1
2026-06-10 22:05:08  21000  JC=1  PL=4335.00  kd=1  H=10


回复

使用道具 举报

1

主题

124

帖子

124

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-27
曾用名:
发表于 2026-6-11 08:54 | 显示全部楼层
后台程序化,要使用 GLOBALVARIABLE,(图表用VARIABLE)
请您更改为GLOBALVARIABLE,再试试。
回复

使用道具 举报

2

主题

6502

帖子

6502

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2026-6-11 08:57 | 显示全部楼层
VARIABLE 定义的全局变量是有历史值的。在历史K上运行一遍后,它会在历史K上根据代码逻辑产生历史的值 并延续下来。它通常用在图表模型里。  

后台里通常使用GLOBALVARIABLE,如果需要落地保存就用 EXTGBDATA。 他们都只有最新值,没有历史值
回复

使用道具 举报

9

主题

38

帖子

38

积分

Rank: 4

等级: 专业版

注册:
2025-12-17
曾用名:
 楼主| 发表于 2026-6-11 09:14 | 显示全部楼层
VARIABLE 在历史 K 线回放时逐根初始化并延续,是不是GLOBALVARIABLE 初始值在策略加载那一刻赋值一次? 如果策略中途重启,VARIABLE 可以通过回放历史重建状态,GLOBALVARIABLE 要怎么做呢?或者我中途可能修改策略的话,要什么操作来保证GLOBALVARIABLE 数据完整呢
回复

使用道具 举报

1

主题

124

帖子

124

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-27
曾用名:
发表于 2026-6-11 09:59 | 显示全部楼层
本帖最后由 资深技术07 于 2026-6-11 10:09 编辑

GLOBALVARIABLE 初始值会在策略加载那一刻初始化赋值一次。
中途可能修改策略的话,再次启动策略,GLOBALVARIABLE定义的全局变量,要满足以下条件,
(1)数据完整,(2)对GLOBALVARIABLE定义的全部变量,再次赋值的条件,不能闪烁。(3)如果出现了信号闪烁,该指标策略就只能是日内平仓的策略,且中间不能再次启动该策略。
如果会闪烁,想保存下某一刻的值。或者策略会持仓隔夜仓,都建议用EXTGBDATASET和EXTGBDATA定义的全局变量了
该全局变量的使用说明,请参考以下说明链接里的示例3和示例4https://www.weistock.com/docs/PE ... 4%E5%BA%94%E7%94%A8
回复

使用道具 举报

9

主题

38

帖子

38

积分

Rank: 4

等级: 专业版

注册:
2025-12-17
曾用名:
 楼主| 发表于 2026-6-11 10:09 | 显示全部楼层
主要就是 万一再次启动,我怎么保证数据的完整呢?每次重启金字塔后台程序化,他都会说 补充数据 我都补充了,但是还是会出错,这个要怎么解决呢
回复

使用道具 举报

1

主题

124

帖子

124

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-27
曾用名:
发表于 2026-6-11 10:11 | 显示全部楼层
中间只要没有断开重连过行情服务器,数据就是完整的。还是会出错,大概率变量的赋值条件,闪烁了。如果是闪烁,要用EXTGBDATASET和EXTGBDATA定义的全局变量
回复

使用道具 举报

9

主题

38

帖子

38

积分

Rank: 4

等级: 专业版

注册:
2025-12-17
曾用名:
 楼主| 发表于 2026-6-11 16:46 | 显示全部楼层
我在后台程序化 使用 GLOBALVARIABLE 定义的全局变量,遇到一个问题:变量值跨交易日不自动清零
我定义了两个做标记用:PIERCE_LO(记录最低穿透布林下轨的价位),PIERCE_HI(记录最高穿透布林上轨的价位)。
比如:
穿透上布林 下一个死叉开空,穿透了下布林,下一个金叉开多。
但是我查看debug,里面返回经常是 老以前远古的穿透值还存在,导致的开仓

我想要的逻辑是「穿透保鲜期」不是按日历日失效,而是按交叉信号失效。具体来说:
PIERCE_LO 用于开多。我希望它的有效期是「上一次死叉之后 → 下一次金叉之前」。换句话说:穿透下轨这个动作,必须发生在上一个死叉之后(方向确认空头结束、多头周期开始),并且在下一个金叉之前被消费掉(开多)。如果金叉来了但其他条件不满足没开成,那等下一个金叉时这个穿透值还有效。但如果中间出现了一个死叉(方向又转空了),这个旧的多头穿透就应该作废——方向已经变了

例如:
  
    GLOBALVARIABLE: PIERCE_HI=0, PIERCE_LO=99999;

    追踪
    IF HIGH >= BB_UPPER AND HIGH > PIERCE_HI THEN PIERCE_HI := HIGH;
    IF LOW <= BB_LOWER AND LOW < PIERCE_LO THEN PIERCE_LO := LOW;

    开仓
    kd := [其他条件] AND PIERCE_LO < 99999 AND PIERCE_LO < CLOSE;
    kk := [其他条件] AND PIERCE_HI > 0 AND PIERCE_HI > CLOSE;
    IF kd AND THOLDING=0 THEN TBUY(...);
    IF kk AND THOLDING=0 THEN TBUYSHORT(...);

    { 清理 }
    IF REF(SICHA,1) THEN PIERCE_LO := 99999;
    IF REF(JINCHA,1) THEN PIERCE_HI := 0;
    IF TBUYHOLDING(1)>0 AND TENTERBARS(1)=0 THEN PIERCE_LO := 99999;
    IF TSELLHOLDING(1)>0 AND TENTERBARS(1)=0 THEN PIERCE_HI := 0;

现象:今天穿透下轨PIERCE_LO=7661,中间出现过金叉和死叉交替,但今天上午金叉时PIERCE_LO仍是7661,这个7661是5.27号晚上21.00的值,开了多单。按理说中间有死叉,REF(SICHA,1)应该触发过清理,但值没变。
这段清理逻辑是否有遗漏或错误?正确做法应该怎么写?
回复

使用道具 举报

1

主题

124

帖子

124

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-27
曾用名:
发表于 2026-6-11 17:16 | 显示全部楼层
本帖最后由 资深技术07 于 2026-6-12 09:44 编辑

GLOBALVARIABLE只会在客户停止后台程式化交易后销毁重置(在策略加载那一刻在第一根K线上赋初始值0),不会在其它时候自动清零.
您这种需要在特殊时候要初始化清0的,需要用EXTGBDATASET和EXTGBDATA定义的全局变量,根据策略的控制逻辑,厘清什么时候该赋值了,再去赋对应的值。
该全局变量的使用说明,请参考以下说明链接里的示例3和示例4
https://www.weistock.com/docs/PE ... 4%E5%BA%94%E7%94%A8

回复

使用道具 举报

9

主题

38

帖子

38

积分

Rank: 4

等级: 专业版

注册:
2025-12-17
曾用名:
 楼主| 发表于 2026-6-12 09:03 | 显示全部楼层
我这个是什么问题呢?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-13 20:15 , Processed in 0.189887 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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