V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
bleutail
V2EX  ›  Python

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

  •  
  •   bleutail · 40 天前 · 452 次点击
    这是一个创建于 40 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景是通过行情端口获取期货数据合成 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)
    
    2i2Re2PLMaDnghL
        1
    2i2Re2PLMaDnghL   40 天前
    意义不明,你到底要优化什么?

    没看代码,我猜你可以预处理一下把 > 11:30 的数据点直接挪到下一个 k 线
    再推荐个中文变量名。
    windyCity1
        2
    windyCity1   40 天前
    codeReview ?免费的?恐怕没什么人给你做吧。。。。。。

    自己公司里面找大佬给看看吧,这个比较实际
    bleutail
        3
    bleutail   39 天前
    自己画了下流程图 搞定了
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3891 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 08:28 · PVG 16:28 · LAX 01:28 · JFK 04:28
    ♥ Do have faith in what you're doing.