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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件金字塔软件问题提交 → 疑似BUG: 序列变量初始化不了

   

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


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

主题:疑似BUG: 序列变量初始化不了

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


加好友 发短信
等级:论坛游侠 帖子:369 积分:2060 威望:0 精华:0 注册:2010/7/13 12:13:32
疑似BUG: 序列变量初始化不了  发帖心情 Post By:2011/1/13 15:54:24 [只看该作者]

可运行的公式如下:

//用于后台交易的优化
INPUT:AP(3,1,20,1);
INPUT:SL(9,5,30,1);
INPUT:tOA(1,1,300,1);

//时间条件
OT:=CURRENTTIME>91500;//Cannot use '=91500' OPENTIME(1);

//仓位条件
OAT:=tOA;
FILEPATH:='D:\DEBUGFILE\TSTS-TestDebugFile.TXT';
//------------------------------------------------------------
//技术指标=======================================================

//适应周期和序列两种模式
RUNMODE:1;
if not(islastbar)then exit;

D:=datacount;
variable:I=0;
variable:STLL[D]=0,STHH[D]=0;

for I=5 to datacount do begin
 STHH[I]:=HIGH[I-1];
 STLL[I]:=LOW[I-1];
end

 

{开平仓条件}
BO:=cross(high,STHH);
SO:=cross(STLL,low);

{平仓条件}
BC:=cross(high,STHh);
SC:=cross(STLL,low);

//初始化仓位全局变量
if date<>ref(date,1) and islastbar then begin
 EXTGBDATASET('TSTS',Tholding);
end

//--------------------交易指令-----------------------------
SPR:=C-AP*MINDIFF;//卖出价
BPR:=C+AP*MINDIFF;//买入价
SPR:=if(SPR<LOW,C,SPR);
BPR:=if(BPR>HIGH,C,BPR);
 

//多单止损 - 初始止损信号
AVG:=tAVGENTERPRICE;
SLL:=AVG-SL;
S_SL:=if(AVG=0,0,C<=SLL);

//平多开空

//空单止损 - 初始止损信号
AVG:=tAVGENTERPRICE;
SLH:=AVG+SL;
B_SL:=if(AVG=0,0,C>=SLH);

DEBUGFILE(FILEPATH,'=======',0);
DEBUGFILE(FILEPATH,'TH:'&numtostr(THOLDING,1)&' TodayTH:'&numtostr(todayHOLDING,1)&' TH2:'&numtostr(THOLDING2,1)&' TSTS:'&numtostr(EXTGBDATA('TSTS'),0),0);

DEBUGFILE(FILEPATH,'STHH:%.2f',STHH);
DEBUGFILE(FILEPATH,'STLL:%.2f',STLL);
DEBUGFILE(FILEPATH,'BO:%.0f',BO);
DEBUGFILE(FILEPATH,'BC:%.0f',BC);
DEBUGFILE(FILEPATH,'SO:%.0f',SO);
DEBUGFILE(FILEPATH,'SC:%.0f',SC);
DEBUGFILE(FILEPATH,'B_SL:%.0f',B_SL);
DEBUGFILE(FILEPATH,'S_SL:%.0f',S_SL);
DEBUGFILE(FILEPATH,'C:%.1f',C);
DEBUGFILE(FILEPATH,'H:%.1f',H);
DEBUGFILE(FILEPATH,'L:%.1f',L);
DEBUGFILE(FILEPATH,'O:%.1f',O);
DEBUGFILE(FILEPATH,'SLL:%.1f',SLL);
DEBUGFILE(FILEPATH,'SLH:%.1f',SLH);

//-----------------------------------------------------

如果增加序列变量初始化(标为红色),则输出结果如下:

2011-01-13 15:25:03.801    =======
2011-01-13 15:25:03.801    TH:-1.0 TodayTH:-1.0 TH2:-1.0 TSTS:-1
2011-01-13 15:25:03.801    STHH:-1.#R
2011-01-13 15:25:03.817    STLL:-1.#R
2011-01-13 15:25:03.817    BO:-1
2011-01-13 15:25:03.817    BC:-1
2011-01-13 15:25:03.817    SO:-1
2011-01-13 15:25:03.817    SC:-1
2011-01-13 15:25:03.817    B_SL:0
2011-01-13 15:25:03.817    S_SL:0
2011-01-13 15:25:03.817    C:3147.0
2011-01-13 15:25:03.817    H:3147.4
2011-01-13 15:25:03.817    L:3144.4
2011-01-13 15:25:03.817    O:3145.2
2011-01-13 15:25:03.817    SLL:3142.2
2011-01-13 15:25:03.817    SLH:3160.2

 

如上所示,STHH和STLL为空值。

 

如果去掉初始化行,则可得到正常值:

2011-01-13 15:22:43.151    =======
2011-01-13 15:22:43.167    TH:-1.0 TodayTH:-1.0 TH2:-1.0 TSTS:-1
2011-01-13 15:22:43.183    STHH:3146.80
2011-01-13 15:22:43.183    STLL:3145.20
2011-01-13 15:22:43.183    BO:1
2011-01-13 15:22:43.183    BC:1
2011-01-13 15:22:43.183    SO:0
2011-01-13 15:22:43.183    SC:0
2011-01-13 15:22:43.198    B_SL:0
2011-01-13 15:22:43.198    S_SL:0
2011-01-13 15:22:43.198    C:3147.0
2011-01-13 15:22:43.198    H:3147.4
2011-01-13 15:22:43.198    L:3144.4
2011-01-13 15:22:43.198    O:3145.2
2011-01-13 15:22:43.198    SLL:3142.2
2011-01-13 15:22:43.198    SLH:3160.2

 

请帮忙看看,是什么原因。变量初始用法有问题?


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


加好友 发短信 原leevolvo
等级:版主 帖子:2160 积分:10563 威望:0 精华:11 注册:2010/11/3 11:21:19
  发帖心情 Post By:2011/1/13 16:13:38 [只看该作者]

variable :

申明并初始化变量;variable 为全局变量申明语句,一般用在逐周期计算模式。因为variable变量在序列模式与普通的变量是没有区别的。

 

在序列模式,变量初始化就直接赋值为0,或者干脆不用,直接删除 红色那一行就好了

[此贴子已经被作者于2011-1-13 16:13:57编辑过]

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


加好友 发短信
等级:论坛游侠 帖子:369 积分:2060 威望:0 精华:0 注册:2010/7/13 12:13:32
  发帖心情 Post By:2011/1/13 16:17:46 [只看该作者]

我的本意就是做全局变量申明,也希望初始成0,为了避免由于没做初始化可能带来的问题。

 

这里主要问题是做了变量申明以后,STHH和STLL都成了空值。

[此贴子已经被作者于2011-1-13 16:18:37编辑过]

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


加好友 发短信
等级:论坛游侠 帖子:369 积分:2060 威望:0 精华:0 注册:2010/7/13 12:13:32
  发帖心情 Post By:2011/1/13 17:34:12 [只看该作者]

问题还是出在DEBUGFILE上,对STLL和STHH做了全局声明以后就无法正常输出了。

 

用循环打出STLL和STHH的序列值看都是正常的。


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


加好友 发短信
等级:论坛游侠 帖子:369 积分:2060 威望:0 精华:0 注册:2010/7/13 12:13:32
  发帖心情 Post By:2011/1/13 17:36:29 [只看该作者]

或者把这两行

DEBUGFILE(FILEPATH,'STHH:%.2f',STHH);
DEBUGFILE(FILEPATH,'STLL:%.2f',STLL);
改成:

DEBUGFILE(FILEPATH,'STHH:%.1f',STHH[D]);
DEBUGFILE(FILEPATH,'STLL:%.1f',STLL[D]);

也是可以正常输出。其中D:=datacount;


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


加好友 发短信
等级:论坛游侠 帖子:369 积分:2060 威望:0 精华:0 注册:2010/7/13 12:13:32
  发帖心情 Post By:2011/1/13 17:40:58 [只看该作者]

还有做了全局申明以后, cross函数也无法正常调用STLL和STHH了。BO,BC,SO, SC都成了-1。


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


加好友 发短信 原leevolvo
等级:版主 帖子:2160 积分:10563 威望:0 精华:11 注册:2010/11/3 11:21:19
  发帖心情 Post By:2011/1/13 22:48:30 [只看该作者]

尝试把

variable:I=0;
variable:STLL[D]=0,STHH[D]=0;

 

改成

variable:I=0;
variable:STLL=0,STHH=0;

 

位置放在input之后:

INPUT:AP(3,1,20,1);
INPUT:SL(9,5,30,1);
INPUT:tOA(1,1,300,1);

RUNMODE:1;
variable:I=0;
variable:STLL=0,STHH=0;

 

我这里测试了一下,可以输入正确结果

2011-01-13 22:34:59.859    =======
2011-01-13 22:34:59.859    TH:0.0 TodayTH:0.0 TH2:0.0 TSTS:0
2011-01-13 22:34:59.859    STHH:3147.80
2011-01-13 22:34:59.859    STLL:3145.60
2011-01-13 22:34:59.859    BO:0
2011-01-13 22:34:59.859    BC:0
2011-01-13 22:34:59.859    SO:1
2011-01-13 22:34:59.859    SC:1
2011-01-13 22:34:59.859    B_SL:0
2011-01-13 22:34:59.859    S_SL:0
2011-01-13 22:34:59.859    C:3147.0
2011-01-13 22:34:59.859    H:3147.4
2011-01-13 22:34:59.859    L:3144.4
2011-01-13 22:34:59.859    O:3146.4
2011-01-13 22:34:59.859    SLL:-9.0
2011-01-13 22:34:59.859    SLH:9.0

 

runmode、varibale、input等语句最好放在程序前面吧。


[此贴子已经被作者于2011-1-13 22:51:33编辑过]

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


加好友 发短信
等级:论坛游侠 帖子:369 积分:2060 威望:0 精华:0 注册:2010/7/13 12:13:32
疑似BUG: 序列变量初始化不了  发帖心情 Post By:2011/1/14 11:48:12 [只看该作者]

这样写的确可以了申明了,知不知道什么申明时加下标不行?我看到运行模式网页里是那么用的。


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


加好友 发短信
等级:管理员 帖子:5082 积分:17642 威望:0 精华:6 注册:2010/7/15 9:05:58
  发帖心情 Post By:2011/1/14 14:21:07 [只看该作者]

如果是个已经固定了值的数组,比如S[10]=0,是可以的.

 

估计是楼主用到了datacount,随着行情的变化,是个不断变化的值. 



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

客户服务部

-----------------------------------------------------------

欢迎您参加我公司的技术培训,具体培训需求请发邮件到

service@weistock.com

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

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


加好友 发短信
等级:标准版用户 帖子:168 积分:521 威望:0 精华:0 注册:2010/12/22 15:29:42
  发帖心情 Post By:2011/1/14 14:47:44 [只看该作者]

变量的申明和初始化是两码事。

尤其是数组的申明和初始化是要严格区分的


 回到顶部