Scillator Profile Reversal Strategy Berdasarkan Multi Timeframe MACD Zero-crossing

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

img

Ringkasan

Strategi 3 10.0 Oscillator Profile Reversal mengenal pasti pembalikan harga yang berpotensi dengan mengira penunjuk MACD dalam jangka masa yang berbeza.

Logika Strategi

Strategi ini mengira purata bergerak SMA 3 dan 10 tempoh untuk membina garis pantas dan perlahan dan petunjuk MACD dan garis isyarat. Apabila garis pantas dan garis isyarat melintasi garis sifar ke atas atau ke bawah, ia menunjukkan harga telah mencapai titik kritikal dan pembalikan mungkin berlaku. Di samping itu, ia juga menggabungkan penilaian tekanan volum, indeks RSI dan lain-lain untuk mengenal pasti kebolehpercayaan isyarat pembalikan. Ia pergi lama atau pendek apabila isyarat pembalikan memenuhi keperluan kebolehpercayaan tertentu.

Khususnya, strategi menilai pembalikan harga melalui:

  1. MACD zero-crossing menunjukkan harga mencapai titik kritikal
  2. Tekanan jumlah menilai sentimen menaik atau menurun
  3. Indeks RSI dengan perubahan kemiringan MACD menentukan kekuatan isyarat pembalikan
  4. Laluan pantas dan laluan isyarat yang bersilang dalam arah terbalik membentuk isyarat pembalikan

Apabila kebolehpercayaan isyarat pembalikan adalah tinggi, strategi mengamalkan trend-mengikut stop loss untuk mengejar keuntungan yang lebih tinggi.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Pelbagai penunjuk menjadikan isyarat pembalikan lebih boleh dipercayai
  2. MACD sifar-melintasi dengan tepat mencari titik pembalikan
  3. RSI dan penilaian bantuan jumlah untuk meningkatkan kebolehpercayaan
  4. Stop loss mengikut trend meningkatkan kecekapan modal

Analisis Risiko

Terdapat juga beberapa risiko:

  1. Kemungkinan tinggi isyarat MACD yang salah dan terperangkap
  2. Peluang tinggi untuk stop loss yang dipukul semasa trend bergantian
  3. Tetapan parameter yang tidak betul boleh meningkatkan kekerapan perdagangan dan kos

Risiko boleh dikurangkan melalui:

  1. Membolehkan stop loss yang lebih luas untuk mengelakkan terperangkap
  2. Mengoptimumkan parameter untuk mengurangkan kekerapan dagangan
  3. Pertimbangkan hanya masuk berhampiran tahap sokongan / rintangan utama

Arahan pengoptimuman

Strategi ini boleh dioptimumkan lagi melalui:

  1. Tambah algoritma pembelajaran mesin untuk membantu kebolehpercayaan isyarat pembalikan
  2. Tambah indeks sentimen untuk menentukan mental lembu / lembu
  3. Gabungkan tahap sokongan / rintangan utama untuk meningkatkan ketepatan kemasukan
  4. Mengoptimumkan stop loss untuk kecekapan modal yang lebih tinggi
  5. Uji kombinasi parameter optimum untuk kekerapan dagangan yang lebih rendah

Kesimpulan

Strategi pembalikan pelbagai jangka masa MACD yang melintasi sifar secara komprehensif mempertimbangkan penunjuk harga, jumlah dan turun naik untuk menentukan masa kemasukan melalui penilaian pelbagai penunjuk. Ia menetapkan stop loss tepat pada masanya pada keuntungan yang mencukupi. Ia dapat mencapai pulangan yang baik semasa pasaran pembalikan. Penambahbaikan lanjut pada pembelajaran mesin dan integrasi tahap utama dapat mengurangkan risiko dan kekerapan perdagangan sambil meningkatkan keuntungan.


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