Strategi Rata-rata Pergerakan Momentum Breakout


Tanggal Pembuatan: 2023-11-27 16:25:54 Akhirnya memodifikasi: 2023-11-27 16:25:54
menyalin: 0 Jumlah klik: 612
1
fokus pada
1621
Pengikut

Strategi Rata-rata Pergerakan Momentum Breakout

Ringkasan

Strategi ini menggunakan indikator-indikator teknis seperti Moving Average Moving Average (EMA), Simple Moving Average (SMA), Moving Average Cohesion Index (MACD) dan Relatively Weak Modified Index (RSI) untuk membentuk sinyal beli dengan mengkonfirmasi bahwa tren jangka panjang akan naik. Strategi ini mengambil stop loss ketika indikator-indikator jangka pendek menunjukkan sinyal reversal.

Prinsip Strategi

Strategi ini terdiri dari:

  1. EMA/SMA rata-rata melintang: Setting EMA fast line dengan 9 periode dan SMA slow line dengan 21 periode, menghasilkan sinyal beli ketika EMA fast line melewati slow line.

  2. Indikator MACD: Indikator MACD terdiri dari garis MACD, garis sinyal dan kolom MACD. Sebagai konfirmasi tambahan ketika kolom positif dan sinkron dengan sinyal beli yang dihasilkan oleh EMA / SMA.

  3. Indikator StockRSI: StockRSI untuk RSI yang lebih baik. Sebuah sinyal beli dihasilkan ketika garis indikator lebih tinggi dari garis OVERBOUGHT ((80) atau lebih rendah dari garis OVERSOLD ((20).

  4. Beringin: Brin track tengah adalah 20 hari SMA, bandwidth adalah perbedaan antara kedua standar di atas dan di bawah.

  5. Stop loss dan stop lossStop loss dan stop loss berdasarkan ATR selama 14 hari terakhir.

Strategi ini mengharuskan setidaknya 2 indikator di atas untuk mengirim sinyal beli pada saat yang sama, dan harga saham berada di dalam Brin dan tren jangka panjang ke atas, untuk menghasilkan sinyal beli akhir. Ketika indikator MACD berbalik ke bawah, StockRSI masuk ke zona overbought dan menghasilkan sinyal jual.

Analisis Keunggulan

Strategi ini menggabungkan keuntungan dari crossover rata-rata, indikator momentum dan indikator volatilitas, dengan keuntungan utama sebagai berikut:

  1. Hasil yang bagus.Indikator: Multiple indicator yang sama-sama merupakan indikator yang sudah matang, hasil strategi lebih baik daripada indeks besar dan indeks tunggal.

  2. Parameter yang dioptimalkanParameter utama seperti siklus EMA, jalur sabuk Brin telah dioptimalkan untuk meningkatkan stabilitas sistem.

  3. Hentikan / hentikan otomatisBrinbelt dan ATR dapat menyesuaikan stop loss secara real time, yang membantu dalam pengendalian risiko.

  4. Tidak sulit untuk diterapkan: Kode yang lebih sederhana, indikator mudah didapat, operasi praktis tidak terlalu sulit.

Analisis risiko

Meskipun strategi ini berhasil, ada beberapa risiko utama:

  1. Indikator yang salah.Ketika pasar mengalami fluktuasi yang tidak biasa atau indikator gagal, sinyal yang salah dapat muncul. Dalam hal ini, penilaian tren jangka panjang harus dilakukan.

  2. Parameter tidak validPeraturan parameter yang tidak tepat dapat menyebabkan terlalu sering perdagangan atau tidak responsif. Harus disesuaikan dengan varietas dan lingkungan pasar.

  3. Stop loss terlalu kecil atau terlalu besar: Stop loss terlalu kecil mudah untuk ditargetkan, terlalu besar berarti kerugian terlalu besar. Harus menyeimbangkan stop loss dan stop loss.

Untuk mengatasi risiko-risiko tersebut, langkah-langkah berikut dapat diambil:

  1. Intervensi dan modifikasi buatanDalam kasus yang tidak biasa, sinyal dapat dikonfirmasi secara manual, parameter dapat diubah, atau kebijakan dapat ditangguhkan.

  2. Pengaturan Parameter Optimasi: Menggunakan metode yang lebih ilmiah dan objektif seperti algoritma genetik untuk mengoptimalkan parameter.

  3. Stop loss dengan volatilitas yang disesuaikan: Dapat menyesuaikan stop loss secara otomatis sesuai dengan fluktuasi, seperti 1 - 3 kali ATR.

Arah optimasi

Strategi ini juga dapat dioptimalkan dengan cara:

  1. Meningkatkan stabilitas mekanisme penghentian kerugian: Dapat ditambahkan tracking stop loss atau indeks moving average untuk stop loss.

  2. Filter volume transaksi: Menambahkan indikator volume transaksi untuk menghindari terobosan yang tidak efektif.

  3. Parameter penyesuaian dinamis: Dapat secara otomatis mengoptimalkan siklus garis rata-rata, lebar saluran, dan lain-lain sesuai dengan kondisi pasar.

  4. Memperkenalkan algoritma pembelajaran mesin: Optimasi dinamis dari implementasi parameter dengan menggunakan algoritma seperti RNN, LSTM.

Meringkaskan

Keuntungan dari penggunaan indikator teknis yang komprehensif dalam strategi penyebaran dinamis, dalam kasus kerja sama jangka panjang dan pendek, hasil yang baik dicapai. Strategi ini terkontrol dan tidak sulit untuk diterapkan. Langkah selanjutnya adalah memperbaiki mekanisme penghentian kerugian, dan menggunakan metode yang lebih cerdas untuk mengoptimalkan parameter dan memfilter sinyal, untuk mencapai keuntungan tambahan yang lebih stabil.

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