from datetime import date from tqsdk import * from tqsdk.tafunc import * import pandas as pd import numpy as np import time import warnings warnings.filterwarnings("ignore") try: # 在创建 api 实例时传入 TqBacktest 就会进入回测模式 acc = TqSim() api = TqApi(acc, backtest=TqBacktest(start_dt=date(2021, 9, 1), end_dt=date(2021, 9, 25)), auth=TqAuth("15208415859", "19991221")) #api = TqApi(acc, auth=TqAuth(" ", " ")) data_length_klines = 10 data_length_tick = data_length_klines*60*2 # 获得 1分钟K线的引用 rebar_klines = api.get_kline_serial("KQ.m@SHFE.rb", 60, data_length=data_length_klines) rebar_quote = api.get_quote("KQ.m@SHFE.rb") rebar_tick = api.get_tick_serial("KQ.m@SHFE.rb", data_length = data_length_tick) while True: api.wait_update() if api.is_changing(rebar_tick) and api.is_changing(rebar_klines): #time_start=time.time() #rebar target_pos_rebar = TargetPosTask(api, rebar_quote.underlying_symbol) rebar_tick_v = pd.DataFrame() rebar_tick_v['datetime'] = rebar_tick.datetime.apply(lambda x: time_to_str(x)) rebar_tick_v['datetime'] = pd.to_datetime(rebar_tick['datetime']) rebar_tick_v['amount'] = rebar_tick.amount rebar_tick_v = rebar_tick_v.set_index('datetime') print(rebar_tick_v.tail(3)) rebar_current_data = rebar_klines[['open','close','high','low','volume']] rebar_current_data['datetime'] = rebar_klines.datetime.apply(lambda x: time_to_str(x)) rebar_current_data['datetime'] = pd.to_datetime(rebar_current_data['datetime']) rebar_current_data = rebar_current_data.set_index('datetime') rebar_current_data['amount'] = rebar_tick_v['amount'].resample('1min').sum() print('rebar_current_data', rebar_current_data.tail(3)) rebar_current_data_array = rebar_current_data.to_numpy() except BacktestFinished as e: # 回测结束时会执行这里的代码 api.close() #print(acc.trade_log) # 回测的详细信息 #print(acc.tqsdk_stat) # 回测时间内账户交易信息统计结果,其中包含以下字段 print(acc.tqsdk_stat.init_balance) print(acc.tqsdk_stat.balance) # init_balance 起始资金# balance 结束资金# max_drawdown 最大回撤# profit_loss_ratio 盈亏额比例# winning_rate 胜率# ror 收益率 # annual_yield 年化收益率# sharpe_ratio 年化夏普率# tqsdk_punchline 天勤点评
在回测时因为1分钟的数据没有成交额(amount)字段,就需要同时获取对应的tick数据合成成交额字段。可是当获取8月31日下午1:00的tick数据时,一分钟周期的数据就已经到那天的下午2:59和晚上9点钟夜盘的数据了,请问这个问题怎么处理呢。
谢谢
李思恒 已回答的问题 2021年9月29日