|
|
@@ -0,0 +1,420 @@
|
|
|
+# ETH-focused portfolio freqtrade comparison
|
|
|
+
|
|
|
+Dry-run research only. No strategy file was created and no order path was called.
|
|
|
+
|
|
|
+## Existing freqtrade surface
|
|
|
+
|
|
|
+- Config: `freqtrade/config-okx-futures.json` uses `futures` / `isolated` with `json` OHLCV.
|
|
|
+- Current whitelist: `['BTC/USDT:USDT']`.
|
|
|
+- Existing strategy: `freqtrade/user_data/strategies/BtcRsi2Guarded.py` has `populate_indicators`, entry/exit signals, `custom_exit`, and fixed leverage callback.
|
|
|
+- Export path: `scripts/export_freqtrade_data.py` already supports `ETH-USDT-SWAP` and `BTC-USDT-SWAP`.
|
|
|
+
|
|
|
+## Leg mapping
|
|
|
+
|
|
|
+| Leg family | Freqtrade fit | Needs | Migration risk |
|
|
|
+| --- | --- | --- | --- |
|
|
|
+| `eth_btc_rsi_filter` | `direct_strategy_logic_with_btc_informative_pair` | ETH/USDT:USDT base pair; BTC/USDT:USDT informative pair; 15m candles; stake sizing from portfolio weight if used as a portfolio leg | `low_for_signal_comparison` |
|
|
|
+| `btc_lead_eth_lag` | `direct_strategy_logic_with_btc_informative_pair` | BTC informative pair on the leg timeframe; 5m and/or 15m timeframes for the signal-intent portfolio; separate strategy classes or one strategy with informative timeframe columns | `low_for_single_leg_backtest_medium_for_multi_leg_portfolio_accounting` |
|
|
|
+| `eth_robust_twap` | `partial_only` | custom_entry_price or limit order configuration for price offsets; position adjustment if multiple TWAP levels are modeled inside one trade; custom order/fill tracking to compare maker fill, miss, and slippage; portfolio-level reconciliation if combined with other ETH legs | `high_for_execution_fidelity` |
|
|
|
+
|
|
|
+## Data import
|
|
|
+
|
|
|
+Existing cached OKX candles can be exported into Freqtrade JSON futures format:
|
|
|
+
|
|
|
+- `rtk uv run python scripts/export_freqtrade_data.py --symbol ETH-USDT-SWAP --bar 15m`
|
|
|
+- `rtk uv run python scripts/export_freqtrade_data.py --symbol BTC-USDT-SWAP --bar 15m`
|
|
|
+- `rtk uv run python scripts/export_freqtrade_data.py --symbol ETH-USDT-SWAP --bar 5m`
|
|
|
+- `rtk uv run python scripts/export_freqtrade_data.py --symbol BTC-USDT-SWAP --bar 5m`
|
|
|
+
|
|
|
+Expected output files:
|
|
|
+- `freqtrade/user_data/data/okx/futures/ETH_USDT_USDT-15m-futures.json`
|
|
|
+- `freqtrade/user_data/data/okx/futures/BTC_USDT_USDT-15m-futures.json`
|
|
|
+- `freqtrade/user_data/data/okx/futures/ETH_USDT_USDT-5m-futures.json`
|
|
|
+- `freqtrade/user_data/data/okx/futures/BTC_USDT_USDT-5m-futures.json`
|
|
|
+
|
|
|
+## Minimum skeleton
|
|
|
+
|
|
|
+A minimum skeleton can be generated, but the first target should be the no-maker-dependent ETH/BTC RSI + BTC lead-lag comparison. The maker-dependent TWAP leg can only be approximated in a normal Freqtrade backtest unless custom order/fill tracking is added.
|
|
|
+
|
|
|
+```python
|
|
|
+class EthFocusedPortfolioFreqtrade(IStrategy):
|
|
|
+ timeframe = "15m"
|
|
|
+ can_short = False
|
|
|
+ startup_candle_count = 480
|
|
|
+ process_only_new_candles = True
|
|
|
+ minimal_roi = {"0": 100.0}
|
|
|
+ stoploss = -0.006
|
|
|
+ use_exit_signal = True
|
|
|
+
|
|
|
+ def informative_pairs(self):
|
|
|
+ return [("BTC/USDT:USDT", "15m"), ("BTC/USDT:USDT", "5m")]
|
|
|
+
|
|
|
+ def populate_indicators(self, dataframe, metadata):
|
|
|
+ # ETH SMA/RSI2 on base pair; merge BTC informative SMA/momentum/returns.
|
|
|
+ return dataframe
|
|
|
+
|
|
|
+ def populate_entry_trend(self, dataframe, metadata):
|
|
|
+ # enter_long when one selected leg is active; enter_tag records leg id.
|
|
|
+ return dataframe
|
|
|
+
|
|
|
+ def custom_stake_amount(self, pair, current_time, current_rate, proposed_stake, **kwargs):
|
|
|
+ # map active leg tag to portfolio weight.
|
|
|
+ return proposed_stake
|
|
|
+
|
|
|
+ def custom_exit(self, pair, trade, current_time, current_rate, current_profit, **kwargs):
|
|
|
+ # map leg exit: RSI/BTC trend-off or max_hold/take_profit.
|
|
|
+ return None
|
|
|
+
|
|
|
+ def leverage(self, pair, current_time, current_rate, proposed_leverage, max_leverage, entry_tag, side, **kwargs):
|
|
|
+ return min(3.0, max_leverage)
|
|
|
+```
|
|
|
+
|
|
|
+## Decision
|
|
|
+
|
|
|
+- Freqtrade next step: `yes_for_signal_and_accounting_comparison_of_non_maker_legs`.
|
|
|
+- Freqtrade execution migration: `no_for_primary_P1_if_eth_robust_twap_remains_required`.
|
|
|
+- Shortest path: Use freqtrade to cross-check ETH/BTC RSI filter and BTC lead-lag legs; keep maker-dependent TWAP execution in the existing self-built OKX path until real fill behavior is measured.
|
|
|
+
|
|
|
+## JSON
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "decision": {
|
|
|
+ "freqtrade_as_execution_migration": "no_for_primary_P1_if_eth_robust_twap_remains_required",
|
|
|
+ "freqtrade_as_next_step": "yes_for_signal_and_accounting_comparison_of_non_maker_legs",
|
|
|
+ "shortest_path": "Use freqtrade to cross-check ETH/BTC RSI filter and BTC lead-lag legs; keep maker-dependent TWAP execution in the existing self-built OKX path until real fill behavior is measured."
|
|
|
+ },
|
|
|
+ "existing_freqtrade_surface": {
|
|
|
+ "config_pair_whitelist": [
|
|
|
+ "BTC/USDT:USDT"
|
|
|
+ ],
|
|
|
+ "dataformat_ohlcv": "json",
|
|
|
+ "export_supports_eth": true,
|
|
|
+ "margin_mode": "isolated",
|
|
|
+ "readme_marks_comparison_not_replacement": true,
|
|
|
+ "strategy_class_present": true,
|
|
|
+ "strategy_uses_custom_exit": true,
|
|
|
+ "strategy_uses_leverage_callback": true,
|
|
|
+ "timeframe": "15m",
|
|
|
+ "trading_mode": "futures"
|
|
|
+ },
|
|
|
+ "generated_at": "2026-04-29T18:28:15Z",
|
|
|
+ "leg_mapping": [
|
|
|
+ {
|
|
|
+ "family": "eth_btc_rsi_filter",
|
|
|
+ "freqtrade_fit": "direct_strategy_logic_with_btc_informative_pair",
|
|
|
+ "maps_to": [
|
|
|
+ "populate_indicators: ETH SMA and RSI2 on base ETH dataframe",
|
|
|
+ "informative BTC pair: BTC SMA and BTC momentum on the same timeframe",
|
|
|
+ "populate_entry_trend: ETH trend + ETH RSI2 pullback + BTC risk-on",
|
|
|
+ "populate_exit_trend/custom_exit: ETH RSI exit or BTC trend-off",
|
|
|
+ "leverage callback: fixed 3x capped by exchange max"
|
|
|
+ ],
|
|
|
+ "migration_risk": "low_for_signal_comparison",
|
|
|
+ "requires": [
|
|
|
+ "ETH/USDT:USDT base pair",
|
|
|
+ "BTC/USDT:USDT informative pair",
|
|
|
+ "15m candles",
|
|
|
+ "stake sizing from portfolio weight if used as a portfolio leg"
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "family": "btc_lead_eth_lag",
|
|
|
+ "freqtrade_fit": "direct_strategy_logic_with_btc_informative_pair",
|
|
|
+ "maps_to": [
|
|
|
+ "populate_indicators: ETH return over lead lookback",
|
|
|
+ "informative BTC pair: BTC return over lead lookback",
|
|
|
+ "populate_entry_trend: BTC return threshold and BTC-ETH return gap",
|
|
|
+ "custom_exit: max_hold_bars",
|
|
|
+ "stoploss/custom_exit: stop_loss_pct and take_profit_pct"
|
|
|
+ ],
|
|
|
+ "migration_risk": "low_for_single_leg_backtest_medium_for_multi_leg_portfolio_accounting",
|
|
|
+ "requires": [
|
|
|
+ "BTC informative pair on the leg timeframe",
|
|
|
+ "5m and/or 15m timeframes for the signal-intent portfolio",
|
|
|
+ "separate strategy classes or one strategy with informative timeframe columns"
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "family": "eth_robust_twap",
|
|
|
+ "freqtrade_fit": "partial_only",
|
|
|
+ "maps_to": [
|
|
|
+ "base RSI2 guarded long trigger",
|
|
|
+ "fixed leverage",
|
|
|
+ "max hold and stop exit"
|
|
|
+ ],
|
|
|
+ "migration_risk": "high_for_execution_fidelity",
|
|
|
+ "requires": [
|
|
|
+ "custom_entry_price or limit order configuration for price offsets",
|
|
|
+ "position adjustment if multiple TWAP levels are modeled inside one trade",
|
|
|
+ "custom order/fill tracking to compare maker fill, miss, and slippage",
|
|
|
+ "portfolio-level reconciliation if combined with other ETH legs"
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "minimum_strategy_skeleton": {
|
|
|
+ "can_generate": true,
|
|
|
+ "not_generated_in_this_task": true,
|
|
|
+ "reason": "The request asks for a read-only comparison/report and no main strategy submission.",
|
|
|
+ "recommended_first_target": "no_maker_dependent ETH/BTC RSI filter + BTC lead ETH lag, because it avoids TWAP maker-fill lifecycle assumptions."
|
|
|
+ },
|
|
|
+ "mode": "readonly_freqtrade_comparison",
|
|
|
+ "okx_futures_data_import": {
|
|
|
+ "config_changes_needed_for_eth_run": [
|
|
|
+ "Use pair_whitelist ETH/USDT:USDT for an ETH base strategy.",
|
|
|
+ "Keep exchange.name okx, trading_mode futures, margin_mode isolated, dataformat_ohlcv json.",
|
|
|
+ "Keep BTC data available as informative data, not as a tradable leg unless testing BTC directly."
|
|
|
+ ],
|
|
|
+ "existing_export_command_examples": [
|
|
|
+ "rtk uv run python scripts/export_freqtrade_data.py --symbol ETH-USDT-SWAP --bar 15m",
|
|
|
+ "rtk uv run python scripts/export_freqtrade_data.py --symbol BTC-USDT-SWAP --bar 15m",
|
|
|
+ "rtk uv run python scripts/export_freqtrade_data.py --symbol ETH-USDT-SWAP --bar 5m",
|
|
|
+ "rtk uv run python scripts/export_freqtrade_data.py --symbol BTC-USDT-SWAP --bar 5m"
|
|
|
+ ],
|
|
|
+ "output_files": [
|
|
|
+ "freqtrade/user_data/data/okx/futures/ETH_USDT_USDT-15m-futures.json",
|
|
|
+ "freqtrade/user_data/data/okx/futures/BTC_USDT_USDT-15m-futures.json",
|
|
|
+ "freqtrade/user_data/data/okx/futures/ETH_USDT_USDT-5m-futures.json",
|
|
|
+ "freqtrade/user_data/data/okx/futures/BTC_USDT_USDT-5m-futures.json"
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ "portfolio_candidates": [
|
|
|
+ {
|
|
|
+ "decision": "Primary next item to watch in paper/demo. It is the cleanest qualified portfolio by conservative sort, but it contains a maker-dependent TWAP leg, so real funds should wait for live fill evidence.",
|
|
|
+ "legs": [
|
|
|
+ "eth_btc_rsi_filter:15m:eth-btc-rsi-filter-et50-l3.0-x55.0-bt480-bm240-br0.0",
|
|
|
+ "btc_lead_eth_lag_15m:15m:btc-lead-eth-lag-lb8-br0.018-gap0.006-mh8-sl0.006-tp0.018",
|
|
|
+ "eth_robust_twap:15m:rsi2-long-guarded-price-twap-o0.0030-0.0060-0.0090-v4-t60-l3.0-x50.0-sl0.012-mh48-fb0.0005-ps0.0000-mm25"
|
|
|
+ ],
|
|
|
+ "metrics": {
|
|
|
+ "cost_model": "maker_taker",
|
|
|
+ "max_horizon_drawdown": 0.06650656143862783,
|
|
|
+ "min_horizon_total_return": 0.014041380756578459,
|
|
|
+ "net_annualized_return": 0.07431265319093083,
|
|
|
+ "net_calmar": 1.0203012338692994,
|
|
|
+ "net_max_drawdown": 0.07283403246423034,
|
|
|
+ "net_total_return": 0.5746697040909923,
|
|
|
+ "scope": "all_legs",
|
|
|
+ "worst_month_return": -0.04435071071689678
|
|
|
+ },
|
|
|
+ "minimum_next_step": "Run quasi-live read-only/order-intent tracking for all legs and record per-leg signal, fill/miss, slippage, and portfolio equity for at least the next signal cycle set.",
|
|
|
+ "name": "all_legs-risk-3-c0124-eth_btc_rsi_filter+btc_lead_eth_lag_15m+eth_robust_twap",
|
|
|
+ "needs_forward_or_demo_live": true,
|
|
|
+ "priority": 1,
|
|
|
+ "real_live_now": false,
|
|
|
+ "status": "candidate",
|
|
|
+ "title": "Lowest-drawdown ETH-focused conservative portfolio",
|
|
|
+ "weights": [
|
|
|
+ "eth_btc_rsi_filter:15m:eth-btc-rsi-filter-et50-l3.0-x55.0-bt480-bm240-br0.0=0.48537471",
|
|
|
+ "btc_lead_eth_lag_15m:15m:btc-lead-eth-lag-lb8-br0.018-gap0.006-mh8-sl0.006-tp0.018=0.06171009",
|
|
|
+ "eth_robust_twap:15m:rsi2-long-guarded-price-twap-o0.0030-0.0060-0.0090-v4-t60-l3.0-x50.0-sl0.012-mh48-fb0.0005-ps0.0000-mm25=0.45291520"
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "decision": "Best fallback if maker-fill uncertainty is treated as disqualifying. It keeps qualified portfolio behavior without the robust TWAP maker-dependent leg.",
|
|
|
+ "legs": [
|
|
|
+ "eth_btc_rsi_filter:15m:eth-btc-rsi-filter-et50-l3.0-x55.0-bt120-bm240-br0.0",
|
|
|
+ "btc_lead_eth_lag_15m:15m:btc-lead-eth-lag-lb8-br0.018-gap0.006-mh8-sl0.006-tp0.018"
|
|
|
+ ],
|
|
|
+ "metrics": {
|
|
|
+ "cost_model": "maker_taker",
|
|
|
+ "max_horizon_drawdown": 0.07437399760660594,
|
|
|
+ "min_horizon_total_return": 0.01722844178015248,
|
|
|
+ "net_annualized_return": 0.0900769354075468,
|
|
|
+ "net_calmar": 0.8611995911104812,
|
|
|
+ "net_max_drawdown": 0.10459472616724809,
|
|
|
+ "net_total_return": 0.7268826579747691,
|
|
|
+ "scope": "no_maker_dependent",
|
|
|
+ "worst_month_return": -0.04507919732709942
|
|
|
+ },
|
|
|
+ "minimum_next_step": "Shadow the two legs side by side with the primary portfolio and compare realized signal overlap and drawdown path.",
|
|
|
+ "name": "no_maker_dependent-risk-2-c0250-eth_btc_rsi_filter+btc_lead_eth_lag_15m",
|
|
|
+ "needs_forward_or_demo_live": true,
|
|
|
+ "priority": 2,
|
|
|
+ "real_live_now": false,
|
|
|
+ "status": "candidate",
|
|
|
+ "title": "Simpler no-maker-dependent conservative portfolio",
|
|
|
+ "weights": [
|
|
|
+ "eth_btc_rsi_filter:15m:eth-btc-rsi-filter-et50-l3.0-x55.0-bt120-bm240-br0.0=0.89432334",
|
|
|
+ "btc_lead_eth_lag_15m:15m:btc-lead-eth-lag-lb8-br0.018-gap0.006-mh8-sl0.006-tp0.018=0.10567666"
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "decision": "Return-oriented qualified variant. It is less conservative than priority 1 because drawdown is materially higher.",
|
|
|
+ "legs": [
|
|
|
+ "eth_btc_rsi_filter:15m:eth-btc-rsi-filter-et50-l3.0-x55.0-bt480-bm240-br0.0",
|
|
|
+ "btc_lead_eth_lag_15m:15m:btc-lead-eth-lag-lb16-br0.024-gap0.006-mh32-sl0.006-tp0.018"
|
|
|
+ ],
|
|
|
+ "metrics": {
|
|
|
+ "cost_model": "maker_taker",
|
|
|
+ "max_horizon_drawdown": 0.08384178749425959,
|
|
|
+ "min_horizon_total_return": 0.021522808059551757,
|
|
|
+ "net_annualized_return": 0.13247985480488844,
|
|
|
+ "net_calmar": 0.8214839555775263,
|
|
|
+ "net_max_drawdown": 0.1612689498138176,
|
|
|
+ "net_total_return": 1.1990870259436797,
|
|
|
+ "scope": "all_legs",
|
|
|
+ "worst_month_return": -0.056624480428019486
|
|
|
+ },
|
|
|
+ "minimum_next_step": "Keep as a benchmark portfolio in the same quasi-live tracker; do not allocate before it beats priority 1 on realized drawdown-adjusted behavior.",
|
|
|
+ "name": "all_legs-risk-2-c0020-eth_btc_rsi_filter+btc_lead_eth_lag_15m",
|
|
|
+ "needs_forward_or_demo_live": true,
|
|
|
+ "priority": 3,
|
|
|
+ "real_live_now": false,
|
|
|
+ "status": "candidate",
|
|
|
+ "title": "Highest-return qualified conservative portfolio",
|
|
|
+ "weights": [
|
|
|
+ "eth_btc_rsi_filter:15m:eth-btc-rsi-filter-et50-l3.0-x55.0-bt480-bm240-br0.0=0.89038020",
|
|
|
+ "btc_lead_eth_lag_15m:15m:btc-lead-eth-lag-lb16-br0.024-gap0.006-mh32-sl0.006-tp0.018=0.10961980"
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "decision": "Keep as secondary watchlist, not primary allocation.",
|
|
|
+ "metrics": {
|
|
|
+ "net_annualized_return": 0.3305936472652691,
|
|
|
+ "net_calmar": 1.4902378159621057,
|
|
|
+ "net_max_drawdown": 0.22183952368155146,
|
|
|
+ "net_total_return": 5.132970549912916,
|
|
|
+ "trades": 88.0,
|
|
|
+ "worst_month": "2020-09",
|
|
|
+ "worst_month_return": -0.10650826274141434
|
|
|
+ },
|
|
|
+ "minimum_next_step": "Run shadow/demo signal intent logging only; require fresh forward trades before any capital allocation because the acceptable-risk versions have few trades.",
|
|
|
+ "name": "bb-squeeze-l96-bw960-q0.25-sl0.01-tpnone-long-btc-up-momo-vc0.006-dd0.25-cd24",
|
|
|
+ "needs_forward_or_demo_live": true,
|
|
|
+ "priority": 4,
|
|
|
+ "real_live_now": false,
|
|
|
+ "status": "watchlist",
|
|
|
+ "title": "BB squeeze risk candidate"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "signal_intent_legs": [
|
|
|
+ {
|
|
|
+ "bar": "15m",
|
|
|
+ "decision_candle_time": "2026-04-29T16:30:00Z",
|
|
|
+ "decision_candle_ts": 1777480200000,
|
|
|
+ "dry_run_action": "hold",
|
|
|
+ "entry_rule": "btc_close > btc_sma and btc_momentum >= minimum and eth_close > eth_sma and eth_rsi2 <= threshold",
|
|
|
+ "exit_signal": true,
|
|
|
+ "family": "eth_btc_rsi_filter",
|
|
|
+ "indicators": {
|
|
|
+ "btc_close": 75856.0,
|
|
|
+ "btc_momentum": -0.040101233786776325,
|
|
|
+ "btc_sma": 77331.09999999992,
|
|
|
+ "eth_close": 2266.75,
|
|
|
+ "eth_rsi2": 10.743438715792621,
|
|
|
+ "eth_sma": 2315.6154000000006
|
|
|
+ },
|
|
|
+ "latest_local_candle_time": "2026-04-29T16:45:00Z",
|
|
|
+ "latest_local_candle_ts": 1777481100000,
|
|
|
+ "leg_id": "eth_btc_rsi_filter_15m",
|
|
|
+ "needs_cancel": false,
|
|
|
+ "needs_order": false,
|
|
|
+ "params": {
|
|
|
+ "btc_min_momentum": 0.0,
|
|
|
+ "btc_momentum_lookback": 240,
|
|
|
+ "btc_trend_sma": 480,
|
|
|
+ "eth_exit_rsi": 55.0,
|
|
|
+ "eth_rsi_threshold": 3.0,
|
|
|
+ "eth_trend_sma": 50
|
|
|
+ },
|
|
|
+ "risk_limits": {
|
|
|
+ "leverage": 3,
|
|
|
+ "max_hold_bars": null,
|
|
|
+ "max_weight": 0.80314757,
|
|
|
+ "stop_loss_pct": null,
|
|
|
+ "take_profit_pct": null
|
|
|
+ },
|
|
|
+ "signal": false,
|
|
|
+ "suggested_weight": 0.80314757,
|
|
|
+ "symbol": "ETH-USDT-SWAP"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "bar": "15m",
|
|
|
+ "decision_candle_time": "2026-04-29T16:30:00Z",
|
|
|
+ "decision_candle_ts": 1777480200000,
|
|
|
+ "dry_run_action": "hold",
|
|
|
+ "entry_rule": "btc_return >= threshold and btc_return - eth_return >= lag_gap",
|
|
|
+ "exit_signal": false,
|
|
|
+ "family": "btc_lead_eth_lag",
|
|
|
+ "indicators": {
|
|
|
+ "btc_close": 75856.0,
|
|
|
+ "btc_return": -0.009247165769813437,
|
|
|
+ "eth_close": 2266.75,
|
|
|
+ "eth_return": -0.014409384796664093,
|
|
|
+ "return_gap": 0.005162219026850656
|
|
|
+ },
|
|
|
+ "latest_local_candle_time": "2026-04-29T16:45:00Z",
|
|
|
+ "latest_local_candle_ts": 1777481100000,
|
|
|
+ "leg_id": "btc_lead_eth_lag_15m",
|
|
|
+ "needs_cancel": false,
|
|
|
+ "needs_order": false,
|
|
|
+ "params": {
|
|
|
+ "btc_return_threshold": 0.018,
|
|
|
+ "lag_gap": 0.006,
|
|
|
+ "lead_lookback": 8,
|
|
|
+ "max_hold_bars": 8,
|
|
|
+ "stop_loss_pct": 0.006,
|
|
|
+ "take_profit_pct": 0.018
|
|
|
+ },
|
|
|
+ "risk_limits": {
|
|
|
+ "leverage": 3,
|
|
|
+ "max_hold_bars": 8,
|
|
|
+ "max_weight": 0.09459139,
|
|
|
+ "stop_loss_pct": 0.006,
|
|
|
+ "take_profit_pct": 0.018
|
|
|
+ },
|
|
|
+ "signal": false,
|
|
|
+ "suggested_weight": 0.09459139,
|
|
|
+ "symbol": "ETH-USDT-SWAP"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "bar": "5m",
|
|
|
+ "decision_candle_time": "2026-04-29T01:55:00Z",
|
|
|
+ "decision_candle_ts": 1777427700000,
|
|
|
+ "dry_run_action": "hold",
|
|
|
+ "entry_rule": "btc_return >= threshold and btc_return - eth_return >= lag_gap",
|
|
|
+ "exit_signal": false,
|
|
|
+ "family": "btc_lead_eth_lag",
|
|
|
+ "indicators": {
|
|
|
+ "btc_close": 76534.3,
|
|
|
+ "btc_return": 0.0028355077904398396,
|
|
|
+ "eth_close": 2291.56,
|
|
|
+ "eth_return": 0.0025067480958775867,
|
|
|
+ "return_gap": 0.00032875969456225285
|
|
|
+ },
|
|
|
+ "latest_local_candle_time": "2026-04-29T02:00:00Z",
|
|
|
+ "latest_local_candle_ts": 1777428000000,
|
|
|
+ "leg_id": "btc_lead_eth_lag_5m",
|
|
|
+ "needs_cancel": false,
|
|
|
+ "needs_order": false,
|
|
|
+ "params": {
|
|
|
+ "btc_return_threshold": 0.012,
|
|
|
+ "lag_gap": 0.006,
|
|
|
+ "lead_lookback": 16,
|
|
|
+ "max_hold_bars": 8,
|
|
|
+ "stop_loss_pct": 0.006,
|
|
|
+ "take_profit_pct": 0.018
|
|
|
+ },
|
|
|
+ "risk_limits": {
|
|
|
+ "leverage": 3,
|
|
|
+ "max_hold_bars": 8,
|
|
|
+ "max_weight": 0.10226104,
|
|
|
+ "stop_loss_pct": 0.006,
|
|
|
+ "take_profit_pct": 0.018
|
|
|
+ },
|
|
|
+ "signal": false,
|
|
|
+ "suggested_weight": 0.10226104,
|
|
|
+ "symbol": "ETH-USDT-SWAP"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "sources": {
|
|
|
+ "btc_rsi2_strategy": "freqtrade/user_data/strategies/BtcRsi2Guarded.py",
|
|
|
+ "export_script": "scripts/export_freqtrade_data.py",
|
|
|
+ "final_report": "reports/eth-exploration/eth-conservative-portfolio-final.json",
|
|
|
+ "freqtrade_config": "freqtrade/config-okx-futures.json",
|
|
|
+ "freqtrade_readme": "freqtrade/README.md",
|
|
|
+ "signal_intent": "reports/eth-exploration/eth-focused-portfolio-signal-intent.json"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|