Strategi Penapis Purata Pergerakan Dewan


Tarikh penciptaan: 2024-01-04 15:16:34 Akhirnya diubah suai: 2024-01-04 15:16:34
Salin: 0 Bilangan klik: 623
1
fokus pada
1621
Pengikut

Strategi Penapis Purata Pergerakan Dewan

Gambaran keseluruhan

Strategi ini menggunakan kedua-dua purata bergerak Hall jangka pendek dan jangka panjang untuk menghasilkan dan menapis isyarat perdagangan. Purata bergerak Hall jangka pendek digunakan untuk menghasilkan isyarat, sementara purata bergerak Hall jangka panjang digunakan untuk menapis isyarat, dan isyarat perdagangan hanya dihasilkan apabila rata-rata Hall jangka pendek dan rata-rata Hall jangka panjang berubah secara sinonim.

Strategi ini menggunakan penunjuk ATR untuk menetapkan stop loss dan stop loss pada masa yang sama. Setiap kali anda membuka kedudukan, anda akan secara dinamik menetapkan stop loss dan stop loss untuk kedudukan semasa berdasarkan nilai ATR.

Prinsip Strategi

Purata bergerak Hall jangka pendek digunakan untuk menangkap trend dan titik perubahan harga dalam jangka pendek. Apabila arah purata bergerak Hall jangka pendek berubah, menunjukkan perubahan trend harga dalam jangka pendek.

Purata bergerak Hall jangka panjang digunakan untuk menentukan pergerakan harga secara keseluruhan. Sebagai contoh, apabila arah purata bergerak Hall jangka panjang meningkat, ia menunjukkan bahawa harga berada dalam trend kenaikan secara keseluruhan.

Satu isyarat perdagangan hanya akan dihasilkan apabila pergerakan rata-rata bergerak Hall jangka pendek bertukar, dan arah peralihan yang sama dengan arah pergerakan keseluruhan rata-rata bergerak Hall jangka panjang. Iaitu, hanya apabila harga bergerak dalam arah yang sama dengan pergerakan pergerakan keseluruhan, isyarat perdagangan hanya akan dibuat. Ini dapat menyaring isyarat yang salah yang disebabkan oleh bunyi pasaran jangka pendek.

Selepas kedudukan dibuka, titik hentian dan penutupan akan ditetapkan berdasarkan saiz penunjuk ATR. Penunjuk ATR dapat mencerminkan tahap turun naik dan tahap risiko pasaran. Kedudukan hentian akan diletakkan di bawah titik rendah harga, sementara kedudukan berhenti akan diletakkan di atas titik tinggi harga, dan semuanya akan dilampirkan dengan nilai ATR.

Analisis kelebihan

Strategi ini menggabungkan isyarat jangka pendek dan penapisan jangka panjang untuk mengenal pasti trend harga jangka menengah dengan berkesan dan menangkap titik-titik perubahan tepat pada masanya. Ia dapat mengurangkan kemungkinan untuk ditipu oleh bunyi pasaran berbanding dengan indikator seperti purata bergerak tunggal.

Mengubah kedudukan hentian kerugian secara dinamik, anda boleh menetapkan hentian kerugian yang munasabah mengikut tahap turun naik pasaran, mengelakkan terlalu radikal dan mengurangkan risiko kerugian sambil menjamin keuntungan.

Dengan menggunakan kelebihan purata bergerak Hall, pergerakan harga dapat dinilai dengan lebih fleksibel dan tepat, dan mempunyai prestasi pengesanan yang lebih kuat daripada purata bergerak biasa.

Analisis risiko

Strategi ini bergantung kepada persilangan dua purata bergerak Hall dalam jangka pendek dan jangka panjang sebagai isyarat, dan jika persilangan palsu antara dua purata bergerak berlaku, ia boleh menyebabkan masuk yang salah. Dalam kes ini, anda perlu memutuskan sama ada anda akan memfilter isyarat berdasarkan struktur pasaran jangka panjang.

Dalam keadaan yang bergolak, harga mungkin bergolak berulang-ulang dalam rangkaian perdagangan yang lebih kecil, yang akan meningkatkan kadar kesilapan isyarat dan meningkatkan kemungkinan perdagangan yang tidak penting. Dalam kes ini, ia boleh dielakkan dengan meluaskan syarat penapisan isyarat perdagangan.

Penetapan stop loss bergantung pada indikator ATR, dan jika pergerakan pasaran yang ditunjukkan oleh indikator ATR tidak tepat, kedudukan stop loss juga akan hilang. Dalam kes ini, anda boleh mempertimbangkan untuk membetulkan nilai ATR dalam kombinasi dengan indikator kadar turun naik yang lain.

Arah pengoptimuman

Anda boleh mempertimbangkan untuk menggabungkan dengan indikator jangka pendek lain untuk membantu keputusan isyarat, seperti indikator overbought dan oversold seperti RSI, untuk meningkatkan kesan penapisan.

Hubungan logik penapisan antara purata bergerak Hall jangka panjang dan jangka pendek boleh ditambah atau dioptimumkan, menjadikan peraturan penapisan lebih ketat dan mengelakkan isyarat salah.

Ia boleh mengkaji kesan parameter yang berbeza terhadap kestabilan strategi dan keuntungan. Sebagai contoh, kombinasi parameter moving average, parameter ATR dan sebagainya boleh menghasilkan prestasi perdagangan yang berbeza.

ringkaskan

Strategi ini menggunakan gabungan jangka pendek Hall Moving Average untuk menangkap isyarat, jangka panjang Hall Moving Average untuk penapisan isyarat dan ATR untuk menetapkan stop loss, membentuk satu sistem strategi pengesanan trend pertengahan yang lebih lengkap. Strategi ini dapat mengesan titik peralihan harga pertengahan dengan berkesan dan mengelakkan gangguan oleh bunyi pasaran jangka pendek.

Kod sumber strategi
/*backtest
start: 2023-12-04 00:00:00
end: 2024-01-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Hull Filtered Strategy", overlay=true, pyramiding=0, default_qty_type= strategy.percent_of_equity, default_qty_value = 10, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0)

// Parameters for Hull Moving Averages
src = input(close, title="Source")
signal_period = input(50, title="Period of signal HMA")
filter_period = input(200, title="Period of filter HMA")

strat_dir_input = input(title="Strategy Direction", defval="all", options=["long", "short", "all"])

// Set allowed trading directions
strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)

// stop loss and take profit
sl_factor = input(2,title="Stop Loss Factor")
tp_factor = input(3,title="Take Profit Factor")
atr_period = input(14, title="ATR Period (SL/TP)")

// Testing Start dates
testStartYear = input(2010, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

//Stop date if you want to use a specific range of dates
testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


// -----------------------------------------------------------------------------
// Global variables
// -----------------------------------------------------------------------------
var float tp = na
var float sl = na
var float position = na


// -----------------------------------------------------------------------------
// Functions
// -----------------------------------------------------------------------------
testWindow() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false


// -----------------------------------------------------------------------------
// The engine
// -----------------------------------------------------------------------------
hma_signal = hma(src, signal_period)
hma_filter = hma(src, filter_period)

// Used to determine exits and stop losses
atr_e = atr(atr_period)

// if hma_filter increases hma_trend is set to 1, if it decreases hma_trend is set to -1. If no trend is available, hma_trend is set to ß0
trend = hma_filter > hma_filter[1]  ?  1 : hma_filter < hma_filter[1] ? -1 : 0
signal = hma_signal > hma_signal[1] ? 1 : hma_signal  < hma_signal[1] ? -1 : 0


// -----------------------------------------------------------------------------
// signals
// -----------------------------------------------------------------------------
if signal[0] == 1 and signal[1] != 1 and trend == 1 and testWindow()
    sl := close - sl_factor*atr_e
    tp := close + tp_factor*atr_e
    strategy.entry("HMA_LNG", strategy.long)
    strategy.exit("LE", "HMA_LNG", profit=100*tp_factor*atr_e, loss=100*sl_factor*atr_e)
    
if signal[0] == -1 and signal[1] != -1 and trend == -1 and testWindow()
    sl := close + sl_factor*atr_e
    tp := close - tp_factor*atr_e
    strategy.entry("HMA_SHRT", strategy.short)
    strategy.exit("SE", "HMA_SHRT", profit=100*tp_factor*atr_e, loss=100*sl_factor*atr_e)


if strategy.position_size != 0
    sl := sl[1]
    tp := tp[1]

// -----------------------------------------------------------------------------
// PLOT
// -----------------------------------------------------------------------------
hma_s = plot(hma_signal, title="SIGNAL", color = signal == 1 ? color.green : color.red)
hma_l = plot(hma_filter, title="TREND", color = trend == 1 ? color.green : color.red)

plot(tp, title="TAKE PROFIT", color= strategy.position_size != 0 ? color.blue: na, linewidth=1)  
plot(sl, title="STOP LOSS", color= strategy.position_size != 0 ? color.red: na, linewidth = 1)