1.98K 浏览
0

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日
0

单独取一下看看有没有问题,去掉这些复杂代码,简单的在下午1点取1分钟数据看看

李思恒 已回答的问题 2021年9月29日
您正在查看1个答案中的1个,单击此处查看所有答案。