
Cette stratégie utilise des moyennes mobiles de trois périodes différentes pour identifier la direction de la tendance du marché. Lorsque les trois moyennes mobiles sont alignées, une position est entrée. De plus, un stop-loss est défini en combinaison avec le prix le plus élevé ou le prix le plus bas de la plus récente ligne N à la racine K.
Calculer les trois moyennes mobiles à long terme, moyen terme et court terme. L’utilisateur peut définir lui-même la période. Par défaut, 20, 10 et 5 jours.
Comparer les directions des trois moyennes mobiles. Lorsqu’une moyenne mobile à court terme est portée à moyen terme et à moyen terme à long terme, le marché est jugé comme un marché à plusieurs têtes. Lorsqu’une moyenne mobile à court terme est portée à moyen terme et à moyen terme à long terme, le marché est jugé comme un marché vide.
Dans les marchés à capitaux multiples, si le prix dépasse le prix le plus élevé de la ligne N à la racine K la plus récente, faites plus; dans les marchés à capitaux vides, si le prix dépasse le prix le plus bas de la ligne N à la racine K la plus récente, faites moins. N est également un paramètre personnalisé pour l’utilisateur.
Une fois la position saisie, le stop-loss est défini. Le stop-loss du marché multiple est le prix le plus bas de la ligne N à la racine K la plus proche, et le stop-loss du marché vide est le prix le plus élevé de la ligne N à la racine K la plus proche.
Cette stratégie, combinée à une moyenne mobile et à un diagramme de ligne K, permet de mieux juger de l’évolution du marché. De plus, le paramètre de stop-loss est raisonnable et permet d’éviter des pertes plus importantes.
La stratégie utilise trois moyennes mobiles pour juger de la fiabilité de la tendance du marché par rapport à une seule moyenne mobile. De plus, il est plus courant de franchir la position en franchissant le prix le plus élevé ou le prix le plus bas de la ligne N à la racine K.
Les principaux risques que cette stratégie pourrait présenter sont:
La probabilité d’erreur dans la direction des trois moyennes mobiles. Si les moyennes mobiles à court et moyen terme provoquent un mauvais signal, cela peut entraîner des pertes inutiles.
Le moment de l’entrée est mal choisi, il est facile de se faire piéger. Le moment de l’entrée doit être optimisé.
Le paramètre Stop Loss est trop petit, et l’extension de Stop Loss aide à donner plus de Running Room.
Cette stratégie peut être optimisée dans les directions suivantes:
Ajout de filtres sur d’autres indicateurs pour assurer la fiabilité du signal de la moyenne mobile.
Optimisation des paramètres périodiques des moyennes mobiles pour les rendre plus adaptées aux différentes variétés.
Ajout d’algorithmes d’apprentissage automatique pour optimiser automatiquement les paramètres.
L’efficacité de cette stratégie a été testée sur des données à haute fréquence.
Cette stratégie est généralement simple, universelle, claire et pratique. Elle est souvent utilisée par les débutants comme exemple d’un système de croisement des moyennes mobiles. En l’optimisant correctement, le système peut être appliqué à un plus large éventail de variétés et de périodes de temps, ce qui permet d’obtenir des gains stables.
/*backtest
start: 2023-01-30 00:00:00
end: 2024-02-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © hobbiecode
//@version=5
strategy("Cross Breakout - Hobbiecode", shorttitle="Cross - HOBBIE", overlay=true)
// User-defined input for moving averages
long_period = input(20, title="Long Period")
medium_period = input(10, title = "Medium Period")
short_period = input(5, title="Short Period")
type_ma = input.string("SMA", title = "MA type", options = ["SMA", "EMA"])
candles_back = input(10, title = "Candles Back")
bars_valid = input(3, title = "Bars to Exit")
// Calculating moving averages
long_ma = 0.0
medium_ma = 0.0
short_ma = 0.0
if type_ma == "SMA"
long_ma := ta.sma(close, long_period)
medium_ma := ta.sma(close, medium_period)
short_ma := ta.sma(close, short_period)
else
long_ma := ta.ema(close, long_period)
medium_ma := ta.ema(close, medium_period)
short_ma := ta.ema(close, short_period)
// Plot moving averages
plot(long_ma, title="Long Moving Average", color=color.red)
plot(medium_ma, title = "Medium Moving Average", color = color.yellow)
plot(short_ma, title="Short Moving Average", color=color.green)
// Check last min/max
last_min = ta.lowest(candles_back)
last_max = ta.highest(candles_back)
// Strategy logic for crossing of moving averages
longCondition = short_ma > medium_ma and medium_ma > long_ma and high == last_max
shortCondition = short_ma < medium_ma and medium_ma < long_ma and low == last_min
longCondition_entry = longCondition and strategy.position_size == 0
shortCondition_entry = shortCondition and strategy.position_size == 0
// Check last min/max for operation
last_min_op = ta.lowest(candles_back)[1]
last_max_op = ta.highest(candles_back)[1]
// Plot lines
var line r1Line = na
// Entry orders
// if (longCondition)
// from_line = chart.point.now(high)
// to_line = chart.point.from_index(bar_index + candles_back, high)
// r1Line := line.new(from_line, to_line, color = color.green, width = 2)
if longCondition_entry and ta.crossover(close,last_max_op)
strategy.entry("Long", strategy.long)
strategy.exit("Exit Long", from_entry="Long", stop=low)
// if (shortCondition)
// from_line = chart.point.now(low)
// to_line = chart.point.from_index(bar_index + candles_back, low)
// r1Line := line.new(from_line, to_line, color = color.red, width = 2)
if shortCondition_entry and ta.crossunder(close,last_min_op)
strategy.entry("Short", strategy.short)
strategy.exit("Exit Short", from_entry="Short", stop=high)
if ta.barssince(longCondition_entry) >= bars_valid
strategy.close("Long")
if ta.barssince(shortCondition_entry) >= bars_valid
strategy.close("Short")