Strategi pembalikan kuantitatif berasaskan MFI dan MA

Penulis:ChaoZhang, Tarikh: 2023-12-27 14:42:16
Tag:

img

Ringkasan

Strategi ini menggunakan penunjuk MFI untuk mengenal pasti zon overbought dan oversold digabungkan dengan MA untuk menapis arah pembalikan harga.

Logika Strategi

Strategi ini menggunakan penunjuk MFI untuk mengukur keadaan overbought dan oversold di pasaran. Apabila MFI turun di bawah 20 ke dalam zon oversold, ia menandakan bahawa aset itu undervalued dan bahagian bawah terbentuk, yang menunjukkan isyarat panjang. Apabila MFI naik di atas 80 ke dalam kawasan overbought, ia menunjukkan bahawa aset itu overvalued dan mungkin akan membetulkan lebih rendah tidak lama lagi, mencetuskan isyarat pendek.

Untuk mengelakkan pembalikan palsu, strategi ini juga menggunakan penunjuk MA untuk menentukan arah trend. Isyarat perdagangan hanya dihasilkan apabila pembalikan MFI sejajar dengan harga mematahkan atau berdiri di atas garis MA.

Logik perdagangan khusus adalah:

  1. Apabila MFI memecahkan di bawah 20 ke dalam zon oversold dan penutupan berada di atas garis MA, isyarat beli dihasilkan.

  2. Apabila MFI memecahkan di atas 80 ke dalam zon overbought dan penutupan memecahkan garis MA, isyarat jual dicetuskan.

Dengan pengesahan penunjuk dua, strategi dapat mengenal pasti peluang pembalikan dengan berkesan dengan isyarat kemasukan yang boleh dipercayai.

Kelebihan

  1. Pengesahan penunjuk dua mengelakkan pecah palsu dan memastikan kebolehpercayaan isyarat yang tinggi.

  2. Menggunakan pembalikan overbought / oversold adalah teknik perdagangan klasik dan yang diuji oleh masa.

  3. Menggabungkan penapisan trend menjadikan isyarat lebih tepat dan boleh dipercayai.

  4. Boleh digunakan di pelbagai pasaran dengan daya adaptasi yang kuat.

Risiko

  1. Pasaran boleh terus meningkat atau menurun sehingga menyebabkan kerugian berhenti.

  2. Perlu berhati-hati terhadap risiko sistematik dalam keadaan pasaran yang melampau yang menyebabkan titik pembalikan yang terlepas.

  3. Frekuensi perdagangan yang tinggi boleh membawa kepada peningkatan kos transaksi.

Pengurangan:

  1. Membolehkan stop loss yang lebih luas untuk memberikan strategi lebih banyak ruang.

  2. Tingkatkan saiz kedudukan dengan berhati-hati sambil melihat carta jangka masa yang lebih tinggi untuk isyarat risiko sistemik.

  3. Mengoptimumkan parameter untuk mengelakkan perdagangan yang tidak perlu.

Peluang Peningkatan

  1. Mengoptimumkan parameter MA untuk sepadan dengan ciri-ciri instrumen dagangan.

  2. Sesuaikan tahap overbought/oversold berdasarkan sentimen pasaran yang berbeza.

  3. Memasukkan peraturan saiz kedudukan untuk keuntungan yang lebih terkawal.

Kesimpulan

Strategi ini mengintegrasikan teknik analisis klasik dengan kaedah kuantum moden. Dengan menerapkan pengesahan penunjuk dua secara ketat, ia menunjukkan adaptiviti yang kukuh di pelbagai instrumen, menjadikannya strategi jangka pendek umum yang disyorkan.


/*backtest
start: 2023-12-19 00:00:00
end: 2023-12-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © vikris

//@version=4
strategy("[VJ]Thor for MFI", overlay=true, calc_on_every_tick = false,pyramiding=0)

// ********** Strategy inputs - Start **********

// Used for intraday handling
// Session value should be from market start to the time you want to square-off 
// your intraday strategy
// Important: The end time should be at least 2 minutes before the intraday
// square-off time set by your broker
var i_marketSession = input(title="Market session", type=input.session, 
     defval="0915-1455", confirm=true)

// Make inputs that set the take profit % (optional)
longProfitPerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=1) * 0.01

shortProfitPerc = input(title="Short Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=1) * 0.01
     
// Set stop loss level with input options (optional)
longLossPerc = input(title="Long Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01

shortLossPerc = input(title="Short Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01    

i_MFI = input(3, title="MFI Length")
OB=input(100, title="Overbought Level")
OS=input(0, title="Oversold Level")
barsizeThreshold=input(.5, step=.05, minval=.1, maxval=1, title="Bar Body Size, 1=No Wicks")
i_MAFilter = input(true, title="Use MA Trend Filter")
i_MALen = input(80, title="MA Length")
// ********** Strategy inputs - End **********


// ********** Supporting functions - Start **********

// A function to check whether the bar or period is in intraday session
barInSession(sess) => time(timeframe.period, sess) != 0
// Figure out take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


// ********** Supporting functions - End **********


// ********** Strategy - Start **********
// See if intraday session is active
bool intradaySession = true

// Trade only if intraday session is active

//=================Strategy logic goes in here===========================
 

MFI=mfi(close,i_MFI)
barsize=high-low
barbodysize=close>open?(open-close)*-1:(open-close)
shortwicksbar=barbodysize>barsize*barsizeThreshold
SMA=sma(close, i_MALen)
MAFilter=close > SMA



BUY = MFI[1] == OB and close > open and shortwicksbar and (i_MAFilter ? MAFilter : true)

SELL = MFI[1] == OS and close < open and shortwicksbar and (i_MAFilter ? not MAFilter : true) 

//Final Long/Short Condition
longCondition = BUY
shortCondition = SELL
 
//Long Strategy - buy condition and exits with Take profit and SL
if (longCondition and intradaySession)
    stop_level = longStopPrice
    profit_level = longExitPrice
    strategy.entry("Buy", strategy.long)
    strategy.exit("TP/SL", "Buy", stop=stop_level, limit=profit_level)


//Short Strategy - sell condition and exits with Take profit and SL
if (shortCondition and intradaySession)
    stop_level = shortStopPrice
    profit_level = shortExitPrice
    strategy.entry("Sell", strategy.short)
    strategy.exit("TP/SL", "Sell", stop=stop_level, limit=profit_level)
 
 
// Square-off position (when session is over and position is open)
squareOff = (not intradaySession) and (strategy.position_size != 0)
strategy.close_all(when = squareOff, comment = "Square-off")

// ********** Strategy - End **********

Lebih lanjut