3 Strategi pembalikan interval swing rata-rata bergerak

Penulis:ChaoZhang, Tanggal: 2024-02-18 11:18:51
Tag:

img

Gambaran umum

Strategi ini menggunakan rata-rata bergerak cepat 3 hari, rata-rata bergerak lambat 10 hari dan rata-rata bergerak meluruskan sinyal 16 hari untuk membangun indikator MACD, dilengkapi dengan indikator RSI dan karakteristik volume, dan menetapkan karakteristik K-line multidimensi untuk menentukan perpanjangan tren pasar, membentuk tren swing range dan membalikkan entri panjang atau pendek untuk mengambil keuntungan.

Strategi ini bertujuan untuk menangkap pembalikan harga cepat dari tingkat overbought atau oversold lokal.

Logika Strategi

Strategi ini terutama menggunakan rata-rata bergerak cepat 3 hari dikurangi rata-rata bergerak lambat 10 hari untuk membentuk indikator MACD, dengan garis sinyal 16 hari untuk meluruskan, yang merupakan strategi MACD standar. Ini juga menggabungkan analisis volume volume pembelian dan penjualan untuk menentukan karakteristik momentum. Indikator RSI diperkenalkan untuk menentukan tingkat overbought atau oversold. Melalui kombinasi beberapa indikator, ini menilai karakteristik pasar dan mendeteksi perubahan tren swing interval untuk membangun sinyal masuk.

Secara khusus, dengan mengamati hubungan antara garis MACD dan garis sinyal, serta perubahan kemiringan, ia menentukan pasang surut dan arus kekuatan bullish dan bearish untuk melihat peluang pembalikan. Pada saat yang sama, perubahan dalam volume pembelian dan penjualan mencerminkan pergeseran momentum bullish dan bearish. Dikombinasikan dengan perubahan dalam indikator RSI untuk menentukan kondisi overbought dan oversold, indikator ini memungkinkan kita untuk memastikan fitur profil pasar lokal dan waktu pembalikan potensial.

Strategi menetapkan tiga sinyal masuk secara total:

  1. Long ketika volume pembelian tidak memiliki keuntungan atas volume penjualan, RSI di bawah 41 saat naik, sinyal MACD tidak memiliki penyimpangan yang signifikan;

  2. Long ketika volume pembelian lebih kuat daripada volume penjualan, RSI dalam kisaran 45-55 dan naik, MACD dan garis sinyal bergerak naik secara unison;

  3. Pendek ketika MACD berada di atas ambang saat naik.

Ketiga skenario ini semua mencerminkan variasi lokalisasi dalam perpanjangan yang berlebihan, dinilai sebagai waktu pembalikan yang tepat untuk entri arah yang berlawanan.

Keluar ditetapkan sebagai Take profit (limit order) dan Stop loss, untuk mengontrol drawdown dan mewujudkan keuntungan.

Analisis Keuntungan

Strategi ini menggabungkan beberapa indikator untuk menentukan kondisi rentang dan overbought/oversold, dengan logika pengambilan keuntungan pembalikan yang jelas.

Secara khusus, keuntungan meliputi:

  1. MACD sebagai osilator momentum yang diberi bobot volume, menghindari analisis teknis yang sederhana;

  2. Kondisi volume menambah keyakinan masuk;

  3. RSI membantu dalam menemukan potensi pembalikan;

  4. Stop loss dan mengambil keuntungan mengendalikan penarikan yang berlebihan dan mengunci dalam beberapa keuntungan.

Analisis Risiko

Meskipun menggabungkan indikator untuk meningkatkan tingkat kemenangan, semua strategi memiliki risiko.

  1. Kemungkinan sinyal palsu, seperti kelanjutan setelah pembalikan awal;

  2. Pengaturan stop loss dan take profit yang tidak memadai menyebabkan penarikan yang terlalu besar dan kegagalan untuk mengunci keuntungan;

  3. Pengaturan parameter seperti panjang MA, periode RSI, rasio profit mungkin perlu dioptimalkan lebih lanjut.

Risiko-risiko ini dapat dikurangi melalui optimasi tambahan.

Arahan Optimasi

Masih ada ruang untuk optimasi lebih lanjut, terutama:

  1. Uji kombinasi parameter MA yang berbeda untuk hasil terbaik;

  2. Uji periode RSI lookback untuk menemukan hakim overbought/oversold yang optimal;

  3. Mengoptimalkan rasio mengambil keuntungan dan menghentikan kerugian untuk menyeimbangkan penarikan dan menangkap keuntungan;

  4. Memperkenalkan model pembelajaran mesin, memanfaatkan lebih banyak data untuk mengurangi penilaian yang salah dan meningkatkan tingkat kemenangan.

Ini dapat diterapkan melalui backtesting yang lebih sistematis. Seiring dengan perluasan ruang parameter dan ukuran sampel tumbuh, tingkat kemenangan strategi dan profitabilitas juga akan meningkat.

Kesimpulan

Strategi ini menggabungkan MACD, RSI dan analisis volume untuk menentukan fitur rentang pasar, menetapkan entri di zona pembalikan untuk menangkap pergerakan retracement. Logika jelas, menyeimbangkan tren dan pembalikan. Dengan optimasi lebih lanjut, memiliki potensi keuntungan yang kuat sebagai strategi kuantitatif yang kuat. Penyesuaian parameter dan pengenalan model dapat meningkatkannya menjadi algoritma yang sangat efisien.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("3 1 Oscillator Profile Flagging", shorttitle="3 1 Oscillator Profile Flagging", overlay=false)

signalBiasValue = input(title="Signal Bias", defval=0.26)
macdBiasValue = input(title="MACD Bias", defval=0.7)
shortLookBack = input( title="Short LookBack", defval=3)
longLookBack = input( title="Long LookBack", defval=6)
takeProfit = input( title="Take Profit", defval=2)
stopLoss = input( title="Stop Loss", defval=0.7)

fast_ma = ta.sma(close, 3)
slow_ma = ta.sma(close, 10)
macd = fast_ma - slow_ma
signal = ta.sma(macd, 16)
hline(0, "Zero Line", color = color.black)

buyVolume = volume*((close-low)/(high-low))
sellVolume = volume*((high-close)/(high-low))
buyVolSlope = buyVolume - buyVolume[1]
sellVolSlope = sellVolume - sellVolume[1]
signalSlope = ( signal - signal[1] )
macdSlope = ( macd - macd[1] )
plot(macd, color=color.blue, title="Total Volume")
plot(signal, color=color.orange, title="Total Volume")
plot(macdSlope, color=color.green, title="MACD Slope")
plot(signalSlope, color=color.red, title="Signal Slope")
intrabarRange = high - low
rsi = ta.rsi(close, 14)
rsiSlope = rsi - rsi[1]
plot(rsiSlope, color=color.black, title="RSI Slope")

getRSISlopeChange(lookBack) =>
    j = 0
    for i = 0 to lookBack
        if ( rsi[i] - rsi[ i + 1 ] ) > -5
            j += 1
    j

getBuyerVolBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if buyVolume[i] > sellVolume[i]
            j += 1
    j

getSellerVolBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if sellVolume[i] > buyVolume[i]
            j += 1
    j

getVolBias(lookBack) =>
    float b = 0.0
    float s = 0.0
    for i = 1 to lookBack
        b += buyVolume[i]
        s += sellVolume[i]
    b > s

getSignalBuyerBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] > signalBiasValue
            j += 1
    j

getSignalSellerBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < ( 0.0 - signalBiasValue )
            j += 1
    j

getSignalNoBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < signalBiasValue and signal[i] > ( 0.0 - signalBiasValue )
            j += 1
    j

getPriceRising(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if close[i] > close[i + 1]
            j += 1
    j


getPriceFalling(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if close[i] < close[i + 1] 
            j += 1
    j

getRangeNarrowing(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if intrabarRange[i] < intrabarRange[i + 1] 
            j+= 1
    j

getRangeBroadening(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if intrabarRange[i] > intrabarRange[i + 1] 
            j+= 1
    j

bool isNegativeSignalReversal = signalSlope < 0.0 and signalSlope[1] > 0.0
bool isNegativeMacdReversal = macdSlope < 0.0 and macdSlope[1] > 0.0

bool isPositiveSignalReversal = signalSlope > 0.0 and signalSlope[1] < 0.0
bool isPositiveMacdReversal = macdSlope > 0.0 and macdSlope[1] < 0.0

bool hasBearInversion = signalSlope > 0.0 and macdSlope < 0.0
bool hasBullInversion = signalSlope < 0.0 and macdSlope > 0.0

bool hasSignalBias = math.abs(signal) >= signalBiasValue
bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0.0 - signalBiasValue )

bool hasSignalBuyerBias = hasSignalBias and signal > 0.0
bool hasSignalSellerBias = hasSignalBias and signal < 0.0

bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 0.0 - macdBiasValue )

bool hasBullAntiPattern = ta.crossunder(macd, signal)
bool hasBearAntiPattern = ta.crossover(macd, signal)

bool hasSignificantBuyerVolBias = buyVolume > ( sellVolume * 1.5 )
bool hasSignificantSellerVolBias = sellVolume > ( buyVolume * 1.5 )


// 202.30 Profit 55.29% 5m
if ( ( getVolBias(longLookBack) == false ) and rsi <= 41 and math.abs(rsi - rsi[shortLookBack]) > 1 and hasNoSignalBias and rsiSlope > 1.5 and close > open)
    strategy.entry("5C1", strategy.long, qty=1)
strategy.exit("TPS", "5C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 171.70 Profit 50.22% 5m
if ( getVolBias(longLookBack) == true and rsi > 45 and rsi < 55 and macdSlope > 0 and signalSlope > 0)
    strategy.entry("5C2", strategy.long, qty=1)
strategy.exit("TPS", "5C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 309.50 Profit 30.8% 5m 2 tp .7 sl 289 trades
if ( macd > macdBiasValue and macdSlope > 0)
    strategy.entry("5P1", strategy.short, qty=1)
strategy.exit("TPS", "5P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)


Lebih banyak