无限易实现实时获取分钟K线数据 策略开发

实现功能:
将tick数据转化为分钟K线数据,并更新推送。另外提供了最新分钟K线的实时数据。
以下是完整的类。
不知道怎么用,或者需要完整可用代码的可以找我咨询。

"""
作者:Leo
微信:470770753
"""
########################################################################
class BarManager(object):
    """
    K线合成器,支持:
    1. 基于Tick合成1分钟K线
    """

    # ----------------------------------------------------------------------
    def __init__(self, onBar):
        """Constructor"""
        self.bar = None  # 1分钟K线对象
        self.onBar = onBar  # 1分钟K线回调函数

        self.lastTick = None  # 上一TICK缓存对象

        self._lastopen=None
        self._lasthigh=None
        self._lastlow=None
        self._lastclose=None

    # ----------------------------------------------------------------------
    def updateTick(self, tick):
        """TICK更新"""
        newMinute = False  # 默认不是新的一分钟

        # 判断类型
        if type(tick.datetime) is str:
            tick.datetime = datetime.datetime.strptime(tick.datetime, "%Y-%m-%d %H:%M:%S")
        if self.bar and hasattr(self.bar, "datetime") and (type(self.bar) is str):
            self.bar.datetime = datetime.datetime.strptime(self.bar.datetime, "%Y-%m-%d %H:%M:%S")

        if not self.bar: # 尚未创建对象
            self.bar = VtBarData()
            newMinute = True
        elif self.bar.datetime.minute != tick.datetime.minute: # 新的一分钟
            # 生成上一分钟K线的时间戳
            self.bar.datetime = tick.datetime
            self.bar.datetime = self.bar.datetime.replace(second=0, microsecond=0)  # 将秒和微秒设为0
            self.bar.date = self.bar.datetime.strftime('%Y%m%d')
            self.bar.time = self.bar.datetime.strftime('%H:%M:%S.%f')

            # 推送已经结束的上一分钟K线
            self.onBar(self.bar)

            # 创建新的K线对象
            self.bar = VtBarData()
            newMinute = True

        # 初始化新一分钟的K线数据
        if newMinute:
            self.bar.vtSymbol = tick.vtSymbol
            self.bar.symbol = tick.symbol
            self.bar.exchange = tick.exchange

            self.bar.open = tick.lastPrice
            self.bar.high = tick.lastPrice
            self.bar.low = tick.lastPrice
            self._lastopen=self._lasthigh=self._lastlow=self._lastclose=tick.lastPrice
        # 累加更新老一分钟的K线数据
        else:
            self.bar.high = max(self.bar.high, tick.lastPrice)
            self._lasthigh=self.bar.high
            self.bar.low = min(self.bar.low, tick.lastPrice)
            self._lastlow=self.bar.low

        # 通用更新部分
        self.bar.close = tick.lastPrice
        self._lastclose=tick.lastPrice
        self.bar.datetime = tick.datetime
        self.bar.openInterest = tick.openInterest

        if self.lastTick:
            self.bar.volume += (tick.volume - self.lastTick.volume)  # 当前K线内的成交量

        # 缓存Tick
        self.lastTick = tick
    # ----------------------------------------------------------------------
    @property
    def lastopen(self):
        return self._lastopen
    @property
    def lasthigh(self):
        return self._lasthigh
    @property
    def lastlow(self):
        return self._lastlow
    @property
    def lastclose(self):
        return self._lastclose

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值