以文本方式查看主题
- 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp)
-- 金字塔软件问题提交 (http://www.weistock.com/bbs/list.asp?boardid=2)
---- [求助]可能夜盘导致bug,关于涨跌停计算表示 (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=75221)
|
-- 作者:netfox
-- 发布时间:2015/1/30 21:27:55
-- [求助]可能夜盘导致bug,关于涨跌停计算表示
涨跌停默认似乎只能靠动态函数,那么历史图表数据就错误了。
我搜索论坛发觉有个写法,于是我拿来用了下,在历史数据下是可以的。
公式如下:
以下内容为程序代码:
1 INPUT:DDD(6,4,20,1); 2 结算价:TRIMPRICE(AMOUNT/VOL/MULTIPLIER);//日周期下有效 3 前结算价:ref(结算价,1);//日周期下有效 4 当日涨停:INTPART((1+DDD/100)*前结算价); 5 当日跌停:INTPART((1-DDD/100)*前结算价);
以上是对应白银6%幅度
然后我通过在交易公式调用
以下内容为程序代码:
1 涨停:STKINDIEX(STKLABEL,\'前结.当日涨停\',0,6,0,0),NODRAW; 2 跌停:STKINDIEX(STKLABEL,\'前结.当日跌停\',0,6,0,0),NODRAW; 3
ok ,完美获得 涨跌停计算模式。 交易所乱放开缩小日子毕竟是少数,可以覆盖多数周期测试。
看上去它是如此完善。。。
"注意这是北京时间模式下"
21:00开盘我观察了下于是就悲剧了
在21:00之后 依据交易所规矩这是第二天的开盘价,也就是夜盘21:00开始的涨跌停新的才对。
于是在公式调用就会出现一会是昨日(下午3:00收盘时刻涨跌停), 一会是今日21:00后得到新数据。
这在历史数据时刻是可以发现的, 一直持续到 0:00分 涨跌停数据才稳定住成新的。
当然我知道这一问题是夜盘时间关系。
我是来寻求改善写法。
|
-- 作者:netfox
-- 发布时间:2015/1/30 22:01:24
--
所有非日线时刻之下 5,15,30,60 分 在 21:00-23:59 历史数据都是"调用前一天" 盘中则数据闪烁。
在 0:00 则立即稳定 到 15:00
北京时间问题?
|
-- 作者:yukizzc
-- 发布时间:2015/1/31 17:32:08
--
你这边调用当天日线,今天晚上去调用当天日线的话自然还是今天了(虽然交易所把晚上的日算到明天了)
所以程序化建议用金字塔时区,你这个恰好也是用北京时区情况下会出现的意外。
|
-- 作者:netfox
-- 发布时间:2015/2/1 12:39:47
--
以下是引用yukizzc在2015/1/31 17:32:08的发言:
你这边调用当天日线,今天晚上去调用当天日线的话自然还是今天了(虽然交易所把晚上的日算到明天了)
所以程序化建议用金字塔时区,你这个恰好也是用北京时区情况下会出现的意外。
有可能在“北京时区”把这问题解决吗? 我跑不是一个,改时区要把别跑程序也改过,这出bug概率就大大增加了
我试图去解决问题
以下内容为程序代码:
1 时间:=time>=210500 and time<=235500; 2 ZZ1:=涨停1<>ref(涨停1,1) and 时间; 3 DD1:=跌停1<>ref(跌停1,1) and 时间; 4 涨停:if(ZZ1,涨停1,ref(涨停1,1)),NODRAW; 5 跌停:if(DD1,跌停1,ref(跌停1,1)),NODRAW;
定义时间区间,之后我考虑用IF判断。 上述代码没有实现目标。
|
-- 作者:yukizzc
-- 发布时间:2015/2/1 17:06:16
--
这样看下呢,晚上的引用日线向后便宜一位
if 时间:=time>=210500 and time<=235500 THEN begin 涨停:=STKINDIEX(STKLABEL,\'前结.当日涨停\',0,6,1,0),NODRAW; 跌停:=STKINDIEX(STKLABEL,\'前结.当日跌停\',0,6,1,0),NODRAW; end else begin 涨停:=STKINDIEX(STKLABEL,\'前结.当日涨停\',0,6,0,0),NODRAW; 跌停:=STKINDIEX(STKLABEL,\'前结.当日跌停\',0,6,0,0),NODRAW; end
|
-- 作者:netfox
-- 发布时间:2015/2/2 21:13:37
--
以下是引用yukizzc在2015/2/1 17:06:16的发言:
这样看下呢,晚上的引用日线向后便宜一位
if 时间:=time>=210500 and time<=235500 THEN begin 涨停:=STKINDIEX(STKLABEL,\'前结.当日涨停\',0,6,1,0),NODRAW; 跌停:=STKINDIEX(STKLABEL,\'前结.当日跌停\',0,6,1,0),NODRAW; end else begin 涨停:=STKINDIEX(STKLABEL,\'前结.当日涨停\',0,6,0,0),NODRAW; 跌停:=STKINDIEX(STKLABEL,\'前结.当日跌停\',0,6,0,0),NODRAW; end
3Q 楼上代码,几乎堪称完美。(无交易时刻。)
在非交易时段特别就是上面说明晚上阶段,楼上代码完美实现,就是说如果测试应该是可靠的。 好吧起码基本解决了。 在一次万分感谢。
然后然后我就知道实盘下是悲剧,果然如同最初观察这是夜盘统计问题。
回复楼上: 这段代码在晚上21:00-23:55是必定闪烁的。
以下内容为程序代码:
1 涨停观测:涨停,NODRAW; 2 跌停观测:跌停,NODRAW;
今晚观察了,与我最初试图REF一个状态,只要是过去数据就没事,“当下状态必然闪烁”
|
-- 作者:yukizzc
-- 发布时间:2015/2/2 22:02:03
--
不会啊,你公式属性都用逐k。我这把看了下21点后数值就变了
此主题相关图片如下:q4`t6vxztgowm%x)6orf}f.jpg

|
-- 作者:netfox
-- 发布时间:2015/2/2 22:16:34
--
以下是引用yukizzc在2015/2/2 22:02:03的发言:
不会啊,你公式属性都用逐k。我这把看了下21点后数值就变了
 此主题相关图片如下:q4`t6vxztgowm%x)6orf}f.jpg
我自然是实验过才来牢骚的。
我的意思你看我今晚写那一行, 我用来观察5分钟白银。 它依旧是一会是刚好今天数值一会是明天的。 这个1会大概5-20秒会变换数值。
那么写详细点
以下内容为程序代码:
1 INPUT:DDD(6,4,20,1); 2 结算价:TRIMPRICE(AMOUNT/VOL/MULTIPLIER);//日周期下有效 3 前结算价:ref(结算价,1);//日周期下有效 4 当日涨停:INTPART((1+DDD/100)*前结算价); 5 当日跌停:INTPART((1-DDD/100)*前结算价);
这个公式"前结" 是作为“技术指标” 序列模式
以下内容为程序代码:
1 if 时间:=time>=210500 and time<=235500 THEN 2 begin 3 涨停:=STKINDIEX(STKLABEL,\'前结.当日涨停\',0,6,1,0); 4 跌停:=STKINDIEX(STKLABEL,\'前结.当日跌停\',0,6,1,0); 5 end 6 else 7 begin 8 涨停:=STKINDIEX(STKLABEL,\'前结.当日涨停\',0,6,0,0); 9 跌停:=STKINDIEX(STKLABEL,\'前结.当日跌停\',0,6,0,0); 10 end 11 涨停观测:涨停,NODRAW; 12 跌停观测:跌停,NODRAW;
这部分代码是写在“交易公式” 逐K模式下。
表现症状是当下 21:00-23:55 时刻。 因为北京时间夜盘关系。 我上述 “涨停观察、跌停观察”出现闪烁,即一会是今日涨跌停一会是昨日的涨跌停。这个闪烁幅度是依据行情速度的就是行情慢时刻就闪的慢点,但肯定是必须闪。
然后就是前面说全部"逐K模式" 这个意思是引用最初指标“前结” 也要改模式, 这个从一开始是彻底不对的,因为换了模式后引用还是闪烁而数值直接变成了"0"。
[此贴子已经被作者于2015/2/2 22:17:22编辑过]
|
-- 作者:netfox
-- 发布时间:2015/2/2 22:19:46
--
楼上几位别双击出可移动是自光标,这个时候数据是对的。
你别选等几秒看看观察到数据就会发现是闪烁的
|
-- 作者:yukizzc
-- 发布时间:2015/2/2 23:01:47
--
我这边都正常,我想了个验证的方法。工具-数据管理-全局变量,这里把涨停和跌停的正确数值都设定好。然后通过如下代码判断今天21点后如果有发现aa和bb的值与全局变量里定义好的不符合,就输出并且来个开多。接着只要看test这个是否生成就知道了
aa:涨停; bb:跌停; if date=1150202 and time>=210500 and ((EXTGBDATA(\'涨停\' )<>aa) or (EXTGBDATA(\'跌停\' )<>bb)) THEN begin DEBUGFILE(\'D:\\TEST.TXT\',\'当前资产为%.2f\',aa); buy(1,1,market); end
|