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.
Logik teras strategi ini adalah berdasarkan perkara berikut:
Mengira tekanan beli dan tekanan jualan jumlah transaksi dalam tetingkap masa yang berbeza (tetingkap pendek dan panjang).
Gunakan nilai perbezaan MACD (perbezaan antara garis MACD dan garis isyarat) untuk menentukan status panjang dan pendek.
Apabila anomali tekanan pembelian jumlah transaksi meningkat dan garis MACD melintasi, ia ditentukan bahawa pasaran mungkin mempunyai pembalikan trend dari menjual ke membeli.
Apabila anomali tekanan jualan jumlah urus niaga meningkat dan garis MACD melintasi, ia ditentukan bahawa pasaran mungkin mempunyai pembalikan trend dari membeli ke menjual.
Selepas memasukkan isyarat pembalikan, gunakan mengambil keuntungan dan strategi berhenti kerugian untuk mengawal risiko.
Kelebihan strategi ini termasuk:
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.
Menggabungkan isyarat MACD untuk mengesahkan pembalikan boleh meningkatkan ketepatan penilaian.
Menggunakan tingkap masa yang panjang dan pendek untuk menentukan anomali dalam jumlah transaksi menjadikan isyarat pembalikan lebih boleh dipercayai.
Strategi pembalikan cenderung mempunyai kadar keuntungan purata yang lebih tinggi.
Risiko strategi ini termasuk:
Jumlah transaksi dan isyarat MACD boleh memberikan isyarat palsu, yang membawa kepada pertimbangan yang salah mengenai pembalikan.
Selepas isyarat pembalikan diaktifkan, pasaran mungkin menyesuaikan semula dan gagal untuk membalik secara langsung dengan segera.
Pengaturan mengambil keuntungan dan menghentikan kerugian yang tidak betul boleh menyebabkan kerugian meningkat.
Pengeluaran yang lebih tinggi, tidak sesuai untuk pelabur yang mengejar pulangan yang stabil.
Pengoptimuman untuk strategi ini termasuk:
Mengoptimumkan tetingkap masa yang panjang dan pendek untuk membuat pertimbangan pembalikan lebih tepat.
Mengoptimumkan parameter MACD untuk meningkatkan ketepatan panjang / pendek.
Mengoptimumkan algoritma mengambil keuntungan dan menghentikan kerugian untuk mengurangkan risiko kerugian.
Tambah lebih banyak penunjuk penilaian anomali untuk meningkatkan kadar kejayaan pembalikan.
Tambah saiz kedudukan dan modul pengurusan wang.
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)