Strategi pembalikan kuantitatif berdasarkan MFI dan MA

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

img

Gambaran umum

Strategi ini menggunakan indikator MFI untuk mengidentifikasi zona overbought dan oversold dikombinasikan dengan MA untuk menyaring arah pembalikan harga.

Logika Strategi

Strategi ini memanfaatkan indikator MFI untuk mengukur kondisi overbought dan oversold di pasar. Ketika MFI turun di bawah 20 ke zona oversold, itu menandakan bahwa aset tersebut undervalued dan bawah terbentuk, yang menyiratkan sinyal panjang. Ketika MFI naik di atas 80 ke area overbought, itu menunjukkan bahwa aset tersebut overvalued dan kemungkinan akan segera dikoreksi lebih rendah, memicu sinyal pendek.

Untuk menghindari pembalikan palsu, strategi ini juga menggunakan indikator MA untuk menentukan arah tren.

Logika perdagangan khusus adalah:

  1. Ketika MFI menembus bawah 20 ke zona oversold dan close berada di atas garis MA, sinyal beli dihasilkan.

  2. Ketika MFI menembus di atas 80 ke zona overbought dan penutupan menembus garis MA, sinyal jual dipicu.

Dengan konfirmasi indikator ganda, strategi dapat secara efektif mengidentifikasi peluang pembalikan dengan sinyal masuk yang andal.

Keuntungan

  1. Konfirmasi indikator ganda mencegah pecahnya palsu dan memastikan keandalan sinyal yang tinggi.

  2. Menggunakan pembalikan overbought/oversold adalah teknik perdagangan klasik dan teruji waktu.

  3. Menggabungkan penyaringan tren membuat sinyal lebih akurat dan dapat diandalkan.

  4. Dilakukan di berbagai pasar dengan kemampuan beradaptasi yang kuat.

Risiko

  1. Pasar mungkin terus-menerus naik atau turun yang mengarah pada stop loss.

  2. Perlu berhati-hati terhadap risiko sistematis dalam kondisi pasar yang ekstrim yang menyebabkan titik pembalikan yang hilang.

  3. Frekuensi perdagangan yang tinggi dapat menyebabkan peningkatan biaya transaksi.

Pengurangan:

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

  2. Tingkatkan ukuran posisi dengan hati-hati sambil melihat grafik jangka waktu yang lebih tinggi untuk sinyal risiko sistemik.

  3. Mengoptimalkan parameter untuk menghindari perdagangan yang tidak perlu.

Peluang Peningkatan

  1. Mengoptimalkan parameter MA agar sesuai dengan karakteristik instrumen perdagangan.

  2. Perbaiki tingkat overbought / oversold berdasarkan sentimen pasar yang bervariasi.

  3. Masukkan aturan ukuran posisi untuk keuntungan yang lebih terkendali.

Kesimpulan

Strategi ini mengintegrasikan teknik analisis klasik dengan metode kuantum modern. Dengan menerapkan konfirmasi indikator ganda secara ketat, strategi ini menunjukkan adaptivitas yang kuat di berbagai instrumen, menjadikannya strategi jangka pendek umum yang direkomendasikan.


/*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 banyak