量化交易之One Piece篇 - one_piece_config.py - 新增生成futures_info.json的功能

import pandas

from one_piece_server import TQZTianQinClient
from tqz_extern.json_operator import TQZJsonOperator

import re
import os
import sys

class TQZAutoMakeConfig:

    __config_fold = './config'

    __trading_time_json = f'{__config_fold}/trading_time.json'
    __main_futures_xlsx = f'{__config_fold}/main_futures.xlsx'
    __futures_info_json = f'{__config_fold}/futures_info.json'


    @classmethod
    def auto_make_session_json(cls):
        """
        基于天勤量化, 生成小结文件.
        """

        all_tq_main_futures = TQZTianQinClient().load_all_tq_main_futures()

        ret = {}
        for tq_main_future in all_tq_main_futures:
            _tq_future = f'{tq_main_future.split(".")[0]}.{re.match(r"^[a-zA-Z]{1,3}", tq_main_future.split(".")[1]).group()}'
            tq_main_future_data = TQZTianQinClient().query_single_quote(tq_future=tq_main_future)

            ret[_tq_future] = {
                'day': vars(tq_main_future_data['trading_time'])['day'],
                'night': vars(tq_main_future_data['trading_time'])['night']
            }

        for instrument, data in ret.items():
            for session_data in data.values():
                for i in range(len(session_data)):
                    for j in range(len(session_data[i])):
                        hour = session_data[i][j].split(':')[0]
                        if hour >= '24':
                            new_hour = str(int(hour) - int('24')).zfill(2)
                            session_data[i][j] = f'{new_hour}:{session_data[i][j].split(":")[1]}:{session_data[i][j].split(":")[2]}'

        TQZJsonOperator.tqz_write_jsonfile(content=ret, target_jsonfile=cls.__trading_time_json)


    @classmethod
    def auto_make_main_futures_excel(cls):
        """
        根据所有合约的日线收盘数据, 更新当日的所有品种的主力合约
        """

        # last_day, main_futures_list = '2023-04-29', ['SHFE.sn2306', 'DCE.c2307']
        last_day, main_futures_list = TQZTianQinClient().get_lastDay_mainFuturesList()

        daily_main_futures_df = pandas.read_excel(io=cls.__main_futures_xlsx)
        if last_day != daily_main_futures_df['date'].values.tolist()[-1]:
            new_row = len(daily_main_futures_df)
        else:
            new_row = len(daily_main_futures_df) - 1

        daily_main_futures_df.loc[new_row, 'date'] = last_day
        for main_future in main_futures_list:
            main_fut = f'{main_future.split(".")[0]}.{re.match(r"^[a-zA-Z]{1,3}", main_future.split(".")[1]).group()}'

            if main_fut not in daily_main_futures_df.columns:
                daily_main_futures_df[main_fut] = main_future
            else:
                daily_main_futures_df.loc[new_row, main_fut] = main_future

        daily_main_futures_df.to_excel(cls.__main_futures_xlsx, index=False)


    @classmethod
    def auto_make_futures_info_json(cls, refresh: bool = False):
        if os.path.exists(path=cls.__futures_info_json) is True and refresh is False:
            return

        result = {}

        all_tq_symbols = TQZTianQinClient().load_all_tq_main_futures()
        for tq_symbol in all_tq_symbols:
            exchange_str, symbol = tq_symbol.split('.')[0], tq_symbol.split('.')[1]
            tq_sym = f'{exchange_str}.{cls.__get_sym(symbol=symbol)}'
            if tq_sym not in result.keys():
                tq_result = TQZTianQinClient().query_single_quote(tq_future=tq_symbol)
                result[tq_sym] = {
                    "min_tick_price_flow": tq_result['price_tick'],
                    "contract_multiple": tq_result['volume_multiple']
                }

        TQZJsonOperator.tqz_write_jsonfile(content=result, target_jsonfile=cls.__futures_info_json)


    @classmethod
    def __get_sym(cls, symbol: str):
        return re.match(r"^[a-zA-Z]{1,3}", symbol).group()


if __name__ == '__main__':
    # sys.argv.append('futures_info')

    if 2 == len(sys.argv):
        if sys.argv[1] == 'session':
            print(f'make {sys.argv[1]} config json.')
            TQZAutoMakeConfig.auto_make_session_json()
        elif sys.argv[1] == 'main_futures':
            print(f'make {sys.argv[1]} excel.')
            TQZAutoMakeConfig.auto_make_main_futures_excel()
        elif sys.argv[1] == 'futures_info':
            print(f'make {sys.argv[1]} config json.')
            TQZAutoMakeConfig.auto_make_futures_info_json()
        else:
            print(f'unknown type: {sys.argv[1]}.')

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值