Strategi Stop Loss Dua Tahap

Penulis:ChaoZhang, Tanggal: 2023-10-25 18:11:30
Tag:

img

Gambaran umum

Ide utama dari strategi ini adalah untuk menetapkan dua target mengambil keuntungan dan memindahkan stop loss ke harga masuk setelah target pertama tercapai untuk menghindari stop loss hunting.

Logika Strategi

Strategi ini memasuki perdagangan berdasarkan Bollinger Bands dan indikator Stochastic.

Secara khusus, masuk logika adalah:

  1. Masukkan long ketika close berada di bawah Bollinger lower band dan Stochastic K melintasi di bawah D.

  2. Masuk short ketika close berada di atas Bollinger band atas dan Stochastic K melintasi di atas D.

Strategi menetapkan dua target keuntungan, TP1 ditetapkan pada 200 poin dan TP2 ditetapkan pada 500 poin.

Ketika harga bergerak dan TP1 dipicu, strategi akan memindahkan stop loss ke harga masuk. Ini mengunci keuntungan dari tahap pertama dan mencegah berburu stop loss.

Strategi ini menutup semua posisi ketika TP2 atau stop loss dipicu.

Analisis Keuntungan

Keuntungan terbesar dari pendekatan stop loss dua tahap ini adalah memungkinkan penguncian keuntungan sambil mencegah stop loss hunting.

Keuntungan lain adalah kombinasi Bollinger Bands untuk mengukur rentang volatilitas dan Stochastic untuk overbought / oversold membuat entri yang lebih akurat.

Analisis Risiko

Risiko utama berasal dari sinyal palsu potensial dari Bollinger Bands dan indikator Stochastic. rentang Bollinger yang salah dapat menyebabkan entri yang hilang atau sinyal yang buruk.

Ada juga risiko stop loss diburu lagi setelah pindah ke harga masuk.

Risiko ini dapat dikurangi dengan mengoptimalkan parameter untuk kedua indikator dan meningkatkan jarak antara stop loss.

Arahan Optimasi

Optimalisasi lebih lanjut untuk strategi ini:

  1. Uji kombinasi parameter yang berbeda untuk menemukan parameter Bollinger dan Stochastic yang optimal.

  2. Uji target profit/loss yang berbeda untuk menemukan konfigurasi yang ideal.

  3. Tambahkan indikator lain seperti moving average untuk membuat sistem multi-indikator untuk akurasi yang lebih tinggi.

  4. Penelitian alternatif stop loss posisi logika, seperti jarak tetap dari masuk bukan harga masuk itu sendiri.

  5. Meningkatkan kejadian gerakan stop loss menjadi 3 atau lebih tahap.

Kesimpulan

Strategi ini menggunakan Bollinger Bands dan Stochastic untuk entri, menetapkan dua target mengambil keuntungan, dan memindahkan stop loss ke entri setelah target pertama dicapai untuk membentuk stop loss dua tahap. Ini secara efektif mengunci keuntungan dan mencegah berburu stop loss. Strategi ini memiliki keuntungan yang jelas tetapi juga ruang untuk perbaikan melalui optimasi parameter, sistem multi-indikator, dan penyesuaian logika stop loss.


/*backtest
start: 2022-10-18 00:00:00
end: 2023-10-24 00:00:00
period: 1d
basePeriod: 1h
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/
// © fpsd4ve

//@version=5

// Add Bollinger Bands indicator (close, 20, 2) manually to visualise trading conditions
strategy("2xTP, SL to entry", 
     overlay=false,
     pyramiding=0,
     calc_on_every_tick=false,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=25,
     initial_capital=1000,
     commission_type=strategy.commission.percent,
     commission_value=0.01
     )

// PARAMETERS
// Assumes quote currency is FIAT as with BTC/USDT pair
tp1=input.float(200, title="Take Profit 1")
tp2=input.float(500, title="Take Profit 2")
sl=input.float(200, title="Stop Loss")
stOBOS = input.bool(true, title="Use Stochastic overbought/oversold threshold")

// Colors
colorRed = #FF2052
colorGreen = #66FF00


// FUNCTIONS
// Stochastic
f_stochastic() =>
    stoch = ta.stoch(close, high, low, 14)
    stoch_K = ta.sma(stoch, 3)
    stoch_D = ta.sma(stoch_K, 3)
    stRD = ta.crossunder(stoch_K, stoch_D)
    stGD = ta.crossover(stoch_K, stoch_D)
    [stoch_K, stoch_D, stRD, stGD]


// VARIABLES
[bbMiddle, bbUpper, bbLower] = ta.bb(close, 20, 2)
[stoch_K, stoch_D, stRD, stGD] = f_stochastic()


// ORDERS
// Active Orders
// Check if strategy has open positions
inLong = strategy.position_size > 0
inShort = strategy.position_size < 0
// Check if strategy reduced position size in last bar
longClose = strategy.position_size < strategy.position_size[1]
shortClose = strategy.position_size > strategy.position_size[1]

// Entry Conditions
// Enter long when during last candle these conditions are true:
// Candle high is greater than upper Bollinger Band
// Stochastic K line crosses under D line and is oversold
longCondition = stOBOS ?
     low[1] < bbLower[1] and stGD[1] and stoch_K[1] < 25 :
     low[1] < bbLower[1] and stGD[1]

// Enter short when during last candle these conditions are true:
// Candle low is lower than lower Bollinger Band
// Stochastic K line crosses over D line and is overbought
shortCondition = stOBOS ?
     high[1] > bbUpper[1] and stRD[1] and stoch_K[1] > 75 :
     high[1] > bbUpper[1] and stRD[1]

// Exit Conditions
// Calculate Take Profit 
longTP1 = strategy.position_avg_price + tp1
longTP2 = strategy.position_avg_price + tp2
shortTP1 = strategy.position_avg_price - tp1
shortTP2 = strategy.position_avg_price - tp2

// Calculate Stop Loss
// Initialise variables
var float longSL = 0.0
var float shortSL = 0.0

// When not in position, set stop loss using close price which is the price used during backtesting
// When in a position, check to see if the position was reduced on the last bar
// If it was, set stop loss to position entry price. Otherwise, maintain last stop loss value
longSL := if inLong and ta.barssince(longClose) < ta.barssince(longCondition)
    strategy.position_avg_price
else if inLong
    longSL[1]
else
    close - sl

shortSL := if inShort and ta.barssince(shortClose) < ta.barssince(shortCondition)
    strategy.position_avg_price
else if inShort
    shortSL[1]
else
    close + sl

// Manage positions
strategy.entry("Long", strategy.long, when=longCondition)
strategy.exit("TP1/SL", from_entry="Long", qty_percent=50, limit=longTP1, stop=longSL)
strategy.exit("TP2/SL", from_entry="Long", limit=longTP2, stop=longSL)

strategy.entry("Short", strategy.short, when=shortCondition)
strategy.exit("TP1/SL", from_entry="Short", qty_percent=50, limit=shortTP1, stop=shortSL)
strategy.exit("TP2/SL", from_entry="Short", limit=shortTP2, stop=shortSL)


// DRAW
// Stochastic Chart
plot(stoch_K, color=color.blue)
plot(stoch_D, color=color.orange)

// Circles
plot(stOBOS ? stRD and stoch_K >= 75 ? stoch_D : na : stRD ? stoch_D : na, color=colorRed, style=plot.style_circles, linewidth=3)
plot(stOBOS ? stGD and stoch_K <= 25 ? stoch_D : na : stGD ? stoch_K : na, color=colorGreen, style=plot.style_circles, linewidth=3)

// Levels
hline(75, linestyle=hline.style_dotted)
hline(25, linestyle=hline.style_dotted)

Lebih banyak