×

Perhitungan Analisis Teknikal MACD

Perhitungan Analisis Teknikal MACD

1,344 Views

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.

  1. 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.
  2. Garis sinyal dihitung dengan mengambil perbedaan antara dua EMA, dan dari angka itu membuat rata-rata pergerakan 9 hari atau menghitung EMA Garis MACD
  3. 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.

See also  Dekomposisi Runtun Waktu - Time Series Transaksi Saham

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

    \begin{align*} garisMACD &= EMA(PriceClose,12) - EMA(PriceClose,26) \\ garisSinyal &= EMA(garisMACD,9) \\ histogram &= garisMACD - garisSinyal \\ \end{align*}

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

See also  Mengolah Data Transaksi Saham Harian untuk Mencari Cuan

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
See also  Forecasting Pergerakan Saham dan Foreign Flow

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

 

 

 

You May Have Missed