快期包含了全部期货品种的信息,可以很方便的转换给vnpy使用 ,回测的时候就不用一个一个品种输入信息了

description

import requests
import json


def to_vt_symbol(tq_symbol) -> str:
    """"""
    if "KQ.m" in tq_symbol:
        ins_type, instrument = tq_symbol.split("@")
        exchange, symbol = instrument.split(".")
        return f"{symbol.upper()}88.{exchange}"
    elif "KQ.i" in tq_symbol:
        ins_type, instrument = tq_symbol.split("@")
        exchange, symbol = instrument.split(".")
        return f"{symbol.upper()}99.{exchange}"
    else:
        exchange, symbol = tq_symbol.split(".")
        return f"{symbol}.{exchange}"


if __name__ == "__main__":
    res = requests.get("http://u.shinnytech.com/t/md/symbols/latest.json")
    data = res.json()
    results = []
    for instrument, info in data.items():
        if info["class"] == "FUTURE_INDEX":
            index_instrument = instrument
            main_instrument = instrument.replace("KQ.i", "KQ.m")
            index_info = info
            main_info = data[main_instrument]

            # merge_info = {**main_info, **index_info}
            results.append(
                {
                    "vt_symbol": to_vt_symbol(index_instrument),
                    "fixed_charge": index_info["commission"],
                    "rate": 0,
                    "name": index_info["ins_name"],
                    "pricetick": index_info["price_tick"],
                    "slippage": index_info["price_tick"],
                    "min_volume": 1,
                    "size": index_info["volume_multiple"],
                },
            )
            results.append(
                {
                    "vt_symbol": to_vt_symbol(main_instrument),
                    "fixed_charge": index_info["commission"],
                    "rate": 0,
                    "name": main_info["ins_name"],
                    "pricetick": main_info["price_tick"],
                    "slippage": main_info["price_tick"],
                    "min_volume": 1,
                    "size": main_info["volume_multiple"],
                },
            )
    json.dump(
        results,
        open("all_contracts.json", mode="w+", encoding="UTF-8"),
        ensure_ascii=False,
    )