Esta estrategia se basa en el indicador Bill Williams
Los principales principios comerciales de la estrategia son los siguientes:
El uso de velas Heiken Ashi en lugar de velas normales para la acción del precio.
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.
Cuando las líneas se apilan como Jaw (más bajo), Teeth (medio), Lips (más alto), indica una tendencia alcista.
Las entradas se basan en la dirección de las velas de Heiken Ashi + alineación de la línea de Alligator.
Salida cuando las líneas de cocodrilo se cruzan, señalando la reversión de la tendencia.
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.
Las principales ventajas de la estrategia son las siguientes:
El filtro de indicadores dobles minimiza las señales falsas.
Identificación de tendencias clara e intuitiva. Las líneas de cocodrilo tienen señales claras de alcista / oso.
Eficaz para el scalping a corto plazo Captura las oscilaciones de precios en gráficos de 1 a 5 minutos.
Parámetros sencillos, sin necesidad de optimización compleja.
Gestión de riesgos estricta a través de puntos de toma de ganancias, stop loss.
Reglas definidas de entrada/salida basadas en cruces de líneas de caimanes.
Fácil de implementar y replicar.
Los principales riesgos a tener en cuenta son:
Las señales frecuentes del caimán pueden aumentar las operaciones y los costos.
Los cruces fallan en condiciones agitadas.
Riesgo de sobre-optimización, ajuste de la curva por mal ajuste de parámetros.
El riesgo de fallo del indicador. El caiman puede dejar de funcionar en condiciones extremas.
Las brechas pueden desencadenar paradas que causan pérdidas injustificadas.
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.
Algunas formas de mejorar la estrategia son:
Incorpore filtros adicionales como RSI para una mayor tasa de ganancia.
Utilice paradas ATR dinámicas para controlar las pérdidas por operación.
Agregue reglas de posicionamiento para optimizar el tamaño de la apuesta.
Combinar patrones gráficos u otro análisis técnico para el calendario de entrada.
Optimizar los parámetros en función del tipo de instrumento (acciones, divisas, etc.).
Introducir el aprendizaje automático para la optimización de parámetros adaptativos.
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.
La estrategia combina Heiken Ashi con 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()