以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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=9473) |
-- 作者:MMM -- 发布时间:2011/12/23 9:13:36 -- 我在“金字塔”中遇见了鬼 跟鬼折腾了一个晚上,在确认自己变成鬼之前,再次测试了一遍,决定发布上来请大家捉鬼。
我将之前一直正常的一个策略引入了MD函数进行组合应用,在测试的过程当中跳动的数字不断给我带来惊喜,有突破!我用交易评测中优化的参数替换原有参数后再对公式开始测试,怎么结果还不如原来的好? 又进行了一遍参数的优化,发现这回的参数中又出现了和上次不一样的结果,还有更好的。我想可能是到了晚上犯困有些恍惚了哪个操作出了问题。就将新的参数用上试一下,这回还可以,就是数值有些小的差异,没有太在意。上述过程经过几个来回,虽然数据总是有些小的差异,但总体还算稳定,我就建立一个新的公式,把优化的参数全部在新公式中赋值去掉参数,准备最后测一下就心满意足地睡个好觉。就这个时候,鬼来了。点击“开始”的一个动作和浮现出来的结果让我差异,怎么这么差?交易次数增多了30%左右。我赶紧对比着检查赋值的参数和优化的参数,看得眼珠子都快掉下来了(本来就已经很困了)没有发现异常啊? 可新老两个公式的测试结果就是天壤之别。 靠(气氛之下),见了鬼了!?
就这样开始抓鬼,具体的过程就不详述了,反正是花了n个小时,将以前的好几个公式有都走了优化过程好几遍也没发现数值差异,排除了软件和计算机的问题,这期间还多次重启软件和计算机,最后觉得鬼就在这个公式中。实在顶不住了小睡一下
哪里睡得踏实?醒来再次开机进到金字塔中,又走了一遍,昨天的问题依然呈现,没想到早晨的优化结果还创下新高,借助休息后相对清醒的大脑仔细的回顾了一下,交易次数出现如此大的波动,只能是MD的输出波动较大,于是将鬼定位在MD函数中。赶紧上到论坛搜一下,发现已经有遭雷的。
如果是MD的问题,请MD的设计者查查是否有BUG,如果不是请大家帮助捉鬼!!! |
-- 作者:admin -- 发布时间:2011/12/23 9:20:08 -- 测试的下单记录跟你图表上下单信号吻合么? |
-- 作者:fly -- 发布时间:2011/12/23 9:57:00 -- 楼主可否把 关于MD函数发现该问题的代码,发布出来,看看 |
-- 作者:MMM -- 发布时间:2011/12/23 11:17:34 -- TD:=MD(C,I); vb:10000*(hhv(TD,K)-llv(TD,K))/C,linethick0; if vb<=vbr then exit;
其实就是很简单地将上面的三行插入了以前的公式适当的位置,I,K,vbr都是参数,我发现MD的结果本身的范围变化极大,如果MD的小数位精度不够的话可能导致问题的发生,正准备改成 vb:(10000*hhv(TD,K)-10000*llv(TD,K))/C 试试。
|
-- 作者:fly -- 发布时间:2011/12/23 11:20:56 -- 非常感谢 最好是,能直接反应问题的 可执行公式全部代码,这样好本地跟踪 |
-- 作者:MMM -- 发布时间:2011/12/23 11:42:53 -- 真是碰上厉鬼了! 改过没有用,反倒鬼变厉鬼了。
1.打开公式,先对既定的参数进行测试,结果总是第一次测试的那个结果:利润~160%,交易次数135。 2.对其中两个参数优化,结果中出现了一个超过180%的参数,交易次数103次。 3.再执行一遍优化,结果中出现了三个超过180%的参数。 4.再来一遍吧,反正累的是电脑,哈哈,这回结果中出现了五个超过180%的参数,原先160%对应的参数最新的结果居然变成了182%,交易次数也减少了。 5.这时候不优化了,什么参数都不改再“开始”一下,居然原有的参数这回的结果变成了182%,中间就是执行了几遍优化,并没有改变参数,结果却变化了,这鬼够厉的吧?也许优化模块搞不定MD函数。呵呵。 |
-- 作者:王锋 -- 发布时间:2011/12/23 12:09:13 -- 请给出完整公式,便于我们进行完整性测试 |
-- 作者:MMM -- 发布时间:2011/12/23 15:07:43 -- 由于不方便提供完整代码,只能按照2楼的建议对照检查明细和符号。我这个公式是设计成副图指标的,从副图上看和明细一样,再建立一个交易公式在主图图表上显示交易信号,对比后发现和明细不一样。很显然,在图图表上正确执行的exit,但是测试明细和下面副图公式在某些时段没有执行exit。
看看这样说能排除公式本身的问题吗?注明一下,在该段代码前面有一段if结构中包含了一个exit,但出问题的时段if中的exit是不会被执行的。 |
-- 作者:王锋 -- 发布时间:2011/12/23 15:47:09 -- 逐K线模式下使用EXIT在使用不当是会出现统计问题的,建议你去掉试试 |
-- 作者:MMM -- 发布时间:2011/12/23 22:08:01 -- 版主提醒的对,谢谢!
刚接触金字塔,这个逐K线的机制到底如何仅凭操作指南的说明看来一时半会儿很难掌握(我到现在还没有理解序列模式到底是怎样工作的,在序列模式下连交易信号都没有,改成逐K线就有了
进一步的跟踪调试发现鬼就是这个EXIT(瞧瞧关于EXIT函数的说明,简单的就是个裸体
原来在逐K线模式使用了EXIT后,在EXIT之后的我那条可怜的语句中,hhv还能正确计算,llv就是0了(不愿意浪费时间再查如果当前值正好是最高的话hhv是否也要歇菜)。 为了连续显示TD的值,我是将TD:=MD(C,I)这条置于了带有exit的if结构的前面,如下: TD:=MD(C,I); //if结构 if xxxx .. 存在exit .. end
vb:10000*(hhv(TD,K)-llv(TD,K))/C,linethick0; if vb<=vbr then exit;
可谁能想到在连续的TD上计算它的hhv,llv还有问题? 估计还是没搞明白什么是逐K线,这些函数的向前引用的数值是怎样计算的。深奥啊,由于EXIT的执行造成了不连续,hhv/llv就不正常工作了,联想下去,是否类似ref等所有向前引用数据的函数就都要遭到不测?
可怕的EXIT就像一颗定时炸弹,在函数的说明中应该严重注明它的厉害之处。
在哪里可以快速了解类似这样的炸弹使用方法呢???
另外,如何解释在交易图表上显示的和副图上显示的信号不一致?
=================== 以下后加 ====================== 后来想了想,是否条件语句或条件结构中的所有参数因条件不能保证每个K线都赋值的,在将来被引用时都将出现无法预知的结果?而EXIT只能算其中之一?
[此贴子已经被作者于2011-12-23 22:28:34编辑过]
|