
等级: 专业版
- 注册:
- 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)应该触发过清理,但值没变。
这段清理逻辑是否有遗漏或错误?正确做法应该怎么写? |
|