Strategi Trailing Breakout


Tanggal Pembuatan: 2023-10-17 16:36:49 Akhirnya memodifikasi: 2023-10-17 16:36:49
menyalin: 0 Jumlah klik: 690
1
fokus pada
1617
Pengikut

Strategi Trailing Breakout

Ringkasan

Strategi ini terutama menggunakan indikator Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary Options Binary

Prinsip Strategi

  1. Setting parameter untuk indikator channel channel channel, default period 20;

  2. Setting EMA Smooth Moving Average, dengan siklus default 200;

  3. Setel RRR, default 1.5;

  4. Setting break-back parameter, masing-masing multihead dan headless;

  5. Apakah tercatat sebagai titik tinggi atau titik rendah;

  6. Sinyal multihead: menghasilkan sinyal multihead jika terobosan sebelumnya adalah titik rendah, dan harga lebih tinggi dari tren atas Dongguan dan lebih tinggi dari garis rata-rata EMA;

  7. Sinyal kosong: menghasilkan sinyal kosong jika terobosan sebelumnya adalah titik tinggi dan harga berada di bawah rel bawah Dongguan dan di bawah garis rata-rata EMA;

  8. Setelah masuk ke posisi multihead, set stop loss untuk mundur 5 poin ke bawah rel Dongjian, stop loss untuk rasio risiko keuntungan kali stop loss;

  9. Setelah memasuki posisi kosong, set stop loss untuk Tang Chian naik rel mundur 5 poin, stop loss untuk risiko keuntungan rasio kali jarak stop loss.

Dengan cara ini, strategi yang menggabungkan penilaian tren dan operasi breakout, dapat secara berurutan, menangkap peluang periode yang lebih pendek dalam tren garis panjang. Sementara itu, pengaturan stop loss stop loss dapat mengontrol risiko keuntungan dari perdagangan tunggal.

Analisis Keunggulan

  1. Mengikuti tren garis panjang dan menghindari perdagangan berlawanan arah.

  2. Tangqian Channel sebagai indikator garis panjang, dikombinasikan dengan EMA linear filter, dapat lebih baik menilai arah tren.

  3. Sistem Stop Loss Control mengontrol setiap risiko dan membatasi kemungkinan kerugian.

  4. Mengoptimalkan rasio risiko-keuntungan, Anda dapat meningkatkan rasio kerugian, mengejar keuntungan ekstra.

  5. Pengaturan parameter pengembalian yang fleksibel, dapat menyesuaikan kombinasi parameter terbaik untuk pasar yang berbeda.

Analisis risiko

  1. Tangjian Channel dan EMA Linear digunakan sebagai indikator filter, dan mungkin akan memberikan sinyal yang salah.

  2. “Breakthrough trading mudah dibodohkan, perlu identify dan jelaskan latar belakang tren”.

  3. Stop loss adalah jarak yang tetap dan tidak dapat disesuaikan dengan tingkat fluktuasi pasar.

  4. Parameters Tidak ada ruang untuk mengoptimalkan, dan tidak ada jaminan bahwa itu akan berhasil.

  5. Sistem perdagangan tidak dapat bertahan dengan terlalu banyak peristiwa acak, dan Black Swan dapat menyebabkan kerugian yang lebih besar.

Arah optimasi

  1. Anda dapat mempertimbangkan untuk menambahkan lebih banyak indikator filter, seperti indikator getaran, untuk meningkatkan kualitas sinyal.

  2. Anda dapat mengatur Stop Loss Smart Stop Loss yang dapat menyesuaikan posisi Anda berdasarkan volatilitas pasar dan dinamika indikator ATR.

  3. Metode seperti pembelajaran mesin dapat digunakan untuk menguji dan mengoptimalkan parameter agar lebih dekat dengan pasar yang sebenarnya.

  4. Anda dapat mengoptimalkan logika masuk dan mengatur indikator VOLUME atau volatilitas sebagai kondisi tambahan untuk menghindari jebakan.

  5. Strategi ini dapat dipertimbangkan untuk dikombinasikan dengan strategi pelacakan tren atau pembelajaran mesin untuk membentuk strategi campuran dan meningkatkan stabilitas.

Meringkaskan

Strategi ini sebagai strategi pelacakan, ide utamanya adalah untuk mengetahui tren garis panjang, untuk melakukan operasi progresif dengan sinyal untuk menerobos, dan mengatur stop loss untuk mengendalikan risiko perdagangan tunggal. Strategi ini memiliki beberapa keuntungan, tetapi ada juga beberapa ruang untuk pengoptimalan. Secara keseluruhan, jika dapat menangani parameter yang baik, pengaturan pilihan waktu masuk, dan tambahan dengan teknologi lain, strategi ini dapat menjadi strategi pelacakan tren yang praktis.

Kode Sumber Strategi
/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Welcome to my second script on Tradingview with Pinescript
// First of, I'm sorry for the amount of comments on this script, this script was a challenge for me, fun one for sure, but I wanted to thoroughly go through every step before making the script public
// Glad I did so because I fixed some weird things and I ended up forgetting to add the EMA into the equation so our entry signals were a mess
// This one was a lot tougher to complete compared to my MACD crossover trend strategy but I learned a ton from it, which is always good and fun
// Also I'll explain the strategy and how I got there through some creative coding(I'm saying creative because I had to figure this stuff out by myself as I couldn't find any reference codes)
// First things first. This is a Donchian Channel Breakout strategy which follows the following rules
// If the price hits the upperband of the Donchian Channel + price is above EMA and the price previously hit the lowerband of the Donchian Channel it's a buy signal
// If the price hits the lowerband of the Donchian Channel + price is below EMA and the price prevbiously hit the upper band of the Donchian Channel it's a sell signal
// Stop losses are set at the lower or upper band with a 0.5% deviation because we are acting as if those two bands are the resistance in this case
// Last but not least(yes, this gave BY FAR the most trouble to code), the profit target is set with a 1.5 risk to reward ratio
// If you have any suggestions to make my code more efficient, I'll be happy to hear so from you
// So without further ado, let's walk through the code

// The first line is basically standard because it makes backtesting so much more easy, commission value is based on Binance futures fees when you're using BNB to pay those fees in the futures market
// strategy(title="Donchian Channels", shorttitle="DC", overlay=true, default_qty_type = strategy.cash, default_qty_value = 150, initial_capital = 1000, currency = currency.USD, commission_type = "percent", commission_value = 0.036)
// The built-in Donchian Channels + an added EMA input which I grouped with the historical bars from the Donchian Channels
length          = input(20, minval=1, group = "Indicators")
lower           = lowest(length)
upper           = highest(length)
basis           = avg(upper, lower)
emaInput        = input(title = "EMA Input", type = input.integer, defval = 200, minval = 10, maxval = 400, step = 1, group = "Indicators")
// I've made three new inputs, for risk/reward ratio and for the standard pullback deviation. My advise is to not use the pullback inputs as I'm not 100% sure if they work as intended or not
riskreward      = input(title = "Risk/Reward Ratio", type = input.float, defval = 1.50, minval = 0.01, maxval = 100, step = 0.01, group = "Risk/Reward")
pullbackLong    = input(title = "Distance from Long pullback %", type = input.float, defval = 0.995, minval = 0.001, maxval = 2, step = 0.001, group = "Risk/Reward")
pullbackShort   = input(title = "Distance from Short pullback %", type = input.float, defval = 1.005, minval = 0.001, maxval = 2, step = 0.001, group = "Risk/Reward")

// Input backtest range, you can adjust these in the input options, just standard stuff
fromMonth       = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12, group = "Backtest Date Range")
fromDay         = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31, group = "Backtest Date Range")
fromYear        = input(defval = 2000, title = "From Year",       type = input.integer, minval = 1970,           group = "Backtest Date Range")
thruMonth       = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12, group = "Backtest Date Range")
thruDay         = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31, group = "Backtest Date Range")
thruYear        = input(defval = 2099, title = "Thru Year",       type = input.integer, minval = 1970,           group = "Backtest Date Range")
// Date variable also standard stuff
inDataRange     = (time >= timestamp(syminfo.timezone, fromYear, fromMonth, fromDay, 0, 0)) and (time < timestamp(syminfo.timezone, thruYear, thruMonth, thruDay, 0, 0))

// I had to makes these variables because the system has to remember whether the previous 'breakout' was a high or a low
// Also, because I based my stoploss on the upper/lower band of the indicator I had to find a way to change this value just once without losing the value, that was added, on the next bar
var previousishigh = false
var previousislow = false
var longprofit = 0.0
var shortprofit = 0.0
var stoplossLong = 0.0
var stoplossShort = 0.0
// These are used as our entry variables
emaCheck = ema(close, emaInput)
longcond = high >= upper and close > emaCheck
shortcond = low <= lower and close < emaCheck

// With these two if statements I'm changing the boolean variable above to true, we need this to decide out entry position
if high >= upper
    previousishigh := true
if low <= lower
    previousislow := true

// Made a last minute change on this part. To clean up our entry signals we don't want our breakouts, while IN a position, to change. This way we do not instantly open a new position, almost always in the opposite direction, upon exiting one
if strategy.position_size > 0 or strategy.position_size < 0 
    previousishigh := false
    previousislow := false

// Strategy inputs
// Long - previous 'breakout' has to be a low, the current price has to be a new high and above the EMA, we're not allowed to be in a position and ofcourse it has to be within our given data for backtesting purposes
if previousislow == true and longcond and strategy.position_size == 0 and inDataRange
    strategy.entry("Long Entry", strategy.long, comment = "Entry Long")
    stoplossLong := lower * pullbackLong
    longprofit := ((((1 - stoplossLong / close) * riskreward) + 1) * close)
    strategy.exit("Long Exit", "Long Entry", limit = longprofit, stop = stoplossLong, comment = "Long Exit")

// Short - Previous 'breakout' has to be a high, current price has to be a new low and lowe than the 200EMA, we're not allowed to trade when we're in a position and it has to be within our given data for backtesting purposes
if previousishigh == true and shortcond and strategy.position_size == 0 and inDataRange
    strategy.entry("Short Entry", strategy.short, comment = "Entry Short")
    stoplossShort := upper * pullbackShort
    shortprofit := (close - ((((1 - close / stoplossShort) * riskreward) * close)))
    strategy.exit("Short Exit", "Short Entry", limit = shortprofit, stop = stoplossShort, comment = "Short Exit")
    
// This plots the Donchian Channels on the chart which is just using the built-in Donchian Channels
plot(basis, "Basis", color=color.blue)
u = plot(upper, "Upper", color=color.green)
l = plot(lower, "Lower", color=color.red)
fill(u, l, color=#0094FF, transp=95, title="Background")

// These plots are to show if the variables are working as intended, it's a mess I know but I didn't have any better ideas, they work well enough for me
// plot(previousislow ? close * 0.95 : na, color=color.red, linewidth=2, style=plot.style_linebr)
// plot(previousishigh ? close * 1.05 : na, color=color.green, style=plot.style_linebr)
// plot(longprofit, color=color.purple)
// plot(shortprofit, color=color.silver)
// plot(stoplossLong)
// plot(stoplossShort)
// plot(strategy.position_size)