Strategi keluar keuntungan berbilang peratusan


Tarikh penciptaan: 2023-12-01 15:22:29 Akhirnya diubah suai: 2023-12-01 15:22:29
Salin: 0 Bilangan klik: 639
1
fokus pada
1619
Pengikut

Strategi keluar keuntungan berbilang peratusan

Gambaran keseluruhan

Strategi ini mewujudkan fungsi untuk menetapkan beberapa peratusan stop loss exits. Strategi ini pertama-tama menilai syarat panjang dan pendek, masuk dengan banyak kosong. Kemudian mengubah peratusan menjadi nilai harga melalui fungsi percentAsPoints yang disesuaikan. Program ini menetapkan 4 exits mengikut peratusan stop loss yang ditetapkan sebanyak 1%, 2%, 3% dan 4%, dan juga menetapkan 2% stop loss exit.

Prinsip Strategi

Strategi ini digunakan untuk menilai kemasukan melalui persilangan ganda antara sma rata-rata. Secara khusus, apabila garis pantas sma ((14) melalui garis perlahan sma ((28) masuk lebih banyak; apabila garis pantas sma ((14) melalui garis perlahan sma ((28) masuk kosong.

Jadi, bagaimana untuk menetapkan beberapa peratusan untuk keluar? Peratusan ini ditukar kepada nilai mata harga dengan menggunakan fungsi percentAsPoints yang disesuaikan, dengan logik berikut:

percentAsPoints(pcnt) => 
    strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)

Fungsi ini menggunakan peratusan kali harga purata pegangan dan kemudian dibahagikan dengan harga minimum yang dipindahkan untuk mendapatkan nombor titik harga. Jika pegangan adalah 0, ia akan mengembalikan na.

Dengan fungsi ini, kita boleh menukarkan peratusan dengan mudah. Kemudian program ini akan berhenti mengikut tetapan 1%, 2%, 3% dan 4%, dan menetapkan 4 exit:

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)  

Pada masa yang sama, semua exit menggunakan stop loss 2% yang umum. Dengan demikian, beberapa peratusan stop loss dapat dicapai.

Analisis kelebihan

Strategi ini mempunyai beberapa kelebihan:

  1. Anda boleh berhenti di tempat kerja mengikut jabatan dan mengelakkan kehilangan peluang untuk mendapatkan lebih banyak wang. Secara amnya, semakin banyak anda berhenti di tempat kerja, semakin besar risiko anda.

  2. Penghentian sekumpulan boleh mengembalikan modal, mengurangkan risiko. Sebagai contoh, menetapkan 25% jumlah, apabila keuntungan mencapai 1%, anda boleh mengambil 14 modal. Posisi seterusnya adalah berdasarkan keuntungan.

  3. Mencegah kemerosotan dalam keadaan yang tidak biasa, 2% kemerosotan dapat mengelakkan kerugian besar yang disebabkan oleh keadaan yang melampau.

  4. Kod untuk mencapai kod yang mudah difahami, mudah diubah dan dioptimumkan. Fungsi tersuai menukar peratusan ke dalam nombor titik, dan beberapa baris kod boleh ditetapkan dengan beberapa titik berhenti.

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Peratusan stop-loss mudah terbentuk bergoyang melintang, harga bergoyang ke belakang di sekitar harga stop-loss. Ini sering mencetuskan stop-loss, meningkatkan frekuensi perdagangan dan beban yuran.

  2. Peruntukan untuk penangguhan batch meningkatkan jumlah transaksi dan beban untuk bayaran. Jika bayaran terlalu tinggi, ia akan mengimbangi sebahagian daripada keuntungan penangguhan.

  3. Tetapan titik tolak yang tidak betul juga akan mempengaruhi kadar keuntungan. Jika tetapan terlalu konservatif, sukar untuk mendapatkan keuntungan yang memuaskan; dan tetapan terlalu radikal, risiko terlalu besar.

  4. Peratusan pegangan tetap, tanpa mengambil kira turun naik dan kecenderungan pasaran. Dalam keadaan gegaran, pegangan harus dikurangkan, dan dalam keadaan trend, pegangan harus ditingkatkan.

Arah pengoptimuman

Mengambil kira risiko-risiko di atas, terdapat beberapa cara untuk terus mengoptimumkan:

  1. Mengoptimumkan strategi hentian sehingga dapat menyesuaikan diri secara automatik dengan turun naik pasaran dan trend. Sebagai contoh, penambahan hentian ATR, pengetatan hentian ketika bergolak, pelepasan hentian semasa trend.

  2. Mengoptimumkan perkadaran dan ketinggian penghentian kumpulan untuk mencapai kombinasi terbaik risiko dan keuntungan. Tambah fungsi pengoptimuman parameter untuk mencari parameter terbaik.

  3. Mengurangkan jumlah penutupan dan mengelakkan perdagangan yang terlalu kerap. Sebagai contoh, menetapkan zon pelindung harga, hanya berhenti selepas melebihi tahap tertentu.

  4. Mengambil kira faktor bayaran, lebih daripada bayaran apabila jangkaan keuntungan berhenti lebih rendah daripada bayaran. Atau mengoptimumkan kenaikan berhenti mengikut bayaran.

  5. Menggunakan penangguhan buku besar. Mengekalkan harga penangguhan yang bergerak mengikut tawaran yang diutamakan oleh penangguhan kedalaman.

ringkaskan

Strategi ini mencapai kesan peratusan perhentian yang banyak, dengan menetapkan empat perhentian perhentian 1%, 2%, 3%, dan 4%, yang boleh dihentikan pada waktu kerja, sambil menggunakan 2% untuk mencegah kerugian besar dalam keadaan yang tidak normal. Strategi ini dapat menyeimbangkan keuntungan risiko dan mencegah kehilangan peluang untuk mendapatkan lebih banyak wang. Tetapi ada juga risiko tertentu, seperti mudah terbentuk goyang melintang, meningkatkan frekuensi perdagangan, dll.

Kod sumber 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)