Commit Graph

724 Commits

Author SHA1 Message Date
Matthias
1c9dbb512a Initial attempt at is_short_strategy block 2022-03-11 19:29:40 +01:00
Matthias
e492bf3159 Update order_types to use entry/exit definition 2022-03-09 06:37:08 +01:00
Matthias
3ff261e22c Update order time in force to use entry/exit wording 2022-03-07 19:55:15 +01:00
Matthias
5ab72ac082 chore: realign enums imports 2022-03-03 07:07:33 +01:00
Matthias
551fe7d820
Merge pull request #6440 from clover-es/feat/short
Add leverage strategy to new-strategy command
2022-02-25 15:18:46 +01:00
Matthias
d973ba1f5d Add leverage callback to advanced template 2022-02-23 20:19:52 +01:00
Matthias
8952829adc Merge branch 'develop' into feat/short 2022-02-23 06:28:15 +01:00
Matthias
70f4305dfa don't allow short trades in spot mode 2022-02-21 19:19:12 +01:00
Matthias
08803524bd align variable naming to use current_time 2022-02-12 15:21:46 +01:00
Matthias
0c6d92a7a6 Merge branch 'develop' into feat/short 2022-02-11 17:02:04 +01:00
Matthias
4ea79a32e4 Use Order object for ft_timeout check 2022-02-05 16:28:47 +01:00
Matthias
cf7edace2b
Merge pull request #6312 from freqtrade/short_informative_decorator
Short informative decorator
2022-01-30 15:33:52 +01:00
Matthias
8a6823deb1 Convert InformativeData to dataclass 2022-01-29 19:59:54 +01:00
Matthias
463714832d Merge branch 'develop' into feat/short 2022-01-29 14:19:30 +01:00
Matthias
c620e38c7d Informative decorator updates for futures 2022-01-28 19:17:46 +01:00
Matthias
002226f5fd Update setting to max_entry_position_adjustment 2022-01-27 16:57:50 +01:00
Matthias
13978e9893
Merge pull request #6276 from clover-es/feat/short
Add support for shorts in strategy.stoploss_from_absolute()
2022-01-25 19:11:05 +01:00
Stefano Ariestasia
0fa7986369
Merge branch 'freqtrade:develop' into pos_adjust 2022-01-25 10:30:18 +09:00
Matthias
194a5ce3cc Update advanced strategy template with missing methods 2022-01-24 07:02:02 +01:00
Matthias
e252830229 Add entry_tag to "entry" callbacks 2022-01-24 07:02:01 +01:00
Matthias
daee59f4f1 Reorder interface methods 2022-01-23 19:20:31 +01:00
Matthias
09db4bcadd Don't use strings, use methods directly 2022-01-23 17:00:00 +01:00
Matthias
821a9d9cdc Add current_time to check_timeout functions for convenience 2022-01-23 08:10:35 +01:00
Guillermo Rodríguez
17ae6a0c78 Harmonize short parameter name in stoploss_from_open() 2022-01-22 18:01:56 +01:00
Guillermo Rodríguez
40cd478c6d Calculate stoploss_from_absolute for shorts 2022-01-22 18:01:02 +01:00
Matthias
f090dcc597 Merge branch 'develop' into feat/short 2022-01-22 17:56:01 +01:00
Matthias
7bef9a9b3e Extract timeout handling from freqtradebot class 2022-01-22 15:59:10 +01:00
Stefano Ariestasia
ac93eea585 update 2022-01-19 21:58:24 +09:00
Stefano Ariestasia
5525fdae1a add max_buy_position_adjustment as attribute 2022-01-19 16:50:13 +09:00
Matthias
1fb48a1f53 Add TODO-lev for "stoploss_from_absolute". 2022-01-18 16:52:34 +01:00
Matthias
6c4b261469 Convert nan to None in get_signal. 2022-01-16 08:04:39 +01:00
Guillermo Rodríguez
d28287880c Add support for shorts in strategy.stoploss_from_open
Signed-off-by: Guillermo Rodríguez <guillebep@gmail.com>
2022-01-15 04:30:30 +01:00
Reigo Reinmets
0bca07a32a Added min_stake, max_stake. Removed pair as its included in trade. 2022-01-08 17:20:02 +02:00
Matthias
711a6a6dbc Merge branch 'develop' into pr/xataxxx/6079 2022-01-02 22:21:41 +01:00
Matthias
ddfbe55e7c Merge branch 'develop' into feat/short 2022-01-01 19:16:49 +01:00
Matthias
b1b2eebd11 Change sequence of ROI/sell signal to favor sell-signal 2021-12-30 20:00:58 +01:00
Reigo Reinmets
3d336a736e Improve documentation. 2021-12-29 14:51:57 +02:00
Wade Dyck
a26c82b7cc Also check candle_type_def when creating the pairlist and getting the ohlcv. 2021-12-27 16:51:02 -07:00
Reigo Reinmets
de79d25caf Refactoring to use strategy based configuration 2021-12-24 12:38:43 +02:00
Reigo Reinmets
30673f84f9 Flake8 compatibility 2021-12-18 11:00:25 +02:00
Reigo Reinmets
f11a40f144 Improve documentation on adjust_trade_position and position_adjustment_enable 2021-12-11 17:14:04 +02:00
Reigo Reinmets
c179951cca Expect stake_amount, not actual amount of pair from strategy for DCA. 2021-12-10 20:42:24 +02:00
Reigo Reinmets
fde6779873 Some code improvements. Still some bugs. 2021-12-09 14:47:44 +02:00
Matthias
edd80c3006 Merge branch 'develop' into feat/short 2021-12-09 06:34:07 +01:00
Matthias
9b9d61c6d6 Remove SPOT_ candletype 2021-12-08 14:38:09 +01:00
Matthias
d89cbda7b8 Use candle_type_def where possible 2021-12-08 14:15:54 +01:00
Matthias
ac2fb08aea Small updates while reviewing 2021-12-07 20:21:49 +01:00
Reigo Reinmets
fd875786fd Initial very crude DCA implementation attempt. Very alpha.
No backtesting support.
2021-12-07 11:16:11 +02:00
Matthias
d0467b30ba Add strategy_version to API response 2021-12-04 14:49:45 +01:00
Matthias
848a2d5383 Merge branch 'develop' into pr/dvdmchl/5929 2021-12-04 14:40:15 +01:00
Matthias
2080bf0952 Fix some formatting errors, add test for strategy version 2021-12-04 14:40:05 +01:00
Matthias
2f17fa2765 Update more to use candleType 2021-12-03 14:15:35 +01:00
Matthias
5493212672 More candletype changes 2021-12-03 13:04:31 +01:00
Matthias
c20157e64f Add compatibility code for existing informative_pairs implementation 2021-11-28 15:43:04 +01:00
Sam Germain
8761649fd7 Added candle_type in doc strings 2021-11-27 02:55:42 -06:00
Matthias
51e54a666c Merge branch 'feat/short' into pr/samgermain/5780 2021-11-23 19:01:07 +01:00
Matthias
ce0593c0e1 Merge branch 'develop' into feat/short 2021-11-23 07:35:26 +01:00
Rokas Kupstys
78a00f2518 Use market data to get base and quote currencies in @informative() decorator. 2021-11-22 09:27:45 +02:00
Sam Germain
920151934a Added candle_type to a lot of methods, wrote some tests 2021-11-21 17:48:14 -06:00
Dardon
d4fd13bf50 Telegram and log prints strategy version. 2021-11-20 16:26:07 +00:00
Matthias
f40221dd9f Merge branch 'develop' into feat/short 2021-11-18 20:20:01 +01:00
Matthias
4eb9038358 Some more fixes to % formatting 2021-11-11 15:06:16 +01:00
Matthias
ce2aa1dc69 Small formatting upgrades 2021-11-11 12:06:18 +01:00
Matthias
ae0e72a945 Provide strategy with copied objects
avoids accidental modification of crucial elements in a trade object
part of #5828
2021-11-08 19:59:29 +01:00
Matthias
ebc38159b8 Merge branch 'develop' into feat/short 2021-11-06 15:24:52 +01:00
Matthias
431b96de98 Merge branch 'develop' into pr/theluxaz/5710 2021-11-03 19:43:36 +01:00
Matthias
c094ac5762 Merge branch 'develop' into feat/short 2021-10-30 19:45:19 +02:00
incrementby1
a50bde10de Merge https://github.com/freqtrade/freqtrade into personal-branch 2021-10-27 15:52:10 +02:00
Matthias
f80d3d48e4 Add default to minimal_roi to avoid failures
closes #5796
2021-10-27 06:33:49 +02:00
incrementby1
c3f3bdaa2a Add "allow_position_stacking" value to config, which allows rebuys of a pair
Add function unlock_reason(str: pair) which removes all PairLocks with reason
Provide demo strategy that allows buying the same pair multiple times
2021-10-26 00:04:40 +02:00
Simon Ebner
f7926083ca Clean up unclosed file handles
Close all file handles that are left dangling to avoid warnings such as

```
ResourceWarning: unclosed file <_io.TextIOWrapper
name='...' mode='r' encoding='UTF-8'> params = json_load(filename.open('r'))
```
2021-10-24 23:15:05 +02:00
theluxaz
69a59cdf37 Fixed flake 8, changed sell_tag to exit_tag and fixed telegram functions 2021-10-18 23:56:41 +03:00
Matthias
bc10b451fe Revert wrong condition 2021-10-17 09:46:39 +02:00
Sam Germain
5fbe76cd7e isolated conditionals in interface stoploss method 2021-10-14 05:10:28 -06:00
theluxaz
b151cf032b Merge branch 'develop' of https://github.com/theluxaz/freqtrade into main
# Conflicts:
#	freqtrade/freqtradebot.py
#	freqtrade/optimize/backtesting.py
2021-10-13 02:01:26 +03:00
theluxaz
80b71790bc Added some bigfixes for sell_tag 2021-10-13 01:22:53 +03:00
theluxaz
b898f86364 Added sell_tag and buy/sell telegram performance functions 2021-10-13 00:02:28 +03:00
Sam Germain
729957572b updated strategy stop_loss_reached to work for shorts 2021-10-09 14:39:11 -06:00
Sam Germain
7f7f377a90 updated a test, put in TODO-lev 2021-10-07 05:03:38 -06:00
Matthias
a926f54a25 Add "side" parameter to custom_stake_amount 2021-09-26 19:35:54 +02:00
Matthias
84e013de2d Update confirm_trade_entry to support "side" parameter 2021-09-26 19:33:22 +02:00
Matthias
4fd00db630 Use "combined" enter_tag column 2021-09-26 15:22:37 +02:00
Matthias
2a678bdbb4 Update buy_tag column to long_tag 2021-09-26 08:37:44 +02:00
Matthias
a0ef89d910 Also support column-transition for V1 strategies 2021-09-22 20:52:55 +02:00
Matthias
0e13d57e57 Update advise_* methods to entry/exit 2021-09-22 20:42:31 +02:00
Matthias
5928ba9c88 Test and document leverage strategy callback 2021-09-22 20:14:52 +02:00
Matthias
7a5c7e7020 Update some tests to use StrategyV3 2021-09-21 19:33:33 +02:00
Sam Germain
778f0d9d0a Merged feat/short into lev-strat 2021-09-19 17:44:12 -06:00
Rokas Kupstys
713e7819f7 [SQUASH] Remove mypy import. 2021-09-18 15:27:58 +03:00
Rokas Kupstys
e4ca42faec [SQUASH] Update stoploss_from_absolute to behave more like stoploss_from_open and add a test for it. 2021-09-18 10:48:53 +03:00
Rokas Kupstys
7e6aa9390a [SQUASH] Unconditionally include quote currency when asset is explicitly specified. Added docs suggesting to use string formatting to make strategy independent of configured stake currency. 2021-09-18 10:48:53 +03:00
Rokas Kupstys
e88c4701bb [SQUASH] Address PR comments. 2021-09-18 10:48:53 +03:00
Matthias
bb6ae682fc Small simplifications 2021-09-18 10:48:53 +03:00
Rokas Kupstys
5dc78a0c66 [SQUASH] Get rid of _initialize() and fix informatives for dynamic pairlists. 2021-09-18 10:48:53 +03:00
Rokas Kupstys
f81df19b93 [TMP] Make tests not fail for now. 2021-09-18 10:48:53 +03:00
Rokas Kupstys
dfa61b7ad2 [SQUASH] Fix informatives for each pair not being created because dataprovider was not available.
Fix not being able to have informative dataframe of a pair in whitelist.
2021-09-18 10:48:53 +03:00
Rokas Kupstys
f2a1d9d2fc [SQUASH] Address PR comments. 2021-09-18 10:48:18 +03:00
Rokas Kupstys
1fdb656334 Add a decorator which can be used to declare populate_indicators() functions for informative pairs. 2021-09-18 10:48:18 +03:00
Rokas Kupstys
d84ef34740 A helper to calculate stoploss value from absolute price. 2021-09-18 10:48:18 +03:00
Matthias
a89c67787b Replace some more occurances of 'buy' 2021-09-18 09:23:53 +02:00
Matthias
4d558879e9 Merge branch 'feat/short' into pr/samgermain/5378 2021-09-17 19:33:35 +02:00
Matthias
d680fdf33a Merge branch 'develop' into feat/short 2021-09-17 11:16:37 +02:00
Matthias
f7bae81d96 Dataframe should be copied after populate_indicator
Without that, PerformanceWarnings can appear throughout hyperopt which
are unnecessary and missleading for users

closes #5408
2021-09-15 19:56:12 +02:00
Sam Germain
f5b01443ad buy/short -> entry order, sell/exit_short -> exit order 2021-09-09 02:10:12 -06:00
Matthias
2e50948699 Fix some tests 2021-09-04 20:23:51 +02:00
Matthias
ca44d2e092 Merge branch 'feat/short' into pr/samgermain/5378 2021-09-04 19:54:34 +02:00
Matthias
5184cc7749 Merge branch 'develop' into feat/short 2021-09-02 07:03:14 +02:00
Matthias
da5f8c87ae Add stake_currency to strategy interface
allows type-completion in editors
2021-08-31 07:18:57 +02:00
Matthias
6b93c71d15 Small refactorings, use only enter_long columns 2021-08-25 06:49:06 +02:00
Matthias
b951f59f89 Fix patch_get_signal 2021-08-24 21:03:13 +02:00
Matthias
6524edbb4e Simplify should_exit interface 2021-08-24 20:47:54 +02:00
Matthias
f3b6a0a797 Fix some type errors 2021-08-24 20:40:35 +02:00
Matthias
9a03cb96f5 Update get_signal 2021-08-24 20:24:51 +02:00
Matthias
b40f985b13 Add short-exit logic to backtesting 2021-08-24 20:02:40 +02:00
Matthias
11bd8e912e Fix some tests 2021-08-24 06:52:28 +02:00
Matthias
7a977a8eaf Merge branch 'feat/short' into pr/samgermain/5378 2021-08-24 06:28:16 +02:00
Matthias
957551ea97 Merge branch 'develop' into feat/short 2021-08-24 06:25:06 +02:00
Matthias
faf5cfa66d Update some tests for updated backtest interface 2021-08-23 21:35:28 +02:00
Matthias
9add3bf808 Add enter_long compatibility layer 2021-08-23 21:12:46 +02:00
Sam Germain
0afeb269ad Removed unnecessary TODOs 2021-08-23 00:15:35 -06:00
Sam Germain
5ca3f49cb5 merged with feat/short after feat/short added styling and comment changes PR 2021-08-22 21:37:20 -06:00
Sam Germain
a5be535cc9 strategy interface: removed some changes 2021-08-21 17:06:04 -06:00
Sam Germain
55c070f1bb Added interface leverage method 2021-08-18 16:52:34 -06:00
Sam Germain
dc4090234d Added interface leverage method 2021-08-18 16:52:34 -06:00
Sam Germain
092780df9d condensed strategy methods down to 2 2021-08-18 16:52:34 -06:00
Sam Germain
d4a7d2d444 Added short and exit_short to strategy 2021-08-18 16:52:20 -06:00
Sam Germain
314359dd6e strategy interface changes to comments to mention shorting 2021-08-18 13:23:04 -06:00
Sam Germain
e2d5299116 Name changes for strategy 2021-08-18 13:22:54 -06:00
Matthias
c456cfc312 Merge branch 'develop' into pr/Axel-CH/5347 2021-08-14 09:13:30 +02:00
Matthias
cf27968b97 Properly preserve trade's low during backtesting 2021-08-09 19:38:56 +02:00
Matthias
a5f796bc97 refactor ohlcvdata_to_dataframe to advise_all_indicators 2021-08-09 14:53:18 +02:00
Matthias
6532aba765
Merge pull request #5360 from freqtrade/hyperopt_protections
Hyperopt protections and Boolean parameter
2021-08-07 09:42:05 +02:00
Sam Germain
b9356a5564 Autopep8 formatting 2021-08-06 16:35:39 -06:00
axel
612b88e993 Merge branch 'develop' of https://github.com/freqtrade/freqtrade into custom_order_price 2021-08-05 18:21:31 -04:00
axel
cb3b0cf311 add custom_exit_price in interface and freqtradebot 2021-08-04 23:09:40 -04:00
axel
f243ad4af0 add custom_exit_price in strategy interface 2021-08-04 19:09:55 -04:00
axel
f9f519fd3c add custom_exit_price function to interface 2021-08-04 18:54:17 -04:00
axel
d9b9eecd4d remove entry price reached method 2021-08-04 18:47:14 -04:00
Matthias
ad0e4a8567 Add BooleanParameter 2021-08-04 20:52:56 +02:00
Matthias
3c41223333 Add test for protections-hyperopt 2021-08-04 20:01:28 +02:00
Matthias
544e0da6c2 Add protection parameter space 2021-08-04 06:50:14 +02:00
Matthias
6410a6528b Add missing methods to advanced strategy template 2021-08-04 06:46:21 +02:00
axel
b644233ead rename custom_entry_price kwarg to align it to the interface 2021-08-03 17:03:27 -04:00
axel
b3dafb378e remove use_custom_entry_price as a config option 2021-08-03 16:54:28 -04:00
axel
00939b63f2 flake 8 fixes 2021-08-03 16:25:18 -04:00
axel
53fb8b05e7 remove short logic in entry_price_reached function 2021-08-03 16:19:29 -04:00
axel
5284112b69 fix in custom entry function output,remove changes related to outdated prices, doc exemple minor changes 2021-08-03 15:57:23 -04:00
axel
f11f5d17e9 add feature custom entry price for live 2021-08-03 15:57:23 -04:00
Matthias
c981641441 Don't fail if strategy doesn't contain sell signal 2021-08-02 20:30:46 +02:00
Matthias
138b126d03
Merge pull request #5299 from kevinjulian/feat/kevinjulian/add-buy-signal-name
Add buy signal name
2021-07-30 08:23:11 +02:00
kevinjulian
aea5da0c73 changes testcase 2021-07-23 11:42:43 +07:00
kevinjulian
5fe18be4b5 add note buy_tag and split 3 assignment for get_signal 2021-07-23 01:25:15 +07:00
Matthias
b84a1d0c92 Don't crash when *_params is not defined in strategy
closes #5407
2021-07-22 20:21:04 +02:00
kevinjulian
643b6b950e run flake8 2021-07-22 02:23:34 +07:00
kevinjulian
25e329623f change signature 2021-07-22 02:11:54 +07:00
kevinjulian
235c1afd09 add buy_tag on telegram 2021-07-22 01:53:15 +07:00
kevinjulian
49886874aa rename to buy_tag 2021-07-21 20:05:35 +07:00
kevinjulian
66a7070170 run linter 2021-07-20 23:56:03 +07:00
Kevin Julian
edf9c08f06
Merge branch 'develop' into feat/kevinjulian/add-buy-signal-name 2021-07-20 19:19:46 +07:00
kevinjulian
ed30c023cd fix some testcase 2021-07-20 19:08:14 +07:00
kevinjulian
104711a9bf get_signal signature 2021-07-20 05:04:25 +07:00
kevinjulian
9e63bdbac9 feat: add buy signal name 2021-07-20 04:58:20 +07:00
Rokas Kupstys
0e4466ca1e Implement strategy-controlled stake sizes. Expose self.wallet to a strategy. 2021-07-11 12:38:58 +03:00
Matthias
898bef1837
Merge pull request #5219 from freqtrade/hyperopt_paramfile
automatic Hyperopt paramfile
2021-07-04 13:56:52 +02:00
Rokas Kupstys
3686efa08a Add range property to CategoricalParameter and DecimalParameter, add their tests.
At the moment we can keep a single code path when using IntParameter, but we have to make a special hyperopt case for CategoricalParameter/DecimalParameter. Range property solves this.
2021-07-03 16:02:45 +03:00
Matthias
645da51b5f Add test for parameter loading 2021-06-30 06:55:10 +02:00
Matthias
55f032b18e Catch trying to read faulty parameter file 2021-06-29 20:51:29 +02:00
Matthias
a2ccc1526e Load parameters from file 2021-06-29 07:07:34 +02:00
Matthias
2310deec53 Update name to get non-optimized parameters 2021-06-29 06:50:47 +02:00
Matthias
750c780293 Support loading parameters from json file 2021-06-29 06:50:47 +02:00
Matthias
158cb415a9 Add settings interface to have types available 2021-06-26 17:28:37 +02:00
Matthias
1067a9f356 Move strategy-override signals to top-level of the config
closes #2867
2021-06-26 16:06:13 +02:00
aayush-jain18
d294ef10d7 unexpected docstring params 2021-06-25 23:56:16 +05:30
aayush-jain18
a46f60bd94 spell corrections 2021-06-25 22:10:04 +05:30
Matthias
96fbb226c5 Implement better strategy checks
part of #2696
2021-06-19 19:32:29 +02:00
Matthias
e1010ff592 Don't load protections from config if strategy defines a property 2021-06-18 19:55:53 +02:00
Matthias
38ed49cef5 move low to stoploss_reached
to clarify where which rate is used
2021-06-15 09:05:36 +03:00
Rokas Kupstys
6d5fc96714 Implement most pessimistic handling of trailing stoploss. 2021-06-15 09:05:36 +03:00
Matthias
d4dfdf04fc Move RPCMessageType to enums 2021-06-09 20:23:17 +02:00
Matthias
9c34304cb9 Move state enums to enums package 2021-06-08 21:20:35 +02:00
Matthias
3c149b9b59 Move signalType to enums 2021-06-08 21:09:39 +02:00
Matthias
89b9915c12 Update imports for SellType in tests 2021-06-08 21:07:16 +02:00
Matthias
d16a619489 Move SellType Enum to it's own module 2021-06-08 21:04:34 +02:00
Matthias
d7fdc2114a allow list-strategies to show if params are hyperoptable 2021-05-29 13:27:08 +02:00
Matthias
4bc018a456 Change rate back to "open" for custom_sell
closes #4920
2021-05-14 07:18:10 +02:00
Rokas Kupstys
6af4de8fe8 Remove dataframe parameter from docs. 2021-05-08 10:29:47 +03:00
Rokas Kupstys
dc6e702fec Pass current_time to confirm_trade_entry/confirm_trade_exit. 2021-05-08 10:29:47 +03:00
Rokas Kupstys
d34da3f981 Revert "Add dataframe parameter to custom_stoploss() and custom_sell() methods."
This reverts commit 595b8735f8.

# Conflicts:
#	freqtrade/optimize/backtesting.py
#	freqtrade/strategy/interface.py
2021-05-08 10:29:47 +03:00
Matthias
9049d6b779 Reformat hyper to cache parameters 2021-05-02 10:45:21 +02:00
Matthias
555262b6e1 Only calculate additional indicators if the space is selected 2021-05-01 16:40:29 +02:00
Matthias
e050ea8dfa Don't load parameters for other space 2021-05-01 16:21:59 +02:00
Joe Schr
f3388ed9aa fix IStrategy: abstract methods still need to pass through return value
otherwise doing something like:
```py
dataframe = super().populate_indicators(dataframe, ...)
```

won't work, because `dataframe` becomes `None`.

This is needed if one of those methods uses dataframe.copy() instead of
just working on reference. e.g. using `merge_informative` in
`populate_indicator` in a nested class hierarchy
2021-04-30 14:39:01 +02:00
Matthias
55faa6a84a safe_wrapper should use kwargs to call methods 2021-04-26 20:18:03 +02:00
Matthias
dbf33271b5 Small doc changes 2021-04-26 19:52:26 +02:00
Rokas Kupstys
31a2285eac Fix mypy complaints. 2021-04-26 10:42:24 +03:00
Rokas Kupstys
595b8735f8 Add dataframe parameter to custom_stoploss() and custom_sell() methods. 2021-04-25 09:48:40 +03:00
Rokas Kupstys
961b38636f Remove explicit sell_flag parameter from SellCheckTuple. 2021-04-25 09:48:40 +03:00
Rokas Kupstys
bfad4e82ad Make execute_sell() use SellCheckTuple for sell reason. 2021-04-25 09:48:40 +03:00
Rokas Kupstys
a90e795695 Warn and trim custom sell reason if it is too long. 2021-04-25 09:48:40 +03:00
Rokas Kupstys
1aad128d85 Support returning a string from custom_sell() and have it recorded as custom sell reason. 2021-04-25 09:48:40 +03:00