以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  关于“08.多头海龟交易系统”中的N值  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=62527)

--  作者:pizixu
--  发布时间:2014/3/10 19:16:06
--  关于“08.多头海龟交易系统”中的N值
先放上“08.多头海龟交易系统”前面一部分原代码,如下:
**************************************
//变量申明
VARIABLE:DAYCOUNT=1,POSITIONCOUNT=1,SELLSIGN=0;//定义常数变量DAYCOUNT并初始化为1,定义常数变量POSITIONCOUNT并初始化为1,定义常数变量SELLSIGN并初始化为0
VARIABLE:ENTANDEXITSIGN=1,ENTPOINT=0,EXITPOINT=0;//定义常数变量ENTANDEXITSIGN并初始化为1,定义常数变量ENTPOINT并初始化为0,定义常数变量EXITPOINT并初始化为0
VARIABLE:N=0;//定义常数变量N并初始化为0

MA1:MA(C,5);//输出5日均价
MA3:MA(C,10);//输出10日均价
M:=MA(TR,20); //真实波幅的20周期均值
BUYHHV:=HHV(H,20);//20日最高价
SELLLLV:=LLV(L,10);//10日最低价

SS:N,LINETHICK0;
//交易系统
IF BARPOS>=21 THEN 
BEGIN //如果从上市到现在的交易日天数大于等于21天,那么
IF BARPOS=21 THEN        //如果从上市到现在的交易日天数等于21,那么   
N:=M;                    //N=M 
IF DAYCOUNT=6 OR BARPOS=21 THEN 
BEGIN{5天调整N值} 
N:=(19*N+TR)/20;{计算N值} 
DAYCOUNT:=2;
END 
DAYCOUNT:=DAYCOUNT+1; 
ENTPOINT:=ENTERBARS+1; //ENTERBARS返回上次开仓到当期的周期函数,如果没有开仓返回-1。也即,如果没有开仓时,ENTPOINT = 0;如果当天开仓,是不是ENTPOINT = 0+1 = 1?
IF ENTPOINT=ENTANDEXITSIGN THEN 
BEGIN{说明STOP指令买进头寸成功} 
POSITIONCOUNT:=POSITIONCOUNT+1;{头寸计数} 
SELLSIGN:=TRUE;{开始以STOP卖出,如果达到指定的价格} 
END 
IF POSITIONCOUNT=1 THEN 
BEGIN{第一头寸} 
HOW:=CASH(0)*0.01/N;{波动性百分比决定头寸规模} 
开1:BUY(H>=BUYHHV,HOW,MARKET);{在20日新高STOP指令买进} 
END 
IF POSITIONCOUNT=2 THEN 
BEGIN{如到第二头寸} 
HOW:=CASH(0)*0.01/N;{波动性百分比决定头寸规模} 
开2:BUY(H>=ENTERPRICE+0.5*N,HOW,MARKET);{在上头寸(即第一头寸)+0.5个N以STOP指令买进} 
END 
.....
****************************************
我的问题是:
如上所说,开始N=0
BARPOS=21时,N:=M或者=(19*N+TR)/20
但是BARPOS>21时,N还是=M或者=(19*N+TR)/20吗?不是在逐K线模式下每根K线都重新执行一次代码程序吗?如果是这样,那在BARPOS>21,N应该是0啊(开始变量声明 N=0),这时HOW:=CASH(0)*0.01/N还有意义吗。

我也知道,我的想法肯定有问题,总不能是“08.多头海龟交易系统”有问题吧?!


--  作者:jinzhe
--  发布时间:2014/3/11 8:58:37
--  

全局变量只在第一根k线上进行初始赋值,也就是在第一根k线上把0赋值给n,后面的n是根据计算出结果,如果没有计算结果,那么n的值为上一个周期的值不变

[此贴子已经被作者于2014/3/11 8:59:18编辑过]