
La stratégie de négociation quantitative de rupture de prix clé à plusieurs têtes de Livermore est une méthode de négociation systématique basée sur la philosophie de négociation de Jesse Livermore. La stratégie capture avec précision le moment où le prix franchit les points critiques de soutien et de résistance en identifiant les principales tendances du marché, les retournements naturels et les retournements secondaires.
Cette stratégie est basée sur la philosophie de trading de Jesse Livermore et divise les tendances du marché en six états: tendance haussière principale (MAIN_UP), tendance baissière principale (MAIN_DOWN), rebond naturel (NATURAL_REBOUND), rebond naturel (NATURAL_RETRACEMENT), rebond secondaire (SECONDARY_REBOUND) et rebond secondaire (SECONDARY_RETRACEMENT).
La stratégie consiste à déterminer l’état de la tendance du marché en calculant la relation entre le prix actuel et les points clés historiques, en combinaison avec un rapport de distance pivot par défaut (qui peut être un pourcentage fixe ou basé sur un calcul dynamique de l’ATR). La logique est la suivante:
Dans une tendance majeure à la hausse, maintenir l’état de tendance à la hausse et renouveler le point le plus élevé lorsque la hausse ou la reprise des prix ne dépasse pas la limite définie par le multiplicateur de l’axe principal; lorsque la reprise dépasse la limite, passer à l’état de reprise naturelle.
Dans une tendance majeure à la baisse, maintenir un état de tendance à la baisse et mettre à jour le point le plus bas lorsque les prix continuent à baisser ou lorsque le rebond ne dépasse pas le seuil défini par le multiplicateur de l’axe majeur; passer à un état de rebond naturel lorsque le rebond dépasse le seuil.
La conversion de tendance entre les rebonds naturels et les rebonds secondaires est jugée en fonction de la relation entre le prix et les hauts et les bas historiques, ainsi que des multiples de l’axe principal et secondaire prédéfinis.
La logique de génération de signaux de négociation est la suivante: établir une position de multiples lorsque deux cycles consécutifs de tendance confirment une tendance à la hausse principale; et une position de placement lorsque deux cycles consécutifs de tendance confirment une tendance à la baisse principale.
Systématisation des jugements de tendanceLa stratégie consiste à systématiser la théorie de la négociation de Livermore, en définissant les différents états de tendance par des modèles mathématiques clairs, éliminant ainsi les incertitudes liées au jugement subjectif.
Très adaptable: La flexibilité de la stratégie est renforcée par la possibilité d’adapter la stratégie à différents environnements de marché et conditions de volatilité grâce à des pourcentages de distance de pivot paramétrables et des options ATR.
Mécanisme de confirmationLa stratégie exige deux cycles consécutifs de confirmation de la tendance avant d’exécuter une transaction, ce qui réduit efficacement les pertes causées par les fausses ruptures.
Intégration de la gestion des fondsStratégie: Utiliser les pourcentages d’intérêt des comptes pour gérer les positions, en veillant à maintenir une marge de risque uniforme pour les différentes tailles de comptes.
Capture des tendances à long termeEn distinguant les tendances majeures des tendances secondaires, la stratégie capture efficacement les tendances macrocycliques et évite d’être perturbée par le bruit à court terme.
Risque de retard: La stratégie nécessite de confirmer l’état de la tendance sur deux cycles avant d’exécuter la transaction, ce qui peut entraîner la perte d’une partie des bénéfices au début de la tendance ou la perte d’un retrait plus important lorsque la tendance est inversée.
Paramètre SensibilitéLes performances de la stratégie dépendent fortement de paramètres tels que le pourcentage de distance entre les axes pivots, le nombre de multiplications des axes pivots principaux et secondaires, et les paramètres inappropriés peuvent entraîner des transactions excessives ou des signaux importants manqués.
Restrictions sur les transactions à sens unique: La stratégie est conçue pour exécuter uniquement des transactions à plusieurs titres, ce qui peut entraîner une plus longue période d’immobilisation dans un marché à la baisse, ce qui affecte le taux de rendement global.
La complexité de la définition des tendances: La logique de conversion entre les six états de tendance est plus complexe et peut entraîner des changements d’état fréquents en cas de forte volatilité du marché, augmentant les coûts de transaction.
Manque de mécanisme de prévention: Le code n’a pas de paramètre de stop loss explicite, ce qui pourrait entraîner des pertes importantes en cas de reprise brutale du marché.
Augmentation du mécanisme de prévention des pertesIntroduction d’une stratégie de stop loss basée sur l’ATR ou un pourcentage fixe pour contrôler le risque d’une seule transaction avant le renversement de la tendance. La mise en œuvre concrète permet de définir un prix de stop loss tout en établissant des positions multiples pour protéger la sécurité des fonds.
Optimisation du mécanisme de confirmation de tendance: La stratégie actuelle nécessite deux cycles consécutifs de confirmation de tendance. On peut envisager de combiner le trafic ou d’autres indicateurs techniques pour la confirmation de tendance et améliorer la qualité du signal.
Ajout d’une fonction de prévisualisationExpansion de la stratégie pour soutenir les transactions aériennes, exploiter les opportunités de profit dans les tendances baissières et améliorer la performance de la stratégie tout au long de la saison
Ajustement des paramètres dynamiquesL’introduction d’un mécanisme d’ajustement des paramètres dynamiques basé sur la volatilité historique ou l’état du marché permet à la stratégie de mieux s’adapter aux différentes conditions du marché.
Ajout de conditions de filtrageLe filtrage de base, combiné à des filtres cycliques, saisonniers ou fondamentaux, permet d’éviter les positions dans des conditions défavorables et d’améliorer le taux de victoire.
Construction par lots et stockageLe but de ce projet est de mettre en place un mécanisme d’entrée et de sortie par lots, de réduire le risque de sélection des opportunités et d’optimiser l’efficacité de l’utilisation des fonds.
La stratégie de négociation quantifiée de rupture des cours clés de plusieurs têtes de Livermore a réussi à transformer la philosophie de négociation classique de Jesse Livermore en un système algorithmique d’exécution quantifiable. En définissant avec précision les six états de tendance du marché et leurs conditions de conversion, la stratégie est capable d’identifier et de suivre efficacement les principales tendances à la hausse et d’exécuter des transactions multiples sur la base de tendances confirmées.
Bien que les stratégies présentent des avantages tels que la systématisation, l’adaptabilité et le mécanisme de confirmation intégré, elles sont également exposées à des risques tels que le retard, la sensibilité des paramètres et le manque de stop loss. L’optimisation de la direction de l’augmentation du mécanisme de stop loss, de l’optimisation de la reconnaissance des tendances, de l’extension de la fonction de blanchiment et de la réalisation de l’ajustement des paramètres dynamiques peut améliorer encore la stabilité et la rentabilité des stratégies.
Dans l’ensemble, la stratégie fournit un cadre solide pour les investisseurs qui cherchent à mettre en œuvre la philosophie de trading de Livermore de manière systématique, avec des rendements stables et à long terme sur les transactions réelles, grâce à un ajustement approprié des paramètres et à une optimisation de la gestion des risques.
/*backtest
start: 2024-07-16 00:00:00
end: 2025-07-12 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":200000}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © bozhang_ox
//@version=6
strategy("Trading strategy Jesse Livermore", overlay=true)
// Input parameters
pivot_distance_percentage = input.float(0.5, title="Pivot Distance Percentage")
major_pivot_multiplier = input.int(6, title="Major Pivot Multiplier")
minor_pivot_multiplier = input.int(3, title="Minor Pivot Multiplier")
use_atr_pivot_distance = input.bool(false, title="Use ATR for Pivot Distance")
atr_period = input.int(14, title="ATR Period")
atr_pivot_multiplier = input.float(1, title="ATR Pivot Multiplier")
// Calculate ATR
atr = ta.atr(atr_period)
// Helper function to calculate pivot distance ratio
pivot_distance_ratio = use_atr_pivot_distance ? (atr * atr_pivot_multiplier) / close : pivot_distance_percentage / 100
// Trend states
NONE = 0
MAIN_UP = 6
MAIN_DOWN = 1
NATURAL_REBOUND = 2
NATURAL_RETRACEMENT = 5
SECONDARY_REBOUND = 4
SECONDARY_RETRACEMENT = 3
// Variables to track trends
var float main_up_max = na
var float main_down_min = na
var float natural_rebound_max = na
var float natural_retracement_min = na
var int trend = NONE
var int prev_trend = NONE
var int prev_prev_trend = NONE
// Initialize variables
if na(main_up_max)
main_up_max := -1e10
if na(main_down_min)
main_down_min := 1e10
if na(natural_rebound_max)
natural_rebound_max := -1e10
if na(natural_retracement_min)
natural_retracement_min := 1e10
// Trend logic
if trend == NONE
if close > close[1]
trend := MAIN_UP
main_up_max := close
else
trend := MAIN_DOWN
main_down_min := close
else if trend == MAIN_UP
if close > close[1] or (main_up_max - close < close[1] * pivot_distance_ratio * major_pivot_multiplier)
trend := MAIN_UP
main_up_max := math.max(main_up_max, close)
else
trend := NATURAL_RETRACEMENT
natural_retracement_min := close
else if trend == MAIN_DOWN
if close < close[1] or (close - main_down_min < close[1] * pivot_distance_ratio * major_pivot_multiplier)
trend := MAIN_DOWN
main_down_min := math.min(main_down_min, close)
else
trend := NATURAL_REBOUND
natural_rebound_max := close
else if trend == NATURAL_REBOUND
if close > close[1]
if close <= main_up_max
if close - natural_rebound_max <= close[1] * pivot_distance_ratio * minor_pivot_multiplier
trend := NATURAL_REBOUND
natural_rebound_max := math.max(natural_rebound_max, close)
else
trend := MAIN_UP
main_up_max := close
else
trend := MAIN_UP
main_up_max := close
else
if natural_rebound_max - close <= close[1] * pivot_distance_ratio * major_pivot_multiplier
trend := NATURAL_REBOUND
else if close < natural_retracement_min
trend := NATURAL_RETRACEMENT
natural_retracement_min := close
else
trend := SECONDARY_RETRACEMENT
else if trend == NATURAL_RETRACEMENT
if close < close[1]
if close >= main_down_min
if natural_retracement_min - close <= close[1] * pivot_distance_ratio * minor_pivot_multiplier
trend := NATURAL_RETRACEMENT
natural_retracement_min := math.min(natural_retracement_min, close)
else
trend := MAIN_DOWN
main_down_min := close
else
trend := MAIN_DOWN
main_down_min := close
else
if close - natural_retracement_min <= close[1] * pivot_distance_ratio * major_pivot_multiplier
trend := NATURAL_RETRACEMENT
else if close > natural_rebound_max
trend := NATURAL_REBOUND
natural_rebound_max := close
else
trend := SECONDARY_REBOUND
else if trend == SECONDARY_REBOUND
if close <= natural_rebound_max and close >= natural_retracement_min
trend := SECONDARY_REBOUND
else if close < natural_retracement_min
trend := NATURAL_RETRACEMENT
natural_retracement_min := close
else
trend := NATURAL_REBOUND
natural_rebound_max := close
else if trend == SECONDARY_RETRACEMENT
if close >= natural_retracement_min and close <= natural_rebound_max
trend := SECONDARY_RETRACEMENT
else if close > natural_rebound_max
trend := NATURAL_REBOUND
natural_rebound_max := close
else
trend := NATURAL_RETRACEMENT
natural_retracement_min := close
// Execute trades based on trend changes
if prev_trend != prev_prev_trend
if trend == MAIN_UP and prev_trend == MAIN_UP
strategy.entry("Long Entry", strategy.long, comment="Long Entry")
else if trend == MAIN_DOWN and prev_trend == MAIN_DOWN
strategy.close("Long Entry", comment = "Long Close")
// Update previous trend
prev_prev_trend := prev_trend
prev_trend := trend