Estratégia de negociação Double EMA Golden Cross


Data de criação: 2023-12-07 15:08:57 última modificação: 2023-12-07 15:08:57
cópia: 0 Cliques: 701
1
focar em
1619
Seguidores

Estratégia de negociação Double EMA Golden Cross

Visão geral

Esta estratégia combina duplas cruzadas de ouro EMA, filtros de ruído ATR padronizados e indicadores de tendência ADX, com o objetivo de fornecer um sinal de compra mais confiável para os comerciantes. A estratégia integra vários indicadores para filtrar falsos sinais e identificar oportunidades de negociação mais confiáveis.

Princípio da estratégia

A estratégia usa EMAs de 8 e 20 ciclos para construir um sistema de cruzamentos de EMAs de ouro duplas. Quando um EMA de curto período atravessa um EMA de longo período, gera um sinal de compra.

Além disso, a estratégia define vários indicadores auxiliares para filtragem:

  1. 14 ATR de ciclo, tratados de forma padronizada para filtrar pequenas flutuações de preços no mercado.

  2. 14 Período ADX, a intensidade usada para identificar a tendência. Os sinais de negociação são considerados apenas em uma tendência forte.

  3. 14 ciclos de volume de transação SMA, filtrando os pontos de menor volume de transação.

  4. 414 Indicador de Super Tendência de Ciclo, para determinar a direção do mercado de hipotecas.

O cruzamento de ouro da EMA só pode desencadear um sinal de compra depois de satisfazer as condições de direção da tendência, padronização do ATR, ADX e volume de transação.

Vantagens estratégicas

  1. Combinação de múltiplos indicadores, maior fiabilidade

A estratégia integra vários indicadores, como EMA, ATR, ADX e Super Trend, formando um sistema de filtragem de sinais mais forte e mais confiável através de indicadores complementares.

  1. Parâmetros de tamanho ajustável

Os parâmetros ATR padronização de valor de redução, ADX de redução, período de detenção e outros podem ser ajustados de acordo com a situação real de otimização, a estratégia de maior flexibilidade.

  1. Mercado aberto diferenciável

Para avaliar o mercado de ativos com mais ativos usando o indicador Super Trend, use diferentes parâmetros para o mercado de ativos com mais ativos para evitar oportunidades perdidas.

Risco estratégico

  1. Parâmetros difíceis de otimizar

A combinação de parâmetros de estratégia é complexa, a otimização é difícil e requer uma grande quantidade de repetição para encontrar os parâmetros ótimos.

  1. Risco de desencadeamento de um indicador errado

Apesar da filtragem múltipla, existe um risco de erro de disparo devido à natureza do atraso do indicador. É necessário considerar a teoria de stop-loss.

  1. Baixa frequência de transações

A frequência de negociação estratégica pode ser baixa e pode ocorrer uma ausência de negociação prolongada, devido à influência de múltiplos indicadores e de ondas.

Direção de otimização da estratégia

  1. Combinação de parâmetros de otimização

Encontrar a melhor combinação de parâmetros indicadores através de uma grande quantidade de dados de retrospecção.

  1. Aumentar o aprendizado de máquina

Baseado em uma grande quantidade de dados históricos, os algoritmos de aprendizado de máquina são usados para otimizar automaticamente os parâmetros da estratégia, permitindo a adaptabilidade da estratégia.

  1. Considerar mais fatores de mercado

A diversidade de estratégias, combinada com mais indicadores para avaliar a estrutura do mercado, o sentimento e outros fatores.

Resumir

Esta estratégia de integração considera tendências, volatilidade e fatores de quantidade, formando um sistema de negociação através de filtragem de vários indicadores e ajuste de parâmetros. Em termos de integração, a estratégia é de alta confiabilidade e pode melhorar a eficiência de negociação da estratégia por meio de uma otimização adicional de sua combinação de parâmetros e modelagem.

Código-fonte da estratégia
/*backtest
start: 2023-11-29 00:00:00
end: 2023-12-06 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//Description:
//This strategy is a refactored version of an EMA cross strategy with a normalized ATR filter and ADX control. 
//It aims to provide traders with signals for long positions based on market conditions defined by various indicators.

//How it Works:
//1. EMA: Uses short (8 periods) and long (20 periods) EMAs to identify crossovers.
//2. ATR: Uses a 14-period ATR, normalized to its 20-period historical range, to filter out noise.
//3. ADX: Uses a 14-period RMA to identify strong trends.
//4. Volume: Filters trades based on a 14-period SMA of volume.
//5. Super Trend: Uses a Super Trend indicator to identify the market direction.

//How to Use:
//- Buy Signal: Generated when EMA short crosses above EMA long, and other conditions like ATR and market direction are met.
//- Sell Signal: Generated based on EMA crossunder and high ADX value.

//Originality and Usefulness:
//This script combines EMA, ATR, ADX, and Super Trend indicators to filter out false signals and identify more reliable trading opportunities. 
//USD Strength is not working, just simulated it as PSEUDO CODE: [close>EMA(50)]

//Strategy Results:
//- Account Size: $1000
//- Commission: Not considered
//- Slippage: Not considered
//- Risk: Less than 5% per trade
//- Dataset: Aim for more than 100 trades for sufficient sample size

//Note: This script should be used for educational purposes and should not be considered as financial advice.

//Chart:
//- The script's output is plotted as Buy and Sell signals on the chart.
//- No other scripts are included for clarity.
//- Have tested with 30mins period
//- You are encouraged to play with parameters, let me know if you 

//@version=5
strategy("Advanced EMA Cross with Normalized ATR Filter, Controlling ADX", shorttitle="ALP V5", overlay=true )

// Initialize variables
var bool hasBought = false
var int barCountSinceBuy = 0

// Define EMA periods
emaShort = ta.ema(close, 8)
emaLong = ta.ema(close, 20)

// Define ATR parameters
atrLength = 14
atrValue = ta.atr(atrLength)
maxHistoricalATR = ta.highest(atrValue, 20)
minHistoricalATR = ta.lowest(atrValue, 20)
normalizedATR = (atrValue - minHistoricalATR) / (maxHistoricalATR - minHistoricalATR)

// Define ADX parameters
adxValue = ta.rma(close, 14)
adxHighLevel = 30
isADXHigh = adxValue > adxHighLevel

// Initialize risk management variables
var float stopLossPercent = na
var float takeProfitPercent = na

// Calculate USD strength
// That's not working as usd strenght, since I couldn't manage to get usd strength 
//I've just simulated it as if the current close price is above 50 days average (it's likely a bullish trend), usd is strong (usd_strenth variable is positive)
usd_strength = close / ta.ema(close, 50) - 1

// Adjust risk parameters based on USD strength
if (usd_strength > 0)
    stopLossPercent := 3
    takeProfitPercent := 6
else
    stopLossPercent := 4
    takeProfitPercent := 8

// Initialize position variable
var float positionPrice = na

// Volume filter
minVolume = ta.sma(volume, 14) * 1.5
isVolumeHigh = volume > minVolume

// Market direction using Super Trend indicator
[supertrendValue, supertrendDirection] = ta.supertrend(4, 14)
bool isBullMarket = supertrendDirection < 0
bool isBearMarket = supertrendDirection > 0

// Buy conditions for Bull and Bear markets
buyConditionBull = isBullMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.2
buyConditionBear = isBearMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.5
buyCondition = buyConditionBull or buyConditionBear

// Sell conditions for Bull and Bear markets
sellConditionBull = isBullMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh)
sellConditionBear = isBearMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh)
sellCondition = sellConditionBull or sellConditionBear

// Final Buy and Sell conditions
if (buyCondition)
    strategy.entry("Buy", strategy.long)
    positionPrice := close
    hasBought := true
    barCountSinceBuy := 0

if (hasBought)
    barCountSinceBuy := barCountSinceBuy + 1

// Stop-loss and take-profit levels
longStopLoss = positionPrice * (1 - stopLossPercent / 100)
longTakeProfit = positionPrice * (1 + takeProfitPercent / 100)

// Final Sell condition
finalSellCondition = sellCondition and hasBought and barCountSinceBuy >= 3 and isVolumeHigh

if (finalSellCondition)
    strategy.close("Buy")
    positionPrice := na
    hasBought := false
    barCountSinceBuy := 0

// Implement stop-loss and take-profit
strategy.exit("Stop Loss", "Buy", stop=longStopLoss)
strategy.exit("Take Profit", "Buy", limit=longTakeProfit)

// Plot signals
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=finalSellCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")