策略单元中不同公式定义的全局变量是策略单元的全局变量
全局变量是一类较为特殊的数值型变量,保存的变量值不会因为Bar的改变而消失,它的作用范围是策略单元,我的问题是:策略单元内不同的公式中定义的全局变量,均为策略全局变量吗?
也就是策略中其它公式应用和函数都可以互相访问全局变量。对吗?
只有关掉策略单元后,策略单元中不同公式定义的全局变量所有保存的值才会消失。 不,仅在当前策略范围内有效 我用同一个公式,里面有全局变量,存储用来划线和交易的数值,当策略单元包括一只股票时,结果正常;
当策略单元包含五只股票时,全局变量存储的结果好像是最后一只股票的计算结果,测试结果也只有最后一只是正常的,其余前面四只股票都不正常,用的是最后一只股票的计算结果进行划线和交易
存在bug gwf_13380222 发表于 2019-9-24 15:58 static/image/common/back.gif
我用同一个公式,里面有全局变量,存储用来划线和交易的数值,当策略单元包括一只股票时,结果正常;
当策 ...
您的第一个问题,可能我之前的回复是不够严谨的。
想再确认一下,你所说的全局变量,是哪种方式的?代码是怎么写的?
你前面提问的是策略单元内的不同公式。
现在的问题是同策略单元里用的一个公式,但是有多个数据图层。
这两者是不太一样的吧,请将您的用法以及代码的写法贴一下,才好分析问题。
TBQ的计算机制?
1)五只股票,从第一个bar开始计算,把五只都计算完,才开始计算第二个bar,所以全局变量每次存储的是第五个股票的结果
还是应该这样
2)五只股票,从第一个bar开始计算,把第一只bar都计算完;再开始计算第二个股票,这样全局变量每次存储的是相应股票的结果,才能得到正确的结果 代码如下,全局变量似乎只保存了最后一支股票的结果
Global Numeric buynot;
Global Numeric sellnot;
Global Numeric downnot;
Global Numeric upnot;
Bool Buycondition;
Bool Sellcondition;
Events
onBar(ArrayRef<Integer> indexs)
{
Range
{
k=CurrentBar;
Commentary("k="+Text(CurrentBar));
Length=NDay*n0;//NDay内的分钟线的个数
NumPos=1;
aa=(1+a0/100);
bb=(1-a0/100);
mytime0=0.0930;
TT=Time();
If(TT== mytime0) //更新计算
{
mmax=High;
mmin=Low;
If(mmax==mmin) Return;
for i=1 To Length
{
mmax=Max(High,mmax);
mmin=Min(Low,mmin);
}
buynot=aa*mmax;
sellnot=bb*mmin;
downnot=buynot*0.97;
upnot= sellnot*1.03;
}
/////////////////////////////////////////////////////////////////////////////////////
If(k < Length) Return;
Commentary("buynot="+Text(buynot));
Commentary("sellnot="+Text(sellnot));
Commentary("afa="+Text(afa));
Commentary("upnot="+Text(upnot));
Commentary("downnot="+Text(downnot));
PlotNumeric("1",buynot);
PlotNumeric("2",sellnot);
//入场条件
//////////////////////////////////////////////////////////////
BuyCondition= Close>buynot ;//建多
SellCondition = Close<sellnot ;//建空
// 系统进场
If(MarketPosition == 0)// 当前无仓位
{
If(Buycondition AND Close>downnot) // 开多仓
{
Buy(NumPos,Open);
}Else If(SellCondition AND Close<upnot) // 开空仓
{
SellShort(NumPos,Open);
}
}
// 系统出场
//处理多仓
If(MarketPosition == 1 ) // 已经开多仓,判断是否止损
{
If(downnot>1) PlotNumeric("L",downnot);
If(Close <downnot ) //止损
{
Sell(0,Open);
}
Else If(Sellcondition)
{
Sell(0,Open);
}
}
//处理空仓
If(MarketPosition == -1)// 当前有空仓
{
If(upnot<1000000) PlotNumeric("H",upnot);
If(Close >upnot ) //止损
{
BuyToCover(0, Open);
}
Else If(Buycondition)
{
BuyToCover(0, Open);//平多开空
}
}
} Range 是正常的
Range 就不对了,结果显示为最后一支股票的计算结果
如果我将全局变量换成序列变量,也是对的
为什么全局变量就不对呀
gwf_13380222 发表于 2019-9-25 10:04 static/image/common/back.gif
代码如下,全局变量似乎只保存了最后一支股票的结果
Global Numeric buynot;
Global Numeric selln ...
如何判断只保留最后一个股票的值的?
你对四个变量的赋值 是放在了range条件下的,这样这四个变量是分别在不同的数据图层分别赋值 运算的。。不存在只保留最的一个合约数据的说法呢。。
如你的写法,在K线图的5个数据图层中,是可以看这几个变量在不同的图层中有不同的值的(除非计算结果本身就是一样的)。
ps:至于TBQ的运算机制,您可以看一下相关的文档。
软件导航页---TB量化学院---TBL语言---01TB公式运行机制---002多数据源的Onbar运行机制 从图里可以看出浦发银行(第一支)显示的是南方航空(第五只)的全局变量的计算结果
页:
[1]
2