Commit Graph

4293 Commits

Author SHA1 Message Date
hroff-1902
66415d48d4
Merge pull request #2787 from freqtrade/dry_run_optional
remove default value calls for dry_run
2020-01-20 23:08:17 +03:00
Matthias
1bf475fa1a Remove .get calls for dry_run - it's a mandatory property 2020-01-20 20:24:40 +01:00
Matthias
099bbc5c7f Fix bug when stoploss_on_exchange in combination with dry-run
does not sell orders
2020-01-20 20:14:40 +01:00
Matthias
cf9331919f move exchange-specific order-parsing to exchange class
Related to stoploss_on_exchange in combination with trailing stoploss.

Binance contains stopPrice in the info, while kraken returns the same
value as "price".
2020-01-19 19:54:30 +01:00
Matthias
f1629c907a Implement stoploss for kraken 2020-01-19 14:40:09 +01:00
Matthias
e6f1912443 Use named arguments for stoploss create_order call 2020-01-19 14:40:09 +01:00
Matthias
16b34e11ca Complete rename of stoploss_limit to stoploss 2020-01-19 14:40:09 +01:00
Matthias
256fc2e78c Rename stoploss_limit to stoploss 2020-01-19 13:30:56 +01:00
Matthias
8d2e0bfd62 Move rate-calcuation for stoploss-limit order to exchange 2020-01-19 13:13:09 +01:00
hroff-1902
2f82122fc4
Merge pull request #2763 from freqtrade/fix/precision_rounding
Fix/precision rounding
2020-01-17 01:25:30 +03:00
Matthias
29a5e4fba1 Update wallets before getting amount 2020-01-15 21:52:54 +01:00
Matthias
8bcfe4a6aa Up log level of safe_sell_amount message 2020-01-15 21:01:36 +01:00
Matthias
d1bf388b0e Wallet amount must be compared with >= 2020-01-15 19:56:14 +01:00
Tejesh
f73f0b1653 Update comments on backtesting 2020-01-15 19:29:00 +05:30
Matthias
c8806a16a1 Allow wallet update from /balance 2020-01-15 06:43:41 +01:00
Matthias
4013701bdb allow wallet update to be skipped if the value is fresh enough.
Value is NOT configurable, having this wrong can result in bans on the
exchange.
2020-01-15 06:42:53 +01:00
Matthias
4c823f12e3 Sort imports 2020-01-14 20:25:58 +01:00
Matthias
bea4ad8eff Revert price_to_precision to rounding up 2020-01-14 20:16:20 +01:00
Matthias
d12a2a5888
Merge pull request #2752 from freqtrade/plotting/indicator_strategy
Allow enhanced plot-dataframe configuration
2020-01-13 19:53:15 +01:00
Matthias
5fcab1eee8 Align method names to internal ccxt names
These methods are reimplemented from ccxt so we can test their behaviour.
2020-01-12 14:55:05 +01:00
Matthias
b60d7ad42f Use ccxt.decimal_to_precision instead of our own calculation 2020-01-12 14:41:09 +01:00
Matthias
fa1f9bcdbd expose precisionMode from exchange class 2020-01-12 14:37:45 +01:00
Matthias
53abfdbcbf Use sorted on set instead of explicit list conversion 2020-01-12 12:48:29 +01:00
Matthias
3519cebf66 Add test for failing stake_validation 2020-01-11 13:14:19 +01:00
Matthias
a7246ba1ec No need to "fix" stake_currency enum anymore 2020-01-11 12:51:42 +01:00
Matthias
60b47b6eec Add tests for get_quote_currencies 2020-01-11 12:01:34 +01:00
Matthias
13274964a9 Implement validation for valid stake currency 2020-01-11 11:54:00 +01:00
Matthias
235a10ab86 Don't suppport <1m timeframes 2020-01-11 11:36:28 +01:00
Matthias
5faebad863 Don't hardcode TimeFrames - they can differ by exchange. 2020-01-11 11:16:05 +01:00
Matthias
90a9052377
Merge pull request #2734 from freqtrade/relative_stake
Relative stake maximum tradable amount
2020-01-11 08:18:35 +01:00
Matthias
fab19ae3a7 Implement last_stake_amount_min_ratio 2020-01-10 06:36:28 +01:00
Matthias
9713dc8d94 Ensure wallets.update is called before buy
closes #2756
2020-01-09 20:09:21 +01:00
Matthias
785cd2a640 Rename test module 2020-01-09 06:53:51 +01:00
Matthias
c475729c13 Extract edge reporting to optimize_reports 2020-01-09 06:52:34 +01:00
Matthias
989ab646a9 Add profit % to sell_reason table 2020-01-09 06:46:39 +01:00
Matthias
b25f28d1ad
Merge pull request #2730 from freqtrade/extract_bt_reporting
Extract backtest reporting
2020-01-09 06:09:05 +01:00
Matthias
c9b0b4c7a4 Add plot_config to optional plot 2020-01-08 19:35:00 +01:00
Matthias
c3fd894a6c Regenerate plots with new settings 2020-01-07 07:16:31 +01:00
Matthias
d0ccfa1925 Explicitly given indicators should override plot_config 2020-01-05 19:50:21 +01:00
Matthias
b37f34ff5b Implement amend_last_stake_amount 2020-01-05 13:25:11 +01:00
Matthias
a75420f75f Merge branch 'develop' into relative_stake 2020-01-05 12:55:55 +01:00
Matthias
7daa5bc338 Don't return None from unlimited_stake - 0 handles this just as well 2020-01-05 12:50:44 +01:00
Matthias
53499e01de Clearly differentiate trade buys sells (positive and negative)
* Swap trade buys to cyan circles
* Show sell-reason description on buy too
* Green positive sells - red negative / 0 sells
2020-01-04 20:27:27 +01:00
Matthias
bdda620397 add plot_config to startegy interface properly 2020-01-04 12:56:46 +01:00
Matthias
b5a806dec7 Fix typo and add tests for create_plotconfig 2020-01-04 11:30:21 +01:00
Matthias
4628024de6 Adapt tests to new add_indicator methodology 2020-01-04 11:18:51 +01:00
Matthias
f04873b0b0 Add plot_config to interface 2020-01-04 11:14:00 +01:00
Matthias
5853b9904c make Plot_config the default approach 2020-01-04 11:13:45 +01:00
Matthias
5d5074ac9c Implement first working version of plot_config 2020-01-04 10:13:42 +01:00
Matthias
84ef588163 support dicts as indicators 2020-01-04 10:13:42 +01:00
hroff-1902
3798f94d4c
Merge pull request #2732 from freqtrade/config_validation_split
Config validation split
2020-01-03 23:41:44 +03:00
Matthias
7e7c82cf4a Small adjustments to relative_stake PR 2020-01-03 11:34:17 +01:00
Matthias
f3beaa3374 Deprecate capital_available_percentage 2020-01-03 10:58:31 +01:00
Matthias
455838648d Apply get_available_balance logic to regular trades, too 2020-01-03 10:41:10 +01:00
Matthias
3c7981160c Extract get_available_stake_amount 2020-01-03 10:14:23 +01:00
Matthias
a8d56b2850 IMplement check for unlimited settings
verifying that either max_open_trades or stake_amount is set for
operations without edge
2020-01-03 07:07:59 +01:00
hroff-1902
3315f994b6
Merge pull request #2733 from hroff-1902/minor-freqtrade-4
Cleanup buy/sell notification in freqtradebot
2020-01-02 22:46:06 +03:00
Matthias
560aea876e Remove fiat_currency temporary variable 2020-01-02 20:20:29 +01:00
hroff-1902
b24d359a27
Merge pull request #2737 from freqtrade/plotting_percent
show percent in sell hover message.
2020-01-02 22:04:34 +03:00
Matthias
90744ff5ab show percent instead of ratio (!) 2020-01-02 19:36:31 +01:00
Matthias
c13c11cfa1 Type does not need to be a list 2020-01-02 14:41:28 +01:00
Matthias
cba156dfff Add offset calculation for relative stake maximum limit 2020-01-02 13:20:57 +01:00
hroff-1902
a47a25ca88 Refine passing msg params 2020-01-02 14:38:25 +03:00
hroff-1902
88efa4065b Align the name of a variable to be same for buy and sell parts 2020-01-02 13:56:16 +03:00
hroff-1902
f15e5e9d57 Add _notify_buy() 2020-01-02 13:51:25 +03:00
hroff-1902
2ccdb67e4d
Merge pull request #2731 from freqtrade/btanalysis_align_columns
Btanalysis align columns
2020-01-02 13:03:51 +03:00
Matthias
1b8943ac54 Add documentation for tradable_balance_ratio 2020-01-02 10:59:41 +01:00
Matthias
9382b38c41 Fix mypy error 2020-01-02 10:56:00 +01:00
Matthias
22fcf7b4dc Allow empty stake currency in certain cases 2020-01-02 10:47:37 +01:00
Matthias
20fc3b7978 validate config for utils too 2020-01-02 10:41:10 +01:00
Matthias
9325880fe5 Split config-validation requires 2020-01-02 10:39:32 +01:00
Matthias
2c8e8d8ef6 Align columns for btanalysis loading 2020-01-02 09:51:47 +01:00
hroff-1902
e89fa44680 Arrange common section for update trade state methods 2020-01-02 11:50:54 +03:00
Matthias
a9fbad0741 Improve docstrings 2020-01-02 09:37:54 +01:00
Matthias
904e1647e1 Extract generate_text_table_strategy to seperate module 2020-01-02 09:31:53 +01:00
Matthias
caec345c0b Extract generate_text_table_sell_reason from backtesting class 2020-01-02 09:31:53 +01:00
Matthias
18a53f4467 Extract generate_text_table from backtesting class 2020-01-02 09:31:47 +01:00
hroff-1902
21418e2988 Minor: fix comment 2020-01-02 03:16:18 +03:00
hroff-1902
4475110df8 Cosmetics in freqtradebot 2020-01-02 03:07:24 +03:00
Matthias
3327ebf2b1
Merge pull request #2720 from hroff-1902/refactor-create-trades
Refactor create trades
2019-12-31 15:34:12 +01:00
Matthias
26a2395aeb Include Pair name in exception log message 2019-12-31 07:11:09 +01:00
hroff-1902
fd7af587da Rename process_maybe_execute_buys() --> enter_positions() 2019-12-30 22:50:56 +03:00
hroff-1902
84918ad424 Rename process_maybe_execute_sells() --> exit_positions() 2019-12-30 22:08:36 +03:00
Matthias
2537b8cb0c
Merge pull request #2725 from freqtrade/minor_fix
[Minor] Edge-cli should use exchangeresolver
2019-12-30 19:27:40 +01:00
hroff-1902
b00406a7eb Make process_maybe_execute_*() returning integers 2019-12-30 21:09:35 +03:00
hroff-1902
4d56e3b36e Address some comments made in the review 2019-12-30 20:54:32 +03:00
Matthias
8e9a3e8fc8 Capture FtBaseException at the outermost level 2019-12-30 15:11:07 +01:00
Matthias
1ffda29fd2 Adjust improts to new exception location 2019-12-30 15:02:17 +01:00
Matthias
024aa3ab6b Move exceptions to seperate module 2019-12-30 14:57:26 +01:00
Matthias
fb3a53b8af Use ExchangeResolver for edge_cli too 2019-12-30 14:28:34 +01:00
Matthias
4c9295fe2d Rename Bid-strategy helpervariable to something shorter
avoids unnecessary wrapping...
2019-12-30 14:00:34 +01:00
Matthias
de23f3928d Add trailing_only_offset to template and sample 2019-12-30 09:58:20 +01:00
Matthias
df7ceb4ccb Fix misinformation in /status table 2019-12-29 19:53:02 +01:00
hroff-1902
04f28ed9bc Refactor try/except: handle DependencyException for each pair separately 2019-12-29 05:03:10 +03:00
hroff-1902
762604300f Refactor create_trades() 2019-12-29 04:37:44 +03:00
hroff-1902
433fd2a7c3
Merge pull request #2652 from freqtrade/safe_sell_amount
Safe sell amount
2019-12-29 00:09:21 +03:00
hroff-1902
09b77d9f14
Merge pull request #2718 from hroff-1902/minor-freqtrade-2
Minor: code cleanup in freqtradebot
2019-12-28 14:55:42 +03:00
hroff-1902
5c39ebd0a0 Adjust logging 2019-12-28 13:59:40 +03:00
hroff-1902
004993583b
Merge pull request #2712 from freqtrade/strategylist
add list-strategies subcommand
2019-12-28 12:32:06 +03:00
Matthias
443fd8f7dd Merge branch 'develop' into safe_sell_amount 2019-12-28 09:42:52 +01:00
Matthias
fc98cf0037 Address PR feedback - change output to show Filename only 2019-12-28 06:25:45 +01:00
hroff-1902
6db75bc244
Merge pull request #2706 from freqtrade/data_dir
Convert datadir within config to Path
2019-12-28 05:14:48 +03:00
hroff-1902
d6ca562b03 Make mypy happy and handle hypothetical case when stake_amount == 0 2019-12-28 04:05:03 +03:00
hroff-1902
3dbd83e35a Introduce get_free_open_trades() method 2019-12-28 03:46:42 +03:00
hroff-1902
8eeabd2372 Move warning to create_trades() 2019-12-28 03:22:50 +03:00
hroff-1902
ed9cb4219d Make mypy happy 2019-12-28 02:58:23 +03:00
hroff-1902
ef92fd775c Align behavior: check for available in all cases: edge, unlimited and fixed 2019-12-28 02:53:41 +03:00
hroff-1902
abaeab89aa Make _calculate_unlimited_stake_amount() a separate method 2019-12-28 02:36:32 +03:00
hroff-1902
243bcb2368 Make _check_available_stake_amount() a separate method 2019-12-28 02:25:43 +03:00
hroff-1902
86f2693040 cosmetics 2019-12-28 01:54:12 +03:00
hroff-1902
b6d1c5b17a _get_trade_stake_amount() is not private 2019-12-28 01:44:51 +03:00
hroff-1902
039dfc302c No need to convert pair name 2019-12-28 01:34:31 +03:00
Matthias
cadde3ab6d Check if markets.info is a dict before using it 2019-12-27 16:15:44 +01:00
Matthias
e5aed098b5 Enhance backtest results with sell reason profit / loss table 2019-12-25 09:39:29 +01:00
hroff-1902
5e6e625694
Merge pull request #2710 from freqtrade/rpc_balance_output
/balance should not convert to BTC
2019-12-24 23:59:05 +03:00
hroff-1902
a95454d338
Merge pull request #2709 from freqtrade/dry_wallet_fix
Fix bug in dry-run wallet
2019-12-24 23:55:22 +03:00
Matthias
402c761a23 Change loglevel of Path output to debug 2019-12-24 15:44:04 +01:00
Matthias
2ab989e274 Cleanup some code and add option 2019-12-24 15:28:35 +01:00
Matthias
5a11ca86bb Move instanciation out of search_object 2019-12-24 14:01:28 +01:00
Matthias
25e6d6a7bf Combine load_object methods into one 2019-12-24 13:54:46 +01:00
Matthias
eb1040ddb7 Convert resolvers to classmethods 2019-12-24 13:34:37 +01:00
Matthias
a68445692b Add first steps for list-strategies 2019-12-24 12:44:41 +01:00
Matthias
a105e5664a Align /balance output to show everything in stake currency
the conversation to BTC does not make sense
2019-12-24 06:58:30 +01:00
Matthias
6688a2c112 Merge branch 'develop' into doc/pricing_reasons 2019-12-24 06:33:51 +01:00
Matthias
f487dac047 FIx bug in dry-run wallets causing balances to stay there after trades
are sold
2019-12-24 06:27:11 +01:00
Matthias
0ac5e5035c Remove unused import 2019-12-23 20:43:31 +01:00
Matthias
c6b9c8eca0 Forgot to save 2019-12-23 19:32:31 +01:00
Matthias
ecbb77c17f Add forgotten option 2019-12-23 15:13:55 +01:00
Matthias
bb8acc61db Convert datadir within config to Path
(it's used as Path all the time!)
2019-12-23 15:11:29 +01:00
Matthias
c6d2233978 Convert StrategyLoader to static loader 2019-12-23 10:23:48 +01:00
Matthias
6d5aca4f32 Convert hyperoptloss resolver to static loader 2019-12-23 10:09:08 +01:00
Matthias
248ef5a0ea Convert HyperoptResolver to static loader 2019-12-23 10:06:19 +01:00
Matthias
560acb7cea Convert ExchangeResolver to static loader class 2019-12-23 10:03:18 +01:00
Matthias
5fefa9e97c Convert PairlistResolver to static loader 2019-12-23 09:56:12 +01:00
Matthias
1c5f8070e5 Refactor build_paths to staticmethod 2019-12-23 09:53:55 +01:00
hroff-1902
98eed4f2ed
Merge pull request #2695 from freqtrade/custom_pairlock
Improve pairlocking mechanism to allow usage from within strategy
2019-12-22 15:03:24 +03:00
hroff-1902
4f88857442
Merge pull request #2694 from freqtrade/unfilled_strategy
Add unfilledtimeout to strategy overrides
2019-12-22 14:34:25 +03:00
Matthias
ffd7034c00 Persist dry-run trade per default 2019-12-22 10:16:16 +01:00
Matthias
9835312033 Improve pair_lock handling 2019-12-22 09:46:00 +01:00
Matthias
1ff0d0f1fa Add unfilledtimeout to strategy overrides 2019-12-22 09:35:06 +01:00
hroff-1902
95bd9e8e0b No underscores in cli options 2019-12-22 00:17:51 +03:00
Matthias
fc5764f9df Edge small cleanup 2019-12-19 19:55:21 +01:00
Matthias
6507a26cc1 Fix some tests after merge 2019-12-18 20:16:53 +01:00
Matthias
e72c6a0d94 use only first part of the currency to get wallet-amount (!!) 2019-12-18 20:02:15 +01:00
Matthias
834a0ed620 Merge branch 'develop' into safe_sell_amount 2019-12-18 19:45:31 +01:00
Matthias
21622ac313 Rename get_ticker to fetch_ticker 2019-12-18 16:34:30 +01:00
hroff-1902
cf4c3642ce Minor improvements in data.history 2019-12-18 01:06:03 +03:00
hroff-1902
021fa1ca1a
Merge pull request #2678 from hroff-1902/dataprovider-history-split-refresh
Dataprovider history: split refresh part
2019-12-18 00:30:47 +03:00
hroff-1902
3a542bce62
Merge pull request #2674 from freqtrade/bt_trade_open_price
Pre-calculate open_trade_price
2019-12-17 21:51:13 +03:00
Matthias
c5e6a34f25 Remove unnecessary parenteses 2019-12-17 19:30:04 +01:00
hroff-1902
1537389617 Remove startup_candles argument in refresh_data 2019-12-17 18:23:31 +03:00
hroff-1902
b2796f99b6 Remove redundant refresh_pair_history 2019-12-17 14:06:21 +03:00
hroff-1902
60f89c8c01 Split refresh from load_data/load_pair_history 2019-12-17 13:43:42 +03:00
Matthias
a2964afd42 Rename profit_percent to profit_ratio to be consistent 2019-12-17 08:53:30 +01:00
Matthias
539b5627fd Fix typo 2019-12-17 08:31:44 +01:00
Matthias
362a40db6f Update docstring 2019-12-17 07:09:56 +01:00
Matthias
861a7834fc Call calc_open_price() whenever necessary 2019-12-17 07:08:36 +01:00
Matthias
307ade6251 Cache open_trade_price 2019-12-17 07:02:02 +01:00
hroff-1902
0277cd82ea Make mypy happy 2019-12-16 23:25:57 +03:00
hroff-1902
a6fc743d85 Align code in _download_*_history() 2019-12-16 22:12:26 +03:00
hroff-1902
fa968996ed Remove useless check 2019-12-16 22:01:26 +03:00
hroff-1902
4cd45b6535 Rename download_*_history as non-public 2019-12-16 21:57:03 +03:00
hroff-1902
2af9ffa7f2 Align refresh_backtest_ to each other 2019-12-16 21:43:33 +03:00
hroff-1902
39197458f4
Merge pull request #2661 from freqtrade/wallet_dry
Introduce Dry-Run Wallet
2019-12-16 14:00:11 +03:00
Matthias
ce845ab092 Improve docstring for dry-run wallet method 2019-12-15 11:03:40 +01:00
Matthias
56e13c8919 Enhance documentation for dry-run wallet 2019-12-15 10:55:15 +01:00
Matthias
23d467eb0d Show simulation note also in restserver 2019-12-15 10:41:57 +01:00
Matthias
c741b67c3c Adjust tests for dry_run wallet simulation 2019-12-15 10:39:52 +01:00
Matthias
5a5741878c Improve dry-run calculations 2019-12-15 10:26:56 +01:00
Matthias
f0bbc75038 Combine dry_run wallet into original Wallets class 2019-12-15 09:48:35 +01:00
Matthias
fda8f7e305 Introuce WalletDry - supporting dry-run wallets 2019-12-15 09:38:18 +01:00
Matthias
931d24b5a8 Have dry_run_wallet default to 1000 2019-12-15 09:26:17 +01:00
hroff-1902
26ab108890 Fix mypy errors in develop 2019-12-15 01:10:09 +03:00
hroff-1902
1cc174c007
Merge pull request #2624 from freqtrade/backtest_refactor
handle and document ROI=-1
2019-12-14 23:11:36 +03:00
hroff-1902
e26f563f4b
Merge pull request #2655 from freqtrade/avoid_keyerror_backtest
Use first pair of pairlist to get fee
2019-12-14 23:10:40 +03:00
Matthias
f81c49ce6d Fix typo causing a trailing "tic" in /show_config output 2019-12-14 19:53:20 +01:00
Matthias
2f7181e236
Merge pull request #2648 from hroff-1902/hyperopt-random-state
Seed hyperopt random_state if not passed
2019-12-14 15:54:59 +01:00
Matthias
2275a1539e Remove default symbol from get_fee() 2019-12-14 13:22:42 +01:00
hroff-1902
f2266ea9f4
Use shorter range for seeded random-state 2019-12-14 15:17:45 +03:00
Matthias
a48c0ad868 Use first pair of pairlist to get fee
Use this instead of hardcoded ETH/BTC - so backtesting works with
exchanges without ETH/BTC pair
2019-12-14 12:55:02 +01:00
Matthias
014c18ead2 Improve output from show_config when trailing_stop is active 2019-12-13 20:27:06 +01:00
hroff-1902
6c4f424887
Merge pull request #2651 from freqtrade/dry_amount
Round amount to precision also for dry-runs
2019-12-13 13:13:20 +03:00
Matthias
04257d8ecc Add tests for safe_sell_amount 2019-12-13 07:06:54 +01:00
Matthias
b69f5afaaf Round amount to precision also for dry-runs 2019-12-13 06:59:10 +01:00
Matthias
5db883906a Try to verify available amount on the exchange 2019-12-13 06:52:33 +01:00
Matthias
703924d6c4
Merge pull request #2643 from freqtrade/mins
Remove min (plural) from codebase
2019-12-12 14:27:39 +01:00
Matthias
330b8cf8a1 space before unit ... 2019-12-12 14:08:44 +01:00
hroff-1902
6e778ad710 Seed hyperopt random_state if not passed 2019-12-12 03:12:28 +03:00
Matthias
f44e3dc319
Merge pull request #2642 from hroff-1902/fix-hyperopt-trailing
Fix generation of hyperopt trailing params
2019-12-11 19:53:42 +01:00
Matthias
d8b2d39f2f
Merge pull request #2628 from freqtrade/rpc/sell_duration
Telegram / sell duration
2019-12-11 07:15:00 +01:00
Matthias
7c7ca1cb90 Remove min (plural) from codebase 2019-12-11 07:12:37 +01:00
Matthias
1058e5fb72 No plural for min 2019-12-11 06:48:40 +01:00
Matthias
b2a9b87be3
Merge pull request #2632 from freqtrade/dependabot/pip/develop/scikit-learn-0.22
Bump scikit-learn from 0.21.3 to 0.22
2019-12-10 16:20:39 +01:00
Matthias
3f9f29ba4e Fix Flake8 import error 2019-12-10 16:10:51 +01:00
Matthias
390db9503f Show humanized and minutes version of duration 2019-12-10 15:12:36 +01:00
hroff-1902
3448f86263 Suppress scikit-learn FutureWarnings from skopt imports 2019-12-10 15:46:29 +03:00
hroff-1902
641e3fdf7a Fix generation of hyperopt trailing params 2019-12-10 03:32:43 +03:00
hroff-1902
0e4ef33d6a
Merge pull request #2581 from hroff-1902/hyperopt-list
Add hyperopt-list and hyperopt-show commands
2019-12-10 00:30:26 +03:00
hroff-1902
8431b54b21 Fix index limits handling 2019-12-09 23:50:40 +03:00
hroff-1902
5fc357ee10 Fix typo 2019-12-09 23:43:50 +03:00