Strategi pertama
Mengubah sinyal persilangan menjadi aturan masuk dan keluar untuk backtest.
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
- Simpan program lengkap.
- Pilih Run Pyne code dan data
demo. - Periksa kedua garis SMA dan penanda transaksi pada grafik.
- Buka panel di bawah grafik dan pilih tab Trades.

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.
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.