Exit dan ukuran posisi
Menambahkan exit stop dan target ke strategi serta memeriksa jarak dalam tick.
Strategi pertama hanya menutup posisi saat persilangan berlawanan. Sekarang kita juga menggunakan jarak kerugian dan keuntungan dari harga masuk. Penutupan berdasarkan persilangan tetap dipertahankan.
Tiga alasan keluar yang berbeda
Dalam contoh ini, tiga peristiwa bisa menutup posisi long:
- harga mencapai tingkat order stop untuk membatasi kerugian;
- harga mencapai tingkat order limit untuk mengambil keuntungan;
- rata-rata cepat melintas ke bawah rata-rata lambat dan order penutupan pasar dieksekusi.
Stop dan limit adalah order dengan syarat harga. strategy.close menghasilkan order penutupan pasar. Aturan eksekusinya bisa berbeda, sehingga harga dan waktu perlu diperiksa dalam tabel transaksi.
Jarak atau harga tertentu?
Pemanggilan strategy.exit menyediakan dua cara penentuan:
| Argumen | Yang ditentukan |
|---|---|
loss | Jarak kerugian dalam tick |
profit | Jarak keuntungan dalam tick |
stop | Harga stop tertentu |
limit | Harga limit tertentu |
loss=100 tidak berarti 100 persen dan belum tentu 100 unit mata uang. Kamu meminta jarak seratus tick dari harga masuk.
Ukuran tick DEMO adalah 0,01. Jadi, seratus tick berarti 1 satuan harga dan dua ratus tick berarti 2 satuan harga. Untuk entry long pada 200, tingkat stop adalah 199 dan target 202, sebelum pengaruh tambahan slippage dan kondisi eksekusi.
Program lengkap
Buat file protected_strategy.py:
"""
@pyne edge
"""
from pynecore.lib import close, color, input, plot, script, strategy, ta
@script.strategy(
"Crossing Strategy with Exits",
overlay=True,
initial_capital=10000,
default_qty_type=strategy.fixed,
default_qty_value=1,
pyramiding=1,
commission_type=strategy.commission.percent,
commission_value=0.1,
slippage=2,
)
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),
stop_ticks: int = input.int(100, title="Stop distance (ticks)", minval=1),
target_ticks: int = input.int(200, title="Target distance (ticks)", minval=1),
):
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")
strategy.exit("Bracket", "Long", loss=stop_ticks, profit=target_ticks)
plot(fast_average, "Fast average", color=color.blue, linewidth=2)
plot(slow_average, "Slow average", color=color.orange, linewidth=2)Bracket adalah identitas kelompok order keluar. Argumen kedua, Long, menentukan entry yang terkait. loss dan profit menggunakan dua input tadi.
Pemanggilan exit dijalankan pada setiap candle dengan identitas yang sama. Pemanggilan ini mengelola aturan keluar tersebut, bukan membuka posisi penuh baru yang independen setiap kali dipanggil.
Jalankan program pada data demo. Dalam Trades, exit Bracket kini bisa muncul selain penutupan pasar akibat persilangan.

Kapan exit pelindung tersedia?
Program bisa memberikan instruksi masuk dan keluar terkait dalam eksekusi yang sama. Runtime dapat menghubungkan jarak dalam tick dengan harga entry yang benar-benar dieksekusi.
Jika sebaliknya kamu menghitung harga stop tertentu dari harga penutupan sinyal, tingkat itu berawal dari harga sinyal. Bila harga pembukaan berikutnya berbeda, jaraknya dari entry sebenarnya tidak lagi sama.
Pilih cara penentuan berdasarkan aturan yang ingin kamu tulis. loss adalah jarak tick relatif terhadap entry, sedangkan stop adalah tingkat harga tertentu.
Candle tidak memuat seluruh langkah harga
Data OHLCV menyediakan harga pembukaan, tertinggi, terendah, dan penutupan candle. Data ini tidak otomatis menyediakan urutan waktu semua harga di dalam candle.
Jika harga tertinggi candle mencapai target dan harga terendah mencapai stop, empat harga tersebut saja tidak menjelaskan yang terjadi lebih dahulu. Simulator menggunakan aturan model eksekusinya. Data kerangka waktu yang lebih terperinci dapat memungkinkan pemeriksaan dengan resolusi lain.
Periksa kasus ini secara khusus, jangan selalu memilih hasil yang lebih menguntungkan secara manual. Asumsi model merupakan bagian dari hasil.
Harga stop juga tidak menjamin harga eksekusi yang tepat sama. Jika candle berikutnya dibuka melewati stop, eksekusi bisa lebih buruk daripada tingkat yang dilompati celah harga tersebut. Slippage dapat menambah perbedaan harga lagi.
Jarak dan kerugian moneter
Untuk posisi long satu unit dengan nilai per poin 1, jarak 100 tick dengan ukuran tick 0,01 berarti selisih 1 unit mata uang. Pada sepuluh unit, hasil dari selisih harga yang sama menjadi sepuluh kali lipat.
Jumlah, ukuran tick, dan nilai per poin bersama-sama menentukan besaran moneter pergerakan sampai stop. Komisi dan kondisi eksekusi sebenarnya juga ikut berpengaruh.
Jika kamu memberikan nilai qty langsung dalam order, itu adalah jumlah khusus order tersebut. Contoh menggunakan jumlah bawaan, yang juga bisa diganti melalui Properties → Order size.
Pengaturan 100 dan 200 tick untuk latihan DEMO hanya bersifat ilustrasi. Pada instrumen lain, angka yang sama bisa berarti jarak harga dan moneter yang berbeda.
Coba sendiri
Pertahankan panjang cepat dan lambat, jumlah, serta biaya. Jalankan satu versi dengan jarak stop/target 100/200, lalu satu lagi 200/400. Periksa apa yang terjadi pada sinyal entry yang sama.
Solusi latihan
Dalam Inputs, ubah hanya Stop distance (ticks) dan Target distance (ticks). Jarak lebih besar bisa membuat posisi ditutup pada candle lain atau karena alasan berbeda.
Penutupan berdasarkan persilangan tetap ada dalam kedua versi. Karena itu, target lebih jauh tidak berarti posisi pasti tetap terbuka sampai target tersebut. Aturan penutupan bekerja bersama.
Setelah menyimpan input, selalu tunggu perhitungan ulang lalu baca hasil yang baru. Simpan kedua ekspor dengan nama berbeda jika ingin membandingkannya nanti.
Mencari alasan exit
Pilih satu transaksi tertutup dan periksa harga masuk, jarak tick yang ditentukan, serta nilai OHLC candle penutupan. Dari harga keluar dan waktunya, tentukan aturan yang menjelaskan transaksi. Jika candle menyentuh beberapa tingkat, perhitungkan juga model eksekusi.