Stratégie de croisement ALMA

Auteur:ChaoZhang est là., Date: 23 février 2023 15:11:02
Les étiquettes:

Résumé

Cette stratégie utilise deux moyennes mobiles d'Arnaud Legoux (ALMA), l'une rapide et l'autre lente, pour générer des signaux croisés. ALMA réduit le décalage et lissue la ligne du signal par rapport aux MAs traditionnels.

La logique de la stratégie

Les principaux indicateurs et règles sont les suivants:

  1. ALMA rapide: une période plus courte pour attraper les évasions.

  2. ALMA lent: une période plus longue pour mesurer la tendance.

  3. Filtre de volume: valable lorsque la courte EMA dépasse la longue EMA.

  4. Signal d'achat: ALMA rapide passe au-dessus de ALMA lent et le filtre de volume passe.

  5. Signal de vente: ALMA rapide passe sous ALMA lent.

  6. Signal court: ALMA rapide passe sous ALMA lent et le filtre de volume passe.

  7. Signal de couverture: ALMA rapide traverse au-dessus d'ALMA lente.

La stratégie combine l'analyse de tendance, de momentum et de volume pour des signaux robustes.

Les avantages

Comparativement aux stratégies traditionnelles de moyennes mobiles, les principaux avantages sont les suivants:

  1. ALMA réduit le retard et améliore la qualité du signal.

  2. Le filtre de volume évite les pertes dues aux fausses éruptions.

  3. La combinaison rapide/lente mesure la direction de la tendance.

  4. Des règles simples et intuitives, faciles à mettre en œuvre.

  5. Adaptation flexible des paramètres de l'AM pour les différents marchés.

  6. Une gestion raisonnable des risques.

  7. Potentiel d'optimisation supplémentaire grâce au réglage des paramètres.

  8. Dans l'ensemble, la stabilité et la qualité ont été améliorées par rapport aux stratégies de croisement traditionnelles.

Les risques

Malgré les avantages, il convient de noter les risques suivants:

  1. Les systèmes croisés sont intrinsèquement vulnérables aux fouets.

  2. La performance d'ALMA dépend du réglage des paramètres.

  3. Les pics de volume peuvent induire en erreur la génération de signaux.

  4. Il y a toujours un certain retard, on ne peut pas éviter toutes les pertes.

  5. Risque de suradaptation par optimisation excessive.

  6. Les signaux échouent quand le volume est anormal.

  7. Les techniques d'apprentissage automatique peuvent générer de meilleurs résultats.

  8. Surveiller le rapport bénéfice/risque afin d'éviter des prélèvements excessifs.

Amélioration

Pour faire face aux risques, des améliorations peuvent être apportées dans les domaines suivants:

  1. Optimisez les paramètres d'ALMA pour une meilleure sensibilité.

  2. Experimenter avec différentes mesures de volume.

  3. Introduire un stop loss pour contrôler les pertes par transaction.

  4. Incorporer d'autres indicateurs pour des signaux solides.

  5. Ajoutez un module d'apprentissage automatique pour un réglage plus intelligent du signal.

  6. Déployer sur plusieurs produits pour diversifier la stratégie.

  7. Optimiser les modèles de dimensionnement des positions pour différents marchés.

  8. Recherchez la robustesse pour éviter une suradaptation.

Conclusion

En conclusion, par rapport aux stratégies crossover traditionnelles, cette stratégie améliore la qualité et la robustesse du signal grâce à l'algorithme ALMA et au filtre de volume. Mais l'optimisation de la stratégie est un processus itératif.


/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 00:00:00
period: 1d
basePeriod: 1h
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/
// © Sarahann999
// Calculations for TP/SL based off: https://kodify.net/tradingview/orders/percentage-profit/
//@version=5
strategy("ALMA Cross", overlay=true)

//User Inputs
src= (close)
long_entry = input(true, title='Long Entry')
short_entry = input(true, title='Short Entry')

//Fast Settings
ALMA1 = input(100, "ALMA Lenghth 1", group= "ALMA Fast Length Settings")
alma_offset = input.float(defval=0.85, title='Arnaud Legoux (ALMA) - Offset Value', minval=0, step=0.01)
alma_sigma = input.int(defval=6, title='Arnaud Legoux (ALMA) - Sigma Value', minval=0)
Alma1 = ta.alma(src, ALMA1, alma_offset, alma_sigma)

//Slow Settings
ALMA2 = input(120, "ALMA Length 2", group = "ALMA Slow Length Settings")
alma_offset2 = input.float(defval=0.85, title='Arnaud Legoux (ALMA) - Offset Value', minval=0, step=0.01)
alma_sigma2 = input.int(defval=6, title='Arnaud Legoux (ALMA) - Sigma Value', minval=0)
Alma2 = ta.alma(src, ALMA2, alma_offset2, alma_sigma2)

//Volume
var cumVol = 0.
cumVol += nz(volume)
if barstate.islast and cumVol == 0
    runtime.error("No volume is provided by the data vendor.")
shortlen = input.int(5, minval=1, title = "Short Length", group= "Volume Settings")
longlen = input.int(10, minval=1, title = "Long Length")
short = ta.ema(volume, shortlen)
long = ta.ema(volume, longlen)
osc = 100 * (short - long) / long

//Define Cross Conditions
buy = ta.crossover(Alma1, Alma2)
sell = ta.crossunder(Alma1, Alma2)

//Calculate Take Profit Percentage
longProfitPerc = input.float(title="Long Take Profit", group='Take Profit Percentage',
     minval=0.0, step=0.1, defval=2) / 100
shortProfitPerc = input.float(title="Short Take Profit",
     minval=0.0, step=0.1, defval=2) / 100
     
// Figure out take profit price 1
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Make inputs that set the stop %  1
longStopPerc = input.float(title="Long Stop Loss", group='Stop Percentage',
     minval=0.0, step=0.1, defval=2.5) / 100
shortStopPerc = input.float(title="Short Stop Loss",
     minval=0.0, step=0.1, defval=2.5) / 100

// Figure Out Stop Price
longStopPrice  = strategy.position_avg_price * (1 - longStopPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortStopPerc)

//Define Conditions
buySignal = buy and osc > 0
     and strategy.position_size == 0

//sellSignal 
sellSignal = sell and osc > 0
     and strategy.position_size == 0

// Submit entry orders
if buySignal and long_entry
    strategy.entry(id="Long", direction=strategy.long, alert_message="Enter Long")
    alert(message="BUY Trade Entry Alert", freq=alert.freq_once_per_bar)
    
if sellSignal and short_entry
    strategy.entry(id="Short", direction=strategy.short, alert_message="Enter Short")
    alert(message="SELL Trade Entry Alert", freq=alert.freq_once_per_bar)
    
// Submit exit orders based on take profit price
if (strategy.position_size > 0)
    strategy.exit(id="Long TP/SL", limit=longExitPrice, stop=longStopPrice, alert_message="Long Exit 1 at {{close}}")
if (strategy.position_size < 0)
    strategy.exit(id="Short TP/SL", limit=shortExitPrice, stop=shortStopPrice, alert_message="Short Exit 1 at {{close}}")

//Draw
plot(Alma1,"Alma Fast", color=color.purple, style=plot.style_circles)
plot(Alma2,"Alma Slow", color=#acb5c2, style=plot.style_circles)

Plus de