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

cAlgo特定时间平仓cBot故障求助:无报错但未执行平仓

cBot定时平仓问题的修复方案

你的代码存在几个关键问题,导致无法按时执行平仓:

  • 时间对象错误
    机器人标注了TimeZone = TimeZones.UTC,但代码里用的DateTime.Now是本地机器时间,和服务器UTC时间不匹配。必须使用Server.Time来获取平台的UTC时间,确保时间判断准确。

  • 无重复执行防护
    OnTick会在每个价格变动时触发,8:00整的时间段内会多次进入判断逻辑。虽然平仓后头寸会消失,但添加一个标记可以避免不必要的重复操作。

  • 冗余参数
    代码里的Parameter参数未被使用,可以直接删除。

修复后的代码如下:

using System;
using System.Linq;
using cAlgo.API;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class CloseAllPositions : Robot
    {
        // 标记是否已执行过当日平仓操作
        private bool _hasClosedToday = false;

        protected override void OnTick()
        {
            var currentTime = Server.Time;
            // 检查是否为UTC时间8:00,且当日未执行过平仓
            if (currentTime.Hour == 8 && currentTime.Minute == 0 && !_hasClosedToday)
            {
                foreach (var position in Positions)
                {
                    ClosePosition(position);
                }
                // 标记当日已平仓,避免重复执行
                _hasClosedToday = true;
            }
            // 每日重置标记(比如00:01时重置)
            if (currentTime.Hour == 0 && currentTime.Minute == 1)
            {
                _hasClosedToday = false;
            }
        }
    }
}

额外说明:

  • 如果你的目标时间是本地时间而非UTC,需要调整currentTime.Hour的数值,或者修改机器人的TimeZone属性为对应的时区(比如TimeZones.NewYork)。
  • 平仓操作需要确保机器人有足够的权限,不过你的代码已经设置AccessRights = AccessRights.None,平仓操作不需要额外权限,这个设置没问题。

内容的提问来源于stack exchange,提问作者Ahad Firdosi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:15:45