我稍微修改了双均线策略的实例代码,跟踪淀粉2403,在2023/10/27 11:15分左右均线明明出现了上穿,代码并没有捕捉到,请问是什么原因呢?
from tqsdk import TqApi, TqAuth, TargetPosTask,TqBacktest,TqSim,TqAccount from tqsdk.tafunc import ma from datetime import date import logging SHORT = 5 # 短周期 LONG = 20 # 长周期 SYMBOL = "DCE.cs2403" # 合约代码 logging.basicConfig(filename='./logs/out_doublema.log', level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s') api = TqApi(account=TqAccount("xx", "xx", "xx"),auth=TqAuth("xx", "xx")) logging.info("策略开始运行") data_length = LONG + 2 # k线数据长度 # "duration_seconds=60"为一分钟线, 日线的duration_seconds参数为: 24*60*60 klines = api.get_kline_serial(SYMBOL, duration_seconds=60*60, data_length=data_length) target_pos = TargetPosTask(api, SYMBOL) quote = api.get_quote(SYMBOL) while True: api.wait_update() if api.is_changing(klines.iloc[-1], "datetime"): # 产生新k线:重新计算SMA logging.info("最新价: %f" % quote.last_price) short_avg = ma(klines["close"], SHORT) # 短周期 long_avg = ma(klines["close"], LONG) # 长周期 # 均线下穿,做空 if long_avg.iloc[-2] < short_avg.iloc[-2] and long_avg.iloc[-1] > short_avg.iloc[-1]: target_pos.set_target_volume(-1) logging.info("均线下穿,做空") # 均线上穿,做多 if short_avg.iloc[-2] < long_avg.iloc[-2] and short_avg.iloc[-1] > long_avg.iloc[-1]: target_pos.set_target_volume(1) logging.info("均线上穿,做多")
李思恒 已回答的问题 2023年11月2日