La stratégie de trading de renversement de moyenne mobile double génère des signaux de trading en calculant des moyennes mobiles simples de deux périodes différentes - à court terme et à long terme.
Cette stratégie définit deux moyennes mobiles simples avec des durées de période différentes à travers les paramètres d'entrée, avec la courte période MA appelée la ligne rapide et la longue période MA appelée la ligne lente. La ligne rapide réagit plus rapidement aux changements de prix et capte les tendances à court terme, tandis que la ligne lente réagit plus lentement aux changements de prix et filtre le bruit du marché à court terme, capturant la tendance majeure. Lorsque la ligne rapide traverse au-dessus de la ligne lente, elle indique que la tendance haussière se renforce et une position longue est prise. Lorsque la ligne rapide traverse en dessous de la ligne lente, elle indique que la tendance baissière se renforce et une position courte est prise.
Plus précisément, la stratégie calcule les deux MAs en utilisant la fonction sma ((), en affectant le résultat à xSMA (lente ligne) et à la ligne rapide. Les MAs sont calculés en fonction du prix de clôture. Lorsque le prix de clôture dépasse xSMA, une position longue est prise. Lorsque le prix de clôture dépasse xSMA, une position courte est prise. La stratégie fixe également une limite de plage de temps de négociation, de sorte que les signaux de négociation ne sont générés que dans la plage de temps spécifiée.
Les points de prise de profit et de stop-loss sont définis pour chaque transaction, et le profit est pris ou le stop-loss déclenché immédiatement lorsque le prix atteint le niveau de prise de profit ou de stop-loss.
Le risque peut être réduit en ajustant les paramètres MA, en optimisant la stratégie take profit/stop loss, en supprimant les limitations de temps ou en fixant des périodes de négociation plus raisonnables.
La stratégie de trading de renversement de moyenne mobile double est généralement une stratégie simple et pratique de suivi des tendances. Elle tire pleinement parti de l'effet de lissage des MA pour identifier la direction de la tendance et utilise des MA rapides / lents pour générer des signaux de trading. La stratégie est facile à mettre en œuvre avec une logique claire, adaptée aux débutants. Cependant, elle peut générer des faux signaux excessifs et des problèmes de retard. Des améliorations peuvent être apportées par l'optimisation des paramètres, l'ajout d'indicateurs auxiliaires, etc. pour rendre la stratégie plus robuste. Si elle est utilisée correctement, cette stratégie peut générer des profits stables et vaut la peine d'être testée et optimisée de manière complète.
/*backtest start: 2023-09-15 00:00:00 end: 2023-10-15 00:00:00 period: 4h 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/ // © HPotter // Simple SMA strategy // // WARNING: // - For purpose educate only // - This script to change bars colors //@version=4 timeinrange(res, sess) => not na(time(res, sess)) ? 1 : 0 strategy(title="Simple SMA Strategy Backtest", shorttitle="SMA Backtest", precision=6, overlay=true) Resolution = input(title="Resolution", type=input.resolution, defval="D") Source = input(title="Source", type=input.source, defval=close) xSeries = security(syminfo.tickerid, Resolution, Source) Length = input(title="Length", type=input.integer, defval=14, minval=2) TriggerPrice = input(title="Trigger Price", type=input.source, defval=close) TakeProfit = input(50, title="Take Profit", step=0.01) StopLoss = input(20, title="Stop Loss", step=0.01) UseTPSL = input(title="Use Take\Stop", type=input.bool, defval=false) BarColors = input(title="Painting bars", type=input.bool, defval=true) ShowLine = input(title="Show Line", type=input.bool, defval=true) UseAlerts = input(title="Use Alerts", type=input.bool, defval=false) timeframe = input(title="Time Frame", defval="15") timerange = input(title="Time Range", defval="2300-0800") reverse = input(title="Trade Reverse", type=input.bool, defval=false) pos = 0 xSMA = sma(xSeries, Length) pos := iff(TriggerPrice > xSMA, 1, iff(TriggerPrice < xSMA, -1, nz(pos[1], 0))) nRes = ShowLine ? xSMA : na alertcondition(UseAlerts == true and pos != pos[1] and pos == 1, title='Signal Buy', message='Strategy to change to BUY') alertcondition(UseAlerts == true and pos != pos[1] and pos == -1, title='Signal Sell', message='Strategy to change to SELL') alertcondition(UseAlerts == true and pos != pos[1] and pos == 0, title='FLAT', message='Strategy get out from position') possig =iff(pos[1] != pos, iff(reverse and pos == 1, -1, iff(reverse and pos == -1, 1, pos)), 0) if (possig == 1 and timeinrange(timeframe, timerange)) strategy.entry("Long", strategy.long) if (possig == -1 and timeinrange(timeframe, timerange)) strategy.entry("Short", strategy.short) if (timeinrange(timeframe, timerange) == 0) strategy.close_all() if (UseTPSL) strategy.close("Long", when = high > strategy.position_avg_price + TakeProfit, comment = "close buy take profit") strategy.close("Long", when = low < strategy.position_avg_price - StopLoss, comment = "close buy stop loss") strategy.close("Short", when = low < strategy.position_avg_price - TakeProfit, comment = "close buy take profit") strategy.close("Short", when = high > strategy.position_avg_price + StopLoss, comment = "close buy stop loss") nColor = BarColors ? strategy.position_avg_price != 0 and pos == 1 ? color.green :strategy.position_avg_price != 0 and pos == -1 ? color.red : color.blue : na barcolor(nColor) plot(nRes, title='SMA', color=#00ffaa, linewidth=2, style=plot.style_line)