Dalam bab tentang persilangan, indikator menggambar penanda ketika rata-rata bersilangan. Sekarang peristiwa yang sama akan memicu order simulasi. Program membuka posisi beli saat persilangan naik dan menutupnya saat persilangan turun.

Apa yang dilakukan strategi?

Indikator menghitung dan menampilkan. Strategi juga memberikan order kepada simulator backtest. Simulator melacak order, posisi, dan hasil berdasarkan candle historis serta aturan yang ditentukan.

Pengujian pada riwayat ini disebut backtest. Semua order dalam bab ini disimulasikan; menjalankan Run Pyne code tidak mengirim order ke rekening trading sungguhan.

Posisi adalah kepemilikan yang terbentuk setelah order masuk dieksekusi. Order adalah instruksi, sedangkan eksekusi adalah peristiwa yang membuat atau mengubah posisi. Ketiga istilah ini tidak digunakan secara bergantian.

Menuliskan aturan terlebih dahulu

Aturan strategi ini:

  • Menghitung SMA lima dan dua puluh pada setiap candle.
  • Saat persilangan naik, mengirim order masuk posisi long sebanyak satu unit.
  • Saat persilangan turun, menutup posisi terkait order masuk beridentitas Long.
  • Perhitungan menggunakan data candle historis yang sudah selesai.

Nilai posisi long bertambah saat harga naik dan berkurang saat harga turun. Contoh ini tidak membuka posisi short.

Aturan tersebut tidak menyatakan setiap persilangan naik menguntungkan. Backtest memeriksa apa yang akan terjadi pada data tertentu dengan tindakan tersebut.

Program lengkap

Buat file crossover_strategy.py:

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


@script.strategy(
    "Average Crossing Strategy",
    overlay=True,
    initial_capital=10000,
    default_qty_type=strategy.fixed,
    default_qty_value=1,
    pyramiding=1,
)
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)
    if crosses_up:
        strategy.entry("Long", strategy.long)
    if crosses_down:
        strategy.close("Long")
    plot(fast_average, "Fast average", color=color.blue, linewidth=2)
    plot(slow_average, "Slow average", color=color.orange, linewidth=2)

@script.strategy menandai main() sebagai strategi. Perhitungan dan kedua garis tetap dapat digunakan. Impor barunya adalah namespace strategy, yang menyediakan operasi order dan data strategi.

Dekorator merupakan pemanggilan beberapa baris. Pengaturan di dalamnya mengendalikan eksekusi strategi; parameter main() adalah input perhitungan kita sendiri.

Modal awal dan jumlah

initial_capital=10000 menentukan saldo awal simulasi. Metadata pasar milik data demo menentukan satuan dan tingkat harga yang digunakan dalam eksekusi.

default_qty_type=strategy.fixed berarti jumlah tetap. default_qty_value=1 meminta order satu unit. Ini bukan satu persen modal dan belum tentu satu unit mata uang.

pyramiding=1 mengizinkan paling banyak satu entry searah. Contoh tidak menambah posisi yang sudah ada dengan entry long baru.

Selama belajar, kita menggunakan jumlah kecil yang tetap agar tindakan mudah diikuti. Dengan begitu, lebih sedikit faktor ukuran berbeda yang perlu diperiksa bersama ketika hasil berubah.

Nama entry dan penutupan

Argumen pertama strategy.entry("Long", strategy.long) adalah identitas order. Program memilih teks Long; argumen kedua menentukan arah.

strategy.close("Long") merujuk identitas yang sama. Namanya harus cocok. Jika masuk menggunakan identitas "Buy", menutup "Long" tidak menargetkan entry tersebut.

Persilangan turun di sini menutup posisi, bukan membuka short. Jika tidak ada posisi terbuka dengan nama tersebut, tidak ada yang ditutup.

Menjalankan di PyneIDE

  1. Simpan program lengkap.
  2. Pilih Run Pyne code dan data demo.
  3. Periksa kedua garis SMA dan penanda transaksi pada grafik.
  4. Buka panel di bawah grafik dan pilih tab Trades.
Di samping crossover_strategy.py terlihat dua garis SMA dan penanda transaksi masuk serta keluar strategi.
Persilangan SMA memicu order; transaksi yang dieksekusi juga muncul pada grafik.

Jika tidak ada transaksi, pastikan kamu menjalankan file strategi dan penanda @script.strategy tetap ada. Periksa juga nilai sebenarnya dari kedua input. SMA dengan panjang dan sumber yang sama tidak bersilangan.

Waktu sinyal dan eksekusi

Dengan pengaturan bawaan yang digunakan di sini, program mengirim order pasar berdasarkan data penutupan candle. Order biasanya dieksekusi pada harga pembukaan candle berikutnya. Karena itu, candle pemberi sinyal bisa berbeda dari candle entry.

Hal yang sama berlaku untuk penutupan pasar. Order penutupan yang dibuat saat persilangan turun bisa menutup posisi pada pembukaan berikutnya.

Jika candle terakhir menghasilkan order baru, file tidak memiliki candle berikutnya. Akibatnya, order tersebut belum tentu dieksekusi. Posisi yang sudah dibuka sebelumnya juga bisa tetap terbuka di akhir data.

Mode eksekusi merupakan bagian pengaturan. Bab berikutnya juga membahasnya melalui Properties. Selalu tafsirkan hasil sesuai mode eksekusi yang digunakan dalam pengujian.

Dari sinyal hingga eksekusiDengan pengaturan bawaan contoh, strategi membuat order pasar saat candle ditutup. Order dieksekusi pada harga pembukaan candle berikutnya, yang bisa berbeda dari harga saat sinyal muncul. close → strategy.entry → open. process_orders_on_close = False.Candle sinyalCandle berikutnyaOrder menungguPenutupan: sinyaldan order pasarPembukaan berikutnya:order dieksekusiprocess_orders_on_close = False
Dari sinyal hingga eksekusiDengan pengaturan bawaan contoh, strategi membuat order pasar saat candle ditutup. Order dieksekusi pada harga pembukaan candle berikutnya, yang bisa berbeda dari harga saat sinyal muncul.

Coba sendiri

Buka input strategi dan atur panjang cepat serta lambat menjadi 20. Perkirakan dua hal: bagaimana posisi kedua garis, dan berapa persilangan yang bisa memicu transaksi?

Solusi latihan

Kedua SMA menggunakan jendela berukuran sama dari harga yang sama, sehingga nilainya sama. Tidak ada candle tempat satu garis bergerak ke atas atau ke bawah yang lain. Strategi tidak membuka transaksi berdasarkan aturan ini.

Grafik baru menunjukkan hasil tersebut setelah input yang diubah disimpan dan perhitungan ulang selesai. Setelah pemeriksaan, kembalikan nilai menjadi 5 dan 20.

Memilih satu entry

Cari satu entry yang dieksekusi dan periksa kedua rata-rata pada candle sebelumnya. Persilangan naik harus terjadi pada candle sinyal. Bandingkan harga transaksi dengan harga pembukaan candle entry, jangan otomatis dengan harga penutupan candle sinyal.