Estratégia de investimento quantitativa baseada na data de compra mensal

Autora:ChaoZhang, Data: 2023-11-24 14:10:23
Tags:

img

Resumo

A ideia central desta estratégia é encontrar a melhor data de compra a cada mês, comprando ativos digitais nessa data e vendendo-os no final do mês, a fim de alcançar retornos de investimento ideais.

Princípio da estratégia

A estratégia é executada com base na data de compra mensal definida pelo usuário e na data de venda. Ele vai longo na data de compra comprando ativos e fecha a posição na data de venda se definida. Caso contrário, fecha a posição na data de término da estratégia. Isso pode testar a diferença de lucro de diferentes datas de compra mensal.

A lógica para o sinal de compra é: se for a data de compra definida pelo usuário e dentro do intervalo de data efetiva da estratégia, vá longo.

A lógica para o sinal de posição fechada é: se a data de venda for definida e for a data de venda agora, a posição fechada; se não houver data de venda, mas além da data de fim da estratégia, também a posição fechada.

Vantagens da estratégia

  1. Pode encontrar a data da maior flutuação de preços a cada mês para obter retornos excessivos através de negociação intradiária de alta frequência
  2. Pode identificar o ponto de compra ideal comparando padrões de lucro de diferentes datas de compra
  3. Pode determinar se a data de compra ideal muda com base nos principais eventos do mês
  4. Pode equilibrar a negociação a curto e a longo prazo definindo datas de venda diferentes

Riscos e soluções

  1. Risco de queda de preços após compra

    • Configurar o stop loss para limitar a perda máxima
    • Escolha activos com elevada liquidez para evitar oscilações extremas de preços
  2. Alteração da data de compra ideal

    • Monitorar o histórico de alterações de dados e ajustar oportunamente o ponto de compra ideal
    • Reduzir o tamanho da posição durante períodos de alto risco
  3. Perda causada por configuração incorreta dos parâmetros

    • Teste diferentes parâmetros incrementalmente e compare a diferença de lucro
    • Selecionar um intervalo de tempo representativo para o ensaio

Orientações de otimização

  1. Considerar mais fatores na determinação do ponto de entrada

    • Considerar o impacto dos principais acontecimentos noticiosos do mês no preço
    • Analisar as tendências de preços dos ativos digitais relacionados
    • Adicionar modelos de aprendizado de máquina para determinar o tempo ideal
  2. Otimizar o mecanismo de gestão de posições

    • Definição de lucro dinâmico para fechar posição
    • Ajustar o tamanho da posição com base na volatilidade
    • Considerar a posição de detenção entre períodos
  3. Expandir para outros mercados comerciais

    • Aplicar a mais pares de negociação de moeda digital
    • Aplica-se a ações, forex etc.
    • Estabelecer estratégias de arbitragem transfronteiras

Resumo

Esta estratégia encontra a data da maior oscilação de preços intradiários a cada mês, testando a diferença de lucro de diferentes datas de compra. Pode trazer retornos excessivos para investidores que buscam lucros de negociação intradiária de alta frequência.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1h
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/
// © dennis.decoene

//@version=4
strategy(title="Buy and Hold, which day of month is best to buy?", overlay=true)

// Make input options that configure backtest date range
startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31, group="Starting From")
     
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12, group="Starting From")
     
startYear = input(title="Start Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100, group="Starting From")

endDate = input(title="End Date", type=input.integer,
     defval=2, minval=1, maxval=31, group="Until")
endMonth = input(title="End Month", type=input.integer,
     defval=10, minval=1, maxval=12, group="Until")
endYear = input(title="End Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100, group="Until")

entryday = input(title="Entry Day", type=input.integer,
     defval=26, minval=1, maxval=31, tooltip="When to enter (buy the asset) each month")
exitday = input(title="Exit Day", type=input.integer,
     defval=6, minval=1, maxval=31, tooltip="When to exit (sell the asset) each month")
     
useExitDay= input(title="Close position on exit day?", type=input.bool, defval=false, tooltip="Use the Exit Day to close each months position it true or close at the end of the period (if false)")
     
isEntryDay= (dayofmonth(time)==entryday)
isExitDay= (dayofmonth(time)==exitday-1)


inDateRange = true

if (isEntryDay and inDateRange)
    strategy.entry(id="Buy", long=true)
    
if (isExitDay and useExitDay)
    strategy.close_all()


// Exit open market position when date range ends
if (not inDateRange and not useExitDay)
    strategy.close_all()
     

Mais.