Trend Breakout - Strategi Bayangan Panjang

Penulis:ChaoZhang, Tarikh: 2023-11-15 16:43:17
Tag:

img

Strategi ini menilai arah trend semasa dengan mengira nisbah panjang bayangan bullish / bearish, dan mengenal pasti trend dengan penunjuk ATR. Ia membuka kedudukan terbalik pada titik pecah dan menetapkan stop loss dan mengambil keuntungan untuk menangkap trend jangka pendek.

Logika Strategi

Strategi ini terutamanya menilai trend semasa dengan mengira nisbah bayangan bullish/bearish.

Logiknya ialah:

  1. Mengira bayangan bearish: dekat - rendah
  2. Mengira bayangan bullish: tinggi - terbuka
  3. Ambil maksimum bayangan bearish dan bullish sebagai panjang bayangan
  4. Mengira panjang badan lilin: tinggi - rendah
  5. Mengira nisbah antara bayangan dan panjang badan
  6. Jika nisbah > 0.5 dan menurun > menaik, menilai trend menurun dan kedudukan panjang
  7. Jika nisbah > 0.5 dan bullish > bearish, menilai trend menaik dan kedudukan pendek
  8. Memvalidasi pecah dengan panjang lilin > 0.75 * ATR
  9. Tetapkan stop loss dan mengambil keuntungan selepas masuk, dengan nisbah 2: 1

Di atas adalah logik perdagangan asas, mengenal pasti titik pecah terbalik dengan pengesanan trend dan mengoptimumkan keuntungan dengan henti rugi / mengambil keuntungan.

Kelebihan

  1. Rasio bayangan dengan tepat menilai trend
  2. ATR menyaring isyarat kabur palsu
  3. Stop loss dan mengambil keuntungan menguruskan risiko
  4. Nisbah risiko-balasan 2: 1 memenuhi standard perdagangan kuant
  5. Sesuai untuk dagangan jangka pendek pada stok volatiliti tinggi
  6. Logik yang mudah dan mudah difahami.

Risiko

  1. Volatiliti harga boleh menjejaskan stop loss dan meningkatkan kerugian
  2. Prestasi sangat bergantung pada penyesuaian parameter
  3. Pembalikan trend boleh membawa kepada kerugian
  4. Peningkatan stop loss/take profit boleh meningkatkan kemungkinan kerugian
  5. Kegagalan keluar boleh menyebabkan kerugian besar.

Risiko boleh diuruskan dengan stop loss yang munasabah, pengoptimuman parameter, dan keluar kedudukan tepat pada masanya.

Peningkatan

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Mengoptimumkan parameter nisbah bayangan untuk nilai terbaik
  2. Mengoptimumkan parameter ATR untuk panjang lilin terbaik
  3. Mengoptimumkan pekali stop loss/take profit untuk risiko-balasan yang optimum
  4. Tambah saiz kedudukan seperti peningkatan kedudukan secara beransur-ansur
  5. Tambah stop loss untuk perlindungan keuntungan
  6. Tambah penunjuk lain kepada isyarat penapis
  7. Mengoptimumkan tempoh masa backtest dan menguji peringkat pasaran yang berbeza

Dengan pengujian dan pengoptimuman pelbagai aspek, prestasi strategi dapat dimaksimumkan.

Secara keseluruhan, strategi ini mendapat keuntungan daripada turun naik harga jangka pendek melalui pengenalan trend dan pengurusan risiko. Apabila dioptimumkan, ia boleh menjadi strategi pecah jangka pendek yang kukuh untuk perdagangan kuant.


/*backtest
start: 2022-11-08 00:00:00
end: 2023-11-14 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/
// © ondrej17

//@version=4
strategy("longWickstrategy", overlay=true )
 
// Inputs
st_yr_inp = input(defval=2020, title='Backtest Start Year')
st_mn_inp = input(defval=01, title='Backtest Start Month')
st_dy_inp = input(defval=01, title='Backtest Start Day')
en_yr_inp = input(defval=2025, title='Backtest End Year')
en_mn_inp = input(defval=01, title='Backtest End Month')
en_dy_inp = input(defval=01, title='Backtest End Day')
sltp_inp = input(defval=0.8, title='N - % offset for N*SL and (2N)*TP')/100
 
// Dates
start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00)
end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00)
canTrade = time >= start and time <= end
// Indicators Setup


 
// Strategy Calcuations
lowerWick = (open > close) ? close-low : open - low
upperWick = (open > close) ? high-open : high-close
wickLength = max(lowerWick,upperWick)
candleLength = high-low
wickToCandleRatio = wickLength / candleLength
entryFilterCandleLength = candleLength > 0.75*atr(48)


// Entries and Exits
 
longCondition = entryFilterCandleLength and wickToCandleRatio > 0.5 and lowerWick > upperWick and canTrade and strategy.position_size == 0
shortCondition = entryFilterCandleLength and wickToCandleRatio > 0.5 and lowerWick < upperWick and canTrade and strategy.position_size == 0

strategy.entry("pendingLong", strategy.long, limit=low+wickLength/2, when = longCondition)
strategy.entry("pendingShort", strategy.short, limit=high-wickLength/2, when = shortCondition)

longStop = strategy.position_size > 0 ? strategy.position_avg_price*(1-sltp_inp) : na
longTP = strategy.position_size > 0 ? strategy.position_avg_price*(1+2*sltp_inp) : na
shortStop = strategy.position_size < 0 ? strategy.position_avg_price*(1+sltp_inp) : na
shortTP = strategy.position_size < 0 ? strategy.position_avg_price*(1-2*sltp_inp) : na

strategy.exit("longSLTP","pendingLong", stop=longStop, limit = longTP)
strategy.exit("shortSLTP","pendingShort", stop=shortStop, limit = shortTP)  
 

plot(longStop, color=color.red, style=plot.style_linebr, linewidth=2)
plot(shortStop, color=color.red, style=plot.style_linebr, linewidth=2)
plot(longTP, color=color.green, style=plot.style_linebr, linewidth=2)
plot(shortTP, color=color.green, style=plot.style_linebr, linewidth=2)

plotLongCondition = longCondition ? high+abs(open-close) : na
plot(plotLongCondition, style=plot.style_circles, linewidth=4, color=color.green)
plotShortCondition = shortCondition ? high+abs(open-close) : na
plot(plotShortCondition, style=plot.style_circles, linewidth=4, color=color.red)



Lebih lanjut