Runtime menelusuri rangkaian candle. Namun, kamu mungkin juga memerlukan pengulangan dalam satu candle, misalnya untuk menjumlahkan lima harga penutupan terakhir. Untuk itu, gunakan perulangan.

for dan range

for offset in range(5):
    total += close[offset]

Dengan range(5), perulangan memberi variabel offset nilai 0, 1, 2, 3, dan 4 secara berurutan. Angka 5 tidak termasuk. Baris yang menjorok dijalankan sekali untuk setiap nilai tersebut.

Jadi, close[offset] mula-mula berarti harga penutupan saat ini, kemudian satu, dua, tiga, dan empat candle sebelumnya. Kita menjumlahkan tepat lima nilai.

Variabel total harus diatur ke nol sebelum perulangan. Ini adalah hasil antara perhitungan satu candle, bukan penghitung yang disimpan antarcandle.

range(1, 5) menghasilkan urutan berbeda: 1, 2, 3, 4. Nilai awal termasuk, sedangkan batas akhir tidak. Jika nilai awal tidak diberikan, urutan dimulai dari nol.

Moving average yang ditulis sendiri

Buat file manual_average.py:

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


@script.indicator("Manual Average Check", overlay=False)
def main(
    length: int = input.int(5, title="Length", minval=1, maxval=100),
):
    total = 0.0
    for offset in range(length):
        total += close[offset]
    manual_average = total / length
    builtin_average = ta.sma(close, length)
    difference = manual_average - builtin_average
    plot(difference, "Difference", color=color.blue)

Jalankan pada data demo. Garis menunjukkan selisih rata-rata buatanmu dan SMA siap pakai. Setelah pemanasan, garis harus berada pada nol atau sangat dekat dengan nol karena cara angka direpresentasikan.

Di samping manual_average.py, panel terpisah PyneIDE menampilkan garis selisih kedua rata-rata.
Selisih hasil perulangan sendiri dan SMA siap pakai tetap di sekitar nol setelah pemanasan.

Kita tidak menggambar dua garis bertumpuk karena selisih kecil akan sulit terlihat. Menggambar selisih menunjukkan secara langsung apakah kedua perhitungan sama.

Apa yang dilakukan satu eksekusi?

Untuk panjang lima, urutan tindakannya:

  1. Nilai total menjadi nol.
  2. Perulangan menambahkan harga penutupan saat ini dan empat sebelumnya.
  3. Jumlah dibagi lima.
  4. SMA siap pakai juga dihitung, lalu kedua hasil dikurangkan.
  5. Satu titik digambar untuk garis selisih.

Setelah itu, runtime beralih ke candle berikutnya. total dimulai lagi dari nol dan perulangan menjumlahkan lima nilai yang berkaitan dengan candle baru.

Jika variabel total diubah menjadi Persistent, candle berikutnya melanjutkan dari jumlah sebelumnya. Kamu akan menambahkan lima nilai baru ke hasil lama pada setiap candle, sehingga perhitungan tidak lagi menghasilkan rata-rata jendela saat ini.

Riwayat yang belum tersedia

Pada empat candle pertama, setidaknya satu harga penutupan belum tersedia untuk jendela lima nilai. na dalam penjumlahan membuat rata-rata buatanmu juga tidak tersedia. SMA siap pakai dengan panjang lima juga baru valid pada candle kelima.

Semua harga penutupan dalam data demo buku ini valid. Pada sumber yang juga memiliki nilai hilang di tengah data, penanganan nilai hilang ta.sma bisa berbeda dari penjumlahan sederhana berdasarkan offset candle. Karena itu, contoh diperiksa pada data yang ditentukan di sini.

Berapa banyak pengulangan yang diminta?

Dengan jendela seratus candle, kita melakukan seratus penjumlahan per candle. Untuk dua ribu candle, ini menjadi dua ratus ribu langkah perulangan.

Tujuan ta.sma siap pakai adalah menjalankan tugas umum ini melalui perhitungan runtime yang dirancang untuknya. Perulangan sendiri di sini membantu memahami cara kerja dan membandingkan hasil. Gunakan fungsi siap pakai jika sudah memenuhi kebutuhanmu.

Batas akhir perulangan harus diketahui dan dibatasi. Nilai maksimum input juga menentukan seberapa besar pekerjaan yang boleh diminta pengguna dalam satu candle.

break dan continue

break menghentikan perulangan. continue melewati sisa langkah saat ini dan melanjutkan ke langkah berikutnya.

Gunakan keduanya dengan hati-hati untuk jendela rata-rata. Jika baru tiga nilai dijumlahkan lalu perulangan dihentikan, jumlahnya tidak bisa dibagi lima seolah-olah berisi lima nilai. Melewatkan nilai mengubah arti perhitungannya.

Coba sendiri

Atur panjang menjadi tiga. Pada satu candle, catat offset dalam perulangan beserta tiga harga terkait. Lalu ubah program agar rata-rata buatanmu dan rata-rata siap pakai dapat digambar dalam mode overlay untuk dibandingkan dengan pemeriksaan selisih.

Solusi latihan

Ketiga offset adalah 0, 1, 2. Dekorator memerlukan overlay=True, lalu setelah perhitungan tambahkan:

plot(manual_average, "Manual average", color=color.blue, linewidth=2)
plot(builtin_average, "Built-in average", color=color.orange)

Hapus gambar selisih dari tampilan ini. Garis di sekitar nol dan rata-rata pada tingkat harga sulit dibaca pada skala yang sama. Untuk pemeriksaan, kamu bisa mempertahankan panel selisih asli dalam versi program terpisah.

Mencari jendela yang bergeser

Pikirkan perubahan jika perulangan ditulis sebagai range(1, length + 1). Jumlah elemennya tetap lima, tetapi candle saat ini tidak termasuk dan digantikan candle lima langkah sebelumnya. Ini adalah jendela rata-rata candle sebelumnya, bukan candle saat ini.