@senpi/runtime 3.0.0-dev.runtime-phase-2.20260623210537 → 3.0.0-dev.runtime-phase-2.20260625112547
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -9
- package/dist/actions/action-runtime-module.d.ts.map +1 -1
- package/dist/actions/action-runtime-module.js +1 -1
- package/dist/actions/action-runtime-module.js.map +1 -1
- package/dist/actions/decision-engine.d.ts.map +1 -1
- package/dist/actions/decision-engine.js +3 -0
- package/dist/actions/decision-engine.js.map +1 -1
- package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
- package/dist/actions/open-position/open-position.action.js +54 -14
- package/dist/actions/open-position/open-position.action.js.map +1 -1
- package/dist/actions/types.d.ts +10 -2
- package/dist/actions/types.d.ts.map +1 -1
- package/dist/actions/types.js +8 -0
- package/dist/actions/types.js.map +1 -1
- package/dist/cli/guide-commands.d.ts.map +1 -1
- package/dist/cli/guide-commands.js +80 -74
- package/dist/cli/guide-commands.js.map +1 -1
- package/dist/cli/senpi-commands.d.ts.map +1 -1
- package/dist/cli/senpi-commands.js +0 -108
- package/dist/cli/senpi-commands.js.map +1 -1
- package/dist/constants/dsl/index.d.ts +2 -0
- package/dist/constants/dsl/index.d.ts.map +1 -1
- package/dist/constants/dsl/index.js +2 -0
- package/dist/constants/dsl/index.js.map +1 -1
- package/dist/dsl/config/parse-tiers.d.ts.map +1 -1
- package/dist/dsl/config/parse-tiers.js +6 -2
- package/dist/dsl/config/parse-tiers.js.map +1 -1
- package/dist/dsl/engine-client/config-mapping.d.ts +7 -0
- package/dist/dsl/engine-client/config-mapping.d.ts.map +1 -1
- package/dist/dsl/engine-client/config-mapping.js +16 -2
- package/dist/dsl/engine-client/config-mapping.js.map +1 -1
- package/dist/dsl/events/handlers.d.ts +18 -2
- package/dist/dsl/events/handlers.d.ts.map +1 -1
- package/dist/dsl/events/handlers.js +302 -213
- package/dist/dsl/events/handlers.js.map +1 -1
- package/dist/dsl/monitor/create-monitor.d.ts +15 -0
- package/dist/dsl/monitor/create-monitor.d.ts.map +1 -1
- package/dist/dsl/monitor/create-monitor.js +46 -9
- package/dist/dsl/monitor/create-monitor.js.map +1 -1
- package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
- package/dist/dsl/monitor/process-one-position.js +138 -77
- package/dist/dsl/monitor/process-one-position.js.map +1 -1
- package/dist/dsl/plugin/index.d.ts +16 -1
- package/dist/dsl/plugin/index.d.ts.map +1 -1
- package/dist/dsl/plugin/index.js +35 -4
- package/dist/dsl/plugin/index.js.map +1 -1
- package/dist/dsl/plugin/options.d.ts +18 -0
- package/dist/dsl/plugin/options.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/runtime/create-scanner-module.d.ts +4 -3
- package/dist/runtime/create-scanner-module.d.ts.map +1 -1
- package/dist/runtime/create-scanner-module.js +14 -5
- package/dist/runtime/create-scanner-module.js.map +1 -1
- package/dist/runtime/create-scanner-providers-for-run.d.ts.map +1 -1
- package/dist/runtime/create-scanner-providers-for-run.js +12 -1
- package/dist/runtime/create-scanner-providers-for-run.js.map +1 -1
- package/dist/runtime/load-runtime-config.js +1 -1
- package/dist/runtime/load-runtime-config.js.map +1 -1
- package/dist/runtime/map-strategies-registration.js +7 -8
- package/dist/runtime/map-strategies-registration.js.map +1 -1
- package/dist/runtime/map-strategies.d.ts.map +1 -1
- package/dist/runtime/map-strategies.js +12 -3
- package/dist/runtime/map-strategies.js.map +1 -1
- package/dist/runtime/reconcile-decide.d.ts +73 -0
- package/dist/runtime/reconcile-decide.d.ts.map +1 -0
- package/dist/runtime/reconcile-decide.js +186 -0
- package/dist/runtime/reconcile-decide.js.map +1 -0
- package/dist/runtime/reconcile-run.d.ts +62 -0
- package/dist/runtime/reconcile-run.d.ts.map +1 -0
- package/dist/runtime/reconcile-run.js +173 -0
- package/dist/runtime/reconcile-run.js.map +1 -0
- package/dist/runtime/reconcile-state.d.ts +44 -0
- package/dist/runtime/reconcile-state.d.ts.map +1 -1
- package/dist/runtime/reconcile-state.js +80 -44
- package/dist/runtime/reconcile-state.js.map +1 -1
- package/dist/runtime/risk-guard.d.ts.map +1 -1
- package/dist/runtime/risk-guard.js +17 -12
- package/dist/runtime/risk-guard.js.map +1 -1
- package/dist/runtime/runtime-schema.d.ts +2912 -1052
- package/dist/runtime/runtime-schema.d.ts.map +1 -1
- package/dist/runtime/runtime-schema.js +136 -42
- package/dist/runtime/runtime-schema.js.map +1 -1
- package/dist/runtime/runtime.d.ts +26 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +254 -8
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/scanner-registry.d.ts +1 -1
- package/dist/runtime/scanner-registry.d.ts.map +1 -1
- package/dist/runtime/scanner-registry.js +3 -12
- package/dist/runtime/scanner-registry.js.map +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.d.ts.map +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.js +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.js.map +1 -1
- package/dist/runtime/supervisor/orphan-sweep.js +1 -1
- package/dist/runtime/supervisor/orphan-sweep.js.map +1 -1
- package/dist/runtime/supervisor/supervisor-utils.d.ts +1 -1
- package/dist/runtime/supervisor/supervisor-utils.d.ts.map +1 -1
- package/dist/runtime/supervisor/supervisor-utils.js +1 -1
- package/dist/runtime/supervisor/supervisor-utils.js.map +1 -1
- package/dist/runtime-api/intake/acceptance-record.d.ts +10 -0
- package/dist/runtime-api/intake/acceptance-record.d.ts.map +1 -1
- package/dist/runtime-api/intake/acceptance-record.js +28 -0
- package/dist/runtime-api/intake/acceptance-record.js.map +1 -1
- package/dist/runtime-api/intake/intake-mount.d.ts.map +1 -1
- package/dist/runtime-api/intake/intake-mount.js +28 -36
- package/dist/runtime-api/intake/intake-mount.js.map +1 -1
- package/dist/runtime-api/intake/process-signal-post.d.ts +20 -1
- package/dist/runtime-api/intake/process-signal-post.d.ts.map +1 -1
- package/dist/runtime-api/intake/process-signal-post.js +57 -6
- package/dist/runtime-api/intake/process-signal-post.js.map +1 -1
- package/dist/runtime-api/intake/scanner-launcher.d.ts +18 -4
- package/dist/runtime-api/intake/scanner-launcher.d.ts.map +1 -1
- package/dist/runtime-api/intake/scanner-launcher.js +24 -3
- package/dist/runtime-api/intake/scanner-launcher.js.map +1 -1
- package/dist/runtime-api/intake/types.d.ts +16 -0
- package/dist/runtime-api/intake/types.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.schema.d.ts +4 -0
- package/dist/runtime-api/routes/signals.schema.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.schema.js +12 -0
- package/dist/runtime-api/routes/signals.schema.js.map +1 -1
- package/dist/scanners/external/scaffold/__main__.py +65 -24
- package/dist/scanners/external/scaffold/ctx.py +78 -0
- package/dist/scanners/external/scaffold/delivery.py +56 -22
- package/dist/scanners/external/scaffold/entrypoint_loader.py +42 -48
- package/dist/scanners/external/scaffold/journal.py +13 -2
- package/dist/scanners/external/scaffold/requirements.txt +11 -0
- package/dist/scanners/external/scaffold/scaffold.py +159 -128
- package/dist/scanners/external/scaffold/senpi_mcp.py +250 -0
- package/dist/scanners/external/scaffold/signal_envelope.py +177 -34
- package/dist/scanners/external/scaffold/state_manager.py +175 -0
- package/dist/scanners/external-scanner-receiver.d.ts +6 -0
- package/dist/scanners/external-scanner-receiver.d.ts.map +1 -1
- package/dist/scanners/external-scanner-receiver.js +14 -1
- package/dist/scanners/external-scanner-receiver.js.map +1 -1
- package/dist/scripts/run-dsl-standalone-live.d.ts +1 -1
- package/dist/scripts/run-dsl-standalone-live.js +5 -3
- package/dist/scripts/run-dsl-standalone-live.js.map +1 -1
- package/dist/senpi/client.d.ts +37 -4
- package/dist/senpi/client.d.ts.map +1 -1
- package/dist/senpi/client.js +101 -24
- package/dist/senpi/client.js.map +1 -1
- package/dist/state/state-manager.d.ts +17 -0
- package/dist/state/state-manager.d.ts.map +1 -1
- package/dist/state/state-manager.js +50 -4
- package/dist/state/state-manager.js.map +1 -1
- package/dist/strategy/strategy-state.d.ts +9 -1
- package/dist/strategy/strategy-state.d.ts.map +1 -1
- package/dist/strategy/strategy-state.js +62 -9
- package/dist/strategy/strategy-state.js.map +1 -1
- package/dist/tracking/constants.d.ts.map +1 -1
- package/dist/tracking/constants.js +2 -0
- package/dist/tracking/constants.js.map +1 -1
- package/dist/types/dsl/index.d.ts +1 -1
- package/dist/types/dsl/index.d.ts.map +1 -1
- package/dist/types/scanner.d.ts +7 -0
- package/dist/types/scanner.d.ts.map +1 -1
- package/dist/types/strategy.d.ts +3 -1
- package/dist/types/strategy.d.ts.map +1 -1
- package/dist/utils/keyed-mutex.d.ts +37 -0
- package/dist/utils/keyed-mutex.d.ts.map +1 -0
- package/dist/utils/keyed-mutex.js +77 -0
- package/dist/utils/keyed-mutex.js.map +1 -0
- package/examples/strategies/README.md +17 -12
- package/examples/strategies/iguana/README.md +135 -0
- package/examples/strategies/iguana/recipe.yaml +137 -0
- package/examples/strategies/iguana/scanners/scan.py +243 -0
- package/examples/strategies/iguana/scanners/scoring.py +152 -0
- package/examples/strategies/raptor/README.md +156 -0
- package/examples/strategies/raptor/recipe.yaml +154 -0
- package/examples/strategies/raptor/scanners/scan.py +349 -0
- package/examples/strategies/raptor/scanners/scoring.py +452 -0
- package/examples/strategies/spider/README.md +89 -0
- package/examples/strategies/spider/scalp/recipe.yaml +129 -0
- package/examples/strategies/spider/scalp/scanners/scan.py +219 -0
- package/examples/strategies/spider/scalp/scanners/scoring.py +179 -0
- package/examples/strategies/spider/swing/recipe.yaml +137 -0
- package/examples/strategies/spider/swing/scanners/scan.py +334 -0
- package/examples/strategies/spider/swing/scanners/scoring.py +184 -0
- package/examples/strategies/turbine/README.md +166 -0
- package/examples/strategies/turbine/recipe-runners.yaml +123 -0
- package/examples/strategies/turbine/recipe-volume.yaml +129 -0
- package/examples/strategies/turbine/scanners/scan.py +283 -0
- package/examples/strategies/turbine/scanners/scoring.py +190 -0
- package/package.json +1 -1
- package/dist/scanners/external/liquidation-watchdog/README.md +0 -107
- package/dist/scanners/external/liquidation-watchdog/liquidation-watchdog.yaml +0 -48
- package/dist/scanners/external/liquidation-watchdog/producer.mjs +0 -336
- package/dist/scanners/external/momentum/README.md +0 -148
- package/dist/scanners/external/momentum/momentum.yaml +0 -116
- package/dist/scanners/external/momentum/producer.mjs +0 -251
- package/dist/scanners/external/shared/ingest.mjs +0 -112
- package/examples/README.md +0 -89
- package/examples/scanners-consumer-quickstart.mjs +0 -134
- package/examples/scanners-emerging-movers-v4.mjs +0 -287
- package/examples/scanners-liquidation-watchdog.mjs +0 -341
- package/examples/scanners-live-mcp.mjs +0 -208
- package/examples/scanners-multi-strategy.mjs +0 -165
- package/examples/scanners-position-tracker-e2e.mjs +0 -225
- package/examples/scanners-scheduled-events.mjs +0 -96
- package/examples/scanners-senpi-provider-client.mjs +0 -182
- package/examples/scanners-single-strategy.mjs +0 -198
- package/examples/strategies/dsl-showcase.yaml +0 -68
- package/examples/strategies/dsl.yaml +0 -51
- package/examples/strategies/fox-minimal-loosened.yaml +0 -240
- package/examples/strategies/fox-minimal.yaml +0 -242
- package/examples/strategies/minimal.yaml +0 -46
- package/examples/strategies/momentum/how-it-works.md +0 -48
- package/examples/strategies/momentum/momentum-guarded.yaml +0 -161
- package/examples/strategies/risk-showcase.yaml +0 -93
- package/examples/strategies/viper.yaml +0 -67
- package/examples/strategies/wolf.yaml +0 -72
- package/examples/yamls/sample-with-dsl-and-emerging-movers.yaml +0 -123
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
name: wolf
|
|
2
|
-
version: 1.0.0
|
|
3
|
-
description: Aggressive — early entry on FIRST_JUMP from emerging_movers.
|
|
4
|
-
|
|
5
|
-
strategy:
|
|
6
|
-
wallet: "${WALLET_ADDRESS}"
|
|
7
|
-
slots: 3
|
|
8
|
-
margin_pct: 15
|
|
9
|
-
trading_risk: aggressive
|
|
10
|
-
enabled: true
|
|
11
|
-
|
|
12
|
-
scanners:
|
|
13
|
-
- name: emerging_movers
|
|
14
|
-
type: emerging_movers
|
|
15
|
-
interval: 20s
|
|
16
|
-
config:
|
|
17
|
-
topN: 25
|
|
18
|
-
minRankJump: 5
|
|
19
|
-
minTopTradersGain: 0.1
|
|
20
|
-
minScansBeforeSignals: 2
|
|
21
|
-
historyLimit: 60
|
|
22
|
-
immediateJumpThreshold: 10
|
|
23
|
-
deepClimbRankThreshold: 25
|
|
24
|
-
contribExplosionMultiplier: 3.0
|
|
25
|
-
firstJumpMinPrevRank: 30
|
|
26
|
-
|
|
27
|
-
actions:
|
|
28
|
-
- name: open_on_jump
|
|
29
|
-
action_type: OPEN_POSITION
|
|
30
|
-
decision_mode: llm
|
|
31
|
-
decision_model: claude-sonnet-4-20250514
|
|
32
|
-
scanners: [emerging_movers]
|
|
33
|
-
min_confidence: 6
|
|
34
|
-
params:
|
|
35
|
-
order_type: FEE_OPTIMIZED_LIMIT
|
|
36
|
-
fee_optimized_limit_options:
|
|
37
|
-
ensure_execution_as_taker: true
|
|
38
|
-
execution_timeout_seconds: 10
|
|
39
|
-
context: [signal]
|
|
40
|
-
decision_prompt: |
|
|
41
|
-
Evaluate the signal. Reply with JSON: {"execute": true|false, "actionType": "OPEN_POSITION", "confidence": 1-10, "reasoning": "...", "payload": {"signals": [{"asset": "SYMBOL", "direction": "LONG"|"SHORT", "reason": "...", "leverage": <optional number>, "margin": <optional $ amount>}]}}.
|
|
42
|
-
|
|
43
|
-
exit:
|
|
44
|
-
engine: dsl
|
|
45
|
-
interval_seconds: 30
|
|
46
|
-
order_type: FEE_OPTIMIZED_LIMIT
|
|
47
|
-
fee_optimized_limit_options:
|
|
48
|
-
ensure_execution_as_taker: true
|
|
49
|
-
execution_timeout_seconds: 10
|
|
50
|
-
dsl_preset:
|
|
51
|
-
hard_timeout:
|
|
52
|
-
enabled: true
|
|
53
|
-
interval_in_minutes: 90
|
|
54
|
-
weak_peak_cut:
|
|
55
|
-
enabled: true
|
|
56
|
-
interval_in_minutes: 45
|
|
57
|
-
min_value: 3
|
|
58
|
-
dead_weight_cut:
|
|
59
|
-
enabled: true
|
|
60
|
-
interval_in_minutes: 30
|
|
61
|
-
phase1:
|
|
62
|
-
enabled: true
|
|
63
|
-
max_loss_pct: 3.0
|
|
64
|
-
retrace_threshold: 7
|
|
65
|
-
consecutive_breaches_required: 3
|
|
66
|
-
phase2:
|
|
67
|
-
enabled: true
|
|
68
|
-
tiers:
|
|
69
|
-
- { trigger_pct: 7, lock_hw_pct: 40 }
|
|
70
|
-
- { trigger_pct: 12, lock_hw_pct: 55 }
|
|
71
|
-
- { trigger_pct: 15, lock_hw_pct: 75 }
|
|
72
|
-
- { trigger_pct: 20, lock_hw_pct: 85 }
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
name: wolf #required - name of the trading-recipe
|
|
2
|
-
version: 1.0.0 #required
|
|
3
|
-
description: > #required
|
|
4
|
-
Autonomous aggressive multi-strategy trading. Enter early on emerging movers,
|
|
5
|
-
protect with tight DSL, cut dead weight fast, rotate into strength.
|
|
6
|
-
|
|
7
|
-
# Optional: send run summaries and alerts to Telegram (requires OpenClaw channels.telegram configured)
|
|
8
|
-
# notifications:
|
|
9
|
-
# telegram_chat_id: "123456789"
|
|
10
|
-
|
|
11
|
-
# ── STRATEGY ──
|
|
12
|
-
strategy: #required
|
|
13
|
-
wallet: "0x71ce3f0e27c178cbdcf01c4d068278034df75fbc"
|
|
14
|
-
slots: 3
|
|
15
|
-
margin_pct: 10
|
|
16
|
-
trading_risk: aggressive
|
|
17
|
-
enabled: true
|
|
18
|
-
|
|
19
|
-
# ── SCANNERS ──
|
|
20
|
-
scanners: #required
|
|
21
|
-
- name: emerging_movers #required
|
|
22
|
-
type: emerging_movers #required
|
|
23
|
-
interval: 20s #required
|
|
24
|
-
blocked_assets: [] #optional
|
|
25
|
-
config: #Can be different for each scanner.
|
|
26
|
-
topN: 25
|
|
27
|
-
minRankJump: 5
|
|
28
|
-
minTopTradersGain: 0.1
|
|
29
|
-
minScansBeforeSignals: 2
|
|
30
|
-
historyLimit: 60
|
|
31
|
-
|
|
32
|
-
actions: #required
|
|
33
|
-
- name: wolf_entry #required
|
|
34
|
-
action_type: OPEN_POSITION #required
|
|
35
|
-
decision_mode: llm #required
|
|
36
|
-
decision_model: claude-sonnet-4-6 #required
|
|
37
|
-
scanners: [emerging_movers] #required
|
|
38
|
-
min_confidence: 2 #required
|
|
39
|
-
params:
|
|
40
|
-
order_type: FEE_OPTIMIZED_LIMIT
|
|
41
|
-
fee_optimized_limit_options:
|
|
42
|
-
ensure_execution_as_taker: true
|
|
43
|
-
execution_timeout_seconds: 15
|
|
44
|
-
context: #optional
|
|
45
|
-
- type: signal
|
|
46
|
-
value: emerging_movers
|
|
47
|
-
decision_prompt: | #optional
|
|
48
|
-
You evaluate emerging mover signals for the WOLF multi-strategy system.
|
|
49
|
-
WOLF enters early on first jumps — before the peak, not at it. Speed is edge.
|
|
50
|
-
|
|
51
|
-
SIGNAL DATA:
|
|
52
|
-
{{emerging_movers}}
|
|
53
|
-
|
|
54
|
-
SIGNAL PRIORITY (strict — act on highest priority first):
|
|
55
|
-
1. FIRST_JUMP: Jumped 10+ ranks from #25+ in one scan, wasn't in top 50 before.
|
|
56
|
-
ENTER IMMEDIATELY. 2 reasons is enough. vel > 0 is enough.
|
|
57
|
-
2. CONTRIB_EXPLOSION: 3x+ contribution spike from rank #20+. ENTER.
|
|
58
|
-
Never downgrade for erratic history.
|
|
59
|
-
3. IMMEDIATE_MOVER: 10+ rank jump from #25+ but not first jump.
|
|
60
|
-
ENTER if not erratic and not low velocity.
|
|
61
|
-
4. DEEP_CLIMBER: Steady climb from #30+, vel >= 0.03, 3+ reasons.
|
|
62
|
-
Route to conservative strategy if available.
|
|
63
|
-
|
|
64
|
-
ROUTING:
|
|
65
|
-
- FIRST_JUMP/CONTRIB_EXPLOSION → aggressive strategy
|
|
66
|
-
- DEEP_CLIMBER → conservative if available, else aggressive
|
|
67
|
-
- Never duplicate same asset within one strategy (cross-strategy OK)
|
|
68
|
-
|
|
69
|
-
ANTI-PATTERNS:
|
|
70
|
-
- Rank #1-10 for 2+ scans = SKIP
|
|
71
|
-
- 4+ reasons at rank #5 = SKIP
|
|
72
|
-
- Counter to BTC hourly trend = SKIP
|
|
73
|
-
- Burned asset today = SKIP
|
|
74
|
-
|
|
75
|
-
ROTATION (slots full + FIRST_JUMP):
|
|
76
|
-
- Weakest has negative ROE + SM conviction <= 1 → CUT, ENTER new
|
|
77
|
-
- Weakest is Tier 2+ or SM conviction 3+ → HOLD
|
|
78
|
-
- Positions younger than {{rotation_cooldown_minutes}}min → never rotate out
|
|
79
|
-
|
|
80
|
-
XYZ EQUITIES: Ignore trader count. Use reasons + rank velocity.
|
|
81
|
-
|
|
82
|
-
Respond with execute=true and actionType="OPEN_POSITION".
|
|
83
|
-
Put trade details in the payload object:
|
|
84
|
-
{
|
|
85
|
-
"execute": true,
|
|
86
|
-
"actionType": "OPEN_POSITION",
|
|
87
|
-
"confidence": 1-10,
|
|
88
|
-
"reasoning": "one sentence",
|
|
89
|
-
"payload": {
|
|
90
|
-
"signals": [
|
|
91
|
-
{ "asset": "<coin_ticker>", "direction": "LONG" or "SHORT", "reason": "one sentence", "rotate_out": "<asset_to_cut>", "leverage": "<optional number>", "margin": "<optional $ amount>" }
|
|
92
|
-
]
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
Set execute=false if no trade should be taken.
|
|
96
|
-
|
|
97
|
-
# ── EXIT ──
|
|
98
|
-
exit: #required
|
|
99
|
-
engine: dsl
|
|
100
|
-
interval_seconds: 30
|
|
101
|
-
order_type: FEE_OPTIMIZED_LIMIT
|
|
102
|
-
fee_optimized_limit_options:
|
|
103
|
-
ensure_execution_as_taker: true
|
|
104
|
-
execution_timeout_seconds: 15
|
|
105
|
-
dsl_preset:
|
|
106
|
-
phase1:
|
|
107
|
-
enabled: true
|
|
108
|
-
consecutive_breaches_required: 3
|
|
109
|
-
max_loss_pct: 3.0
|
|
110
|
-
retrace_threshold: 10
|
|
111
|
-
phase2:
|
|
112
|
-
enabled: true
|
|
113
|
-
tiers:
|
|
114
|
-
- { trigger_pct: 10, lock_hw_pct: 50 }
|
|
115
|
-
- { trigger_pct: 20, lock_hw_pct: 70 }
|
|
116
|
-
- { trigger_pct: 30, lock_hw_pct: 73 }
|
|
117
|
-
- { trigger_pct: 50, lock_hw_pct: 80 }
|
|
118
|
-
- { trigger_pct: 75, lock_hw_pct: 85 }
|
|
119
|
-
- { trigger_pct: 100, lock_hw_pct: 90 }
|
|
120
|
-
|
|
121
|
-
# Send run summaries and alerts to this Telegram chat (requires OpenClaw channels.telegram configured)
|
|
122
|
-
notifications:
|
|
123
|
-
telegram_chat_id: "6263059192"
|