78 lines
2.2 KiB
Python
78 lines
2.2 KiB
Python
|
|
import json
|
|
from typing import Dict, TypedDict
|
|
|
|
import xgboost as xgb
|
|
from strategy_demo5 import stragety_feature
|
|
|
|
from BuySellPoint.BS_Point import CBS_Point
|
|
from Chan import CChan
|
|
from ChanConfig import CChanConfig
|
|
from ChanModel.Features import CFeatures
|
|
from Common.CEnum import AUTYPE, DATA_SRC, KL_TYPE
|
|
from Common.CTime import CTime
|
|
|
|
|
|
class T_SAMPLE_INFO(TypedDict):
|
|
feature: CFeatures
|
|
is_buy: bool
|
|
open_time: CTime
|
|
|
|
|
|
def predict_bsp(model: xgb.Booster, last_bsp: CBS_Point, meta: Dict[str, int]):
|
|
missing = -9999999
|
|
feature_arr = [missing] * len(meta)
|
|
for feat_name, feat_value in last_bsp.features.items():
|
|
if feat_name in meta:
|
|
feature_arr[meta[feat_name]] = feat_value
|
|
feature_arr = [feature_arr]
|
|
dtest = xgb.DMatrix(feature_arr, missing=missing)
|
|
return model.predict(dtest)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
"""
|
|
本demo主要演示如何在实盘中把策略产出的买卖点,对接到demo5中训练好的离线模型上
|
|
"""
|
|
code = "BTC/USDT"
|
|
begin_time = "2023-11-30"
|
|
end_time = None
|
|
data_src = DATA_SRC.CCXT
|
|
lv_list = [KL_TYPE.K_DAY]
|
|
|
|
config = CChanConfig({
|
|
"trigger_step": True, # 打开开关!
|
|
})
|
|
|
|
chan = CChan(
|
|
code=code,
|
|
begin_time=begin_time,
|
|
end_time=end_time,
|
|
data_src=data_src,
|
|
lv_list=lv_list,
|
|
config=config,
|
|
autype=AUTYPE.QFQ,
|
|
)
|
|
|
|
model = xgb.Booster()
|
|
model.load_model("model.json")
|
|
meta = json.load(open("feature.meta", "r"))
|
|
|
|
treated_bsp_idx = set()
|
|
for chan_snapshot in chan.step_load():
|
|
# 策略逻辑要对齐demo5
|
|
last_klu = chan_snapshot[0][-1][-1]
|
|
bsp_list = chan_snapshot.get_bsp()
|
|
if not bsp_list:
|
|
continue
|
|
last_bsp = bsp_list[-1]
|
|
|
|
cur_lv_chan = chan_snapshot[0]
|
|
if last_bsp.klu.idx in treated_bsp_idx or cur_lv_chan[-2].idx != last_bsp.klu.klc.idx:
|
|
continue
|
|
|
|
last_bsp.features.add_feat(stragety_feature(last_klu)) # 开仓K线特征
|
|
# 买卖点打分,应该和demo5最后的predict结果完全一致才对
|
|
print(last_bsp.klu.time, predict_bsp(model, last_bsp, meta))
|
|
treated_bsp_idx.add(last_bsp.klu.idx)
|