A Estratégia EintSimple Pullback é uma estratégia de reversão da média baseada em duplo cruzamento da média móvel. Ela usa primeiro uma linha de média móvel de longo prazo e uma linha de média móvel de curto prazo. Quando a linha de média móvel de curto prazo atravessa a linha de média móvel de longo prazo a partir do fundo, um sinal de compra é gerado. Para filtrar falhas, esta estratégia também requer que o preço de fechamento seja maior do que a linha de média móvel de longo prazo.
Após entrar no mercado, se o preço cair abaixo da linha média móvel de curto prazo novamente, ele desencadeará um sinal de saída. Além disso, esta estratégia também define uma saída de stop loss.
A estratégia baseia-se principalmente na cruz de ouro das médias móveis duplas para determinar o momento de entrada.
Após o cumprimento das condições acima referidas, esta estratégia assumirá uma posição longa completa.
O julgamento do sinal de saída é baseado em duas condições. Uma é que o preço cai novamente abaixo da média móvel de curto prazo. A outra é que o retração do ponto mais alto atinge a porcentagem de stop loss definida. As condições específicas de saída são as seguintes:
Quando uma das condições de saída for cumprida, esta estratégia encerrará todas as posições longas.
O uso de cruzamento de média móvel dupla combinado com preços de fechamento sólidos para julgar pode filtrar efetivamente falhas.
Adotar entrada de retração pode entrar depois que o preço forma pontos de inflexão de curto prazo.
Com a configuração de stop loss, pode limitar o drawdown máximo.
As estratégias de cruzamento de médias móveis duplas tendem a produzir sinais de negociação frequentes e podem perseguir picos e matar fundos.
A configuração inadequada dos parâmetros das médias móveis pode resultar em curvas demasiado suaves ou demasiado sensíveis.
As configurações de stop loss demasiado flexíveis conduzirão a perdas aumentadas.
Teste diferentes combinações de comprimentos de médias móveis a longo prazo e a curto prazo para encontrar os parâmetros ideais.
Comparar os efeitos da utilização do preço de fechamento e do preço típico para determinar os crossovers da média móvel.
Teste a adição de filtros como indicadores de volume ou volatilidade.
Backtest otimizar a percentagem de stop loss para encontrar a melhor configuração.
A estratégia de pullback é uma estratégia simples e prática de pullback de média móvel dupla. Utiliza efetivamente a funcionalidade direcional das médias móveis enquanto combina preços de fechamento sólidos para filtrar sinais falsos. Embora esta estratégia seja propensa a negociações frequentes e perseguir picos e matar fundos, ela pode ser melhorada através da otimização de parâmetros e adição de filtros.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m 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/ // © ZenAndTheArtOfTrading / www.PineScriptMastery.com // @version=5 strategy("Simple Pullback Strategy", overlay=true, initial_capital=50000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)// 100% of balance invested on each trade // Get user input i_ma1 = input.int(title="MA 1 Length", defval=75, step=1, group="Strategy Parameters", tooltip="Long-term EMA") i_ma2 = input.int(title="MA 2 Length", defval=9, step=1, group="Strategy Parameters", tooltip="Short-term EMA") i_stopPercent = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline") i_lowerClose = input.bool(title="Exit On Lower Close", defval=true, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2") i_startTime = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups") i_endTime = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups") // Get indicator values ma1 = ta.ema(close, i_ma1) ma2 = ta.ema(close, i_ma2) // Check filter(s) f_dateFilter = true // Check buy/sell conditions var float buyPrice = 0 buyCondition = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter sellCondition = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1]) stopDistance = strategy.position_size > 0 ? ((buyPrice - close) / close) : na stopPrice = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na stopCondition = strategy.position_size > 0 and stopDistance > i_stopPercent // Enter positions if buyCondition strategy.entry(id="Long", direction=strategy.long) if buyCondition[1] buyPrice := open // Exit positions if sellCondition or stopCondition strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : "")) buyPrice := na // Draw pretty colors plot(buyPrice, color=color.lime, style=plot.style_linebr) plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1) plot(ma1, color=color.blue) plot(ma2, color=color.fuchsia)