robcaulk
83343dc2f1
control number of threads, update doc
2022-09-29 00:10:18 +02:00
th0rntwig
683b084323
Set train-test-split shuffle=False as default and remove stratification
2022-09-28 18:23:56 +02:00
Wagner Costa Santos
55ebbeec18
backtest_live models tests refactoring
2022-09-28 08:48:32 -03:00
Timothy Pogue
099137adac
remove hasattr calls
2022-09-27 22:35:15 -06:00
Timothy Pogue
9e36b0d2ea
fix formatting
2022-09-27 22:02:33 -06:00
Timothy Pogue
caa47a2f47
close subproc env on shutdown
2022-09-28 03:06:05 +00:00
Wagner Costa Santos
0be115de9c
backtest_live_models - added new tests and refactoring
2022-09-27 10:26:57 -03:00
Wagner Costa Santos
72aa47fc51
backtest_live_models - fix issue with timerange BT and 2 trainings within same candle (no data)
2022-09-27 00:14:12 -03:00
Wagner Costa Santos
14b96aaa38
backtesting live models - fix ci issues
2022-09-26 19:52:59 -03:00
Wagner Costa Santos
290afd9699
backtest_live_models - fix typo
2022-09-26 19:21:53 -03:00
Wagner Costa Santos
0318ca9f12
backtest_live_models - fix typo
2022-09-26 19:08:25 -03:00
Wagner Costa Santos
22bef71d5d
backtest_live_models - add function comments and tests
2022-09-26 19:01:24 -03:00
Wagner Costa Santos
ec947ad65c
remove commented code - backtest_live_models
2022-09-25 23:47:27 -03:00
Wagner Costa Santos
5880f7a638
backtest_live_models - params validation and get timerange from live models in BT
2022-09-25 23:14:00 -03:00
Wagner Costa Santos
f3f3917da3
Merge branch 'develop' into backtest_live_models
2022-09-25 20:05:26 -03:00
robcaulk
48e89e68b9
fix typos
2022-09-25 20:22:19 +02:00
Wagner Costa Santos
0ed7b2bfc3
change start_backtesting to handle backtest_live_models
2022-09-25 10:35:55 -03:00
robcaulk
873d2a5069
no model save backtest, plot features backtest, ensure inlier plays nice, doc
2022-09-25 11:18:10 +02:00
Wagner Costa Santos
7f116db95e
added generic function to get timerange from existent models
2022-09-24 13:01:53 -03:00
Wagner Costa Santos
d9c16d4888
Merge branch 'develop' into backtest_live_models
2022-09-24 12:30:55 -03:00
Wagner Costa Santos
3ee7eb63f7
starting backtest live models
2022-09-24 12:28:52 -03:00
Matthias
585342f193
Merge pull request #7454 from freqtrade/fix_backtesting_dfsize_freqai
...
Ensure the DF has the same size in backtesting FreqAI
2022-09-24 16:17:39 +02:00
paranoidandy
2cc00a1a2c
Allow use of --strategy-list with freqai, with warning ( #7455 )
...
* Allow use of --strategy-list with freqai, with warning
* ensure populate_any_indicators is identical for resused identifiers
* use pair instead of metadata["pair"]
Co-authored-by: robcaulk <rob.caulk@gmail.com>
2022-09-24 13:21:01 +02:00
Matthias
6643d90e64
simplify freqAI start_backtesting
2022-09-24 10:34:14 +02:00
robcaulk
647200e8a7
isort
2022-09-23 19:30:56 +02:00
robcaulk
77c360b264
improve typing, improve docstrings, ensure global tests pass
2022-09-23 19:17:27 +02:00
robcaulk
9c361f4422
increase test coverage for RL and FreqAI
2022-09-23 18:04:43 +02:00
Robert Caulk
f5cd8f62c6
Remove unused code from BaseEnv
2022-09-23 10:24:39 +02:00
Emre
a4eaff4da6
Add training elapsed time
2022-09-23 01:18:34 -07:00
robcaulk
7295ba0fb2
add test for Base4ActionEnv
2022-09-22 23:42:33 +02:00
robcaulk
eeebb78a5c
skip darwin in RL tests, remove example scripts, improve doc
2022-09-22 21:16:21 +02:00
robcaulk
ea8e34e192
Merge branch 'develop' into dev-merge-rl
2022-09-22 19:46:50 +02:00
th0rntwig
71e6c54ea4
Normalise distances before Weibull fit ( #7432 )
...
* Normalise distances before Weibull
* Track inlier-metric params
2022-09-22 18:11:50 +02:00
Wagner Costa Santos
b1dbc3a65f
remove function remove_training_from_backtesting and ensure BT period is correct with startup_candle_count
2022-09-22 12:13:51 -03:00
robcaulk
b5fd11f91b
protect against unforeseen issues in scanning thread
2022-09-19 21:18:31 +02:00
robcaulk
42c75b4a7b
combine log messages
2022-09-19 19:16:32 +02:00
Robert Caulk
9b66297cc0
Fix append
2022-09-19 12:47:20 +02:00
Robert Caulk
995396c775
Add useful log info
2022-09-19 11:42:56 +02:00
Robert Caulk
ad652817ef
Ensure train ordering after restart
...
Ensure lowest timestamps get trained first after restart
2022-09-19 11:11:23 +02:00
Robert Caulk
f9460c80c2
Merge pull request #7434 from freqtrade/improve-train-queue
...
improve train queue system in FreqAI
2022-09-19 10:55:53 +02:00
Matthias
ea58c29ded
Add plot_feature_importance to schema definition
2022-09-19 08:13:54 +00:00
Matthias
225f7cd5f8
Merge pull request #7431 from initrv/add-plot-feature-importance
...
Add plot feature importance
2022-09-19 08:41:10 +02:00
Matthias
d930931000
Bring back sleep - it'll ensure we give up control over the thread.
2022-09-19 07:14:33 +02:00
robcaulk
470d5d8405
ensure full new pairlist is in the queue
2022-09-18 17:08:07 +02:00
robcaulk
eaa43337d2
improve train queue system, ensure crash resilience in train queue.
2022-09-18 17:00:55 +02:00
robcaulk
95457d23ca
escape freqai-specific characters from file naming
2022-09-18 13:59:30 +02:00
Matthias
667853c504
Use Alias to type config objects
2022-09-18 13:20:55 +02:00
robcaulk
188f75d8ec
set model in models dict
2022-09-18 12:50:44 +02:00
robcaulk
1ef875901a
maintian user privacy by keeping plotly offline
2022-09-18 00:01:42 +02:00
robcaulk
68f7a31504
ensure continued operation despite not being able to plot
2022-09-18 00:00:14 +02:00
robcaulk
2c23effbf2
allow plot to plot multitargets, add test
2022-09-17 19:17:44 +02:00
initrv
1c92734f39
simplify plot_feature_importance call
2022-09-17 18:53:43 +03:00
robcaulk
7b1d409c98
fix mypy/flake8
2022-09-17 17:51:06 +02:00
initrv
86aa875bc9
plot features as html instead of png
2022-09-16 21:47:12 +03:00
initrv
b707a6da35
Add ability to plot feature importance
2022-09-16 19:17:41 +03:00
robcaulk
3b97b3d5c8
fix mypy error for strategy
2022-09-15 00:56:51 +02:00
robcaulk
8aac644009
add tests. add guardrails.
2022-09-15 00:46:35 +02:00
robcaulk
48140bff91
fix bug in 4ActRLEnv
2022-09-14 22:53:53 +02:00
robcaulk
81417cb795
Merge branch 'develop' into dev-merge-rl
2022-09-14 22:49:11 +02:00
initrv
37dd22c89e
Fixed a bug that prevents clearing old models
...
Corrects the error of clearing old models when the model directory contains directories with names that do not match a regular expression
2022-09-14 03:40:13 +03:00
Emre
330d7068ab
Merge branch 'develop' into add-xgboostclassifier
2022-09-10 23:59:11 +03:00
Robert Caulk
075748b21a
Merge pull request #7392 from freqtrade/improve_ai_tests
...
Improve freqai tests by utilizing parametrization
2022-09-10 22:37:21 +02:00
robcaulk
5a0cfee27e
allow user to multithread jobs (advanced users only)
2022-09-10 22:16:49 +02:00
Robert Caulk
73e122ad10
Merge pull request #7391 from wagnercosta/fixBTfreqaiV2
...
Fix FreaqAI backtesting - startup_candle_count bug
2022-09-10 21:53:00 +02:00
Matthias
e4caccc353
Merge pull request #7367 from freqtrade/add-continual-learning
...
add continual learning to catboost and friends
2022-09-10 20:17:28 +02:00
Wagner Costa Santos
311ae8bf1f
freqai backtesting - add startup_candle_count at function description
2022-09-10 14:45:42 -03:00
Emre
60eb02bb62
Add XGBoostClassifier
2022-09-10 20:13:16 +03:00
Robert Caulk
2077f84f9b
Merge pull request #7363 from wagnercosta/fixHyperoptFreqai
...
Fix hyperopt - freqai
2022-09-10 17:02:01 +02:00
Robert Caulk
4a47c63f71
Merge pull request #7374 from th0rntwig/filter-constant-features
2022-09-10 16:58:58 +02:00
robcaulk
10b6aebc5f
enable continual learning and evaluation sets on multioutput models.
2022-09-10 16:54:13 +02:00
Wagner Costa Santos
a1f88cca80
merge develop
2022-09-10 10:35:16 -03:00
Wagner Costa Santos
79985fda01
fix backtesting freqai startup candles bug
2022-09-10 10:27:17 -03:00
Matthias
5705b8759b
Merge branch 'develop' into add-continual-learning
2022-09-10 08:24:04 +02:00
robcaulk
05581db4e3
ensure columns are only dropped in training
2022-09-09 20:37:21 +02:00
Matthias
97be3318f4
Use Datetime_format from constants
2022-09-09 20:31:02 +02:00
robcaulk
a826c0eb83
ensure signatures match, reduce verbosity
2022-09-09 19:30:53 +02:00
Emre
acb410a0de
Remove verbosity params
2022-09-09 19:30:53 +02:00
Emre
df6e43d2c5
Add XGBoostRegressorMultiTarget class
2022-09-09 19:30:53 +02:00
Emre
1b6410d7d1
Add XGBoostRegressor for freqAI, fix mypy errors
2022-09-09 19:30:53 +02:00
Wagner Costa Santos
d38cc06139
Fix freqai backtesting time range issue
2022-09-09 19:27:05 +02:00
Wagner Costa Santos
f4f2884a66
Fix freqai backtesting time range issue
2022-09-07 18:52:58 -03:00
robcaulk
e51d352777
ensure pca is handling same DF as inlier
2022-09-07 19:11:54 +02:00
robcaulk
4c9ac6b7c0
add kwargs, reduce duplicated code
2022-09-07 18:58:55 +02:00
robcaulk
ea7bdac9ed
ensure inlier metric can be combined with other cleaning methods
2022-09-07 18:45:16 +02:00
th0rntwig
cdc72bf8ca
Correct indexing
2022-09-07 18:14:13 +02:00
th0rntwig
047ded1baa
Check for constant columns
2022-09-07 17:47:27 +02:00
wagnercosta
6b7644029c
Merge branch 'freqtrade:develop' into fixHyperoptFreqai
2022-09-07 11:07:51 -03:00
Wagner Costa Santos
8d16dd804d
hyperopt - freqai - docs and refactoring
2022-09-06 15:42:47 -03:00
Robert Caulk
d7585161b2
Merge branch 'develop' into add-inlier-metric
2022-09-06 20:40:21 +02:00
robcaulk
97077ba18a
add continual learning to catboost and friends
2022-09-06 20:30:46 +02:00
robcaulk
d44296783e
isort datakitchen
2022-09-06 20:10:12 +02:00
robcaulk
e83c9b276d
fix whitespace
2022-09-06 19:56:52 +02:00
robcaulk
4b28d0495f
fix timestamping, move imports, add words to doc
2022-09-06 19:46:58 +02:00
Wagner Costa Santos
2c8e5b191b
fix hyperopt - freqai
2022-09-05 17:43:55 -03:00
Wagner Costa Santos
5b826150df
fix hyperopt - freqai
2022-09-05 17:43:28 -03:00
robcaulk
78d01810ed
reduce code redundancy, ensure live always gets the latest data
2022-09-05 00:12:00 +02:00
Wagner Costa Santos
d43ed186fc
fix issue with freqai backtesting at slice dataframe
2022-09-05 00:12:00 +02:00
Robert Caulk
956ea43e55
Merge pull request #7340 from wizrds/sigint-freqai
...
Support SIGINT in FreqAI
2022-09-04 16:43:36 +02:00
robcaulk
ec76214d02
backup historical predictions pickle and load the backup in case of corruption
2022-09-04 15:56:07 +02:00
robcaulk
69b3fcfd32
Merge branch 'develop' into dev-merge-rl
2022-09-04 11:23:25 +02:00
robcaulk
27dce20b29
fix bug in Base4ActionRLEnv, improve example strats
2022-09-04 11:21:54 +02:00
Robert Caulk
8545d74378
Merge pull request #7331 from th0rntwig/pca
...
Normalise PCA space
2022-09-03 21:49:54 +02:00
Timothy Pogue
dae3b3d86a
support shutting down freqai
2022-09-03 13:24:14 -06:00
robcaulk
5cfb4154eb
revert all changes in normalize_data()
2022-09-03 19:48:30 +02:00
Robert Caulk
63514b0443
Merge pull request #7325 from wagnercosta/develop
...
Improve Freqai backtesting performance
2022-09-03 19:28:04 +02:00
robcaulk
c21808ff98
remove metadata redundancy, fix pca bug
2022-09-03 16:54:30 +02:00
robcaulk
c9be66b5b6
increase test coverage for dk, improve function naming, extra cleaning
2022-09-03 15:52:29 +02:00
Matthias
80b5f035ab
Remove typo in log message
2022-09-03 15:01:28 +02:00
robcaulk
599c1c79fb
reorganized backtest utilities, test new functionality, improve/update doc
2022-09-03 14:00:01 +02:00
Wagner Costa Santos
af5460cebf
Add option to keep models only in memory for backtest
2022-09-02 22:01:53 -03:00
th0rntwig
11b2bc269e
Added missing s
2022-09-01 22:37:32 +02:00
th0rntwig
3f8400df10
Normalise PCA space
2022-09-01 21:51:33 +02:00
Wagner Costa Santos
d6e115178a
refactoring freqai backtesting - remove duplicate code
2022-09-01 07:09:23 -03:00
Wagner Costa Santos
44d3a9140d
Merge branch 'develop' of https://github.com/wagnercosta/freqtrade into develop
2022-08-31 15:37:06 -03:00
Wagner Costa Santos
7bed0450d2
pr review - refactoring backtesting freqai
2022-08-31 15:36:29 -03:00
wagnercosta
3d4497467c
Merge branch 'freqtrade:develop' into develop
2022-08-31 14:47:06 -03:00
robcaulk
240b529533
fix tensorboard path so that users can track all historical models
2022-08-31 16:50:39 +02:00
Richard Jozsa
2493e0c8a5
Unnecessary lines in Base4, and changes for box space, to fit better for our needs ( #7324 )
2022-08-31 16:37:02 +02:00
Wagner Costa Santos
df51da22ee
refactoring freqai backtesting
2022-08-31 11:23:48 -03:00
Matthias
57ff6f8ac5
Init timerange object properly
2022-08-31 10:28:31 +00:00
Matthias
7ba4fda5d7
Implement PR feedback
2022-08-31 10:26:47 +00:00
Matthias
a88ffd2c9d
Merge branch 'develop' into move_datadownload
2022-08-31 10:23:45 +00:00
robcaulk
7e8e29e42d
use continuous value for inlier_metric
2022-08-30 20:41:37 +02:00
robcaulk
7f52908e87
ensure the lost points are prepended for FreqUI
2022-08-30 18:55:58 +02:00
robcaulk
a58dd0bbf9
add noise feature, improve docstrings
2022-08-30 18:26:24 +02:00
robcaulk
b11742a4c5
integrate inlier metric function
2022-08-30 18:26:24 +02:00
th0rntwig
d3cb211283
Add inlier metric computation
2022-08-30 18:26:24 +02:00
th0rntwig
50e2808667
Fix bug in DI ( #7321 )
2022-08-30 12:54:39 +02:00
robcaulk
62c0a174c8
allow users to properly reverse train-test data ordering
2022-08-29 11:04:58 +02:00
robcaulk
7766350c15
refactor environment inheritence tree to accommodate flexible action types/counts. fix bug in train profit handling
2022-08-28 19:21:57 +02:00
robcaulk
fcb5d1cb5a
remove debugging flag
2022-08-28 13:01:39 +02:00
robcaulk
dd628eb525
add tests for outlier detection and removal functions
2022-08-28 12:56:39 +02:00
robcaulk
1e41c773a0
fix outlier protection
2022-08-28 12:11:29 +02:00
th0rntwig
71f7d68783
Fixed mypy error
2022-08-27 12:44:55 +02:00
elintornquist
86c5ac44e4
Add outlier percentage check
2022-08-26 23:05:07 +02:00
elintornquist
b2d664c63c
Change MinPts calculation
2022-08-26 18:57:27 +02:00
robcaulk
bb3523f383
download data homogeneously across timeframes
2022-08-26 18:51:42 +02:00
robcaulk
e7261cf515
add freqai utils.py file
2022-08-26 15:30:28 +02:00
robcaulk
65b552e310
make docs reflect reality, move download_all_data to new utils.py file, automatic startup_candle detection
2022-08-26 15:30:01 +02:00
robcaulk
4b7e640f31
reduce code duplication, optimize auto data download per tf
2022-08-26 13:56:44 +02:00
robcaulk
baa4f8e3d0
remove Base3ActionEnv in favor of Base4Action
2022-08-26 11:04:25 +02:00
richardjozsa
d31926efdf
Added Base4Action
2022-08-26 11:04:25 +02:00
robcaulk
3199eb453b
reduce code for base use-case, ensure multiproc inherits custom env, add ability to limit ram use.
2022-08-25 19:05:51 +02:00
robcaulk
05ccebf9a1
automate eval freq in multiproc
2022-08-25 12:29:48 +02:00
robcaulk
94cfc8e63f
fix multiproc callback, add continual learning to multiproc, fix totalprofit bug in env, set eval_freq automatically, improve default reward
2022-08-25 11:46:18 +02:00
robcaulk
d1bee29b1e
improve default reward, fix bugs in environment
2022-08-24 18:32:40 +02:00
robcaulk
a61821e1c6
remove monitor log
2022-08-24 16:33:13 +02:00
robcaulk
bd870e2331
fix monitor bug, set default values in case user doesnt set params
2022-08-24 16:32:14 +02:00
robcaulk
c0cee5df07
add continual retraining feature, handly mypy typing reqs, improve docstrings
2022-08-24 13:00:55 +02:00
robcaulk
b708134c1a
switch multiproc thread count to rl_config definition
2022-08-24 13:00:55 +02:00
robcaulk
b26ed7dea4
fix generic reward, add time duration to reward
2022-08-24 13:00:55 +02:00
robcaulk
280a1dc3f8
add live rate, add trade duration
2022-08-24 13:00:55 +02:00
robcaulk
f9a49744e6
add strategy to the freqai object
2022-08-24 13:00:55 +02:00
richardjozsa
a2a4bc05db
Fix the state profit calculation logic
2022-08-24 13:00:55 +02:00
robcaulk
29f0e01c4a
expose environment reward parameters to the user config
2022-08-24 13:00:55 +02:00
robcaulk
d88a0dbf82
add sb3_contrib models to the available agents. include sb3_contrib in requirements.
2022-08-24 13:00:55 +02:00
robcaulk
8b3a8234ac
fix env bug, allow example strat to short
2022-08-24 13:00:55 +02:00
mrzdev
8cd4daad0a
Feat/freqai rl dev ( #7 )
...
* access trades through get_trades_proxy method to allow backtesting
2022-08-24 13:00:55 +02:00
robcaulk
3eb897c2f8
reuse callback, allow user to acces all stable_baselines3 agents via config
2022-08-24 13:00:55 +02:00
robcaulk
4b9499e321
improve nomenclature and fix short exit bug
2022-08-24 13:00:55 +02:00
sonnhfit
4baa36bdcf
fix persist a single training environment for PPO
2022-08-24 13:00:55 +02:00
robcaulk
f95602f6bd
persist a single training environment.
2022-08-24 13:00:55 +02:00
robcaulk
5d4e5e69fe
reinforce training with state info, reinforce prediction with state info, restructure config to accommodate all parameters from any user imported model type. Set 5Act to default env on TDQN. Clean example config.
2022-08-24 13:00:55 +02:00
sonnhfit
7962a1439b
remove keep low profit
2022-08-24 13:00:55 +02:00
sonnhfit
81b5aa66e8
make env keep current position when low profit
2022-08-24 13:00:55 +02:00
sonnhfit
45218faeb0
fix coding convention
2022-08-24 13:00:55 +02:00
robcaulk
b90da46b1b
improve price df handling to enable backtesting
2022-08-24 13:00:55 +02:00
MukavaValkku
2080ff86ed
5ac base fixes in logic
2022-08-24 13:00:55 +02:00
robcaulk
16cec7dfbd
fix save/reload functionality for stablebaselines
2022-08-24 13:00:55 +02:00
sonnhfit
0475b7cb18
remove unuse code and fix coding conventions
2022-08-24 13:00:55 +02:00
MukavaValkku
d60a166fbf
multiproc TDQN with xtra callbacks
2022-08-24 13:00:55 +02:00
robcaulk
dd382dd370
add monitor to eval env so that multiproc can save best_model
2022-08-24 13:00:55 +02:00
robcaulk
69d542d3e2
match config and strats to upstream freqai
2022-08-24 13:00:55 +02:00
robcaulk
e5df39e891
ensuring best_model is placed in ram and saved to disk and loaded from disk
2022-08-24 13:00:55 +02:00
robcaulk
bf7ceba958
set cpu threads in config
2022-08-24 13:00:55 +02:00
MukavaValkku
57c488a6f1
learning_rate + multicpu changes
2022-08-24 13:00:55 +02:00
robcaulk
acf3484e88
add multiprocessing variant of ReinforcementLearningPPO
2022-08-24 13:00:55 +02:00
MukavaValkku
cf0731095f
type fix
2022-08-24 13:00:55 +02:00
MukavaValkku
1c81ec6016
3ac and 5ac example strategies
2022-08-24 13:00:55 +02:00
MukavaValkku
13cd18dc9a
PPO policy change + verbose=1
2022-08-24 13:00:55 +02:00
robcaulk
926023935f
make base 3ac and base 5ac environments. TDQN defaults to 3AC.
2022-08-24 13:00:55 +02:00
MukavaValkku
096533bcb9
3ac to 5ac
2022-08-24 13:00:55 +02:00
MukavaValkku
718c9d0440
action fix
2022-08-24 13:00:55 +02:00
robcaulk
9c78e6c26f
base PPO model only customizes reward for 3AC
2022-08-24 13:00:55 +02:00
robcaulk
6048f60f13
get TDQN working with 5 action environment
2022-08-24 13:00:55 +02:00
robcaulk
d4db5c3281
ensure TDQN class is properly named
2022-08-24 13:00:55 +02:00
robcaulk
91683e1dca
restructure RL so that user can customize environment
2022-08-24 13:00:55 +02:00
sonnhfit
ecd1f55abc
add rl module
2022-08-24 13:00:55 +02:00
MukavaValkku
9b895500b3
initial commit - new dev branch
2022-08-24 13:00:55 +02:00
MukavaValkku
cd3fe44424
callback function and TDQN model added
2022-08-24 13:00:55 +02:00
MukavaValkku
01232e9a1f
callback function and TDQN model added
2022-08-24 13:00:55 +02:00
MukavaValkku
8eeaab2746
add reward function
2022-08-24 13:00:55 +02:00
MukavaValkku
ec813434f5
ReinforcementLearningModel
2022-08-24 13:00:55 +02:00
MukavaValkku
2f4d73eb06
Revert "ReinforcementLearningModel"
...
This reverts commit 4d8dfe1ff1daa47276eda77118ddf39c13512a85.
2022-08-24 13:00:55 +02:00
MukavaValkku
c1e7db3130
ReinforcementLearningModel
2022-08-24 13:00:55 +02:00
robcaulk
05ed1b544f
Working base for reinforcement learning model
2022-08-24 13:00:40 +02:00
th0rntwig
5ce1c69803
Improve DBSCAN epsilon identification ( #7269 )
...
* Improve DBSCAN epsilon identification
2022-08-22 19:57:20 +02:00
robcaulk
ac42c0153d
deprecate indicator_max_period_candles, automatically compute startup candles for FreqAI backtesting.
2022-08-22 18:19:07 +02:00
robcaulk
96d8882f1e
Plug mem leak, add training timer
2022-08-22 13:30:30 +02:00
longyu
cfa5b3f12c
add new line
2022-08-19 12:39:08 +02:00