2023-11-02 15:38:32 +01:00
{
2025-09-14 14:21:25 +02:00
"train" : true , // If true (offline) then models will be trained before use and more data will be processed. Use false for predict only (online) mode with only latest data
2025-04-17 14:21:17 +01:00
"venue" : "binance" ,
2025-10-12 12:35:34 +02:00
//"client_args": {"tld": "us"},
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" ,
"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
2025-07-28 19:31:15 +02:00
"label_horizon" : 120 , // Batch/offline: do not use these last rows because their labels might not be correct
2025-10-28 12:09:10 +01:00
"features_horizon" : 120 , // Online/stream: Minimum data length for computing features (lookback). Take it from feature generator parameters
2025-07-28 19:31:15 +02:00
"train_length" : 525600 , // Batch/offline: Uses this number of rows for training (if not additionally limited by the algorithm)
"predict_length" : 288 , // These records must be kept up-to-date (in contrast to those in feature horizon)
"append_overlap_records" : 5 , // Online/stream: These records will be requested and then re-computed on each iteration
// === DOWNLOAD AND MERGE ===
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 ===
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-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
}
}