Strategi perdagangan turun naik khusus rangka masa pembalikan arah aliran


Tarikh penciptaan: 2024-02-26 17:15:54 Akhirnya diubah suai: 2024-02-26 17:15:54
Salin: 0 Bilangan klik: 669
1
fokus pada
1617
Pengikut

Strategi perdagangan turun naik khusus rangka masa pembalikan arah aliran

Gambaran keseluruhan

Strategi ini merancang satu set strategi perdagangan yang bertukar trend dengan mengira perbezaan tekanan beli dan jual dalam jumlah yang diperdagangkan dalam pelbagai tetingkap masa, digabungkan dengan isyarat kosong MACD. Strategi ini menggunakan kecacatan jumlah yang diperdagangkan sebagai isyarat untuk menentukan perubahan trend, dan disahkan oleh isyarat kosong MACD, untuk menangkap peluang untuk berbalik.

Prinsip Strategi

Logik utama strategi ini adalah berdasarkan:

  1. Mengira tekanan beli dan tekanan jual dalam jumlah transaksi dalam pelbagai tingkap masa (lama dan pendek). Arah trend masa depan ditentukan oleh perbezaan tekanan jual beli.

  2. Menggunakan perbezaan MACD ((perbezaan antara garis MACD dan garis isyarat) untuk menentukan keadaan kosong. Menggabungkan isyarat tekanan jual beli jumlah pertukaran, untuk mengesahkan pembalikan trend.

  3. Apabila jumlah transaksi membeli tekanan ketidakseimbangan meningkat, dan garis MACD berlaku melintasi, dianggap bahawa trend yang berbalik dari kosong ke lebih mungkin berlaku.

  4. Apabila jumlah dagangan menjual tekanan yang berbeza-beza meningkat, dan garis MACD melintasi, dianggap bahawa keadaan mungkin berbalik dengan trend yang lebih banyak.

  5. Selepas masuk ke isyarat pembalikan, gunakan strategi hentian hentian untuk mengawal risiko.

Analisis kelebihan

Strategi ini mempunyai beberapa kelebihan:

  1. Menggunakan perbezaan polygonal dalam jumlah transaksi untuk menentukan titik perubahan trend, dan mengelakkan hanya bergantung pada indikator penghakiman trend seperti garis kesamaan dan mengabaikan peranan transaksi.

  2. Dengan menggunakan pengulangan pengesahan isyarat pelbagai ruang (MACD) untuk meningkatkan ketepatan penghakiman.

  3. Menggunakan tetingkap masa yang panjang dan pendek untuk menentukan arah pergerakan yang berbeza dari jumlah pertukaran, menjadikan isyarat pembalikan lebih dipercayai.

  4. Kaedah anti-transformasi mempunyai kadar keuntungan yang lebih tinggi.

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. Kedua-dua jumlah transaksi dan isyarat MACD boleh menghantar isyarat yang salah, yang menyebabkan risiko kesalahan penghakiman terbalik.

  2. Apabila isyarat pembalikan dikeluarkan, pasaran mungkin akan berubah semula dan risiko tidak dapat diubah semula secara langsung.

  3. Penetapan terhad yang tidak betul boleh menyebabkan risiko peningkatan kerugian.

  4. Kadar penarikan balik yang tinggi, tidak sesuai untuk pelabur yang mencari pendapatan yang stabil.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Mengoptimumkan jarak antara tetingkap masa yang lebih panjang dan lebih pendek untuk membuat penghakiman lebih tepat.

  2. Mengoptimumkan parameter MACD dan meningkatkan ketepatan penilaian kosong.

  3. Mengoptimumkan algoritma Stop Loss dan mengurangkan risiko kerugian.

  4. Menambah lebih banyak penunjuk penilaian pasif, meningkatkan kadar kejayaan pembalikan.

  5. Tambah modul kawalan kedudukan dan pengurusan wang.

ringkaskan

Strategi ini secara keseluruhannya adalah strategi perdagangan algoritma trend reverse yang tipikal. Ia bergantung kepada penguatan isokinetik yang diperbesar dengan isyarat MACD, menilai dan menangkap peluang untuk membalikkan harga dari banyak kepala ke kepala kosong atau dari kepala kosong ke kepala banyak kepala.

Kod sumber strategi
/*backtest
start: 2024-01-26 00:00:00
end: 2024-02-25 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("3 10 Oscillator Profile Flagging", shorttitle="3 10 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)
takeProfit = input( title="Take Profit", defval=0.75)
stopLoss = input( title="Stop Loss", defval=0.5)

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

getLookBackSlope(lookBack) => signal - signal[lookBack]
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
    float s = 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 - signalBiasValue )
            j += 1
    j

getSignalNoBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < signalBiasValue and signal[i] > ( 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 and signalSlope[1] > 0
bool isNegativeMacdReversal = macdSlope < 0 and macdSlope[1] > 0

bool isPositiveSignalReversal = signalSlope > 0 and signalSlope[1] < 0
bool isPositiveMacdReversal = macdSlope > 0 and macdSlope[1] < 0

bool hasBearInversion = signalSlope > 0 and macdSlope < 0
bool hasBullInversion = signalSlope < 0 and macdSlope > 0

bool hasSignalBias = math.abs(signal) >= signalBiasValue
bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0 - signalBiasValue )

bool hasSignalBuyerBias = hasSignalBias and signal > 0
bool hasSignalSellerBias = hasSignalBias and signal < 0

bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 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 )

// 7.48 Profit 52.5% 
if ( hasSignificantBuyerVolBias and getPriceRising(shortLookBack) == shortLookBack  and getBuyerVolBias(shortLookBack) == shortLookBack and hasPositiveMACDBias and hasBullInversion)
    strategy.entry("Short1", strategy.short, qty=10)
strategy.exit("TPS", "Short1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)

// 32.53 Profit 47.91%
if ( getPriceFalling(shortLookBack) and (getVolBias(shortLookBack) == false) and signalSlope < 0 and hasSignalSellerBias)
    strategy.entry("Long1", strategy.long, qty=10)
strategy.exit("TPS", "Long1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)