682 浏览
0

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

不要看图说话。图是有误导性的,或者说和数据判断不是一致的。按你的代码没有返回就说明当时的条件没有满足你的上穿条件。

李思恒 已回答的问题 2023年11月2日