Perhitungan Analisis Teknikal MACD
MACD – Moving Average Convergence/Divergence merupakan indikator untuk melihat pergerakan trend sebuah saham. Dasar dari MACD dimulai dari EMA yaitu exponential moving average.
Gerald Appel mengembangkan indikator ini pada tahun 1960-an, dan meskipun namanya terdengar sangat rumit, sebenarnya cukup mudah digunakan. Mengingat MACD banyak digunakan sebagai indikator dasar dari trading.
Selain nanti bisa membaca grafik tapi akan lebih menarik jika kita mengetahui rumus matematika yang mendasarinya walaupun sudah banyak sekali broker yang telah menyediakan indikator MACD. Kita akan menggunakan library TA-lib https://mrjbq7.github.io/ta-lib/func_groups/momentum_indicators.html untuk melakukan perhitungan.
Memahami Histogram MACD
Bagan MACD terdiri dari tiga elemen: garis MACD, garis sinyal, dan histogram, yang dipetakan di sekitar sumbu horizontal yang dikenal sebagai garis dasar. Grafik MACD biasanya digambarkan tepat di bawah grafik harga sekuritas, sehingga pergerakan harga dapat dibandingkan dengan perubahan grafik MACD.
- Garis MACD dihitung dengan mengurangkan rata-rata pergerakan eksponensial jangka panjang (EMA) dari rata-rata pergerakan eksponensial jangka pendek. Umumnya, ini adalah EMA 12 dan 26 hari, dihitung berdasarkan harga penutupan setiap hari.
- Garis sinyal dihitung dengan mengambil perbedaan antara dua EMA, dan dari angka itu membuat rata-rata pergerakan 9 hari atau menghitung EMA Garis MACD
- Histogram ditentukan dengan mengurangkan garis sinyal dari garis MACD. Ini lebih mudah untuk ditafsirkan daripada hanya melihat dua garis saja, karena terkadang sulit untuk mengetahui apakah satu kurva lebih curam daripada yang lain. Histogram positif saat MACD lebih tinggi dari EMA 9 hari, dan negatif saat lebih rendah.
Seperti yang sudah dijelaskan garis MACD adalah selisih EMA 12 dan EMA 26 sedangkan garis sinyal merupakan EMA 9 dari garis MACD. Untuk menghitung secara manual MACD, kita bisa mulai menghitung EMA 12 dan 26 menggunakan data transaksi saham harian bisa kalian peroleh di https://github.com/mulkan/data-stock/tree/main/dataset.
Jika kalian masih bingung cara install package TA-Lib baca Analisis Teknikal menggunakan TA-Lib Technical Analysis Library atau bagi pengguna stockbit bisa kok menggunakan faeatur indikator MACD daripada puyeng2 mengetik kode dibawah ini. Tapi bagi yang penasaran behind the scene Perhitungan Analisis Teknikal MACD nya atau nanti malah membuat screener saham tersendiri atau mungkin membuat robot trading sendiri atau mungkin bagi para mahasiswa yang ingin mencari kombinasi tools sebagai tema riset bisa lanjut perhitungan dibawah ini
Perhitungan Analisis Teknikal MACD secara default menggunakan periode 12, 26, dan 9 hari seperti yang sudah dijelaskan sebelumnya dasar Perhitungan Analisis Teknikal MACD based on EMA (exponential moving average)
Perhitungan Analisis Teknikal MACD sebaiknya tidak menggunakan excel karena akan ribet mengolah datanya. Kalian bisa menggunakan R/RStudio dengan package Quandmod atau Python dengan TA-Lib. Saran saya adalah menggunakan package plot grafik berbasis web seperti Plotly karena rentang time series yang cukup panjang. Kebetulan saya kadang lebih suka menggunakan Python untuk saat ini karena lebih cepat saja buat ngolah akan tetapi agak ribet untuk aggregasi datanya.
Sebelum memulai Perhitungan Analisis Teknikal MACD, tentu kita membutuhkan dataset transaksi saham harian sehingga wajib download terlebih dahulu sesuai alamat diatas. Kita akan menggunakan jupyter-notebook. Berikut kode yang digunakan untuk Merge File CSV di Pandas
import pandas as pd import glob import os import talib import numpy as np import plotly.graph_objects as go from plotly.subplots import make_subplots import warnings warnings.filterwarnings('ignore') joined_files = os.path.join("G:\\dataset","*.csv") joined_list = glob.glob(joined_files) df = pd.concat(map(pd.read_csv, joined_list), ignore_index=True) df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d') df.sort_values(by="Date",ascending=True,inplace = True) #untuk memastikan urut berdasarkan date nya
Perhatikan kode berikut, kita bisa menghitung MACD secara manual yaitu dengan terlebih dahulu menghitung EMA 12 dan 26 dilanjut perhitungan selisih nya
emiten = "'ACES'" stock_emiten1 = df.query("StockCode=="+emiten) #pilih sesuai emiten stock_emiten1["EMA12"] = talib.EMA(stock_emiten1["Close"],12) stock_emiten1["EMA26"] = talib.EMA(stock_emiten1["Close"],26) stock_emiten1["MACD"] = stock_emiten1["EMA12"]-stock_emiten1["EMA26"] stock_emiten1["SinyalMACD"] = talib.EMA(stock_emiten1["MACD"],9) stock_emiten1["HistogramMACD"] = stock_emiten1["MACD"]-stock_emiten1["SinyalMACD"] stock_emiten1 = stock_emiten1.query("Date>='2022-01-01'") #ambil tanggal 01 januari 2022 keatas
Kita plotkan saja Perhitungan Analisis Teknikal MACD
fig = make_subplots(rows = 2, cols = 1, shared_xaxes = True, subplot_titles = (emiten,'Sinyal',"RSI","MACD"), vertical_spacing = 0.1) fig.add_trace(go.Line(x=stock_emiten1["Date"], y=stock_emiten1["Close"], mode='lines', line=dict(color='black', width=1), name='Close'), row = 1, col = 1) fig.add_trace(go.Line(x=stock_emiten1["Date"], y=stock_emiten1["MACD"], mode='lines', line=dict(color='green', width=1), name='MACD'),row = 2, col = 1) fig.add_trace(go.Line(x=stock_emiten1["Date"], y=stock_emiten1["SinyalMACD"], mode='lines', line=dict(color='red', width=1), name='SinyalMACD'),row = 2, col = 1) fig.add_trace(go.Bar(x = stock_emiten1['Date'], y = stock_emiten1['HistogramMACD'], name="HistogramMACD", showlegend=True), row = 2, col = 1) fig.update_layout(height=800, width=1000, title_text="Saham Emiten "+emiten) fig.show() warnings.filterwarnings('ignore')
Dihasilkan plot berikut
Perhatikan ketika
- trend naik dimulai dari garis hijau dari bawah memotong garis merah
- trend turun ketika garis merah dari atas memotong garis hijau menuju ke bawah
- cara mudahnya lihat saja histogram yang nilai positif (diatas 0)
MACD dengan TA-Lib
Perhitungan Analisis Teknikal MACD cara gampang nggak pakai ribet ya gunakan saja function di TA-Lib
stock_emiten2 = df.query("StockCode=="+emiten) #pilih sesuai emiten (stock_emiten2["macd"], stock_emiten2["macdsignal"], stock_emiten2["macdhist"]) = talib.MACD(stock_emiten2["Close"], fastperiod=12, slowperiod=26, signalperiod=9) stock_emiten2 = stock_emiten2.query("Date>='2022-01-01'") #ambil tanggal 01 januari 2022 keatas
Kita plotkan saja
fig = make_subplots(rows = 2, cols = 1, shared_xaxes = True, subplot_titles = (emiten,"MACD"), vertical_spacing = 0.1) fig.add_trace(go.Line(x=stock_emiten2["Date"], y=stock_emiten2["Close"], mode='lines', line=dict(color='black', width=1), name='Close'), row = 1, col = 1) fig.add_trace(go.Line(x=stock_emiten2["Date"], y=stock_emiten2["macd"], mode='lines', line=dict(color='green', width=1), name='macd'),row = 2, col = 1) fig.add_trace(go.Line(x=stock_emiten2["Date"], y=stock_emiten2["macdsignal"], mode='lines', line=dict(color='red', width=1), name='macdsignal'),row = 2, col = 1) fig.add_trace(go.Bar(x = stock_emiten2['Date'], y = stock_emiten2['macdhist'], name="macdhist", showlegend=True), row = 2, col = 1) fig.update_layout(height=800, width=1000, title_text="Saham Emiten "+emiten) fig.show() warnings.filterwarnings('ignore')
Yuk kita perjelas lagi grafik MACD nya, titik perpotongan biasa disebut dengan golden cross yaitu ketika MACD memotong Sinyal MACD dari bawah menuju keatas.
Bila kita perhatikan lagi, akan ada kebingungan yaitu valley terendah yang mana? Apakah jual di titik A atau titik B. Ternyata ketika jual di Titik A malahan harga lebih longsor lagi yaitu titik B
- Titik A tanggal 22 April 2022 diharga 1065
- Titik B tanggal 9 juni 2022 diharga 945
itulah susahnya mendeteksi grafik MACD, sehingga kita butuh yang namanya indikator RSI. Kita perbaiki lagi menjadi
stock_emiten2 = df.query("StockCode=="+emiten) #pilih sesuai emiten (stock_emiten2["macd"], stock_emiten2["macdsignal"], stock_emiten2["macdhist"]) = talib.MACD(stock_emiten2["Close"], fastperiod=12, slowperiod=26, signalperiod=9) stock_emiten2["RSI"] = talib.RSI(stock_emiten2["Close"],9) #tambahkan perhitungan RSI stock_emiten2 = stock_emiten2.query("Date>='2022-01-01'") #ambil tanggal 01 januari 2022 keatas
Kita akan lihat MACD dan RSI pada titik A dan B
stock_emiten2.filter(["Date","Close","RSI"]).query("Date=='2022-04-22' | Date=='2022-06-09'")
Ternyata dihasilkan informasi berikut
Date | Close | RSI | |
---|---|---|---|
406694 | 2022-04-22 | 1065.0 | 43.884673 |
425625 | 2022-06-09 | 945.0 | 32.239454 |
Titik A pada 22 April 2022 dengan RSI(9) nilainya 43 yang artinya belum jenuh jual
Sedangkan titik B pad atanggal 9 juni 2022 nilai 32 yang mendekati titik jenuh jual
Puncak jenuh jual yaitu pada minggu I bulan juli 2022
Yuk kita cari tahu lebih detail dari 01 sd 10 juli 2022 untuk mencari tahu RSI(9) yang paling rendah
stock_emiten2.filter(["Date","Close","RSI"]).query("Date>='2022-07-01' & Date<='2022-07-10'")
yaitu pada tanggal 04 juli 2022 dengan nilai RSI 18 dan harga Rp. 725/lembar
Date | Close | RSI | |
---|---|---|---|
438265 | 2022-07-01 | 775.0 | 27.566507 |
439055 | 2022-07-04 | 725.0 | 18.918265 |
439845 | 2022-07-05 | 750.0 | 31.080437 |
440635 | 2022-07-06 | 755.0 | 33.330516 |
441425 | 2022-07-07 | 765.0 | 37.892774 |
442216 | 2022-07-08 | 795.0 | 49.545476 |
Hemm.. kita coba tarik kedepan, berapa harga tertinggi setelah 04 juli 2022
stock_emiten2.filter(["Date","Close","RSI"]).query("Date>'2022-07-04'").sort_values(by="Close", ascending=False).head(5)
Ternyata harga maksimal yaitu Rp. 795/lembar dicapai pada 08 Juli 2022 atau hanya 9.6% capital gain dari harga Rp. 725/lembar
Date | Close | RSI | |
---|---|---|---|
442216 | 2022-07-08 | 795.0 | 49.545476 |
443010 | 2022-07-11 | 775.0 | 43.433636 |
443804 | 2022-07-12 | 770.0 | 41.977256 |
441425 | 2022-07-07 | 765.0 | 37.892774 |
467874 | 2022-08-24 | 765.0 | 67.358645 |
Perhitungan Analisis Teknikal MACD melalui penjabaran diatas sebagai dasar EMA serta menggunakan indikator RSI akan cukup memandu trader dalam melakukan aksi jual/beli. Perlu diketahui yang kita harus memilih periode yang terbaik untuk suatu saham