@@ -19,20 +19,20 @@ def transform_oi_trend(self, prev_oi=0, price_change_pct=0):
1919 oi_chg = ((curr_oi - prev_oi ) / prev_oi * 100 ) if prev_oi > 0 else 0
2020
2121 # 시그널 로직 고도화 (전문 트레이딩 관점)
22- # 1. 상승 + OI 상승: 신규 롱 진입 (추세 강화 - 매우 긍정 )
22+ # 1. 상승 + OI 상승: 신규 롱 진입 (+1.0 )
2323 if price_change_pct > 0.5 and oi_chg > 1.0 :
24- signal = "ACCUMULATION_LONG"
25- # 2. 하락 + OI 상승: 신규 숏 진입 (추세 하락 강화 - 매우 부정 )
24+ signal = 1.0
25+ # 2. 하락 + OI 상승: 신규 숏 진입 (-1.0 )
2626 elif price_change_pct < - 0.5 and oi_chg > 1.0 :
27- signal = "AGGRESSIVE_SHORTING"
28- # 3. 상승 + OI 하락: 숏 포지션의 강제 청산/손절로 인한 상승 (추세 반전 가능성 )
27+ signal = - 1.0
28+ # 3. 상승 + OI 하락: 숏 커버링 (+0.5 )
2929 elif price_change_pct > 0.5 and oi_chg < - 1.0 :
30- signal = "SHORT_COVERING_RALLY"
31- # 4. 하락 + OI 하락: 롱 포지션의 항복/ 손절 (바닥 근접 가능성 )
30+ signal = 0.5
31+ # 4. 하락 + OI 하락: 롱 손절 (-0.5 )
3232 elif price_change_pct < - 0.5 and oi_chg < - 1.0 :
33- signal = "LONG_LIQUIDATION_DUMP"
33+ signal = - 0.5
3434 else :
35- signal = "NEUTRAL"
35+ signal = 0.0
3636
3737 return ProcessedOITrend (
3838 symbol = self .symbol ,
@@ -57,18 +57,20 @@ def transform_fr_heatmap(self):
5757 deviation = rate - 0.0001
5858
5959 # 8시간마다 결제되는 펀딩비 특성상 0.05% 이상은 매우 극단적인 상태
60+ # heat_level: -1 (Short 과열) ~ 1 (Long 과열)
61+ # squeeze_risk: 0 (안전) ~ 1 (위험)
6062 if rate >= 0.05 : # 0.05%
61- heat , risk = "LONG_OVERHEATED" , "CRITICAL"
63+ heat , risk = 1.0 , 1.0
6264 elif rate >= 0.02 :
63- heat , risk = "LONG_CROWDED" , "HIGH"
65+ heat , risk = 0.5 , 0.7
6466 elif rate <= - 0.05 :
65- heat , risk = "SHORT_OVERHEATED" , "CRITICAL"
67+ heat , risk = - 1.0 , 1.0
6668 elif rate <= - 0.02 :
67- heat , risk = "SHORT_CROWDED" , "HIGH"
69+ heat , risk = - 0.5 , 0.7
6870 elif abs (rate ) < 0.01 :
69- heat , risk = "STABLE" , "LOW"
71+ heat , risk = 0.0 , 0.1
7072 else :
71- heat , risk = "NORMAL" , "MEDIUM"
73+ heat , risk = ( 0.2 if rate > 0 else - 0.2 ), 0.4
7274
7375 return ProcessedFRHeatmap (
7476 symbol = self .symbol ,
@@ -92,22 +94,19 @@ def transform_ls_divergence(self, price_change_pct=0):
9294 short_r = float (ls_data .short_account )
9395 ls_ratio = float (ls_data .long_short_ratio )
9496
95- is_div , div_type , signal = False , None , "NEUTRAL"
97+ is_div , div_type , signal = False , None , 0.0
9698
97- # 1. 강세 다이버전스 (Bullish Reversal)
98- # 가격은 급락하는데, 개미들은 겁먹고 숏을 늘림 (LS Ratio 하락) -> 세력의 매집 시점
99+ # 1. 강세 다이버전스 (Bullish Reversal) (+1.0)
99100 if price_change_pct < - 2.0 and ls_ratio < 0.8 :
100- is_div , div_type , signal = True , "BULLISH_CONTRARIAN" , "STRONG_BUY_SIGNAL"
101+ is_div , div_type , signal = True , "BULLISH_CONTRARIAN" , 1.0
101102
102- # 2. 약세 다이버전스 (Bearish Reversal)
103- # 가격은 오르는데, 개미들이 환희에 차서 롱을 늘림 (LS Ratio 급상승) -> 세력의 매도 시점
103+ # 2. 약세 다이버전스 (Bearish Reversal) (-1.0)
104104 elif price_change_pct > 2.0 and ls_ratio > 1.5 :
105- is_div , div_type , signal = True , "BEARISH_CONTRARIAN" , "STRONG_SELL_SIGNAL"
105+ is_div , div_type , signal = True , "BEARISH_CONTRARIAN" , - 1.0
106106
107- # 3. 롱 트랩 (Long Trap)
108- # 가격은 횡보하거나 소폭 하락하는데 롱 비율만 계속 높아짐 -> 개미들만 타 있는 배 (무거움)
107+ # 3. 롱 트랩 (Long Trap) (-0.5)
109108 elif abs (price_change_pct ) < 0.5 and ls_ratio > 1.3 :
110- is_div , div_type , signal = True , "LONG_TRAP" , "WARNING_EXIT_LONG"
109+ is_div , div_type , signal = True , "LONG_TRAP" , - 0.5
111110
112111 return ProcessedLSDivergence (
113112 symbol = self .symbol ,
0 commit comments