Estratégia de negociação quantitativa de momentum baseada no ciclo lunar no mercado de criptomoedas

Lunar Calendar Cyclical Trading ETHUSDT Fixed Date Entry/Exit Quantitative Strategy
Data de criação: 2025-08-11 09:09:22 última modificação: 2025-08-11 09:09:22
cópia: 0 Cliques: 182
2
focar em
319
Seguidores

Estratégia de negociação quantitativa de momentum baseada no ciclo lunar no mercado de criptomoedas Estratégia de negociação quantitativa de momentum baseada no ciclo lunar no mercado de criptomoedas

Visão geral

Esta estratégia é uma estratégia de negociação de criptomoedas baseada em datas do calendário, com operações de compra e venda utilizando datas específicas do ciclo lunar. A estratégia começa no ano novo lunar e continua até o final do mês de dezembro do calendário do ano, seguindo regras simples: compra no 5o dia de cada mês lunar e venda no 26o dia de cada mês lunar. Esta estratégia tenta capturar padrões de mercado que possam estar relacionados ao ciclo lunar, oferecendo aos comerciantes uma estrutura de negociação estruturada e fácil de seguir.

Princípio da estratégia

O princípio central da estratégia é baseado no possível impacto do ciclo lunar sobre o mercado de criptomoedas. O código atende a essa idéia da seguinte forma:

  1. Primeiro, defina a data de início do novo ano lunar e o número de dias de cada mês para cada ano, cobrindo o período de 2020 a 2026.
  2. Determine o mês e a data do calendário atual, calculando a diferença de dias entre a data atual e o novo ano lunar.
  3. Quando a data do calendário lunar é dia 5 e não há uma posição atual, o sinal de compra é acionado.
  4. Quando a data é o dia 26 do calendário lunar e a posição é mantida, o sinal de venda é acionado.
  5. Compre o máximo possível de criptomoedas usando todos os fundos disponíveis, levando em consideração os efeitos do ponto de deslizamento e das taxas.
  6. Quando for vendido, liquida todas as suas posições e realize um lucro ou perda.

A estratégia usa um método de cálculo de data exato, armazenando o número de dias de cada mês lunar em uma matriz e acumulando o número total de dias a partir do início do novo ano lunar, para determinar com precisão a data lunar atual. Este método garante o disparo exato do sinal de negociação.

Vantagens estratégicas

Analisando o código da estratégia, pode-se concluir os seguintes benefícios:

  1. Regras Simples e ClarasA estratégia é muito intuitiva, fácil de entender e executar, reduzindo o julgamento subjetivo do comerciante.
  2. Considerar os fatores de fricção no mercadoA estratégia inclui uma taxa de comissões e um ponto de deslizamento de 0,1%, o que torna os resultados da retrospectiva mais próximos do ambiente de negociação real.
  3. Eficiência na utilização dos fundosO que é que a empresa tem a fazer com o seu dinheiro?
  4. Considerando a perspectiva única do ciclo lunarAo contrário da análise técnica tradicional, a estratégia introduz um elemento de calendário que pode capturar padrões únicos associados ao comportamento dos investidores nos mercados asiáticos.
  5. Aplicabilidade a longo prazoA estratégia fornece dados do calendário lunar de 2020 a 2026, permitindo que os comerciantes usem o método a longo prazo.
  6. Auxílio visualAjuda os traders a acompanhar diretamente a execução da estratégia, mostrando as datas do calendário lunar nos gráficos.
  7. Evite o excesso de transaçõesO que é que a China está a fazer para reduzir os custos e os riscos associados a um excesso de transações?

Risco estratégico

Apesar dos benefícios mencionados acima, a estratégia também apresenta alguns riscos potenciais:

  1. Falta de mecanismos de gestão de riscosA estratégia não estabelece um ponto de parada, podendo levar a perdas significativas se o mercado cair drasticamente após a compra.
  2. Ignorar as tendências e o estado do mercadoA estratégia é baseada apenas na data de negociação, sem considerar a tendência geral do mercado, a volatilidade ou outros indicadores técnicos.
  3. A hipótese de uma lei periódicaA estratégia pressupõe que o ciclo lunar tem alguma relação com o preço da criptomoeda, mas essa relação pode ser instável ou inexistente.
  4. Limitação de um determinado período de tempoEmbora os dados sejam fornecidos para os anos 2020-2026, os dados do calendário lunar para os anos futuros precisam ser atualizados e a estratégia pode não funcionar fora desse intervalo.
  5. Risco de liquidezO mercado pode ter problemas de liquidez em determinadas datas do calendário, especialmente quando se trata de grandes volumes de dinheiro.
  6. Possibilidade de erro no cálculo da dataQualquer erro no cálculo da data do calendário lunar pode levar a um sinal de negociação errado.
  7. Falta de adaptabilidadeO mercado de ações e de valores mobiliários está em constante mudança, e os mercados de ações e de valores mobiliários estão em constante mudança.

Para reduzir esses riscos, os comerciantes podem considerar a confirmação de transações em combinação com outros indicadores técnicos, ou definir um stop loss fixo para limitar a perda de uma única transação.

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

Ao analisar o código em profundidade, pode-se sugerir o seguinte:

  1. Apresentando um mecanismo de stop loss: Adicionar uma condição de parada de porcentagem ou de valor absoluto, para que os perdedores se desloquem automaticamente quando atingirem um determinado limiar, evitando perdas significativas. O código de otimização pode aumentar semelhantesif strategy.position_size > 0 and close < entry_price * (1 - stop_loss_percent)A condição de julgamento.

  2. Confirmação de indicadores técnicos integradosCombinação de indicadores de tendência (como a média móvel) ou de momentum (como o RSI, o indicador de força relativa) como condição auxiliar, executando a negociação de datas de calendário somente quando os indicadores técnicos fornecem um sinal favorável. Isso pode melhorar a qualidade do sinal.

  3. Optimizar a data de compra e venda: Analisar quais datas do calendário são realmente melhores para comprar e vender, em vez de usar o dia 5 e o dia 26 de forma fixa. Algumas combinações de datas específicas podem ter um melhor desempenho.

  4. Gestão de posições parciaisMudança de estratégia: negociar com parte do capital em vez de 100%, ou ajustar o tamanho da posição de acordo com a dinâmica da volatilidade do mercado para dispersar o risco.

  5. Adição de filtros de status de mercadoSuspender a execução da estratégia em condições de mercado extremas (como alta volatilidade ou uma tendência de mercado de baixa visível) para evitar a negociação em condições adversas.

  6. Ampliação do tempo de aplicação: adicionar dados do calendário para mais anos, ou desenvolver uma função para calcular automaticamente a data do calendário, para que a estratégia possa funcionar indefinidamente.

  7. Aumentar o comércio de variedadesA estratégia pode ser estendida a várias criptomoedas ou outras classes de ativos, observando as diferenças de desempenho em diferentes mercados durante o ciclo lunar.

A implementação dessas orientações de otimização pode aumentar significativamente a robustez e a adaptabilidade da estratégia, mantendo a sua simplicidade e a sua visão intuitiva.

Resumir

A estratégia de negociação de criptomoedas baseada no ciclo lunar oferece uma perspectiva de negociação única, utilizando operações de compra e venda em datas específicas do calendário. A maior vantagem da estratégia reside na simplicidade de suas regras claras e na facilidade de implementação, combinando esse fator único do ciclo lunar, podendo capturar padrões de mercado ignorados pela análise técnica convencional.

No entanto, a estratégia também enfrenta desafios com a falta de gerenciamento de risco e adaptabilidade ao mercado. Para melhorar a eficácia da estratégia, recomenda-se a introdução de medidas de melhoria, como mecanismos de parada de prejuízos, confirmação de indicadores técnicos e otimização das datas de compra e venda. Essas otimizações podem não apenas reduzir os riscos potenciais, mas também aumentar a capacidade de adaptação da estratégia em diferentes ambientes de mercado.

É importante notar que qualquer estratégia de negociação precisa ser testada adequadamente de retrospectiva e prospectiva para verificar seu desempenho em condições reais de mercado. Ao adotar essa estratégia, o comerciante deve fazer os ajustes apropriados de acordo com sua capacidade de tolerância ao risco e seus objetivos de investimento, e tomar decisões de negociação mais abrangentes em combinação com outros métodos de análise.

Código-fonte da estratégia
/*backtest
start: 2024-08-11 00:00:00
end: 2025-08-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("Lunar ETHUSDT Trading 100% Invest with Fee & Slippage (2020~2026)", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1)

// Fee and slippage settings
feePercent = 0.1    // 0.1%
slippageTicks = 3
tickSize = syminfo.mintick
slippage = slippageTicks * tickSize

// Function for lunar new year start date and monthly lengths by year
f_get_lunar_data() =>
    y = year(time)
    if y == 2020
        [timestamp("Asia/Seoul", 2020, 1, 25, 0, 0), array.from(29,30,29,30,29,30,29,30,29,30,30,29)]
    else if y == 2021
        [timestamp("Asia/Seoul", 2021, 2, 12, 0, 0), array.from(30,29,30,29,30,29,30,29,30,29,30,30)]
    else if y == 2022
        [timestamp("Asia/Seoul", 2022, 2, 1, 0, 0), array.from(29,30,29,30,29,30,29,30,30,29,30,29)]
    else if y == 2023
        [timestamp("Asia/Seoul", 2023, 1, 22, 0, 0), array.from(30,29,30,29,30,29,30,30,29,30,29,30)]
    else if y == 2024
        [timestamp("Asia/Seoul", 2024, 2, 10, 0, 0), array.from(30,29,30,29,30,29,30,29,30,29,30,30,29)]
    else if y == 2025
        [timestamp("Asia/Seoul", 2025, 1, 29, 0, 0), array.from(29,30,29,30,29,30,29,30,30,29,30,29)]
    else if y == 2026
        [timestamp("Asia/Seoul", 2026, 2, 17, 0, 0), array.from(30,29,30,29,30,29,30,30,29,30,29,30)]
    else
        [na, array.new_int()]

// Function to create cumulative monthly days array
f_get_lunar_md(days_arr) =>
    arr = array.new_int()
    sum = 0
    for i = 0 to array.size(days_arr) - 1
        sum += array.get(days_arr, i)
        array.push(arr, sum)
    arr

// Get lunar start date and monthly lengths
[ts_start, lunar_lengths] = f_get_lunar_data()
valid = not na(ts_start)
days_since = valid ? math.floor((time - ts_start) / 86400000) : na
cumulative = valid ? f_get_lunar_md(lunar_lengths) : na

// Declare lunar month, day, last day variables
var int lunar_month = na
var int lunar_day = na
var int lunar_last_day = na

// Calculate lunar date
if valid and not na(days_since) and days_since >= 0
    lunar_month := na
    lunar_day := na
    lunar_last_day := na
    for i = 0 to array.size(cumulative) - 1
        cum = array.get(cumulative, i)
        prev = i == 0 ? 0 : array.get(cumulative, i - 1)
        if days_since < cum
            lunar_month := i + 1
            lunar_day := days_since - prev + 1
            lunar_last_day := array.get(lunar_lengths, i)
            break
else
    lunar_month := na
    lunar_day := na
    lunar_last_day := na

// Buy condition: Lunar day 5 and no current position
buy_condition = not na(lunar_day) and lunar_day == 5 and strategy.position_size == 0

// Sell condition: Lunar day 26 and holding position
sell_condition = not na(lunar_day) and lunar_day == 26 and strategy.position_size > 0

// Buy/sell price adjusted for slippage and fee
price_buy = close + slippage
price_buy_with_fee = price_buy * (1 + feePercent * 0.01)

price_sell = close - slippage
price_sell_with_fee = price_sell * (1 - feePercent * 0.01)

// Calculate buy quantity using 100% of equity
qty = math.floor(strategy.equity / price_buy_with_fee)

// Buy order (limit)
if buy_condition and qty > 0
    strategy.entry("Lunar Buy", strategy.long, qty, limit=price_buy)

// Sell order (close all)
if sell_condition and strategy.position_size > 0
    strategy.close("Lunar Buy")

// True range variable (for label position adjustment)
tr = ta.tr(true)

// Date format creation
yr = year(time)
mo = month(time)
dy = dayofmonth(time)
mo_str = mo < 10 ? "0" + str.tostring(mo) : str.tostring(mo)
dy_str = dy < 10 ? "0" + str.tostring(dy) : str.tostring(dy)
solar_str = str.tostring(yr) + "-" + mo_str + "-" + dy_str

// Display solar and lunar date and position label (on bar close)
if barstate.islastconfirmedhistory and not na(lunar_day)
    label.new(bar_index, high - tr * 6,  "Solar: " + solar_str + "\nLunar: " + str.tostring(lunar_month) + "-" + str.tostring(lunar_day) ,
      style=label.style_label_up, size=size.normal, color=color.new(color.teal, 50), textcolor=color.white)

// Display "15" label at bottom on lunar day 15 (lowest of last 50 bars - 1 true range)
if not na(lunar_day) and lunar_day == 15
    low_offset = ta.lowest(low, 50) - tr
    label.new(bar_index, low_offset, "15", style=label.style_label_down, color=color.orange, textcolor=color.white, size=size.normal)