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

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

View File

@@ -0,0 +1,69 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from update_rqdata_data import *"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"contracts = update_contract_data(Exchange.CFFEX)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(contracts[0])\n",
"print(contracts[-1])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"update_bar_data()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
}

View File

@@ -0,0 +1,154 @@
from datetime import datetime
import rqdatac
import pandas as pd
from vnpy.trader.database import BarOverview
from vnpy.trader.datafeed import get_datafeed
from vnpy.trader.object import ContractData, BarData, HistoryRequest
from vnpy.trader.constant import Exchange, Product, OptionType, Interval
from elite_database import EliteDatabase
# 初始化数据服务
datafeed = get_datafeed()
datafeed.init()
# 交易所映射关系
EXCHANGE_RQ2VT = {
"XSHG": Exchange.SSE,
"XSHE": Exchange.SZSE,
"SHFE": Exchange.SHFE,
"CFFEX": Exchange.CFFEX,
"INE": Exchange.INE,
"DCE": Exchange.DCE,
"CZCE": Exchange.CZCE,
"GFEX": Exchange.GFEX
}
def update_contract_data(exchange: Exchange) -> None:
"""更新合约数据"""
# 查询期权信息
df: pd.DataFrame = rqdatac.all_instruments(type="Option")
# 转换合约对象
contracts: list[ContractData] = []
for tp in df.itertuples():
# 交易所过滤
if exchange != EXCHANGE_RQ2VT[tp.exchange]:
continue
# 确认期权类型
if tp.option_type == "C":
option_type = OptionType.CALL
else:
option_type = OptionType.PUT
# 获取最小价格变动
pricetick: float = rqdatac.instruments(tp.order_book_id).tick_size()
# 创建期权对象
contract = ContractData(
symbol=tp.trading_code,
exchange=exchange,
name=tp.trading_code,
product=Product.OPTION,
size=tp.contract_multiplier,
pricetick=pricetick,
min_volume=tp.round_lot,
option_strike=tp.strike_price,
option_listed=datetime.strptime(tp.listed_date, "%Y-%m-%d"),
option_expiry=datetime.strptime(tp.maturity_date, "%Y-%m-%d"),
option_portfolio=tp.underlying_symbol,
option_index=str(tp.strike_price),
option_underlying=tp.trading_code.split("-")[0],
option_type=option_type,
gateway_name="RQ"
)
contracts.append(contract)
# 保存合约信息到数据库
database: EliteDatabase = EliteDatabase()
database.save_contract_data(contracts)
print("合约信息更新成功", len(contracts))
return contracts
def update_bar_data() -> None:
"""更新K线数据"""
# 初始化数据服务
datafeed = get_datafeed()
datafeed.init()
# 获取当前时间戳
now: datetime = datetime.now()
# 获取合约信息
database: EliteDatabase = EliteDatabase()
contracts: list[ContractData] = database.load_contract_data()
# 获取数据汇总
data: list[BarOverview] = database.get_bar_overview()
overviews: dict[str, BarOverview] = {}
for o in data:
# 只保留分钟线数据
if o.interval != Interval.MINUTE:
continue
vt_symbol: str = f"{o.symbol}.{o.exchange.value}"
overviews[vt_symbol] = o
# 遍历所有合约信息
for contract in contracts:
# 如果没有到期时间,则跳过
if not contract.option_expiry:
continue
# 查询数据汇总
overview: BarOverview = overviews.get(contract.vt_symbol, None)
# 如果已经到期,则跳过
if overview and contract.option_expiry < now:
continue
# 初始化查询开始的时间
start: datetime = datetime(2018, 1, 1)
# 实现增量查询
if overview:
start = overview.end
# 执行数据查询和更新入库
req: HistoryRequest = HistoryRequest(
symbol=contract.symbol,
exchange=contract.exchange,
start=start,
end=datetime.now(),
interval=Interval.MINUTE
)
bars: list[BarData] = datafeed.query_bar_history(req)
if bars:
database.save_bar_data(bars)
start_dt: datetime = bars[0].datetime
end_dt: datetime = bars[-1].datetime
msg: str = f"{contract.vt_symbol}数据更新成功,{start_dt} - {end_dt}"
print(msg)
if __name__ == "__main__":
# 更新合约信息
update_contract_data(Exchange.CFFEX)
# 更新历史数据
update_bar_data()