Strategi pembalikan kuantitatif berdasarkan MFI dan MA


Tarikh penciptaan: 2023-12-27 14:42:16 Akhirnya diubah suai: 2023-12-27 14:42:16
Salin: 5 Bilangan klik: 761
1
fokus pada
1623
Pengikut

Strategi pembalikan kuantitatif berdasarkan MFI dan MA

Gambaran keseluruhan

Strategi ini adalah strategi perdagangan garis pendek yang menggunakan indikator MFI untuk mengenal pasti kawasan overbought dan oversold, digabungkan dengan penapisan MA untuk menentukan arah pembalikan harga. Ia boleh berfungsi di pasaran seperti saham, forex, komoditi dan cryptocurrency.

Prinsip Strategi

Strategi menggunakan indikator MFI untuk menilai fenomena jual beli di pasaran. Apabila MFI memasuki kawasan jual beli di bawah 20, ia menunjukkan kawasan bawah, nilai diremehkan, dan harga naik; Apabila MFI memasuki kawasan jual beli di atas 80, ia menunjukkan kawasan atas, aset diremehkan, dan harga turun.

Untuk menyaring pembalikan palsu, strategi ini juga memperkenalkan petunjuk MA untuk menentukan arah trend harga. Isyarat perdagangan hanya dihasilkan apabila harga berada di atas atau di bawah garis purata MA pada masa yang sama dengan pembalikan MFI.

Logik urus niaga adalah seperti berikut:

  1. MFI menembusi 20 ke bawah dan memasuki zon terbelah, sementara harga penutupan berada di garis purata MA, menghasilkan isyarat beli
  2. MFI mencecah 80 ke atas dan memasuki zon overbought, sementara harga penutupan jatuh ke bawah garis purata MA, menghasilkan isyarat jual

Dengan cara ini, dengan penapisan dua indikator, peluang untuk berbalik dapat diidentifikasi dengan berkesan, dan isyarat masuk ke lapangan lebih dipercayai.

Kelebihan Strategik

  1. Pengesahan menggunakan dua penunjuk, mengelakkan penembusan palsu, kebolehpercayaan isyarat yang tinggi
  2. Teknik perdagangan klasik dan berkesan yang menggunakan pembalikan zon overbought dan oversold
  3. Gabungan penapisan trend menjadikan isyarat lebih tepat dan boleh dipercayai
  4. Serasi dalam pelbagai pasaran

Risiko Strategik

  1. Pasaran mungkin terus naik atau turun, menyebabkan halangan
  2. Perhatian perlu diberikan kepada risiko sistemik untuk mengelakkan peristiwa melampau menjadi titik balik yang salah
  3. Frekuensi dagangan mungkin lebih tinggi, memerlukan perhatian untuk mengawal kos transaksi

Cara untuk menangani masalah ini:

  1. Pelancaran Stop Loss yang sesuai untuk memberi lebih banyak ruang kepada strategi
  2. Meningkatkan kedudukan dengan memberi perhatian kepada carta peringkat yang lebih besar dan menilai risiko sistematik
  3. Optimumkan parameter untuk mengurangkan transaksi yang tidak penting

Arah pengoptimuman strategi

  1. Optimumkan parameter MA untuk sepadan dengan ciri-ciri varieti dagangan
  2. Mengoptimumkan parameter overbought dan oversold untuk menyesuaikan diri dengan sentimen pasaran yang berbeza
  3. Menambah mekanisme pengurusan kedudukan untuk mengawal keuntungan

ringkaskan

Strategi ini mengintegrasikan kaedah analisis klasik dengan teknologi kuantitatif moden dan menunjukkan adaptasi yang kuat dalam pelbagai jenis melalui penapisan dua indikator yang ketat, merupakan strategi garis pendek umum yang disyorkan.

Kod 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 **********