from tqsdk import TqApi, TqAuth, TqBacktest, TargetPosTask from tqsdk import tafunc # 转换K线的时间格式:tafunc.time_to_datetime(org_time) # org_time: K线起点时间(按北京时间),自unix epoch(1970-01-01 00:00:00 GMT)以来的纳秒数 from datetime import date, datetime # yylh_mode = None web_gui = True # backtest = TqBacktest(start_dt=date(2024, 8, 15), end_dt=date(2024, 8, 16)) backtest = TqBacktest(start_dt=datetime(2024, 8, 16, 14, 40), end_dt=datetime(2024, 8, 16, 14, 50)) api = TqApi(backtest=backtest, auth=TqAuth("账户", "密码"), web_gui=web_gui) # qh_code = "SHFE.ni2409" qh_code = 'DCE.p2501' # 获得 m1901 5分钟K线的引用 klines_df = api.get_kline_serial(qh_code, 5 * 60, data_length=15) # 创建 m1901 的目标持仓 task,该 task 负责调整 m1901 的仓位到指定的目标仓位 target_pos = TargetPosTask(api, qh_code) # 默认:以对手价成交 while True: api.wait_update() if api.is_changing(klines_df): print(klines_df.tail(2)) klines_df['datetime'] = klines_df['datetime'].apply(tafunc.time_to_datetime) print(klines_df.tail(2)) ma = sum(klines_df.close.iloc[-15:]) / 15 print('时间:', tafunc.time_to_datetime(klines_df.datetime.iloc[-1]), "最新价", klines_df.close.iloc[-1], "MA", ma) if klines_df.close.iloc[-1] > ma: print("最新价大于MA: 目标多头1手") # 设置目标持仓为多头5手 target_pos.set_target_volume(1) elif klines_df.close.iloc[-1] < ma: print("最新价小于MA: 目标空仓") # 设置目标持仓为空仓 target_pos.set_target_volume(0)
电话好多好多退换货的 发表新评论 22小时 前
1.不要修改kline的原始列 比如 kline[“datetime”] = xxxx
2.is_changing 你判断的是kline有更新 不是产生新的 kline , 应该是 is_changing(kline.iloc[-1],”datetime”)
电话好多好多退换货的 发表新评论 22小时 前
Exception: 您的账户不支持下载历史数据功能,需要购买后才能使用。升级网址:https://www.shinnytech.com/tqsdk-buy/ 怎么在免费版用回测,他的代码运行后让交费才能,所有的回测都是这个提示。快风了
你用是专业版还是免费版?我的免费版不能