
Esta estratégia combina o conceito de negociação de corvos com a análise de fases de Niko Bakkers, usando três médias móveis de diferentes períodos para determinar a direção da tendência e obter lucros de acompanhamento da tendência. Faça mais quando a média móvel rápida atravessa a média móvel rápida e as três médias móveis estão na mesma tendência de alta ou baixa; e faça zero quando a média móvel rápida atravessa a média móvel rápida e as três médias móveis estão na mesma tendência de alta ou baixa.
Calcule as médias móveis de três períodos diferentes: média móvel rápida de 8 dias, média móvel rápida de 21 dias e média móvel lenta de 55 dias.
Os critérios de admissão são: fazer mais quando a média móvel rápida atravessa a média móvel rápida e todas as três médias móveis estão em alta; fazer vazio quando a média móvel rápida atravessa a média móvel rápida abaixo da média móvel rápida e todas as três médias móveis estão em baixa.
Para julgar as condições de partida: a média móvel rápida é invertida e a média móvel rápida é travada para equilibrar a posição.
Controle de posicionamento: posicionamento fixo, 1 pessoa por cada abertura de posição. Também é possível ajustar a posição de acordo com a dinâmica do ATR.
O uso de três médias móveis ajuda a determinar a direção da tendência e a evitar falsas rupturas.
O blogueiro também escreveu sobre o tema:
A média móvel, por sua vez, tem um lucro estável e retira relativamente pouco.
Estratégias controladas de parada de prejuízos para reduzir a probabilidade de grandes perdas.
É fácil gerar pequenos prejuízos repetidos e reduzir a eficiência dos lucros.
A média móvel está atrasada e pode ter perdido o ponto de viragem.
As posições fixas não são capazes de controlar os riscos de forma eficaz, podendo explodir em caso de uma grande turbulência.
A otimização inadequada dos parâmetros pode levar a abertura e fechamento de posições com demasiada frequência, aumentando as taxas de transação e a perda de pontos de deslizamento.
Optimizar os parâmetros de periodicidade das médias móveis para que sejam mais adequadas às características das variedades de negociação.
Aplicação do indicador de volatilidade ATR para ajuste dinâmico de posições.
Acompanhe a estratégia de Stop Loss.
A confiabilidade da tendência, combinada com os indicadores de volume de transações.
Esta estratégia integra os indicadores tradicionais de análise técnica com a filosofia de negociação de corvos. Usando três médias móveis para rastrear tendências, é possível obter melhores resultados de lucro se os parâmetros forem otimizados adequadamente.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JoshuaMcGowan
//@version=4
// 1. Define strategy settings
strategy(title="Triple Moving Average", overlay=true,
pyramiding=0, initial_capital=1000,
commission_type=strategy.commission.cash_per_order,
commission_value=4, slippage=2)
fastMALen = input(title="Fast MA Length", type=input.integer, defval=8)
medMALen = input(title="Medium MA Length", type=input.integer, defval=21)
slowMALen = input(title="Slow MA Length", type=input.integer, defval=55)
//endMonth = input(title="End Month Backtest", type=input.integer, defval=11)
//endYear = input(title="End Year Backtest", type=input.integer, defval=2019)
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 12, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2016, title = "From Year", minval = 2017)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2017)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true
usePosSize = input(title="Use Position Sizing?", type=input.bool, defval=true)
riskPerc = input(title="Risk %", type=input.float, defval=0.5, step=0.25)
// 2. Calculate strategy values
fastMA = sma(close, fastMALen)
medMA = sma(close, medMALen)
slowMA = sma(close, slowMALen)
//Position Sizing
riskEquity = (riskPerc / 100) * strategy.equity
atrCurrency = (atr(20) * syminfo.pointvalue)
posSize = usePosSize ? floor(riskEquity / atrCurrency) : 1
//Backtest Window
//tradeWindow = (time <= timestamp(endYear, endMonth, 1, 0, 0))
// 3. Determine long trading conditions
enterLong = crossover(fastMA, medMA) and
(fastMA > slowMA) and (medMA > slowMA) and
window()
exitLong = crossunder(fastMA, medMA)
// 4. Code short trading conditions
enterShort = crossunder(fastMA, medMA) and
(fastMA < slowMA) and (medMA < slowMA) and
window()
exitShort = crossover(fastMA, medMA)
// 5. Output strategy data
plot(series=fastMA, color=color.green, title="Fast MA")
plot(series=medMA, color=color.purple, title="Medium MA")
plot(series=slowMA, color=color.red, title="Slow MA",
linewidth=2)
bgColour =
enterLong and (strategy.position_size < 1) ? color.green :
enterShort and (strategy.position_size > -1) ? color.red :
exitLong and (strategy.position_size > 0) ? color.lime :
exitShort and (strategy.position_size < 0) ? color.orange :
na
bgcolor(color=bgColour, transp=85)
// 6. Submit entry orders
if (enterLong)
strategy.entry(id="EL", long=true, qty=1)
if (enterShort)
strategy.entry(id="ES", long=false, qty=1)
// 7. Submit exit orders
strategy.close_all(when=exitLong and
(strategy.position_size > 0))
strategy.close_all(when=exitShort and
(strategy.position_size < 0))
strategy.close_all(when=not window())
//END