以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  如何让后台执行全局变量往下传递数据  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=8021)

--  作者:longbow
--  发布时间:2011/9/15 8:50:31
--  如何让后台执行全局变量往下传递数据
环境: 后台执行代码 需求:需要一个全局变量在每次执行的时候往后传递数据 现状: 现在的解决方案是设置全局变量,利用Exdataset 以及Exdata来保存与获取 问题: 上述这种解决问题的方法很好,但有个缺点,就是当算法很多,全局变量很多时查询与维护不方便。 希望: 能用Variable 直接声明一个变量,再每次单步执行的时候它的值能够往后传递。而不是每次单步执行的时候都要重新计算或者利用Exdata获取。 例子: 记录是否已经止损的状态 variable: bstopped:=0; if (stoploss) then bstopped:=1 if (bstopped=0) then begin end if (bstopped=1) then begin end 我现在担心每次重新执行时bstopped都被重新初始化成0. 由于时间紧急,请高手尽快解答一下。 谢谢!
--  作者:longbow
--  发布时间:2011/9/15 8:53:13
--  

用extgbdata和extgbdataset维护起来不方便,特别是这些单值型全局变量比较多的时候

楼主应该是这个意思:

环境:后台执行代码,也可前台,应该不影响

需求:需要一个全局变量(单值型的)在每次执行的时候往后传递数据

现状:现在的解决方案是设置全局变量,利用Exdataset 以及Exdata来保存与获取

上述这种解决问题的方法很好,但有个缺点,就是当算法很多,全局变量很多时查询与维护不方便。

 

希望: 能用Variable2 直接声明一个变量,该变量的作用:

1,再每次单步执行的时候它的值能够往后传递。 

2,在每次加载程序的时候初始化一次初始值,仅此一次。类似runmode、input函数等

3,该变量只在最后一个周期有效    

也就是一个赋值和取值跟普通变量一样方便的单值型全局变量。


--  作者:fly
--  发布时间:2011/9/15 8:59:00
--  

你的是后台程序化交易,请用Exdataset 以及Exdata来保存与获取全局变量.

 

variable:定义的全局变量是用于图表的----用于图表,只会初始化一次,不会出现楼主说的情况


--  作者:阿火
--  发布时间:2011/9/15 14:12:50
--  

 

不好意思,我点错了,编程了二楼的帖子了。

 

补充一下:所声明的全局变量,只局限在改公式使用。不像extgbdata是公共的、开放的

[此贴子已经被作者于2011-9-15 14:13:52编辑过]

--  作者:王锋
--  发布时间:2011/9/15 14:16:49
--  
有一定的可行性,会在日后版本中考虑增加
GlobalVariable: 这样的全局变量声明。
--  作者:阿火
--  发布时间:2011/9/15 16:30:37
--  

图片点击可在新窗口打开查看

丰胸果然牛


--  作者:longbow
--  发布时间:2011/9/15 21:50:25
--  

谢谢。

 

请增加后台执行的全局变量。


--  作者:阿火
--  发布时间:2011/9/17 22:53:32
--  

后来想想,认为:

1,其实无需限定为最后一个周期才有效,如果需要,用户可以自行用islastbar控制

2,图标和后台均可以使用

也就是这样的变量:只局限在公式内部使用的、无需保存的、非公共的、非开放的、赋值和取值非常方便的单值型全局变量

 

有了这样的变量后,会有更多的功效,比如:无需重复计算的变量,都可以使用这个变量加快程序运行速度

举个例子:

//某日内交易模型,开盘价 + 昨日的波幅*0.4 +作为上界
//某日内交易模型,开盘价 - 昨日的波幅*0.4 +作为下界
//这里,昨日波幅的计算,其实无需重复计算,计算一次即可
//有了GlobalViriable,可以加快运算速度,如:
GlobalViriable:gl=drawnull;//初始值为无效值
cond:=day<>ref(day,1);
kpj:=valuewhen(cond,o);
yl:=kpj+gl*0.4;
zc:=kpj-gl*0.4;
……
……
if gl<>drawnull then exit;
nn:=barslast(cond)+1;
bofu:=valuewhen(cond,ref(hhv(h,nn)-llv(l,nn),1));
if date=currentdate then glv1:=bofu;//赋值后,bofu这个变量就不用重新计算了,而最新的信号都可以正确执行


--  作者:longbow
--  发布时间:2011/9/18 21:05:36
--  

LeeVolvo的理解非常正确,就是很多变量是重复计算的,比如开盘价的取值,前三十分钟的最高最低值,以及当日的交易次数与仓位信息。

 

这些计算都是重复的,而且是相当的计算量,尤其是过去N周期的最高最低值,如果能够避免计算,则计算量会非常节省。

 

谢谢!


--  作者:阿火
--  发布时间:2011/9/19 14:35:45
--  
呵呵,要采用这种方法,对模型编写水平的要求就比较高了。