Strategi pembalikan nol MACD multi-periode waktu


Tanggal Pembuatan: 2024-02-18 15:27:21 Akhirnya memodifikasi: 2024-02-18 15:27:21
menyalin: 0 Jumlah klik: 548
1
fokus pada
1617
Pengikut

Strategi pembalikan nol MACD multi-periode waktu

Ringkasan

Strategi pembalikan silang nol-axis MACD periode-berkali dengan menghitung indikator MACD untuk periode yang berbeda, mengidentifikasi sinyal yang mungkin membalikkan harga, menggunakan metode stop loss yang mengikuti tren, dan mengejar efisiensi penggunaan dana yang lebih tinggi.

Prinsip Strategi

Strategi ini menghitung rata-rata bergerak SMA 3 siklus dan 10 siklus sekaligus, membangun garis cepat dan lambat, kemudian menghitung indikator MACD dan garis sinyal. Ketika garis cepat dan garis sinyal terjadi ke atas atau ke bawah, saat harga mencapai titik kritis, kemungkinan terjadi pembalikan. Selain itu, strategi ini juga menggabungkan penilaian tren multi-kamar dalam jumlah besar, indikator RSI, dan lain-lain, untuk mengidentifikasi keandalan sinyal pembalikan.

Secara khusus, strategi ini menilai reversal harga dengan cara berikut:

  1. MACD berpotongan nol, menunjukkan bahwa harga mencapai titik kritis
  2. Tekanan jual beli volume transaksi menilai kondisi kosong
  3. Indeks RSI menunjukkan tren bullish-bullish, yang dikombinasikan dengan perubahan pada kemiringan MACD, untuk menilai kekuatan sinyal reversal
  4. Garis cepat dan garis sinyal berlawanan silang, membentuk sinyal mundur

Ketika sinyal reversal memiliki keandalan yang tinggi, strategi ini mengadopsi cara stop loss yang mengikuti tren untuk masuk dan mengejar keuntungan yang lebih tinggi.

Analisis Keunggulan

Strategi ini memiliki beberapa keuntungan:

  1. Multi-Indikator Pertimbangan Membuat Sinyal Reversal Lebih Dapat Dipercaya
  2. Menggunakan MACD nol-axis silang untuk menentukan titik balik, akurasi yang lebih tinggi
  3. Indikator RSI dan penilaian tambahan volume transaksi, reliabilitas tinggi
  4. Mengikuti Trend Stop Loss, Mencari Efisiensi Investasi yang Lebih Tinggi

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Indikator MACD memiliki probabilitas yang lebih tinggi untuk mengirimkan sinyal palsu, sehingga mudah terjebak
  2. Dalam proses pertukaran multi-ruang, stop loss lebih mungkin untuk ditembus.
  3. Setting parameter yang tidak tepat dapat menyebabkan perdagangan yang terlalu sering, meningkatkan biaya transaksi dan kehilangan slippage

Risiko dapat dikurangi dengan:

  1. Memperkecil Stop Loss yang Tepat untuk Menghindari Penetapan
  2. Optimalisasi parameter, mengurangi frekuensi transaksi
  3. Pertimbangkan untuk masuk hanya di dekat titik resistensi pendukung yang penting

Arah optimasi

Strategi ini dapat dioptimalkan lebih lanjut dengan:

  1. Menambahkan algoritma pembelajaran mesin untuk membantu menilai keandalan sinyal pembalikan
  2. Meningkatkan indikator emosi untuk menilai permukaan psikologis kosong
  3. Kombinasi dengan titik resistansi pendukung kunci untuk meningkatkan akurasi masuk
  4. Mengoptimalkan Stop Loss dan Meningkatkan Efisiensi Penggunaan Dana
  5. Pengujian kombinasi optimal untuk mengurangi frekuensi transaksi

Meringkaskan

Multi-periode MACD nol-axis cross-reversal strategi, yang secara komprehensif mempertimbangkan informasi dari beberapa dimensi seperti harga, volume transaksi dan indikator fluktuasi, dengan penilaian multi-indikator untuk menentukan waktu reversal masuk ke tempat, tepat waktu berhenti kehilangan setelah keuntungan yang cukup, dapat memperoleh keuntungan yang lebih baik dalam reversal. Strategi ini diharapkan dapat ditingkatkan lebih lanjut melalui pembelajaran mesin dan optimasi posisi kunci, untuk mengurangi frekuensi perdagangan dan risiko, meningkatkan ruang keuntungan.

Kode Sumber Strategi
/*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)