VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 420
声望: 173

1 BarData的定义如下:

@dataclass
class BarData(BaseData):
    """
    Candlestick bar data of a certain trading period.
    """

    symbol: str
    exchange: Exchange
    datetime: datetime

    interval: Interval = None
    volume: float = 0
    open_interest: float = 0
    open_price: float = 0
    high_price: float = 0
    low_price: float = 0
    close_price: float = 0

    def __post_init__(self):
        """"""
        self.vt_symbol = f"{self.symbol}.{self.exchange.value}"

2 BarData没有表示时间宽度的成员

2.1 里面的成员没有能够区分Bar长度的

datetime:是BarData的开始时间
interval的类型是Interval枚举值,应该是时间单位,取值只能够是:
MINUTE = "1m":表示1分钟
HOUR = "1h":表示1小时
DAILY = "d":表示1日
WEEKLY = "w":表示1周

2.2 问题来了,如何区分5分钟BarData线和30分钟BarData?

如果给你两个BarData对象,怎么区分它是5分钟的和30分钟的呢?它们的Interval只能为MINUTE,也不可能是其他的更大的单位。这样它们岂不是都长的一个样了吗?
是否还需要增加表示时长的width或者表示结束时间的endtime来作为区分呢?
如果是使用width的话,可以这样表示
datetime='2020-9-8 9:00:00',interval = Interval.MINUTE,width=5 —— 5分钟
datetime='2020-9-8 9:00:00',interval = Interval.MINUTE,width=15 —— 5分钟
datetime='2020-9-8 9:00:00',interval = Interval.MINUTE,width=30 —— 30分钟
如果使用endtime的话,可以这样表示:(interval参数就有些多余)
datetime='2020-9-8 9:00:00',endtime='2020-9-8 9:05:00',interval = Interval.MINUTE —— 5分钟
datetime='2020-9-8 9:00:00',endtime='2020-9-8 9:15:00',interval = Interval.MINUTE —— 5分钟
datetime='2020-9-8 9:00:00',endtime='2020-9-8 9:30:00',interval = Interval.MINUTE —— 30分钟

Member
avatar
加入于:
帖子: 126
声望: 14

这么好的问题没有人回复呀

Member
avatar
加入于:
帖子: 5
声望: 0

自己定义一个就行,Interval类 5MINUTE = "5m"

Member
avatar
加入于:
帖子: 420
声望: 173

三个原因导致BarData里不需要表示宽度的成员:

1)很多情况下BarData的交易时长是不相等的,有了时间宽度的成员也不能够推导出当前K线的结束时间,也无法推导出下一个K线的开始时间;
2)不同宽带的K线本身就不应该放在一个容器里。不同时间宽度K线的区分可以通过陈放的容器的不同来区分,如5分钟K线放在bars_5min列表,10分钟K线放在bars_10min列表也就可以区分了。
3) 如果增加了,那么每股BarData在存储的时候都必须多出一个时间宽度字段,也是有代价的。由于1)和2)两个原因,时间宽度又不是很有用或者必须,所以不要也罢。

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】