Teknikal Analisis Dengan Python
Disclaimer: not financial advice
Sebelumnya kita udah coba hitung EMA secara manual. Tapi bakal agak repot kalau kita bikin indikator lain satu per satu.
Tujuan kita kali ini adalah nyari beberapa indikator misalnya EMA, Parabolic SAR dan RSI yang bisa berguna untuk ngasi sinya kapan sebaiknya trading. Kita bakal gabungin semua indikator ini dalam satu candlestick chart seperti di bawah.
Di Python ada banyak library yang sangat berguna, termasuk untuk teknikal analisis. Salah satu library ini adalah TA-lib.
Instruksi untuk cara install nya bisa diikuti di dokumentasi ini.
Artikel ini adalah lanjutan dari artikel sebelumnya tentang teknikal analisis dengan Python dan Streamlit.
Membedah kodingan
Tanpa basa basi kita langsung ke bagian penting kodingan di project ini.
Import talib
import streamlit as st
import yfinance as yf
import plotly.graph_objs as go
from plotly.subplots import make_subplots
import pandas as pd
import numpy as np
import talib
import util
Setelah instalasi TA-lib selesai, kita bisa pakai library ini hanya dengan import talib
seperti di atas.
Library lainnya sudah kita bahas di artikel-artikel sebelumnya.
ticker_data['fast_ema'] = talib.EMA(ticker_data['Close'], int(ema1))
ticker_data['slow_ema'] = talib.EMA(ticker_data['Close'], int(ema2))
ticker_data['rsi'] = talib.RSI(ticker_data['Close'], timeperiod=14)
ticker_data['sar'] = talib.SAR(ticker_data['High'], ticker_data['Low'], acceleration=0.02, maximum=0.2)
Kode di atas adalah contoh untuk dapetin EMA, RSI dan Parabolic SAR.
Sangat mudah dan elegan 😎
Tapi ada bagusnya kita tau cara ngitung indikator secara manual, kalau kita ingin perhitungannya lebih pasti dan gak bergantung library buatan orang lain. Dan ada bagusnya juga hitung manual jadi kita lebih ngerti mekanisme di balik indikator itu.
Untuk sekarang kita bakal tetep pakai TA-lib supaya lebih singkat.
Tampilkan di candlestick
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def add_row_trace(candle_fig, x_value, y_value, trace_name, color, row_num, mode = 'lines'):
candle_fig.add_trace(
go.Scatter(
x = x_value,
y = y_value,
name = trace_name,
line = dict(color=color),
mode = mode
),
row = row_num,
col = 1
)
return candle_fig
fig = make_subplots(rows=2, cols=1, shared_xaxes=True)
fig = util.get_candle_chart(fig, ticker_data)
fig = util.add_row_trace(fig, ticker_data.index, ticker_data['fast_ema'], 'fast EMA', 'yellow', 1)
fig = util.add_row_trace(fig, ticker_data.index, ticker_data['slow_ema'], 'slow EMA', 'blue', 1)
fig = util.add_row_trace(fig, ticker_data.index, ticker_data['sar'], 'Parabolic SAR', 'black', 1, mode='markers')
fig = util.add_row_trace(fig, ticker_data.index, ticker_data['rsi'], 'RSI', 'red', 2)
Di candlestick chart akan ada 2 row atau baris: baris atas untuk candlestick, EMA dan Parabolic SAR. RSI dipisah ke baris kedua karna akan mengganggu tampilan dari candlesstick chart jika dijadikan 1 row.
Karena kita ingin 2 row, untuk figure nya kita pakai metode make_subplots
di line 15.
Terus kita tinggal bikin custom function add_row_trace()
di line 1 untuk menambahkan berbagai indikator yang ada. Jadi 1 function ini bisa untuk lebih dari 1 indikator untuk mengurangi duplikasi kode.
Setelah di run dengan streamlit run
, hasil akhirnya akan seperti ini:
Selamat bereksperimen!