快期包含了全部期货品种的信息,可以很方便的转换给vnpy使用 ,回测的时候就不用一个一个品种输入信息了
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,
)