
A estratégia de codificação de posições dinâmicas de equilíbrio de múltiplos sinais é uma estratégia de negociação quantitativa projetada especificamente para o mercado de criptomoedas, que combina indicadores de análise técnica com um sistema de gerenciamento de posições dinâmicas. A ideia central é usar sinais de cruzamento de médias móveis rápidas e lentas e um indicador aleatório relativamente forte (RSI estocástico) para determinar a direção da tendência do mercado e o momento de entrada, ao mesmo tempo em que usa uma estratégia de aumento de posição piramidal para responder à reversão de preço.
A estratégia baseia-se nos seguintes componentes tecnológicos principais:
Sistema de média móvel duplaA estratégia usa o cruzamento de duas médias móveis (rápidas e lentas) como o principal sinal de entrada. Os usuários podem escolher entre a média móvel simples (SMA), a média móvel indexada (EMA) ou a média móvel de Hull (HMA), e podem optar por cruzar a linha média para cima ou para baixo, dependendo da situação do mercado.
Indicador aleatório de força e fraqueza (RSI estocástico)Como condição de entrada auxiliar, um sinal de compra é acionado quando o RSI estocástico atravessa o nível de 5 na linha K, enquanto a média móvel rápida está em uma tendência ascendente (aumento de 5 ciclos consecutivos).
Sistema de ordens de segurança dinâmicoApós a entrada inicial, a estratégia estabelece várias ordens de segurança abaixo do nível de preço predefinido. Esses níveis de preço são calculados com base nos parâmetros de desvio de preço e no fator de escala de largura de passo.
Ajuste dinâmico da escala da posiçãoO tamanho de cada ordem de segurança aumenta gradualmente com o fator de escala da ordem de segurança, formando uma estrutura de acréscimo incremental.
Mecanismo de compensação de lucrosA estratégia estabelece um nível de lucro alvo baseado no preço médio de uma posição, e todas as posições são liquidadas quando o preço sobe para esse nível.
O processo de execução da estratégia é o seguinte:
Sinal de entrada multidimensionalCombinação de indicadores de tendência (Moving Average) e de momentum (Stochastic RSI) para aumentar a precisão de entrada e reduzir os falsos sinais.
Altamente adaptávelOs parâmetros da estratégia são altamente personalizáveis, permitindo que o usuário ajuste o tipo de média móvel, o período, a direção cruzada, a taxa de desvio de preço, entre outros, de acordo com diferentes condições de mercado e preferências de risco pessoais.
Efeito de medição de custosA redução do custo médio de manutenção de posições e a melhoria da probabilidade de lucro final, através de um sistema de ordens de segurança predeterminado, que aumenta automaticamente a posição quando os preços caem.
Otimização da eficiência financeiraO design de escala crescente de ordens seguras torna a distribuição de fundos mais eficiente, com mais fundos sendo distribuídos para ordens com preços mais baixos, de acordo com a filosofia de investimento em valor.
Execução automáticaUma vez configurados os parâmetros, a estratégia pode ser executada de forma totalmente automática, sem a necessidade de intervenção humana, reduzindo a emoção na decisão de negociação.
A adaptabilidade ao mercado flexívelA estratégia pode ser adaptada a diferentes cenários de mercado (bull ou bear) por meio de ajustes na direção do cruzamento das médias móveis.
Risco sem fimA estratégia não tem um mecanismo de parada de perdas definido, o que pode levar a grandes perdas em situações de queda contínua. Em condições extremas de mercado, como queda ou rescisão de preços de ativos, pode levar a perdas graves de capital.
A necessidade de financiamento é grande.Como a estratégia requer que o capital seja reservado para vários pedidos de segurança, e cada pedido cresce em tamanho, o capital real necessário pode ser muito maior do que o investimento inicial, os investidores precisam garantir que o capital disponível seja suficiente.
Ser multipartidário.A estratégia atual é projetada para apoiar apenas a multiplicação de direções e não é eficaz em tendências descendentes de longo prazo. Recomenda-se que a estratégia seja aplicada em ativos que parecem bons em geral.
Sensibilidade do parâmetroO desempenho da estratégia é altamente dependente da configuração de parâmetros, e os parâmetros inadequados podem levar a um envio prematuro de ordens de segurança ou a uma acumulação excessiva.
A armadilha do custo médioEmbora a estratégia tenha reduzido o custo médio através da adição de posições, a queda do valor dos ativos, se não for recuperada, pode levar a um “caos de recuperação” e a uma paralisação de fundos.
Os métodos para mitigar o risco incluem: aplicar a estratégia em ativos que parecem bons em geral; reservar fundos suficientes para responder a ordens de segurança; verificar periodicamente a correspondência dos parâmetros da estratégia com o ambiente do mercado; definir limites para o número máximo de ordens de segurança; considerar a adição de um mecanismo de parada global na estratégia.
Aumentar o mecanismo de suspensão de perdasA falta mais evidente da estratégia é a ausência de um mecanismo de stop loss. Recomenda-se a adição de um parâmetro de stop loss global, que obriga a liquidação de todas as posições quando a perda atinge uma certa proporção, para proteger os fundos.
Adicionar um filtro de tendências de mercado: pode ser adicionado um indicador de tendência de longo período, como a média móvel de longo prazo ou o indicador ADX, executar a estratégia somente quando a direção da tendência principal é consistente, evitando a adição de posições desnecessárias em um mercado de baixa visível.
Optimizar a lógica de acionamento de ordens de segurançaOs pedidos de segurança atuais baseiam-se apenas em disparos de desvio de preço, mas podem ser considerados em combinação com volume de negócios, taxa de flutuação ou outros indicadores técnicos para tornar o disparo de pedidos de segurança mais inteligente.
Ajuste dinâmico do lucro-alvoO objetivo de lucro pode ser ajustado de acordo com a volatilidade do mercado ou a dinâmica do comportamento dos preços após a entrada, definindo um objetivo de lucro mais alto em um ambiente de mercado de alta volatilidade.
Adição de espaço livreA estratégia de expansão apoia a direção de curto prazo, permitindo-lhe ser igualmente eficaz em uma tendência de baixa, aumentando a adaptabilidade da estratégia em todo o mercado.
Adicionar controle de retraçãoA estratégia de retração pode ser definida como: definir limites máximos de retração, suspender a negociação ou reiniciar os parâmetros quando a estratégia de retração excede o limiar, para evitar perdas contínuas em condições de mercado adversas.
Optimização de parâmetros periódicosA função de otimização automática de parâmetros foi adicionada para ajustar os parâmetros periodicamente com base em dados recentes do mercado, permitindo que a estratégia se adapte às mudanças nas características do mercado.
Essas orientações de otimização visam melhorar a capacidade de gestão de risco, adaptabilidade ao mercado e estabilidade a longo prazo da estratégia, permitindo que ela tenha um desempenho relativamente estável em vários cenários de mercado.
A estratégia de codificação de posições dinâmicas lineares de múltiplos sinais auto-adaptáveis fornece uma forma sistematizada de negociação para o mercado de criptomoedas, combinando sinais de entrada de médias móveis e indicadores aleatórios relativamente fracos, com um sistema de ordens de segurança dinâmica. Sua principal vantagem é a capacidade de aumentar gradualmente as posições automaticamente quando os preços se ajustam, reduzir o custo médio de manutenção de posições e lucrar quando os preços se recuperam.
No entanto, a estratégia também apresenta riscos evidentes, especialmente a falta de mecanismos de parada de prejuízos e a perda de capital que pode ocorrer em um cenário de queda contínua. Os investidores devem estar plenamente conscientes de suas características de risco ao usar a estratégia, garantir que tenham reservas suficientes de capital e considerar o aumento de medidas adicionais de controle de risco.
Com a configuração razoável de parâmetros e orientação de otimização recomendada, a estratégia pode ser uma ferramenta poderosa para investidores de longo prazo em criptomoedas, especialmente para investidores que acreditam no valor a longo prazo de um determinado ativo cripto, mas desejam otimizar o custo de entrada. Na aplicação prática, recomenda-se testar previamente em ambientes simulados e ajustar e otimizar continuamente os parâmetros da estratégia de acordo com o desempenho real do mercado.
/*backtest
start: 2024-08-19 00:00:00
end: 2025-08-18 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_OKX","currency":"BTC_USDT","balance":5000}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//
//@version=6
strategy(title = 'PEPE- DCA Strategy', overlay = true, pyramiding = 11, process_orders_on_close = true, commission_value = 0.1)
Base_order_size = input.int(1500, 'Base order Size')/close
Safety_order_size = input.int(350, 'Save order')/close
Triger_Type = input.string('Over', 'Entry at Cross Over / Under', options = ['Over', 'Under'], group = 'Deal start condition > Trading View custom signal', inline = '1', tooltip = 'Deal start condition decision')
Short_Moving_Average = input.string('SMA', 'Short Moving Average', group = 'Deal start condition > Trading View custom signal', inline = '2', options = ['SMA', 'EMA', 'HMA'])
Short_Period = input.int(17, 'Period', group = 'Deal start condition > Trading View custom signal', inline = '2')
Long_Moving_Average = input.string('HMA', 'Long Moving Average', group = 'Deal start condition > Trading View custom signal', inline = '3', options = ['SMA', 'EMA', 'HMA'])
Long_Period = input.int(26, 'Period', group = 'Deal start condition > Trading View custom signal', inline = '3')
Target_profit = input.float(1.9, 'Target profit (%)', step = 0.05, group = 'Take profit / Stop Loss', inline = '1') * 0.01
Max_safety_trades_count = input.int(5, 'Max safety trades count', maxval = 10, group = 'Safety orders', inline = '1')
Price_deviation = input.float(2.45, 'Price deviation to open safety orders (% from initial order)', step = 0.01, group = 'Safety orders', inline = '2') * 0.01
Safety_order_volume_scale = input.float(1.85, 'Safety order volume scale', step = 0.01, group = 'Safety orders', inline = '3')
Safety_order_step_scale = input.float(1.61, 'Safety order step scale', step = 0.01, group = 'Safety orders', inline = '3')
// Position status
status_none = strategy.opentrades == 0
status_long = strategy.position_size[1] == 0 and strategy.position_size > 0
/////////// Moving_Averages
Short_Moving_Average_Line = Short_Moving_Average == 'SMA' ? ta.sma(close, Short_Period) : Short_Moving_Average == 'EMA' ? ta.ema(close, Short_Period) : Short_Moving_Average == 'HMA' ? ta.sma(close, Short_Period) : na
Long_Moving_Average_Line = Long_Moving_Average == 'SMA' ? ta.sma(close, Long_Period) : Long_Moving_Average == 'EMA' ? ta.ema(close, Long_Period) : Long_Moving_Average == 'HMA' ? ta.sma(close, Long_Period) : na
///////////// Moving_Averages long condition
Base_order_Condition = Triger_Type == 'Over' ? ta.crossover(Short_Moving_Average_Line, Long_Moving_Average_Line) : ta.crossunder(Short_Moving_Average_Line, Long_Moving_Average_Line) // Buy when close crossing lower band
//////////////////// Savety order deviation
safety_order_deviation(index) =>
Price_deviation * math.pow(Safety_order_step_scale, index - 1)
pd = Price_deviation
ss = Safety_order_step_scale
//////// Cal of deviation steps
step(i) =>
i == 1 ? pd : i == 2 ? pd + pd * ss : i == 3 ? pd + (pd + pd * ss) * ss : i == 4 ? pd + (pd + (pd + pd * ss) * ss) * ss : i == 5 ? pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss : i == 6 ? pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss : i == 7 ? pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss : i == 8 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss : i == 9 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss : i == 10 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss : na
long_line(i) =>
close[1] - close[1] * step(i)
////////// Savety order Triger
Safe_order_line(i) =>
i == 0 ? ta.valuewhen(status_long, long_line(0), 0) : i == 1 ? ta.valuewhen(status_long, long_line(1), 0) : i == 2 ? ta.valuewhen(status_long, long_line(2), 0) : i == 3 ? ta.valuewhen(status_long, long_line(3), 0) : i == 4 ? ta.valuewhen(status_long, long_line(4), 0) : i == 5 ? ta.valuewhen(status_long, long_line(5), 0) : i == 6 ? ta.valuewhen(status_long, long_line(6), 0) : i == 7 ? ta.valuewhen(status_long, long_line(7), 0) : i == 8 ? ta.valuewhen(status_long, long_line(8), 0) : i == 9 ? ta.valuewhen(status_long, long_line(9), 0) : i == 10 ? ta.valuewhen(status_long, long_line(10), 0) : na
l1 = Safe_order_line(1)
l2 = Safe_order_line(2)
l3 = Safe_order_line(3)
l4 = Safe_order_line(4)
l5 = Safe_order_line(5)
l6 = Safe_order_line(6)
l7 = Safe_order_line(7)
l8 = Safe_order_line(8)
l9 = Safe_order_line(9)
l10 = Safe_order_line(10)
//// take profit
TP_line = strategy.position_avg_price * (1 + Target_profit)
//Size of safety orders
safety_order_size(i) =>
Safety_order_size * math.pow(Safety_order_volume_scale, i - 1)
///plots
plot(Short_Moving_Average_Line, 'Short MA', color = color.new(color.red, 0), style = plot.style_line)
plot(Long_Moving_Average_Line, 'Long MA', color = color.new(color.green, 0), style = plot.style_line)
plot(strategy.opentrades == 1 ? l1 : na, 'Safety order1',color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 2 ? l2 : na, 'Safety order2', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 3 ? l3 : na, 'Safety order3', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 4 ? l4 : na, 'Safety order4', color =color.red, style = plot.style_linebr)
plot(strategy.opentrades == 5 ? l5 : na, 'Safety order5', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 6 ? l6 : na, 'Safety order5', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 7 ? l7 : na, 'Safety order6', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 8 ? l8 : na, 'Safety order7', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 9 ? l9 : na, 'Safety order8', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 10 ? l10 : na, 'Safety order9', color = color.red, style = plot.style_linebr)
plot(strategy.position_size > 0 ? TP_line : na, 'Take Profit', color = color.green, style = plot.style_linebr)
///////////////SToch-Rsi
smoothK = input.int(1, "ST_RSI -K settings for long", minval=1)
smoothD = input.int(3, "ST_RSI-D settings for long", minval=1)
lengthRSI = input.int(14, "RSI Length", minval=1)
lengthStoch = input.int(9, "Stochastic Length", minval=1)
src = input(close, title="RSI Source")
rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
////////buy cond- ST_RSI
bk = ta.crossover(k,5)
r = ta.rising(Short_Moving_Average_Line,5)
buy = bk and r
//Stradegy mod
if Base_order_Condition or buy
if (Base_order_Condition or buy ) and strategy.opentrades == 0
strategy.entry('Base order', strategy.long, qty = Base_order_size )
for i = 1 to Max_safety_trades_count by 1
i_s = str.tostring(i)
if strategy.opentrades <= i and strategy.position_size > 0 and not(strategy.position_size == 0)
strategy.entry('Safety order' + i_s, strategy.long, qty = safety_order_size(i) , limit = Safe_order_line(i))
for i = 1 to Max_safety_trades_count by 1
i_s = str.tostring(i)
if status_none
strategy.cancel('Safety order' + i_s)
strategy.exit('TP/SL', 'Base order', limit = TP_line)
strategy.exit('TP/SL', 'Safety order' + i_s, limit = TP_line)
//