Strategi Stop Loss dan Take Profit berdasarkan harga

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

img

Gambaran umum

Ide inti dari strategi ini adalah untuk menggunakan stop loss input dan mengambil keuntungan jumlah untuk menetapkan stop loss yang wajar dan mengambil tingkat profit tick, untuk mengelola risiko dan imbalan dari setiap perdagangan.

Logika Strategi

Strategi pertama menetapkan sinyal masuk acak, pergi panjang ketika SMA14 melintasi SMA28, dan pergi pendek ketika SMA14 melintasi di bawah SMA28.

Setelah masuk, strategi menggunakan fungsi moneyToSLPoints untuk menghitung level stop loss tick berdasarkan input stop loss dollar amount.

Misalnya, jika pergi panjang 100 kontrak dengan setiap tik bernilai $ 10, dan stop loss ditetapkan pada $ 100, maka level stop loss tik akan dihitung sebagai 100/10/100 = 0,1 tik.

Akhirnya.strategy.exitgaris stop loss dan take profit juga digambarkan untuk tujuan debugging.

Analisis Keuntungan

Keuntungan terbesar dari strategi stop loss dan take profit berbasis harga ini adalah bahwa parameternya intuitif. Hubungan antara risiko dan imbalan dapat dilihat dengan jelas untuk membimbing pemilihan parameter.

Selain itu, stop dengan jumlah dolar dapat lebih mengontrol eksposur risiko aktual dibandingkan dengan stop tick tetap ketika volatilitas pasar berubah.

Analisis Risiko

Ada beberapa risiko dengan strategi stop loss dan take profit ini:

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

  2. Jika jarak mengambil keuntungan terlalu dekat, mungkin sulit untuk dicapai. Jika jarak mengambil keuntungan sangat kecil, akan sulit bagi tren satu sisi normal untuk mencapainya, membuat keuntungan tidak mungkin.

  3. Kontrak yang tepat harus dipilih. Jika kontrak nilai tiket tinggi seperti minyak mentah digunakan, stop loss dolar yang sama akan diterjemahkan ke tiket yang sangat kecil, yang dapat dengan mudah dihentikan oleh kebisingan.

Arahan Optimasi

Beberapa cara strategi ini dapat ditingkatkan:

  1. Sinyal masuk dapat ditingkatkan dengan menggabungkan tren, volatilitas, musiman, dll untuk entri waktu yang lebih baik.

  2. Persentase stop/profit yang tepat dapat dipilih berdasarkan produk yang berbeda. Stop yang lebih besar dapat digunakan pada komoditas yang sangat fluktuatif.

  3. Stop dapat beradaptasi dengan volatilitas, memperluas ketika volatilitas meningkat dan memperketat ketika volatilitas turun.

  4. Pendekatan stop/profit yang berbeda dapat digunakan untuk sesi perdagangan yang berbeda. Stop yang lebih ketat dapat digunakan selama sesi AS untuk mengurangi kemungkinan terjebak dalam whipsaws.

Kesimpulan

Strategi ini menerapkan stop loss intuitif dan mengambil keuntungan berdasarkan jumlah dolar. Keuntungannya adalah parameter intuitif dan kontrol modal. Kekurangannya adalah kemudahan tertangkap dalam pembalikan dan kehilangan keuntungan. Ini dapat ditingkatkan dengan meningkatkan entri, mengoptimalkan stop / target, memilih produk yang lebih baik dll untuk membuatnya 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 banyak