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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 关于变量执行顺序的问题

   

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


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

主题:关于变量执行顺序的问题

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


加好友 发短信
等级:论坛游侠 帖子:124 积分:75 威望:0 精华:0 注册:2012/7/13 13:22:05
关于变量执行顺序的问题  发帖心情 Post By:2016/8/10 9:40:36    Post IP:110.212.28.46[显示全部帖子]

if 变量=0 then begin 
执行语句;
变量:=1;
end
我在这种情况下执行语句一直执行,因此说明变量并没有被付值为1;
然而当我把程序改成这样:

if 变量=0 then begin 
执行语句;
end
if 变量=0 then 变量:=1;
变量就直接变成了1,按理说如果程序按从上往下顺序执行的话,应该执行语句执行了一次,然后变量=1,然后语句不再执行了,而这种情况语句一次也不执行了,而不是执行了一次。

最后,我想实现的是语句执行了一次然后就不执行了,我是后台程序


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


加好友 发短信
等级:论坛游侠 帖子:124 积分:75 威望:0 精华:0 注册:2012/7/13 13:22:05
  发帖心情 Post By:2016/8/10 9:54:14    Post IP:110.212.28.46[显示全部帖子]

另外,我用 变量=0 和变量:=1 这样判断或者付值才是我的本意,而不是用EXTGBDATA('变量' )=0 和EXTGBDATASET( '变量',1);
因为考虑到EXTGBDATA和EXTGBDATASET一直保存着变量的值就算程序停止,而我想要的是每次重新打开程序都初始化,不要原先保存的变量值

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


加好友 发短信
等级:论坛游侠 帖子:124 积分:75 威望:0 精华:0 注册:2012/7/13 13:22:05
  发帖心情 Post By:2016/8/10 10:17:51    Post IP:110.212.28.46[显示全部帖子]

不好意思,这个我也感觉到奇怪,我怀疑是extgbdata储存了“之前”数据的问题,我有时候是可以执行的有时候是不行的,我现在执行是又不行了,所以没法发给你证明
我还是贴代码吧:
(1)
变量shit,
if extgbdata('shit')=0 then begin//if shit=0 then begin
TBUY(1,entrysize,mkt);//后台,通过虚拟持仓开仓
end
if extgbdata('shit')=0 then EXTGBDATASET( 'shit',1);
在这种情况下,TBUY语句是没有执行的

(2)然而,这种情况:

if extgbdata('shit')=0 then begin//if shit=0 then begin
//TBUY(1,entrysize,mkt);
end
if extgbdata('shit')=0 then EXTGBDATASET( 'shit',1);
if extgbdata('shit')=1 then TBUY(1,entrysize,mkt);
这种情况,TBUY是执行的,成交了,说明了shit的确变成了1

(3)这种情况,变量shit应该变成1之前Tbuy要执行一次才对,可是tbuy没有执行
if extgbdata('shit')=0 then begin//if shit=0 then begin
TBUY(1,entrysize,mkt);
end
if extgbdata('shit')=0 then EXTGBDATASET( 'shit',1);

最后重申,我的目的是:tbuy执行一次,之后变量shit变成1,于是条件不符合,然后tbuy就一直不执行了


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


加好友 发短信
等级:论坛游侠 帖子:124 积分:75 威望:0 精华:0 注册:2012/7/13 13:22:05
  发帖心情 Post By:2016/8/10 10:56:43    Post IP:110.212.28.46[显示全部帖子]

variable:shit=0,被初始化为0,数据管理里清空了无论是停止还是执行,还是停止以后再清空shit都是1,
在这种情况下:
if shit=0 then begin
TBUY(1,entrysize,mkt);
end
if shit=0 then shit:=1;
理应是shit=0先执行一次才变成1的,可是shit初始的时候就是1,清空也是1,我变量是这么初始的:variable:shit=0;


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


加好友 发短信
等级:论坛游侠 帖子:124 积分:75 威望:0 精华:0 注册:2012/7/13 13:22:05
  发帖心情 Post By:2016/8/10 11:04:55    Post IP:110.212.28.46[显示全部帖子]

会不会是程序有时候是默认先执行一些变量赋值的语句再执行开仓语句的呢,比如,所有TBUY这种开仓语句都是放在周期结束,也就是程序最后才执行的,于是
当shit变了,tbuy就不执行了,我觉得这种可能性较大;
我今天问这些问题的由来是昨天我想获得当前策略的图表持仓,而不是账户持仓,因为我多策略执行,但由于是后台,所以holding没法获得图表持仓,
于是我考虑用变量来作为开仓平仓条件,在开仓语句的时候把变量重新赋值,这样仓位开了,变量也变了就不会再执行了。
虽然变量变化的时候严格来说并不代表仓位已经开了,或者说单子发出去并且成交了,但是反过来,我要怎么知道单子成交了呢?那还不是要获得持仓的状况吗,
这样的话图表持仓又是不可用的,账户持仓更不行(因为别的策略也在开仓),那我该怎么做呢?

如果开仓语句,也就是单子,系统都是有意放在循环结束,也就是程序最后才考虑执行的,那么我变量改变了也没有意义了,那么,我是不是只能用多账户执行多策略了呢?
用多账户策略一一对应,这样获取的真实持仓就不互相影响了

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


加好友 发短信
等级:论坛游侠 帖子:124 积分:75 威望:0 精华:0 注册:2012/7/13 13:22:05
  发帖心情 Post By:2016/8/10 11:28:05    Post IP:110.212.28.46[显示全部帖子]

解决了,原来就是一个globalvariable的问题

但是又出了新的问题,我3个一模一样对应品种也一模一样的策略(代码变量都一样),
我开始执行,先勾选其中一个,策略执行1次,是对的。

但是当我勾选第二个策略的时候,第一个策略被多重新执行了1次(又开仓了,证明所有东西都又初始化了),
这时候策略1执行2次,策略2执行1次,总共3次

当我再勾选第三个策略执行的时候,之前的两个策略又分别都重新执行了一次,这时候策略1执行3次,2两次,3执行1次
这个是什么问题呢,是不是策略一样所以互相干扰了,我是不是应该把同一策略用不同命名,或者变量都换了,结构不变呢

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


加好友 发短信
等级:论坛游侠 帖子:124 积分:75 威望:0 精华:0 注册:2012/7/13 13:22:05
  发帖心情 Post By:2016/8/10 11:40:44    Post IP:110.212.28.46[显示全部帖子]

在什么情况下保存呢,我只想保证我每次勾选的时候都是重新执行的,不要存下上次停止了的变量
我把策略名字分别保存成别的可以吗?或者名字不变变量名字变,全局变量是不是即使别的策略里有相同变量名也会干扰的?

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


加好友 发短信
等级:论坛游侠 帖子:124 积分:75 威望:0 精华:0 注册:2012/7/13 13:22:05
  发帖心情 Post By:2016/8/10 13:53:43    Post IP:110.212.28.46[显示全部帖子]

在范例代码里面我发现有这样的变量,我也不知道它是不是变量:a1:值,而不是:variable:a1=值
如果我用a1:值,是不是就避免了变量被认为是全局变量,并且在重新开始某策略的时候,不会清零别的正在执行的策略的变量呢
我不能用extgbdata,因为我的目的就是要重新开关策略不存储之前策略变量的值,让其自动初始化

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


加好友 发短信
等级:论坛游侠 帖子:124 积分:75 威望:0 精华:0 注册:2012/7/13 13:22:05
  发帖心情 Post By:2016/8/10 13:57:40    Post IP:110.212.28.46[显示全部帖子]

我能不能把shit设为input而不是变量呢,这样不受策略开关的影响,input的值可以在代码改变吗

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


加好友 发短信
等级:论坛游侠 帖子:124 积分:75 威望:0 精华:0 注册:2012/7/13 13:22:05
  发帖心情 Post By:2016/8/10 14:09:10    Post IP:110.212.28.46[显示全部帖子]

我现在的问题是,我在已经开了一个策略的情况下(勾选了一个预警),然后再勾选另外一个预警(策略),这时候先前开的预警又会初始化一次,也就是关了再开一次
按我的策略来说就是,之前打开的那个策略又开了一次仓;

另外,在我取消勾选某一预警的时候也会出现以上状况,即另一预警又初始化了一次

我用的是globalvariable:变量,在给变量赋值的时候是shit:=1这么赋值,而不是extgbdata,因为extgbdata每次开关都要手动控制初始化太麻烦


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