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)
电话好多好多退换货的 发表新评论 2025年4月26日
1.不要修改kline的原始列 比如 kline[“datetime”] = xxxx
2.is_changing 你判断的是kline有更新 不是产生新的 kline , 应该是 is_changing(kline.iloc[-1],”datetime”)
电话好多好多退换货的 发表新评论 2025年4月26日
Exception: 您的账户不支持下载历史数据功能,需要购买后才能使用。升级网址:https://www.shinnytech.com/tqsdk-buy/ 怎么在免费版用回测,他的代码运行后让交费才能,所有的回测都是这个提示。快风了
你用是专业版还是免费版?我的免费版不能