La stratégie de Williams pour le scalping des alligators

Auteur:ChaoZhang est là., Date: 2023-09-25 17:42:27
Les étiquettes:

Résumé

Cette stratégie est basée sur l'indicateur Bill Williams Alligator, mais utilise les bougies Heiken Ashi comme entrée de prix.

La logique de la stratégie

Les principaux principes commerciaux de la stratégie sont les suivants:

  1. Utiliser des bougies Heiken Ashi au lieu de bougies ordinaires pour l'action des prix.

  2. 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.

  3. Lorsque les lignes sont empilées comme Jaw (le plus bas), Teeth (le milieu), Lips (le plus haut), cela indique une tendance haussière.

  4. Les entrées sont basées sur la direction des bougies Heiken Ashi + l'alignement des lignes d'alligator.

  5. Sort quand les lignes d'Alligator se croisent, signalant un renversement de tendance.

  6. 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 avantages

Les principaux avantages de cette stratégie sont les suivants:

  1. Le filtre à double indicateur minimise les faux signaux.

  2. Identification de tendance claire et intuitive. Les lignes d'alligator ont des signaux bœuf/ours sans ambiguïté.

  3. Efficace pour le scalping à court terme. Capture les fluctuations de prix sur les graphiques de 1 à 5 minutes.

  4. Des paramètres simples, pas besoin d'optimisation complexe.

  5. Une gestion stricte des risques par le biais de points de prise de profit et de stop-loss.

  6. Règles d'entrée/sortie définies basées sur les croisements de lignes d'Alligator.

  7. Facile à mettre en œuvre et à répliquer.

Les risques

Les principaux risques à prendre en considération sont les suivants:

  1. Les signaux d'alligator fréquents peuvent augmenter les transactions et les coûts.

  2. Les croisements échouent dans des conditions instables.

  3. Risque d'optimisation excessive, ajustement de la courbe par mauvais réglage des paramètres.

  4. Le risque d'échec de l'indicateur.

  5. Les lacunes peuvent déclencher des arrêts causant des pertes injustifiées.

  6. 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.

Des possibilités d'amélioration

Les moyens d'améliorer la stratégie sont les suivants:

  1. Incorporer des filtres supplémentaires comme RSI pour un taux de gain plus élevé.

  2. Utiliser des arrêts ATR dynamiques pour contrôler les pertes par transaction.

  3. Ajoutez des règles de taille de position pour optimiser la taille des mises.

  4. Combiner les schémas graphiques ou toute autre analyse technique pour déterminer le moment de l'entrée.

  5. Optimiser les paramètres en fonction du type d'instrument (actions, devises, etc.).

  6. Introduire l'apprentissage automatique pour une optimisation adaptative des paramètres.

  7. 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.

Conclusion

La stratégie combine Heiken Ashi avec Williams Alligator pour créer une stratégie de trading à court terme à forte probabilité. Elle bénéficie d'un filtrage à deux indicateurs, de paramètres simples et de mécanismes d'entrée/sortie bien définis pour effacer efficacement les tendances et les inversions.


/*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()

Plus de