Stratégie à faible rupture de l'inversion moyenne

Auteur:ChaoZhang est là., Date: 2023-11-02 15h34 et 22h
Les étiquettes:

img

Résumé

L'idée principale de cette stratégie est de détecter si le prix franchit le prix le plus bas dans une période spécifiée et de long, en attendant que le prix revienne à la moyenne.

La logique de la stratégie

La stratégie obtient le prix le plus bas dans une période spécifiée lowestLow en utilisant la méthode ta.lowest de Pine Script et le compare avec le prix le plus bas de la période précédente prevLow.

Si le prix le plus bas de la dernière période est inférieur au prix le plus bas de la période précédente, un signal long est déclenché.

La stratégie permet de choisir la condition de déclenchement, c'est-à-dire que le prix le plus bas doit franchir 1, 2, 3 ou 4 prix les plus bas précédents consécutivement, afin de contrôler la fréquence de négociation.

Il affiche également la ligne de prix la plus basse la plus basse et la ligne de prix la plus élevée la plus élevée sur le graphique pour afficher visuellement le changement de tendance.

Analyse des avantages

  • La stratégie capte la tendance à l'inversion après avoir franchi de nouveaux sommets avec un taux de gain relativement élevé.

  • Permet de choisir le nombre de prix inférieurs brisés pour contrôler la fréquence des transactions.

  • Le tracé des lignes permet de déterminer visuellement les points de changement de tendance.

  • Une logique stratégique simple et claire, facile à comprendre et à mettre en œuvre.

  • Peut être configuré et optimisé sur différents stocks et périodes.

Analyse des risques

  • La rupture d'un faux fond ne peut pas déterminer les points d'inversion de tendance, peut entraîner des pertes.

  • Besoin de tester différentes combinaisons de paramètres pour optimiser les configurations, sinon la fréquence de négociation peut être trop élevée ou trop faible.

  • Les paramètres doivent être ajustés pour les différents stocks et ne doivent pas être appliqués de façon mécanique.

  • Une période de retest insuffisante peut entraîner un surmontage.

  • Le prix peut atteindre de nouveaux creux après la rupture, besoin de mettre un stop loss pour contrôler les risques.

Directions d'optimisation

  • Ajoutez des mécanismes de stop-loss comme le stop-loss mobile, le stop-loss de suivi, pour limiter la perte par transaction.

  • Optimiser le nombre de ruptures pour équilibrer la fréquence de négociation et la qualité du signal.

  • Paramètres d'essai sur différents stocks et périodes.

  • Ajoutez des filtres pour éviter les transactions fréquentes sur des marchés variés.

  • Considérez l'ajout d'indicateurs de tendance pour éviter le contre-trend.

  • Testez différents signaux de sortie.

Conclusion

La stratégie capte les opportunités d'inversion en surveillant les écarts de prix les plus bas, une stratégie de rupture de réversion moyenne typique. Les avantages sont la simplicité, la fréquence contrôlable et l'applicabilité à divers stocks. Mais elle comporte également certains faux risques de rupture. L'ajout de filtres et d'optimisation est nécessaire, ainsi que le contrôle des risques. Avec des tests et une optimisation complets, il peut devenir un système de trading stable et fiable.


/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 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/
// © merovinh

//@version=5
strategy(title="Merovinh - Mean Reversion Lowest low",
     overlay = true,
     default_qty_type = strategy.percent_of_equity,
     initial_capital = 10000,
     default_qty_value = 10,
     commission_type = strategy.commission.percent,
     slippage = 1,
     commission_value = 0.04)

GR_TIME = 'Time Period'

bars = input(9, title = "Minimum number of bars", tooltip = "The minimum number of bars before updating lowest low / highest high")

numberOfLows  = input.string(defval='One', title='Number of broken lows', options=['One', 'Two', 'Three', 'Four'])

//Period

var prevLow = .0
var prevHigh = .0
var prevLow2 = .0
var prevLow3 = .0
var prevLow4 = .0

truetime = true


highestHigh = ta.highest(high, bars)
lowestLow = ta.lowest(low, bars)

if numberOfLows == 'One'
    if truetime and prevLow > 0 and lowestLow < prevLow
        strategy.entry('long', strategy.long)
if numberOfLows == 'Two'
    if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2
        strategy.entry('long', strategy.long)
if numberOfLows == 'Three'
    if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2 and prevLow2 < prevLow3
        strategy.entry('long', strategy.long)
if numberOfLows == 'Four'
    if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2 and prevLow2 < prevLow3 and prevLow3 < prevLow4
        strategy.entry('long', strategy.long)

if truetime and prevHigh > 0 and highestHigh > prevHigh
    strategy.close('long')


if prevLow != lowestLow
    prevLow4 := prevLow3
    prevLow3 := prevLow2
    prevLow2 := prevLow
    prevLow := lowestLow
prevHigh := highestHigh

plot(lowestLow, color=color.green, linewidth=1, title="Lowest Low Line")
plot(highestHigh, color=color.green, linewidth=1, title="Highest High Line")




Plus de