Esta estratégia de script Pine implementa uma abordagem de média de custo diário em dólares na plataforma TradingView, incorporando sinais de toque da EMA para determinar pontos de entrada.
A estratégia tem as seguintes características principais:
Média diária do custo em dólares
EMAs para sinais de entrada
Perda de paragem dinâmica
Limite de contagem de transacções
Especificamente, todos os dias a estratégia investe uma quantia fixa e calcula as ações a serem compradas com base no preço de fechamento. Se o preço de fechamento cruzar acima de qualquer uma das EMA de 5, 10, 20 dias, etc., um sinal de compra é acionado. Uma vez que a contagem de negociações acumulada atinge o limite de 300, não ocorrerão mais compras. Além disso, se o preço fechar abaixo da SMA de 20 dias ou atingir a data de saída pré-definida, todas as posições são limpas. O script também traça as EMAs no gráfico de preços para análise visual.
As vantagens desta estratégia incluem:
Diversificação de riscos
Combinação da EMA evita retrações
Controlo dinâmico das perdas de parada
Controlo de limites comerciais Riscos
Visualização EMA intuitiva
Muito personalizável
A estratégia comporta também alguns riscos:
Ainda existem riscos sistêmicos
Montante fixo do investimento
As EMAs não podem reagir a movimentos extremos
Limites comerciais potencial de lucro
A colocação de Stop Loss requer cuidado
Outras optimizações:
Montante dinâmico diário de investimento
Sinais de entrada adicionais
Média móvel exponencial
Limite de posição dinâmica
Perda de paragem de atraso
Em resumo, esta estratégia diária de DCA combinada com a EMA realiza o conceito de investimentos periódicos de longo prazo, espalhando riscos em várias pequenas entradas em comparação com grandes compras únicas. As EMAs ajudam a evitar riscos de retração de curto prazo até certo ponto, enquanto o stop loss controla a perda máxima. Ainda assim, os riscos do cisne negro e as limitações do tamanho fixo do investimento precisam ser mantidos em mente. Estes aspectos fornecem direções de aprimoramento futuro por meio de ajuste de parâmetros e combinações de indicadores para a construção de estratégias quant eficientes, mas estáveis.
/*backtest start: 2024-01-08 00:00:00 end: 2024-01-15 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Daily DCA Strategy with Touching EMAs", overlay=true, pyramiding=10000) // Customizable Parameters daily_investment = input(50000, title="Daily Investment") start_year = input(2022, title="Start Year") start_month = input(1, title="Start Month") start_day = input(1, title="Start Day") end_year = input(2023, title="End Year") end_month = input(12, title="End Month") end_day = input(1, title="End Day") trade_count_limit = input(10000, title="Pyramiding Limit") enable_sell = input(true, title="Enable Sell") start_date = timestamp(start_year, start_month, start_day) var int trade_count = 0 // Calculate the number of shares to buy based on the current closing price shares_to_buy = daily_investment / close // Check if a new day has started and after the start date isNewDay = dayofmonth != dayofmonth[1] and time >= start_date // Buy conditions based on EMA crossovers ema5_cross_above = crossover(close, ema(close, 5)) ema10_cross_above = crossover(close, ema(close, 10)) ema20_cross_above = crossover(close, ema(close, 20)) ema50_cross_above = crossover(close, ema(close, 50)) ema100_cross_above = crossover(close, ema(close, 100)) ema200_cross_above = crossover(close, ema(close, 200)) if isNewDay and (ema5_cross_above or ema10_cross_above or ema20_cross_above or ema50_cross_above or ema100_cross_above or ema200_cross_above) and trade_count < trade_count_limit strategy.entry("Buy", strategy.long, qty=shares_to_buy) trade_count := trade_count + 1 // Dynamic sell conditions (optional) sell_condition = true if enable_sell and sell_condition strategy.close_all() // EMA Ribbon for visualization plot(ema(close, 5), color=color.red, title="EMA 5") plot(ema(close, 10), color=color.orange, title="EMA 10") plot(ema(close, 20), color=color.yellow, title="EMA 20") plot(ema(close, 50), color=color.green, title="EMA 50") plot(ema(close, 100), color=color.blue, title="EMA 100") plot(ema(close, 200), color=color.purple, title="EMA 200")