Stratégie d'inversion quantitative basée sur les IFM et les MA

Auteur:ChaoZhang est là., Date: 2023-12-27 à 14h42h16
Les étiquettes:

img

Résumé

Cette stratégie utilise l'indicateur MFI pour identifier les zones de surachat et de survente combinées à la MA pour filtrer la direction de l'inversion des prix.

La logique de la stratégie

La stratégie tire parti de l'indicateur des IFM pour évaluer les conditions de surachat et de survente sur le marché. Lorsque l'IFM tombe en dessous de 20 dans la zone de survente, cela indique que l'actif est sous-évalué et qu'un fond se forme, ce qui implique un signal long. Lorsque l'IFM dépasse 80 dans la zone de surachat, cela suggère que l'actif est surévalué et qu'il est probable qu'il se corrige bientôt, ce qui déclenche un signal court.

Pour éviter de faux renversements, la stratégie utilise également l'indicateur MA pour déterminer la direction de la tendance.

La logique de négociation spécifique est la suivante:

  1. Lorsque l'IFM franchit la barre inférieure à 20 dans la zone de survente et que la clôture se situe au-dessus de la ligne MA, un signal d'achat est généré.

  2. Lorsque l'IFM franchit le seuil supérieur à 80 pour entrer dans la zone de surachat et que la clôture franchit la ligne MA, un signal de vente est déclenché.

Avec la confirmation du double indicateur, la stratégie permet d'identifier efficacement les opportunités d'inversion avec des signaux d'entrée fiables.

Les avantages

  1. La confirmation à double indicateur évite de fausses ruptures et assure une fiabilité élevée du signal.

  2. L'utilisation des inversions de surachat/survente est une technique de négociation classique et éprouvée dans le temps.

  3. L'intégration du filtrage de tendance rend les signaux plus précis et plus fiables.

  4. Applicable sur divers marchés avec une forte adaptabilité.

Les risques

  1. Le marché peut avoir une tendance persistante à la hausse ou à la baisse conduisant à un stop loss.

  2. Il faut faire attention aux risques systématiques dans des conditions de marché extrêmes qui entraînent des points d'inversion manqués.

  3. Une fréquence de négociation élevée peut entraîner une augmentation des coûts de transaction.

Les mesures d'atténuation

  1. Permettre un stop loss plus large pour donner plus de marge à la stratégie.

  2. Augmenter la taille des positions avec prudence tout en regardant les graphiques de plus longs délais pour les signaux de risque systémique.

  3. Optimiser les paramètres pour éviter les transactions inutiles.

Des possibilités d'amélioration

  1. Optimiser les paramètres de l'AM pour qu'ils correspondent aux caractéristiques de l'instrument de négociation.

  2. Les niveaux de surachat et de survente sont ajustés en fonction de l'évolution du sentiment du marché.

  3. Incorporer des règles de taille de position pour des bénéfices plus contrôlés.

Conclusion

Cette stratégie intègre des techniques classiques d'analyse avec des méthodes quantiques modernes. En appliquant rigoureusement des confirmations à deux indicateurs, elle démontre une robuste adaptabilité à travers divers instruments, ce qui en fait une stratégie générique à court terme recommandée.


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

Plus de