Model Tiga Faktor untuk Deteksi Osilasi Harga

Penulis:ChaoZhangTanggal: 2024-02-26 15:32:27
Tag:

img

Gambaran umum

Model Tiga Faktor untuk Deteksi Osilasi Harga adalah strategi perdagangan jangka pendek yang mengintegrasikan beberapa faktor untuk penilaian. Strategi ini memperhitungkan faktor seperti rasio volume, RSI, MACD, dan garis sinyal untuk mendeteksi osilasi harga dan menemukan peluang perdagangan jangka pendek.

Logika Strategi

Logika inti dari strategi ini adalah:

  1. Menghitung indikator teknis seperti MA cepat, MA lambat, MACD, dan garis sinyal;

  2. menilai kondisi faktor ganda termasuk rasio volume, RSI, MACD dan garis sinyal;

  3. Mengkonfirmasi tahap osilasi harga saat ini dan peluang membeli/menjual berdasarkan analisis beberapa faktor;

  4. Mengambil posisi LONG atau SHORT dan menetapkan mengambil keuntungan dan stop loss;

  5. Tutup posisi ketika harga mencapai mengambil keuntungan atau stop loss.

Strategi ini secara fleksibel menggunakan faktor-faktor seperti rasio volume, RSI, MACD dan garis sinyal untuk mendeteksi osilasi harga dan menangkap peluang jangka pendek.

Analisis Keuntungan

Keuntungan dari strategi ini:

  1. Beberapa faktor meningkatkan akurasi dan menghindari sinyal palsu;
  2. Menangkap peluang jangka pendek dari osilasi harga dengan ruang keuntungan yang besar;
  3. Mengatur secara otomatis mengambil keuntungan dan menghentikan kerugian untuk mengendalikan risiko;
  4. Logika yang sederhana dan jelas, mudah diterapkan.

Analisis Risiko

Risiko dari strategi ini:

  1. Algoritma terlalu bergantung pada data historis, sensitif terhadap perubahan pasar;
  2. Pendekatan kombinasi dari beberapa faktor mungkin perlu dioptimalkan lebih lanjut, dengan kemungkinan penilaian yang salah;
  3. Titik stop loss secara langsung mempengaruhi stabilitas strategi.

Untuk mengatasi risiko di atas, optimasi dapat dilakukan di:

  1. Memperluas siklus sampel untuk mengurangi dampak dari perubahan data pasar;
  2. Mengatur bobot antara faktor untuk mencapai optimasi adaptif;
  3. Uji titik stop loss yang berbeda untuk menemukan posisi optimal.

Arahan Optimasi

Arah utama optimasi:

  1. Mengoptimalkan bobot faktor secara dinamis. Bobot dapat disesuaikan berdasarkan kondisi pasar untuk meningkatkan kemampuan beradaptasi;

  2. Memperkenalkan algoritma pembelajaran mesin untuk mencapai optimasi adaptif faktor. Algoritma seperti jaringan saraf dan algoritma genetik dapat digunakan untuk melatih model dan mengoptimalkan parameter;

  3. Mengoptimalkan strategi stop loss. Kombinasi yang berbeda dari stop loss pelacakan dan stop loss bergerak dapat diuji untuk menemukan solusi terbaik;

  4. Masukkan indikator teknis canggih. Lebih banyak indikator seperti volatilitas berayun dan momentum osilasi dapat memperkaya faktor.

Kesimpulan

Model Tiga Faktor untuk Deteksi Osilasi Harga sepenuhnya memanfaatkan karakteristik osilasi harga untuk menerapkan strategi perdagangan jangka pendek yang efisien. Ini menilai titik masuk dan keluar terbaik berdasarkan beberapa faktor seperti volume, RSI, MACD dan garis sinyal. Beberapa faktor meningkatkan akurasi dan mengarah pada pengembalian yang stabil. Optimasi lebih lanjut dapat dilakukan melalui pembelajaran mesin untuk optimasi adaptif, menghasilkan kinerja strategi yang 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.0 Oscillator Profile Flagging", shorttitle="3 10.0 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.0)
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.0)
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.0)
strategy.exit("TPS", "5P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)


Lebih banyak