以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  均线系统发现一个重要问题,求解  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=65731)

--  作者:skylands
--  发布时间:2014/6/3 10:52:03
--  均线系统发现一个重要问题,求解
均线系统在实盘中发现一个重要问题!我的翻多信号: 前根收盘价上穿均线,后面突破上穿K之高点即翻多。
但是,当收盘价与均线之四舍五入值相等时,交易信号就不会出现!譬如,均线值为2154.550,前根K收盘价为2154.6,实际上是上穿了的,但后续突破该根K之高点时信号就不会出现。
估计是系统不将此种情况视为“上穿均线”,但这样一来实盘中就会造成重大问题,漏单!
问题出在哪?

--  作者:netfox
--  发布时间:2014/6/3 10:55:39
--  

前值 2154.6

当下 2154.55

  哪儿穿越了? 

 

Cross(2154.55,2154.6); 这么看也没穿

[此贴子已经被作者于2014/6/3 10:57:18编辑过]

--  作者:skylands
--  发布时间:2014/6/3 11:07:33
--  
举例中写错了,均线值2154.540,收盘价2154.6
--  作者:yukizzc
--  发布时间:2014/6/3 11:14:14
--  
收盘价2154.6,均线2154.54,那前一个周期收盘价在均线下还是上?
--  作者:skylands
--  发布时间:2014/6/3 11:19:11
--  
之下啊。就是这根穿越K是从均线下面第一次上穿,理应出信号。我反复检查和核对代码,就是不能解释这种情况。检查股指的历史,有若干次发现这种情况。
--  作者:lichenghu
--  发布时间:2014/6/3 12:27:27
--  

 C实际参与计算的值并不是2154.6

这个是计算机浮点误差导致的,交易所过来的数据经过多次处理和浮点转换导致会出现几位小数的情况,而不是实际看到的2154.6。

这就是我们指的浮点误差,对于浮点数的等于判断,哪怕是0.00000001也是有差别的。您可以MSGOUT输出下c,看下值


--  作者:netfox
--  发布时间:2014/6/3 12:43:56
--  
以下是引用lichenghu在2014/6/3 12:27:27的发言:

 C实际参与计算的值并不是2154.6

这个是计算机浮点误差导致的,交易所过来的数据经过多次处理和浮点转换导致会出现几位小数的情况,而不是实际看到的2154.6。

这就是我们指的浮点误差,对于浮点数的等于判断,哪怕是0.00000001也是有差别的。您可以MSGOUT输出下c,看下值

 

那么测试时候  input:NN(1,3,5,0.1);

 会出现 3.9999 这样的实际应该只有 0.1变动才对也是浮点错误吗?


--  作者:yukizzc
--  发布时间:2014/6/3 13:31:47
--  

这个没有浮点错误啊,你用msgout输出定义的NN来看下就知道了。


--  作者:skylands
--  发布时间:2014/6/3 13:31:52
--  
那有没有什么办法应对这个所谓的“浮点误差”问题呢?不然的话,还是不敢放心任机器值守,因为上述情况会导致漏单!极端情况下会导致灾难性后果的啊。就均线系统来说,错过了这个穿越的地方,如果行情一直单向发展,人又不在机器旁,就会导致不可预估的后果啊。
另外,楼上提的问题我也想知道答案,即在参数中设0.1的步长,是不是也有浮点误差,测试的结果是不是就不太准确?

--  作者:yukizzc
--  发布时间:2014/6/3 13:35:46
--  

ROUNDS(,)

代码里把行情的值自己四舍五入处理后来计算。