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 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:
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é.
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.
La confirmation à double indicateur évite de fausses ruptures et assure une fiabilité élevée du signal.
L'utilisation des inversions de surachat/survente est une technique de négociation classique et éprouvée dans le temps.
L'intégration du filtrage de tendance rend les signaux plus précis et plus fiables.
Applicable sur divers marchés avec une forte adaptabilité.
Le marché peut avoir une tendance persistante à la hausse ou à la baisse conduisant à un stop loss.
Il faut faire attention aux risques systématiques dans des conditions de marché extrêmes qui entraînent des points d'inversion manqués.
Une fréquence de négociation élevée peut entraîner une augmentation des coûts de transaction.
Les mesures d'atténuation
Permettre un stop loss plus large pour donner plus de marge à la stratégie.
Augmenter la taille des positions avec prudence tout en regardant les graphiques de plus longs délais pour les signaux de risque systémique.
Optimiser les paramètres pour éviter les transactions inutiles.
Optimiser les paramètres de l'AM pour qu'ils correspondent aux caractéristiques de l'instrument de négociation.
Les niveaux de surachat et de survente sont ajustés en fonction de l'évolution du sentiment du marché.
Incorporer des règles de taille de position pour des bénéfices plus contrôlés.
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 **********