Properti strategi
Setiap strategi Pine memiliki sejumlah properti untuk menentukan cara kerjanya:
- Modal Awal
- Mata Uang Dasar
- Ukuran Order
- Pyramiding
- Komisi
- Pastikan Harga Untuk Order Limit
- Slippage
- Margin
- Kalkulasi ulang
- Presisi Backtesting
Mereka tersedia pada pengaturan strateginya, didalam tab Properti:

Setiap parameter yang ditentukan dalam properti strategi dapat diubah dengan mengedit argumen pemanggilan fungsi strategy() dalam skrip Pine yang sesuai:
strategy(title, initial_capital, currency, default_qty_value, default_qty_type, pyramiding, commission_type, commission_value, backtest_fill_limits_assumption, slippage, process_orders_on_close, margin_long, margin_short, calc_on_order_fills, calc_on_every_tick, process_orders_on_close, use_bar_magnifier)
Mari kita lihat setiap parameter input di menu Properti dan parameter yang sesuai dalam bahasa Pine:
1 - Modal Awal (parameter: initial_capital) mewakili jumlah dana awal yang tersedia untuk di tradingkan oleh strategi anda, dalam mata uang yang ditentukan pada Mata Uang Dasar. Secara bawaannya, nilai ini akan sama dengan 100,000. Anda mungkin perlu meningkatkan nilai ini agar trade dapat terjadi pada simbol-simblo tertentu..
2 - Mata Uang Dasar (parameter: currency) menentukan mata uang yang digunakan untuk kalkulasinya. Hasil yang muncul dalam tab Penguji Strategi (profit, loss, drawdown, dsb) ditampilkan dalam mata uang tersebut. Pilihan yang tersedia adalah:
Default, USD, EUR, AUD, GBP, NZD, CAD, CHF, HKD, JPY, NOK, SEK, SGD, TRY, ZAR. Jika pilihan Bawaan dipilih, strateginya akan menggunakan mata uang bawaan untuk simbolnya dan tidak terdapat konversi mata uang didalamnya.
3 - Ukuran Order (parameters: default_qty_value, default_qty_type). Ini membutuhkan sebuah nilai dan mode kalkulasinya. Harap dicatat bahwa nilai kalkulasinya dapat tergantung pada kuantitas minimum yang dapat ditradingkan untuk suatu simbol tertentu:
- Kontrak (argument: strategy.fixed) - strategi akan masuk dengan jumlah kontrak/lembar/lot yang telah ditentukan.
- Jumlah dalam mata uang (argument: strategy.cash) - strategi akan memasukkan jumlah yang ditentukan dalam mata uang dasarnya.
- Persentase ekuitas (argument: strategy.percent_of_equity) - ukuran posisi akan dihitung sebagai persentase dari ekuitas yang tersedia saat trade dibuka.
4 - Pyramiding (parameter: pyramiding) menentukan jumlah maksimum entri berturut-turut yang diizinkan dalam arah yang sama. Ketika pyramiding dinonaktifkan, strategi hanya dapat membuka satu posisi panjang atau pendek, bahkan jika kondisi masuk terpenuhi. Pyramiding hanya memengaruhi entri yang dibuat menggunakan fungsi strategy.entry(). Ini tidak berpengaruh pada order yang dibuat menggunakan strategy.order().
5 - Komisi (parameters: commission_type, commission_value). Ini adalah jumlah yang dibayarkan dalam biaya trading untuk setiap tradenya. Nilai dan mode kalkulasi harus diberikan. Perhatikan bahwa komisi diterapkan pada entri dan keluar, dan ketika persentase digunakan, komisi yang dihitung akan bervariasi sesuai dengan nilai transaksinya:
- Persentase dari nilai yang ditransaksikan (argumen: strategy.commission.percent) - mengenakan komisi pada setiap order sesuai dengan persentase yang ditentukan.
- Mata uang per kontrak (argumen: strategy.commission.cash_per_contract) - mengenakan komisi pada setiap kontrak.
- Mata uang per order (argumen: strategy.commission.cash_per_order) - mengenakan komisi pada setiap order.
6 - Verifikasi Harga Untuk Order Limit (parameter: backtest_fill_limits_assumption) membuat kondisi untuk memasuki posisi menggunakan order limit secara lebih ketat. Secara bawaannya, nilai ini adalah 0, yaitu order limit diisi pada data historis segera setelah harga yang ditunjukkan dalam order tercapai. Jika parameternya tidak nol, maka order limit dapat memasuki posisi di dalam bar hanya jika harga pasar telah melampaui level order limit dengan jumlah tick yang telah ditentukan.
7 - Slippage (parameter: slippage) menentukan nilai dalam ticks yang akan ditambahkan ke harga pengisian pasar atau order stop. Ini dapat digunakan untuk memperhitungkan spread.
8 - Margin Untuk Posisi Pembelian dan Penjualan (parameters: margin_long, margin_short) menentukan margin untuk setiap trade, misalnya persentase yang dibutuhkan trader untuk membuka posisi. Sebagai contoh, jika Magjin untuk posisi beli diatur 25%, maka trader harus memiliki cukup dana untuk memenuhi 25% dari trade yang terbuka dan berpotensi menghabiskan hingga 400% dari ekuitasnya dalam setiap trade. Jika trade telah dibuka dan mulai mengalami kerugian ke tingkat dimana dana trader tidak cukup lagi untuk menahan porsi perdagangannya, Margin Call terjadi dan dipaksa melikuidasi bagian dari posisi originalnya. Angka persis dari unit yang akan dilikuidasi adalah 4 kali dari jumlah yang dibutuhkan untuk menutupi kerugiannya. Ini dihitung berdasarkan algoritma berikut ini:
1. Menghitung Uang yang Dihabiskan, jumlah uang yang dikeluarkan trader untuk membuka posisi.
Ukuran Posisi * Harga Masuk
2. Hitung Nilai Pasar Keamanan (MVS).
Ukuran Posisi * Harga Saat Ini
3. Menghitung Keuntungan Terbuka. Jika arah perdagangan adalah sell dan Keuntungan Terbuka adalah angka positif, hasilnya harus tetap negatif, jadi kami mengalikan nilai absolut dari perhitungan kami dengan -1.
ABS(MVS - Uang yang Dihabiskan ) * -1
4. Menghitung Ekuitas, yaitu uang yang tersedia untuk trader saat ini.
Modal Awal + keuntungan Bersih + KeuntunganTerbuka
5. Konversi Persen Margin ke Rasio Margin.
Persen Margin / 100
6. Menghitung Margin, yaitu jumlah uang yang tepat yang dibutuhkan untuk menutupi bagian dari posisi terbuka mereka.
MVS * Rasio Margin
7. Menghitung Dana yang Tersedia, yaitu jumlah uang yang hilang yang tidak dapat ditutup oleh trader dengan ekuitas mereka saat ini.
Ekuitas - Margin
8. Menghitung jumlah total uang yang hilang dari pedagang.
Dana yang Tersedia / Rasio Margin
9. Menghitung berapa unit yang harus dijual trader untuk menutupi kerugian. Nilai dipotong ke titik desimal yang sama dengan ukuran kontrak minimum untuk simbol saat ini.
TRUNCATE(Langkah #8 / Harga Saat Ini)
10. Menghitung berapa unit yang akan dijual broker untuk menutupi kerugian. Broker yang kami tiru menjual 4 kali lebih banyak unit yang diperlukan untuk memastikan margin call tidak terus-menerus terpicu jika kerugian berlanjut. Nilai ini akan positif untuk perdagangan sell karena broker membeli unit untuk menutupi kerugian daripada menjualnya.
Langkah #9 * 4
Untuk memeriksa perhitungan ini secara mendetail, mari tambahkan Strategi Supertrend bawaan ke chart NASDAQ:TSLA pada kerangka waktu 1D. Tetapkan Ukuran Order menjadi 300% dari ekuitas dan Margin untuk posisi buy menjadi 25%.

Entri pertama kita terjadi pada pembukaan bar pada 16 Sep 2010. Kita membeli 682438 unit (Ukuran posisi) seharga 4,43 USD (Harga masuk). Kemudian, pada 23 Sep 2010, ketika harga berada di 3,9 (Harga saat ini), 111052 unit dilikuidasi secara paksa melalui margin call.
1. Uang yang dihabiskan: 682438 * 4,43 = 3023200,34
2. MVS: 682438 * 3,9 = 2661508,2
3. Keuntungan Terbuka: -361692.14
4. Ekuitas: 1000000 + 0 - 361692.14 = 638307.86
5. Rasio Margin: 25/100 = 0,25
6. Margin: 2661508,2 * 0,25 = 665377,05
7. Dana yang Tersedia: 638307.86 - 665377.05 = -27069.19
8. Uang Hilang: -27069.19 / 0.25 = -108276.76
9. Lembar Saham untuk menutupi kerugian: TRUNCATE(-108276.76 / 3.9) = TRUNCATE(-27763.27) = -27763
10. Ukuran Margin Call: -27763 * 4 = - 111052
9 - Kalkulasi Ulang menentukan seberapa sering strateginya harus dihitung ulang. Secara bawaan, strategi dihitung ulang pada penutupan setiap bar, tetapi, dengan menggunakan opsi di bawah ini, strategi juga dapat dihitung ulang:
- Setelah Order Terpenuhi (parameter: calc_on_order_fills) - memungkinkan strategi untuk melakukan perhitungan order intra-bar tambahan segera setelah order terisi. Perhitungan ekstra itu terjadi pada bar historis dan realtime.
- Pada Setiap Tick (parameter: calc_on_every_tick). Secara bawaan, strategi hanya menghitung pada penutupan bar real-time. Parameter ini memungkinkan strategi untuk menghitung pada setiap pembaruan bar real-time, seperti yang dilakukan sebuah studi. Perhatikan bahwa data tick hilang saat chart di segarkan sehingga strategi yang menggunakan opsi ini akan bersifat repaint. Parameter ini tidak mempengaruhi perilaku strategi pada bar historis. Perhatikan juga bahwa strategi yang menggunakan fitur ini tidak akan menampilkan hasil yang realistis pada bar historis, karena tidak berisi data tick.
- Pada Penutupan Bar (parameter: process_orders_on_close). Jika true, strategi menghasilkan upaya tambahan untuk mengeksekusi order setelah bar ditutup dan perhitungan strategi selesai. Jika ordernya adalah order pasar, emulator broker akan mengeksekusinya sebelum bar berikutnya dibuka. Jika order bergantung pada harga, order hanya akan diisi jika kondisi harga terpenuhi. Opsi ini berguna jika anda ingin mengeksekusi order pada saat yang sama ketika harga dibuat: secara bawaan, order dibuat pada Penutupan bar saat ini dan dieksekusi pada Pembukaan bar berikutnya; dengan pengaturan ini diaktifkan, mereka akan dieksekusi pada penutupan yang sama saat order dibuat. Perhatikan bahwa memasuki posisi pada tik yang sama dengan order yang dibuat dapat menyesatkan karena hal itu tidak mungkin dilakukan dalam trading real.
10 - Presisi Backtesting:
- Gunakan Pembesar Bar (parameter: use_bar_magnifier) memungkinkan Emulator Broker menggunakan data kerangka waktu yang lebih rendah selama backtesting riwayat untuk mendapatkan hasil yang lebih realistis. Anda dapat mempelajari lebih lanjut tentang mode backtesting Pembesar Bar di Pusat Bantuan.