Strategi pembalikan sifar silang MACD tempoh berbilang masa


Tarikh penciptaan: 2024-02-18 15:27:21 Akhirnya diubah suai: 2024-02-18 15:27:21
Salin: 0 Bilangan klik: 548
1
fokus pada
1617
Pengikut

Strategi pembalikan sifar silang MACD tempoh berbilang masa

Gambaran keseluruhan

Strategi pembalikan silang MACD nol-axis pelbagai tempoh dengan mengira penunjuk MACD untuk tempoh yang berbeza, mengenal pasti isyarat harga yang mungkin berbalik, menggunakan cara berhenti kehilangan trend, mengejar kecekapan penggunaan dana yang lebih tinggi.

Prinsip Strategi

Strategi ini mengira purata bergerak SMA 3 dan 10 kitaran pada masa yang sama, membina garisan pantas dan perlahan, dan kemudian mengira penunjuk MACD dan garisan isyarat. Apabila garisan pantas dan garisan isyarat berlaku ke atas atau ke bawah, ketika harga mencapai titik kritikal, mungkin akan berlaku pembalikan.

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

  1. MACD berpusat pada titik nol, menunjukkan harga telah mencapai titik kritikal
  2. Tekanan beli-belah dalam jumlah transaksi menilai keadaan kosong
  3. Indeks RSI menunjukkan trend turun, digabungkan dengan perubahan kadar MACD, untuk menilai kekuatan isyarat pembalikan
  4. Talian pantas dan tali isyarat berlawanan, membentuk isyarat berbalik

Apabila kebolehpercayaan isyarat pembalikan lebih tinggi, strategi ini menggunakan cara berhenti trend untuk masuk dan mengejar keuntungan yang lebih tinggi.

Analisis kelebihan

Strategi ini mempunyai beberapa kelebihan:

  1. Penghakiman berbilang indikator menjadikan isyarat pembalikan lebih dipercayai
  2. Menggunakan MACD zero-axis penyambung untuk menentukan titik balik, ketepatan yang lebih tinggi
  3. Indeks RSI dan penilaian bantuan jumlah transaksi, kebolehpercayaan yang tinggi
  4. Mengikuti Trend, Menjaga Kerugian, Mencari Kecekapan Kewangan yang Tinggi

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Indeks MACD mempunyai kemungkinan besar untuk memberi isyarat palsu dan mudah terjebak
  2. Kemungkinan besar stop loss akan ditembusi dalam proses pertukaran multi ruang
  3. Tetapan parameter yang tidak betul boleh menyebabkan perdagangan yang terlalu kerap, meningkatkan kos perdagangan dan kehilangan titik slippage

Risiko boleh dikurangkan dengan:

  1. Melepaskan Stop Loss yang Sesuai untuk Mengelakkan Penjeraman
  2. Optimumkan parameter, mengurangkan frekuensi transaksi
  3. Pertimbangkan untuk masuk hanya berhampiran dengan titik rintangan sokongan utama

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Menambah algoritma pembelajaran mesin untuk membantu menilai kebolehpercayaan isyarat pembalikan
  2. Peningkatan penunjuk emosi untuk menilai permukaan mental kosong
  3. Meningkatkan ketepatan kemasukan, digabungkan dengan titik rintangan sokongan utama
  4. Mengoptimumkan kaedah penangguhan kerugian untuk meningkatkan kecekapan penggunaan dana
  5. Uji kombinasi parameter yang optimum untuk mengurangkan kekerapan transaksi

ringkaskan

Strategi pembalikan silang MACD nol-sumbu jangka masa berbilang, mempertimbangkan maklumat pelbagai dimensi seperti harga, jumlah transaksi dan indikator turun naik, dengan penilaian pelbagai indikator untuk menentukan masa pembalikan, berhenti tepat pada masanya setelah keuntungan mencukupi, dapat memperoleh keuntungan yang lebih baik dalam keadaan pembalikan. Strategi ini dijangka dapat diperbaiki lagi melalui pembelajaran mesin dan pengoptimuman kedudukan utama, untuk mengurangkan kekerapan dan risiko perdagangan, meningkatkan ruang keuntungan.

Kod 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)