
Strategi ini menggunakan purata bergerak pantas 3 hari, purata bergerak perlahan 10 hari dan purata bergerak lancar 16 hari untuk membina penunjuk MACD, ditambah dengan penunjuk RSI dan ciri-ciri kuantiti transaksi, menetapkan ciri-ciri garis K multidimensi, menilai bahawa keadaan telah terlalu ketat, membentuk trend bergolak dalam zon, untuk membalikkan Entries mendapat keuntungan.
Kod ini digunakan terutamanya untuk membentuk indikator MACD dengan 3 hari rata-rata bergerak cepat dikurangkan 10 hari rata-rata bergerak perlahan, 16 hari signal line smooth handling, membentuk strategi MACD standard. Pada masa yang sama menggabungkan analisis jumlah pembelian dan jual beli untuk menentukan ciri-ciri kekuatan.
Khususnya, dengan melihat hubungan antara garis MACD dan garis isyarat, perubahan kemiringan, menilai kemerosotan kekuatan plus, mencari peluang untuk berbalik. Pada masa yang sama, perubahan jumlah jual beli juga mencerminkan kemerosotan kekuatan plus.
Strategi ini menyediakan 3 isyarat entri:
Apabila jumlah transaksi tidak mempunyai kelebihan jumlah beli, RSI berada di bawah 41 dan naik, dan isyarat MACD tidak jelas menyimpang, lakukan lebih banyak;
Apabila jumlah transaksi mempunyai kelebihan jumlah beli, RSI berada dalam julat 45-55 dan naik, MACD dan garis isyarat sama-sama ke atas, lakukan lebih banyak;
Apabila MACD lebih tinggi daripada nilai set dan naik, kosongkan.
Ketiga-tiga situasi ini mencerminkan pergolakan serantau dalam jangka masa pendek dan perluasan berlebihan ke arah satu arah, oleh itu ia dianggap sebagai masa yang baik untuk berbalik dan mengambil tindakan berbalik.
Exit ditetapkan sebagai cara menghentikan kerugian dan berhenti, menarik balik kawalan dan menjana keuntungan.
Strategi ini menggabungkan pelbagai petunjuk untuk menilai kawasan yang bergolak dan fenomena overbought dan oversold, untuk membalikkan idea keuntungan dengan jelas. Kaedah analisis kuantiti transaksi lebih mendalam, meningkatkan asas operasi. Tetapan stop loss juga lebih berhati-hati, untuk mengelakkan terlalu banyak mengejar dan memadamkan penurunan.
Secara khusus, ia mempunyai kelebihan:
MACD sebagai satu penunjuk ujian kuantitatif untuk menilai hubungan harga dan kuantiti yang diperdagangkan, mengelakkan subjektif analisis teknikal tunggal;
Menerima pesanan dan menambah pengesahan Entries;
RSI menilai overbought dan oversold, membantu mencari pembalikan;
Tetapan Stop Loss untuk mengelakkan kerugian yang berlebihan dan mengunci sebahagian keuntungan.
Walaupun strategi ini menggunakan pelbagai indikator untuk meningkatkan peluang kemenangan, strategi apa pun pasti mempunyai risiko tertentu, dengan masalah utama adalah:
Kebarangkalian bahawa penunjuk akan memberi isyarat palsu, seperti teruskan aliran semula selepas pembalikan;
Pembatalan kerugian ditetapkan dengan tidak betul, kemungkinan penarikan balik terlalu besar dan keuntungan tidak dapat dikunci dengan baik;
Tetapan parameter mungkin memerlukan pengoptimuman ujian lanjut, seperti kombinasi parameter garis rata-rata, kitaran RSI, pengganda henti rugi dan sebagainya.
Semua risiko ini boleh dikurangkan dengan pengoptimuman lanjut. Kaedah-kaedah tertentu akan diterangkan di bahagian seterusnya.
Strategi ini masih mempunyai ruang untuk pengoptimuman yang lebih lanjut, dengan tumpuan kepada aspek-aspek berikut:
Uji pelbagai tetapan parameter rata-rata untuk mencari kombinasi terbaik;
Uji tetapan parameter RSI untuk menentukan kitaran yang lebih sesuai untuk menilai overbought dan oversold;
Mengoptimumkan penggandaan hentian kerugian untuk mencari keseimbangan antara pengeluaran maksimum dan penguncian keuntungan;
Memperkenalkan model pembelajaran mesin, menggunakan latihan data yang lebih besar, mengurangkan kebarangkalian kesalahan, meningkatkan kadar kemenangan.
Semua kaedah pengoptimuman ini dapat dicapai melalui pengukuran yang lebih sistematik. Dengan peningkatan ujian ruang parameter dan peningkatan jumlah sampel, kemenangan strategi dan petunjuk keuntungan juga akan meningkat.
Strategi ini menggunakan tiga kategori besar penunjuk MACD, RSI dan volumes, untuk menilai ciri-ciri pergolakan di antara zon pasaran, menetapkan Entries di titik-titik perubahan, untuk mengambil keuntungan daripada peningkatan rebound sebagai sasaran. Strategi ini jelas, mempertimbangkan trend dan pembalikan, dengan ruang keuntungan yang baik selepas pengoptimuman. Dengan penyesuaian parameter dan pengenalan model, ia dijangka menjadi strategi kuantitatif yang stabil dan berkesan.
/*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)