关于定投策略的记录(五十二)
发现了一个算法的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
以上。
评论