Tang

关于定投策略的记录(五十二)

发现了一个算法的BUG

在网格交易过程中发现,1m级别波动下,一次买卖交易后,至90%位置跌幅的次数变多了。

原因是这样:假设从距离90%跌幅位置4次的位置开始买入,当买入第三次后,涨幅超过了最低涨幅,那么下跌位置将回到0,当下跌继续,超过最低下跌幅度时,会重新计算到90%跌幅位置的买入次数,这样前面的两次买入就游离于算法之外了。

看来是时候重新审视一下Cplan算法了。

与问答AI交流,梳理了一下算法可能存在的问题,得出一个与BUG无关但重要的结论:算法给出的涨跌幅度,超过历史90%涨跌幅的概率可能小于90%

反例是出现均匀分布或中中等波动占主导的情况,即涨跌幅集中在中位数附近,因为波动比较平,峰谷之间的差异很小,会出现剔除最低涨跌幅后最低涨跌幅反而下降的情况,这样得出的涨跌幅,超过历史90%涨跌幅的概率可能会远小于90%,比如一组数据涨跌幅为

(100,110,99,108.9,98.01,107.881,118.5921,106.73289)

最低涨跌幅均为10%,去掉第一个最低跌幅和涨幅,整理后,变为

(100,98.01,107.881,118.5921,106.73289)

最低跌幅由10%变成了1.9%

但这不是主要的问题,因为Bplan算法筛选出的卡片都是长期跑赢指数的目标,波动分布没有那么极端,每次买入的位置同时符合J周期的90%买入位置,J周期是基于统计得出的,所以不会出现反例的情况。通过统计方法先从原始数据中确定一个对比值就可以解决了。

问题是要规避或者处理类似于1m级别波动的情况,否则一旦遇到类似的下跌中继的情况,算法会失效。

目前来看需要增加两个约束,一是设定合适的买入位置,这个约束已经有了,这次发现问题的债券买入位置没有参考J周期的位置。二是中期买入位置距离90%调整位置不能高于2个,这样如果短期买入出现了下跌中继的情况,剩下的2个单位可以作为中期买入比例被吸收,因为至少会进入中期的第3个区间,吸收后中期比例自然会变为75%,这样短期买入没有卖出的单位就可以被算法覆盖了,到合适位置后再进行短期买入操作,这样就比较合理了。接下来需要将中、短周期的买入位置联系起来。

设短期涨跌幅度为a、b,长期涨跌幅度为c、d,因为长周期幅度较大,有a<c,b>d,进入中期第2区间位置为X,90%调整位置为Y,假设在中期第2区间,短期已买入2次,则有:

中期第3、4区间位置:

\(X_3 = X*(1+d)\)

\(X_4 = X_3*(1+d)=X*(1+d)^2=Y\)

短期第3、4区间位置:

\(x_3 = x_2*(1+b)\)

\(x_4 = x_3*(1+b)=x_2*(1+b)^2\)

中期发生下跌中继的场景,触发位置为:

\(P=X_3*(1+c)=X*(1+d)*(1+c)\)

短期可能发生下跌中继的场景,触发位置为:

\(p=x_3*(1+a)=X*(1+b)*(1+a)\)

这里,p需要满足:

\(p=x_3*(1+a)<=X\)

即:

\(x_3<=X/(1+a)\)

则有:

\(x_2<=X/((1+a)*(1+b))=Y/((1+a)*(1+b)*(1+d)^2)\)

\(x_2/X<=1/((1+a)*(1+b))\)

可以看出,短期位置需要中期位置来确定,如果不满足则不能买入,否则短期下跌中继触发后,中期吸收的持有比例会不对。

因为事先经过了筛选,a和b,c和d间有这样的关系:

\(1+a>1/(1+b)\)

\(1+c>1/(1+d)\)

 

短期第3个买入位置不能高于中期第3个买入位置:

\(x_3<=X_3\)

有:

\(x_2*(1+b)<=X*(1+d)\)

得出:

\(x_2<=X*(1+d)/(1+b)\)

\(x_2/X<=(1+d)/(1+b)\)

此时需要考察1/(1+a)和1+d的大小,设目标幅度为t,当1/(1+a)较大时,有

\(x_2<=X*(1+d)/(1+b)=Y/((1+b)*(1+d))\)

\(t=1-x_2/X=1-(1+d)/(1+b)=(b-d)/(1+b)\)

当1+d较大时,有

\(x_2<=X/((1+a)*(1+b))=Y/((1+a)*(1+b)*(1+d)^2)\)

\(t=1-x_2/X=1-1/((1+a)*(1+b))\)

这样短期买入位置就确定了。如果把X看做其他买入位置,则也可以适用其他买入位置。

先试试看w

另外网格交易还是比较方便的,这次的1m级别网格跌穿了设定的区间下限,但网格并没有结束,省了很多事情w

 

目前收益2.11W

以上。

码字很辛苦,转载请注明来自空间中的空间《关于定投策略的记录(五十二)》

评论