我稍微修改了双均线策略的实例代码,跟踪淀粉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日