调试程序的时候遇到点问题==============================
if tt:=11 or tt:=12 then begin{趋势单平仓}
if tt:=11 then begin
趋势平多:sell(趋势平多条件,手数,market);
if 趋势平多条件 then tt:=15;
end
if tt:=12 then begin
趋势平空:sellshort(趋势平空条件,手数,market);
if 趋势平空条件 then tt:=16;
end
end
===============================
代码如上,调试的时候提示句末缺少分号。指示箭头出现在黄色的这一行。如果我把这一行删掉,则指示出现在上一行。
我就奇怪,如果是语法错误,上下两段几乎是一样的,为什么上一段不出错。这很明显不是‘分号’的问题。
我怕是自己写连环if有点糊涂,就把代码改成下面的样子,但是提示一点差别也没有,错误指示仍然出现在第二段中
===============================
if tt:=11 or tt:=12 then begin{趋势单平仓}
if tt:=11 then begin
趋势平多:sell(趋势平多条件,手数,market);
tt=if(趋势平多条件,15,11);
end
if tt:=12 then begin
趋势平空:sellshort(趋势平空条件,手数,market);
tt=if(趋势平空条件,16,12);
end
end
===============================
我以前有过程序化的经验,但是转移到金字塔以后没有耐心琢磨基础语法,也许有些最基本的问题我没发现,还请各位达人指点。
---------------------
另,这例里tt是个表示交易状态的变量,震荡多头/趋势多头/震荡空头/趋势空头等等,开始已经定义过tt了。那么在判断后修改tt的时候,用‘=’还是应该用‘:=’呢,好像没发现系统有不良反应,,,按照以前我的了解,应该用‘=’?
我在金字塔上的学习时间还很少,急救章的把Rogarz的恒温器那篇的代码拿来套的,程序的思路和算法不一样,但是中间的语法基本上都是套的,我觉得他的模块化思路非常清晰,,,
说到这个在判断语句里=或:=问题,我在R那贴里两种用法都看见过,R用了个变量A,我用的tt,,,似乎调试的时候金字塔也没报错。所以我也有点奇怪。。。
另外,谁帮我解决一下主要的问题撒,求高人现身,,,
代码如下,我知道中间可能还会有许多问题,有时候要在图上发现显示的标记不如自己预期,再来寻找问题。要是编译都不过,错误提示又不对路,真不知道从哪里找起
===================================
//中间变量
input:N(50,10,100,1),P(1000,1000,3000,5),Q(2000,1000,5000,5),EE(20,10,50,1),SS(1,1,1000,1);
variable:tt=0;//交易状态,取值如下表
//趋势多单11,趋势多单平仓15
//趋势空单12,趋势空单平仓16
//震荡多单31,震荡多单平仓35
//震荡空单32,震荡空单平仓36
TC:=IF(DATE<1160103,1,0);//时间锁
TRR:= MAX(H,REF(C,1)) - MIN(L,REF(C,1));
ATR:= REF(MA(TRR,ee),1);
关键价:=(high+low+C)/3;//取关键价还是取收盘价作为通道中轴的计算依据,这是个问题
k0: TC*REF(MA(c,n),1);//中轴
//当市场慢速向一边偏离,可能存在在内外通道间连续移动的情况,长期浮套
kp1: TC*中轴+ATR*p/1000;//上一线,,,P,内通道幅度参数
kn1: TC*中轴-ATR*p/1000;//下一线,,,Q,外通道幅度参数
kp2: TC*中轴+ATR*q/1000;//上二线
kn2: TC*中轴-ATR*q/1000;//下二线
K:= (C-MA(C,N))/MA(C,N)*100;//转折预测
KS:= MA(K,5);//转折预测小周期下移动平均参数默认5
手数:=ss;
//交易条件
趋势开多条件:= c>=kp2 and ks>ref(ks,1);
趋势开空条件:= c<=kn2 and ks<ref(ks,1);
趋势平多条件:= ks<ref(ks,1);
趋势平空条件:= ks>ref(ks,1);
震荡开多条件:= c<=kn1 and c>kn2;
震荡开空条件:= c>=kp1 and c<kp2;
震荡平多条件:= h>=kp1;
震荡平空条件:= l<=kn1;
震荡多单止损条件:= c<=kn2;
震荡空单止损条件:= c>=kp2;
//交易系统
if tt=11 or tt=12 then begin{趋势单平仓}
if tt=11 then begin
趋势平多:sell(趋势平多条件,手数,market);
tt:=if(趋势平多条件,15,11);
end
if tt=12 then begin
趋势平空:sellshort(趋势平空条件,手数,market);
tt:=if(趋势平空条件,16,12);
end
end
if c>=kp2 or c<=kn2 then bigin{趋势中平震荡单建趋势单}
if tt=32 then begin//平震荡空单
震荡空单趋势止损:sellshort(震荡空单止损条件,手数,market);
tt:=if(震荡空单止损条件,36,32);
end
;
if tt=31 then begin//平震荡多单
震荡多单趋势止损:sell(震荡多单止损条件,手数,market);
tt:=if(震荡多单止损条件,35,31);
end
;
趋势开多:buy(趋势开多条件 and holding=0,手数,market);
if 趋势开多条件 then tt:=11;
趋势开空:buyshort(趋势开空条件 and holding=0,手数,market);
if 趋势开空条件 then tt:=12;
end
;
if c<kp2 and c>kn2//震荡区间内操作
if tt=32 then begin//平震荡空单
震荡空单平仓:sellshort(震荡平空条件,手数,limitr,min(o,kn1));
tt:=if(震荡平空条件,36,32);
end
if tt=31 then begin//平震荡多单
震荡多单平仓:sell(震荡平多条件,手数,limitr,max(o,kp1));
tt:=if(震荡平多条件,35,31);
end
if tt<>16 then begin//震荡中开多
震荡开多:buy(震荡开多条件 and holding=0,手数,market);
tt:=if(震荡开多,31,tt);
end
;
if tt<>15 then begin//震荡中开空
震荡开空:buyshort(震荡开空条件 and holding=0,手数,market);
tt:=if(震荡开空,32,tt);
end
end
有一个begin写错了,有一行少了then begin 红字出事改过的。另外中轴没有定义。
//中间变量
input:N(50,10,100,1),P(1000,1000,3000,5),Q(2000,1000,5000,5),EE(20,10,50,1),SS(1,1,1000,1);
variable:tt=0;//交易状态,取值如下表
//趋势多单11,趋势多单平仓15
//趋势空单12,趋势空单平仓16
//震荡多单31,震荡多单平仓35
//震荡空单32,震荡空单平仓36
TC:=IF(DATE<1160103,1,0);//时间锁
TRR:= MAX(H,REF(C,1)) - MIN(L,REF(C,1));
ATR:= REF(MA(TRR,ee),1);
关键价:=(high+low+C)/3;//取关键价还是取收盘价作为通道中轴的计算依据,这是个问题
k0: TC*REF(MA(c,n),1);//中轴
//当市场慢速向一边偏离,可能存在在内外通道间连续移动的情况,长期浮套
kp1: TC*中轴+ATR*p/1000;//上一线,,,P,内通道幅度参数
kn1: TC*中轴-ATR*p/1000;//下一线,,,Q,外通道幅度参数
kp2: TC*中轴+ATR*q/1000;//上二线
kn2: TC*中轴-ATR*q/1000;//下二线
K:= (C-MA(C,N))/MA(C,N)*100;//转折预测
KS:= MA(K,5);//转折预测小周期下移动平均参数默认5
手数:=ss;
//交易条件
趋势开多条件:= c>=kp2 and ks>ref(ks,1);
趋势开空条件:= c<=kn2 and ks<ref(ks,1);
趋势平多条件:= ks<ref(ks,1);
趋势平空条件:= ks>ref(ks,1);
震荡开多条件:= c<=kn1 and c>kn2;
震荡开空条件:= c>=kp1 and c<kp2;
震荡平多条件:= h>=kp1;
震荡平空条件:= l<=kn1;
震荡多单止损条件:= c<=kn2;
震荡空单止损条件:= c>=kp2;
//交易系统
if tt=11 or tt=12 then begin{趋势单平仓}
if tt=11 then begin
趋势平多:sell(趋势平多条件,手数,market);
tt:=if(趋势平多条件,15,11);
end
if tt=12 then begin
趋势平空:sellshort(趋势平空条件,手数,market);
tt:=if(趋势平空条件,16,12);
end
end
if c>=kp2 or c<=kn2 then begin{趋势中平震荡单建趋势单}
if tt=32 then begin//平震荡空单
震荡空单趋势止损:sellshort(震荡空单止损条件,手数,market);
tt:=if(震荡空单止损条件,36,32);
end
;
if tt=31 then begin//平震荡多单
震荡多单趋势止损:sell(震荡多单止损条件,手数,market);
tt:=if(震荡多单止损条件,35,31);
end
;
趋势开多:buy(趋势开多条件 and holding=0,手数,market);
if 趋势开多条件 then tt:=11;
趋势开空:buyshort(趋势开空条件 and holding=0,手数,market);
if 趋势开空条件 then tt:=12;
end
;
if c<kp2 and c>kn2 then begin//震荡区间内操作
if tt=32 then begin//平震荡空单
震荡空单平仓:sellshort(震荡平空条件,手数,limitr,min(o,kn1));
tt:=if(震荡平空条件,36,32);
end
if tt=31 then begin//平震荡多单
震荡多单平仓:sell(震荡平多条件,手数,limitr,max(o,kp1));
tt:=if(震荡平多条件,35,31);
end
if tt<>16 then begin//震荡中开多
震荡开多:buy(震荡开多条件 and holding=0,手数,market);
tt:=if(震荡开多,31,tt);
end
;
if tt<>15 then begin//震荡中开空
震荡开空:buyshort(震荡开空条件 and holding=0,手数,market);
tt:=if(震荡开空,32,tt);
end
end
[此贴子已经被作者于2014/8/25 11:09:50编辑过]