Cette stratégie est basée sur l'indicateur Bill Williams
Les principaux principes commerciaux de la stratégie sont les suivants:
Utiliser des bougies Heiken Ashi au lieu de bougies ordinaires pour l'action des prix.
En appliquant les trois lignes moyennes mobiles de Bill Williams Alligator - Jaw, Teeth et Lips. Elles agissent comme des moyennes mobiles pour déterminer la direction de la tendance.
Lorsque les lignes sont empilées comme Jaw (le plus bas), Teeth (le milieu), Lips (le plus haut), cela indique une tendance haussière.
Les entrées sont basées sur la direction des bougies Heiken Ashi + l'alignement des lignes d'alligator.
Sort quand les lignes d'Alligator se croisent, signalant un renversement de tendance.
Il peut configurer des points cibles, des points de stop-loss, des stops de trailing, etc.
La combinaison de deux filtres Heiken Ashi et Alligator crée une stratégie de trading à court terme à forte probabilité.
Les principaux avantages de cette stratégie sont les suivants:
Le filtre à double indicateur minimise les faux signaux.
Identification de tendance claire et intuitive. Les lignes d'alligator ont des signaux bœuf/ours sans ambiguïté.
Efficace pour le scalping à court terme. Capture les fluctuations de prix sur les graphiques de 1 à 5 minutes.
Des paramètres simples, pas besoin d'optimisation complexe.
Une gestion stricte des risques par le biais de points de prise de profit et de stop-loss.
Règles d'entrée/sortie définies basées sur les croisements de lignes d'Alligator.
Facile à mettre en œuvre et à répliquer.
Les principaux risques à prendre en considération sont les suivants:
Les signaux d'alligator fréquents peuvent augmenter les transactions et les coûts.
Les croisements échouent dans des conditions instables.
Risque d'optimisation excessive, ajustement de la courbe par mauvais réglage des paramètres.
Le risque d'échec de l'indicateur.
Les lacunes peuvent déclencher des arrêts causant des pertes injustifiées.
Les risques liés à la fréquence des transactions sont élevés.
L'analyse des attentes, l'optimisation des arrêts, la fréquence contrôlée, etc. peuvent remédier à bon nombre de ces risques.
Les moyens d'améliorer la stratégie sont les suivants:
Incorporer des filtres supplémentaires comme RSI pour un taux de gain plus élevé.
Utiliser des arrêts ATR dynamiques pour contrôler les pertes par transaction.
Ajoutez des règles de taille de position pour optimiser la taille des mises.
Combiner les schémas graphiques ou toute autre analyse technique pour déterminer le moment de l'entrée.
Optimiser les paramètres en fonction du type d'instrument (actions, devises, etc.).
Introduire l'apprentissage automatique pour une optimisation adaptative des paramètres.
Effectuer une analyse des attentes pour affiner les ratios de prise de profit et de stop-loss.
Avec des améliorations continues, la stratégie peut devenir un système de trading à court terme robuste.
La stratégie combine Heiken Ashi avec Williams
/*backtest start: 2022-09-18 00:00:00 end: 2023-09-24 00:00:00 period: 4d basePeriod: 1d 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/ // © 03.freeman //Scalping strategy based on Bill Williams Alligator technique but applied to heikin ashi candles //This strategy has to be applied to standard candles and low time frames (1min to 5min) //@version=4 strategy("Bill Williams Alligator improved", shorttitle="Scalping alligator",overlay=true) //source = input(close) useHA = input (true,"Use heikin ashi candle?") // ----------MA calculation - ChartArt------------- smoothinput = input(1, minval=1, maxval=5, title='Moving Average Calculation: (1=SMA), (2=EMA), (3=WMA), (4=Linear), (5=VWMA)') calc_ma(src,l) => smoothinput == 1 ? sma(src, l):smoothinput == 2 ? ema(src, l):smoothinput == 3 ? wma(src, l):smoothinput == 4 ? linreg(src, l,0):smoothinput == 5 ? vwma(src,l):na //---------------------------------------------- heikinashi_close = security(heikinashi(syminfo.tickerid), timeframe.period, close) heikinashi_open = security(heikinashi(syminfo.tickerid), timeframe.period, open) heikinashi_hl2 = security(heikinashi(syminfo.tickerid), timeframe.period, hl2) direzione=heikinashi_close>heikinashi_open and heikinashi_close[1]>heikinashi_open[1]? 1 : heikinashi_close<heikinashi_open and heikinashi_close[1]<heikinashi_open[1]? -1 : 0 jawLength = input(13, minval=1, title="Jaw Length") teethLength = input(8, minval=1, title="Teeth Length") lipsLength = input(5, minval=1, title="Lips Length") jawOffset = input(8, title="Jaw Offset") teethOffset = input(5, title="Teeth Offset") lipsOffset = input(3, title="Lips Offset") jaw = calc_ma(heikinashi_hl2, jawLength) teeth = calc_ma(heikinashi_hl2, teethLength) lips = calc_ma(heikinashi_hl2, lipsLength) plot(jaw, title="jaw",offset = jawOffset, color=#3BB3E4) plot(teeth, title="teeth",offset = teethOffset, color=#FF006E) plot(lips, title="lips",offset = lipsOffset, color=#36C711) longCondition = direzione[0]==1 and jaw<teeth and jaw<lips and teeth<lips shortCondition = direzione[0]==-1 and jaw>teeth and jaw>lips and teeth>lips // Strategy: (Thanks to JayRogers) // === STRATEGY RELATED INPUTS === //tradeInvert = input(defval = false, title = "Invert Trade Direction?") // the risk management inputs inpTakeProfit = input(defval = 0, title = "Take Profit Points", minval = 0) inpStopLoss = input(defval = 0, title = "Stop Loss Points", minval = 0) inpTrailStop = input(defval = 0, title = "Trailing Stop Loss Points", minval = 0) inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0) // === RISK MANAGEMENT VALUE PREP === // if an input is less than 1, assuming not wanted so we assign 'na' value to disable it. useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na // === STRATEGY - LONG POSITION EXECUTION === enterLong() => direzione[0]==1 and jaw<teeth and jaw<lips and teeth<lips // functions can be used to wrap up and work out complex conditions exitLong() => jaw>teeth or jaw>lips or teeth>lips strategy.entry(id = "Buy", long = true, when = enterLong() ) // use function or simple condition to decide when to get in strategy.close(id = "Buy", when = exitLong() ) // ...and when to get out // === STRATEGY - SHORT POSITION EXECUTION === enterShort() => direzione[0]==-1 and jaw>teeth and jaw>lips and teeth>lips exitShort() => jaw<teeth or jaw<lips or teeth<lips strategy.entry(id = "Sell", long = false, when = enterShort()) strategy.close(id = "Sell", when = exitShort() ) // === STRATEGY RISK MANAGEMENT EXECUTION === // finally, make use of all the earlier values we got prepped strategy.exit("Exit Buy", from_entry = "Buy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset) strategy.exit("Exit Sell", from_entry = "Sell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset) // === Backtesting Dates === thanks to Trost testPeriodSwitch = input(false, "Custom Backtesting Dates") testStartYear = input(2020, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testStartHour = input(0, "Backtest Start Hour") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0) testStopYear = input(2020, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testStopHour = input(23, "Backtest Stop Hour") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false isPeriod = true // === /END if not isPeriod strategy.cancel_all() strategy.close_all()