Cette stratégie utilise le principe du double croisement des moyennes mobiles, intègre l'indicateur ATR pour le stop loss et le take profit, et ajoute le contrôle des heures de négociation pour concevoir une stratégie de négociation intradienne adaptée aux contrats à terme.
La stratégie utilise des croisements de lignes WMA de 5 périodes et de 20 périodes comme signaux d'entrée. Elle va long lorsque la ligne de 5 périodes se démarque au-dessus de la ligne de 20 périodes et court lorsque la ligne de 5 périodes se démarque au-dessous de la ligne de 20 périodes. Elle utilise également la ligne WMA de 50 périodes pour déterminer la direction de la tendance. Les signaux de trading ne sont déclenchés que lorsque la direction de la rupture des prix est cohérente avec la tendance majeure.
En outre, la stratégie tire parti de l'indicateur ATR pour définir des niveaux de stop loss et de profit dynamiques.
Enfin, la stratégie ne déclenche les transactions que pendant les heures de négociation aux États-Unis (9h00-14h30 CST) afin d'éviter une forte volatilité autour de l'ouverture et de la fermeture du marché où de faux signaux se forment facilement.
La stratégie présente les avantages suivants:
Le croisement des moyennes mobiles doubles capte efficacement les points tournants de la tendance pour une entrée en temps opportun.
Le filtre de tendance évite les transactions contre tendance majeure et réduit les faux signaux.
Les contrôles dynamiques basés sur l'ATR pour les arrêts de perte par perte de transaction.
La limitation des heures de négociation évite les périodes d'ouverture et de fermeture volatiles.
Des règles simples et claires, faciles à comprendre et à mettre en œuvre pour les débutants.
Paramètres personnalisables tels que les périodes de mise en marché, le multiplicateur ATR, les heures de négociation, etc. pour optimisation.
La stratégie comporte également les risques suivants:
Plus de déclencheurs d'arrêt de perte pendant les marchés à plage.
Le croisement à double MA a un retard et peut manquer des éruptions à court terme.
Un paramètre ATR mal réglé entraîne une perte d'arrêt importante ou mineure.
Se fier uniquement à des indicateurs techniques sans analyse fondamentale.
L'efficacité dépend du symbole et du calendrier appropriés.
Le système mécanique risque d'être arbitragé.
Les paramètres doivent être ajustés en fonction des différentes sessions de négociation.
Elles peuvent être améliorées par la régulation des paramètres, la combinaison des indicateurs, l'intervention manuelle sélective, etc.
La stratégie peut être améliorée dans les aspects suivants:
Testez différents systèmes d'AM comme EMA, DMA, etc.
Ajoutez d'autres filtres techniques tels que MACD, RSI, etc.
Optimiser les paramètres ATR pour un meilleur stop loss/profit.
Incorporer des indicateurs de volume pour trouver des signaux d'entrée de haute qualité.
Ajustez les paramètres en fonction des spécificités du symbole.
Intégrer des facteurs fondamentaux pour éviter les échanges contre le marché.
Introduire l'apprentissage automatique comme les réseaux de neurones pour la modélisation du marché.
Explorez des combinaisons de plusieurs délais pour plus de possibilités.
Construire un ensemble stratégique pour améliorer la robustesse.
En résumé, il s'agit d'une stratégie simple et intuitive adaptée aux débutants pour pratiquer le trading en direct. Dans le même temps, il reste une énorme marge d'optimisation via des indicateurs plus techniques ou l'apprentissage automatique. Le réglage des paramètres basé sur les symboles et la dynamique du marché est également essentiel.
/*backtest start: 2023-10-15 00:00:00 end: 2023-11-14 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/ // © james4392010 //@version=4 strategy(title="DayTradingFutures Cross-Strategy", overlay=true) // === GENERAL INPUTS === Periods = input(title="ATR Period", type=input.integer, defval=10) src = input(hl2, title="Source") Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0) changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true) showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true) //highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true) atr2 = sma(tr, Periods) atr= changeATR ? atr(Periods) : atr2 up=src-(Multiplier*atr) up1 = nz(up[1],up) up := close[1] > up1 ? max(up,up1) : up dn=src+(Multiplier*atr) dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? min(dn, dn1) : dn wmaFastSource = input(defval = close, title = "Fast WMA Source") wmaFastLength = input(defval = 5, title = "Fast WMA Period") wmaSlowSource = input(defval = close, title = "Slow WMA Source") wmaSlowLength = input(defval = 20, title = "Slow WMA Period") wmaDirectionSource = input(defval = close, title = "Trend 50 Period Source") wmaDirectionLength = input(defval = 50, title = "Trend 50 Period") timeinrange(res, sess) => time(res, sess) != 0 // === SERIES SETUP === /// a couple of ma's.. wmaFast = wma(close, 5) wmaSlow = wma(close, 20) wmaDirection = wma(close, 50) // === PLOTTING === fast = plot(series=wmaFast, color=color.white, linewidth=2) slow = plot(series=wmaSlow, color=color.yellow, linewidth=2) direction = plot(series=wmaDirection, color=color.red, linewidth=2) // === INPUT BACKTEST RANGE === //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 = 2022, title = "From Year", minval = 2022) // 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 = 2022, title = "To Year", minval = 2022) //startDate = timestamp(fromYear, fromMonth, fromDay) //finishDate = timestamp(toYear, toMonth, toDay) //inDateRange= (time >= fromDay, fromMonth, fromYear and time <= toDay, toMonth, toYear) // === FUNCTION EXAMPLE === //inDateRange = (time >= fromDay, fromMonth, fromYear) and (time <= toDay, toMonth, toYear) // === LOGIC === enterLong = crossover(wmaFast, wmaSlow) and close > wmaDirection and timeinrange(timeframe.period, "0900-1430") enterShort = crossunder(wmaFast, wmaSlow) and close < wmaDirection and timeinrange(timeframe.period, "0900-1430") //trend := nz(trend[1], trend) //trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend //upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green) buySignal = enterLong //plotshape(enterLong ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green) plotshape(enterLong and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white) //dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red) sellSignal = enterShort //plotshape(enterShort ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red) plotshape(enterShort and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white) //mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0) //longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white //shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white //fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor) //fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor) alertcondition(buySignal, title="Buy", message="Buy!") alertcondition(sellSignal, title="Sell", message="Sell!") //changeCond = trend != trend[1] //alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!") // Entry for strategy // //tp=input(25,title="TakeProfit") //sl=input(40,title="StopLoss") strategy.entry("Long",1, when=buySignal) //strategy.exit("Exit",profit=tp,loss=sl) //strategy.exit("TakeProfit",profit=tp) //strategy.exit("StopLoss",loss=sl) strategy.entry("Short",1, when=sellSignal) //strategy.exit("Exit",profit=tp,loss=sl) //strategy.exit("TakeProfit",profit=tp) //strategy.exit("StopLoss",loss=sl) //strategy.exit("Exit", wmaFastwmaSlow) //Buy and Sell Signals //strategy.close_all(when =not timeinrange(timeframe.period, "1000-1430")) // === FILL ==== fill (fast, slow, color = wmaSlow > wmaDirection ? color.green : color.red) //fill(when=enterLong, tp, color = color.new(color.green, 90), title = "Profit area") //fill(when=enterLong, sl, color = color.new(color.red, 90), title = "Loss area") //fill(when=enterShort, tp, color = color.new(color.green, 90), title = "Profit area") //fill(when=enterShort, sl, color = color.new(color.red, 90), title = "Loss area")