Scillator Profile Reversal Strategy Berdasarkan Multi Timeframe MACD Zero-crossing

Penulis:ChaoZhang, Tanggal: 2024-02-18 15:27:21
Tag:

img

Gambaran umum

Strategi 3 10.0 Oscillator Profile Reversal mengidentifikasi potensi pembalikan harga dengan menghitung indikator MACD di berbagai kerangka waktu.

Logika Strategi

Strategi ini menghitung rata-rata bergerak SMA 3 dan 10 periode untuk membangun garis cepat dan lambat dan indikator MACD dan garis sinyal. Ketika garis cepat dan garis sinyal melintasi garis nol ke atas atau ke bawah, itu menunjukkan harga telah mencapai titik kritis dan pembalikan dapat terjadi. Selain itu, juga menggabungkan penilaian tekanan volume, indeks RSI dll untuk mengidentifikasi keandalan sinyal pembalikan.

Secara khusus, strategi menilai pembalikan harga melalui:

  1. MACD zero-crossing menunjukkan harga mencapai titik kritis
  2. Tekanan volume menilai sentimen bullish atau bearish
  3. Indeks RSI dengan perubahan kemiringan MACD menentukan kekuatan sinyal pembalikan
  4. Jalur cepat dan jalur sinyal yang menyeberang ke arah belakang membentuk sinyal pembalikan

Ketika keandalan sinyal pembalikan tinggi, strategi mengadopsi trend-mengikuti stop loss untuk mengejar keuntungan yang lebih tinggi.

Analisis Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Berbagai indikator membuat sinyal pembalikan lebih dapat diandalkan
  2. MACD zero-crossing secara akurat menemukan titik pembalikan
  3. RSI dan volume membantu penilaian untuk meningkatkan keandalan
  4. Stop loss yang mengikuti tren meningkatkan efisiensi modal

Analisis Risiko

Ada juga beberapa risiko:

  1. Kemungkinan tinggi sinyal MACD salah dan terjebak
  2. Kemungkinan tinggi stop loss terjadi selama tren bergantian
  3. Pengaturan parameter yang tidak benar dapat meningkatkan frekuensi perdagangan dan biaya

Risiko dapat dikurangi dengan:

  1. Memungkinkan stop loss yang lebih luas untuk menghindari terjebak
  2. Mengoptimalkan parameter untuk mengurangi frekuensi perdagangan
  3. Hanya mempertimbangkan masuk di dekat level pendukung/resistensi utama

Arahan Optimasi

Strategi dapat dioptimalkan lebih lanjut melalui:

  1. Tambahkan algoritma pembelajaran mesin untuk membantu keandalan sinyal pembalikan
  2. Tambahkan indeks sentimen untuk menentukan mentalitas banteng/beruang
  3. Gabungkan tingkat pendukung/resistensi utama untuk meningkatkan presisi masuk
  4. Mengoptimalkan stop loss untuk efisiensi modal yang lebih tinggi
  5. Uji kombinasi parameter optimal untuk frekuensi perdagangan yang lebih rendah

Kesimpulan

Strategi pembalikan nol-melintasi multi-frame MACD secara komprehensif mempertimbangkan indikator harga, volume dan volatilitas untuk menentukan waktu masuk melalui evaluasi multi-indikator. Ini menetapkan stop loss tepat waktu pada profitabilitas yang cukup. Ini dapat mencapai pengembalian yang baik selama pasar pembalikan. Perbaikan lebih lanjut pada pembelajaran mesin dan integrasi tingkat kunci dapat mengurangi risiko dan frekuensi perdagangan sambil meningkatkan profitabilitas.


/*backtest
start: 2023-02-11 00:00:00
end: 2024-02-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

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

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")
intrabarRange = high - low
rsi = ta.rsi(close, 14)
rsiSlope = rsi - rsi[1]

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 )

// 393.60 Profit 52.26% 15m
if ( hasBullInversion and rsiSlope > 1.5 and volume > 300000.0 )
    strategy.entry("15C1", strategy.long, qty=10.0)
strategy.exit("TPS", "15C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 356.10 Profit 51,45% 15m
if ( getVolBias(shortLookBack) == false and rsiSlope > 3.0 and signalSlope > 0)
    strategy.entry("15C2", strategy.long, qty=10.0)
strategy.exit("TPS", "15C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 124 Profit 52% 15m
if ( rsiSlope < -11.25 and macdSlope < 0.0 and signalSlope < 0.0)
    strategy.entry("15P1", strategy.short, qty=10.0)
strategy.exit("TPS", "15P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)

// 455.40 Profit 49% 15m
if ( math.abs(math.abs(macd) - math.abs(signal)) < .1 and buyVolume > sellVolume and hasBullInversion)
    strategy.entry("15P2", strategy.short, qty=10.0)
strategy.exit("TPS", "15P2", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)

Lebih banyak