Stratégie quantitative adaptative à moyenne mobile


Date de création: 2023-11-17 17:14:36 Dernière modification: 2023-11-17 17:14:36
Copier: 0 Nombre de clics: 712
1
Suivre
1617
Abonnés

Stratégie quantitative adaptative à moyenne mobile

Aperçu

Cette stratégie est basée sur des moyennes mobiles et permet d’ajuster automatiquement les paramètres pour les marchés à forte volatilité. Elle est capable de trouver automatiquement la meilleure combinaison de paramètres et de générer un signal de transaction lorsque le prix franchit la moyenne mobile.

Principe de stratégie

Cette stratégie utilise des moyennes mobiles adaptables comme signal de transaction. On calcule d’abord la moyenne mobile simple pour la période spécifiée (start), puis on teste la combinaison de paramètres autour de la CMA pour déterminer quelle combinaison de lignes CMA est la moins touchée par l’entité de la ligne K et la ligne d’ombre. Enfin, on utilise le signal CMA qui est le moins touché.

Plus précisément, la stratégie teste le nombre de touches des lignes CMA, des entités statistiques et des lignes d’ombre après les cycles CMA plus 1 ((CMA_P1) et moins 1 ((CMA_M1)). Si le nombre de touches des lignes CMA est inférieur à celui des lignes CMA_P1 et CMA_M1, alors on conserve le cycle CMA actuel; si le nombre de touches des lignes CMA_P1 est inférieur, alors on ajoute le cycle CMA1; si le nombre de touches des lignes CMA_M1 est inférieur, alors on diminue le cycle CMA1.

Un signal d’achat est généré lorsque le prix franchit la CMA de bas en haut; un signal de vente est généré lorsque le prix franchit la CMA de haut en bas.

Analyse des avantages

Cette stratégie d’adaptation des moyennes mobiles présente les avantages suivants:

  1. La recherche automatique des paramètres optimaux. Il n’est pas nécessaire de sélectionner manuellement les périodes de la moyenne mobile. La stratégie teste automatiquement les différentes périodes pour trouver les paramètres optimaux.

  2. Réduction des faux signaux. En comparaison avec les moyennes mobiles de périodes fixes, les moyennes mobiles adaptables peuvent filtrer plus de bruit, réduisant ainsi de nombreux faux signaux.

  3. Adaptation aux changements du marché. Lorsque le marché passe de la correction à la tendance, le cycle de la moyenne mobile s’allonge automatiquement pour générer des signaux.

  4. Système de négociation simplifié. Cette méthode d’adaptation permet de simplifier l’ensemble du système de négociation sans avoir besoin de paramètres d’optimisation manuelle.

  5. L’idée de la stratégie peut être étendue à d’autres indicateurs, en concevant des stratégies telles que l’adaptation de la bande de Brin, l’adaptation de la KD.

Analyse des risques

Cette stratégie comporte également des risques à prendre en compte:

  1. Risque d’options binaires. Lorsqu’un marché se caractérise par une activité binaire, la ligne réelle ne peut pas franchir la moyenne mobile, ce qui entraîne un faux signal. Des conditions de filtrage doivent être ajoutées pour réduire ce risque.

  2. Le risque de rupture de la moyenne mobile n’est pas toujours continuation, il existe un risque de rupture partielle. Il est donc nécessaire de vérifier la rupture pour assurer la réussite de la rupture.

  3. Risque de renversement de tendance. Une fois entré dans un marché de tendance, le renversement nécessite un changement de direction rapide, sinon des pertes peuvent être causées. Des conditions de stop-loss peuvent être définies pour contrôler les pertes.

  4. Risque d’optimisation des paramètres. Les paramètres qui s’adaptent à eux-mêmes peuvent tomber dans l’optimisation locale, ce qui produit des moyennes mobiles évidemment redondantes. Des méthodes d’évaluation des modèles doivent être introduites pour éviter ce problème.

  5. Risque d’optimisation excessive: les paramètres d’ajustement d’adaptation peuvent être sur-optimisés et la généralisation du modèle est perdue. La vérification de longue durée dans différents environnements de marché est nécessaire et les résultats de la rétroanalyse ne peuvent pas être trop dépendants.

Direction d’optimisation

Cette stratégie d’adaptation des moyennes mobiles peut être optimisée de la manière suivante:

  1. Ajout d’un mécanisme de vérification des ruptures de tendance pour filtrer les fausses ruptures par une série de ruptures.

  2. Ajout d’une stratégie de stop loss lorsque le prix revient de l’autre côté de la moyenne mobile.

  3. Il a ajouté un mécanisme de filtrage d’options pour éviter les signaux erronés dans le marché des options binaires.

  4. L’introduction d’indicateurs d’évaluation pour restreindre l’ajustement des paramètres, tels que IC, LIC, SIC, etc., afin d’éviter que les paramètres ne soient sur-optimisés.

  5. Étendre à d’autres indicateurs, concevoir des stratégies d’adaptation à la fourche dorée, à la ceinture de Brin, etc.

  6. Optimiser le calcul des moyennes mobiles en utilisant des moyennes mobiles pondérées, des moyennes mobiles indexées et des moyennes mobiles lisses.

Résumer

Cette stratégie permet de générer des signaux de négociation en s’adaptant à des cycles de moyennes mobiles pour trouver les paramètres optimaux. Par rapport aux paramètres fixes, elle peut réduire de nombreux faux signaux et s’adapter aux changements du marché. Cependant, nous devons également être conscients de certains risques potentiels. La stratégie doit être vérifiée et optimisée pour la marche en avant afin de générer des bénéfices stables dans les transactions réelles.

||

Overview

This strategy is based on moving average, can automatically adjust parameters, and is suitable for wavy markets at high timeframes. It can automatically find the optimal parameter combination and generate trading signals when price breaks through the moving average line.

Strategy Logic

This strategy uses an adaptive moving average as trading signal. First it calculates the simple moving average (CMA) of the specified period (start). Then it tests the CMA parameters around the period, judging which combination has the least touches by candlestick body and wick. Finally it uses the CMA with the least touches as the signal line.

Specifically, the strategy tests the CMA with period plus 1 (CMA_P1) and minus 1 (CMA_M1), counts the number of touches by body and wick. If CMA has less touches than CMA_P1 and CMA_M1, then keep the current period; if CMA_P1 has less touches, then increase the period by 1; if CMA_M1 has less touches, then decrease the period by 1. This finds a relatively smooth CMA as the signal line.

When price breaks through CMA upward, a buy signal is generated; when price breaks through CMA downward, a sell signal is generated.

Advantage Analysis

This adaptive moving average strategy has the following advantages:

  1. Automatically find optimal parameters. No need to manually select moving average period, the strategy will test different periods and find the optimum.

  2. Reduce false signals. Compared with fixed period MA, the adaptive MA can filter out more noise and reduce many false signals.

  3. Adapt to market changes. When market switches from range-bound to trending, the MA period will automatically increase to generate signals; when market switches from trending to range-bound, the MA period will automatically decrease. So the strategy can dynamically adapt to market changes.

  4. Simplify trading system. This adaptive method can simplify the whole trading system without manual parameter optimization.

  5. Good scalability. The concept can be applied to other indicators like adaptive Bollinger Bands, adaptive KD etc.

Risk Analysis

There are also some risks to note for this strategy:

  1. Call option risk. When market has a call option pattern, the candle body may fail to break the MA line, resulting in wrong signals. Filter conditions need to be added to reduce such risk.

  2. Failed breakout risk. MA breakout does not always continuation, some failed breakouts may occur. Breakout validation is needed to ensure high success rate.

  3. Trend reversal risk. Trend reversal after entering the trend needs to be switched timely, otherwise it may cause losses. Stop loss should be set to control the loss.

  4. Parameter optimization risk. Adaptive adjusted parameters may fall into local optimization, resulting in redundant MAs. Model evaluation methods need to be introduced to avoid this problem.

  5. Overfitting risk. Excessive parameter tuning may lead to overfitting and lose the model generalization ability. Prolonged verification in different market environments is needed, not just rely on backtest results.

Improvement Directions

Some directions to improve this adaptive MA strategy:

  1. Add trend breakout validation via consecutive breakouts to filter false breakouts.

  2. Increase stop loss strategy, stop loss when price moves back to the other side of MA.

  3. Add option filter to avoid wrong signals when call option appears.

  4. Introduce evaluation metrics like IC, LIC, SIC etc. to constrain parameter tuning and prevent overfitting.

  5. Expand to other indicators like adaptive golden cross strategy, adaptive Bollinger Bands etc.

  6. Optimize MA calculation by using weighted MA, exponential MA etc. to get smoother MA.

Summary

This strategy generates trading signals by adaptively adjusting the MA period to find optimal parameters. Compared with fixed parameters, it can reduce many false signals and adapt to market changes. But we also need to watch out for potential risks, and do verification and walk-forward optimization before applying it in live trading for steady profits.

[/trans]

Code source de la stratégie
/*backtest
start: 2022-11-10 00:00:00
end: 2023-11-16 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/
// © fondDealer96636

//@version=5

strategy('Automatic Moving Average', overlay=true, max_bars_back=201, pyramiding=0, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000)

// input
start = 20
lookback = input(20, "Sensitivity", tooltip="Low (High Sensitivity), High (Low Sensitivity).\n\nAdjust according to timeframe and asset.")
smoothing = input(3, "Smoothing")
source = input(close, "Source")
startYear = input(2020, "Start year")
resp = 1

in_date_range = time >= timestamp(syminfo.timezone, startYear, 1, 1, 0, 0)

// global
var ix = -1
var mal = array.new_int(0)


// functions
avg(source, len) =>
    sum = 0.0
    for i = 0 to len-1
        sum += source[i]
    sum/len

bull = close > open

wick_touch(x) =>
    bull ? ((close <= x and x <= high) or (low <= x and x <= open)) : ((open <= x and x <= high) or (low <= x and x <= close))

body_touch(x) =>
    bull ? (open < x and x < close) : (close < x and x < open)

touches(t) =>
    touches = 0
    for i = 0 to lookback-1
        touches += t[i] ? 1 : 0
    touches


// local
ix := ix+1
prev_mal = ix >= 1 ? array.get(mal, ix-1) : start

cma = avg(source, prev_mal)
cma_p1 = avg(source, prev_mal+1)
cma_m1 = avg(source, prev_mal-1)

d = touches(wick_touch(cma))
d_p1 = touches(wick_touch(cma_p1))
d_m1 = touches(wick_touch(cma_m1))

d_b = touches(body_touch(cma))
d_p1_b = touches(body_touch(cma_p1))
d_m1_b = touches(body_touch(cma_m1))

any_body_touch = d_b > 0 or d_p1_b > 0 or d_m1_b > 0
no_wick_touch = d <= 0 and d_p1 <= 0 and d_m1 <= 0
wick_maximized = d >= d_p1 and d >= d_m1 ? prev_mal : (d_p1 >= d and d_p1 >= d_m1 ? prev_mal+resp : (d_m1 >= d and d_m1 >= d_p1 ? prev_mal-resp : na))

up = cma > cma[1]
down = cma < cma[1]
against_trend = (up and close < cma) or (down and close > cma)

new_mal = no_wick_touch or against_trend ? prev_mal-resp : (any_body_touch ? prev_mal+resp : wick_maximized)
next_mal = na(new_mal) ? prev_mal : new_mal

array.push(mal, next_mal < 2 ? 2 : (next_mal > 200 ? 200 : next_mal))


// graph
scma = ta.ema(cma, smoothing)

uptrend = scma > scma[1]
downtrend = scma < scma[1]

plot(scma, "Automatic MA", color=uptrend ? color.green : color.red)

uptrending = close > scma and uptrend
downtrending = close < scma and downtrend

defy = not uptrending and not downtrending
defy_cross = defy and body_touch(scma)

barcolor(uptrending ? color.lime : (downtrending ? color.red : (defy_cross ? color.black : color.white)))


// strategy
change_to_uptrend = uptrending and downtrend[1]
change_to_downtrend = downtrending and uptrend[1]

long = in_date_range and change_to_uptrend
short = in_date_range and change_to_downtrend

if long
    strategy.entry("Long", strategy.long)
if short
    strategy.entry("Short", strategy.short)