我想做个加仓算法,思路是: 当加仓条件满足的时候,每次加仓是前两次加仓的和,即用斐波那契的算法来加仓。代码如何实现呢 ?
目前我的代码在实现 加仓手数和 计算加仓后的持仓均价都除了问题,所以只能请教金字塔的高手。
如下是我的代码:
当期上一次开仓手数:= REF(加仓手数,1);
当前上上次开仓手数:= REF(加仓手数,BARSLAST(加仓条件)+1);
//加仓模块
if 加仓条件 then
begin
if 当期开仓次数 = 1 then
begin
加仓手数:= 开仓手数基数+加仓手数;
end
else begin
//用斐波那契手法计算加仓数量
加仓手数:= 当前上上次开仓手数 + 当期上一次开仓手数;
end
BUY(1,加仓手数,LIMITR,CLOSE);
当期开仓次数:= 当期开仓次数+1;
当期开仓手数:= 加仓手数 + 当期开仓手数;
当期开仓均价:=( CLOSE * 当期开仓手数 + 当期开仓均价 * 当期上一次开仓手数 )/ (当期开仓手数 + 当期上一次开仓手数 );
end
hh:=1;
ref(h,h1);
hh:=2;
ref(hh,1);
因为你的改变的加仓手数是在后面修改,所以前面取得的加仓手数不是后面修改的值.看下我上面的例子,两个ref所取到的hh是不同的 ,你要在最后进行一个加仓:=加仓手数
然后去取这个加仓
variable:num[]=0;
variable:i=1;
if c>o and i>2 then
BEGIN
buy(1,num[UBOUND(num)-1]+num[UBOUND(num)],marketr);
num:=num[UBOUND(num)-1]+num[UBOUND(num)];
end
if c>o and i<=2 then
BEGIN
buy(1,1,marketr);
num:=1;
i:=i+1;
end
看下这么使用,手数就是斐波那契排序