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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件金字塔软件问题提交 → state的值为何不是1呢?

   

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


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

主题:state的值为何不是1呢?

美女呀,离线,留言给我吧!
vba
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:163 积分:480 威望:0 精华:0 注册:2013/5/4 11:04:52
state的值为何不是1呢?  发帖心情 Post By:2013/5/6 11:25:49 [显示全部帖子]

代码如下:

 

IF NOT(ISLASTBAR) THEN
 EXIT;

TJB:=HIGH>REF(HIGH,1) AND STATE=0;
BUY(TJB,1,MARKET);


MSGOUT(TJB, 'A');

 

当满足条件后,为什么会不停的显示'A'呢?理论上执行完BUY以后,STATE应该就是1,就不满足TJB条件了!请客服老师看看是怎么会事?


 回到顶部
美女呀,离线,留言给我吧!
vba
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:163 积分:480 威望:0 精华:0 注册:2013/5/4 11:04:52
  发帖心情 Post By:2013/5/6 13:36:30 [显示全部帖子]

上面贴的语句没问题,不信老师试试,等开盘后,随便加载了一个品种,如果TJB一直满足条件,即tick跳动一次,消息框就会输出一次。

按照jinzhi老师的意思,只有当换线以后,state才能有值?那在图表交易中,在k线换线以前,如何判断已经执行过开仓语句了?state难道不能用吗?请客服老师指点!


 回到顶部
美女呀,离线,留言给我吧!
vba
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:163 积分:480 威望:0 精华:0 注册:2013/5/4 11:04:52
  发帖心情 Post By:2013/5/6 14:32:40 [显示全部帖子]

我跟踪了一下,holding似乎可以即时变化,所以我将代码改为如下(就是把state替换为holding):

IF NOT(ISLASTBAR) THEN
 EXIT;

TJB:=HIGH>REF(HIGH,1) AND holding=0;
BUY(TJB,1,MARKET);


MSGOUT(1,numtostr(TJB,0));
MSGOUT(1,numtostr(holding,0));

 

可奇怪的是如果满足条件,输出的两个值都是1,不应该啊TJB后面明明有holding=0的条件,当执行过BUY以后,TJB就应该是0了啊,为什么也会一直是1呢?代码的执行机制不是每个tick都会执行一遍代码吗?请客服老师指点一下!


 回到顶部
美女呀,离线,留言给我吧!
vba
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:163 积分:480 威望:0 精华:0 注册:2013/5/4 11:04:52
  发帖心情 Post By:2013/5/6 16:45:30 [显示全部帖子]

客服老师在吗?帮忙看看这个问题吧!我找不到问题出哪里了!谢谢!


 回到顶部
美女呀,离线,留言给我吧!
vba
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:163 积分:480 威望:0 精华:0 注册:2013/5/4 11:04:52
  发帖心情 Post By:2013/5/6 20:00:53 [显示全部帖子]

跟这句没关系的,这样我把这句去掉,加到条件里可以吧!

整理后代码如下:

TJB:=HIGH>REF(HIGH,1) AND ISLASTBAR AND holding=0;
BUY(TJB,1,MARKET);

MSGOUT(1,numtostr(TJB,0));

 

现在就可以测试到,美元日元合约日线,刚好最后一根k线有信号,可是tjb为什么就是1呢?明明有holding=0的条件!


 回到顶部
美女呀,离线,留言给我吧!
vba
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:163 积分:480 威望:0 精华:0 注册:2013/5/4 11:04:52
  发帖心情 Post By:2013/5/6 20:05:45 [显示全部帖子]

按软件设计逻辑,每跳动一个tick,就会执行一次模型,对吧。那如果最后一根k线有buy信号,为什么再次跳动tick后,TJB还是1呢?这说明一个问题,TJB没有被更新,还是执行buy之前的值,这有问题吧?


 回到顶部
美女呀,离线,留言给我吧!
vba
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:163 积分:480 威望:0 精华:0 注册:2013/5/4 11:04:52
  发帖心情 Post By:2013/5/7 9:03:57 [显示全部帖子]

呵呵,感谢klc兄的辛苦回复,不过似乎你没看明白我的问题啊!我下面补充的帖子已经把EXIT那段代码去掉了,不加了总可以吧!我当然知道holding在buy之前是0,buy之后是1,可问题就出在当buy执行过以后为什么TJB还会一直是1?这是我的问题所在!也请客服老师解答一下我的疑惑啊!
[此贴子已经被作者于2013-5-7 9:04:12编辑过]

 回到顶部
美女呀,离线,留言给我吧!
vba
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:163 积分:480 威望:0 精华:0 注册:2013/5/4 11:04:52
  发帖心情 Post By:2013/5/7 10:12:55 [显示全部帖子]

谢谢fly老师,能否详细说明一下原理吗?为什么要分开写呢?合起来写为什么就不对呢?

 

即为什么要这样写:

TJB:=HIGH>=REF(HIGH,1) AND ISLASTBAR;

BUY(TJB AND STATE=0,1,MARKET);

 

而不是这样写:

TJB:=HIGH>=REF(HIGH,1) AND ISLASTBAR AND STATE=0;

BUY(TJB,1,MARKET);

 


 回到顶部
美女呀,离线,留言给我吧!
vba
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:163 积分:480 威望:0 精华:0 注册:2013/5/4 11:04:52
  发帖心情 Post By:2013/5/7 11:22:08 [显示全部帖子]

非常感谢fly老师的详细解答。

这么说来,那state,holding也都是局部变量了?拿最后一根k线来说,刚开始state=0,holding=0,然后执行buy,然后state<>0,holding<>0,当再来一个tick后,由于state和holding也是局部变量,也就不知道之前已经开过仓了,所以,state=0,holding=0,

不知我的理解对吗?如果理解正确,要在当根k线走完之前判断是否已经开过仓了,就不能用state,holding之类的函数了,要用全局变量记录,否则就会重复开单对吗?这就是历史回测和实盘的最大区别,感谢客服老师!

[此贴子已经被作者于2013-5-7 11:22:57编辑过]

 回到顶部
美女呀,离线,留言给我吧!
vba
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:163 积分:480 威望:0 精华:0 注册:2013/5/4 11:04:52
  发帖心情 Post By:2013/5/7 15:07:04 [显示全部帖子]

真的很感谢fly老师这样详细的解释。那基于这种情况,在这根k线出现buy,那当这根k线走完之前,我如何判断已经开过仓了呢?事后当然好判断了,state,holding都可以。这个疑惑解开我就彻底明白了。还请fly老师再忍一忍,解答小女子最后一个问题!拜谢了!

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