繁簡切換您正在訪問的是FX168財經網,本網站所提供的內容及信息均遵守中華人民共和國香港特別行政區當地法律法規。

FX168财经网>人物频道>帖子

回测中如何避免引入未来函数

作者/sdeewew 2019-09-09 00:00 0 来源: FX168财经网人物频道

函数原型:get_price(security, start_date=None, end_date=None, frequency='daily', fields=None, skip_paused=False, fq='pre', count=None, panel=True)

获取一支或者多只股票的行情数据, 按天或者按分钟,这里在使用时注意 end_date 的设置, 传入的值不要大于等于context.current_dt,否则会引入未来函数。

比如,使用分钟级别的数据进行回测,获取行情时,frequency='daily',end_date='2019-09-03 09:00:00',那么2019-09-03的收盘价(即2019-09-03 15:00:00的价格)就会提前知道。

以下是回测中引入未来函数的错误用法,也可以说是聚宽API的一个bug,回测切记要避免引入未来函数。

函数get_price是用来获取历史数据的,获取实时行情数据应该使用函数get_current_data()。

使用get_current_data()获取实时行情示例 def handle_data(context, data): current_data = get_current_data() print(current_data) print(current_data['000001.XSHE'].last_price) print(current_data['000001.XSHE'].paused) print(current_data['000001.XSHE'].day_open)

df1 = get_price('000300.XSHG', end_date='2019-09-03 09:00:00', frequency='daily', count=1)
df2 = get_price('000300.XSHG', end_date='2019-09-03 10:00:00', frequency='daily', count=1)
df3 = get_price('000300.XSHG', end_date='2019-09-03 13:00:00', frequency='daily', count=1)

close1 = df1.close[-1]
close2 = df2.close[-1]
close3 = df3.close[-1]
if ((close1 == close2) or (close2 == close3)):
    print("引入了未来函数")
    print(df1.close[-1], df2.close[-1], df3.close[-1])
else:
    print("没有引入未来函数")
    
引入了未来函数
3853.61 3853.61 3853.61
 
分享到:
举报财经168客户端下载

全部回复

0/140

投稿 您想发表你的观点和看法?

更多人气分析师

  • 张亦巧

    人气2152文章4145粉丝45

    暂无个人简介信息

  • 梁孟梵

    人气2152文章3177粉丝39

    qq:2294906466 了解群指导添加微信mfmacd

  • 指导老师

    人气1856文章4423粉丝52

    暂无个人简介信息

  • 李冉晴

    人气2296文章3821粉丝34

    李冉晴,专业现贷实盘分析师。

  • 刘钥钥1

    人气2016文章3119粉丝34

    专业从事现货黄金、现货白银模似实盘操作分析指导

  • 张迎妤

    人气1896文章3305粉丝34

    个人专注于行情技术分析,消息面解读剖析,给予您第一时间方向...

  • 金泰铬J

    人气2320文章3925粉丝51

    投资问答解咨询金泰铬V/信tgtg67即可获取每日的实时资讯、行情...

  • 金算盘

    人气2696文章7761粉丝125

    高级分析师,混过名校,厮杀于股市和期货、证券市场多年,专注...

  • 金帝财神

    人气4736文章8329粉丝118

    本文由资深分析师金帝财神微信:934295330,指导黄金,白银,...