Sekarang kamu membuat program yang membedakan candle naik dan turun. Program memeriksa hubungan harga pembukaan dan penutupan, lalu menunjukkan hasilnya melalui warna dan penanda.

Benar atau salah

Perbandingan close > open menghasilkan True jika harga penutupan lebih tinggi daripada harga pembukaan, dan False jika tidak. Ini adalah nilai logika bertipe bool.

Perbandingan tidak mengubah kedua harga. Operasi ini hanya menjawab sebuah pertanyaan.

TandaArtiContoh
>Lebih besarclose > open
<Lebih kecilclose < open
>=Lebih besar atau samaclose >= open
<=Lebih kecil atau samaclose <= open
==Samaclose == open
!=Tidak samaclose != open

= memberikan nilai kepada variabel, sedangkan == membandingkan dua nilai. Baris bullish = close > open menyimpan hasil pemeriksaan dalam variabel bullish.

Jika harga pembukaan dan penutupan sama, baik close > open maupun close < open tidak benar. Kasus ini juga ditangani agar keputusan mencakup semua kemungkinan.

if, elif, dan else

Kondisi setelah if menentukan apakah bagian yang menjorok akan dijalankan:

if bullish:
    line_color = color.green
elif bearish:
    line_color = color.red
else:
    line_color = color.gray

Kondisi if diperiksa terlebih dahulu. Jika benar, warna hijau dipilih dan cabang lainnya dilewati. Jika salah, pemeriksaan berlanjut ke elif. else dijalankan jika tidak ada kondisi sebelumnya yang benar.

Setiap cabang diakhiri titik dua. Isi cabang ditandai indentasi empat spasi tambahan. Jadi, dalam main(), baris if diawali empat spasi dan penugasan di dalamnya delapan spasi.

Program lengkap

Buat file candle_conditions.py:

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


@script.indicator("Candle Conditions", overlay=True)
def main():
    bullish = close > open
    bearish = close < open
    if bullish:
        line_color = color.green
    elif bearish:
        line_color = color.red
    else:
        line_color = color.gray
    plot(close, "Close", color=line_color, linewidth=2)
    plotshape(bullish, "Bullish candle", style=shape.triangleup,
              location=location.belowbar, color=color.green)

Jalankan pada data demo. Warna garis harga penutupan berubah pada setiap candle. Segitiga hijau muncul di bawah candle naik.

Grafik candle_conditions.py menampilkan garis penutupan yang berubah warna serta penanda segitiga hijau.
Kondisi logika memilih warna dan menggambar segitiga di bawah candle naik.

Argumen pertama plotshape menentukan kapan penanda muncul. style mengatur bentuknya dan location mengatur posisinya terhadap candle. Di sini candle yang ditandai hanya berarti harga penutupannya lebih tinggi daripada harga pembukaannya sendiri. Penanda tersebut bukan instruksi beli.

Kamu juga tidak perlu menghafal parameternya: arahkan mouse ke nama plotshape dalam kode dan baca bantuannya. Langkahnya tersedia dalam bab Bantuan saat menulis kode, termasuk cara menuju definisi.

Letak perhitungan berpengaruh

plot dan plotshape berjalan pada setiap candle. Kita mengubah nilai, warna, atau kondisi yang digambar. Dengan begitu, tampilan memiliki hasil untuk setiap candle.

Urutan yang sama juga tepat untuk moving average:

average = ta.sma(close, 20)
above_average = close > average

Rata-rata dihitung pada setiap candle terlebih dahulu. Setelahnya, kondisi menggunakan hasil itu. Jangan meletakkan pemanggilan ta.sma di dalam cabang if bullish: karena fungsi hanya akan dijalankan pada candle naik.

Selama nilai awal SMA belum tersedia, kondisi close > average tidak menghasilkan sinyal benar. Jika kode perlu merespons nilai yang tidak tersedia secara khusus, gunakan pemeriksaan na(average). average == na bukan pemeriksaan nilai hilang yang tepat.

Menggabungkan beberapa kondisi

and bernilai benar jika kedua sisinya benar. or bernilai benar jika setidaknya salah satunya benar. not membalik nilai logika.

strong_bullish = close > open and close > close[1]

Kondisi ini mensyaratkan dua hal sekaligus: candle harus naik, dan harga penutupannya harus lebih tinggi daripada penutupan sebelumnya. Candle naik masih bisa ditutup di bawah harga penutupan candle sebelumnya, sehingga kedua pemeriksaan merupakan kondisi yang berbeda.

and dan or menggunakan evaluasi hubung singkat: jika bagian pertama sudah menentukan hasil, bagian kedua tidak dievaluasi. Untuk and, ini terjadi jika bagian pertama salah; untuk or, jika bagian pertama benar. Karena itu, jalankan perhitungan yang menggunakan status pada baris tersendiri, lalu gabungkan nilai logika hasilnya.

Memilih nilai secara ringkas

Kamu juga bisa memilih di antara dua nilai dalam satu ekspresi:

line_color = color.green if bullish else color.red

Ini memilih hijau jika bullish benar, dan merah jika tidak. Harga pembukaan dan penutupan yang sama juga akan mendapat merah. Jika ingin menandai kasus tersebut dengan abu-abu, gunakan keputusan tiga cabang lengkap.

Coba sendiri

Gambar segitiga merah yang menunjuk ke bawah di atas candle turun. Pertahankan penanda hijau. Lalu perketat kondisi kedua penanda dengan perbandingan terhadap harga penutupan sebelumnya.

Solusi latihan
bullish_signal = bullish and close > close[1]
bearish_signal = bearish and close < close[1]
plotshape(bullish_signal, "Bullish signal", style=shape.triangleup,
          location=location.belowbar, color=color.green)
plotshape(bearish_signal, "Bearish signal", style=shape.triangledown,
          location=location.abovebar, color=color.red)

Ganti pemanggilan plotshape hijau semula dengan dua pemanggilan baru. Pemilihan warna tetap hanya melihat harga pembukaan dan penutupan candle. Penanda kini juga membandingkan harga penutupan sebelumnya.

Mencari candle yang tidak ditandai

Cari candle naik yang tidak mendapat penanda hijau pada versi dengan kondisi lebih ketat. Periksa harga pembukaannya sendiri dan harga penutupan sebelumnya. Jelaskan bagian and mana yang tidak terpenuhi.