161 lines
5.3 KiB
Python
161 lines
5.3 KiB
Python
"""
|
||
# 作 者: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
|