以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- [求助]===问个代码问题,好像有点奇怪,求达人指点 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=69188) |
-- 作者:oroute -- 发布时间:2014/8/25 9:45:20 -- [求助]===问个代码问题,好像有点奇怪,求达人指点 调试程序的时候遇到点问题 ============================== 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的时候,用‘=’还是应该用‘:=’呢,好像没发现系统有不良反应,,,按照以前我的了解,应该用‘=’?
|
-- 作者:pyd -- 发布时间:2014/8/25 9:54:51 -- 判断tt=11用等号而不是冒号等号 if tt=11 or tt=12 then begin{趋势单平仓} if tt=11 then begin
赋值用冒号等号 tt:=if(趋势平空条件,16,12); [此贴子已经被作者于2014/8/25 9:56:43编辑过]
|
-- 作者:oroute -- 发布时间:2014/8/25 10:08:04 -- 我在金字塔上的学习时间还很少,急救章的把Rogarz的恒温器那篇的代码拿来套的,程序的思路和算法不一样,但是中间的语法基本上都是套的,我觉得他的模块化思路非常清晰,,, 说到这个在判断语句里=或:=问题,我在R那贴里两种用法都看见过,R用了个变量A,我用的tt,,,似乎调试的时候金字塔也没报错。所以我也有点奇怪。。。 另外,谁帮我解决一下主要的问题撒,求高人现身,,,
|
-- 作者:jinzhe -- 发布时间:2014/8/25 10:12:56 -- :=和=本来就是两个意思,多看看上面版主和你解释 |
-- 作者:oroute -- 发布时间:2014/8/25 10:16:41 -- 谢谢二楼,你说的这是正统的语法,谢谢帮我理清思路。 但是主要的问题和=没有关系,最早的时候我写代码就是按正统语法写的,那个缺少分号的提示依然让我抓狂。。。
|
-- 作者:jinzhe -- 发布时间:2014/8/25 10:20:53 -- 按照上面的解释,是判断还是赋值,你重新改一下 |
-- 作者:oroute -- 发布时间:2014/8/25 10:34:13 -- 复六楼:早就改过了,不是这个问题。 让我比较抓狂的是,错误提示根本不搭界,,,这样从哪里去排查呢
|
-- 作者:jinzhe -- 发布时间:2014/8/25 10:41:38 -- 把你代码全部贴一下 |
-- 作者:oroute -- 发布时间:2014/8/25 10:53:59 -- 代码如下,我知道中间可能还会有许多问题,有时候要在图上发现显示的标记不如自己预期,再来寻找问题。要是编译都不过,错误提示又不对路,真不知道从哪里找起 =================================== //中间变量 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 |
-- 作者:pyd -- 发布时间:2014/8/25 11:08:08 -- 有一个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);
[此贴子已经被作者于2014/8/25 11:09:50编辑过]
|