Strategi High Breakout kemarin

Penulis:ChaoZhang, Tanggal: 2023-11-06 10:49:57
Tag:

img

Gambaran umum

Strategi Breakout Tinggi Kemarin adalah sistem mengikuti tren yang berlangsung lama ketika harga menembus di atas level tertinggi kemarin, bahkan jika breakout terjadi beberapa kali dalam sehari.

Prinsip

Strategi ini menggunakan beberapa indikator teknis untuk sinyal masuk dan keluar:

  • ROC Filter - Strategi hanya diaktifkan ketika penutupan hari ini memiliki perubahan harga persentase di atas ambang dibandingkan dengan penutupan hari sebelumnya.

  • Trigger Point - Rekor harga tinggi, rendah dan terbuka hari ini.

  • Kondisi masuk dan keluar - Setelah masuk, persentase stop loss dan take profit ditetapkan. Trailing stop dapat diaktifkan untuk mengunci keuntungan. Keluar bersyarat ketika harga turun di bawah EMA referensi.

  • Konfigurasi - Gap persentase untuk mengantisipasi atau menunda masuk.

Secara khusus, ini melacak harga tinggi hari ini untuk sinyal masuk. Masuk panjang ketika harga pecah di atas harga tinggi hari ini. Kemudian stop loss dan take profit exit diatur, dengan trailing stop diaktifkan. Alternatif exit ketika harga melintasi di bawah EMA yang diberikan. Optimasi dengan mengatur persentase kesenjangan, menyesuaikan stop loss dan take profit rasio untuk mengendalikan risiko, memungkinkan trailing stop untuk mengunci keuntungan.

Analisis Keuntungan

Keuntungan dari strategi ini:

  • Mengikuti tren, menangkap keuntungan dari gerakan tren.

  • Strategi Breakout memberikan sinyal masuk yang jelas.

  • Mempertimbangkan harga hari ini tinggi, menghindari entri berturut-turut.

  • Hentikan kerugian dan ambil keuntungan membantu pengendalian risiko.

  • Mengemudi berhenti kunci dalam keuntungan.

  • Waktu masuk dapat disetel dengan optimasi parameter untuk mengendalikan risiko.

  • Sederhana dan intuitif, mudah dimengerti dan diterapkan.

  • Berlaku untuk perdagangan panjang dan pendek.

Analisis Risiko

Risiko yang harus dipertimbangkan:

  • Strategi breakout rentan terhadap whipsaws. Harga dapat segera berbalik setelah masuk.

  • Hanya efektif untuk pasar tren, berkinerja buruk dalam kondisi berkisar.

  • Persentase stop loss yang wajar diperlukan, terlalu luas dapat meningkatkan kerugian.

  • Persentase kesenjangan yang wajar diperlukan, terlalu agresif dapat meningkatkan kerugian.

  • Penarikan palsu dapat menyebabkan kerugian yang tidak perlu, tuning diperlukan.

  • Volume perlu mendukung mengikuti melalui setelah breakout.

  • Konsistensi yang dibutuhkan antara parameter di seluruh kerangka waktu.

Arahan Optimasi

Optimasi yang mungkin:

  • Tambahkan indikator lain seperti volume, volatilitas untuk menghindari whipsaws selama pasar berkisar.

  • Tambahkan indikator penyesuaian kurva untuk menentukan kekuatan tren, hindari tren palsu.

  • Optimasi dinamis dari kesenjangan masuk berdasarkan volatilitas pasar.

  • Optimalisasi dinamis dari stop loss dan mengambil keuntungan mengikuti kondisi pasar.

  • Set parameter yang berbeda untuk simbol dan kerangka waktu yang berbeda.

  • Machine learning untuk TEST dampak parameter pada kinerja strategi.

  • Tambahkan fungsi Options untuk mengoptimalkan konfigurasi.

  • Kelayakan penelitian dalam kondisi pasar yang berbeda.

  • Mengembangkan strategi lintas jangka waktu dan multi-aset.

Kesimpulan

Strategi ini menawarkan kinerja yang layak selama pasar tren berdasarkan pemecahan konsep tinggi kemarin. Tetapi risiko whipsaw dan kesulitan optimasi parameter ada. Optimasi lebih lanjut mungkin dengan menambahkan penilaian, penyesuaian parameter dinamis, perluasan ke strategi gabungan dll. Secara keseluruhan cocok untuk tren jangka pendek berikut, tetapi pengendalian risiko dan penyesuaian parameter diperlukan.


/*backtest
start: 2023-10-06 00:00:00
end: 2023-11-05 00:00:00
period: 1h
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/
// Author: © tumiza 999 
// © TheSocialCryptoClub

//@version=5

strategy("Yesterday's High v.17.07", 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 banyak