Stratégie de trading Williams Alligator Spread


Date de création: 2023-09-25 17:42:27 Dernière modification: 2023-09-25 17:42:27
Copier: 0 Nombre de clics: 1616
1
Suivre
1617
Abonnés

Aperçu

Cette stratégie est basée sur l’indicateur de Bill Williams, mais utilise une autre entrée de prix appelée ligne de scalping Heiken Ashi. C’est une stratégie de scalping en ligne courte qui s’applique à une période de 1 à 5 minutes.

Principe de stratégie

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

  1. Utilisez des filtres Heiken Ashi plutôt que des filtres standard comme entrée de prix. Heiken Ashi peut filtrer le bruit du marché et identifier les tendances.

  2. Les trois lignes moyennes de l’indicateur de pêche Bill Williams: les lignes de la hanche inférieure, les lignes de la dent et les lignes de la lèvre. Elles sont similaires aux moyennes mobiles et permettent de déterminer la direction de la tendance.

  3. Quand les trois lignes sont disposées de la manière suivante: la ligne inférieure est la plus basse, la ligne dentaire est la plus moyenne et la ligne labiale est la plus haute, cela indique une tendance à plusieurs têtes; quand elles sont disposées de la manière suivante: la ligne inférieure est la plus haute, la ligne dentaire est la plus moyenne et la ligne labiale est la plus basse, cela indique une tendance à la tête vide.

  4. L’entrée est jugée en fonction de l’orientation de l’entité et de l’alignement de la ligne de pêche de Heiken Ashi. Si l’entité est orientée vers le haut et la ligne de pêche est orientée vers le haut, elle est orientée vers le haut; si l’entité est orientée vers le bas et la ligne de pêche est orientée vers le bas, elle est orientée vers le bas.

  5. Lorsque l’ordre d’alignement des filets de pêche est modifié, cela signifie que la tendance est inversée et que le dommage doit être arrêté à temps.

  6. Gestion des risques avec un arrêt fixe et un nombre de points d’arrêt. Un nombre de points de profit cible, un nombre de points d’arrêt et un nombre de points d’arrêt traçables peuvent être choisis pour contrôler chaque perte.

Cette stratégie combine un double filtre qui utilise à la fois l’identification de tendances Heiken Ashi et le jugement du renversement de la ligne de pêche, formant une stratégie de négociation de ligne courte à forte probabilité.

Analyse des avantages

La stratégie présente les principaux avantages suivants:

  1. Le filtrage à double indice réduit le faux signal. La combinaison de Heiken Ashi et de câble de pêche améliore la qualité du signal.

  2. Le classement des lignes de pêche est clairement fiable et ne crée pas d’ambiguïté.

  3. La capture de trades à courte ligne efficace. Convient pour les trades à scalping de 1 à 5 minutes.

  4. La définition de paramètres est simple. Il n’y a pas besoin d’optimisation compliquée, un petit nombre de paramètres sont disponibles.

  5. La gestion des risques est stricte. Les points de stop-loss sont utilisés pour contrôler chaque perte.

  6. Un mécanisme d’entrée et de sortie bien défini.

  7. La stratégie est facile à copier et à mettre en œuvre.

Analyse des risques

Les principaux risques de cette stratégie sont:

  1. Risque de retrait: les lignes de pêche produisent des signaux fréquents, ce qui augmente la fréquence des transactions et les coûts des points de glissement.

  2. Risque de secousses. Les lignes de pêche se croisent fréquemment dans le cadre d’une mise en équilibre, ce qui génère de faux signaux.

  3. Risque de sur-optimisation. Une mauvaise optimisation des paramètres peut entraîner une sur-adaptation de la courbe.

  4. Risque de défaillance de l’indicateur. Les lignes de pêche peuvent être complètement inefficaces dans des conditions extrêmes du marché.

  5. Le risque de rupture du stop loss. Une rupture rapide peut déclencher le stop loss et entraîner des pertes.

  6. Le risque d’une fréquence de transaction trop élevée. La fréquence des transactions augmente les coûts de transaction et les pertes de points de glissement inutiles.

Le risque peut être atténué par la gestion de l’expectancy, l’optimisation des stratégies de stop loss et le contrôle de la fréquence des transactions.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. L’intégration d’autres indicateurs pour le filtrage des signaux améliore le taux de victoire. Par exemple, la combinaison d’indicateurs faibles tels que le RSI.

  2. La mise en place d’un stop-loss dynamique ATR pour contrôler le risque de perte unique

  3. Ajout d’un module de gestion des positions pour optimiser la taille de chaque ouverture de position. Les positions peuvent être augmentées lorsque la tendance est plus claire.

  4. La combinaison de méthodes d’analyse technique telles que la morphologie graphique améliore la précision de l’admission.

  5. Optimiser les paramètres en fonction du type de marché (actions, devises, etc.) pour les rendre plus adaptés à la variété.

  6. Ajout de modules d’apprentissage automatique pour optimiser l’adaptation des paramètres.

  7. Calculer le taux de victoire Expectancy et optimiser le taux de stop-loss.

Grâce à une amélioration continue, cette stratégie peut devenir un ensemble stable de stratégies de trading en ligne courte.

Résumer

Cette stratégie utilise Heiken Ashi en collaboration avec l’indicateur de pêche de Bill Williams pour former une stratégie de négociation de courte ligne à haute probabilité. Elle présente des avantages tels que le double filtrage des indicateurs, la configuration simple des paramètres et un mécanisme d’entrée et de sortie clair, qui permet de capturer efficacement les changements de tendance pour effectuer des transactions de scalping.

Code source de la stratégie
/*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()