From a67a338d1880bc2cddc54228494d7317de927a6c Mon Sep 17 00:00:00 2001 From: mindesbunister Date: Fri, 5 Dec 2025 09:53:46 +0100 Subject: [PATCH] critical: Optimize exit strategy based on data analysis (Dec 5, 2025) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PROBLEM DISCOVERED: - Average MFE: 17-24% (massive favorable moves happening) - But win rate only 15.8% (we capture NONE of it) - Blocked signals analysis: avg MFE 0.49% (correctly filtered) - Executed signals: targets being hit but reversing before monitoring loop detects ROOT CAUSE: - ATR multipliers too aggressive (2x/4x) - Targets hit during spike, price reverses before 2s monitoring loop - Position Manager software monitoring has inherent delay - Need TIGHTER targets to catch moves before reversal SOLUTION IMPLEMENTED: 1. ATR Multipliers REDUCED: - TP1: 2.0× → 1.5× (catch moves earlier) - TP2: 4.0× → 3.0× (still allows trends) - SL: 3.0× → 2.5× (tighter protection) 2. Safety Bounds OPTIMIZED: - TP1: 0.4-1.0% (was 0.5-1.5%) - TP2: 0.8-2.5% (was 1.0-3.0%) - SL: 0.7-1.8% (was 0.8-2.0%) 3. Position Sizing ADJUSTED: - TP1 close: 60% → 75% (bank more profit immediately) - Runner: 40% → 25% (smaller risk on extended moves) - Leverage: 1x → 5x (moderate increase, still safe during testing) 4. Trailing Stop TIGHTENED: - ATR multiplier: 2.5× → 1.5× - Min distance: 0.25% → 0.20% - Max distance: 2.5% → 1.5% EXPECTED IMPACT: - TP1 hit rate: 0% → 40-60% (catch moves before reversal) - Runner protection: Tighter trail prevents giving back gains - Lower leverage keeps risk manageable during testing - Once TP1 hit rate improves, can increase leverage back to 10x DATA SUPPORTING CHANGES: - Blocked signals (80-89 quality): 16.7% WR, 0.37% avg MFE - Executed signals (90+ quality): 15.8% WR, 20.15% avg MFE - Problem is NOT entry selection (quality filter working) - Problem IS exit timing (massive MFE not captured) Files modified: - .env: ATR multipliers, safety bounds, TP1 size, trailing config, leverage --- .env | 59 +++++++++++++++++++++++------------------ cluster/exploration.db | Bin 204800 -> 204800 bytes 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/.env b/.env index c66b38b..6513f86 100644 --- a/.env +++ b/.env @@ -69,10 +69,11 @@ PYTH_HERMES_URL=https://hermes.pyth.network # Example: 50 with 10x leverage = $500 notional position MAX_POSITION_SIZE_USD=210 -# Leverage multiplier (1-20, default: 10) -# Higher leverage = bigger gains AND bigger losses -# REDUCED TO 1x FOR SAFETY (Nov 27, 2025) - Until system verified working -LEVERAGE=1 +# REDUCED TO 5x FOR SAFETY (Dec 5, 2025) +# Reason: 0% TP hit rate indicates exits are broken +# Lower leverage = less risk while we fix exit management +# Will raise back to 10x once TP1 hit rate improves +LEVERAGE=5 # Risk parameters (LEGACY FALLBACK - used when ATR unavailable) # Stop Loss: Close 100% of position when price drops this much @@ -103,8 +104,10 @@ HARD_STOP_PERCENT=-2.5 TAKE_PROFIT_1_PERCENT=0.8 # Take Profit 1 Size: What % of position to close at TP1 -# 60 = close 60%, leave 40% for runner -TAKE_PROFIT_1_SIZE_PERCENT=60 +# OPTIMIZED (Dec 5, 2025): Close MORE at TP1 to lock profit +# Problem: Moves reverse quickly, we need to capture them +# 75% close at TP1 = bank profit immediately, 25% runner for big moves +TAKE_PROFIT_1_SIZE_PERCENT=75 # Take Profit 2: Trigger trailing stop at this profit level (FALLBACK) # Example: +1.8% on 10x = +18% account gain @@ -125,26 +128,30 @@ TAKE_PROFIT_2_SIZE_PERCENT=0 USE_ATR_BASED_TARGETS=true # ATR multipliers for TP1, TP2, and SL -# Example with SOL ATR = 0.45% of price: -# TP1 = 0.45% × 2.0 = 0.90% target -# TP2 = 0.45% × 4.0 = 1.80% target -# SL = 0.45% × 3.0 = 1.35% distance -ATR_MULTIPLIER_TP1=2.0 -ATR_MULTIPLIER_TP2=4.0 -ATR_MULTIPLIER_SL=3.0 +# OPTIMIZED (Dec 5, 2025): Based on data analysis showing: +# - Current targets being hit but not captured (0% hit rate) +# - Price immediately reversing before 2-second monitoring loop detects +# - Average MFE 17-24% but targets at ~0.8-1.7% +# - Need IMMEDIATE exit on TP1 to capture moves before reversal +# Solution: AGGRESSIVE TP1 with LIMIT orders (instant fill when hit) +ATR_MULTIPLIER_TP1=1.5 +ATR_MULTIPLIER_TP2=3.0 +ATR_MULTIPLIER_SL=2.5 -# Safety bounds (prevent extreme values) -# TP1 bounds -MIN_TP1_PERCENT=0.5 # Never below +0.5% -MAX_TP1_PERCENT=1.5 # Never above +1.5% +# Safety bounds (OPTIMIZED Dec 5, 2025) +# Based on blocked signal analysis: avg MFE 0.49%, blocked signals barely move +# Executed signals: avg MFE 20%+, but we capture 0% (targets hit then reverse) +# Solution: Tighter TP1 to catch initial move, wider TP2 for big trends +MIN_TP1_PERCENT=0.4 # Tighter minimum - catch small moves +MAX_TP1_PERCENT=1.0 # Lower maximum - don't wait for huge moves -# TP2 bounds -MIN_TP2_PERCENT=1 -MAX_TP2_PERCENT=3 +# TP2 bounds - for capturing extended trends +MIN_TP2_PERCENT=0.8 # Lower minimum to activate trailing sooner +MAX_TP2_PERCENT=2.5 # Slightly lower max -# SL bounds -MIN_SL_PERCENT=0.8 # Never tighter than -0.8% -MAX_SL_PERCENT=2.0 # Never wider than -2.0% +# SL bounds - wider to avoid noise +MIN_SL_PERCENT=0.7 # Slightly tighter +MAX_SL_PERCENT=1.8 # Slightly tighter (keep runner protected) # Emergency Stop: Hard stop if this level is breached # Example: -2.0% on 10x = -20% account loss (rare but protects from flash crashes) @@ -418,9 +425,9 @@ MAX_SCALE_MULTIPLIER=2 SCALE_SIZE_PERCENT=50 MIN_ADX_INCREASE=5 MAX_PRICE_POSITION_FOR_SCALE=70 -TRAILING_STOP_ATR_MULTIPLIER=2.5 -TRAILING_STOP_MIN_PERCENT=0.25 -TRAILING_STOP_MAX_PERCENT=2.5 +TRAILING_STOP_ATR_MULTIPLIER=1.5 # Tighter trailing to protect 25% runner +TRAILING_STOP_MIN_PERCENT=0.20 # Minimum trail distance +TRAILING_STOP_MAX_PERCENT=1.5 # Maximum trail distance USE_PERCENTAGE_SIZE=false BREAKEVEN_TRIGGER_PERCENT=0.4 diff --git a/cluster/exploration.db b/cluster/exploration.db index 284ab9a7ba0a254bc73086af1aa3a376a5195de3..d810f640f0cb67fcd7e748a915d6577f220096b0 100644 GIT binary patch delta 801 zcmYk4Ur19?9LMiDclYk@&Usszk;AXZb z?@lp_-z^ED_^Xbmk8DViq+Q0k@jJEY@sc4+#z1QQrCMp_aY!1In3gVy=eg}!`?$T; zUZl_I_w^=yv+c8O)ON_GYag^Btxm(%wDr0*fW}cPDw5`;F{@qusy_l09>VMCkPTj9z%vQ78U4E~; zBrio{Jw3GN{FUBl_t|I_C2WY6XMY7dSR~^@e%3c#=paL(fB9)Mk4*CXnnVQ?{q1Jn zImPqt7gR8jw}~A43G2&jF$g7RZcx(uPN0eb=3I28E-wTW9BkcatKw~29i%-*N%wQ` zPnr8(%oGT{1@kSEKu&_<<5v_)q=pJj9C-p1AKN<%O4tgTAjeJO{8V7@SFKYhi3GrD z+1Skc_nI}gDB+@znoS8N;r+-p3*^T{&RjoL);wv5yH(CmQZo#!30MPX=cb$vQg)9L z?<|m`KoXq9GGKYa+?)p1C>ZvcLnzKtQpNy81VBD!4q@8}C7ya9M?k4Ihmb!(N%408 z4RB8Faw$3t)wfkQ>sr2v4#KKy-i?D{DBow@%=2Rk?T3}NQi}FLrHht2QKrHx{W#yj v|Dt-7mT)P`p)}LhMp6&gb|SeVDT(jM7UuhLQWoW4EH@m>p*OJ{zFqzYs`VaA delta 819 zcmZoTz|(MmXM!|i+(a2?#<-0M%ja`40D%_&Z~m{F1s1&EXXbBY*!+7vn?XI34uc!R zG6wz{ek;BoeB1a+_>6cz@UG*{;niY%#q)x31!Eec3d1rc7oKH2Dg66*l$hEWUT{z3 zPTVt&cIgSnkKj9HcG3)3N{I3^ts1i2Xk zCO>%X#AFpXdENs#2@3<}7tAk;O7rqE^U}-ni?UOTj53YHdnU`hInC%gIq;C&WUseM zEZm0}BqlnFFgbXGh4#HxVzLSV86abBiD7_YrV-!LOx*`xCLj1Xb@RiA(X34RiIWdL zkrgqpGy|zFNX<(DS_e|1p8%CGMVE+&N|>Na#6cyD(IsL*5|j5nWamY;AO@=35M6mR zSoz%NsLG?jqW956BO!)ZSfCpc0hKUEmk5VSV0btTDuLnQP^bikheMze7#UAok8<@rMR+-TS#M<2RwuFhv z!4E9@vj6}9