栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【SandQuant 开源工具】 TradeTime 灵活操作交易日历的python库

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【SandQuant 开源工具】 TradeTime 灵活操作交易日历的python库

TradeTime

TradeTime是针对交易开发的日期时间工具,在计算上和python标准库datetime完美结合,可以灵活对日期时间进行运算操作。

  • 支持和datetime结合使用;
  • 目前只支持A股交易日期和交易时间,可自行导入交易日历或任意工作日历;
  • 当前A股交易时间为:09:30-11:30为早盘,11:30-13:00为盘中休市,13:00-15:00为午盘;
  • 具体使用,可查看说明文档;
链接 Link
  • Home: https://doc.sandquant.com
  • GitHub: https://github.com/Sand-Quant/TradeTime
  • Doc: https://tradetime.readthedocs.io/en/latest
  • PYPI: https://pypi.org/project/TradeTime
导入
pip install tradetime
import tradetime

通过以下场景来看看tradetime的作用:

  • 当前交易日

  • 判断某一天是否为交易日

  • 判断某一天非交易日类型

  • 获取一段时间的交易日历

  • 日期运算符

  • 获取某月月底最后一个交易日

  • 格式转换

  • …

当前交易日
# 假设今天为 2022-03-20
>>> tradetime.date.current()
date(year=2022, month=3, day=21, freq='D')

>>> tradetime.date.current('W') 
date(year=2022, month=3, day=25, freq='W')

>>> tradetime.date.current('Q') 
date(year=2022, month=3, day=31, freq='Q')

# 假设今天为 2022-01-01非交易日
>>> tradetime.date.current() 
Traceback (most recent call last):   
	...     
ValueError: The date is external break, missing param if_break.
    
>>> tradetime.date.current(if_break='past')                                                
date(year=2019, month=12, day=31, freq='D')

判断某一天是否为交易日
>>> tradetime.date.is_trading(datetime.date(2022, 3, 18)) 
True

>>> tradetime.date.is_trading(datetime.date(2022, 3, 19)) 
False

判断某一天非交易日类型
>>> tradetime.date.break_type(20200101, 'D') 
'external break'
>>> tradetime.date.break_type(20200101, 'W') 
'internal break'
>>> tradetime.date.break_type(20200101, 'M') 
'external break'
>>> tradetime.date.break_type(20200101, 'Q') 
'external break'
>>> tradetime.date.break_type(20200101, 'Y') 
'external break'

获取一段时间的交易日历
# 一段时间的open bars
>>> tradetime.date.bars(datetime.date(2022, 2, 1), datetime.date(2022, 3, 12), freq='W', is_open=True)
0    2022-02-07
1    2022-02-14
2    2022-02-21
3    2022-02-28
4    2022-03-07

# 一段时间的close bars
>>> tradetime.date.bars(datetime.date(2022, 2, 1), datetime.date(2022, 3, 12), freq='W')
0    2022-02-11
1    2022-02-18
2    2022-02-25
3    2022-03-04
4    2022-03-11
Name: date, dtype: object

# 允许溢出
>>> tradetime.date.bars(datetime.date(2022, 2, 1), datetime.date(2022, 3, 12), freq='W', overflow=True) 
0    2022-02-11
1    2022-02-18
2    2022-02-25
3    2022-03-04
4    2022-03-11
5    2022-03-18

日期运算符
  • 和int,进行bar位移

    # 加法
    >>> tradetime.date(2022, 3, 18, freq='D') + 3 
    date(year=2022, month=3, day=23, freq='D')
    
    >>> tradetime.date(2022, 3, 18, freq='W') + 3 
    date(year=2022, month=4, day=8, freq='W')
    
    # 减法
    >>> tradetime.date(2022, 3, 18, freq='D') - 3  
    date(year=2022, month=3, day=15, freq='D')
    
    >>> tradetime.date(2022, 3, 18, freq='W') - 3 
    date(year=2022, month=2, day=25, freq='W')
    
    # 不建议反向进行加减,这样做会很奇怪
    >>> tradetime.date.operation_inverse = True  # 必须设置后才可以反向运算
    
    >>> 3 + tradetime.date(2022, 3, 18, freq='D')
    date(year=2022, month=3, day=23, freq='D')
    >>> 3 - tradetime.date(2022, 3, 18, freq='D')
    date(year=2022, month=3, day=15, freq='D')
    
  • 和tradetime.bardelta,进行bar位移

    >>> tradetime.date(2022, 3, 18, freq='D') + tradetime.bardelta(date_bars=2)                
    date(year=2022, month=3, day=22, freq='D')
    
    # 必须频率一致
    >>> tradetime.date(2022, 3, 18, freq='D') + tradetime.bardelta(date_bars=2, date_freq='Q') 
    Traceback (most recent call last):                                                        
      ...
    ValueError: 2022-03-18 is not in freq 'Q'
     
    >>> tradetime.date(2022, 3, 18, freq='D') - tradetime.bardelta(date_bars=2)                
    date(year=2022, month=3, day=16, freq='D')
    
    # 同样不建议反向进行加减,这样做会很奇怪
    
  • 和datetime.delta,进行时间位移,而不是bar位移,不考虑是否为交易日;

    >>> tradetime.date(2022, 3, 18, freq='D') + datetime.timedelta(days=2) 
    date(year=2022, month=3, day=20, freq='D')
    
    >>> tradetime.date(2022, 3, 18, freq='W') + datetime.timedelta(days=3) 
    date(year=2022, month=3, day=21, freq='W')
    
    # 同样不建议反向进行加减,这样做会很奇怪
    

获取某月月底最后一个交易日
>>> tradetime.date.get_close(2021, m=7)
date(year=2021, month=7, day=30, freq='M')

>>> tradetime.date.get_close(2021, q=3)
date(year=2021, month=9, day=30, freq='Q')

格式转换
>>> tradetime.date(2022, 1, 4).py_date() 
datetime.date(2022, 1, 4)
>>> tradetime.date(2022, 1, 4).pd_date() 
DatetimeIndex(['2022-01-04'], dtype='datetime64[ns]', freq=None)

欢迎关注~ SandQuant 专注于全球金融数据和量化投资策略

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/928747.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号