Esta estratégia gera sinais de compra e venda com base no cruzamento de duas médias móveis com configurações de parâmetros diferentes. Quando o período mais curto cruza acima da média móvel do período mais longo de baixo, um sinal de compra é gerado. Quando o período mais curto cruza abaixo da média móvel do período mais longo de cima, um sinal de venda é gerado.
A estratégia é escrita em código Pine. Primeiro define duas médias móveis, chamadas p1 e p2, com tipo, comprimento e fonte de preço personalizáveis através da entrada. Aqui p1 representa o MA de período mais curto e p2 representa o MA de período mais longo.
As funções crossover e crossunder são usadas para detectar o crossover entre os dois MA. Quando p1 cruza sobre p2 de baixo, um sinal de compra é gerado. Quando p1 cruza sob p2 de cima, um sinal de venda é gerado.
Para executar transacções, a estratégia entra em posições longas ou curtas usando a estratégia.entry quando os sinais são acionados.
As vantagens desta estratégia incluem:
Há também alguns riscos com esta estratégia:
Os riscos podem ser reduzidos ajustando os comprimentos de MA, adicionando condições de filtro, etc. Indicadores de tendência também podem ser adicionados para determinar o viés do mercado.
A estratégia pode ser reforçada pelos seguintes aspectos:
Usar VWAP ou preço típico como fonte de preço para tornar os sinais de cruzamento mais confiáveis.
Adicionar um Período de Validação para evitar cruzes erradas a curto prazo.
Incorporar paradas ATR com base na perda máxima aceitável de acordo com a volatilidade do mercado.
Optimização de parâmetros através do ajuste de curvas para encontrar combinações ideais.
Considere apenas sinais na direção de tendências de um período de tempo mais longo.
A estratégia de crossover de MA dupla é fácil de entender e implementar, gerando sinais comerciais de dois crossovers de MA com alta personalização.
/*backtest start: 2022-11-20 00:00:00 end: 2023-11-26 00:00:00 period: 1d basePeriod: 1h 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/ // © RafaelPiccolo //@version=4 strategy("Double MA Cross", overlay=true) type1 = input("SMA", "MA Type 1", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"]) len1 = input(10, minval=1, title="Length 1") src1 = input(close, "Source 1", type=input.source) type2 = input("SMA", "MA Type 2", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"]) len2 = input(50, minval=2, title="Length 2") src2 = input(close, "Source 2", type=input.source) shortOnly = input(false, "Short only") tema(src, len)=> ema1 = ema(src, len) ema2 = ema(ema1, len) ema3 = ema(ema2, len) return = 3 * (ema1 - ema2) + ema3 getPoint(type, len, src)=> return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len) p1 = getPoint(type1, len1, src1) p2 = getPoint(type2, len2, src2) shortCondition = crossunder(p1, p2) longCondition = crossover(p1, p2) if (shortCondition) strategy.entry("Short", strategy.short) if (longCondition) if (shortOnly) strategy.close("Short") else strategy.entry("Long", strategy.long) plot(p1, "MA 1", p1 < p2 ? color.red : color.green) plot(p2, "MA 2", color.blue)