开拓者期货期权程序化系统交易论坛

标题: Buy和SellShort的问题 [打印本页]

作者: cary20060915    时间: 2017-9-20 14:14:42     标题: Buy和SellShort的问题

Buy函数有以下特性“如果当前持仓状态为空仓,即MarketPosition = -1 时,该函数平掉所有空仓,同时按照参数进行多头建仓,两个动作同时发出。”即会先将空仓平掉,再开多仓。
SellShort则相反

我是这样一段策略:

        //破上限开仓       
          If((Data1.Q_BidPrice-Data0.Q_AskPrice-Mean)>=K And Data0.Q_AskVol>0 And Data1.Q_BidVol>0)       
        {       
                Data0.Buy(Lots,Data0.Q_AskPrice);
                Data1.SellShort(Lots,Data1.Q_BidPrice);
        }       
               
        //破下限开仓       
          If((Data1.Q_AskPrice-Data0.Q_BidPrice-Mean)<=-K And Data0.Q_BidVol>0 And Data1.Q_AskVol>0)       
        {       
                Data0.SellShort(Lots,Data0.Q_BidPrice);
                Data1.Buy(Lots,Data1.Q_AskPrice);
        }       

即破上限或下限时,先将持仓全平,再做同样数量的反手。

可是用模拟柜台测试时却出现了同一个合约,如c1801,同时持有多仓和空仓的情况,请问是哪里出了问题,谢谢!(历史回测时无此问题)
作者: 小米    时间: 2017-9-20 14:27:42

这段代码能有历史回测吗?应该不能啊。
使用了q_xxx函数,这个只能在最后K线上显示信号。。一旦新K线出来,原信号会消失。所以根本没有继续交易

作者: cary20060915    时间: 2017-9-20 15:14:19

您好,这也是我之前问过的一个问题,没人回复,我试了一下发现这个Q函数在tick线上能取到历史数据,在其他周期的BAR上就没有数据(我是在以前别人提问的回复里看到的,结果自己一试确实是这样),结果我就在tick线上做的回测,确实可以,tick线上我取到了过去13个交易日的数据。

我主要想问的问题您能给解答一下吗?
作者: cary20060915    时间: 2017-9-20 15:23:48

另外向您请教一个问题,我这是套利策略,异常的价差往往是转瞬即逝,难以捕捉。我以前是用上一个BAR的close来给信号,然后用当前BAR的open来开平仓,但是二者之间有偏差,造成捕捉到的价格已经不是信号价格了,造成这个策略的有效性大打折扣,所以后来想到“信号价”和“操作价”必须是同一个价格,所以才想到使用这个Q函数价格。

想问问您这个思路对吗?通常的套利策略在这个问题上是怎么处理的,谢谢
作者: 小米    时间: 2017-9-20 16:20:24

cary20060915 发表于 2017-9-20 15:14
您好,这也是我之前问过的一个问题,没人回复,我试了一下发现这个Q函数在tick线上能取到历史数据,在其他 ...

这个情况应该是某一个平仓的委托没能成交。。
需要具体一个个信号,一笔笔委托进行排查,找到原因,做好相应的处理去避免以后再次发生。
作者: 小米    时间: 2017-9-20 16:21:21

cary20060915 发表于 2017-9-20 15:23
另外向您请教一个问题,我这是套利策略,异常的价差往往是转瞬即逝,难以捕捉。我以前是用上一个BAR的close ...

在TICK上了,不存在close变化的问题 了,那就不要用上一个bar的close了呀。就当前的价格在当前发单 就好。
作者: cary20060915    时间: 2017-9-20 19:07:09

小米 发表于 2017-9-20 16:20
这个情况应该是某一个平仓的委托没能成交。。
需要具体一个个信号,一笔笔委托进行排查,找到原因,做好 ...

如果真如您所说的这个原因,那可不太好,因为我之所以使用Q函数对手盘价格,就是为了最大限度的保证实时成交,而就现在玉米每个tick上的买一盘量和卖一盘量通常都在几百手,而我的策略发单量只有一手,如果还出现为成交的状况,是否可以理解为程序运算速度或网速的问题,造成发了单但未能按该价格成交?
作者: cary20060915    时间: 2017-9-20 19:20:18

小米 发表于 2017-9-20 16:21
在TICK上了,不存在close变化的问题 了,那就不要用上一个bar的close了呀。就当前的价格在当前发单 就好 ...

在tick上,同一个BAR上,open=high=low=close是吧,但这都是已成交的价格,这个价格通常介于买一和卖一价格中间,我如果以这个价格发单,不一定能保证实时成交,可能形成多单空单都不成交,或“单腿”成交的情况,就没有形成套利,这怎么办?不知道我理解的对不对
作者: 小米    时间: 2017-9-21 08:48:32

cary20060915 发表于 2017-9-20 19:07
如果真如您所说的这个原因,那可不太好,因为我之所以使用Q函数对手盘价格,就是为了最大限度的保证实时 ...

如果每一笔交易都可以按自己想要的价格的去成交那真是太好了。但事实上不可能啊。。
虽然盘量都在几百手,你发单 一手。但是你怎么确保市场上只有您一位买家呢?你怎么确保其它买家报价比你的更不“友好”呢?没法保证啊。所以仅用对手盘不能成交是很正常的现象。。特别是不活跃的合约更是如此。

ticK上,open与close是一样的,都是成交价。但是high,low我们放的是叫买叫卖价。所以并不相同,,在图表上的注释框里看看就知道了。
为了提高成交的概率 ,一般都是使用对手盘价再加减偏移价格方好。
作者: cary20060915    时间: 2017-9-21 09:12:01

好的,谢谢




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2