Strategi ini melaksanakan fungsi untuk menetapkan beberapa peratusan keluar keuntungan. Strategi pertama menilai syarat panjang dan pendek untuk memasuki kedudukan. Ia kemudian menggunakan fungsi peratusanAsPoints tersuai untuk menukar peratusan ke tik harga. Program ini menetapkan 4 keluar dengan peratusan keuntungan 1%, 2%, 3% dan 4% berdasarkan konfigurasi, dan juga menetapkan keluar rugi berhenti 2% biasa. Ini mencapai kesan keluar keuntungan peratusan berganda.
Logik teras strategi ini adalah menggunakan persilangan SMA untuk menentukan kemasukan. Khususnya, apabila SMA cepat (14) melintasi di atas SMA perlahan (28), ia akan menjadi panjang. Apabila SMA cepat (14) melintasi di bawah SMA perlahan (28), ia akan menjadi pendek.
Kemudian bagaimana untuk menetapkan beberapa peratusan keluar keuntungan? di sini fungsi peratusanAsPoints tersuai digunakan untuk menukar peratusan ke harga tik. logiknya adalah:
percentAsPoints(pcnt) =>
strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
Jika saiz kedudukan bukan 0, ia mengira harga tanda tanda dengan peratusan dikalikan dengan harga kemasukan purata dan dibahagikan dengan saiz tanda tanda minimum.
Dengan fungsi ini, kita boleh dengan mudah menukar peratusan ke kutu. program kemudian menetapkan 4 keluar berdasarkan peratusan 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% biasa digunakan untuk semua keluar. Ini mencapai kesan keluar keuntungan peratusan berganda.
Strategi keluar keuntungan peratusan berganda ini mempunyai kelebihan berikut:
Ia membolehkan mengambil keuntungan langkah demi langkah, mengelakkan kehilangan keuntungan yang lebih besar.
Keluar dalam kumpulan membolehkan pemulihan modal, mengurangkan risiko. Sebagai contoh, dengan saiz kumpulan 25%, keuntungan 1% dapat mengembalikan 1/4 modal, dan kedudukan kemudian semuanya dengan keuntungan murni.
Stop loss 2% menghalang kerugian yang melampau dalam pergerakan pasaran yang tidak normal.
Pelaksanaan adalah mudah dan bersih, mudah difahami dan diubah suai.
Terdapat juga beberapa risiko dengan strategi ini:
Penarikan peratusan boleh menyebabkan ketegangan sampingan, dengan harga berayun di sekitar harga keluar, mencetuskan keluar yang kerap. Ini meningkatkan kekerapan perdagangan dan kos komisen.
Penarikan kumpulan meningkatkan jumlah dagangan dan komisen.
Penempatan keluar yang tidak betul juga boleh memberi kesan kepada pulangan. Keluar yang terlalu konservatif boleh membawa kepada keuntungan yang tidak mencukupi, sementara keluar yang terlalu agresif mempunyai risiko yang lebih tinggi.
Penarikan peratusan tetap tidak mengambil kira turun naik pasaran dan trend. Di pasaran yang bergelora, penarikan yang lebih kecil harus digunakan, manakala di pasaran yang sedang berkembang, penarikan yang lebih besar harus disasarkan.
Memandangkan risiko di atas, pengoptimuman lanjut boleh dilakukan dalam aspek berikut:
Mengoptimumkan keluar untuk menyesuaikan diri berdasarkan turun naik pasaran dan kekuatan menggunakan kaedah seperti keluar ATR. Keluar yang lebih ketat di pasaran yang bergolak dan keluar yang lebih luas dalam trend yang kuat.
Mengoptimumkan peratusan batch dan julat untuk mencari kombinasi risiko-pengembalian yang optimum. Tambah pengoptimuman parameter untuk mencari parameter terbaik.
Mengurangkan jumlah keluar untuk mengelakkan perdagangan berlebihan. Sebagai contoh, tetapkan zon penyangga harga, keluar hanya selepas melebihi pergerakan harga tertentu.
Pertimbangkan faktor komisen, elakkan keluar di mana keuntungan yang diramalkan adalah kurang daripada kos komisen.
Gunakan keluar buku pesanan berdasarkan kedalaman dan bukannya bergerak harga keluar. keluar menggunakan harga tawaran / meminta terbaik berdasarkan keutamaan kedalaman.
Strategi ini mencapai kesan keluar keuntungan peratusan berganda, dengan 4 keluar di 1%, 2%, 3% dan 4%, membolehkan keluar yang menguntungkan secara beransur-ansur, dan menggunakan 2% stop loss untuk mengelakkan kerugian besar dalam pergerakan melampau. Ia menyeimbangkan risiko dan pulangan dan menghalang kehilangan keuntungan lebih lanjut. Tetapi beberapa risiko wujud seperti ketegangan dan kekerapan perdagangan yang lebih tinggi. Cadangan pengoptimuman yang diberikan dapat membantu meningkatkan prestasi dalam lebih banyak keadaan pasaran apabila dimasukkan ke dalam strategi.
/*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)