Pembalikan Tren dengan Strategi Perdagangan Volatilitas Intrabar

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

img

Gambaran umum

Strategi ini menghitung perbedaan tekanan pembelian dan penjualan dalam volume transaksi di berbagai jendela waktu, dikombinasikan dengan sinyal MACD, untuk merancang strategi perdagangan pembalikan tren.

Prinsip Strategi

Logika inti dari strategi ini didasarkan pada poin-poin berikut:

  1. Menghitung tekanan pembelian dan tekanan penjualan volume transaksi dalam jendela waktu yang berbeda (jendela pendek dan panjang).

  2. Menggunakan nilai perbedaan MACD (perbedaan antara garis MACD dan garis sinyal) untuk menentukan status panjang dan pendek.

  3. Ketika anomali tekanan pembelian volume transaksi meningkat dan garis MACD melintasi, ditentukan bahwa pasar mungkin memiliki pembalikan tren dari jual ke beli.

  4. Ketika anomali tekanan jual volume transaksi meningkat dan garis MACD melintasi, ditentukan bahwa pasar mungkin memiliki pembalikan tren dari membeli ke menjual.

  5. Setelah memasukkan sinyal pembalikan, gunakan strategi mengambil keuntungan dan stop loss untuk mengendalikan risiko.

Analisis Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Menggunakan perbedaan panjang/pendek dalam volume transaksi untuk menentukan titik pembalikan tren menghindari hanya mengandalkan indikator penentuan tren seperti moving average sambil mengabaikan peran volume transaksi.

  2. Menggabungkan sinyal MACD untuk memverifikasi pembalikan dapat meningkatkan akurasi penilaian.

  3. Menggunakan jendela waktu yang panjang dan pendek untuk menentukan anomali dalam volume transaksi membuat sinyal pembalikan lebih dapat diandalkan.

  4. Strategi pembalikan cenderung memiliki tingkat keuntungan rata-rata yang lebih tinggi.

Analisis Risiko

Risiko dari strategi ini meliputi:

  1. Volume transaksi dan sinyal MACD dapat memberikan sinyal palsu, yang mengarah pada penilaian yang salah tentang pembalikan.

  2. Setelah sinyal pembalikan memicu, pasar mungkin menyesuaikan lagi dan tidak langsung membalikkan segera.

  3. Pengaturan keuntungan dan stop loss yang tidak tepat dapat menyebabkan kerugian meningkat.

  4. Penarikan yang lebih tinggi, tidak cocok untuk investor yang mengejar pengembalian yang stabil.

Arahan Optimasi

Optimasi untuk strategi ini meliputi:

  1. Optimalkan jendela waktu yang panjang dan pendek untuk membuat penilaian pembalikan lebih tepat.

  2. Mengoptimalkan parameter MACD untuk meningkatkan akurasi panjang/pendek.

  3. Mengoptimalkan mengambil keuntungan dan stop loss algoritma untuk mengurangi risiko kerugian.

  4. Tambahkan lebih banyak indikator penilaian anomali untuk meningkatkan tingkat keberhasilan pembalikan.

  5. Tambahkan ukuran posisi dan modul manajemen uang.

Kesimpulan

Singkatnya, ini adalah strategi perdagangan algoritmik pembalikan tren yang khas. Ini terutama bergantung pada amplifikasi dalam anomali volume transaksi dan verifikasi sinyal MACD untuk menentukan dan menangkap pembalikan harga dari posisi panjang ke posisi pendek atau sebaliknya. Strategi ini memiliki keuntungan akurasi tinggi dan pengembalian yang baik tetapi juga memiliki risiko tertentu. Optimasi lebih lanjut pada parameter dan fungsionalitas dapat membuat strategi berkinerja 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 banyak