Stratégie quantitative de moyenne mobile adaptative

Auteur:ChaoZhang est là., Date: 2023-11-17 17:14:36 Je suis désolé
Les étiquettes:

Résumé

Cette stratégie est basée sur la moyenne mobile, peut ajuster automatiquement les paramètres et convient aux marchés ondulants à des délais élevés.

La logique de la stratégie

Cette stratégie utilise une moyenne mobile adaptative comme signal de trading. Elle calcule d'abord la moyenne mobile simple (CMA) de la période spécifiée (début). Elle teste ensuite les paramètres de la CMA autour de la période, en jugeant quelle combinaison a le moins de touches par corps de chandelier et de mèche. Enfin, elle utilise la CMA avec le moins de touches comme ligne de signal.

Plus précisément, la stratégie teste la CMA avec la période plus 1 (CMA_P1) et moins 1 (CMA_M1), compte le nombre de touches par corps et par mèche. Si CMA a moins de touches que CMA_P1 et CMA_M1, alors conservez la période en cours; si CMA_P1 a moins de touches, alors augmentez la période de 1; si CMA_M1 a moins de touches, alors diminuez la période de 1.

Lorsque le prix traverse la CMA à la hausse, un signal d'achat est généré; lorsque le prix traverse la CMA à la baisse, un signal de vente est généré.

Analyse des avantages

Cette stratégie de moyenne mobile adaptative présente les avantages suivants:

  1. Trouvez automatiquement les paramètres optimaux. Pas besoin de sélectionner manuellement la période de moyenne mobile, la stratégie testera différentes périodes et trouvera l'optimum.

  2. Réduire les faux signaux. Par rapport à la MA à période fixe, la MA adaptative peut filtrer plus de bruit et réduire de nombreux faux signaux.

  3. Adaptez-vous aux changements du marché. Lorsque le marché passe de la plage à la tendance, la période de MA augmentera automatiquement pour générer des signaux; lorsque le marché passe de la tendance à la plage, la période de MA diminuera automatiquement. Ainsi, la stratégie peut s'adapter dynamiquement aux changements du marché.

  4. Cette méthode adaptative peut simplifier l'ensemble du système de négociation sans optimisation manuelle des paramètres.

  5. Le concept peut être appliqué à d'autres indicateurs tels que les bandes de Bollinger adaptatives, les KD adaptatives, etc.

Analyse des risques

Il y a aussi quelques risques à prendre en compte pour cette stratégie:

  1. Risque d'option d'achat. Lorsque le marché a un modèle d'option d'achat, le corps de la bougie peut ne pas réussir à briser la ligne MA, ce qui entraîne de mauvais signaux. Des conditions de filtre doivent être ajoutées pour réduire ce risque.

  2. Risque d'échec. L'échec de MA ne se poursuit pas toujours, certains échecs peuvent survenir. La validation de l'échec est nécessaire pour assurer un taux de réussite élevé.

  3. Risque d'inversion de tendance. L'inversion de tendance après l'entrée de la tendance doit être changée en temps opportun, sinon elle peut entraîner des pertes. Le stop loss doit être réglé pour contrôler la perte.

  4. Risque d'optimisation des paramètres. Les paramètres ajustés adaptatifs peuvent tomber dans l'optimisation locale, ce qui entraîne des MA redondants. Des méthodes d'évaluation des modèles doivent être introduites pour éviter ce problème.

  5. Risque de surajustement. Le réglage excessif des paramètres peut entraîner un surajustement et la perte de la capacité de généralisation du modèle. Une vérification prolongée dans différents environnements de marché est nécessaire, et non pas seulement se fier aux résultats des tests antérieurs.

Directions d'amélioration

Quelques orientations pour améliorer cette stratégie d'AM adaptative:

  1. Ajouter la validation de la rupture de tendance via des ruptures consécutives pour filtrer les fausses ruptures.

  2. Augmenter la stratégie de stop loss, stop loss lorsque le prix retourne de l'autre côté de MA.

  3. Ajoutez le filtre d'option pour éviter les mauvais signaux lorsque l'option d'appel apparaît.

  4. Introduire des mesures d'évaluation telles que IC, LIC, SIC, etc. pour limiter le réglage des paramètres et prévenir le surajustement.

  5. Élargir à d'autres indicateurs tels que la stratégie de croix d'or adaptative, les bandes de Bollinger adaptatives, etc.

  6. Optimiser le calcul de la MA en utilisant la MA pondérée, la MA exponentielle, etc. pour obtenir une MA plus fluide.

Résumé

Cette stratégie génère des signaux de trading en ajustant de manière adaptative la période de MA pour trouver des paramètres optimaux. Par rapport aux paramètres fixes, elle peut réduire de nombreux faux signaux et s'adapter aux changements du marché. Mais nous devons également faire attention aux risques potentiels et faire une vérification et une optimisation avant de l'appliquer dans le trading en direct pour des profits stables.

Je ne sais pas.


/*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)


Plus de