vnpy 查询持仓量_VNPY合成指数合约

Talk is cheap ,show my code(不要纠结我的代码命名,我就喜欢这么搞,自己看着舒服)#下面只发修改部分的代码class CtpMdApi(MdApi):"""CTP行情API实现"""#----------------------------------------------------------------------def __init__(self, gatewa...
摘要由CSDN通过智能技术生成

Talk is cheap ,show my code(不要纠结我的代码命名,我就喜欢这么搞,自己看着舒服)

#下面只发修改部分的代码

class CtpMdApi(MdApi):

"""CTP行情API实现"""

#----------------------------------------------------------------------

def __init__(self, gateway):

#指数合约字典

self.RBSymbolDict ={} #RBtick行情字典,用于合成指数合约

#----------------------------------------------------------------------

def roundToPriceTick(self, priceTick, price):

"""取整价格到合约最小价格变动"""

if not priceTick:

return price

newPrice = round(price/priceTick, 0) * priceTick

return newPrice

def onRtnDepthMarketData(self, data):

#先推送tick行情

self.gateway.onTick(tick)

#合成指数合约

RBTick99 = VtTickData()

#过滤合约没有挂单导致指数合约一档价格无穷大

if 'rb' in tick.symbol and 'efp' not in tick.symbol and (tick.bidPrice1 < 9999999 or tick.askPrice1 < 9999999):

self.RBSymbolDict[tick.symbol] = tick

if self.RBSymbolDict:

for X in range(len(list(self.RBSymbolDict.values()))):

TickValue = list(self.RBSymbolDict.values())[X]

RBTick99.openInterest += TickValue.openInterest

if RBTick99.openInterest:

for X in range(len(list(self.RBSymbolDict.values()))):

TickValue = list(self.RBSymbolDict.values())[X]

#指数合约持仓量加权

RBTick99.lastPrice += TickValue.lastPrice * (TickValue.openInterest/RBTick99.openInterest)

RBTick99.volume += TickValue.volume * (TickValue.openInterest/RBTick

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要安装好vnpy库,并在vnpy的安装目录下找到vn.trader\app\cta_strategy\strategy_template.py文件,这是vnpy的策略模板文件。 接下来,我们根据期货套利策略的需求,对策略模板进行修改。具体而言,我们需要重写以下方法: 1. on_init(self): 用于策略初始化,包括设置参数、订阅合约等。 2. on_start(self): 策略启动时执行的方法。 3. on_stop(self): 策略停止时执行的方法。 4. on_tick(self, tick: TickData): 处理行情数据的方法,用于更新策略的状态。 5. on_trade(self, trade: TradeData): 处理成交数据的方法。 6. on_order(self, order: OrderData): 处理委托数据的方法。 7. on_bar(self, bar: BarData): 处理K线数据的方法,用于实现基于K线的策略。 下面是一个简单的期货套利策略示例,以两个相同品种但不同到期日的期货合约为例。假设当前时间为t,合约A的到期日为t1,合约B的到期日为t2,我们的策略目标是通过买入A合约,卖出B合约来实现套利。当t1-t2的时间差小于某个阈值时,我们就认为A和B之间存在套利机会,此时我们就执行套利交易。 ```python from vnpy.app.cta_strategy import ( CtaTemplate, StopOrder, TickData, BarData, TradeData, OrderData, Direction ) class FuturesArbitrageStrategy(CtaTemplate): """""" author = "Your name" strategy_name = "FuturesArbitrageStrategy" # 策略参数 spread_threshold = 5 # 时间差阈值,以分钟为单位 # 策略变量 long_pos = 0 # 多头持仓 short_pos = 0 # 空头持仓 last_tick_A = None # A合约最新tick数据 last_tick_B = None # B合约最新tick数据 last_trade_A = None # A合约最新成交数据 last_trade_B = None # B合约最新成交数据 parameters = ["spread_threshold"] variables = [ "long_pos", "short_pos", "last_tick_A", "last_tick_B", "last_trade_A", "last_trade_B" ] def on_init(self): """ 策略初始化 """ self.write_log("策略初始化") # 订阅合约 self.subscribe(self.symbol_A, "") self.subscribe(self.symbol_B, "") def on_start(self): """ 策略启动 """ self.write_log("策略启动") def on_stop(self): """ 策略停止 """ self.write_log("策略停止") def on_tick(self, tick: TickData): """ 处理行情数据 """ if tick.vt_symbol == self.symbol_A: self.last_tick_A = tick else: self.last_tick_B = tick # 如果A和B的最新tick数据都存在,就进行套利判断 if self.last_tick_A is not None and self.last_tick_B is not None: t1 = self.last_tick_A.datetime t2 = self.last_tick_B.datetime if abs((t1 - t2).total_seconds() / 60) < self.spread_threshold: self.arbitrage() def on_trade(self, trade: TradeData): """ 处理成交数据 """ if trade.vt_symbol == self.symbol_A: self.last_trade_A = trade else: self.last_trade_B = trade def on_order(self, order: OrderData): """ 处理委托数据 """ pass def on_bar(self, bar: BarData): """ 处理K线数据 """ pass def arbitrage(self): """ 套利交易 """ # 如果A和B的最新成交数据都存在,就进行套利交易 if self.last_trade_A is not None and self.last_trade_B is not None: price_A = self.last_trade_A.price price_B = self.last_trade_B.price if price_A > price_B: # A合约价格高于B合约,执行买入A合约,卖出B合约 self.buy(self.symbol_A, 1, price_A) self.short(self.symbol_B, 1, price_B) else: # A合约价格低于B合约,执行卖出A合约,买入B合约 self.short(self.symbol_A, 1, price_A) self.buy(self.symbol_B, 1, price_B) ``` 以上就是一个简单的期货套利策略的实现,可以使用vnpy的回测引擎进行回测。需要注意的是,这个策略只是一个示例,实际的套利策略需要根据具体的市场情况和交易规则进行设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值