3 Strategi pembalikan selang swing purata bergerak

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

img

Ringkasan

Strategi ini menggunakan purata bergerak pantas 3 hari, purata bergerak perlahan 10 hari dan purata bergerak meluruskan isyarat 16 hari untuk membina penunjuk MACD, ditambah dengan penunjuk RSI dan ciri-ciri jumlah, dan menetapkan ciri-ciri K-line berdimensi untuk menentukan perpanjangan berlebihan trend pasaran, membentuk trend swing julat dan membalikkan entri panjang atau pendek untuk mengambil keuntungan.

Strategi ini bertujuan untuk menangkap pembalikan harga yang cepat dari tahap overbought atau oversold tempatan.

Logika Strategi

Strategi ini terutamanya menggunakan purata bergerak pantas 3 hari dikurangkan purata bergerak perlahan 10 hari untuk membentuk penunjuk MACD, dengan garis isyarat 16 hari untuk meluruskan, yang merupakan strategi MACD standard. Ia juga menggabungkan analisis jumlah beli dan menjual jumlah untuk menentukan ciri momentum. Penunjuk RSI diperkenalkan untuk menentukan tahap overbought atau oversold. Melalui gabungan beberapa penunjuk, ia menilai ciri pasaran dan mengesan perubahan dalam trend swing selang untuk membina isyarat kemasukan.

Secara khusus, dengan memerhatikan hubungan antara garis MACD dan garis isyarat, serta perubahan cerun, ia menentukan pasang surut dan aliran kekuatan bullish dan bearish untuk melihat peluang pembalikan. Pada masa yang sama, perubahan dalam jumlah pembelian dan penjualan mencerminkan perubahan dalam momentum bullish dan bearish. Digabungkan dengan perubahan dalam penunjuk RSI untuk menentukan keadaan overbought dan oversold, penunjuk ini membolehkan kita untuk menentukan ciri profil pasaran tempatan dan potensi masa pembalikan.

Strategi ini menetapkan 3 isyarat kemasukan secara keseluruhan:

  1. Lama apabila jumlah membeli tidak mempunyai kelebihan berbanding jumlah jualan, RSI di bawah 41 semasa meningkat, isyarat MACD tidak mempunyai penyimpangan yang ketara;

  2. Lama apabila jumlah beli lebih kuat daripada jumlah jual, RSI dalam julat 45-55 dan meningkat, MACD dan garis isyarat bergerak naik secara serentak;

  3. Pendek apabila MACD berada di atas ambang semasa meningkat.

Ketiga senario ini semua mencerminkan perubahan yang berlainan dalam penyebaran berlebihan arah, dinilai sebagai masa pembalikan yang sesuai untuk entri arah yang bertentangan.

Keluar ditetapkan sebagai Ambil keuntungan (perintah had) dan Hentikan kerugian, untuk mengawal pengeluaran dan merealisasikan keuntungan.

Analisis Kelebihan

Strategi ini menggabungkan pelbagai penunjuk untuk menentukan keadaan berkisar dan overbought / oversold, dengan logik mengambil keuntungan pembalikan yang jelas. Ia menggunakan analisis jumlah untuk keyakinan tambahan pada entri. Hentikan kerugian dan ambil keuntungan juga membantu mengelakkan perdagangan berlebihan dalam satu arah sambil memastikan keuntungan lebih awal.

Khususnya, kelebihan termasuk:

  1. MACD sebagai pengayun momentum berwajaran volum, mengelakkan analisis teknikal yang sederhana;

  2. Keadaan jumlah menambah keyakinan kemasukan;

  3. RSI membantu dalam mengesan potensi pembalikan;

  4. Hentikan kerugian dan ambil keuntungan mengawal pengeluaran yang berlebihan dan mengunci dalam beberapa keuntungan.

Analisis Risiko

Walaupun menggabungkan penunjuk untuk meningkatkan kadar kemenangan, semua strategi mempunyai risiko.

  1. Kemungkinan isyarat palsu, seperti kelanjutan selepas pembalikan awal;

  2. Tetapan stop loss dan mengambil keuntungan yang tidak mencukupi membawa kepada pengeluaran yang terlalu besar dan kegagalan untuk mengunci keuntungan;

  3. Penyesuaian parameter seperti panjang MA, tempoh RSI, mengambil nisbah keuntungan mungkin memerlukan pengoptimuman lanjut.

Risiko ini boleh dikurangkan melalui pengoptimuman tambahan.

Arahan pengoptimuman

Masih ada ruang untuk pengoptimuman lanjut, terutamanya:

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

  2. Uji tempoh melihat semula RSI untuk mencari hakim overbought/oversold yang optimum;

  3. Mengoptimumkan nisbah mengambil keuntungan dan menghentikan kerugian untuk mengimbangi pengeluaran dan penangkapan keuntungan;

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

Ini boleh dilaksanakan melalui ujian belakang yang lebih sistematik. Apabila ruang parameter berkembang dan saiz sampel meningkat, kadar kemenangan strategi dan keuntungan juga akan meningkat.

Kesimpulan

Strategi ini menggabungkan MACD, RSI dan analisis jumlah untuk menentukan ciri-ciri pasaran, menubuhkan entri di zon pembalikan untuk menangkap pergerakan retracement. Logiknya jelas, mengimbangi trend dan pembalikan. Dengan pengoptimuman lanjut, ia mempunyai potensi keuntungan yang kuat sebagai strategi kuant yang kukuh. Penyetelan parameter dan pengenalan model dapat meningkatkannya menjadi algoritma yang sangat cekap.


/*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 lanjut