Python으로 ALMA 지표 구현하기

Arnaud Legoux 이동평균(ALMA)은 가우스 함수 가중치를 적용해 최근 가격에 민감하게 반응하도록 만든 이동평균 지표입니다. 기존 이동평균보다 부드럽고 반응성이 뛰어나며, 추세 파악과 신호 신뢰성을 높이는 데 사용됩니다. 핵심 변수는 기간, 오프셋, 시그마 세 가지이며, 설정에 따라 곡선의 민감도가 달라집니다. 가격 흐름에 맞춰 유연하게 조정할 수 있어 추세 분석과 필터링에 자주 활용됩니다.

import pandas as pd
import ccxt
import pinetopy as pp
import numpy as np

# Binance Futures, BTCUSDT, 1h
bnb = ccxt.binance({'options': { 'defaultType': 'future' }}) 
ohlcv = bnb.fetch_ohlcv(symbol="BTC/USDT", timeframe="1h", limit=500)
df = pd.DataFrame(ohlcv, columns=['time', 'open', 'high', 'low', 'close', 'volume'])
df['time'] = pp.kst(df['time'])

# TradingView Default Settings
def main(df, length=9, offset=0.85, sigma=6):
    src = df['close'].values
    alma = np.full(len(src), np.nan)

    for i in range(length - 1, len(src)):
        m = offset * (length - 1)
        s = length / sigma
        norm = 0.0
        weighted_sum = 0.0

        for j in range(length):
            weight = np.exp(-1 * ((j - m) ** 2) / (2 * (s ** 2)))
            norm += weight
            weighted_sum += src[i - length + j + 1] * weight

        alma[i] = weighted_sum / norm

    df['alma'] = alma
    
    return df

print(main(df))

트레이딩뷰 차트와 비교