金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 1066|回复: 11

为什么python策略调用history_bars却获取到了未来K线?

[复制链接]

45

主题

254

帖子

254

积分

等级: 免费版

注册:
2023-9-29
曾用名:
发表于 2025-4-16 21:10 | 显示全部楼层 |阅读模式
我在回测时以AU00为基准合约, handle_bar里调用 history_bars('UR00', 1, '5m', ['datetime', 'close'], include_now=True) 在执行到20230209 21:05:00时,
返回的K线数据时标是2023-02-10 09:05:00, 说明返回了未来K. (我金字塔软件上采用的时区是北京时区)
虽然'UR00'无夜盘,但是当时时间(context.now)是20230209 21:05:00 是在2023-02-10之前, 不应该返回未来的K,而应该返回20230209 15:00:00对应的K线
这应该是个BUG,望确认并修改!  

回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-4-17 08:48 | 显示全部楼层
截图202504170847589687.png

本地正常。你客户端什么版本的?用最新价版试下呢。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

45

主题

254

帖子

254

积分

等级: 免费版

注册:
2023-9-29
曾用名:
 楼主| 发表于 2025-4-17 12:09 | 显示全部楼层
技术009 发表于 2025-4-17 08:48
本地正常。你客户端什么版本的?用最新价版试下呢。

你好!  我是include_now=True.  我的版本是最新的:V7.10
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-4-17 14:48 | 显示全部楼层
这个现象我们无法复现。 你最好能提供更多的相关的信息方便我们定位问题。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

45

主题

254

帖子

254

积分

等级: 免费版

注册:
2023-9-29
曾用名:
 楼主| 发表于 2025-4-17 14:57 | 显示全部楼层
如下是我的代码和日志贴图:
# 本Python代码主要用于策略交易
# 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。
from PythonApi import *

import pandas as pd
import numpy as np
#  参数定义区,这里定义的参数可以直接在context对象中获取。--(选择实现)
#def parameter()
#    input_par(myvalues1,5,1,20,1)
#    input_par(myvalues2,10,1,20,1)

class GlobalCls:
    def _init_(self):
        self.name = 'global var'
g = GlobalCls()

#PS: 确保g.context已经设置         
def Print(content):
    dt_str = g.context.now.strftime('%Y%m%d %H:%M:%S')
    print("[{}] {}".format(dt_str, content))
   
#----------------------------------------
pd.set_option('display.max_columns', None) #解决显示列省略问题
pd.set_option('display.max_rows', None)
pd.set_option('display.width', 1000)   # 控制,使不换行
pd.set_option('display.float_format', lambda x: '%.2f' % x) #取消科学计数显示
#  在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。--(必须实现)
def init(context):
    # 在context中保存全局变量
    print("------初始化逻辑init(context)-------")
    g.context = context
    g.run_type = context.run_info.run_type
    print(f"context.run_info:{context.run_info}")
    print(f"context.run_info.base_book_id:{context.run_info.base_book_id}")
   
    # print(策略启动) #调试打印输出
   

# before_trading此函数会在每天基准合约的策略交易开始前被调用,当天只会被调用一次。--(选择实现)
def before_trading(context):
    pass


# 你选择的品种的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新。--(必须实现)
def handle_bar(context):
    # 开始编写你的主要的算法逻辑。
    symbol = 'UR00'
    freq = '5m'
    bars = history_bars(symbol, 1, freq, ['datetime', 'close'], include_now=True)
    Print(f" {symbol} {freq} ret bars' end_stamp:{bars[-1,0]}")
    pass
   
   
# after_trading函数会在每天交易结束后被调用,当天只会被调用一次。 --(选择实现)
def after_trading(context):
    pass
   
#--------------------------------------------------------------

   
截图202504171457131684.png
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-4-17 15:14 | 显示全部楼层
奇怪,我早上回测时候是正常的。  这个问题,我本地也能复现了,我反馈下。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

45

主题

254

帖子

254

积分

等级: 免费版

注册:
2023-9-29
曾用名:
 楼主| 发表于 2025-4-18 18:16 | 显示全部楼层
若修复好后, 请说一声
回复

使用道具 举报

45

主题

254

帖子

254

积分

等级: 免费版

注册:
2023-9-29
曾用名:
 楼主| 发表于 2025-6-12 14:21 | 显示全部楼层
技术009 发表于 2025-4-17 15:14
奇怪,我早上回测时候是正常的。  这个问题,我本地也能复现了,我反馈下。

大侠,这个问题解决了吗?  
我现在用的是V7.1版本,仍旧是发生这个错误
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-6-12 14:27 | 显示全部楼层
这个暂时没有改动,在回测中暂时只能自行做一些有效性验证的代码逻辑了。
或者是有 夜盘和无夜盘的分开做回测。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

45

主题

254

帖子

254

积分

等级: 免费版

注册:
2023-9-29
曾用名:
 楼主| 发表于 2025-6-12 14:39 | 显示全部楼层
技术009 发表于 2025-6-12 14:27
这个暂时没有改动,在回测中暂时只能自行做一些有效性验证的代码逻辑了。
或者是有 夜盘和无夜盘的分开做 ...

大侠,
*)我的策略的交易是对5m级别的K线进行分析的
*)我的策略是回测及实盘都是要在run_info.frequency一分钟级别上获取5m的K线
  之所以如此,是需要在休盘时提前1分钟发出平仓单
所以,如果include_now设置为False,则无法获取当前5分钟的K,达不到策略的要求. 若设置为True又会导致这个回测获取到未来K的问题

补充内容 (2025-6-12 14:41):
context.run_info.frequency='1m' ; 而K线的获取是:history_bars(..,freq='5m',..)

补充内容 (2025-6-12 14:50):
请问,针对我这策略, 若实盘用include_now=True, 能获取到当时的实际价格价格吗?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-30 16:45 , Processed in 0.093480 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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