增加交易策略、交易指标、量化库代码等文件夹

This commit is contained in:
Win_home
2025-04-27 15:54:09 +08:00
parent ca3b209096
commit f57150dae8
589 changed files with 854346 additions and 1757 deletions

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,87 @@
from vnpy.trader.object import TickData, BarData
from elite_optionstrategy import (
StrategyTemplate,
Parameter,
PortfolioData,
ChainData,
OptionData
)
class ShortRestrikeStrategy(StrategyTemplate):
"""带调仓的做空跨式价差策略"""
author: str = "用Python的交易员"
option_portfolio: str = Parameter("IO") # 期权产品代码
fixed_size: int = Parameter(1) # 交易的手数
percent_add: float = Parameter(0.02) # 委托超价比例
restrike_diff: float = Parameter(500) # ReStrike的偏差值
def on_init(self):
"""策略初始化"""
self.write_log("策略初始化")
self.subscribe_options(self.option_portfolio)
def on_start(self):
"""策略启动"""
self.write_log("策略启动")
def on_stop(self):
"""策略停止"""
self.write_log("策略停止")
def on_tick(self, tick: TickData):
"""Tick推送"""
pass
def on_bars(self, bars: dict[str, BarData]):
"""K线推送"""
# 获取期权组合对象
portfolio: PortfolioData = self.get_portfolio(self.option_portfolio)
# 更新最新期权价格到组合
price_data: dict[str, float] = {}
for bar in bars.values():
price_data[bar.vt_symbol] = bar.close_price
portfolio.update_price(price_data)
# 获取当月期权链
chain: ChainData = portfolio.get_chain_by_level(0)
if not chain:
self.write_log("无法获取对应期权链,请检查是否正确添加了期权合约")
return
# 计算平值行权价
chain.calculate_atm()
# 如果已有目标则检查是否要ReStrike
if self.target_data:
# 获取持仓的行权价
for vt_symbol in self.target_data.keys():
option: OptionData = portfolio.get_option(vt_symbol)
option_strike: float = option.strike
break
# 获取ATM的行权价
atm_strike: float = chain.atm_strike
# 如果偏差在可接受范围内,则无需调仓
if abs(option_strike - atm_strike) < self.restrike_diff:
return
# 清空当前目标
self.clear_targets()
# 做空跨式价差
atm_call = chain.get_option_by_level(cp=1, level=0)
atm_put = chain.get_option_by_level(cp=-1, level=0)
self.set_target(atm_call.vt_symbol, -self.fixed_size)
self.set_target(atm_put.vt_symbol, -self.fixed_size)
# 执行具体的委托交易
self.execute_trading(price_data, self.percent_add)