-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.py
More file actions
67 lines (55 loc) · 2.05 KB
/
config.py
File metadata and controls
67 lines (55 loc) · 2.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import Field, SecretStr
from typing import Optional, Literal
class Settings(BaseSettings):
# GENERAL
LOG_FILE: str = "trading_system.log"
TRADING_MODE: Literal['IBKR', 'CRYPTO', 'BINANCE'] = "IBKR"
CRYPTO_EXCHANGE: str = "binance"
# DASHBOARD SECURITY
DASHBOARD_USERNAME: Optional[str] = Field(default=None, description="Username for Web Dashboard")
DASHBOARD_PASSWORD: Optional[SecretStr] = Field(default=None, description="Password for Web Dashboard")
# IBKR
IB_ACCOUNT: str = Field(default="DU12345", description="IBKR Account ID")
IB_HOST: str = "127.0.0.1"
IB_PORT: int = 7497
IB_CLIENT_ID: int = 1
# BINANCE / CRYPTO
BINANCE_API_KEY: Optional[SecretStr] = None
BINANCE_SECRET_KEY: Optional[SecretStr] = None
BINANCE_TESTNET: bool = False
# COINBASE
COINBASE_API_KEY: Optional[SecretStr] = None
COINBASE_SECRET_KEY: Optional[SecretStr] = None
# KRAKEN
KRAKEN_API_KEY: Optional[SecretStr] = None
KRAKEN_SECRET_KEY: Optional[SecretStr] = None
# GENERIC / OTHERS (For flexibility)
CRYPTO_API_KEY: Optional[SecretStr] = None
CRYPTO_SECRET_KEY: Optional[SecretStr] = None
CRYPTO_PASSPHRASE: Optional[SecretStr] = None
# AI
OPENROUTER_KEY: SecretStr
# Defaulting to Mistral, but users can switch to Gemini
OPENROUTER_MODEL: str = "mistralai/mistral-7b-instruct"
# RISK
MAX_RISK_PER_TRADE_PCT: float = 0.02
MAX_DAILY_LOSS_PCT: float = 0.05
MAX_POSITION_SIZE_PCT: float = 0.10
REQUIRE_STOP_LOSS: bool = True
# NOTIFICATIONS
DISCORD_WEBHOOK_URL: Optional[str] = None
model_config = SettingsConfigDict(
env_file=".env",
env_file_encoding='utf-8',
extra='ignore'
)
# Global Instance
try:
Config = Settings()
except Exception as e:
# If used in CI/Test where env vars missing, might fail.
# But for production code, we want it to be valid.
# In tests, we patch it.
print(f"Configuration Warning: {e}")
Config = None