fa45d8aa5f
- health_checklist.json: 192.168.1.122→node122
- ocr_client.py: docstring IP→node122
- docs/market-data-requirements.md: IP→node122
- 所有API调用通过ProxyHandler({})绕过系统代理
Privoxy对node122:18003返回500,直连正常
161 lines
5.2 KiB
Python
161 lines
5.2 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
|