Trend Penembusan Tinggi Kemarin Mengikuti Strategi

Penulis:ChaoZhang, Tarikh: 2023-10-08 14:06:55
Tag:

Ringkasan

Strategi ini beroperasi berdasarkan paras tertinggi pada hari dagangan sebelumnya, bekerja dalam mod trend.

Logika Strategi

  1. Gunakan fungsi LucF untuk mengelakkan kecenderungan di belakang ujian.

  2. Mengenal pasti sama ada hari dagangan baru dibuka.

  3. Bandingkan tinggi semasa dengan max_today, kemas kini max_today jika melebihi.

  4. Bandingkan rendah semasa dengan min_today, mengemas kini min_today jika dilanggar.

  5. Menggambar hari dagangan sebelumnya's tahap tinggi dan rendah.

  6. Tetapkan titik kemasukan pada pecah daripada hari sebelumnyas tinggi, GAP boleh ditambah untuk memajukan atau menangguhkan kemasukan.

  7. Set stop loss peratusan sl dan mengambil keuntungan peratusan tp.

  8. Pergi panjang apabila harga memecahkan hari dagangan sebelumnya.

  9. Tetapkan harga stop loss dan ambil harga keuntungan.

  10. Pilihan membolehkan penghentian kehilangan, dengan tahap pengaktifan dan jarak offset.

  11. Pilihan penutupan perdagangan berdasarkan silang EMA.

Analisis Kelebihan

Strategi trend berikut yang mudah ini mempunyai kelebihan berikut:

  1. Generasi isyarat yang jelas dan mudah dilaksanakan.

  2. Penembusan daripada hari sebelumnya memberikan pengesahan trend, mengurangkan whipsaws.

  3. Parameter GAP membolehkan penyesuaian kepekaan masuk.

  4. Risiko keseluruhan dikawal dengan stop loss yang jelas.

  5. Hentian pengangkutan boleh digunakan untuk mengunci lebih banyak keuntungan.

  6. EMA crossover mengelakkan terperangkap dalam downtrends.

Analisis Risiko

Terdapat beberapa risiko yang perlu diperhatikan:

  1. Kegagalan melarikan diri boleh menyebabkan kerugian.

  2. Memerlukan pasaran yang berlarian, mungkin dalam keadaan yang berbeza.

  3. Penghentian yang tidak betul boleh dihentikan sebelum waktunya.

  4. Pilihan parameter EMA yang buruk boleh menjadikannya terlalu sensitif atau tertinggal.

  5. Pelbagai pembolehubah perlu disesuaikan seperti GAP, stop loss, trailing stop dan lain-lain.

Peluang Peningkatan

Beberapa cara untuk mengoptimumkan lagi strategi:

  1. Menggunakan stop loss dinamik berdasarkan ATR atau trend.

  2. Tambah penapis untuk penyemburan yang sah menggunakan penyimpangan standard.

  3. Tambah keadaan turun naik untuk mengelakkan pecah palsu di pasaran bergelombang.

  4. Mengoptimumkan parameter EMA untuk isyarat yang lebih kuat.

  5. Sempurnakan parameter penangguhan yang sesuai dengan turun naik pasaran.

  6. Uji ketahanan parameter di instrument yang berbeza.

  7. Tambah mekanisme saiz kedudukan dinamik.

Kesimpulan

Strategi ini adalah mudah dan praktikal sebagai sistem trend berikut tipikal berdasarkan penembusan tinggi hari sebelumnya. Pengurusan risiko bergantung pada stop loss terutamanya. Dengan penyesuaian parameter yang betul, ia boleh berfungsi dengan baik dalam keadaan trend. Tetapi stop loss dan penapis yang betul diperlukan untuk mengelakkan whipsaws. Rangka kerja boleh ditingkatkan lagi sebagai asas untuk strategi trend berikut.


/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-07 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
// © TheSocialCryptoClub

//@version=5

strategy("Yesterday's High", overlay=true, pyramiding = 1,
         initial_capital=10000, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=10,
         slippage=1, backtest_fill_limits_assumption=1, use_bar_magnifier=true,
         commission_type=strategy.commission.percent, commission_value=0.075
         )

// -----------------------------------------------------------------------------
// ROC Filter
// -----------------------------------------------------------------------------

// f_security function by LucF for PineCoders available here: https://www.tradingview.com/script/cyPWY96u-How-to-avoid-repainting-when-using-security-PineCoders-FAQ/
f_security(_sym, _res, _src, _rep) => request.security(_sym, _res, _src[not _rep and barstate.isrealtime ? 1 : 0])[_rep or barstate.isrealtime ? 0 : 1]
high_daily = f_security(syminfo.tickerid, "D", high, false)

roc_enable = input.bool(false, "", group="ROC Filter from CloseD", inline="roc")
roc_threshold = input.float(1, "Treshold", step=0.5, group="ROC Filter from CloseD", inline="roc")

closed = f_security(syminfo.tickerid,"1D",close, false)
roc_filter= roc_enable ? (close-closed)/closed*100  > roc_threshold  : true


// -----------------------------------------------------------------------------
// Trigger Point 
// -----------------------------------------------------------------------------

open_session = ta.change(time('D'))
price_session = ta.valuewhen(open_session, open, 0)
tf_session = timeframe.multiplier <= 60

bgcolor(open_session and tf_session ?color.new(color.blue,80):na, title = "Session")

first_bar = 0
if open_session
    first_bar := bar_index

var max_today = 0.0
var min_today = 0.0
var high_daily1 = 0.0
var low_daily1 = 0.0
var today_open = 0.0

if first_bar
    high_daily1 := max_today
    low_daily1 := min_today
    today_open := open
    max_today := high
    min_today := low


if high >= max_today
    max_today := high

if low < min_today
    min_today := low


same_day  = today_open == today_open[1]

plot( timeframe.multiplier <= 240 and same_day ? high_daily1 : na, color= color.yellow , style=plot.style_linebr, linewidth=1, title='High line')
plot( timeframe.multiplier <= 240 and same_day ? low_daily1 : na, color= #E8000D , style=plot.style_linebr, linewidth=1, title='Low line')

// -----------------------------------------------------------------------------
// Strategy settings 
// -----------------------------------------------------------------------------

Gap = input.float(1,"Gap%", step=0.5, tooltip="Gap di entrata su entry_price -n anticipa entrata, con +n posticipa entrata", group = "Entry")
Gap2 = (high_daily1 * Gap)/100

sl  = input.float(3, "Stop-loss", step= 0.5,  group = "Entry")
tp  = input.float(9, "Take-profit", step= 0.5, group = "Entry")
stop_loss_price = strategy.position_avg_price * (1-sl/100)
take_price = strategy.position_avg_price * (1+tp/100)

sl_trl = input.float(2, "Trailing-stop", step = 0.5, tooltip = "Attiva trailing stop dopo che ha raggiunto...",group = "Trailing Stop Settings")//group = "Trailing Stop Settings")
Atrl= input.float(1, "Offset Trailing", step=0.5,tooltip = "Distanza dal prezzo", group = "Trailing Stop Settings")
stop_trl_price_cond = sl_trl * high/syminfo.mintick/100
stop_trl_price_offset_cond = Atrl * high/syminfo.mintick/100

stop_tick = sl * high/syminfo.mintick/100
profit_tick = tp * high/syminfo.mintick/100

mess_buy = "buy"
mess_sell = "sell"

// -----------------------------------------------------------------------------
// Entry - Exit - Close
// -----------------------------------------------------------------------------

if close < high_daily1 and roc_filter
    strategy.entry("Entry", strategy.long, stop = high_daily1 + (Gap2), alert_message = mess_buy)

ts_n  = input.bool(true, "Trailing-stop", tooltip = "Attiva o disattiva trailing-stop", group = "Trailing Stop Settings")
close_ema = input.bool(false, "Close EMA", tooltip = "Attiva o disattiva chiusura su EMA", group = "Trailing Stop Settings")
len1 = input.int(10, "EMA length", step=1, group = "Trailing Stop Settings")
ma1 = ta.ema(close, len1)

plot(ma1, title='EMA', color=color.new(color.yellow, 0))

if ts_n == true
    strategy.exit("Trailing-Stop","Entry",loss= stop_tick, stop= stop_loss_price, limit= take_price, trail_points = stop_trl_price_cond, trail_offset = stop_trl_price_offset_cond, comment_loss="Stop-Loss!!",comment_profit ="CASH!!", comment_trailing = "TRL-Stop!!", alert_message = mess_sell)
else
    strategy.exit("TP-SL", "Entry",loss= stop_tick, stop=stop_loss_price, limit= take_price, comment_loss= "Stop-loss!!!", comment_profit = "CASH!!", alert_message = mess_sell)

if close_ema == true and ta.crossunder(close,ma1)
    strategy.close("Entry",comment = "Close" , alert_message = mess_sell)



Lebih lanjut