金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
12
返回列表 发新帖
楼主: 刘通

关于Python程序history_bars_date的获取昨日收盘价问题-1

[复制链接]

38

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2025-6-11 13:06 | 显示全部楼层
本帖最后由 技术006 于 2025-6-11 13:21 编辑
刘通 发表于 2025-6-11 11:17
这是最新的证据以及验证结果。
以下是程序取值,请帮忙留意!history_bars函数返回的昨日收盘价,对应当前 ...

1.涨幅有两种算法,一种是当前最新价和昨收比较。另一种是当前最新价与昨结算比较。
上图中显示牌中使用算法是第二种。

2.在你本地数据完整的情况下,history_bars和history_bar_date都应该能取值指定日期的数据。
你在取收盘价时,顺带把k线时间一并获取,并输出k线的日期。就能判断自己现在取的数据是哪一天。(5楼中的昨收的价格一定不是最近几天的范围内。你大概率缺失数据)


金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

21

主题

85

帖子

85

积分

等级: 免费版

注册:
2025-4-8
曾用名:
 楼主| 发表于 2025-6-11 14:31 | 显示全部楼层
老师,您好!多谢您的回复。我是用如下程序取昨日收盘价:
def get_previous_day_close(context, contract, current_time):
    """获取前一交易日的收盘价"""
    try:
        bars = history_bars(contract, 1, '1d', ['close'], skip_suspended=True, include_now=False)
        if bars is None or len(bars) < 1:
            print(f"无法获取 {contract} 的前一日收盘价")
            return None
        
        if isinstance(bars, np.ndarray):
            previous_close = bars[-1, 0] if bars.ndim == 2 else bars[-1]
        elif isinstance(bars, list) and all(isinstance(bar, dict) for bar in bars):
            previous_close = bars[-1]['close']
        else:
            print(f"无法识别 {contract} 的 bars 类型: {type(bars)}")
            return None
        
        return previous_close
    except Exception as e:
        print(f"获取 {contract} 的前一日收盘价失败: {str(e)}")
        return None
我用如下程序算涨跌幅的:
def calculate_price_change(context, contract):
    """计算给定合约的涨跌幅,使用文华交易软件逻辑"""
    current_time = datetime.datetime.now()
    try:
        current_price = get_current_price(contract)
        if current_price is None:
            return None

        if is_night_session(current_time):
            reference_price = get_today_afternoon_close(context, contract, current_time)
        else:
            reference_price = get_previous_day_close(context, contract, current_time)

        if reference_price is None:
            return None

        price_change = (current_price - reference_price) / reference_price * 100
        #print(f"当前时间{current_time},期货ID{contract},当前价{current_price},收盘价{reference_price},百分比{price_change}%")
        return price_change
    except Exception as e:
        print(f"计算 {contract} 的涨跌幅时出错: {str(e)}")
        return None
目前算出来的涨跌幅如下:
14:24:09 > 当前涨幅第一: AG00, 对应涨幅=6.98%, 跌幅第一: JM00, 对应跌幅=-27.03%
14:24:09 > 开多期货ID是 AG00: 涨幅=6.98%, 收盘价8312.0,交易价格=8892.0, 时间: 2025-06-11 14:24:09.292278,百分比6.977863330125119%
14:24:09 > 开空期货ID是 JM00: 跌幅=-27.03%, 收盘价1078.5,交易价格=787.0, 时间: 2025-06-11 14:24:09.309176,百分比-27.028280018544276%
14:24:09 > 当前持仓: {'AG00': {'direction': 'long', 'open_price': 8892.0}, 'JM00': {'direction': 'short', 'open_price': 787.0}}
这个收盘价就是get_previous_day_close函数获取的,非常不准。
回复

使用道具 举报

21

主题

85

帖子

85

积分

等级: 免费版

注册:
2025-4-8
曾用名:
 楼主| 发表于 2025-6-11 14:34 | 显示全部楼层
我取的日线数据补全,接入如下。我感觉我补全的数据没有问题,且程序逻辑也是对的,不知为何昨日收盘价这么简单的数据取不准,多谢指点!
截图202506111432356218.png
截图202506111433139542.png
回复

使用道具 举报

21

主题

85

帖子

85

积分

等级: 免费版

注册:
2025-4-8
曾用名:
 楼主| 发表于 2025-6-11 14:45 | 显示全部楼层
请问如果我取昨日收盘价,我下载日线数据还是分钟数据,有何区别?
截图202506111445345003.png
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-6-11 14:46 | 显示全部楼层
本帖最后由 技术009 于 2025-6-11 14:48 编辑

老实说,取前一个日线的收盘价,我也不知道你这边为什么需要额外封装出那么多代码。
就2行代码 就结束了的问题。 你不行 就直接用下面代码直接取好吧,别在里面做其他处理了。
另外你截图你下的数据是1分钟?
截图202506111445216532.png
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

38

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2025-6-11 14:53 | 显示全部楼层
本帖最后由 技术006 于 2025-6-11 14:59 编辑

已经解答过了:
1.你本地缺失日线数据,在使用history_bars等获取数据时,输出获取数据的datetime字段就能判断,8892是什么时候的价格。以白银为例,近期就没有这个8892.0价格。['datetime','close']
在不打开k线图的情况下,右键数据日线数据,也能判断出是否缺失数据。
2.正常使用python的用户,应该具备自主调试分析的能力。


金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

21

主题

85

帖子

85

积分

等级: 免费版

注册:
2025-4-8
曾用名:
 楼主| 发表于 2025-6-11 16:25 | 显示全部楼层
收到,目前已经能取到昨日收盘价,请问我运行Python程序时,下载分钟的数据,是否也可以取昨日收盘价。还有在运行模式中,我选走完K线,或者固定轮转(tick线),对比较期货的涨跌幅,哪个更加精准。多谢指点!
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-6-11 17:21 | 显示全部楼层
“下载分钟的数据,是否也可以取昨日收盘价” 你接口中指定的获取是日线,你就要下日线的才行。

金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

21

主题

85

帖子

85

积分

等级: 免费版

注册:
2025-4-8
曾用名:
 楼主| 发表于 2025-7-2 08:27 | 显示全部楼层
收到,多谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-9-28 06:45 , Processed in 0.187609 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表