Matthias
40e2da10f3
Add hypeorpt cloudpickle magic
...
closes #7078
2022-07-16 11:49:33 +02:00
Matthias
e52f82b565
Add leverage to custom_stake_amount callback
...
closes #7047
2022-07-08 19:44:20 +02:00
robcaulk
a6077ac7f4
Merge feat/freqai into develop to get new features
2022-07-03 16:17:13 +02:00
Matthias
07aa372e2a
Ensure bot_loop_start is called in hyperopt, too
...
closes #7001
2022-07-03 14:10:59 +02:00
Matthias
2b07d34611
Revert several undesired changes
2022-06-23 20:47:51 +02:00
Matthias
8bf0bf10c5
Merge branch 'develop' into pr/SmartManoj/6859
2022-06-23 20:43:35 +02:00
Matthias
bb61250bfe
Merge pull request #6987 from freqtrade/profit_metrics
...
Profit metrics
2022-06-18 17:20:20 +02:00
Matthias
474e6705e6
Add Profit factor to backtesting
2022-06-18 16:35:40 +02:00
Matthias
8c46d19071
Fix backtesting bug
...
balance was never released on cancelled trades
2022-06-18 16:27:54 +02:00
Matthias
6a15d36d14
Add Drawdown and profit_factor to /profit
...
#6816
2022-06-18 11:14:28 +02:00
Matthias
017fd03180
Fix but with late entries in backtesting
2022-06-18 09:05:22 +02:00
Matthias
3c62df6b86
Ensure the same timestamp is used for backtest and signal export
2022-06-15 06:53:52 +02:00
Italo
7142394121
remove random_state condition
...
otherwise the random sample always draws the same set of points
2022-06-10 09:46:45 +01:00
Italo
dce9fdd0e4
don't overwrite is_random
...
this should fix issue #6746
2022-06-09 20:06:23 +01:00
Matthias
7eacb847b0
Fix backtesting bug when order is not replaced
2022-06-08 20:21:45 +02:00
Matthias
0b806af487
Add orders column to btresult
2022-06-06 10:59:10 +02:00
Matthias
f709222943
Properly close out orders in backtesting
2022-06-05 22:12:27 +02:00
Matthias
a790bad1e4
Add entry_tag to leverage callback
...
closes #6929
2022-06-05 10:24:54 +02:00
Matthias
34a44b9dd2
Fix backtesting bug when canceling orders
...
closes #6911
2022-05-31 20:32:41 +02:00
Matthias
66edbcd3d5
Fix slight backtesting bug in edge-case scenarios
2022-05-31 20:08:34 +02:00
robcaulk
7523ed825e
automatically detect maximum required data based on user fed indicators (to avoid NaNs in dataset for rolling indicators), add new config parameter for backtesting to let users increase their startup_candles to accommodate high timeframe indicators, add docs to explain all. Add new feature for automatic indicator duplication according to user defined intervals (exhibited in example strat and configs now).
2022-05-31 18:42:27 +02:00
Matthias
eaa656f859
Hyperoptable parameters can be instance attributes
2022-05-30 07:07:47 +02:00
Matthias
1ee08d22d2
Delay parameter init
...
closes #6894
2022-05-29 16:39:52 +02:00
Matthias
3e66275c98
Refactor bot_start to separate function
...
to be reused further ...
2022-05-25 20:01:21 +02:00
Matthias
d6773bc32c
Merge pull request #6886 from freqtrade/fix/typing
...
Fix/typing
2022-05-24 19:41:59 +02:00
Matthias
a8ee77cd5e
Simplify backtesting typechecking
2022-05-24 19:13:35 +02:00
Matthias
23e089061b
Merge pull request #6870 from freqtrade/should_exit_list
...
Should exit list
2022-05-24 06:57:50 +02:00
Matthias
0a713faca8
Fix some type errors
2022-05-24 06:54:16 +02:00
robcaulk
e1c068ca66
add config asserts, use .get method with default values for optional functionality, move data_cleaning_* to freqai_interface (away from user custom pred model) since it is controlled by config params.
2022-05-23 12:07:09 +02:00
Matthias
eb5fe9e3ae
Merge pull request #6857 from froggleston/develop
...
Add support for fudging unavailable funding rates, allowing backtesti…
2022-05-23 06:31:51 +02:00
Matthias
e3beaae8be
update hyperopt typing
2022-05-22 19:32:32 +02:00
Matthias
bdb904e714
Should_exit should return all sell signals
2022-05-22 10:17:49 +02:00
Matthias
f006978caf
Be more explicit in default value
2022-05-21 17:35:49 +02:00
Matthias
2df42a3035
Move "funding fillup" logic to exchange class
2022-05-21 08:50:39 +02:00
Matthias
6bd5535d6c
Use exchange method to combine funding and mark candles
2022-05-21 08:31:34 +02:00
froggleston
c499a92f57
Remove surplus mark columns, and make fillna on funding rate only
2022-05-20 11:48:53 +01:00
froggleston
363098d32d
Fix reversed makr/funding_rate columns
2022-05-18 12:56:43 +01:00
froggleston
736f9f4972
Fix docs and add outer join support for merging funding rates across full timerange
2022-05-18 12:47:37 +01:00
மனோஜ்குமார் பழனிச்சாமி
2b61aa282a
Removed None in dict.get()
...
https://stackoverflow.com/a/12631641
Extra Changes: freqtrade\freqtradebot.py:70
freqtrade\plugins\pairlistmanager.py:31
2022-05-18 03:41:10 +05:30
froggleston
37e4ede65c
Fix flake issues
2022-05-17 22:32:17 +01:00
froggleston
bb758da940
Add support for fudging unavailable funding rates, allowing backtesting of timeranges where futures candles are available, but rates are not
2022-05-17 22:05:33 +01:00
eSeR1805
34684ec86a
Merge branch 'freqtrade:develop' into feat_bt_cancel_entry_reporting
2022-05-17 14:09:57 +03:00
eSeR1805
0585b378b3
BT: Report canceled/replaced orders also.
2022-05-17 14:07:42 +03:00
eSeR1805
6e8f24f6a7
BT: track canceled/replaced orders also.
2022-05-17 14:07:02 +03:00
Matthias
6fd003c655
Merge pull request #6851 from eSeR1805/feat_bt_cancel_entry_reporting
...
BT: Reporting canceled trade entries
2022-05-17 07:05:26 +02:00
மனோஜ்குமார் பழனிச்சாமி
7cd0f8a7b1
Merge branch 'develop' into patch-10
2022-05-17 08:07:13 +05:30
eSeR1805
f2e2e57237
Report trade entries canceled by user.
2022-05-17 01:41:31 +03:00
eSeR1805
fb7c0792c0
Track trade entries canceled by user.
2022-05-17 01:41:01 +03:00
robcaulk
aae233bd6c
try passing the check tests
2022-05-15 17:42:15 +02:00
robcaulk
b03c7b514d
optional style for interfacing freqai with backtesting
2022-05-15 17:42:15 +02:00
Matthias
a0b25938f4
Fix exit_reason assignment in backtesting
2022-05-15 17:41:59 +02:00
robcaulk
764f9449b4
fix logger, debug some flake8 appeasements
2022-05-15 17:41:34 +02:00
robcaulk
fc837c4daa
add freqao backend machinery, user interface, documentation
2022-05-15 17:38:58 +02:00
Matthias
18fd3bb333
Update stoploss handling for entry-order adjustment
2022-05-15 15:45:39 +02:00
eSeR1805
1c20fb7638
Refresh open_rate and stoploss on order replacement.
2022-05-14 16:37:04 +03:00
மனோஜ்குமார் பழனிச்சாமி
64670726a6
flake8 fix
2022-05-13 21:52:26 +05:30
மனோஜ்குமார் பழனிச்சாமி
71a80cab3a
fixed variable naming style
2022-05-13 21:19:40 +05:30
Matthias
277e07589e
update/fix some comments and docs
2022-05-07 17:47:37 +02:00
Matthias
d11c44940e
Slightly reword docs
...
remove some Note-boxes - people tend to skip these.
2022-05-06 06:42:01 +02:00
Matthias
2d9be6dace
move open_rate updating to close_bt_order
2022-05-05 19:50:16 +02:00
eSeR1805
2bed0eab0c
BT: Update trade open_rate on first filled order.
2022-05-05 12:19:05 +03:00
eSeR1805
496bf84e3a
Merge branch 'develop' into feat_readjust_entry
2022-05-04 21:43:41 +03:00
Matthias
88c8fe5570
Merge pull request #6715 from nicolaspapp/feat/relative-drawdown
...
Add relative drawdown
2022-05-02 21:09:14 +02:00
Matthias
3f64c6307f
Maintain compatibility with old backtest results
2022-05-02 20:01:44 +02:00
Matthias
1e2523af61
Fix some assumptions on the data
...
available_capital is not guaranteed to be available, while dry-run-wallet is.
2022-05-02 19:44:14 +02:00
eSeR1805
04c51d2d1a
Merge branch 'develop' into feat_readjust_entry
2022-05-01 21:42:15 +03:00
eSeR1805
4e43194dfe
BT: Refactor open order management.
2022-05-01 18:06:20 +03:00
Matthias
995c48b642
Merge branch 'develop' into pairlocks_direction
2022-05-01 14:59:04 +02:00
eSeR1805
9d205132d0
Revert unintended comment change.
2022-05-01 12:10:11 +03:00
eSeR1805
8c19953cdd
Quick exit when order should be maintained.
2022-05-01 12:08:19 +03:00
Matthias
53a2f55cf0
Merge branch 'develop' into pr/nicolaspapp/6715
2022-05-01 10:03:10 +02:00
Matthias
4580127fa8
Small refactor
2022-04-30 14:51:57 +02:00
Matthias
c6c569b772
chore: split BTAnalyais to metrics
2022-04-30 14:47:27 +02:00
Matthias
4262f84744
Merge branch 'develop' into pr/nicolaspapp/6715
2022-04-30 14:22:18 +02:00
Matthias
2acb68e6e2
Move hyperopt-loss functions to their own package
2022-04-30 13:59:23 +02:00
eSeR1805
3be2afdd88
Merge branch 'develop' into feat_readjust_entry
2022-04-30 13:39:23 +03:00
eSeR1805
ad0c5d9440
Refactor entry adjustment for backtesting.
2022-04-30 13:38:17 +03:00
Matthias
09b74cebce
Move edge bot_loop_start to edge_cli
...
(otherwise it's called twice when running trade mode with edge on).
2022-04-30 08:55:07 +02:00
Sam Germain
4a6f1e90c3
Merge branch 'develop' into bot-start
2022-04-29 22:23:42 -06:00
Matthias
43049e0465
Evict cache if parameter file changed
...
closes #6735
2022-04-29 19:44:17 +02:00
Matthias
fbd142844f
Refactor bt-caching stuff to it's own module
2022-04-29 19:37:13 +02:00
eSeR1805
eb23170c43
Merge branch 'develop' into feat_readjust_entry
2022-04-28 23:06:52 +03:00
Matthias
d1a61f9c61
Don't start futures backtest if leverage-tiers don't contain pair
2022-04-28 20:05:19 +02:00
Matthias
1e83589641
Fix hyperopt
2022-04-28 06:59:03 +02:00
Matthias
30c9dc6975
Fix exit-signa being assigned when tag is set but no signal is present.
2022-04-27 13:53:11 +02:00
Rokas Kupstys
6d99222320
Add 'exit_tag' parameter to 'custom_exit_price' callback.
2022-04-26 10:01:51 +03:00
Sam Germain
4fd904e0a9
added bot_start to backtesting
2022-04-25 17:48:57 -06:00
Matthias
44000ae0b3
Fix CAGR missing for old results
2022-04-25 17:37:25 +02:00
Matthias
246a336f56
Merge pull request #6726 from froggleston/bt_concat
...
Move df append to pd concat
2022-04-25 16:03:27 +02:00
froggleston
431c539cbd
Fix isort import order
2022-04-25 10:42:24 +01:00
Matthias
4444259078
Fix hyperopt-loss interface to enforce kwargs
2022-04-25 11:33:18 +02:00
froggleston
580da21dda
Move df append to pd concat
2022-04-25 10:31:19 +01:00
Matthias
4143ebbeae
Add CAGR calculation to backtesting
2022-04-25 10:51:11 +02:00
Matthias
737bdfe844
Use "side" parameter when calling Pairlocks
2022-04-24 14:33:24 +02:00
Matthias
7c79d937e0
Properly type "side" parameter
2022-04-24 14:33:24 +02:00
Matthias
9e199165b4
Update protection-interface to support per-side locks
2022-04-24 14:33:24 +02:00
Matthias
25c6c5e326
Update backtest sell terminology to exit
2022-04-24 14:30:50 +02:00
Matthias
3c17409bd7
Update buy to entry in backtesting
2022-04-24 14:28:15 +02:00
Nicolas Papp
0f943c482b
PEP8 code compliance
2022-04-23 13:15:14 -03:00
Matthias
d4e12371c2
Merge pull request #6558 from samgermain/recursive-strategy-folder
...
Recursively search subdirectories in config['user_data_dir']/strategies for a strategy
2022-04-23 14:23:53 +02:00
Matthias
f2912f8815
Improve mypy runs
2022-04-23 11:31:12 +02:00
Matthias
89f16ad3a5
Merge pull request #6543 from froggleston/v3_fixes
...
Add support for storing buy candle indicator rows in backtesting results
2022-04-23 09:45:11 +02:00
Matthias
5a90d5ece6
Fix docstring quotes
2022-04-23 09:44:04 +02:00
Matthias
7328553c0b
Merge pull request #6563 from italodamato/opt-ask-force-new-points
...
Optimize only new points
2022-04-23 09:43:33 +02:00
Matthias
580a2c6545
Don't repeat backtest-storing
2022-04-23 09:23:53 +02:00
Matthias
f1f4846053
Merge branch 'develop' into pr/samgermain/6558
2022-04-23 09:16:28 +02:00
Matthias
ba92e09b7b
list-strategies should find recursively as well
2022-04-23 09:11:50 +02:00
Matthias
dff9d52b30
Remove hints on no longer used option, add very primitive test
2022-04-23 08:51:52 +02:00
froggleston
767592a1d6
Add signals enum to 'export' cli option
2022-04-22 18:46:12 +01:00
froggleston
f92997d378
Move signal candle generation into separate function
2022-04-20 14:05:33 +01:00
froggleston
b3cb722646
Use joblib instead of pickle, add signal candle read/write test, move docs to new Advanced Backtesting doc
2022-04-20 13:38:52 +01:00
froggleston
aa5984930d
Fix filename generation
2022-04-19 13:00:09 +01:00
froggleston
84f486295d
Add tests for new storing of backtest signal candles
2022-04-19 12:48:21 +01:00
eSeR1805
d24ee9032a
Update usage in backtest. No functional update.
2022-04-18 21:21:38 +03:00
froggleston
34fb8dacd7
Fix isort complaints
2022-04-16 17:03:24 +01:00
froggleston
b738c4e695
Fix flake8 complaints
2022-04-16 16:49:20 +01:00
froggleston
7210a11730
Fix flake8 complaints
2022-04-16 16:37:06 +01:00
froggleston
a63affc5f1
Fix flake8 complaints
2022-04-16 16:32:04 +01:00
froggleston
f55a9940a7
Fix line spacing
2022-04-16 16:15:04 +01:00
froggleston
b1bcf9f33c
Fix backtest_enable typo
2022-04-16 14:58:17 +01:00
froggleston
8990ba2709
Fix store signal candles
2022-04-16 14:49:53 +01:00
froggleston
21734c5de7
Add pickle import
2022-04-16 14:46:30 +01:00
froggleston
26ba899d7d
Add constant, boolean check, rename option to fit with other x_enable, check that RunMode is BACKTEST
2022-04-16 14:37:36 +01:00
Robert Davey
afd3a32883
Merge branch 'develop' into v3_fixes
2022-04-16 14:23:13 +01:00
eSeR1805
d65b64a46f
Merge branch 'develop' into feat_readjust_entry
2022-04-16 15:20:50 +03:00
eSeR1805
bf5799ef9e
Add new functionality to backtesting.
2022-04-16 15:07:18 +03:00
Italo
1153e65b3e
fix flake8
2022-04-14 14:34:04 +01:00
Italo
340c0ea391
update is_random before asked_non_tried
...
is_random depends on asked_non_tried and needs to be updated first
2022-04-14 14:15:11 +01:00
Matthias
4acb77305a
Don't break when running hyperopt-x tools on old resuts
2022-04-13 19:33:27 +02:00
Italo
35cea6dcfa
fix unique_list
2022-04-13 09:36:46 +01:00
Italo
fa298d6f1c
fix unique_list logic
2022-04-12 23:57:40 +01:00
Nicolas Papp
178240aa6c
Merge branch 'develop' of https://github.com/nicolaspapp/freqtrade into feat/relative-drawdown
2022-04-11 14:42:10 -03:00
Matthias
baefda80d1
Enable flake8 E226 rule
2022-04-11 18:02:06 +02:00
Nicolas Papp
47a6ef4f00
Max relative drawdown
2022-04-10 12:53:47 -03:00
Matthias
68fe7476c9
Update more terminology to forceexit
2022-04-10 15:56:29 +02:00
Matthias
54633e90a7
Merge branch 'develop' into pr/italodamato/6563
2022-04-10 09:16:31 +02:00
Matthias
8e98a2ff9f
api - provide assset_currency via API
2022-04-09 16:42:18 +02:00
Italo
1559692e47
Update hyperopt.py
...
remove duplicates from list of asked points
2022-04-08 11:44:42 +01:00
Matthias
ea1c55b161
Update backtesting to use row instead of sell_row
2022-04-07 19:43:34 +02:00
Matthias
299dd84cfe
Merge pull request #6656 from freqtrade/use_sell_signal
...
Use sell signal -> use_exit_signal
2022-04-06 19:46:46 +02:00
மனோஜ்குமார் பழனிச்சாமி
7e97e58820
renamed enter-side
2022-04-06 06:32:13 +05:30
Matthias
b1378efdeb
ignore_roi_if_buy_signal -> ignore_roi_if_entry_signal
2022-04-05 20:21:39 +02:00
Matthias
4897731030
use_sell_signal -> use_exit_signal
2022-04-05 20:10:20 +02:00
Matthias
5ce5c70be6
sell_profit_offset -> exit_profit_offset
2022-04-05 20:03:27 +02:00
Matthias
bba9629a2a
Rename sell_profit_only to exit_profit_only
2022-04-05 20:00:35 +02:00
Matthias
6d9218cb34
sell_signal -> exit_signal
2022-04-04 17:11:11 +02:00
Matthias
1917527179
custom_sell -> custom_exit
2022-04-04 17:04:43 +02:00
Matthias
54ad130bb9
Update force_sell to force_exit
2022-04-04 16:59:27 +02:00
Matthias
33841da382
Slightly imporve Typing by reusing long/short type
2022-04-04 16:51:57 +02:00
Matthias
f8783c908e
Add side to custom_entry_price
2022-04-04 16:48:27 +02:00
Matthias
e894f620c2
Improve compatibility
2022-04-03 08:15:23 +02:00
Matthias
ec63cfd656
Add compatibility layer for backtesting results
2022-04-02 20:04:30 +02:00
Matthias
543aa74278
update sell_reason to exit_reason
2022-04-02 20:04:29 +02:00
Matthias
b0fab3ad50
Properly handle empty dataframes after trimming
...
closes #6629
2022-04-02 16:16:29 +02:00
Italo
9f171193ef
Revert "Merge branch 'plot_hyperopt_stats' into opt-ask-force-new-points"
...
This reverts commit 4eb9cc6e8b
, reversing
changes made to a3b401a762
.
2022-03-30 09:39:07 +01:00
Matthias
b91b7b4464
Fix hyperopt assigning sell_signal to wrong field
2022-03-30 07:16:48 +02:00
Matthias
e1ccbdb927
Merge pull request #6607 from freqtrade/short_pricing
...
Short pricing updates
2022-03-30 06:59:40 +02:00
Italo
4eb9cc6e8b
Merge branch 'plot_hyperopt_stats' into opt-ask-force-new-points
2022-03-30 00:30:33 +01:00
Italo
a3b401a762
highlight random points in hyperopt results table
2022-03-30 00:29:14 +01:00
Italo
229b0b037e
reduce search loops
2022-03-29 19:33:35 +01:00
adriance
d6082c33a7
fix type error
2022-03-28 21:29:50 +08:00
adriance
a0971a3e2c
fix using future data to fill when use timeout
2022-03-28 21:00:05 +08:00
Matthias
bcf326a035
Initial steps to change bid/ask pricing to enter/exit
2022-03-27 18:03:49 +02:00
Matthias
6f1b14c013
Update buy_timeout and sell_timeout methods
2022-03-25 19:57:06 +01:00
Matthias
743a7b7849
Merge branch 'develop' into feat/short
2022-03-25 10:04:18 +01:00
Matthias
a004bcf00f
Small refactor to backtesting
2022-03-25 08:03:32 +01:00
Matthias
dcfa3e8648
Update SellType to ExitType
2022-03-25 06:55:37 +01:00
Matthias
c07883b1f9
Move ExitCheckTuple to enums
2022-03-25 06:50:18 +01:00
Matthias
8d111d357a
Update SellCheckTuple to new naming
2022-03-25 06:46:29 +01:00
Matthias
d7f76ee452
Update confirm_trade_exit to use sell_reason terminology
2022-03-25 06:37:40 +01:00
Matthias
b1e3ead88b
Merge branch 'develop' into feat/short
2022-03-22 20:28:38 +01:00
Italo
b5a346a46d
Update hyperopt.py
2022-03-22 11:01:38 +00:00
Matthias
5b4f343d36
Update buy output for backtesting
2022-03-22 06:45:36 +01:00
Matthias
08777abd85
Update backtesting output terminology to "exit"
2022-03-22 06:43:37 +01:00
Italo
2733aa33b6
Update hyperopt.py
2022-03-22 00:28:11 +00:00
Italo
37a43019d6
fix
...
- clear cache before calling `ask`
- avoid errors in case asked_non_tried has less than n_points elements
2022-03-21 11:36:53 +00:00
Italo
fca93d8dfe
Update hyperopt.py
2022-03-20 16:12:06 +00:00
Italo
f8a674f24d
make robust in case all points have been tried
2022-03-20 16:08:38 +00:00
Italo
23f1a1904b
more compact
2022-03-20 16:06:41 +00:00
Italo
0fd269e4f0
typo
2022-03-20 16:03:07 +00:00
Italo
e16bb1b34e
Optimize only new points
...
Enforce points returned from `self.opt.ask` have not been already evaluated
2022-03-20 16:02:03 +00:00
Italo
112738d68d
Merge branch 'freqtrade:develop' into plot_hyperopt_stats
2022-03-20 15:42:53 +00:00
Italo
d796ce0935
Update hyperopt.py
...
1. Try to get points using `self.opt.ask` first
2. Discard the points that have already been evaluated
3. Retry using `self.opt.ask` up to 3 times
4. If still some points are missing in respect to `n_points`, random sample some points
5. Repeat until at least `n_points` points in the `asked_non_tried` list
6. Return a list with legth truncated at `n_points`
2022-03-20 15:41:14 +00:00
Matthias
95f69b905a
Remove ticker_interval support
2022-03-20 09:00:53 +01:00
Matthias
052758bbac
Refactor price and stake out of _enter_trade
2022-03-19 15:45:43 +01:00
Matthias
b292f28b35
Call leverage before custom_stake_amount to properly determine min-stake-amount
2022-03-19 15:44:37 +01:00
Matthias
d6309449cf
Fix short bug where close_rate is wrongly adjusted
2022-03-16 20:12:09 +01:00
Matthias
a89c1da19f
Fix 2 bugs in ROI calculation
2022-03-16 20:12:09 +01:00
froggleston
162e94455b
Add support for storing buy candle indicator rows in backtesting results
2022-03-16 12:16:24 +00:00
Matthias
7c9d2dd20a
Fix a few more short bugs in backtesting
2022-03-16 07:00:50 +01:00
adriance
ceba4d6e9b
Remove meaningless code
2022-03-15 14:03:06 +08:00
Matthias
cbbdf00ddd
Update comments in short backtest rates
2022-03-15 06:39:07 +01:00
adriance
fd211166f0
fixed side error
2022-03-15 12:23:59 +08:00
adriance
7059892304
Optimize the code. Fix stop_rate judgment error
2022-03-15 12:04:02 +08:00
adriance
31182c4d80
format
2022-03-14 18:38:44 +08:00
adriance
26a74220fd
remove buy filled logic
2022-03-14 13:43:42 +08:00
adriance
bea38a2e7c
remove filled date logic
2022-03-14 13:42:52 +08:00
adriance
3d9c55d519
restore set_isolated_liq
2022-03-14 11:29:26 +08:00
adriance
0fce0f64d1
Merge branch 'feat/short' into fs_fix
2022-03-13 14:41:22 +08:00
adriance
52bf926066
fix duplicate long
2022-03-13 12:26:57 +08:00