Williams' Alligator-Scalping-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-09-25 17:42:27
Tags:

Übersicht

Diese Strategie basiert auf dem Bill Williams Alligator-Indikator, verwendet aber Heiken Ashi Kerzen als Preis-Eingabe.

Strategie Logik

Die wichtigsten Handelsgrundsätze der Strategie sind:

  1. Heiken Ashi filtert Geräusche und identifiziert Trends.

  2. Die drei gleitenden Durchschnittslinien von Bill Williams Alligator - Kiefer, Zähne und Lippen. Sie wirken wie gleitende Durchschnittswerte, um die Trendrichtung zu bestimmen.

  3. Wenn die Linien als Kiefer (niedrigste), Zähne (mittlere), Lippen (höchste) gestapelt sind, signalisiert dies einen Aufwärtstrend.

  4. Die Einträge basieren auf Heiken Ashi Kerzenrichtung + Alligator Line Ausrichtung. Lange Einträge auf bullische Kerzen und Bullen-Setup; kurze Einträge auf bärische Kerzen und Bären-Setup.

  5. Verlässt, wenn sich die Alligator-Linien kreuzen, was eine Umkehr des Trends anzeigt.

  6. Fixed Take Profit, Stop Loss Punkte, die für das Risikomanagement verwendet werden.

Die Kombination von Heiken Ashi und Alligator erzeugt eine kurzfristige Handelsstrategie mit hoher Wahrscheinlichkeit.

Vorteile

Die wichtigsten Vorteile der Strategie sind:

  1. Die doppelte Indikatorfilterung minimiert falsche Signale.

  2. Eine klare und intuitive Trendidentifizierung.

  3. Effizient für den kurzfristigen Scalping, erfasst Kursschwankungen auf 1-minütigen bis 5-minütigen Charts.

  4. Einfache Parameter, keine komplexe Optimierung erforderlich.

  5. Strenges Risikomanagement über Gewinn- und Stop-Loss-Punkte.

  6. Festgelegte Ein- und Ausstiegsregeln auf der Grundlage von Alligator-Linienkreuzungen.

  7. Einfach zu implementieren und zu replizieren.

Risiken

Die wichtigsten zu berücksichtigenden Risiken sind:

  1. Häufige Alligator-Signale können den Handel und die Kosten erhöhen.

  2. Crossovers scheitern bei unruhigen Bedingungen.

  3. Überoptimierungsrisiko, Kurvenanpassung durch schlechtes Parameter-Tuning.

  4. Die Alligator kann unter extremen Bedingungen nicht mehr arbeiten.

  5. Das Risiko eines Stop-Loss-Slip-offs. Lücken können zu Stops führen, die zu ungerechtfertigten Verlusten führen.

  6. Hohe Handelsfrequenz Risiken. Mehr Trades erhöhen auch die Transaktionskosten.

Eine Erwartungsanalyse, optimierte Haltestellen, kontrollierte Häufigkeit usw. können viele dieser Risiken abdecken.

Möglichkeiten zur Verbesserung

Einige Möglichkeiten zur Verbesserung der Strategie sind:

  1. Fügen Sie zusätzliche Filter wie RSI für eine höhere Gewinnrate ein.

  2. Verwenden Sie dynamische ATR-Stopps, um Verluste pro Handel zu kontrollieren.

  3. Hinzufügen von Positionsgrößenregeln, um die Einsatzgröße zu optimieren.

  4. Kombination von Diagrammmustern oder anderer technischer Analysen für den Einstieg.

  5. Optimierung der Parameter je nach Instrumententyp (Aktien, Devisen usw.).

  6. Einführung von maschinellem Lernen für die adaptive Optimierung von Parametern.

  7. Durchführung einer Erwartungsanalyse, um die Profit-Take-Versus-Stop-Loss-Ratio zu optimieren.

Durch kontinuierliche Verbesserungen kann die Strategie zu einem robusten kurzfristigen Handelssystem werden.

Schlussfolgerung

Die Strategie kombiniert Heiken Ashi mit Williams Alligator, um eine kurzfristige Handelsstrategie mit hoher Wahrscheinlichkeit zu erstellen. Sie profitiert von einer doppelten Indikatorfilterung, einfachen Parametern und einer gut definierten Ein-/Ausfahrtmechanik, um Trends und Umkehrungen effektiv zu erfassen.


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

Mehr