3.20K 浏览
1

import os
import json
import pandas as pd
from tqsdk import TqApi, TqAuth
from time import sleep
from datetime import datetime as dt  
def get_big_vol():
    """
    在主力合约中, 筛选昨日持仓量和成交量较大的
    有些品种日线无成交导致异常, 不能合并查询
    """
    MIN_OI = 1e4
    MIN_VOL = 5e3
    symbols = [] 
    for _contra in api.query_cont_quotes(): 
        try:
            df = api.get_kline_serial(_contra, 24 * 60 * 60, data_length=2)
        except:
            print(_contra, 'except')
            continue
        if len(df) < 2:
            print(_contra, len(df))
            continue
        if (df['close_oi'].values[0] > MIN_OI) and (
            df['volume'].values[0] > MIN_VOL):
            symbols += [_contra]
        else:
            print(_contra, 'min_vol')
            print('主力合约个数: ', len(symbols))
    return symbols
def get_small_mkt_val(symbols):
    """
    排除每手市值较大的合约
    保存: 合约每手乘数, 每跳
    """
    MAX_VAL = 15e4  # 
    MULT, TICK = {}, {}
    for sym in symbols:
        quote = api.get_quote(sym) 
        mult = quote.volume_multiple 
        tick = quote.price_tick 
        mkt_val = quote.last_price * mult
        if mkt_val > MAX_VAL:
            print(sym, round(mkt_val * 1e-4))
            continue
        MULT[sym] = mult
        TICK[sym] = tick
    symbols = MULT.keys()
    return symbols, MULT, TICK

def big_vol_small_val():
    """
    每个交易日只查1~2次主力合约
    查完存本地文件
    """
    F_NAME = 'CONTRACTS.txt'
    now_date = dt.now().strftime("%Y-%m-%d")
    now_hhmm = dt.now().strftime("%H:%M")
    if os.path.exists(F_NAME):
        with open(F_NAME) as f: 
             _dict = json.load(f)
        f_date = _dict['f_date']
        f_hhmm = _dict['f_hhmm']
        b_new_day = f_hhmm < '20:00' and now_hhmm > '20:00'
        if (now_date == f_date) and (not b_new_day): 
            return _dict
    symbols = get_big_vol()                  
    symbols, MULT, TICK = get_small_mkt_val(symbols)
    _dict = {'f_date': now_date,
         'f_hhmm': now_hhmm,
         'MULT': MULT,
         'TICK': TICK} 
    with open(F_NAME, 'w') as f: # 打开文件
        f.write(json.dumps(_dict)) 
    return _dict

auth = TqAuth("**", "**")
api = TqApi(auth=auth)
_dict = big_vol_small_val()
print(_dict)
sleep(3000)

ringo 已回答的问题 2020年12月21日

粘贴进来, 把我的空格都给吃了. 手工加也不起作用. 大家将就看吧.