RSI Stratégie de grille de boîtes

Auteur:ChaoZhang est là., Date: 2023-10-30 à 11h29
Les étiquettes:

img

Résumé

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 (src dans les paramètres) chaque fois que le RSI traverse en dessous/au-dessus des niveaux de surachat/survente. À partir de cette plage, elle génère une grille à espace égal de cinq lignes et utilise la source actuelle pour déterminer quelle ligne de grille est la plus proche. Ensuite, si la source traverse la ligne directement au-dessus, elle entre en long. Si la source traverse en dessous de la ligne directement en dessous, elle entre en court.

Vous pouvez configurer les courts, la source, la longueur du RSI et les niveaux de surachat / survente dans les paramètres.

La logique de la stratégie

La logique de base de la stratégie est la suivante:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. En utilisant la rupture au lieu de la touche, il peut mieux détecter les renversements de tendance.

  6. Fermez tous les ordres pyramidaux avant la fermeture pour éviter les risques du jour au lendemain.

La stratégie consiste à:

  1. Paramètres d'entrée: source, paramètres RSI, long/court, etc.

  2. Calcul du RSI: calcul du RSI et vérification des signaux croisés.

  3. Grille dynamique: enregistrer la fourchette de prix sur les signaux RSI et calculer les lignes de grille.

  4. Vérification du signal: détecter les lignes de grille de rupture de prix pour les signaux longs/courtes.

  5. Gestion des commandes: envoyer les commandes et les aplatir avant la fermeture.

  6. 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.

Analyse des avantages

Les principaux avantages de cette stratégie sont les suivants:

  1. La grille dynamique s'adapte à la tendance, contrairement aux grilles fixes.

  2. Il n'ajuste la grille que sur confirmation RSI, réduisant le bruit.

  3. Les signaux de rupture détectent mieux les retours que le toucher.

  4. Il s'aplatit avant la fermeture afin d'éviter les risques d'écart d'un jour sur l'autre.

  5. Le RSI est efficace pour la détection de la surachat/vente.

  6. Le mode de rupture permet une entrée de tendance plus précoce par rapport à une réversion.

  7. L'ajustement de l'espacement et de la taille de la grille permet de régler les risques.

  8. Grille visuelle et zones longues/courtes.

  9. Des shorts optionnels pour différents commerçants.

  10. 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.

Analyse des risques

Il y a aussi quelques risques potentiels à noter:

  1. Les marchés à piqûre peuvent entraîner des arrêts de pertes, des arrêts plus larges ou des pauses de trading.

  2. Les lacunes du jour au lendemain peuvent laisser de grandes lacunes ouvertes.

  3. Un mauvais réglage des paramètres peut augmenter les transactions ou les erreurs de signal.

  4. Les frais élevés peuvent éroder les bénéfices des transactions sur le réseau.

  5. Les signaux de rupture peuvent être légèrement en retard.

  6. Il est possible qu'il soit moins performant dans des tendances haussières régulières.

  7. 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

  1. Optimiser les paramètres pour réduire la fréquence des échanges et les suréchanges.

  2. Combinez avec les indicateurs de tendance, évitez les périodes de trading.

  3. Réduire la taille des transactions en % et le risque par transaction.

  4. Testez différents seuils de rupture pour obtenir le meilleur équilibre entre la rapidité et la stabilité.

  5. Ajoutez plus de conditions d'entrée, ne saisissez que des tendances claires pour éviter d'être pris au piège.

  6. Test de retour sur des périodes plus longues pour évaluer la stabilité des paramètres.

  7. Explorer l'optimisation des paramètres dynamiques basée sur l'apprentissage automatique pour une adaptabilité du marché.

  8. Considérez la combinaison avec des stratégies d'options pour couvrir les risques de position.

  9. Ajuster les paramètres en fonction des conditions récentes du marché pour maintenir l'efficacité de la stratégie.

  10. 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.

Des possibilités d'amélioration

La stratégie peut être renforcée par:

  1. Optimiser les paramètres RSI, tester les périodes RSI pour les meilleurs combos.

  2. Tester différents espacements de grille pour un risque-rendement optimal.

  3. Ajout d'autres indicateurs aux signaux filtrés, par exemple MACD, KD, etc. pour améliorer la précision.

  4. Développer des arrêts adaptatifs basés sur la volatilité du marché.

  5. Augmentation des conditions d'entrée, ne saisissez que les tendances évidentes pour éviter les pièges.

  6. Tests antérieurs sur des périodes plus longues pour évaluer la stabilité des paramètres.

  7. Exploration de l'optimisation dynamique basée sur l'apprentissage automatique pour l'adaptabilité.

  8. Incorporer des stratégies d'options pour couvrir les risques.

  9. Adaptation des paramètres en fonction des conditions récentes du marché pour maintenir l'efficacité.

  10. 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.

Résumé

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))

Plus de