Global 会带来闪烁,我如何解决开仓标签的问题??
我的n1符值来代表开仓,还是没有开仓
现在不能用 Global 可以用什么方法来做,请技术老师支持一下!!
因为有底仓所以不能用MarketPosition 来判断, 问题核心:如何记录我已开仓了?
敬请老师给一个解决方案
没有能完全 理解您说的:2.如果一定要用全局变量控制,那么可以用多个全局变量形成闭环,n1控制条件,n2控制结果或者n2控制n1……,最终就是要满足全局变量在实时情况下的机制才可以,不要形成条件与赋值结果的互斥
这一段的意思,麻烦您把我的这段代码改一下,这样我就要参考了
特别感谢老师的支持
我本就是一个低水平的 也是刚写TB的业余人员,敬请理解
Params
Numeric kcjg(20000); // 开仓价格
Numeric pcjg(19000); // 平仓价格
Numeric Lots(1); // 交易手数
Vars
Global Numeric n1(0); // 0代表没有开仓,1代表已经开仓
Events
OnBar(ArrayRef<Integer> indexs)
{
// 开空仓
If (High >= kcjg And n1 == 0)
{
SellShort(Lots, kcjg);
n1 = 1;
}
// 平空仓
If( Low <=pcjg And n1 == 1)
{
BuyToCover(Lots, pcjg);
n1 = 0;
}
}
Global Numeric n1(0);
改成
series<numeric> n1(0);
这种写法,我用了,当天没有问题,第二天信号就消失了,出现了重复开仓了
前期我们就是用的 series<numeric> n1(0); 这个方案,N1的值第二天就重新符为0了,所以就出现了重复开仓的 BUG
这段代码闪烁的原因,是没搞清楚全局变量在实时情况下的运行机制,全局变量在实时情况下是每一个tick都会改变以及保留相应的值,以开空仓代码为例,您的代码条件用了n1 == 0判断,判断后的操作 又 赋值 n1 = 1,那么n1 = 1 在第二个tick就会被保留,,,第一个tick开空仓的条件满足,,,,第二个tick由于全局变量的改变 n1 = 1,,导致条件又不满足,所以信号在第二个tick,信号消失了,,,,,,,1.不太理解为什么有底仓就不能用MarketPosition进行判断,我觉得一般情况下,就算是加仓,mp也是可以控制仓位的,您可以把mp理解为序列变量。。。2.如果一定要用全局变量控制,那么可以用多个全局变量形成闭环,n1控制条件,n2控制结果或者n2控制n1……,最终就是要满足全局变量在实时情况下的机制才可以,不要形成条件与赋值结果的互斥
没有能完全 理解您说的:2.如果一定要用全局变量控制,那么可以用多个全局变量形成闭环,n1控制条件,n2控制结果或者n2控制n1……,最终就是要满足全局变量在实时情况下的机制才可以,不要形成条件与赋值结果的互斥
这一段的意思,麻烦您把我的这段代码改一下,这样我就好参考了
特别感谢老师的支持
我本就是一个低水平的 也是刚写TB的业余人员,敬请理解
Params
Numeric kcjg(20000); // 开仓价格
Numeric pcjg(19000); // 平仓价格
Numeric Lots(1); // 交易手数
Vars
Global Numeric n1(0); // 0代表没有开仓,1代表已经开仓
Events
OnBar(ArrayRef<Integer> indexs)
{
// 开空仓
If (High >= kcjg And n1 == 0)
{
SellShort(Lots, kcjg);
n1 = 1;
}
// 平空仓
If( Low <=pcjg And n1 == 1)
{
BuyToCover(Lots, pcjg);
n1 = 0;
}
}
因为我是一个循环程序,会多次开空仓,多次开多仓,会同时有空仓与多仓,所以没办法用MarketPosition 来判断,如果能用MarketPosition 来判断,就简单了!!