Melacak strategi tinggi kemarin


Tanggal Pembuatan: 2023-10-08 14:06:55 Akhirnya memodifikasi: 2023-10-08 14:06:55
menyalin: 0 Jumlah klik: 757
1
fokus pada
1617
Pengikut

Ringkasan

Strategi ini beroperasi berdasarkan harga tertinggi pada hari perdagangan sebelumnya dan merupakan strategi jenis trend-following. Strategi ini akan membuka posisi lebih banyak ketika harga melampaui harga tertinggi pada hari perdagangan sebelumnya dan akan membuka posisi berulang bahkan jika ada beberapa penembusan pada hari itu.

Prinsip Strategi

  1. Fungsi LucF digunakan untuk menghindari retesting dengan mengintip garis K terbaru.

  2. Periksa apakah hari perdagangan baru dibuka. Catat harga tertinggi max_today dan harga terendah min_today.

  3. Bandingkan harga high dan max_today saat ini, update max_today。

  4. Perbandingan harga minimum low dan min_today, update min_today。

  5. Gambar harga tertinggi dan terendah pada hari perdagangan sebelumnya.

  6. Untuk mengatur titik buka posisi saat harga tertinggi pada hari perdagangan sebelumnya terpecah, Anda dapat menambahkan GAP pada harga tertinggi untuk menunda atau mempercepat masuk.

  7. Set Stop Loss Ratio Sl dan Stop Stop Ratio TP

  8. Jika harga telah melampaui harga tertinggi pada hari perdagangan sebelumnya, maka Anda akan membuka posisi lebih besar.

  9. Tetapkan Stop Loss dan Stop Stop

  10. Anda dapat memilih apakah Anda akan mengaktifkan tracking stop loss, mengatur persyaratan minimum untuk memulai tracking stop loss, dan jarak tracking stop loss.

  11. Anda dapat memilih untuk mengetahui status EMA saat Anda menutup.

Analisis Keunggulan

Ini adalah strategi pelacakan tren yang relatif sederhana, dengan keuntungan sebagai berikut:

  1. Sinyal-sinyal strategi yang jelas dan mudah untuk diterapkan.

  2. Dengan menggunakan sinyal konfirmasi tren yang terbentuk dari terobosan harga tertinggi pada hari perdagangan sebelumnya, Anda dapat secara efektif menyaring kebisingan pasar yang bergoyang.

  3. Sensitivitas masuk dapat disesuaikan dengan parameter GAP.

  4. Secara keseluruhan risiko dapat dikendalikan, dan stop loss jelas.

  5. Anda dapat memilih untuk menggunakan tracking stop loss untuk mengunci lebih banyak keuntungan.

  6. Ini bisa dikombinasikan dengan penilaian EMA untuk menghindari terjun payung.

Analisis risiko

Strategi ini juga memiliki beberapa risiko yang perlu diperhatikan:

  1. Kegagalan penembusan dapat menyebabkan kerugian dan perlu menetapkan harga stop loss yang masuk akal.

  2. Efektivitas terobosan bergantung pada pasar yang sedang tren dan mudah dibungkus di pasar yang bergolak.

  3. Tracking Stop Loss mungkin terlalu sensitif jika tidak diatur dengan benar, dan dapat disesuaikan dengan harga yang lebih kecil.

  4. EMA menilai jika pilihan parameter tidak tepat juga bisa terlalu sensitif atau lambat.

  5. Ada banyak variabel yang perlu diperhatikan dan dioptimalkan, seperti GAP, stop loss amplitudo, tracking stop loss setting, dan lain sebagainya.

Arah optimasi

Strategi ini dapat terus dioptimalkan dalam beberapa hal:

  1. Stop loss yang disesuaikan dari nilai tetap menjadi ATR atau stop loss yang dinamis.

  2. Meningkatkan efektivitas terobosan melalui penyaringan standar

  3. Menambahkan kondisi berdasarkan volatilitas untuk menghindari terobosan tidak efektif dari tren gempa.

  4. Optimalkan parameter EMA untuk membuat penilaian lebih stabil dan akurat.

  5. Optimalkan parameter untuk melacak stop loss agar lebih sesuai dengan volatilitas pasar.

  6. Uji kekuatan parameter dari berbagai varietas.

  7. Menambahkan mekanisme untuk menyesuaikan ukuran posisi secara dinamis.

Meringkaskan

Strategi ini secara keseluruhan relatif sederhana dan praktis, dan merupakan strategi pelacakan tren yang khas. Penembusan harga tertinggi pada hari perdagangan sebelumnya digunakan sebagai sinyal untuk melacak tren, dan pengendalian risiko terutama bergantung pada stop loss. Dengan optimasi parameter yang masuk akal, strategi ini dapat memberikan efek yang lebih baik dalam situasi tren.

Kode Sumber Strategi
/*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)