Jika harga berada di atas rata-rata selama sepuluh candle, close > average bisa benar sepuluh kali. Jika hanya ingin menandai peristiwa ketika harga bergerak dari bawah ke atas rata-rata, kamu juga memerlukan hubungan pada candle sebelumnya.

Keadaan dan saat dimulainya

Misalkan rata-rata saat ini dan pada candle sebelumnya sama-sama 100. Harga penutupan sebelumnya 99 dan sekarang 101. Pada candle saat ini, harga berada di atas rata-rata dan sudah melintasinya dibandingkan candle sebelumnya.

Jika harga penutupan berikutnya 102, harga tetap berada di atas rata-rata. Namun, tidak ada persilangan naik baru karena candle sebelumnya juga sudah berada di atasnya.

ta.crossover(first, second) benar jika nilai pertama saat ini lebih besar daripada nilai kedua, sementara pada eksekusi sebelumnya nilainya lebih kecil atau sama. ta.crossunder adalah pasangan untuk arah ke bawah.

Nilai yang sama saat ini belum dianggap persilangan. Jika nilai pertama hanya mencapai nilai kedua, syarat > belum terpenuhi. Sebaliknya, nilai yang sama pada candle sebelumnya masih memungkinkan gerakan ke atas saat ini dianggap persilangan.

Persilangan dua moving average

Kita melanjutkan dengan dua rata-rata dari bab Moving average. Rata-rata lebih pendek dan cepat berwarna biru, sedangkan yang lebih panjang dan lambat oranye. Segitiga hijau menandai rata-rata cepat melintas ke atas; segitiga merah menandai persilangan ke bawah.

Buat file cross_signals.py:

"""
@pyne edge
"""
from pynecore.lib import close, color, input, location, plot, plotshape, script, shape, ta


@script.indicator("Average Crossings", overlay=True)
def main(
    fast_length: int = input.int(5, title="Fast length", minval=1, maxval=200),
    slow_length: int = input.int(20, title="Slow length", minval=1, maxval=200),
):
    fast_average = ta.sma(close, fast_length)
    slow_average = ta.sma(close, slow_length)
    crosses_up = ta.crossover(fast_average, slow_average)
    crosses_down = ta.crossunder(fast_average, slow_average)
    plot(fast_average, "Fast average", color=color.blue, linewidth=2)
    plot(slow_average, "Slow average", color=color.orange, linewidth=2)
    plotshape(crosses_up, "Cross up", style=shape.triangleup,
              location=location.belowbar, color=color.green)
    plotshape(crosses_down, "Cross down", style=shape.triangledown,
              location=location.abovebar, color=color.red)

Jalankan pada data demo dengan nilai bawaan 5 dan 20. Penanda hanya muncul pada candle tempat persilangan terjadi. Pada rentang panjang saat garis biru selalu berada di atas garis oranye, tidak ada penanda hijau baru pada setiap candle.

Grafik cross_signals.py memperlihatkan moving average cepat dan lambat serta penanda persilangan hijau dan merah.
Persilangan kedua moving average ditampilkan sebagai peristiwa tersendiri.

Mengapa persilangan dihitung pada baris tersendiri?

ta.crossover dan ta.crossunder berjalan pada setiap candle. Dengan begitu, eksekusi sebelumnya dari setiap pemanggilan berkaitan dengan candle sebelumnya yang diproses.

Jika pemeriksaan persilangan hanya dipanggil saat kondisi lain terpenuhi, status pemanggilan sebelumnya belum tentu berasal dari candle sebelumnya. Garis dan penanda yang digambar bisa memeriksa deret waktu yang berbeda.

Karena itu, kita mengikuti aturan bab sebelumnya: hitung hasil yang memerlukan status pada setiap candle, lalu buat keputusan dari nilai yang sudah tersedia.

Pemanasan juga terlihat di sini

SMA dua puluh baru valid mulai candle kedua puluh. Pada nilai valid pertama, SMA dua puluh sebelumnya masih belum tersedia, sehingga persilangan belum bisa ditentukan dari dua candle lengkap.

Kondisi ini memerlukan nilai kedua rata-rata pada candle saat ini dan sebelumnya.

Jangan mengganti na dengan nol hanya untuk mendapatkan sinyal. Rata-rata nol bisa menciptakan persilangan buatan pada titik ketika rata-rata sebenarnya belum bisa dihitung.

Waktu data

Buku ini menjalankan program pada candle historis yang sudah selesai. Sinyal yang dihitung dari harga penutupan candle harian menggunakan data yang diketahui saat candle ditutup.

Harga penutupan candle yang masih terbentuk dapat berubah. Persilangan yang terlihat di tengah candle bisa hilang sebelum candle selesai. Bedakan keadaan ini dari pemeriksaan candle yang sudah ditutup.

Penanda pada grafik historis tidak otomatis berarti transaksi dieksekusi pada candle yang sama. Indikator menggambar sinyal; order dan waktu eksekusinya akan ditentukan dalam strategi.

Coba sendiri

Buat salinan bernama price_crossings.py. Ganti persilangan dua rata-rata dengan penanda saat harga penutupan melintas ke atas atau ke bawah rata-rata lambat. Pertahankan rata-rata lambat pada grafik.

Solusi latihan
crosses_up = ta.crossover(close, slow_average)
crosses_down = ta.crossunder(close, slow_average)

Penanda menggunakan kedua variabel logika ini, sehingga baris plotshape tidak perlu diubah. Namun, sebaiknya ubah judul menjadi Price cross up dan Price cross down.

Jika rata-rata cepat tidak lagi digunakan, hapus perhitungan, gambar, dan input terkait. Dengan begitu, antarmuka hanya menawarkan pengaturan yang digunakan.

Menelusuri satu persilangan

Pilih sebuah candle dengan penanda hijau. Lihat nilai kedua garis pada candle itu dan satu candle sebelumnya. Jelaskan kedua perbandingan yang membuat sinyal benar. Pemeriksaan ini juga berguna saat memeriksa strategi.