
Strategi ini menggunakan 3 hari moving average cepat, 10 hari moving average lambat dan 16 hari signal smooth moving average untuk membangun indikator MACD, ditambah dengan indikator RSI dan karakteristik volume transaksi, untuk menetapkan karakteristik K-line multi-dimensi, untuk menilai bahwa pasar terlalu terikat, dan membentuk tren bergolak dalam zona, untuk membalikkan Entries untuk mendapatkan keuntungan.
Kode ini terutama menggunakan 3 hari moving average cepat dikurangi 10 hari moving average lambat untuk membentuk indikator MACD, 16 hari signal line smooth handling, membentuk standar MACD strategi. Pada saat yang sama menggabungkan analisis volume transaksi beli dan jual, menilai kekuatan karakteristik. Juga diperkenalkan dalam indikator RSI untuk menilai overbought oversold.
Secara khusus, dengan mengamati hubungan antara garis MACD dan garis sinyal, perubahan kemiringan, menilai penurunan kekuatan bullish, mencari peluang untuk membalikkannya. Pada saat yang sama, perubahan volume jual beli dalam volume transaksi juga mencerminkan penurunan kekuatan bullish.
Strategi ini memiliki tiga sinyal masuk:
Bila volume transaksi tidak memiliki kelebihan volume beli, RSI berada di bawah 41 dan naik, dan sinyal MACD tidak memiliki defisit yang jelas, lakukan lebih banyak;
Ketika volume transaksi memiliki kelebihan volume beli, RSI berada di kisaran 45-55 dan naik, MACD dan garis sinyal naik bersama, lakukan lebih banyak;
Bila MACD lebih tinggi dari set threshold dan naik, kosongkan.
Ketiga situasi ini mencerminkan pergerakan regional yang bergejolak dalam jangka pendek dan ekspansi yang berlebihan ke satu arah, sehingga dianggap sebagai waktu yang baik untuk berbalik dan melakukan operasi berbalik.
Exit diatur sebagai stop loss dan stop stop mode, untuk menarik kembali kontrol dan menghasilkan keuntungan.
Strategi ini menggabungkan berbagai indikator untuk menilai rentang getaran dan fenomena overbought dan oversold, untuk membalikkan ide keuntungan dengan jelas. Penggunaan analisis volume transaksi lebih dalam, meningkatkan dasar operasi. Pengaturan stop loss juga lebih berhati-hati, untuk menghindari terlalu banyak mengejar dan memblokir penurunan.
Secara khusus, ada beberapa keuntungan:
MACD sebagai indikator uji kuantitatif untuk menilai hubungan antara harga dan volume transaksi, menghindari subjektifitas analisis teknis tunggal;
Untuk mengevaluasi status pengiriman, Anda dapat menambahkan “Entry confirmation”.
RSI menilai overbought dan oversold, membantu mencari reversal;
Pengaturan stop loss untuk mencegah kerugian berlebihan dan mengunci sebagian keuntungan.
Meskipun strategi ini menggunakan beberapa indikator untuk meningkatkan peluang menang, strategi apa pun pasti memiliki risiko tertentu, terutama:
Probabilitas indikator memberikan sinyal palsu, seperti terus berjalan pada tren awal setelah pembalikan;
Pembatasan kerugian yang tidak tepat, kemungkinan penarikan yang terlalu besar dan keuntungan yang tidak terkunci dengan baik;
Pengaturan parameter mungkin memerlukan pengujian lebih lanjut dan pengoptimalan, seperti kombinasi parameter garis rata-rata, siklus RSI, stop loss stop multiplier, dan lain-lain.
Semua risiko ini dapat dikurangi dengan pengoptimalan lebih lanjut. Metode spesifik akan dijelaskan di bagian berikutnya.
Strategi ini masih memiliki ruang untuk pengoptimalan lebih lanjut, dengan fokus pada beberapa hal berikut:
Tes berbagai pengaturan parameter rata-rata untuk menemukan kombinasi yang optimal;
Uji pengaturan parameter RSI untuk menentukan siklus yang lebih tepat untuk menilai overbought dan oversold;
Mengoptimalkan stop loss multiplier untuk menemukan keseimbangan antara maksimum withdrawal dan profit lock;
Menggunakan model pembelajaran mesin untuk melatih dengan data yang lebih besar, mengurangi kemungkinan kesalahan penilaian, dan meningkatkan tingkat kemenangan.
Metode-metode optimasi ini dapat dicapai melalui pengukuran yang lebih sistematis. Dengan perluasan pengujian ruang parameter dan peningkatan jumlah sampel, tingkat keberhasilan dan profitabilitas strategi akan terus meningkat.
Strategi ini menggunakan MACD, RSI, dan volume perdagangan tiga indikator utama untuk menilai karakteristik gesekan di antara zona pasar, mendirikan entri di titik balik untuk mengambil keuntungan dari peningkatan rebound sebagai target. Strategi ini memiliki ide yang jelas, menggabungkan tren dan reversal, dan memiliki ruang keuntungan yang baik setelah dioptimalkan. Dengan penyesuaian parameter dan model, diharapkan dapat menjadi strategi kuantitatif yang efisien dan stabil.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("3 1 Oscillator Profile Flagging", shorttitle="3 1 Oscillator Profile Flagging", overlay=false)
signalBiasValue = input(title="Signal Bias", defval=0.26)
macdBiasValue = input(title="MACD Bias", defval=0.7)
shortLookBack = input( title="Short LookBack", defval=3)
longLookBack = input( title="Long LookBack", defval=6)
takeProfit = input( title="Take Profit", defval=2)
stopLoss = input( title="Stop Loss", defval=0.7)
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")
plot(macdSlope, color=color.green, title="MACD Slope")
plot(signalSlope, color=color.red, title="Signal Slope")
intrabarRange = high - low
rsi = ta.rsi(close, 14)
rsiSlope = rsi - rsi[1]
plot(rsiSlope, color=color.black, title="RSI Slope")
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 )
// 202.30 Profit 55.29% 5m
if ( ( getVolBias(longLookBack) == false ) and rsi <= 41 and math.abs(rsi - rsi[shortLookBack]) > 1 and hasNoSignalBias and rsiSlope > 1.5 and close > open)
strategy.entry("5C1", strategy.long, qty=1)
strategy.exit("TPS", "5C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)
// 171.70 Profit 50.22% 5m
if ( getVolBias(longLookBack) == true and rsi > 45 and rsi < 55 and macdSlope > 0 and signalSlope > 0)
strategy.entry("5C2", strategy.long, qty=1)
strategy.exit("TPS", "5C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)
// 309.50 Profit 30.8% 5m 2 tp .7 sl 289 trades
if ( macd > macdBiasValue and macdSlope > 0)
strategy.entry("5P1", strategy.short, qty=1)
strategy.exit("TPS", "5P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)