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


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

   

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


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

主题:疑似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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
paulshen
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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。


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


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

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


 回到顶部