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.
Logika inti dari strategi ini didasarkan pada poin-poin berikut:
Menghitung tekanan pembelian dan tekanan penjualan volume transaksi dalam jendela waktu yang berbeda (jendela pendek dan panjang).
Menggunakan nilai perbedaan MACD (perbedaan antara garis MACD dan garis sinyal) untuk menentukan status panjang dan pendek.
Ketika anomali tekanan pembelian volume transaksi meningkat dan garis MACD melintasi, ditentukan bahwa pasar mungkin memiliki pembalikan tren dari jual ke beli.
Ketika anomali tekanan jual volume transaksi meningkat dan garis MACD melintasi, ditentukan bahwa pasar mungkin memiliki pembalikan tren dari membeli ke menjual.
Setelah memasukkan sinyal pembalikan, gunakan strategi mengambil keuntungan dan stop loss untuk mengendalikan risiko.
Keuntungan dari strategi ini meliputi:
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.
Menggabungkan sinyal MACD untuk memverifikasi pembalikan dapat meningkatkan akurasi penilaian.
Menggunakan jendela waktu yang panjang dan pendek untuk menentukan anomali dalam volume transaksi membuat sinyal pembalikan lebih dapat diandalkan.
Strategi pembalikan cenderung memiliki tingkat keuntungan rata-rata yang lebih tinggi.
Risiko dari strategi ini meliputi:
Volume transaksi dan sinyal MACD dapat memberikan sinyal palsu, yang mengarah pada penilaian yang salah tentang pembalikan.
Setelah sinyal pembalikan memicu, pasar mungkin menyesuaikan lagi dan tidak langsung membalikkan segera.
Pengaturan keuntungan dan stop loss yang tidak tepat dapat menyebabkan kerugian meningkat.
Penarikan yang lebih tinggi, tidak cocok untuk investor yang mengejar pengembalian yang stabil.
Optimasi untuk strategi ini meliputi:
Optimalkan jendela waktu yang panjang dan pendek untuk membuat penilaian pembalikan lebih tepat.
Mengoptimalkan parameter MACD untuk meningkatkan akurasi panjang/pendek.
Mengoptimalkan mengambil keuntungan dan stop loss algoritma untuk mengurangi risiko kerugian.
Tambahkan lebih banyak indikator penilaian anomali untuk meningkatkan tingkat keberhasilan pembalikan.
Tambahkan ukuran posisi dan modul manajemen uang.
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)