La estrategia de alligador de Williams

El autor:¿ Qué pasa?, Fecha: 2023-09-25 17:42:27
Las etiquetas:

Resumen general

Esta estrategia se basa en el indicador Bill Williams Alligator, pero utiliza velas Heiken Ashi como entrada de precio.

Estrategia lógica

Los principales principios comerciales de la estrategia son los siguientes:

  1. El uso de velas Heiken Ashi en lugar de velas normales para la acción del precio.

  2. Aplicando las tres líneas de promedio móvil de Bill Williams Alligator - mandíbula, dientes y labios. Actúan como promedios móviles para determinar la dirección de la tendencia.

  3. Cuando las líneas se apilan como Jaw (más bajo), Teeth (medio), Lips (más alto), indica una tendencia alcista.

  4. Las entradas se basan en la dirección de las velas de Heiken Ashi + alineación de la línea de Alligator.

  5. Salida cuando las líneas de cocodrilo se cruzan, señalando la reversión de la tendencia.

  6. Pueden configurar puntos objetivo, puntos de stop loss, puntos de trailing, etc.

La combinación de dos filtros de Heiken Ashi y Alligator crea una estrategia de comercio a corto plazo de alta probabilidad.

Ventajas

Las principales ventajas de la estrategia son las siguientes:

  1. El filtro de indicadores dobles minimiza las señales falsas.

  2. Identificación de tendencias clara e intuitiva. Las líneas de cocodrilo tienen señales claras de alcista / oso.

  3. Eficaz para el scalping a corto plazo Captura las oscilaciones de precios en gráficos de 1 a 5 minutos.

  4. Parámetros sencillos, sin necesidad de optimización compleja.

  5. Gestión de riesgos estricta a través de puntos de toma de ganancias, stop loss.

  6. Reglas definidas de entrada/salida basadas en cruces de líneas de caimanes.

  7. Fácil de implementar y replicar.

Los riesgos

Los principales riesgos a tener en cuenta son:

  1. Las señales frecuentes del caimán pueden aumentar las operaciones y los costos.

  2. Los cruces fallan en condiciones agitadas.

  3. Riesgo de sobre-optimización, ajuste de la curva por mal ajuste de parámetros.

  4. El riesgo de fallo del indicador. El caiman puede dejar de funcionar en condiciones extremas.

  5. Las brechas pueden desencadenar paradas que causan pérdidas injustificadas.

  6. Los riesgos de alta frecuencia de negociación.

El análisis de las expectativas, las paradas optimizadas, la frecuencia controlada, etc. pueden abordar muchos de estos riesgos.

Oportunidades de mejora

Algunas formas de mejorar la estrategia son:

  1. Incorpore filtros adicionales como RSI para una mayor tasa de ganancia.

  2. Utilice paradas ATR dinámicas para controlar las pérdidas por operación.

  3. Agregue reglas de posicionamiento para optimizar el tamaño de la apuesta.

  4. Combinar patrones gráficos u otro análisis técnico para el calendario de entrada.

  5. Optimizar los parámetros en función del tipo de instrumento (acciones, divisas, etc.).

  6. Introducir el aprendizaje automático para la optimización de parámetros adaptativos.

  7. Llevar a cabo un análisis de expectativas para ajustar las relaciones de ganancias y pérdidas.

Con mejoras continuas, la estrategia puede convertirse en un sistema comercial sólido a corto plazo.

Conclusión

La estrategia combina Heiken Ashi con Williams Alligator para crear una estrategia de comercio a corto plazo de alta probabilidad. Se beneficia de un filtro de indicadores duales, parámetros sencillos y una mecánica de entrada / salida bien definida para reducir efectivamente las tendencias y reversiones.


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

Más.