You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

算法交易:单Timeframe满足条件仅触发一次订单,周期重复至闭市

算法交易脚本单时间帧单次平仓逻辑实现

需求明确

  • 单个时间帧内,触发条件满足时仅执行一次平仓下单操作
  • 需等待当前时间帧完全结束后,下一个时间帧才可再次触发平仓操作
  • 循环执行该逻辑直至市场闭市

原代码问题分析

  1. 原代码中self.timeframe_check +=1的逻辑无法准确跟踪时间帧切换,可能导致同一时间帧内重复触发操作
  2. 若order_exit_1st和order_exit_2nd同时满足,会执行两次平仓,违反"单帧单次"的核心要求

修正后的实现代码

# 初始化类级变量,用于跟踪当前时间帧和订单执行状态
self.current_timeframe = None
self.order_executed_in_frame = False

# 平仓触发条件判断
order_exit_1st = (neg_first_diff == True and brickk_roc <= -1 and first_trend < 0 and scattered == "SELL")
order_exit_2nd = (voll_roc >= 30 and brickk_roc <= -1 and seccond_trend < 0 and scattered == "SELL")
# 合并触发条件,任一满足即触发平仓
trigger_exit = order_exit_1st or order_exit_2nd

for i in range(len(bricks)):
    if bricks[i] == -7 and red_neg == True:
        # 获取当前时间帧(需根据你的数据源实现正确的时间帧取值逻辑)
        latest_time = self.get_current_timeframe()
        
        # 时间帧切换时重置执行标记
        if latest_time != self.current_timeframe:
            self.current_timeframe = latest_time
            self.order_executed_in_frame = False
        
        # 满足触发条件且当前帧未执行过订单时,执行平仓
        if trigger_exit and not self.order_executed_in_frame:
            self.ExitCancelBuy(order_id, parent_order_id)
            self.ExitOrderBuy(tickers, "sell", quantity)
            print(f"buy order exited {tickers}")
            # 标记当前帧已执行操作,避免重复触发
            self.order_executed_in_frame = True

核心逻辑说明

  1. 时间帧跟踪:通过self.current_timeframe记录当前所在时间帧,当时间帧切换时,自动重置order_executed_in_frame标记
  2. 单帧单次控制:只有触发条件满足且当前帧未执行过订单时,才执行平仓操作,执行后立即标记为已执行,确保同一时间帧内不会重复操作
  3. 条件合并:将两个平仓条件合并为trigger_exit,避免多条件同时满足时重复执行平仓

示例场景

假设当前时间帧为01:

  • 当trigger_exit条件满足时,执行一次平仓操作,order_executed_in_frame设为True
  • 后续即使条件再次满足,只要仍处于01时间帧,不会重复执行
  • 当01时间帧结束,进入02时间帧时,self.current_timeframe更新为02,order_executed_in_frame重置为False,此时若条件满足,可再次执行平仓操作

内容的提问来源于stack exchange,提问作者subash patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:45:30