A estratégia é um procedimento de retrospectiva de negociação de ações de alta que utiliza o princípio da média do custo do dólar (DCA). Pode adicionar posições após a abertura inicial de uma posição, de acordo com a regra de percentual de desvio de preço e número de ações. A estratégia também inclui a estratégia de stop loss e a função de tracking stop loss.
A estratégia começa com a abertura de uma posição imediata dentro da janela de tempo de retracção, quando o preço de fechamento do dia é maior que 0, e o preço de abertura é o preço de base bo_level. Depois, se não houver um pedido de segurança (((so), todos os possíveis pedidos de parada serão colocados no baralho atual de acordo com o percentual de desvio do preço definido e o número de acréscimos.
Durante a fase de manutenção, se o volume de manutenção for maior que 0, o preço de parada será calculado com base no preço de base e na porcentagem de parada do alvo. Se a função de parada de rastreamento for desligada, esse preço de parada será usado; caso contrário, o preço de parada de parada será atualizado constantemente com base no preço máximo da parada.
A estratégia de DCA pode ser usada para aumentar automaticamente a posição após a queda do preço, reduzindo o custo médio de manutenção da posição e protegendo o risco sistêmico.
Apoio a parâmetros personalizados, regras de abertura de posição flexíveis e estratégias de parada de acordo com diferentes variedades e estilos de negociação.
A função de parada de rastreamento embutida pode ajustar automaticamente a posição da parada de acordo com a situação, evitando que a parada seja acionada prematuramente.
A configuração de parâmetros de retorno é flexível, o que permite testar dados de diferentes períodos de tempo e avaliar a eficácia da estratégia.
Em combinação com a plataforma 3commas, é possível configurar robôs em disco rígido diretamente com os resultados dos testes, sem necessidade de desenvolvimento adicional.
A estratégia de DCA apresenta risco de acumulação de posições, e se o mercado continuar a cair, o volume de posições aumentará ainda mais e os prejuízos aumentarão.
A paragem de percentual fixo não pode ser ajustada para oscilações do mercado, podendo causar uma paragem prematura ou uma saída da paragem. A paragem de rastreamento deve ser configurada.
A detecção de riscos de adequação, a eficácia do disco físico pode ser afetada por fatores como o custo da transação. É necessário fazer uma avaliação de risco.
A estabilidade do sistema das bolsas e 3commas deve ser observada para evitar que as transações planejadas falhem.
A variação de preços de diferentes variedades pode ser ajustada de forma dinâmica, otimizando a regra de acréscimo.
Pode-se combinar o índice de flutuação para determinar a porcentagem de suspensão mais científica.
Pode-se definir uma janela de tempo de retrospecção razoável para diferentes períodos de negociação de variedades específicas.
Pode-se introduzir uma estratégia de stop loss, ou seja, uma estratégia de parada de perdas em caso de grandes perdas.
Pode ser combinado com algoritmos de aprendizagem de máquina para permitir que a estratégia otimize os parâmetros de forma dinâmica.
A estratégia é, em geral, um teste de DCA muito prático. Suporta uma boa configuração de parâmetros personalizados, pode configurar flexivelmente as regras de abertura e parada. Ao mesmo tempo, o recurso de parada de rastreamento incorporado compensa a deficiência de parada fixa. Os parâmetros de retorno também são muito flexíveis, podem testar dados de diferentes variedades e períodos de tempo. Se os parâmetros forem configurados corretamente, a estratégia de DCA pode ser usada para proteger o risco do sistema em variedades com muitas oportunidades de negociação.
/*backtest
start: 2023-09-18 00:00:00
end: 2023-09-25 00:00:00
period: 15h
basePeriod: 15m
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/
// © rouxam
// Author: rouxam
// Inspired by the original work of ericlin0122
//@version=4
// strategy("Backtesting 3commas DCA Bot", overlay=true, pyramiding=99, process_orders_on_close=true, commission_type=strategy.commission.percent, commission_value=0.1)
// Strategy Inputs
price_deviation = input(1.0, type=input.float, title='Price deviation to open safety orders (%)', minval=0.0, step=0.1)/100
take_profit = input(1.0, type=input.float, title='Target Take Profit (%)', minval=0.0, step=0.1)/100
ttp = input(0.5, type=input.float, title='Trailing Take Profit (%) [0 = Disabled]', minval=0.0, step=0.1)/100
base_order = input(10.0, type=input.float, title='base order')
safe_order = input(20.0, type=input.float, title='safe order')
safe_order_volume_scale = input(2.0, type=input.float, title='Safety order volume scale', step=0.1)
safe_order_step_scale = input(1.5, type=input.float, title='Safety order step scale', step=0.1)
max_safe_order = input(5, title='Max safe order', minval=1, maxval=99, step=1)
// Date Inputs
from_month = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
from_day = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
from_year = input(defval = 2021, title = "From Year")
to_month = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
to_day = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
to_year = input(defval = 9999, title = "To Year")
start = timestamp(from_year, from_month, from_day, 00, 00) // backtest start window
finish = timestamp(to_year, to_month, to_day, 23, 59) // backtest finish window
window = time >= start and time <= finish ? true : false // create function "within window of time"
var bo_level = 0.0
var latest_so_level = 0.0
var next_so_level = 0.0
var ttp_active = false
var ttp_max = 0.0
var ttp_level = 0.0
var take_profit_level = 0.0
if strategy.position_size <= 0.0
ttp_max := 0.0
ttp_active := false
// First Position
if(strategy.opentrades == 0 and window and close > 0)
// Place Buy Order ASAP
bo_level := open
strategy.entry("BO", limit=bo_level, long=strategy.long, qty=base_order/bo_level)
latest_so_level := open
// Dollar Cost Averaging
place_safety_orders = latest_so_level == bo_level
if place_safety_orders
// Placing all possible exit orders on that candle
for i = 1 to max_safe_order
next_so_level := latest_so_level * (1 - price_deviation * pow(safe_order_step_scale, i - 1))
so_name = "SO" + tostring(i)
strategy.entry(so_name, long=strategy.long, limit=next_so_level, qty=safe_order * pow(safe_order_volume_scale, i - 1)/next_so_level)
latest_so_level := next_so_level
// Take Profit
if strategy.position_size > 0
take_profit_level := strategy.position_avg_price * (1 + take_profit)
if ttp <= 0.0
// No trailing take profit
strategy.exit(id="TP", limit=take_profit_level)
else
// Trailing take profit
if take_profit_level <= close
ttp_max := max(high, ttp_max)
ttp_active := true
if ttp_active
// Update exit order
ttp_level := ttp_max * (1 - ttp)
strategy.exit(id="TTP", stop=ttp_level)