Pembalikan Trend dengan Strategi Perdagangan Volatiliti Intrabar

Penulis:ChaoZhang, Tarikh: 2024-02-26 17:15:54
Tag:

img

Ringkasan

Strategi ini mengira perbezaan tekanan beli dan jual dalam jumlah transaksi di pelbagai tingkap masa, digabungkan dengan isyarat MACD, untuk merancang strategi perdagangan pembalikan trend. Ia terutamanya menggunakan anomali dalam jumlah transaksi sebagai isyarat untuk menilai pembalikan trend, dan mengesahkannya dengan isyarat beli dan jual MACD, dengan itu menangkap peluang pembalikan.

Prinsip Strategi

Logik teras strategi ini adalah berdasarkan perkara berikut:

  1. Mengira tekanan beli dan tekanan jualan jumlah transaksi dalam tetingkap masa yang berbeza (tetingkap pendek dan panjang).

  2. Gunakan nilai perbezaan MACD (perbezaan antara garis MACD dan garis isyarat) untuk menentukan status panjang dan pendek.

  3. Apabila anomali tekanan pembelian jumlah transaksi meningkat dan garis MACD melintasi, ia ditentukan bahawa pasaran mungkin mempunyai pembalikan trend dari menjual ke membeli.

  4. Apabila anomali tekanan jualan jumlah urus niaga meningkat dan garis MACD melintasi, ia ditentukan bahawa pasaran mungkin mempunyai pembalikan trend dari membeli ke menjual.

  5. Selepas memasukkan isyarat pembalikan, gunakan mengambil keuntungan dan strategi berhenti kerugian untuk mengawal risiko.

Analisis Kelebihan

Kelebihan strategi ini termasuk:

  1. Menggunakan perbezaan panjang/pendek dalam jumlah transaksi untuk menentukan titik pembalikan trend mengelakkan hanya bergantung pada penunjuk penentuan trend seperti purata bergerak sambil mengabaikan peranan jumlah transaksi.

  2. Menggabungkan isyarat MACD untuk mengesahkan pembalikan boleh meningkatkan ketepatan penilaian.

  3. Menggunakan tingkap masa yang panjang dan pendek untuk menentukan anomali dalam jumlah transaksi menjadikan isyarat pembalikan lebih boleh dipercayai.

  4. Strategi pembalikan cenderung mempunyai kadar keuntungan purata yang lebih tinggi.

Analisis Risiko

Risiko strategi ini termasuk:

  1. Jumlah transaksi dan isyarat MACD boleh memberikan isyarat palsu, yang membawa kepada pertimbangan yang salah mengenai pembalikan.

  2. Selepas isyarat pembalikan diaktifkan, pasaran mungkin menyesuaikan semula dan gagal untuk membalik secara langsung dengan segera.

  3. Pengaturan mengambil keuntungan dan menghentikan kerugian yang tidak betul boleh menyebabkan kerugian meningkat.

  4. Pengeluaran yang lebih tinggi, tidak sesuai untuk pelabur yang mengejar pulangan yang stabil.

Arahan pengoptimuman

Pengoptimuman untuk strategi ini termasuk:

  1. Mengoptimumkan tetingkap masa yang panjang dan pendek untuk membuat pertimbangan pembalikan lebih tepat.

  2. Mengoptimumkan parameter MACD untuk meningkatkan ketepatan panjang / pendek.

  3. Mengoptimumkan algoritma mengambil keuntungan dan menghentikan kerugian untuk mengurangkan risiko kerugian.

  4. Tambah lebih banyak penunjuk penilaian anomali untuk meningkatkan kadar kejayaan pembalikan.

  5. Tambah saiz kedudukan dan modul pengurusan wang.

Kesimpulan

Ringkasnya, ini adalah strategi perdagangan algoritma pembalikan trend biasa. Ia terutamanya bergantung pada penguatan dalam anomali jumlah transaksi dan pengesahan isyarat MACD untuk menentukan dan menangkap pembalikan harga dari kedudukan panjang ke pendek atau sebaliknya. Strategi ini mempunyai kelebihan ketepatan tinggi dan pulangan yang baik tetapi juga mempunyai risiko tertentu. Pengoptimuman lebih lanjut pada parameter dan fungsi dapat membuat strategi ini berfungsi lebih baik.


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

Lebih lanjut