MultiEntryStrategy
♡
Basics
mode: spot
timeframe: 1m
Settings
stoploss: -0.05
has minimal roi
dca
process only new candles: false
Indicators
talib
Concepts
dca
Methods
adjust_trade_position
15 related strategies (⧉ identical code, ≈ similar name)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | from datetime import datetime, timedelta from freqtrade.strategy import IStrategy from freqtrade.persistence import Trade import talib.abstract as ta import pandas as pd class MultiEntryStrategy(IStrategy): minimal_roi = { "0": 0.01 } stoploss = -0.05 timeframe = '1m' process_only_new_candles = False # 启用仓位调整功能 position_adjustment_enable = True max_entry_position_adjustment = 9 # 额外入场 9 次,加首次共 10 次 # # 设置市场价格订单 # order_types = { # "entry": "market", # "exit": "market", # "stoploss": "market", # "stoploss_on_exchange": False # } entry_signal_generated = False def populate_indicators(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame: return dataframe def populate_entry_trend(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame: # 只在第一次生成入场信号 if not self.entry_signal_generated: dataframe['enter_long'] = 0 dataframe.at[dataframe.index[-1], 'enter_long'] = 1 self.entry_signal_generated = True else: dataframe['enter_long'] = 0 return dataframe def populate_exit_trend(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame: """生成出场信号""" dataframe['exit_long'] = 0 return dataframe def adjust_trade_position( self, trade: Trade, current_time: datetime, current_rate: float, current_profit: float, min_stake: float, max_stake: float, current_entry_rate: float, current_exit_rate: float, current_entry_profit: float, current_exit_profit: float, **kwargs ): # 检查是否有未完成的订单 if trade.has_open_orders: return None # 获取已完成的入场订单数量 count_of_entries = trade.nr_of_successful_entries # 如果已经达到 10 次入场,不再继续 if count_of_entries >= 10: return None # 检查距离上次入场是否已经过了 5 秒 filled_entries = trade.select_filled_orders(trade.entry_side) if filled_entries: last_entry_time = filled_entries[-1].order_filled_utc if (current_time - last_entry_time).total_seconds() < 5: return None # 返回入场金额(使用首次入场的金额) try: stake_amount = filled_entries[0].stake_amount_filled return stake_amount except Exception: return None |
Strategy League — fixed backtest that feeds the ranking
Failed — sandbox ran out of memory (OOM-killed, SANDBOX_MEMORY=20g)
O - Using fee 0.1000% - worst case fee from exchange (lowest tier). 2026-07-27 04:38:43,263 - freqtrade.data.history.datahandlers.idatahandler - INFO - Price jump in AVAX/USDT, 1m, spot between two candles of 35.97% detected. 2026-07-27 04:38:46,145 - freqtrade.data.history.datahandlers.idatahandler - WARNING - POL/USDT, spot, 1m, data starts at 2024-09-13 10:00:00 2026-07-27 04:38:53,479 - freqtrade.data.history.datahandlers.idatahandler - INFO - Price jump in FIL/USDT, 1m, spot between two candles of 26.09% detected. 2026-07-27 04:38:54,157 - freqtrade.data.history.datahandlers.idatahandler - WARNING - APT/USDT, spot, 1m, data starts at 2022-10-19 01:00:00 2026-07-27 04:38:54,811 - freqtrade.data.history.datahandlers.idatahandler - WARNING - ICP/USDT, spot, 1m, data starts at 2021-05-11 01:00:00 2026-07-27 04:38:57,898 - freqtrade.data.history.datahandlers.idatahandler - WARNING - ARB/USDT, spot, 1m, data starts at 2023-03-23 15:00:00 2026-07-27 04:38:58,423 - freqtrade.data.history.datahandlers.idatahandler - WARNING - OP/USDT, spot, 1m, data starts at 2022-06-01 08:00:00 2026-07-27 04:39:04,679 - freqtrade.data.history.datahandlers.idatahandler - WARNING - SUI/USDT, spot, 1m, data starts at 2023-05-03 12:00:00 2026-07-27 04:39:06,231 - freqtrade.data.history.datahandlers.idatahandler - WARNING - SEI/USDT, spot, 1m, data starts at 2023-08-15 12:00:00 2026-07-27 04:39:06,866 - freqtrade.optimize.backtesting - INFO - Loading data from 2021-01-01 00:00:00 up to 2026-01-01 00:00:00 (1826 days). 2026-07-27 04:51:24,089 - freqtrade.optimize.backtesting - INFO - Dataload complete. Calculating indicators 2026-07-27 04:51:24,090 - freqtrade.optimize.backtesting - INFO - Running backtesting for Strategy MultiEntryStrategy 2026-07-27 04:51:28,814 - freqtrade.optimize.backtesting - INFO - Backtesting with data from 2021-01-01 00:00:00 up to 2026-01-01 00:00:00 (1826 days). 2026-07-27 04:51:28,815 - freqtrade.plugins.protectionmanager - INFO - No protection Handlers defined.
Backtests — over a market period
Backtest this strategy over a chosen crypto-cycle period. These don't affect the League ranking, and need that period's candle data downloaded.
Log in or sign up to run backtests.
| Period | Range | Total % | Win % | Max DD | Trades | |
|---|---|---|---|---|---|---|
| 2020 · DeFi Summer & Pre-Halving Rally | 20200101-20210101 | not run | ||||
| 2021 · Institutional Bull Market | 20210101-20220101 | not run | ||||
| 2022 · Post-Bull Crash & Macro Tightening | 20220101-20230101 | not run | ||||
| 2023–2024 · Recovery & ETF Anticipation | 20230101-20250101 | not run | ||||
| 2025–2026 · Current Cycle | 20250101-20260101 | not run | ||||
Walk forward
Out-of-sample backtest on recent data · 33 pairs · 20260101-20260701.
Backtest trust check
Static source analysis — instant, does not run the strategy. Flags future-data leaks, backtest-realism problems, and indicators worth a second look.
Lookahead analysis
freqtrade lookahead-analysis: detects strategies peeking at future candles.