设为首页收藏本站

 找回密码
 注册
查看: 2301|回复: 7
打印 上一主题 下一主题

这个问题如何处理? [复制链接]

Rank: 1

精华
0
UID
243172
积分
13
帖子
10
主题
3
阅读权限
10
注册时间
2016-11-15
最后登录
2018-3-2
跳转到指定楼层
1#
发表于 2018-2-7 10:34:14 |只看该作者 |倒序浏览
希望在每根bar上只做一次开仓操作,用全局变量实现的这个控制。大概原理是,当某根bar符合开仓要求,触发开仓信号后,第一次被tick数据触发时,会进行正确操作,当新tick数据到来,由于用全局变量控制,所以不会再次开仓。策略已经写好了,回测的结果符合预期。但是实盘时发现,同一根bar被第二个tick数据触发时,此时图表上好像会刷新一下,把第一次开仓时的开仓符号抹去?由于此时也同时开启了头寸监控功能,头寸监控就认为仓位不匹配(账户上多了一手,但是策略图表上并没有多),从而报警,引发自动匹配操作。

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
2#
发表于 2018-2-7 11:25:26 |只看该作者
一个bar上的同一个信号,只会发一次单,这个是底层本原的机制。。不需要额外的控制,此时使用全局变量可能会有反效果。。
去掉开仓条件中的全局变量的判断再试试吧。

使用道具 举报

Rank: 1

精华
0
UID
243172
积分
13
帖子
10
主题
3
阅读权限
10
注册时间
2016-11-15
最后登录
2018-3-2
3#
发表于 2018-2-7 11:31:26 |只看该作者
小米 发表于 2018-2-7 11:25
一个bar上的同一个信号,只会发一次单,这个是底层本原的机制。。不需要额外的控制,此时使用全局变量可能 ...

我一直记得在以前的版本中,回测的时候的确一个bar上只触发一次,但是实盘的时候,如果没有什么额外的最大持仓量、资金之类的控制的话,确实会在同一个bar上反复触发的呀?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
4#
发表于 2018-2-7 11:36:20 |只看该作者
PhantomFox 发表于 2018-2-7 11:31
我一直记得在以前的版本中,回测的时候的确一个bar上只触发一次,但是实盘的时候,如果没有什么额外的最 ...

1,使用buy,sell函数,,被反复触发并不等于会反复发单 。。
2,使用a_sendorder函数,确实是会反复发单的可能,此时就需要使用全局变量来控制。但是这个没法使用晓行监控器的功能 呀。。所以你到底用的是哪一类指令呢?

使用道具 举报

Rank: 1

精华
0
UID
243172
积分
13
帖子
10
主题
3
阅读权限
10
注册时间
2016-11-15
最后登录
2018-3-2
5#
发表于 2018-2-7 11:43:26 |只看该作者
本帖最后由 PhantomFox 于 2018-2-7 11:44 编辑
小米 发表于 2018-2-7 11:36
1,使用buy,sell函数,,被反复触发并不等于会反复发单 。。
2,使用a_sendorder函数,确实是会反复发单 ...


使用的buy,sell函数,您的意思是下面的代码,在实盘中一个bar(哪怕被多个tick反复触发)上也实际账户中只会下单一次?

if (high[1] > high[2])
{
   buy(1, open);
}

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
6#
发表于 2018-2-7 14:01:11 |只看该作者
PhantomFox 发表于 2018-2-7 11:43
使用的buy,sell函数,您的意思是下面的代码,在实盘中一个bar(哪怕被多个tick反复触发)上也实际账户中 ...

是的。只要没有人为外力的干涉操作,这个信号只会发一次单 。使用模拟帐号在盘中跑一下试试吧。

使用道具 举报

Rank: 1

精华
0
UID
243172
积分
13
帖子
10
主题
3
阅读权限
10
注册时间
2016-11-15
最后登录
2018-3-2
7#
发表于 2018-2-7 15:01:48 |只看该作者
小米 发表于 2018-2-7 14:01
是的。只要没有人为外力的干涉操作,这个信号只会发一次单 。使用模拟帐号在盘中跑一下试试吧。 ...

那么下面的情况是这么理解吗?

假设我目前持有多头2手

代码如下

if (condition_1)
{
    sell(1, price_1);
}

if (condition_2)
{
    sell(1, price_2);
}

实盘时在同一根bar上最先到来的4个tick数据为: tick_a(满足条件1), tick_b(满足条件2), tick_c(再次满足条件1), tick_d(再次满足条件2),这四个tick对应怎样的执行结果呢?

是:

tick_a:price_1 卖1手
tick_b:price_2 卖1手
tick_c:不发单
tick_d:不发单

这样吗?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
8#
发表于 2018-2-7 15:36:37 |只看该作者
PhantomFox 发表于 2018-2-7 15:01
那么下面的情况是这么理解吗?

假设我目前持有多头2手

如果原本的持仓是大于等于2手的。。那么是实际委托的执行效果就是如你所说的这种表现。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-27 18:04

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部