Moving average
Membuat garis SMA dan EMA serta mengamati perubahan jendela perhitungannya.
Garis harga penutupan mengikuti pergerakan harga setiap candle. Jika kamu menghitung rata-rata beberapa harga penutupan berurutan, garisnya menjadi lebih halus. Dalam bab ini, kamu membuat dua moving average berdasarkan sepuluh candle.
Menghitung rata-rata
Rata-rata sederhana tiga nilai adalah jumlah ketiganya dibagi tiga. Jika nilainya 100, 103, dan 101, rata-ratanya:
(100 + 103 + 101) / 3 = 101.333...Ukuran jendela moving average tetap, tetapi jendelanya bergerak bersama candle. Pada jendela tiga candle, harga penutupan baru masuk saat candle berikutnya diproses dan harga terlama keluar.
Jika harga penutupan baru adalah 105, rata-rata berikutnya menjadi (103 + 101 + 105) / 3, yaitu 103. Harga penutupan pertama, 100, sudah tidak termasuk.
Moving average sederhana sepuluh candle memerlukan harga penutupan saat ini dan sembilan sebelumnya. Kita tidak menggunakan candle saat ini ditambah sepuluh candle sebelumnya: sepuluh adalah jumlah keseluruhan nilai yang diperhitungkan.
Fungsi dalam ta
Namespace ta menyediakan perhitungan siap pakai. ta.sma(close, 10) menghasilkan moving average sederhana dari sepuluh harga penutupan. SMA adalah singkatan dari “simple moving average”.
Dua argumen pemanggilan ini:
close: sumber nilai untuk menghitung rata-rata;10: ukuran jendela dalam candle.
Sembilan candle pertama belum menyediakan sepuluh harga penutupan. Di sana SMA bernilai na; nilai valid pertama muncul pada candle kesepuluh. Tahap awal ini juga disebut masa pemanasan.
Ukuran jendela bukan durasi dalam detik. Sepuluh candle harian dan sepuluh candle per jam mencakup periode yang berbeda.
SMA dan EMA berdampingan
EMA, atau exponential moving average, memberi bobot lebih besar pada nilai terbaru. ta.ema(close, 10) juga menggunakan parameter panjang sepuluh candle, tetapi rumusnya berbeda.
EMA dimulai dari rata-rata sederhana jendela lengkap pertama. Jadi, dengan panjang sepuluh, kedua garis muncul pada candle kesepuluh. Setelah itu, EMA menambahkan sebagian selisih antara harga baru dan EMA sebelumnya ke nilai sebelumnya. Besarnya bagian itu adalah 2 / (10 + 1).
Buat file moving_averages.py:
"""
@pyne edge
"""
from pynecore.lib import close, color, plot, script, ta
@script.indicator("Two Moving Averages", overlay=True)
def main():
simple_average = ta.sma(close, 10)
exponential_average = ta.ema(close, 10)
plot(simple_average, "SMA 10", color=color.blue, linewidth=2)
plot(exponential_average, "EMA 10", color=color.orange, linewidth=2)Jalankan pada data demo. SMA biru dan EMA oranye muncul bersama candle harga. Geser grafik dan amati bagian saat harga tiba-tiba berbalik arah. Kedua rata-rata belum tentu merespons dengan kecepatan yang sama.

Rata-rata adalah garis yang dihitung dari nilai masa lalu. Bentuk yang lebih halus saja tidak menunjukkan ke mana harga akan bergerak.
Mengapa menghitung pada setiap candle?
ta.sma dan ta.ema juga menggunakan status perhitungan di antara eksekusi yang berurutan. Dalam contoh ini, kedua pemanggilan berjalan pada setiap candle.
Nanti kita akan menulis kode yang hanya melakukan tindakan dalam keadaan tertentu: misalnya menggambar penanda jika harga penutupan di atas rata-rata. Ini dipelajari dalam bab Kondisi dan penanda.
Dalam keadaan itu pun, hitung rata-ratanya pada setiap candle terlebih dahulu, lalu tentukan penggunaannya. Jika ta.sma hanya dipanggil pada candle naik, perhitungannya melewatkan candle lain sehingga hasilnya bisa berbeda dari rata-rata seluruh rangkaian candle. Untuk sekarang, pastikan kedua perhitungan rata-rata berjalan pada setiap candle.
Kedua garis ini tidak memerlukan penanda Series pada variabel sendiri: kita menggambar nilai saat ini dan tidak menggunakan ekspresi simple_average[1]. Jika nanti ingin mengindeks riwayat variabel sendiri secara langsung, tambahkan anotasi Series[float].
Jendela lebih panjang dan lebih pendek
Panjang yang bertambah membuat lebih banyak harga sebelumnya memengaruhi rata-rata. Garis umumnya lebih halus dan mengikuti perubahan harga lebih lambat. Dengan panjang lebih pendek, pergerakan harga terbaru tampak lebih kuat.
Coba langkah ini pada data yang sama:
- Jalankan kedua rata-rata dengan panjang sepuluh dan amati pembalikan harga yang mudah dikenali.
- Ubah panjang pada kedua pemanggilan menjadi 30.
- Ubah juga judul garis menjadi
SMA 30danEMA 30. - Jalankan kembali dan cari waktu yang sama.
Judul ikut diubah karena "SMA 10" hanya label. Angka di dalamnya tidak mengubah perhitungan. Argumen kedua pemanggilanlah yang mengatur jendela.
Coba sendiri
Buat dua moving average sederhana: satu dari lima candle, satu lagi dari dua puluh candle. Beri yang pendek warna biru dan yang panjang warna oranye. Berikan judul yang sesuai untuk keduanya.
Solusi latihan
Ganti kedua perhitungan dan gambar dalam isi main() dengan:
fast_average = ta.sma(close, 5)
slow_average = ta.sma(close, 20)
plot(fast_average, "SMA 5", color=color.blue, linewidth=2)
plot(slow_average, "SMA 20", color=color.orange, linewidth=2)Untuk panjang lima, nilai empat candle pertama tidak tersedia; untuk panjang dua puluh, sembilan belas candle pertama. Setelah pemanasan, kedua garis menggunakan deret harga penutupan yang sama dengan ukuran jendela berbeda.
Memeriksa jendela
Kamu bisa memeriksa SMA tiga candle secara manual. Atur panjang menjadi tiga, pilih tiga harga penutupan berurutan, lalu hitung rata-ratanya. Pada candle ketiga, grafik harus menunjukkan nilai yang sama. Dua candle pertama belum memiliki jendela lengkap.