Files
2026-01-17 21:21:30 +08:00

161 lines
5.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
# 作 者84028
# 时 间2024/2/28 21:09
# tsdpsdk
"""
from datetime import datetime
from typing import Any
import tgw
from tushare.subs.model.tick import TsTick, TsTickIdx
def get_ts_code(_type: str, _code: str)->str:
if _type == tgw.MarketType.kNEEQ:
# 北交所
return f'{_code}.BJ'
elif _type == tgw.MarketType.kSSE:
# 上交所
return f'{_code}.SH'
elif _type == tgw.MarketType.kSZSE:
# 深交所
return f'{_code}.SZ'
else:
raise Exception("未知类型,请联系管理员添加对应数据的解析!")
def get_tgw_type_and_code(_code: str) -> (Any, str):
_code, _ext = _code.split('.', 1)
_ext = _ext.upper()
if _ext == 'BJ':
# 北交所
return tgw.MarketType.kNEEQ, _code
elif _ext == 'SH':
# 上交所
return tgw.MarketType.kSSE, _code
elif _ext == 'SZ':
# 深交所
return tgw.MarketType.kSZSE, _code
else:
raise Exception(f"未知类型,请联系管理员添加对应数据的解析!--{_ext}")
def convert_tick_index(tgw_data: dict) -> TsTickIdx:
"""
index_demo = {
'market_type': 101,
'security_code': '000300',
'orig_time': 20240227133145220, # 交易所行情数据时间
'trading_phase_code': '',
'pre_close_index': 3453358500,
'open_index': 3440051600,
'high_index': 3483385500,
'low_index': 3437442200,
'last_index': 3474362400,
'close_index': 0,
'total_volume_trade': 8934304600,
'total_value_trade': 15930131603140000,
'variety_category': 5
}
"""
item = TsTickIdx(
ts_code=get_ts_code(tgw_data.get("market_type"), tgw_data.get("security_code")),
name=None,
trade_time=datetime.strptime(str(tgw_data.get('orig_time'))[:-3], '%Y%m%d%H%M%S'),
last_price=tgw_data.get('last_index')/1000000,
pre_close_price=tgw_data.get('pre_close_index')/1000000,
open_price=tgw_data.get('open_index')/1000000,
high_price=tgw_data.get('high_index')/1000000,
low_price=tgw_data.get('low_index')/1000000,
close_price=tgw_data.get('close_index')/1000000,
volume=tgw_data.get('total_volume_trade')/100,
amount=tgw_data.get('total_value_trade')/100000,
)
return item
def convert_tick_stock(tgw_data: dict) -> TsTick:
"""
tick_demo = {
'market_type': 101,
'security_code': '600000',
'variety_category': 1,
'orig_time': 20240227133145832, # 交易所行情数据时间
'trading_phase_code': 'T111',
'pre_close_price': 7100000,
'open_price': 7070000,
'high_price': 7150000,
'low_price': 7060000,
'last_price': 7110000,
'close_price': 0,
'total_volume_trade': 1621371900,
'total_value_trade': 11528767100000,
'bid_price1': 7110000,
'bid_price2': 7100000,
'bid_price3': 7090000,
'bid_price4': 7080000,
'bid_price5': 7070000,
'bid_price6': 0,
'bid_price7': 0,
'bid_price8': 0,
'bid_price9': 0,
'bid_price10': 0,
'bid_volume1': 20000,
'bid_volume2': 26810000,
'bid_volume3': 38450000,
'bid_volume4': 33100000,
'bid_volume5': 35720000,
'bid_volume6': 0,
'bid_volume7': 0,
'bid_volume8': 0,
'bid_volume9': 0,
'bid_volume10': 0,
'offer_price1': 7120000,
'offer_price2': 7130000,
'offer_price3': 7140000,
'offer_price4': 7150000,
'offer_price5': 7160000,
'offer_price6': 0,
'offer_price7': 0,
'offer_price8': 0,
'offer_price9': 0,
'offer_price10': 0,
'offer_volume1': 25400000,
'offer_volume2': 28180000,
'offer_volume3': 24750000,
'offer_volume4': 63481800,
'offer_volume5': 15723900,
'offer_volume6': 0,
'offer_volume7': 0,
'offer_volume8': 0,
'offer_volume9': 0,
'offer_volume10': 0,
'num_trades': 12339,
'IOPV': 0,
'high_limited': 7810000,
'low_limited': 6390000
}
"""
extra = {}
for i in range(1, 11):
extra[f'ask_price{i}'] = tgw_data.get(f'offer_price{i}')/1000000
extra[f'ask_volume{i}'] = tgw_data.get(f'offer_volume{i}')/100
extra[f'bid_price{i}'] = tgw_data.get(f'bid_price{i}')/1000000
extra[f'bid_volume{i}'] = tgw_data.get(f'bid_volume{i}')/100
item = TsTick(
ts_code=get_ts_code(tgw_data.get("market_type"), tgw_data.get("security_code")),
name=None,
trade_time=datetime.strptime(str(tgw_data.get('orig_time'))[:-3], '%Y%m%d%H%M%S'),
pre_close_price=tgw_data.get("pre_close_price")/1000000,
last_price=tgw_data.get("last_price")/1000000,
open_price=tgw_data.get("open_price")/1000000,
high_price=tgw_data.get("high_price")/1000000,
low_price=tgw_data.get("low_price")/1000000,
close_price=tgw_data.get("close_price")/1000000,
volume=tgw_data.get("total_volume_trade")/100,
amount=tgw_data.get("total_value_trade")/1000000,
count=tgw_data.get("num_trades"),
**extra
)
return item