A estratégia é baseada no indicador de Bill Williams, mas usa um outro tipo de entrada de preço, o Heiken Ashi Scalping Line. É uma estratégia de scalping de linha curta que se aplica no período de 1 minuto a 5 minutos.
Os principais princípios de negociação da estratégia são:
Usando o Heiken Ashi filter em vez do padrão filter como entrada de preço. O Heiken Ashi pode filtrar o ruído do mercado e identificar tendências.
Aplicar as três linhas médias do indicador de pescadores Bill Williams: linha inferior, linha dentária e linha labial. Eles são semelhantes às médias móveis e podem determinar a direção da tendência.
Quando as três linhas médias estão dispostas como: a linha inferior da panturrilha é a mais baixa, a linha dentária está no meio e a linha labial é a mais alta, indica uma tendência de várias cabeças; quando a ordem é: a linha inferior da panturrilha é a mais alta, a linha dentária está no meio e a linha labial é a mais baixa, indica uma tendência de cabeça vazia.
A entrada é julgada de acordo com a direção da entidade e a disposição da linha de pesca. A entidade para cima e a linha de pesca para cima, faz mais; a entidade para baixo e a linha de pesca para baixo, faz mais.
Quando a ordem de alinhamento das linhas de pesca muda, indica a reversão da tendência e deve ser interrompida a tempo.
A administração de risco é definida com um parâmetro fixo de stop loss e um parâmetro opcional de stop loss e um parâmetro opcional de stop loss para controlar cada ganho.
A estratégia combina um duplo filtro, tanto para identificar tendências usando o Heiken Ashi quanto para determinar reversões usando a linha de falcão, formando uma estratégia de negociação de linha curta de alta probabilidade.
A estratégia tem as seguintes vantagens principais:
A filtragem de duplo indicador reduz os sinais falsos. A combinação de Heiken Ashi e linha de pesca aumenta a qualidade do sinal.
O alinhamento das linhas de pesca é claramente confiável e não gera ambiguidades.
Captura de transações de linha curta e eficiente. Apto para transações de scalping em períodos de 1 a 5 minutos.
A configuração de parâmetros simples não requer otimização complexa, uma pequena quantidade de parâmetros pode ser usada.
Gestão rigorosa do risco. O uso de pontos de stop loss para controlar cada ganho.
Mecanismos de entrada e saída definidos.
A estratégia é fácil de copiar e implementar.
Os principais riscos desta estratégia são:
Risco de retração. A linha de pesca produz um sinal frequente que aumenta a frequência de negociação e os custos de deslizamento.
Risco de acidentes de trânsito. As linhas de pesca cruzam-se frequentemente em trânsito e produzem sinais errados.
Risco de otimização excessiva. A otimização inadequada dos parâmetros pode levar a uma curva de sobreajuste.
Risco de falha do indicador. A linha de pesca pode falhar completamente em situações extremas do mercado.
Risco de ruptura do stop loss. A ruptura rápida pode desencadear o stop loss e causar perdas.
Risco de alta frequência de negociação. A alta frequência de negociação aumenta os custos de negociação e a perda de pontos de deslizamento desnecessários.
Os riscos acima mencionados podem ser mitigados por meio de expectancy Expectancy governança, otimização de estratégias de parada de perdas, controle da frequência de negociação e outros métodos.
A estratégia pode ser melhorada em vários aspectos:
A integração de outros indicadores para filtragem de sinais aumenta a taxa de vitória. Por exemplo, a combinação de indicadores fortes e fracos, como o RSI.
Configure o ATR para parar dinamicamente para controlar o risco de perda individual.
Adicionar módulo de gerenciamento de posições para otimizar o tamanho de cada abertura de posição. Pode aumentar a posição quando a tendência é mais clara.
Combinação de métodos de análise tecnológica, como a morfologia gráfica, para melhorar a precisão da admissão.
Optimização de parâmetros de acordo com o tipo de mercado (ações, divisas, etc.) para que seja mais adequado para a variedade.
Adição de módulos de aprendizagem de máquina para otimização de adaptação de parâmetros.
Cálculo da taxa de vitória da expectancy para otimizar a proporção de stop-loss.
Com a melhoria contínua, a estratégia pode ser um conjunto estável de estratégias de negociação em linha curta.
A estratégia usa Heiken Ashi em conjunto com o Bill Williams Whaling Indicator para formar uma estratégia de negociação de linha curta de alta probabilidade. Ela possui vantagens como filtragem dupla de indicadores, configuração de parâmetros simples e mecanismo de entrada e saída claro, que permite efetivamente capturar mudanças de tendência para negociações de escalpelamento.
/*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()