
| 指南针中的成本均线被认为是最有权威的成本均线。其设计思路是以(O+C)/2为当日成本重心,然后用(当日换手率/近似的N日内近期成本)为加权系数来求动态平均。其近期成本分布的计算是采用一种近似算法,以CYC5为例: 今天的5日内成本分布=昨天的5日内成本分布*(1-今日换手率)*4/5+今日换手率 CYC5=DMA((O+C)/2,今天的换手率/今天的5日内成本分布) 这样的计算是假设5天内每天的换手率都比较近似,但如果近5日的换手率不均匀,就不应该用4/5去乘了。 另外,用(O+C)/2来作为成本重心也是不科学的。所以,指南针的成本均线我认为并不能准确反映平均持仓成本。 经过思考,我利用飞狐的远期成本分布函数ppart重新设计了成本均线,采用的是加权平均的方法。具体思路是: 1. 先计算历史上的换手率到了今天还剩多少。 2. 按剩余的换手率为加权系数来求加权平均值。 3. 每日的成本重心按照真正的成本重心 amount/v/100 来计算。 这样计算的结果应该是最精确的平均持仓成本。 源码如下,欢迎批评指正。 input:n1(5,2,300),n2(10,2,300),n3(20,2,300),n4(60,2,300),n5(120,2,300); a:if(v=0 or capital=0,(h+l+c)/3,amount/v*0.01),circledot,colorwhite;//计算成本重心 r:=0; t2:=0; for i=0 to n1-1 do begin r:=ppart(i)-ppart(i+1);// 计算第 i 天前的换手率到今天为止还残余多少 t2:=t2+ref(a,i)*r;//累加n1天内按残余换手率为加权系数的加权平均值的分子 end; mac1:t2/(1-ppart(n1));//分母是近期的成本分布 r:=0; t2:=0; for i=0 to n2-1 do begin r:=ppart(i)-ppart(i+1); t2:=t2+ref(a,i)*r; end; mac2:t2/(1-ppart(n2)); r:=0; t2:=0; for i=0 to n3-1 do begin r:=ppart(i)-ppart(i+1); t2:=t2+ref(a,i)*r; end; mac3:t2/(1-ppart(n3)); r:=0; t2:=0; for i=0 to n4-1 do begin r:=ppart(i)-ppart(i+1); t2:=t2+ref(a,i)*r; end; mac4:t2/(1-ppart(n4)); r:=0; t2:=0; for i=0 to n5-1 do begin r:=ppart(i)-ppart(i+1); t2:=t2+ref(a,i)*r; end; mac5:t2/(1-ppart(n5)); |
