Menjejaki strategi tinggi semalam


Tarikh penciptaan: 2023-10-08 14:06:55 Akhirnya diubah suai: 2023-10-08 14:06:55
Salin: 0 Bilangan klik: 757
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini beroperasi berdasarkan harga tertinggi pada hari perdagangan sebelumnya dan merupakan strategi jenis trend-following. Ia akan membuka lebih banyak kedudukan apabila harga tertinggi pada hari perdagangan sebelumnya telah dilanggar, dan ia akan membuka kedudukan berulang walaupun terdapat beberapa pelanggaran pada hari itu.

Prinsip Strategi

  1. Menggunakan fungsi LucF untuk mengelakkan pengesanan balik.

  2. Menentukan sama ada hari perdagangan baru dibuka. Catat harga tertinggi max_today dan harga terendah min_today.

  3. Bandingkan harga tertinggi semasa high dan max_today, kemas kini max_today。

  4. Bandingkan harga terendah semasa low dan min_today, kemas kini min_today。

  5. Lukis harga tertinggi dan terendah pada hari dagangan sebelumnya.

  6. Menetapkan titik pembukaan kedudukan apabila harga tertinggi hari perdagangan sebelumnya telah dilanggar, anda boleh menambah GAP pada harga tertinggi untuk menunda atau memulakannya.

  7. Tetapkan nisbah stop loss sl dan nisbah stop loss tp

  8. Apabila harga melepasi harga tertinggi pada hari perdagangan sebelumnya, anda boleh membuka kedudukan tambahan.

  9. Tetapkan titik henti dan titik berhenti.

  10. Anda boleh memilih untuk mengaktifkan Tracking Stop, menetapkan keperluan minimum untuk memulakan Tracking Stop, dan jarak Tracking Stop.

  11. Anda boleh memilih sama ada anda mahu menutup EMA anda.

Analisis kelebihan

Ini adalah strategi trend-following yang agak mudah dan mempunyai kelebihan:

  1. Isyarat strategi mudah difahami dan mudah dilaksanakan.

  2. Dengan menggunakan isyarat pengesahan trend yang terbentuk selepas harga tertinggi pada hari perdagangan sebelumnya, ia boleh menyaring bunyi pasaran yang bergoyang dengan berkesan.

  3. Sensitiviti penyertaan boleh disesuaikan dengan parameter GAP.

  4. Secara keseluruhannya, risiko boleh dikawal, dan stop loss jelas.

  5. Anda boleh memilih untuk menggunakan Tracking Stop untuk mengunci lebih banyak keuntungan.

  6. Ia boleh digabungkan dengan penilaian EMA untuk mengelakkan pemotongan.

Analisis risiko

Strategi ini juga mempunyai risiko yang perlu diperhatikan:

  1. Kegagalan untuk menembusi boleh menyebabkan kerugian dan perlu menetapkan harga henti rugi yang munasabah.

  2. Kesan penembusan bergantung kepada keadaan pasaran yang sedang tren dan mudah ditarik dalam keadaan pasaran yang bergolak.

  3. Tracking Stop Loss mungkin terlalu sensitif jika tidak ditetapkan dengan betul, dan boleh disesuaikan dengan harga yang kecil.

  4. EMA mungkin terlalu sensitif atau lambat jika parameter dipilih dengan tidak betul.

  5. Lebih banyak pembolehubah yang perlu diperhatikan dan dioptimumkan, seperti GAP, amplitudo hentian, dan seting hentian pengesanan.

Arah pengoptimuman

Strategi ini boleh terus dioptimumkan dalam beberapa aspek:

  1. Mengubah Stop Loss dari Nilai Tetap ke ATR atau Trend Stop Loss Dinamis

  2. Menambah kebolehan penembusan melalui penapis standard.

  3. Menambah syarat berdasarkan kadar turun naik untuk mengelakkan terobosan yang tidak berkesan dalam keadaan gegaran.

  4. Optimumkan parameter EMA untuk membuat keputusan yang lebih stabil dan tepat.

  5. Mengoptimumkan parameter untuk mengesan kerugian sehingga lebih sesuai dengan ketinggian turun naik pasaran.

  6. Uji kekuatan parameter pelbagai jenis.

  7. Menambah mekanisme untuk menyesuaikan saiz kedudukan secara dinamik.

ringkaskan

Strategi ini secara keseluruhannya lebih mudah dan praktikal, dan merupakan strategi trend-following yang tipikal, penembusan harga tertinggi pada hari dagangan sebelumnya sebagai isyarat untuk mengikuti trend, kawalan risiko terutamanya bergantung pada berhenti. Dengan pengoptimuman parameter yang munasabah, strategi ini dapat memberikan kesan yang lebih baik dalam keadaan trend. Tetapi perlu berhati-hati untuk mengawal strategi berhenti dan syarat penapisan, untuk mengelakkan terjebak dalam keadaan gegaran.

Kod 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)