Stratégie de rupture à prix moyen mobile double

Auteur:ChaoZhang est là., Date: 2023-11-21 15h33:52
Les étiquettes:

img

Résumé

Cette stratégie utilise deux moyennes mobiles pour déterminer les tendances et les percées des prix.

Principaux

  1. Utilisez la fonction sma() pour calculer les deux moyennes mobiles à court et à long terme comme les rails supérieur et inférieur de la stratégie de trading.
  2. Calculer le prix d'achat et le prix de vente: le prix d'achat est le rail inférieur multiplié par un coefficient inférieur à 1 et le prix de vente est le rail supérieur multiplié par un coefficient supérieur à 1.
  3. Lorsque le prix franchit la barre supérieure, ouvrir une position courte avec un ordre de marché; lorsque le prix franchit la barre inférieure, ouvrir une position longue avec un ordre limite.
  4. Définir l'année, le mois et la plage de dates pour contrôler le cycle de négociation de la stratégie.
  5. Fermer toutes les positions lorsque le backtest se termine ou dépasse la plage de dates.

Les avantages

Cette stratégie présente les avantages suivants:

  1. L'utilisation d'un double rail permet de filtrer le bruit du marché et d'identifier les tendances.
  2. L'utilisation de la percée des prix pour déterminer le moment de l'entrée peut réduire les faux signaux.
  3. L'utilisation d'ordres limites réduit les coûts d'impact sur le marché.
  4. Le cycle de négociation peut être facilement ajusté pour contrôler les risques stratégiques.

Les risques

Cette stratégie comporte également des risques:

  1. Les percées de double rail peuvent facilement entraîner des risques de perte continue.
  2. Lorsque l'objectif commercial entre dans la consolidation, il y a un risque de trop de transactions.
  3. Les ordres limités peuvent manquer certaines opportunités d'achat.

Optimisation

Cette stratégie peut être optimisée dans les aspects suivants:

  1. Testez différentes combinaisons de longueurs moyennes mobiles pour trouver les meilleurs paramètres.
  2. Augmenter l'indicateur Volumes pour déterminer les percées du volume des transactions.
  3. Augmenter le mécanisme de stop loss adaptatif pour ajuster le prix du stop loss en temps réel.
  4. Augmenter les modèles d'apprentissage automatique pour déterminer la direction de la tendance.

Résumé

L'idée générale de cette stratégie est claire et facile à comprendre. En utilisant le système double rail pour identifier les tendances et en utilisant les percées de prix pour déterminer le moment de l'entrée, il peut filtrer le bruit et réaliser des bénéfices stables. Il y a également place à l'amélioration et à l'optimisation. Dans l'ensemble, il s'agit d'une stratégie de trading quantitative reproductible avec une valeur pratique.


/*backtest
start: 2023-11-13 00:00:00
end: 2023-11-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's Shift MA Strategy v1.0", shorttitle = "Shift MA str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
per = input(3, defval = 1, minval = 1, maxval = 1000, title = "Length")
src = input(ohlc4, title = "Source")
buylevel = input(-5.0, defval = -5.0, minval = -100, maxval = 0, title = "Buy line (lime)")
selllevel = input(0.0, defval = 0.0, minval = -100, maxval = 100, title = "Sell line (red)")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//SMAs
sma = sma(src, per) 
buy = sma * ((100 + buylevel) / 100)
sell = sma * ((100 + selllevel) / 100)
plot(buy, linewidth = 2, color = lime, title = "Buy line")
plot(sell, linewidth = 2, color = red, title = "Sell line")

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[per])) and size == 0
    strategy.entry("L", strategy.long, lot, limit = buy)
    
if (not na(close[per]))    
    strategy.entry("Close", strategy.short, 0, limit = sell)

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Plus de