Stratégie de dynamique à double échéancier

Auteur:ChaoZhang est là., Date: 2024-04-25 17h33:02 Je vous en prie
Les étiquettes:SMA

img

Résumé

Cette stratégie est une stratégie de dynamique à double échéancier. Elle détermine la direction de la tendance sur la période supérieure à l'aide d'une moyenne mobile simple (SMA) et identifie les points d'inversion sur la période inférieure à l'aide de points pivots (PivotLow et PivotHigh).

Principes de stratégie

Le principe principal de cette stratégie est que la direction de la tendance de l'échéancier supérieur influencera le mouvement de l'échéancier inférieur. Lorsque l'échéancier supérieur montre une tendance haussière, les retraits sur l'échéancier inférieur sont plus susceptibles d'être des opportunités d'achat; lorsque l'échéancier supérieur montre une tendance à la baisse, les rebonds sur l'échéancier inférieur sont plus susceptibles d'être des opportunités de raccourcissement. Cette stratégie utilise la moyenne mobile simple (SMA) pour déterminer la direction de la tendance de l'échéancier supérieur et les points pivots (PivotLow et PivotHigh) pour identifier les points d'inversion sur l'échéancier inférieur.

Les avantages de la stratégie

  1. L'analyse à double échéancier, en tirant parti de l'impact de l'échéancier supérieur sur l'échéancier inférieur, augmente la probabilité de succès des transactions.
  2. L'utilisation de la SMA pour déterminer la direction de la tendance est relativement fiable et l'utilisation de points pivots pour capturer les points d'inversion est relativement précise.
  3. Les paramètres sont réglables, ce qui rend la stratégie très adaptable.
  4. La logique est claire et facile à comprendre et à mettre en œuvre.

Risques stratégiques

  1. Risque de changement de tendance: si la tendance du délai supérieur change soudainement, le délai inférieur n'a peut-être pas encore réagi, ce qui entraîne l'échec de la stratégie.
  2. Risque des paramètres. Des paramètres inappropriés peuvent entraîner une mauvaise performance de la stratégie. Par exemple, le choix d'une période SMA trop courte peut entraîner des transactions fréquentes, tandis que le choix d'une période trop longue peut entraîner des jugements de tendance en retard.
  3. Risque de conditions de marché extrêmes: dans des conditions de marché extrêmes (telles que des hausses ou des baisses brusques), cette stratégie peut échouer parce que le délai inférieur peut ne pas suivre la tendance du délai supérieur.

Directions d'optimisation de la stratégie

  1. Ajouter la détection des changements de tendance. La logique peut être ajoutée pour déterminer si la tendance de la période supérieure a changé afin d'ajuster plus rapidement la négociation sur la période inférieure.
  2. Optimiser la sélection des paramètres. Des méthodes d'optimisation des paramètres (tels que des algorithmes génétiques, la recherche par grille, etc.) peuvent être utilisées pour trouver la combinaison optimale de paramètres.
  3. Ajouter des mesures de contrôle des risques (comme le stop-loss, la gestion des positions, etc.) pour réduire les pertes dans des conditions de marché extrêmes.
  4. Fusion multifactorielle: d'autres indicateurs ou facteurs (tels que la volatilité, le volume, etc.) peuvent être considérés comme intégrés dans la stratégie pour améliorer sa robustesse.

Résumé

Cette stratégie de dynamique à double échéancier tire parti de la connexion entre les échéanciers supérieur et inférieur, déterminant la direction de la tendance sur l'échéancier supérieur et capturant les points d'inversion sur l'échéancier inférieur pour atteindre le suivi de la tendance et le trading d'inversion.


/*backtest
start: 2023-04-19 00:00:00
end: 2024-04-24 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/
// © Riester

//@version=5
strategy("Dual Timeframe Momentum", overlay=true, precision=6, pyramiding=0, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=25.0, commission_value=0.05)

n = input.int(20, "Moving Average Period", minval=1)
src = input.source(close, "Source")
high_tf = input.timeframe("240", "Resolution")
pivot_l = input.int(5, "Pivot Let Bars")
pivot_r = input.int(2, "Pivot Right Bars")

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
// Calculations
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

// 1. Define low and high timeframe prices
low_src = src
high_src = request.security(syminfo.tickerid, high_tf, src)

// 2. Use simple moving average to determine trend of higher timeframe (up or down)
high_tf_ma = ta.sma(high_src, n)
plot(high_tf_ma,  color=color.yellow)
high_tf_trend = high_tf_ma > high_tf_ma[1] ? 1 : -1

// 3. Use pivots to identify reversals on the low timeframe
low_tf_pl = ta.pivotlow(high_src, pivot_l, pivot_r)
plot(low_tf_pl, style=plot.style_line, linewidth=3, color= color.green, offset=-pivot_r)

low_tf_ph = ta.pivothigh(high_src, pivot_l, pivot_r)
plot(low_tf_ph, style=plot.style_line, linewidth=3, color= color.red, offset=-pivot_r)

bool long = low_tf_pl and high_tf_trend == 1
bool short = low_tf_ph and high_tf_trend == -1

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
// Plots
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

// this message is an alert that can be sent to a webhook, which allows for simple automation if you have a server that listens to alerts and trades programmatically.
enter_long_alert = '{"side": "Long", "order": "Enter", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}'
exit_long_alert = '{"side": "Long", "order": "Exit", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}'

if long
    strategy.entry(id="Long", direction=strategy.long, limit=open, alert_message=enter_long_alert)

if short
    strategy.close(id="Long", comment="Close Long", alert_message=exit_long_alert)


Relationnée

Plus de