Strategi Trading Jangka Pendek Berdasarkan Indikator Stochastic dengan Elastic Stop Loss

Penulis:ChaoZhang, Tanggal: 2023-09-28 10:45:41
Tag:

Gambaran umum

Strategi ini menggunakan indikator osilator Stochastic untuk menentukan kondisi pasar overbought dan oversold untuk perdagangan jangka pendek. Strategi ini berjalan panjang ketika ada salib emas pada indikator Stochastic, dan berjalan pendek pada salib kematian, dengan stop loss elastis berdasarkan titik pivot sebelumnya untuk mengamankan keuntungan sambil mengendalikan risiko.

Logika Strategi

Logika entri

Indikator osilator Stochastic terdiri dari garis %K dan garis %D. Ketika garis %K melintasi di atas garis %D, sinyal beli silang emas dihasilkan. Ketika garis %K melintasi di bawah garis %D, sinyal jual silang kematian dipicu. Strategi ini hanya mengikuti silang pada indikator Stochastic untuk menentukan entri.

Secara khusus, ketika ada golden cross pada indikator Stochastic, jika nilai %K kurang dari 80 (tidak overbought), posisi panjang akan diambil. Pada Stochastic death cross, jika nilai %K lebih besar dari 20 (tidak oversold), posisi pendek akan dimulai.

GoLong=crossover(k,d) and k<80
GoShort=crossunder(k,d) and k>20

Hentikan Logika Kerugian

Strategi ini menggunakan pendekatan stop loss elastis, menetapkan harga stop berdasarkan titik pivot sebelumnya, seperti yang ditunjukkan di bawah ini:

piv_high = pivothigh(high,1,1)
piv_low = pivotlow(low,1,1)

stoploss_long=valuewhen(piv_low,piv_low,0)
stoploss_short=valuewhen(piv_high,piv_high,0) 

Pivots mewakili level support dan resistance yang penting. Jika harga menembus level pivot, posisi akan ditutup dan harga stop loss akan elastik mengikuti perubahan titik pivot.

Selain itu, harga berhenti juga mempertimbangkan harga tertinggi dan terendah periode saat ini untuk optimalisasi lebih lanjut:

if GoLong
    stoploss_long := low<pl ? low : pl
if GoShort
    stoploss_short := high>ph ? high : ph

Keuntungan

  1. Menggunakan Stochastic untuk menghindari mengejar atas dan bawah;

  2. Stop loss elastis mengikuti perubahan pasar dan mengoptimalkan harga stop;

  3. Stop loss berdasarkan titik pivot breakout lebih efektif;

  4. Optimasi harga berhenti menggunakan harga tertinggi dan terendah saat ini membuat berhenti lebih tepat.

Risiko dan Solusi

  1. Risiko sinyal palsu dari Stochastic

    • Solusi: Konfirmasi sinyal dengan indikator lain untuk menghindari sinyal palsu
  2. Risiko stop loss terkena dan kerugian meningkat

    • Solusi: Kurangi jarak berhenti, atau gunakan metode seperti Chandelier Exit
  3. Risiko frekuensi perdagangan dan komisi yang tinggi

    • Solusi: Meredakan aturan masuk untuk mengurangi jumlah perdagangan

Arahan Optimasi

  1. Optimalkan stop loss, menggunakan metode seperti Chandelier Exit, trailing stop, oscillating stop loss dll

  2. Mengoptimalkan aturan masuk dengan indikator lain untuk menghindari sinyal Stochastic palsu

  3. Mengoptimalkan pengambilan keuntungan, menggunakan target laba yang tertinggal, target laba osilasi dll untuk meningkatkan profitabilitas

  4. Tambahkan ukuran posisi, seperti kuantitas tetap per perdagangan, persentase risiko tetap, dll untuk mengendalikan risiko per perdagangan

  5. Mengoptimalkan parameter seperti periode K, D, smoothing dll berdasarkan pasar yang berbeda

Ringkasan

Strategi ini masuk berdasarkan Stochastic overbought/oversold dan mengelola risiko dengan stop loss elastis. Ini memiliki keuntungan menghindari mengejar momentum, stop efektif, tetapi juga memiliki beberapa risiko sinyal palsu.


/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 2h
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/
// © Peter_O

//@version=4
//strategy(title="TradingView Alerts to MT4 MT5 example with cancelling pending orders", commission_type=strategy.commission.cash_per_order, commission_value=0.00003, overlay=true, default_qty_value=100000, initial_capital=1000)

// This script was created for educational purposes only.
// It is showing how to create pending orders and cancel them
// Together with syntax to send these events through TradingView alerts system
// All the way to brokers for execution

TakeProfitLevel=input(400)

// **** Entries logic **** {
periodK = 13 //input(13, title="K", minval=1)
periodD = 3 //input(3, title="D", minval=1)
smoothK = 4 //input(4, title="Smooth", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)
// plot(k, title="%K", color=color.blue)
// plot(d, title="%D", color=color.orange)
// h0 = hline(80)
// h1 = hline(20)
// fill(h0, h1, color=color.purple, transp=75)

GoLong=crossover(k,d) and k<80
GoShort=crossunder(k,d) and k>20
// } End of entries logic

// **** Pivot-points and stop-loss logic **** {
piv_high = pivothigh(high,1,1)
piv_low = pivotlow(low,1,1)
var float stoploss_long=low
var float stoploss_short=high

pl=valuewhen(piv_low,piv_low,0)
ph=valuewhen(piv_high,piv_high,0)

if GoLong 
    stoploss_long := low<pl ? low : pl
if GoShort 
    stoploss_short := high>ph ? high : ph
plot(stoploss_long, color=color.lime, title="stoploss_long")
plot(stoploss_short, color=color.red, title="stoploss_short")
// } End of Pivot-points and stop-loss logic

CancelLong=crossunder(low,stoploss_long) and strategy.position_size[1]<=0 and strategy.position_size<=0
CancelShort=crossover(high,stoploss_short) and strategy.position_size[1]>=0 and strategy.position_size>=0
entry_distance=input(10, title="Entry distance for stop orders")

plotshape(CancelLong ? stoploss_long[1]-10*syminfo.mintick : na, location=location.absolute, style=shape.labelup, color=color.gray, textcolor=color.white, text="cancel\nlong", size=size.tiny)
plotshape(CancelShort ? stoploss_short[1]+10*syminfo.mintick : na, location=location.absolute, style=shape.labeldown, color=color.gray, textcolor=color.white, text="cancel\nshort", size=size.tiny)

strategy.entry("Long", strategy.long, when=GoLong, stop=close+entry_distance*syminfo.mintick)
strategy.exit("XLong", from_entry="Long", stop=stoploss_long, profit=TakeProfitLevel)
strategy.cancel("Long", when = CancelLong)
strategy.entry("Short", strategy.short, when=GoShort, stop=close-entry_distance*syminfo.mintick)
strategy.exit("XShort", from_entry="Short", stop=stoploss_short, profit=TakeProfitLevel)
strategy.cancel("Short", when = CancelShort)

if GoLong
    alertsyntax_golong='long offset=' + tostring(entry_distance) + ' slprice=' + tostring(stoploss_long) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_golong, freq=alert.freq_once_per_bar_close)
if GoShort
    alertsyntax_goshort='short offset=' + tostring(-entry_distance) + ' slprice=' + tostring(stoploss_short) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_goshort, freq=alert.freq_once_per_bar_close)
if CancelLong
    alertsyntax_cancellong='cancel long'
    alert(message=alertsyntax_cancellong, freq=alert.freq_once_per_bar_close)
if CancelShort
    alertsyntax_cancelshort='cancel short'
    alert(message=alertsyntax_cancelshort, freq=alert.freq_once_per_bar_close)
    


Lebih banyak