INPUT: chanlength(20,1,90,1);
INPUT: chandelay(15,1,90,1);
INPUT: trailingatrs(3,1,90,1);
INPUT: atrlength(10,1,90,1);
VARIABLE: upperchan=0,lowerchan=0,poshigh=0,atrval=0,con=0,STOPLINE=0;
minpoint:=MINDIFF;
upperchan:=HHV(h,chanlength);
lowerchan:=LLV(l,chanlength);
up:upperchan;
dn:lowerchan;
con:=h>=upperchan[BARPOS-chandelay] and h[BARPOS-1]<upperchan[BARPOS-chandelay];
if HOLDING=0 THEN BUY(con,1,MARKETr);
if ENTERBARS=0 THEN BEGIN
poshigh:=h;
end
else BEGIN
if h>poshigh[BARPOS-1] THEN poshigh:=h;//这个POSHIGH是买入后的高点,但是奇怪的是图形上显示出来的并没有维持在最高点,而是随着H变化而下降.求老师指示.是写法错误么?
end;
ATRVAL:=MA(TR,atrlength)*trailingatrs;
ph:poshigh;
ph1:poshigh[BARPOS-1],LINETHICK0;
IF HOLDING=1 AND ENTERBARS>0 THEN BEGIN
STOPLINE:=MAX(POSHIGH[BARPOS-1]-ATRVAL[BARPOS-1],LOWERCHAN[BARPOS-CHANDELAY]-MINPOINT);
sell(l<STOPLINE,0,MARKETr);
end
从TB翻译过来的.手生.好象两者的数组模式相差很大.有两者改写的对应技巧么?
[此贴子已经被作者于2017/7/2 18:23:43编辑过]
表述下你的代码需求。
if ENTERBARS=0 THEN BEGIN
poshigh:=h;
end
else BEGIN
if h>poshigh[BARPOS-1] THEN poshigh:=h;//这个POSHIGH是买入后的高点,但是奇怪的是图形上显示出来的并没有维持在最高点,而是随着H变化而下降.求老师指示.是写法错误么?
end;
根据代码逻辑,可以直接使用这种方式代替上述代码部分,hhv(HIGH,ENTERBARS);
tb属于类c的语法,可能很多地方都是通过数组处理的,
金字塔的函数返回值大部分都是序列变量值,再处理用户的需求时,是很少需要采用数组处理。即可完成需求。
嗯,就是全局变量是不是都是序列变量.能不能用BARPOS定位回溯,来访问前面的数据?因为我这段程序用这个来定位时是出错的,你运行一下就知道.
第二就是在程序化交易测评时,结果不正确,交易次数极少.而在图表上肉眼可见的交易信号就很多.是不是也和使用这个BARPOS有关.
关于金字塔里面的全局变量的说明:http://www.weistock.com/WeisoftHelp/index.html?zbgs003.htm 全局变量和序列变量有区分的,不能等同看待,详情的话你看下全局变量的说明。全局变量回溯也是可以的,只是并不好用。