2023-11-02 15:38:32 +01:00 | | | {
|
| | | "api_key": "<binance-key>",
|
| | | "api_secret": "<binance-secret>",
|
| | |
|
| | | "telegram_bot_token": "<token>",
|
| | | "telegram_chat_id": "<chat-id-to-publish-messages>",
|
| | |
|
| | | "data_folder": "C:/DATA_ITB",
|
| | |
|
| | | // === DOWNLOAD AND MERGE ===
|
| | |
|
| | | "symbol": "BTCUSDT",
|
| | |
|
2025-03-30 20:33:13 +02:00 | | | "description": "BTCUSDT 1min",
|
| | |
|
2024-05-12 19:17:10 +02:00 | | | "freq": "1min", // pandas frequency
|
| | |
|
2023-11-02 15:38:32 +01:00 | | | "data_sources": [
|
| | | {"folder": "BTCUSDT", "file": "klines", "column_prefix": ""}
|
| | | ],
|
| | |
|
| | | // === GENERATE FEATURES ===
|
| | |
|
| | | "feature_sets": [
|
| | | {"column_prefix": "", "generator": "talib", "feature_prefix": "", "config": {"columns": ["close"], "functions": ["SMA"], "windows": [1, 5, 10, 15, 60]}},
|
| | | {"column_prefix": "", "generator": "talib", "feature_prefix": "", "config": {"columns": ["close"], "functions": ["LINEARREG_SLOPE"], "windows": [5, 10, 15, 60]}},
|
2024-03-17 11:12:55 +01:00 | | | {"column_prefix": "", "generator": "talib", "feature_prefix": "", "config": {"columns": ["close"], "functions": ["STDDEV"], "windows": [5, 10, 15, 60]}},
|
| | | {"column_prefix": "", "generator": "common.my_feature_example:my_feature_example", "feature_prefix": "", "config": {"columns": "close", "function": "add", "parameter": 2.0, "names": "close_add"}}
|
2023-11-02 15:38:32 +01:00 | | | ],
|
| | |
|
| | | // === LABELS ===
|
| | |
|
| | | "label_sets": [
|
| | | {"column_prefix": "", "generator": "highlow2", "feature_prefix": "", "config": {"columns": ["close", "high", "low"], "function": "high", "thresholds": [2.0], "tolerance": 0.2, "horizon": 120, "names": ["high_20"]}},
|
| | | {"column_prefix": "", "generator": "highlow2", "feature_prefix": "", "config": {"columns": ["close", "high", "low"], "function": "low", "thresholds": [2.0], "tolerance": 0.2, "horizon": 120, "names": ["low_20"]}}
|
| | | ],
|
| | |
|
| | | // === TRAIN ===
|
| | |
|
2023-12-22 16:36:28 +01:00 | | | "label_horizon": 120, // Batch/offline: do not use these last rows because their labels might not be correct
|
| | | "train_length": 525600, // Batch/offline: Uses this number of rows for training (if not additionally limited by the algorithm)
|
2023-11-02 15:38:32 +01:00 | | |
|
2024-03-23 15:34:58 +01:00 | | | "train_feature_sets": [
|
| | | {
|
| | | "generator": "train_features", "config": {
|
| | | // Use values from the attributes: train_features, labels, algorithms
|
| | | }}
|
| | | ],
|
| | |
|
2023-11-02 15:38:32 +01:00 | | | "train_features": [
|
| | | "close_SMA_1", "close_SMA_5", "close_SMA_10", "close_SMA_15", "close_SMA_60",
|
| | | "close_LINEARREG_SLOPE_5", "close_LINEARREG_SLOPE_10", "close_LINEARREG_SLOPE_15", "close_LINEARREG_SLOPE_60",
|
| | | "close_STDDEV_5", "close_STDDEV_10", "close_STDDEV_15", "close_STDDEV_60"
|
| | | ],
|
| | |
|
2024-03-23 15:34:58 +01:00 | | | "labels": ["high_20", "low_20"],
|
2023-11-02 15:38:32 +01:00 | | |
|
| | | "algorithms": [
|
| | | {
|
| | | "name": "lc", // Unique name will be used as a column suffix
|
| | | "algo": "lc", // Algorithm type is used to choose the train/predict function
|
2025-03-30 20:33:13 +02:00 | | | "params": {"is_scale": true, "length": 0},
|
2025-03-07 17:16:37 +01:00 | | | "train": {"penalty": "l2", "C": 1.0, "class_weight": null, "solver": "sag", "max_iter": 100}
|
2023-11-02 15:38:32 +01:00 | | | }
|
| | | ],
|
| | |
|
2023-12-28 14:27:08 +01:00 | | | "features_horizon": 2880, // Online/stream: Minimum data length for computing features. Take it from feature generator parameters
|
2023-12-09 19:59:29 +01:00 | | | "features_last_rows": 5, // Online/stream: Last values which are really needed and have to be computed. All older values are not needed
|
2023-11-02 15:38:32 +01:00 | | |
|
2023-12-22 16:36:28 +01:00 | | | // === GENERATE SIGNALS ===
|
| | |
|
2023-12-09 19:59:29 +01:00 | | | "signal_sets": [
|
| | | {
|
| | | // Combine two unsigned scores into one signed score
|
| | | "generator": "combine", "config": {
|
2023-12-22 16:36:28 +01:00 | | | "columns": ["high_20_lc", "low_20_lc"], // 2 columns: with grow score and fall score
|
| | | "names": "trade_score", // Output column name: positive values - buy, negative values - sell
|
2023-12-24 20:22:49 +01:00 | | | "combine": "difference", // "no_combine" (or empty), "relative", "difference"
|
| | | "coefficient": 1.0, "constant": 0.0 // Normalize
|
2023-12-09 19:59:29 +01:00 | | | }},
|
| | | {
|
2023-12-22 16:36:28 +01:00 | | | // Generate boolean buy-sell column depending on thresholds
|
2023-12-09 19:59:29 +01:00 | | | "generator": "threshold_rule", "config": {
|
2023-12-22 16:36:28 +01:00 | | | "columns": "trade_score",
|
| | | "names": ["buy_signal_column", "sell_signal_column"], // Output boolean columns
|
2023-12-24 20:22:49 +01:00 | | | "parameters": {
|
2025-03-30 20:33:13 +02:00 | | | "buy_signal_threshold": 0.015,
|
| | | "sell_signal_threshold": -0.015
|
2023-12-24 20:22:49 +01:00 | | | }
|
2023-12-09 19:59:29 +01:00 | | | }}
|
| | | ],
|
| | |
|
2025-02-16 12:49:10 +01:00 | | | // === OUTPUTS ===
|
| | |
|
| | | "output_sets": [
|
| | | {"generator": "score_notification_model", "config": {
|
| | | "score_notification": true,
|
| | | "score_column_names": ["trade_score"],
|
| | | "notify_band_up": true,
|
| | | "notify_band_dn": true,
|
| | | "positive_bands": [
|
2025-03-30 20:33:13 +02:00 | | | {"edge": 0.015, "frequency": 2, "sign": "〉〉〉📈", "bold": true, "text": "BUY ZONE"},
|
| | | {"edge": 0.01, "frequency": 5, "sign": "〉〉", "bold": false, "text": "strong"},
|
| | | {"edge": 0.005, "frequency": 10, "sign": "〉", "text": "weak"}
|
2025-02-16 12:49:10 +01:00 | | | ],
|
| | | "negative_bands": [
|
2025-03-30 20:33:13 +02:00 | | | {"edge": -0.005, "frequency": 10, "sign": "〈", "text": "weak"},
|
| | | {"edge": -0.01, "frequency": 5, "sign": "〈〈", "bold": false, "text": "strong"},
|
| | | {"edge": -0.015, "frequency": 2, "sign": "〈〈〈📉", "bold": true, "text": "SELL ZONE"}
|
2025-02-16 12:49:10 +01:00 | | | ]
|
| | | }},
|
| | | {"generator": "diagram_notification_model", "config": {
|
| | | // Regularly sending historic data with prices, scores and buy-sell trade decisions
|
| | | "diagram_notification": true,
|
| | | "notification_freq": "1D",
|
| | |
|
| | | "score_column_names": "trade_score",
|
2025-03-30 20:33:13 +02:00 | | | "score_thresholds":[-0.015, 0.015],
|
2025-02-16 12:49:10 +01:00 | | |
|
| | | // 5 minutes aggregation and this number of 5 minute intervals
|
| | | "resampling_freq": "5min", "nrows": 288
|
| | | }},
|
| | | {"generator": "trader_simulation", "config": {
|
| | | "buy_signal_column":"buy_signal_column",
|
| | | "sell_signal_column": "sell_signal_column"
|
| | | }}
|
| | | //{"generator": "trader_binance", "config": {
|
| | | // "buy_signal_column":"buy_signal_column",
|
| | | // "sell_signal_column": "sell_signal_column"
|
| | | //"no_trades_only_data_processing": false,
|
| | | //"test_order_before_submit": false,
|
| | | //"simulate_order_execution": false,
|
| | | //"percentage_used_for_trade": 99.0, // How much should be used in orders
|
| | | //"limit_price_adjustment": 0.001, // Limit order price relative to the latest close price
|
| | | //}}
|
| | | ],
|
2023-11-02 15:38:32 +01:00 | | |
|
| | | // === FINDING BEST TRADE PARAMETERS ===
|
| | |
|
2025-04-17 17:36:48 +02:00 | | | "simulate_model": {
|
2023-11-02 15:38:32 +01:00 | | | "data_start": 0,
|
| | | "data_end": null,
|
| | |
|
| | | "direction": "long",
|
| | | "topn_to_store": 10,
|
| | |
|
2023-12-22 16:36:28 +01:00 | | | "signal_generator": "threshold_rule", // generator in the signal_sets section
|
| | | "buy_sell_equal": false,
|
2023-11-02 15:38:32 +01:00 | | | "grid": {
|
| | | "buy_signal_threshold": [0.02, 0.03, 0.04, 0.05, 0.1, 0.15],
|
| | | "sell_signal_threshold": [-0.02, -0.03, -0.04, -0.05, -0.1, -0.15]
|
| | | }
|
| | | },
|
| | |
|
| | | "rolling_predict": {
|
| | | // int, null or string with date which will be resolved using time_column and removed from source data
|
| | | "data_start": "2020-02-01 00:00:00",
|
| | | "data_end": null,
|
| | |
|
| | | // One of these 3 parameters can be null and will be computed from the other two
|
| | | "prediction_start": null, // First row for starting predictions, for example, "2022-02-01 00:00:00"
|
| | | "prediction_size": 10080, // How many predictions, for example, 1 week 7*1440
|
| | | "prediction_steps": 4, // How many train-prediction steps
|
| | |
|
| | | "use_multiprocessing": false,
|
| | | "max_workers": 8
|
| | | }
|
| | | }
|