소스리뷰 버전 적용
This commit is contained in:
@@ -29,6 +29,24 @@ def _ma(values: list, window: int) -> Optional[float]:
|
||||
return None
|
||||
|
||||
|
||||
def _ema(values: list, window: int) -> Optional[float]:
|
||||
"""EMA(Exponential Moving Average) 계산.
|
||||
|
||||
SMA 시드 → 이후 지수 가중 평균 순차 적용.
|
||||
values 길이가 window 미만이면 None 반환.
|
||||
"""
|
||||
try:
|
||||
if len(values) < window:
|
||||
return None
|
||||
k = 2.0 / (window + 1)
|
||||
ema = sum(values[:window]) / window
|
||||
for v in values[window:]:
|
||||
ema = v * k + ema * (1 - k)
|
||||
return ema
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
def _passes_uptrend(closes: list, ma_short: int = TREND_MA_SHORT, ma_long: int = TREND_MA_LONG, tol: float = TREND_TOLERANCE_PCT) -> Optional[bool]:
|
||||
if not closes or len(closes) < max(ma_short, ma_long):
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user