Strategi ini mengimplementasikan fungsionalitas pengaturan beberapa persentase keluar keuntungan. Strategi pertama menilai kondisi panjang dan pendek untuk memasuki posisi. Kemudian menggunakan fungsi kustom persenAsPoints untuk mengkonversi persentase menjadi tik harga. Program ini menetapkan 4 keluar dengan persentase keuntungan 1%, 2%, 3% dan 4% berdasarkan konfigurasi, dan juga menetapkan keluar stop loss 2% yang umum. Ini mencapai efek beberapa persentase keluar keuntungan.
Logika inti dari strategi ini adalah menggunakan SMA crossover untuk menentukan entri. Secara khusus, ketika SMA cepat (14) melintasi di atas SMA lambat (28), itu akan pergi panjang. Ketika SMA cepat (14) melintasi di bawah SMA lambat (28), itu akan pergi pendek.
Kemudian bagaimana cara mengatur beberapa persentase keuntungan keluar? di sini fungsi kustom persenAsPoints digunakan untuk mengkonversi persentase ke harga tik. logika adalah:
percentAsPoints(pcnt) =>
strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
Jika ukuran posisi tidak 0, maka ia menghitung tick harga dengan persentase dikalikan dengan harga masuk rata-rata dan dibagi dengan ukuran tick minimum.
Dengan fungsi ini, kita dapat dengan mudah mengkonversi persentase ke kutu. program kemudian menetapkan 4 keluar berdasarkan persentase keuntungan 1%, 2%, 3% dan 4%:
lossPnt = percentAsPoints(2)
strategy.exit("x1", qty_percent = 25, profit = percentAsPoints(1), loss = lossPnt)
strategy.exit("x2", qty_percent = 25, profit = percentAsPoints(2), loss = lossPnt)
strategy.exit("x3", qty_percent = 25, profit = percentAsPoints(3), loss = lossPnt)
strategy.exit("x4", profit = percentAsPoints(4), loss = lossPnt)
Juga, stop loss 2% umum digunakan untuk semua exit.
Strategi keluar keuntungan berperatus ganda ini memiliki keuntungan berikut:
Ini memungkinkan mengambil keuntungan langkah demi langkah, menghindari kehilangan keuntungan yang lebih besar.
Keluar dalam batch memungkinkan pemulihan modal, mengurangi risiko. misalnya dengan ukuran batch 25%, keuntungan 1% dapat mengembalikan 1/4 dari modal, dan posisi selanjutnya semuanya dengan keuntungan murni.
Stop loss 2% mencegah kerugian ekstrim dalam pergerakan pasar yang tidak normal.
Implementasinya sederhana dan bersih, mudah dimengerti dan dimodifikasi.
Ada juga beberapa risiko dengan strategi ini:
Penarikan persentase dapat menyebabkan pergeseran sisi, dengan harga berosilasi di sekitar harga keluar, memicu keluar yang sering.
Batch exit meningkatkan jumlah perdagangan dan komisi. komisi tinggi bisa menghapus beberapa keuntungan keluar.
Posisi keluar yang tidak tepat juga dapat mempengaruhi pengembalian. keluar yang terlalu konservatif dapat menyebabkan keuntungan yang tidak cukup, sementara keluar yang terlalu agresif memiliki risiko yang lebih tinggi.
Penarikan persentase tetap tidak memperhitungkan volatilitas dan tren pasar. di pasar yang bergolak harus menggunakan keluar yang lebih kecil, sementara di pasar yang sedang tren harus ditargetkan keluar yang lebih besar.
Mengingat risiko di atas, optimasi lebih lanjut dapat dilakukan dalam aspek berikut:
Mengoptimalkan exit untuk beradaptasi berdasarkan volatilitas pasar dan kekuatan menggunakan metode seperti ATR exit. exit yang lebih ketat di pasar bergolak dan keluar yang lebih luas dalam tren yang kuat.
Mengoptimalkan persentase batch dan kisaran untuk menemukan kombinasi risiko-pengembalian optimal. Tambahkan optimasi parameter untuk menemukan parameter terbaik.
Mengurangi jumlah exit untuk menghindari over-trading. misalnya menetapkan zona penyangga harga, hanya keluar setelah melebihi pergerakan harga tertentu.
Pertimbangkan faktor komisi, hindari keluar di mana keuntungan yang diproyeksikan kurang dari biaya komisi.
Menggunakan keluar buku pesanan berdasarkan kedalaman alih-alih bergerak harga keluar. Keluar menggunakan harga penawaran / permintaan terbaik berdasarkan prioritas kedalaman.
Strategi ini mencapai efek exit profit persentase ganda, dengan 4 exit pada 1%, 2%, 3% dan 4%, memungkinkan exit menguntungkan secara bertahap, dan menggunakan stop loss 2% untuk mencegah kerugian besar dalam pergerakan ekstrem. Ini menyeimbangkan risiko dan pengembalian dan mencegah kehilangan keuntungan lebih lanjut.
/*backtest start: 2023-10-31 00:00:00 end: 2023-11-30 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © adolgov //@version=4 strategy("Multiple %% profit exits example", overlay=false, default_qty_value = 10) longCondition = crossover(sma(close, 14), sma(close, 28)) if (longCondition) strategy.entry("My Long Entry Id", strategy.long) shortCondition = crossunder(sma(close, 14), sma(close, 28)) if (shortCondition) strategy.entry("My Short Entry Id", strategy.short) percentAsPoints(pcnt) => strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na) lossPnt = percentAsPoints(2) strategy.exit("x1", qty_percent = 25, profit = percentAsPoints(1), loss = lossPnt) strategy.exit("x2", qty_percent = 25, profit = percentAsPoints(2), loss = lossPnt) strategy.exit("x3", qty_percent = 25, profit = percentAsPoints(3), loss = lossPnt) strategy.exit("x4", profit = percentAsPoints(4), loss = lossPnt) profitPercent(price) => posSign = strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0 (price - strategy.position_avg_price) / strategy.position_avg_price * posSign * 100 p1 = plot(profitPercent(high), style=plot.style_linebr, title = "open profit % upper bound") p2 = plot(profitPercent(low), style=plot.style_linebr, title = "open profit % lower bound") fill(p1, p2, color = color.red)