Python으로 MavilimW 지표 구현하기

MavilimW는 트레이딩뷰 오픈 소스로 ‘KivancOzbilgic‘ 라는 유저가 공개하였습니다.


트레이딩뷰: https://kr.tradingview.com/script/IAssyObN-MavilimW/

💡 유저 설명 요약 및 번역
MavilimW는 다양한 피보나치 수를 기반으로 부드럽게 가중 이동 평균을 조합하여 계산됩니다. 장기적인 트레이딩에서 훌륭한 지지와 저항 역할을 하며, 추세 확인에 유용합니다.

💡 업데이트 사항
1️⃣MavilimW 지표는 이제 두 가지 색상을 가집니다.
– 파란색: 상승 추세 신호
빨간색: 하락 추세 신호
2️⃣첫 번째와 두 번째 매개변수를 조정하여 지표의 민감도를 변경할 수 있습니다.
3️⃣설정에서 “이전 버전 표시(Show previous version)” 옵션을 활성화하면 기존 버전을 추가할 수 있습니다.
4️⃣두 매개변수를 변경하면 지표가 자동으로 피보나치 수열을 계산합니다.

💡 참고 사항
1️⃣첫 번째 변수는 두 번째 변수보다 작거나 같아야 합니다.
– 예시: (0,1), (1,1), (1,2), (2,3), (5,5) 등
2️⃣변수를 증가시키면 매매 신호가 줄어들지만, 지지선 또는 저항선으로 활용하기 유리해집니다.
3️⃣변수를 줄이면 매매 신호가 더욱 민감해지며, 이에 따라 지표 색상이 자주 변경됩니다.

값을 구하고 트레이딩뷰 차트의 plot 색은 up / down / flat으로 구분하겠습니다.

import pandas as pd
import ccxt
import pinetopy as pp

# 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, fmal=3, smal=5):
    tmal = fmal + smal
    Fmal = smal + tmal
    Ftmal = tmal + Fmal
    Smal = Fmal + Ftmal
    
    m1 = pp.wma(df['close'], length=fmal)
    m2 = pp.wma(m1, length=smal)
    m3 = pp.wma(m2, length=tmal)
    m4 = pp.wma(m3, length=Fmal)
    m5 = pp.wma(m4, length=Ftmal)
    mavw = pp.wma(m5, length=Smal)
    
    df['mavw'] = mavw
    df['mavw_color'] = df['mavw'].diff().apply(lambda x: 'up' if x > 0 else 'down' if x < 0 else 'flat')
    
    return df

print(main(df))

트레이딩뷰 차트와 비교