跟鬼折腾了一个晚上,在确认自己变成鬼之前,再次测试了一遍,决定发布上来请大家捉鬼。
我将之前一直正常的一个策略引入了MD函数进行组合应用,在测试的过程当中跳动的数字不断给我带来惊喜,有突破!我用交易评测中优化的参数替换原有参数后再对公式开始测试,怎么结果还不如原来的好? 又进行了一遍参数的优化,发现这回的参数中又出现了和上次不一样的结果,还有更好的。我想可能是到了晚上犯困有些恍惚了哪个操作出了问题。就将新的参数用上试一下,这回还可以,就是数值有些小的差异,没有太在意。上述过程经过几个来回,虽然数据总是有些小的差异,但总体还算稳定,我就建立一个新的公式,把优化的参数全部在新公式中赋值去掉参数,准备最后测一下就心满意足地睡个好觉。就这个时候,鬼来了。点击“开始”的一个动作和浮现出来的结果让我差异,怎么这么差?交易次数增多了30%左右。我赶紧对比着检查赋值的参数和优化的参数,看得眼珠子都快掉下来了(本来就已经很困了)没有发现异常啊? 可新老两个公式的测试结果就是天壤之别。 靠(气氛之下),见了鬼了!?
就这样开始抓鬼,具体的过程就不详述了,反正是花了n个小时,将以前的好几个公式有都走了优化过程好几遍也没发现数值差异,排除了软件和计算机的问题,这期间还多次重启软件和计算机,最后觉得鬼就在这个公式中。实在顶不住了小睡一下。
哪里睡得踏实?醒来再次开机进到金字塔中,又走了一遍,昨天的问题依然呈现,没想到早晨的优化结果还创下新高,借助休息后相对清醒的大脑仔细的回顾了一下,交易次数出现如此大的波动,只能是MD的输出波动较大,于是将鬼定位在MD函数中。赶紧上到论坛搜一下,发现已经有遭雷的。
如果是MD的问题,请MD的设计者查查是否有BUG,如果不是请大家帮助捉鬼!!!
测试的下单记录跟你图表上下单信号吻合么?
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 试试。
非常感谢
最好是,能直接反应问题的 可执行公式全部代码,这样好本地跟踪
真是碰上厉鬼了!
改过没有用,反倒鬼变厉鬼了。
1.打开公式,先对既定的参数进行测试,结果总是第一次测试的那个结果:利润~160%,交易次数135。
2.对其中两个参数优化,结果中出现了一个超过180%的参数,交易次数103次。
3.再执行一遍优化,结果中出现了三个超过180%的参数。
4.再来一遍吧,反正累的是电脑,哈哈,这回结果中出现了五个超过180%的参数,原先160%对应的参数最新的结果居然变成了182%,交易次数也减少了。
5.这时候不优化了,什么参数都不改再“开始”一下,居然原有的参数这回的结果变成了182%,中间就是执行了几遍优化,并没有改变参数,结果却变化了,这鬼够厉的吧?也许优化模块搞不定MD函数。呵呵。
请给出完整公式,便于我们进行完整性测试
由于不方便提供完整代码,只能按照2楼的建议对照检查明细和符号。我这个公式是设计成副图指标的,从副图上看和明细一样,再建立一个交易公式在主图图表上显示交易信号,对比后发现和明细不一样。很显然,在图图表上正确执行的exit,但是测试明细和下面副图公式在某些时段没有执行exit。
看看这样说能排除公式本身的问题吗?注明一下,在该段代码前面有一段if结构中包含了一个exit,但出问题的时段if中的exit是不会被执行的。
逐K线模式下使用EXIT在使用不当是会出现统计问题的,建议你去掉试试
版主提醒的对,谢谢!
刚接触金字塔,这个逐K线的机制到底如何仅凭操作指南的说明看来一时半会儿很难掌握(我到现在还没有理解序列模式到底是怎样工作的,在序列模式下连交易信号都没有,改成逐K线就有了),再加上一个诡异的EXIT时不时装神弄鬼,搞不好还不让自己的银子打水漂玩了?
进一步的跟踪调试发现鬼就是这个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只能算其中之一?