Strategi Purata Pergerakan Momentum Breakout


Tarikh penciptaan: 2023-11-27 16:25:54 Akhirnya diubah suai: 2023-11-27 16:25:54
Salin: 0 Bilangan klik: 608
1
fokus pada
1617
Pengikut

Strategi Purata Pergerakan Momentum Breakout

Gambaran keseluruhan

Strategi pergerakan rata-rata pergerakan adalah strategi perdagangan saham yang menggunakan isyarat persilangan rata-rata yang digabungkan dengan petunjuk pergerakan. Strategi ini menggunakan pelbagai petunjuk teknikal seperti purata bergerak indeks (EMA), purata bergerak sederhana (SMA), purata bergerak purata (MACD) dan indeks yang agak kuat (StockRSI) yang diubahsuai untuk membentuk isyarat pembelian dengan mengkonfirmasi bahawa trend jangka panjang meningkat.

Prinsip Strategi

Strategi ini terdiri daripada:

  1. EMA/SMA rata-rata bersilang: Setting the EMA fast line of 9 cycles and the SMA slow line of 21 cycles, when the fast line crosses the slow line to generate a buy signal.

  2. Indeks MACD: Indeks MACD terdiri daripada garis MACD, garis isyarat dan tiang MACD. Sebagai pengesahan tambahan apabila tiang adalah positif dan selaras dengan isyarat beli yang dihasilkan oleh EMA / SMA.

  3. Indeks RSI Saham: StockRSI untuk penambahbaikan RSI. Garis penunjuk menghasilkan isyarat beli apabila lebih tinggi daripada garis OVERBOUGHT ((80) atau lebih rendah daripada garis OVERSOLD ((20).

  4. Talian Brin: Brin di tengah-tengah adalah 20 hari SMA, bandwidth adalah perbezaan antara kedua-dua standard di atas. Ia memerlukan harga berada di dalam Brin untuk menghasilkan isyarat perdagangan.

  5. Hentikan Kerosakan dan Hentikan Kedudukan: Stop loss dan stop loss berdasarkan ATR untuk 14 hari yang lalu.

Strategi ini memerlukan sekurang-kurangnya 2 indikator di atas untuk menghantar isyarat beli pada masa yang sama, dan harga saham berada di dalam kawasan Brin dan trend jangka panjang ke atas, untuk menghasilkan isyarat beli akhir. Apabila indikator MACD berbalik ke bawah, StockRSI memasuki kawasan overbought dan menghasilkan isyarat jual.

Analisis kelebihan

Strategi ini menggabungkan kelebihan crossover rata-rata, indeks momentum dan indeks kadar turun naik, dengan kelebihan utama berikut:

  1. Hasil yang cemerlang: Indikator berbilang dan sama-sama merupakan indikator matang, hasil strategi lebih baik daripada indeks besar dan tunggal.

  2. Parameter yang dioptimumkanParameter utama seperti kitaran EMA, laluan Brin Belt telah dioptimumkan untuk meningkatkan kestabilan sistem.

  3. Penangguhan automatikBrinbelt dan ATR boleh menyesuaikan titik hentian dalam masa nyata untuk mengawal risiko.

  4. Tidak sukar untuk dilaksanakan: Kod lebih ringkas, petunjuk mudah diperoleh, operasi praktikal tidak sukar.

Analisis risiko

Walaupun strategi ini berjaya, terdapat risiko utama:

  1. Penunjuk menghantar isyarat yang salah: Apabila pasaran mengalami turun naik yang luar biasa atau indikator gagal, isyarat yang salah mungkin berlaku. Pada masa ini, penilaian trend jangka panjang harus digabungkan.

  2. Parameter tidak betul: Tetapan parameter yang tidak betul boleh menyebabkan terlalu sering berdagang atau tidak responsif. Harus disesuaikan dengan pelbagai jenis dan keadaan pasaran.

  3. Terlalu kecil atau terlalu besarStop loss terlalu kecil mudah dipetik, terlalu besar menyebabkan kerugian terlalu besar. Stop loss dan stop loss harus diseimbangkan.

Mengenai risiko yang disebutkan di atas, langkah-langkah berikut boleh diambil:

  1. Campur tangan dan pengubahsuaian: Dalam keadaan yang tidak normal, isyarat boleh disahkan secara manual, parameter boleh diubah atau polisi boleh ditangguhkan.

  2. Tetapan parameter optimum: Menggunakan kaedah yang lebih saintifik dan objektif seperti algoritma genetik untuk mengoptimumkan parameter.

  3. Penangguhan bersesuaian kadar turun naik: boleh menyesuaikan stop loss secara automatik mengikut kadar turun naik, seperti 1 hingga 3 kali ATR.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan cara:

  1. Meningkatkan kestabilan mekanisme halangan kerugian: Boleh ditambah dengan Tracking Stop atau Indeks Moving Average untuk Stop Loss.

  2. Penapisan jumlah transaksi: Menambah jumlah transaksi untuk mengelakkan penembusan tidak berkesan.

  3. Parameter penyesuaian dinamik: boleh mengoptimumkan kitaran garis rata secara automatik mengikut keadaan pasaran, lebar laluan dan sebagainya

  4. Memperkenalkan algoritma pembelajaran mesin: Pengoptimuman dinamik untuk parameter yang dilaksanakan menggunakan algoritma seperti RNN, LSTM.

ringkaskan

Keunggulan penggunaan komprehensif indikator teknikal strategi penyeimbang garisan, memperoleh keuntungan yang baik dalam kes kerjasama jangka panjang dan pendek. Strategi ini terkawal dan tidak sukar untuk dilaksanakan. Langkah seterusnya adalah untuk memperbaiki mekanisme penghentian kerugian, dan menggunakan kaedah yang lebih pintar untuk mengoptimumkan parameter dan penapisan isyarat, untuk mendapatkan keuntungan tambahan yang lebih stabil.

Kod sumber strategi
/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Improved Custom Strategy", shorttitle="ICS", overlay=true)

// Volatility
volatility = ta.atr(14)

// EMA/MA Crossover
fast_length = 9
slow_length = 21
fast_ma = ta.ema(close, fast_length)
slow_ma = ta.sma(close, slow_length)
crossover_signal = ta.crossover(fast_ma, slow_ma)

// MACD
[macdLine, signalLine, macdHistogram] = ta.macd(close, 12, 26, 9)
macd_signal = crossover_signal and (macdHistogram > 0)

// Bollinger Bands
source = close
basis = ta.sma(source, 20)
upper = basis + 2 * ta.stdev(source, 20)
lower = basis - 2 * ta.stdev(source, 20)

// Fractal-based Support and Resistance levels
isFractalHigh = high[2] < high[1] and high[1] > high[0]
isFractalLow = low[2] > low[1] and low[1] < low[0]
resistance = ta.valuewhen(isFractalHigh, high[1], 0)
support = ta.valuewhen(isFractalLow, low[1], 0)

// StockRSI
length = 14
K = 100 * (close - ta.lowest(close, length)) / (ta.highest(close, length) - ta.lowest(close, length))
D = ta.sma(K, 3)
overbought = 80
oversold = 20
stockrsi_signal = ((K < D) and (K < oversold)) or ((K > D) and (K > overbought))

// Buy and sell conditions
mandatory_buy_conditions = (crossover_signal ? 1 : 0) + (macd_signal ? 1 : 0) + (stockrsi_signal ? 1 : 0)

// Long-term Trend Check
long_term_ma = ta.sma(close, 200)
long_term_bullish = close > long_term_ma
long_term_bearish = close < long_term_ma

// Plot the long-term MA for visual clarity
plot(long_term_ma, color=color.gray, title="200-Day MA", linewidth=1)

// Simplified Buy and Sell conditions
buy_condition = long_term_bullish and (mandatory_buy_conditions >= 2) and (close > lower) and (close < upper)
sell_condition = (macdHistogram < 0) and (K > D) and (K > overbought)


// Potential SL and TP based on volatility
potential_SL = close - volatility
potential_TP = close + 2 * volatility

plot(potential_SL, title="SL Level", color=color.red, linewidth=1, style=plot.style_linebr)
plot(potential_TP, title="TP Level", color=color.green, linewidth=1, style=plot.style_linebr)

// ... (rest of your code above)

// State variable to track if we're in a position, a counter for trades, and a delayed counter for plotting
var bool inPosition = false
var tradeCounter = 0
var tradeCounterDelayed = 0 // Declaration of the variable

// Buy logic: Check if tradeCounter is 0 and the buy condition is met
if tradeCounter == 0 and buy_condition
    strategy.entry("BUY", strategy.long, stop=potential_SL, limit=potential_TP)
    inPosition := true
    tradeCounter := tradeCounter + 1

// Sell logic: Check if tradeCounter is 1, the sell condition is met, and we are in a position
if tradeCounter == 1 and inPosition and sell_condition
    strategy.close("BUY")
    inPosition := false
    tradeCounter := tradeCounter - 1

// Update the delayed trade counter:
tradeCounterDelayed := tradeCounter

// Plotting
bgcolor(buy_condition ? color.new(color.green, 90) : sell_condition ? color.new(color.red, 90) : na)
plotshape(series=buy_condition and tradeCounterDelayed == 0, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small)
plotshape(series=sell_condition and tradeCounterDelayed == 1, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small)

// ... (rest of your code if any)