Sumber dimuat naik... memuat...

Model Tiga Faktor untuk Pengesanan Osilasi Harga

Penulis:ChaoZhang, Tarikh: 2024-02-26 15:32:27
Tag:

img

Ringkasan

Model Tiga Faktor untuk Pengesanan Osilasi Harga adalah strategi perdagangan jangka pendek yang mengintegrasikan beberapa faktor untuk penilaian. Strategi ini mengambil kira faktor seperti nisbah jumlah, RSI, MACD, dan garis isyarat untuk mengesan turun naik harga dan menemui peluang perdagangan jangka pendek.

Logika Strategi

Logik teras strategi ini ialah:

  1. Mengira penunjuk teknikal seperti MA pantas, MA perlahan, MACD, dan garis isyarat;

  2. Menghakimi keadaan pelbagai faktor termasuk nisbah jumlah, RSI, MACD dan garis isyarat;

  3. Memastikan tahap turun naik harga semasa dan peluang membeli/jual berdasarkan analisis pelbagai faktor;

  4. Mengambil kedudukan LONG atau SHORT dan menetapkan mengambil keuntungan dan menghentikan kerugian;

  5. Tutup kedudukan apabila harga mencapai mengambil keuntungan atau hentikan kerugian.

Strategi ini secara fleksibel menggunakan faktor seperti nisbah jumlah, RSI, MACD dan garis isyarat untuk mengesan turun naik harga dan menangkap peluang jangka pendek.

Analisis Kelebihan

Kelebihan strategi ini:

  1. Pelbagai faktor meningkatkan ketepatan dan mengelakkan isyarat palsu;
  2. Mengambil peluang jangka pendek dari turun naik harga dengan ruang keuntungan yang besar;
  3. Mengatur secara automatik mengambil keuntungan dan menghentikan kerugian untuk mengawal risiko;
  4. Logik yang mudah dan jelas, mudah dilaksanakan.

Analisis Risiko

Risiko strategi ini:

  1. Algoritma terlalu bergantung pada data sejarah, sensitif terhadap perubahan pasaran;
  2. Pendekatan gabungan pelbagai faktor mungkin memerlukan pengoptimuman lanjut, dengan kemungkinan penilaian yang salah;
  3. Titik stop loss secara langsung mempengaruhi kestabilan strategi.

Untuk menangani risiko di atas, pengoptimuman boleh dibuat dalam:

  1. Memperluas kitaran sampel untuk mengurangkan kesan daripada perubahan data pasaran;
  2. Sesuaikan berat antara faktor untuk mencapai pengoptimuman adaptif;
  3. Uji titik stop loss yang berbeza untuk mencari kedudukan optimum.

Arahan pengoptimuman

Arah pengoptimuman utama:

  1. Mengoptimumkan berat faktor secara dinamik. Berat boleh diselaraskan berdasarkan keadaan pasaran untuk meningkatkan kesesuaian;

  2. Memperkenalkan algoritma pembelajaran mesin untuk mencapai pengoptimuman faktor adaptif. Algoritma seperti rangkaian saraf dan algoritma genetik boleh digunakan untuk melatih model dan mengoptimumkan parameter;

  3. Mengoptimumkan strategi stop loss. Gabungan yang berbeza dari pemantauan stop loss dan pergerakan stop loss boleh diuji untuk mencari penyelesaian yang terbaik;

  4. Masukkan penunjuk teknikal canggih. Lebih banyak penunjuk seperti turun naik turun naik dan goyangan momentum boleh memperkaya faktor.

Kesimpulan

Model Tiga Faktor untuk Pengesanan Guncangan Harga menggunakan sepenuhnya ciri-ciri guncangan harga untuk melaksanakan strategi perdagangan jangka pendek yang cekap. Ia menilai titik masuk dan keluar terbaik berdasarkan pelbagai faktor seperti jumlah, RSI, MACD dan garis isyarat. Pelbagai faktor meningkatkan ketepatan dan membawa kepada pulangan yang stabil. Pengoptimuman lanjut boleh dilakukan melalui pembelajaran mesin untuk pengoptimuman adaptif, menghasilkan prestasi 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 lanjut