58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
from dataclasses import dataclass, field
|
||
from typing import List
|
||
|
||
@dataclass
|
||
class Settings:
|
||
# 20 FX
|
||
fx: List[str] = field(default_factory=lambda: [
|
||
"EURUSD=X","GBPUSD=X","USDJPY=X","USDCHF=X","USDCAD=X",
|
||
"AUDUSD=X","NZDUSD=X","EURGBP=X","EURJPY=X","EURCHF=X",
|
||
"GBPJPY=X","AUDJPY=X","CHFJPY=X","CADJPY=X","EURAUD=X",
|
||
"EURNZD=X","GBPAUD=X","GBPCAD=X","AUDCAD=X","NZDJPY=X",
|
||
])
|
||
# 20 CRYPTO
|
||
crypto: List[str] = field(default_factory=lambda: [
|
||
"BTC-USD","ETH-USD","BNB-USD","SOL-USD","XRP-USD",
|
||
"ADA-USD","DOGE-USD","TRX-USD","DOT-USD","AVAX-USD",
|
||
"MATIC-USD","LTC-USD","BCH-USD","LINK-USD","ATOM-USD",
|
||
"XMR-USD","XLM-USD","ETC-USD","FIL-USD","NEAR-USD",
|
||
])
|
||
|
||
yf_period: str = "5d"
|
||
interval: str = "1m"
|
||
starting_cash: float = 10000.0
|
||
loop_sleep_s: int = 2
|
||
root_dir: str = "out"
|
||
commission_per_trade: float = 1.0
|
||
slippage_bp: float = 1.0
|
||
|
||
# — parametry strategii —
|
||
history_min_bars: int = 220
|
||
rsi_len: int = 14
|
||
|
||
# filtry – poluzowane
|
||
require_trend: bool = False # ignoruj EMA200 gdy False
|
||
use_macd_filter: bool = False # ignoruj MACD gdy False
|
||
adx_min: float = 8.0
|
||
atr_min_frac_price: float = 1e-4
|
||
rsi_buy_max: float = 75.0
|
||
rsi_sell_min: float = 25.0
|
||
|
||
# SL/TP
|
||
sl_atr_mult: float = 1.3
|
||
tp_rr: float = 1.5
|
||
|
||
# sizing na ryzyko
|
||
risk_per_trade_frac: float = 0.02 # 2% equity na 1R
|
||
min_size: float = 1.0
|
||
max_size: float = 100000.0
|
||
|
||
# shorty
|
||
allow_short: bool = True
|
||
|
||
@property
|
||
def tickers(self) -> List[str]:
|
||
return self.fx + self.crypto
|
||
|
||
CFG = Settings()
|