Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/ invest-robot-contest_invest-bot-main/configuration/configuration.py
5925 views
1
from configparser import ConfigParser
2
3
from configuration.settings import StrategySettings, AccountSettings, TradingSettings, BlogSettings
4
5
__all__ = ("ProgramConfiguration")
6
7
8
class ProgramConfiguration:
9
"""
10
Represent all bot configuration
11
"""
12
def __init__(self, file_name: str) -> None:
13
# classic ini file
14
config = ConfigParser()
15
config.read(file_name)
16
17
self.__tinkoff_token = config["INVEST_API"]["TOKEN"]
18
self.__tinkoff_app_name = config["INVEST_API"]["APP_NAME"]
19
20
self.__blog_settings = BlogSettings(
21
blog_status=bool(int(config["BLOG"]["STATUS"])),
22
bot_token=config["BLOG"]["TELEGRAM_BOT_TOKEN"],
23
chat_id=config["BLOG"]["TELEGRAM_CHAT_ID"]
24
)
25
26
self.__account_settings = AccountSettings(
27
min_liquid_portfolio=int(config["TRADING_ACCOUNT"]["MIN_LIQUID_PORTFOLIO"]),
28
min_rub_on_account=int(config["TRADING_ACCOUNT"]["MIN_RUB_ON_ACCOUNT"])
29
)
30
31
self.__trading_settings = TradingSettings(
32
delay_start_after_open=int(config["TRADING_SETTINGS"]["DELAY_START_AFTER_EXCHANGE_OPEN_SECONDS"]),
33
stop_trade_before_close=int(config["TRADING_SETTINGS"]["STOP_TRADE_BEFORE_EXCHANGE_CLOSE_SECONDS"]),
34
stop_signals_before_close=int(config["TRADING_SETTINGS"]["STOP_SIGNALS_BEFORE_EXCHANGE_CLOSE_MINUTES"])
35
)
36
37
self.__trade_strategy_settings = []
38
for strategy_section in config.sections():
39
if strategy_section.startswith("STRATEGY_") and not strategy_section.endswith("_SETTINGS"):
40
self.__trade_strategy_settings.append(
41
StrategySettings(
42
name=config[strategy_section]["STRATEGY_NAME"],
43
figi=config[strategy_section]["FIGI"],
44
ticker=config[strategy_section]["TICKER"],
45
max_lots_per_order=int(config[strategy_section]["MAX_LOTS_PER_ORDER"]),
46
settings=config[strategy_section + "_SETTINGS"]
47
)
48
)
49
50
@property
51
def tinkoff_token(self) -> str:
52
return self.__tinkoff_token
53
54
@property
55
def tinkoff_app_name(self) -> str:
56
return self.__tinkoff_app_name
57
58
@property
59
def blog_settings(self) -> BlogSettings:
60
return self.__blog_settings
61
62
@property
63
def account_settings(self) -> AccountSettings:
64
return self.__account_settings
65
66
@property
67
def trade_strategy_settings(self) -> list[StrategySettings]:
68
return self.__trade_strategy_settings
69
70
@property
71
def trading_settings(self) -> TradingSettings:
72
return self.__trading_settings
73
74