欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → [求助]===问个代码问题,好像有点奇怪,求达人指点

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3417人关注过本帖树形打印复制链接

主题:[求助]===问个代码问题,好像有点奇怪,求达人指点

帅哥哟,离线,有人找我吗?
oroute
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:149 积分:0 威望:0 精华:0 注册:2014/8/25 9:32:54
[求助]===问个代码问题,好像有点奇怪,求达人指点  发帖心情 Post By:2014/8/25 9:45:20    Post IP:119.97.240.94[只看该作者]

调试程序的时候遇到点问题
==============================
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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:8439 积分:0 威望:0 精华:0 注册:2014/7/14 13:43:36
  发帖心情 Post By:2014/8/25 9:54:51    Post IP:58.246.57.26[只看该作者]

判断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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:149 积分:0 威望:0 精华:0 注册:2014/8/25 9:32:54
  发帖心情 Post By:2014/8/25 10:08:04    Post IP:119.97.240.94[只看该作者]

我在金字塔上的学习时间还很少,急救章的把Rogarz的恒温器那篇的代码拿来套的,程序的思路和算法不一样,但是中间的语法基本上都是套的,我觉得他的模块化思路非常清晰,,,

说到这个在判断语句里=或:=问题,我在R那贴里两种用法都看见过,R用了个变量A,我用的tt,,,似乎调试的时候金字塔也没报错。所以我也有点奇怪。。。



另外,谁帮我解决一下主要的问题撒,求高人现身,,,

 回到顶部
帅哥哟,离线,有人找我吗?
jinzhe
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2014/8/25 10:12:56    Post IP:58.246.57.26[只看该作者]

:=和=本来就是两个意思,多看看上面版主和你解释


金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
oroute
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:149 积分:0 威望:0 精华:0 注册:2014/8/25 9:32:54
  发帖心情 Post By:2014/8/25 10:16:41    Post IP:119.97.240.94[只看该作者]

谢谢二楼,你说的这是正统的语法,谢谢帮我理清思路。

但是主要的问题和=没有关系,最早的时候我写代码就是按正统语法写的,那个缺少分号的提示依然让我抓狂。。。

 回到顶部
帅哥哟,离线,有人找我吗?
jinzhe
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2014/8/25 10:20:53    Post IP:58.246.57.26[只看该作者]

按照上面的解释,是判断还是赋值,你重新改一下


金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
oroute
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:149 积分:0 威望:0 精华:0 注册:2014/8/25 9:32:54
  发帖心情 Post By:2014/8/25 10:34:13    Post IP:119.97.240.94[只看该作者]

复六楼:早就改过了,不是这个问题。

让我比较抓狂的是,错误提示根本不搭界,,,这样从哪里去排查呢

 回到顶部
帅哥哟,离线,有人找我吗?
jinzhe
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2014/8/25 10:41:38    Post IP:58.246.57.26[只看该作者]

把你代码全部贴一下


金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
oroute
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:149 积分:0 威望:0 精华:0 注册:2014/8/25 9:32:54
  发帖心情 Post By:2014/8/25 10:53:59    Post IP:119.97.240.94[只看该作者]

代码如下,我知道中间可能还会有许多问题,有时候要在图上发现显示的标记不如自己预期,再来寻找问题。要是编译都不过,错误提示又不对路,真不知道从哪里找起

===================================

//中间变量

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
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:8439 积分:0 威望:0 精华:0 注册:2014/7/14 13:43:36
  发帖心情 Post By:2014/8/25 11:08:08    Post IP:58.246.57.26[只看该作者]

有一个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编辑过]

 回到顶部
总数 13 1 2 下一页