Strategi Stop Loss dan Take Profit berasaskan harga

Penulis:ChaoZhang, Tarikh: 2023-11-23 15:36:00
Tag:

img

Ringkasan

Idea teras strategi ini adalah untuk menggunakan jumlah stop loss input dan mengambil keuntungan untuk menetapkan stop loss yang munasabah dan mengambil tahap profit tick, untuk menguruskan risiko dan ganjaran setiap perdagangan.

Logika Strategi

Strategi pertama menetapkan isyarat kemasukan rawak, pergi lama apabila SMA14 melintasi SMA28, dan pergi pendek apabila SMA14 melintasi di bawah SMA28.

Selepas masuk, strategi menggunakan fungsi moneyToSLPoints untuk mengira tahap tanda stop loss berdasarkan input jumlah stop loss dolar. Begitu juga, ia juga mengira tahap tanda take profit. Ini melaksanakan stop loss dan mengambil keuntungan berdasarkan jumlah dolar.

Sebagai contoh, jika pergi panjang 100 kontrak dengan setiap tik bernilai $ 10, dan stop loss ditetapkan pada $ 100, maka tahap stop loss tik akan dikira sebagai 100/10/100 = 0,1 tik.

Akhirnya.strategy.exitdigunakan untuk menetapkan titik keluar stop loss dan mengambil keuntungan.

Analisis Kelebihan

Kelebihan terbesar strategi stop loss dan mengambil keuntungan berdasarkan harga ini adalah bahawa parameternya intuitif. Hubungan antara risiko dan ganjaran dapat dilihat dengan jelas untuk membimbing pemilihan parameter.

Juga, hentian jumlah dolar dapat mengawal pendedahan risiko sebenar dengan lebih baik berbanding hentian tik tetap apabila turun naik pasaran berubah.

Analisis Risiko

Terdapat beberapa risiko dengan strategi stop loss dan mengambil keuntungan ini:

  1. Jika stop loss terlalu luas, mudah untuk terjebak pada pembalikan. Jika jarak berhenti terlalu besar, pembalikan jangka pendek menjadi mungkin dan boleh menangkap perdagangan.

  2. Jika jarak mengambil keuntungan terlalu dekat, ia mungkin sukar dicapai. Jika jarak mengambil keuntungan sangat kecil, ia akan menjadi sukar untuk trend satu sisi biasa untuk mencapainya, menjadikan keuntungan tidak mungkin.

  3. Kontrak yang sesuai perlu dipilih. Jika kontrak nilai tiket tinggi seperti Minyak mentah digunakan, kerugian berhenti dolar yang sama akan diterjemahkan kepada tiket yang sangat kecil, yang boleh dengan mudah dihentikan oleh bunyi bising.

Arahan pengoptimuman

Beberapa cara strategi ini boleh ditingkatkan:

  1. Isyarat kemasukan boleh dipertingkatkan dengan menggabungkan trend, turun naik, musim dan lain-lain untuk kemasukan masa yang lebih baik.

  2. Peratusan henti / keuntungan yang sesuai boleh dipilih berdasarkan produk yang berbeza. henti yang lebih besar boleh digunakan dalam komoditi yang sangat tidak menentu.

  3. Stop boleh menyesuaikan diri dengan turun naik, meluas apabila turun naik dan ketat apabila turun turun.

  4. Pendekatan berhenti / keuntungan yang berbeza boleh digunakan untuk sesi dagangan yang berbeza. Hentian yang lebih ketat boleh digunakan semasa sesi AS untuk mengurangkan kemungkinan terperangkap dalam whipsaws.

Kesimpulan

Strategi ini melaksanakan stop loss intuitif dan mengambil keuntungan berdasarkan jumlah dolar. Kelebihannya adalah parameter intuitif dan kawalan modal. Kelemahannya adalah kemudahan terperangkap dalam pembalikan dan kehilangan keuntungan. Ia boleh ditingkatkan dengan meningkatkan entri, mengoptimumkan berhenti / sasaran, memilih produk yang lebih baik dll untuk menjadikannya lebih stabil.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 10m
basePeriod: 1m
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

// @description
// 

//@version=4
strategy("Stop loss and Take Profit in $$ example", overlay=true)

// random entry condition

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)

moneyToSLPoints(money) =>
    strategy.position_size !=0 ? (money / syminfo.pointvalue / abs(strategy.position_size)) / syminfo.mintick : na

p = moneyToSLPoints(input(200, title = "Take Profit $$"))
l = moneyToSLPoints(input(100, title = "Stop Loss $$"))
strategy.exit("x", profit = p, loss = l)

// debug plots for visualize SL & TP levels
pointsToPrice(pp) =>
    na(pp) ? na : strategy.position_avg_price + pp * sign(strategy.position_size) * syminfo.mintick
    
pp = plot(pointsToPrice(p), style = plot.style_linebr )
lp = plot(pointsToPrice(-l), style = plot.style_linebr )
avg = plot( strategy.position_avg_price, style = plot.style_linebr )
fill(pp, avg, color = color.green)
fill(avg, lp, color = color.red)

Lebih lanjut