Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/ invest-robot-contest_tinkoff-contest-python-main/src/containers/config.py
5935 views
1
import datetime
2
import re
3
from dataclasses import dataclass
4
5
from tinkoff.invest import CandleInterval
6
7
from src.service.errors import ConfigError
8
9
10
@dataclass
11
class TraderConfig:
12
# TODO:
13
"""Common context of the trader"""
14
15
account_id: str
16
instrument_figi: str
17
config: dict
18
19
@property
20
def candle_timedelta(self) -> datetime.timedelta:
21
match = re.match(r"^(?P<number>\d+)(?P<interval>[mhd])$", self.config["window_size"])
22
if match is None:
23
raise ConfigError("Invalid window_size")
24
kwarg_name = {
25
"m": "minutes",
26
"h": "hours",
27
"d": "days",
28
}[match.groupdict()["interval"]]
29
kwarg_value = int(match.groupdict()["number"])
30
return datetime.timedelta(**{kwarg_name: kwarg_value})
31
32
@property
33
def candle_interval(self) -> CandleInterval:
34
return {
35
"1m": CandleInterval.CANDLE_INTERVAL_1_MIN,
36
"5m": CandleInterval.CANDLE_INTERVAL_5_MIN,
37
"15m": CandleInterval.CANDLE_INTERVAL_15_MIN,
38
"1h": CandleInterval.CANDLE_INTERVAL_HOUR,
39
"1d": CandleInterval.CANDLE_INTERVAL_DAY,
40
}[self.config["candle_interval"]]
41
42