La stratégie de moyenne mobile polygone construit un polygone avec plusieurs moyennes mobiles de différentes périodes et utilise la percée du polygone comme signaux de trading.
La stratégie trace plusieurs EMA, telles que les EMA à 3 périodes, 7 périodes et 13 périodes, pour former un canal polygone. Lorsque le prix dépasse les EMA, un signal long est généré. Lorsque le prix dépasse les EMA, un signal court est généré. Cela aide à éviter de nombreuses fausses ruptures.
Le code détermine les signaux de percée en comparant le prix de clôture aux EMA en utilisant des conditions telles que close>ema1 et ema1>ema2 et ema2>ema3.
Le plus grand avantage de cette stratégie est sa capacité à capturer efficacement la direction de la tendance principale en utilisant plusieurs moyennes mobiles comme filtres pour éviter le bruit.
Le principal risque est que cette stratégie ne parvienne pas à identifier les points d'inversion de tendance et peut entraîner des pertes lors des inversions de tendance. Des paramètres de période de MA inappropriés peuvent également entraîner des signaux de surtrading ou de retard. Les risques peuvent être réduits en optimisant les combinaisons de MA, en ajoutant des indicateurs d'inversion, en élargissant la plage de stop loss, etc.
La stratégie peut être optimisée dans les aspects suivants:
Optimiser les périodes d'AM pour trouver la meilleure combinaison.
Ajoutez des indicateurs d'inversion comme le RSI et le MACD pour quitter les transactions en temps opportun.
Optimiser la plage de stop loss et le décalage pour réduire les stop loss prématurés.
Optimiser les paramètres pour différents produits afin d'améliorer leur adaptabilité.
La stratégie de la moyenne mobile polygonale est généralement un système de suivi de tendance fiable et efficace. Sa plus grande force est de capturer la tendance principale tout en filtrant le bruit de manière significative. Mais elle a certaines limitations dans l'identification des inversions. Nous pouvons l'améliorer par l'optimisation des paramètres, l'ajout d'indicateurs auxiliaires, etc. Elle convient aux marchés avec des tendances évidentes et peut générer des profits stables si elle est utilisée correctement.
/*backtest start: 2023-09-30 00:00:00 end: 2023-10-30 00:00:00 period: 1h basePeriod: 15m 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/ // © Crypto-Oli //@version=4 strategy("BLANK Strategy + TSL", initial_capital=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, pyramiding=1, commission_value=0.075, overlay=true) //////////////////////////////////////////////////////////////////////////////// // BACKTESTING RANGE // From Date Inputs fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2019, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2020, title = "To Year", minval = 1970) // Calculate start/end date and time condition startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true //////////////////////////////////////////////////////////////////////////////// /// YOUR INPUTS BELOW - DELET EXAPLES /// ema1=ema(close,input(3)) ema2=ema(close,input(7)) ema3=ema(close,input(13)) /// PLOTS IF YOU NEED BELOW - DELET EXAPLES /// plot(ema1, "EMA1", color.yellow) plot(ema2, "EMA2", color.white) plot(ema3, "EMA3", color.blue) /// YOUR CONDITIONS BELOW - DELET EXAPLES /// longCondition = close>ema1 and ema1>ema2 and ema2>ema3 and time_cond shortCondition = close<ema1 and ema1<ema2 and ema2<ema3 and time_cond /// EXECUTION /// if (longCondition) strategy.entry("Long", strategy.long) strategy.exit("Long Exit", "Long", trail_points = close * 0.05 / syminfo.mintick, trail_offset = close * 0.02 / syminfo.mintick) if (shortCondition) strategy.entry("Short", strategy.short) strategy.exit("Short Exit", "Short", trail_points = close * 0.05 / syminfo.mintick, trail_offset = close * 0.02 / syminfo.mintick)