代码逻辑优化求助(修改一下变量名也好

2021-09-17 17:10:47 +08:00
 bleutail

背景是通过行情端口获取期货数据合成 k 线,意外情况有两个:1 、休盘; 2 、端口不稳定有时候在收盘后仍然会回报两组数据,比如收盘是 11:30:00.一般最后行情回报时间会在 11:29:59.xxxx,但有时最后回报时间为 11:30:00.xxxxx

1 属于固定情况比较好处理,主要问题是 2 。我的处理是超过收盘时间的数据都放下一 k 线内,简单说 11:30:00.xxx 来了一个很高的价格,那么这个价格可以当作 13:30:00-13:30:15 这个时间段内的 k 线的最高价(下午 13:30 开盘)。

    while True:  # 当出现行情时间大于 last_time + period 时,则发送上一时间段的已成熟 kbar,last_time 在第一个 if 判断中作为未成熟 kbar 所属时间段的开端,在 else 语句中将 last_time 更新为 last_time + period 。
        data = sub_q.get()
        UpdateTime = data['UpdateTime']
        LastPrice = data['LastPrice']
        if UpdateTime < last_time + period:  # 11:30:15 11:30:00 11:29:45
            if LastPrice > high:
                high = LastPrice
            elif LastPrice < low:
                low = LastPrice
            last_price = LastPrice  # 最后价格是为了收盘价准备
            volume += data['volume']
        else:  # 跳出时间条件判断则说明收盘价已成立
            if (UpdateTime - last_time) < datetime.timedelta(Minutes=10):#是否休盘
                if last_time.second == 00:#如果为真说明 11:30 以后仍有有行情回报
                    flag_day = False
                flag_day3 = False
            if flag_day2 and flag_day:  # 都为真值则是正常情况
                close = last_price
                kbar_q.put({
                    'open': open,
                    'high': high,
                    'low': low,
                    'close': close,
                    'volume': volume,
                    'ask': ask,
                    'bid': bid,
                    'ask_v': ask_v,
                    'bid_v': bid_v,
                    'datetime': last_time + period  # 把上一个时间段的最后时刻作为 kbar 时间属性
                })
                # 先发送上一个 kbar 然后更新 ohlv 以及相关属性
                open = LastPrice
                high = LastPrice
                low = LastPrice
                volume = data['volume']
                ask = data['ask']
                bid = data['bid']
                ask_v = data['ask_v']
                bid_v = data['bid_v']
                if flag_day3:#是否经过休盘
                    last_time = last_time + period  # data['datetime']需要取整
                else:
                    last_time = UpdateTime - \
                        datetime.timedelta(
                            seconds=UpdateTime.second, microseconds=UpdateTime.microsecond)
            else:
                if LastPrice > high:
                    high = LastPrice
                elif LastPrice < low:
                    low = LastPrice
                last_price = LastPrice  # 最后价格是为了收盘价准备
                volume += data['volume']
                flag_day = True
                last_time = UpdateTime - \
                        datetime.timedelta(
                            seconds=UpdateTime.second, microseconds=UpdateTime.microsecond)
1469 次点击
所在节点    Python
3 条回复
2i2Re2PLMaDnghL
2021-09-18 12:03:37 +08:00
意义不明,你到底要优化什么?

没看代码,我猜你可以预处理一下把 > 11:30 的数据点直接挪到下一个 k 线
再推荐个中文变量名。
windyCity1
2021-09-18 14:17:55 +08:00
codeReview ?免费的?恐怕没什么人给你做吧。。。。。。

自己公司里面找大佬给看看吧,这个比较实际
bleutail
2021-09-19 00:17:12 +08:00
自己画了下流程图 搞定了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/802588

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX