File size: 3,025 Bytes
9cb5a00
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
"""
ML-3m-trader Configuration
===========================
Central configuration for all tunable parameters.
"""

import os

# ---------------------------------------------------------------------------
# Symbol & Timeframe
# ---------------------------------------------------------------------------
SYMBOL = "XAUUSDc"
TIMEFRAME_MINUTES = 3          # 3-minute bars

# ---------------------------------------------------------------------------
# Data
# ---------------------------------------------------------------------------
DATA_DIR = os.path.join(os.path.dirname(__file__), "data")
MODEL_DIR = os.path.join(os.path.dirname(__file__), "models")
RESULTS_DIR = os.path.join(os.path.dirname(__file__), "results")

LOOKBACK_DAYS = 365            # 1 year of data

# ---------------------------------------------------------------------------
# Feature Parameters
# ---------------------------------------------------------------------------
SMA_FAST_PERIOD = 14
SMA_SLOW_PERIOD = 50
VROC_PERIOD = 14
ADX_PERIOD = 14
MOMENTUM_SI_PERIOD = 10
VIX_PROXY_PERIOD = 20          # rolling std of log-returns

# ---------------------------------------------------------------------------
# Labeling
# ---------------------------------------------------------------------------
ATR_PERIOD = 14
ATR_SL_MULTIPLIER = 1.5        # SL = ATR * multiplier
LABEL_LOOKAHEAD_BARS = 60      # max bars to wait for TP/SL hit (3h at 3m)
RR_RATIO = 1.0                 # risk-reward ratio (1:1)

# Labels (integer encoding)
LABEL_DO_NOTHING = 0
LABEL_BUY = 1
LABEL_SELL = 2
LABEL_HOLD = 3

LABEL_NAMES = {
    LABEL_DO_NOTHING: "DO_NOTHING",
    LABEL_BUY: "BUY",
    LABEL_SELL: "SELL",
    LABEL_HOLD: "HOLD",
}

# ---------------------------------------------------------------------------
# Execution / Risk
# ---------------------------------------------------------------------------
SPREAD_FILTER_MULTIPLIER = 10  # skip if sl_distance < spread * 10
SLIPPAGE_MIN = 0.0             # min random slippage (XAUUSDc units)
SLIPPAGE_MAX = 2.0             # max random slippage (XAUUSDc units)
DEFAULT_BET_PCT = 0.02         # 2% of balance per trade
STARTING_BALANCE = 10_000.0    # USD

# ---------------------------------------------------------------------------
# Model Hyperparameters (LightGBM)
# ---------------------------------------------------------------------------
LGBM_PARAMS = {
    "boosting_type": "gbdt",
    "objective": "multiclass",
    "num_class": 4,
    "metric": "multi_logloss",
    "num_leaves": 63,
    "max_depth": 8,
    "learning_rate": 0.05,
    "n_estimators": 500,
    "subsample": 0.8,
    "colsample_bytree": 0.8,
    "min_child_samples": 20,
    "class_weight": "balanced",
    "random_state": 42,
    "verbose": -1,
    "n_jobs": -1,
}
EARLY_STOPPING_ROUNDS = 30
TRAIN_SPLIT_RATIO = 0.80       # chronological 80/20

# ---------------------------------------------------------------------------
# Random Seed
# ---------------------------------------------------------------------------
RANDOM_SEED = 42