以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  关于加仓算法的代码实现问题,请指教  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=96350)

--  作者:lisunnyday
--  发布时间:2016/4/15 16:25:14
--  关于加仓算法的代码实现问题,请指教
我想做个加仓算法,思路是:  当加仓条件满足的时候,每次加仓是前两次加仓的和,即用斐波那契的算法来加仓。
代码如何实现呢 ?  
目前我的代码在实现 加仓手数和 计算加仓后的持仓均价都除了问题,所以只能请教金字塔的高手。 


如下是我的代码:

 当期上一次开仓手数:= REF(加仓手数,1);
 
 当前上上次开仓手数:= REF(加仓手数,BARSLAST(加仓条件)+1);

 //加仓模块
if 加仓条件 then 
begin 
    if 当期开仓次数 = 1 then 
    begin 
    加仓手数:= 开仓手数基数+加仓手数;
    end
    else begin 
    //用斐波那契手法计算加仓数量 
     加仓手数:= 当前上上次开仓手数 + 当期上一次开仓手数;
    end
    
BUY(1,加仓手数,LIMITR,CLOSE);         
当期开仓次数:= 当期开仓次数+1;
当期开仓手数:= 加仓手数 + 当期开仓手数;
当期开仓均价:=( CLOSE * 当期开仓手数 + 当期开仓均价 * 当期上一次开仓手数 )/ (当期开仓手数 + 当期上一次开仓手数 );
   
end 

--  作者:yukizzc
--  发布时间:2016/4/15 17:14:06
--  
hh:=1;
ref(h,h1);
hh:=2;
ref(hh,1);
因为你的改变的加仓手数是在后面修改,所以前面取得的加仓手数不是后面修改的值.看下我上面的例子,两个ref所取到的hh是不同的 ,你要在最后进行一个加仓:=加仓手数
然后去取这个加仓

--  作者:yukizzc
--  发布时间:2016/4/17 17:23:05
--  

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

看下这么使用,手数就是斐波那契排序