Cette stratégie est un pseudo-grid bot destiné principalement au trading algorithmique. Elle utilise une grille dynamique pondérée par le volume qui ne s'actualise que lorsque le RSI répond à certaines conditions. C'est également une stratégie de rupture, alors que les robots de grille normaux ne le sont pas (les robots de grille typiques vendent lorsqu'une grille supérieure est atteinte, alors que cette stratégie vend lorsqu'une grille inférieure est violée dans des conditions spécifiques).
En bref, la stratégie met à jour sa grille aux valeurs les plus élevées/les plus basses pondérées par le volume de votre source donnée (
Vous pouvez configurer les courts, la source, la longueur du RSI et les niveaux de surachat / survente dans les paramètres.
La logique de base de la stratégie est la suivante:
Utiliser l'indicateur RSI pour déterminer les points d'inversion de tendance, en utilisant les croisements de lignes RSI des niveaux de surachat/survente comme signaux de confirmation.
Lorsque le signal RSI se produit, les prix les plus élevés/les plus bas au cours d'une période sont enregistrés comme limites supérieures/inférieures du réseau.
Divisez la fourchette en 5 lignes de grille espacées uniformément. Vérifiez en temps réel à quelle ligne le prix est le plus proche.
Lorsque le prix dépasse la ligne ci-dessus, allez long. Lorsque le prix dépasse la ligne ci-dessous, aplatissez les longs et allez court.
En utilisant la rupture au lieu de la touche, il peut mieux détecter les renversements de tendance.
Fermez tous les ordres pyramidaux avant la fermeture pour éviter les risques du jour au lendemain.
La stratégie consiste à:
Paramètres d'entrée: source, paramètres RSI, long/court, etc.
Calcul du RSI: calcul du RSI et vérification des signaux croisés.
Grille dynamique: enregistrer la fourchette de prix sur les signaux RSI et calculer les lignes de grille.
Vérification du signal: détecter les lignes de grille de rupture de prix pour les signaux longs/courtes.
Gestion des commandes: envoyer les commandes et les aplatir avant la fermeture.
Graphique: tracer des lignes de grille, des zones longues ou courtes, etc.
En mettant à jour dynamiquement la grille et en utilisant le RSI pour le contexte de tendance plus les signaux de rupture, cette stratégie peut effectivement suivre les tendances et inverser lorsque la tendance change.
Les principaux avantages de cette stratégie sont les suivants:
La grille dynamique s'adapte à la tendance, contrairement aux grilles fixes.
Il n'ajuste la grille que sur confirmation RSI, réduisant le bruit.
Les signaux de rupture détectent mieux les retours que le toucher.
Il s'aplatit avant la fermeture afin d'éviter les risques d'écart d'un jour sur l'autre.
Le RSI est efficace pour la détection de la surachat/vente.
Le mode de rupture permet une entrée de tendance plus précoce par rapport à une réversion.
L'ajustement de l'espacement et de la taille de la grille permet de régler les risques.
Grille visuelle et zones longues/courtes.
Des shorts optionnels pour différents commerçants.
Une logique simple et claire adaptée au trading d'algo.
Ceux-ci rendent la stratégie capable de suivre automatiquement la tendance avec des contrôles de risque pour le trading en direct.
Il y a aussi quelques risques potentiels à noter:
Les marchés à piqûre peuvent entraîner des arrêts de pertes, des arrêts plus larges ou des pauses de trading.
Les lacunes du jour au lendemain peuvent laisser de grandes lacunes ouvertes.
Un mauvais réglage des paramètres peut augmenter les transactions ou les erreurs de signal.
Les frais élevés peuvent éroder les bénéfices des transactions sur le réseau.
Les signaux de rupture peuvent être légèrement en retard.
Il est possible qu'il soit moins performant dans des tendances haussières régulières.
Il faut suffisamment de capital pour des positions de plus grande taille et des pyramides, sinon les résultats seront médiocres.
Les mesures d'atténuation
Optimiser les paramètres pour réduire la fréquence des échanges et les suréchanges.
Combinez avec les indicateurs de tendance, évitez les périodes de trading.
Réduire la taille des transactions en % et le risque par transaction.
Testez différents seuils de rupture pour obtenir le meilleur équilibre entre la rapidité et la stabilité.
Ajoutez plus de conditions d'entrée, ne saisissez que des tendances claires pour éviter d'être pris au piège.
Test de retour sur des périodes plus longues pour évaluer la stabilité des paramètres.
Explorer l'optimisation des paramètres dynamiques basée sur l'apprentissage automatique pour une adaptabilité du marché.
Considérez la combinaison avec des stratégies d'options pour couvrir les risques de position.
Ajuster les paramètres en fonction des conditions récentes du marché pour maintenir l'efficacité de la stratégie.
Construire des plateformes d'optimisation visuelle pour faciliter les tests rapides.
Avec l'optimisation des paramètres, le peignage des signaux, et plus d'informations sur le marché, les risques peuvent être réduits pour faire une stratégie algos vraiment fiable.
La stratégie peut être renforcée par:
Optimiser les paramètres RSI, tester les périodes RSI pour les meilleurs combos.
Tester différents espacements de grille pour un risque-rendement optimal.
Ajout d'autres indicateurs aux signaux filtrés, par exemple MACD, KD, etc. pour améliorer la précision.
Développer des arrêts adaptatifs basés sur la volatilité du marché.
Augmentation des conditions d'entrée, ne saisissez que les tendances évidentes pour éviter les pièges.
Tests antérieurs sur des périodes plus longues pour évaluer la stabilité des paramètres.
Exploration de l'optimisation dynamique basée sur l'apprentissage automatique pour l'adaptabilité.
Incorporer des stratégies d'options pour couvrir les risques.
Adaptation des paramètres en fonction des conditions récentes du marché pour maintenir l'efficacité.
Construire des plateformes d'optimisation visuelle pour des tests rapides.
Avec une optimisation automatisée, des combinaisons de stratégies, plus d'informations sur le marché, etc., il peut atteindre une meilleure stabilité et des rendements en tant que véritable stratégie de trading.
En résumé, la stratégie RSI Box Grid utilise le RSI pour identifier la confirmation de l'inversion de tendance, définit des grilles de gamme de prix dynamiques, des ruptures de transactions et aplatit l'intraday - formant une tendance flexible suivant la stratégie de trading algos.
La stratégie présente des avantages, notamment le RSI pour le contexte de tendance, les grilles dynamiques, le trading de rupture et l'aplatissement complet intradien. Cela lui permet de suivre efficacement les tendances avec des contrôles de risque. Cependant, des risques tels que les arrêts de perte par pioche, les écarts du jour au lendemain existent, nécessitant une optimisation, un peignage des signaux et une gestion des risques.
Il existe de nombreuses opportunités d'amélioration, en incorporant plus d'indicateurs, l'optimisation ML, le backtesting visuel, etc., il peut devenir une stratégie de trading d'algo plus robuste à haut rendement.
/*backtest start: 2023-09-29 00:00:00 end: 2023-10-29 00:00:00 period: 1h basePeriod: 15m 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/ // © wbburgin //@version=5 // strategy("RSI Box Strategy (pseudo-Grid Bot)", overlay=true, initial_capital = 10000, // default_qty_type = strategy.percent_of_equity, default_qty_value = 1, pyramiding = 33, commission_value=0.10) src = input.source(close,"Source") rsiLength = input.int(14,"RSI Length") oblvl = input.int(70,"Overbought Level") oslvl = input.int(30,"Oversold Level") useShorts = input.bool(false,"Use Shorts",inline="B") showGrid = input.bool(false,"Show Grid",inline="B") rsi = ta.rsi(src,rsiLength) rsi_crossdn = ta.crossunder(rsi,oblvl) rsi_crossup = ta.crossover(rsi,oslvl) highest = ta.vwma(ta.highest(src,rsiLength),rsiLength) lowest = ta.vwma(ta.lowest(src,rsiLength), rsiLength) gridTop = ta.valuewhen(rsi_crossdn,highest,0) gridBottom = ta.valuewhen(rsi_crossup,lowest,0) gridMiddle = math.avg(gridTop,gridBottom) gridMidTop = math.avg(gridMiddle,gridTop) gridMidBottom = math.avg(gridMiddle,gridBottom) diff1 = math.abs(src - gridTop) diff2 = math.abs(src - gridBottom) diff3 = math.abs(src - gridMiddle) diff4 = math.abs(src - gridMidTop) diff5 = math.abs(src - gridMidBottom) minDiff = math.min(diff1, diff2, diff3, diff4, diff5) // Determine which line is the closest float closestLine = na if minDiff == diff1 closestLine := gridTop else if minDiff == diff2 closestLine := gridBottom else if minDiff == diff3 closestLine := gridMiddle else if minDiff == diff4 closestLine := gridMidTop else if minDiff == diff5 closestLine := gridMidBottom buyCrosses = ta.crossover(src,gridTop) or ta.crossover(src,gridBottom) or ta.crossover(src,gridMiddle) or ta.crossover(src,gridMidTop) or ta.crossover(src,gridMidBottom) sellCrosses= ta.crossunder(src,gridTop) or ta.crossunder(src,gridBottom) or ta.crossunder(src,gridMiddle) or ta.crossunder(src,gridMidTop) or ta.crossunder(src,gridMidBottom) condition_bull = buyCrosses condition_bear = sellCrosses var float bull_status_line = na var float bear_status_line = na var float bull_buy_line = na var float bear_sell_line = na if condition_bull bull_status_line := closestLine if condition_bear bear_status_line := closestLine if bull_status_line == gridBottom bull_buy_line := gridMidBottom if bull_status_line == gridMidBottom bull_buy_line := gridMiddle if bull_status_line == gridMiddle bull_buy_line := gridMidTop if bull_status_line == gridMidTop bull_buy_line := gridTop if bear_status_line == gridTop bear_sell_line := gridMidTop if bear_status_line == gridMidTop bear_sell_line := gridMiddle if bear_status_line == gridMiddle bear_sell_line := gridMidBottom if bear_status_line == gridMidBottom bear_sell_line := gridBottom l = ta.crossover(src,bull_buy_line) s = ta.crossunder(src,bear_sell_line) if l strategy.entry("Long",strategy.long) if s strategy.close("Long") if useShorts strategy.entry("Short",strategy.short) // Plotting in_buy = ta.barssince(l) < ta.barssince(s) u=plot(bull_buy_line,color=na,title="Buy Plot") d=plot(bear_sell_line,color=na,title="Sell Plot") plot(not showGrid?na:gridBottom,color=color.new(color.white,75),title="Grid Line -2") plot(not showGrid?na:gridMidBottom,color=color.new(color.white,75),title="Grid Line -1") plot(not showGrid?na:gridMiddle,color=color.new(color.white,75),title="Grid Line 0") plot(not showGrid?na:gridMidTop,color=color.new(color.white,75),title="Grid Line 1") plot(not showGrid?na:gridTop,color=color.new(color.white,75),title="Grid Line 2") fill(u,d,color=in_buy ? color.new(color.lime,75) : color.new(color.red,75))