Strategi pembalikan kuantitatif berdasarkan MFI dan MA


Tanggal Pembuatan: 2023-12-27 14:42:16 Akhirnya memodifikasi: 2023-12-27 14:42:16
menyalin: 5 Jumlah klik: 761
1
fokus pada
1623
Pengikut

Strategi pembalikan kuantitatif berdasarkan MFI dan MA

Ringkasan

Strategi ini adalah strategi perdagangan short-line yang menggunakan indikator MFI untuk mengidentifikasi area overbought dan oversold, yang dikombinasikan dengan penyaringan MA untuk menentukan arah harga berbalik. Strategi ini dapat bekerja di pasar seperti saham, forex, komoditas, dan cryptocurrency.

Prinsip Strategi

Strategi ini menggunakan indikator MFI untuk menilai fenomena overbought dan oversold di pasar. Ketika MFI memasuki zona oversold di bawah 20, ini menunjukkan zona bawah, nilai diremehkan, dan saat ini melambung; Ketika MFI memasuki zona overbought di atas 80, ini menunjukkan zona atas, aset diremehkan, dan saat ini turun.

Untuk memfilter pembalikan palsu, strategi ini juga memperkenalkan indikator MA untuk menentukan arah tren harga. Hanya ketika MFI membalikkan harga, dan harga berada di atas atau di bawah garis rata-rata MA, sinyal perdagangan dihasilkan.

Logika transaksi adalah sebagai berikut:

  1. MFI turun di bawah 20 dan memasuki zona oversold, sementara harga penutupan naik ke garis rata-rata MA, menghasilkan sinyal beli
  2. MFI naik lebih dari 80 dan memasuki zona overbought, sementara harga close-out jatuh di bawah garis rata-rata MA, menghasilkan sinyal jual

Dengan cara ini, dengan filter indikator ganda, peluang untuk berbalik dapat diidentifikasi secara efektif, dan sinyal masuk ke lapangan lebih dapat diandalkan.

Keunggulan Strategis

  1. Menggunakan pengesahan dua indikator, menghindari penembusan palsu, sinyal dapat diandalkan
  2. Menggunakan overbought dan oversold zone reversal adalah teknik trading klasik yang efektif.
  3. Kombinasi pemfilteran tren membuat sinyal lebih akurat dan lebih dapat diandalkan
  4. Adaptasi untuk berbagai pasar, fleksibilitas tinggi

Risiko Strategis

  1. Pasar mungkin terus naik atau turun, menyebabkan stop loss
  2. Perhatian terhadap risiko sistemik untuk menghindari terjadinya pergeseran yang salah dalam situasi ekstrem
  3. Frekuensi transaksi mungkin lebih tinggi, perlu memperhatikan pengendalian biaya transaksi

Cara Mengatasinya:

  1. Memperkecil Stop Loss dan Memberikan Lebih Banyak Ruang untuk Strategi
  2. Perhatikan grafik tingkat yang lebih besar untuk menilai risiko sistematis saat meningkatkan posisi
  3. Optimalkan Parameter, Kurangi Transaksi Tak Berarti

Arah optimasi strategi

  1. Optimalkan parameter MA agar sesuai dengan karakteristik varietas yang diperdagangkan
  2. Mengoptimalkan parameter overbought dan oversold untuk menyesuaikan dengan berbagai sentimen pasar
  3. Menambahkan mekanisme manajemen posisi untuk membuat keuntungan lebih terkendali

Meringkaskan

Strategi ini mengintegrasikan metode analisis klasik dengan teknologi kuantitatif modern, dengan penyaringan dua indikator yang ketat, menunjukkan adaptasi yang kuat di berbagai varietas, dan merupakan strategi garis pendek umum yang disarankan.

Kode Sumber Strategi
/*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 **********