Estratégia de negociação de Bitcoin baseada na fase lunar

Autora:ChaoZhang, Data: 2024-01-15 12:31:06
Tags:

img

Resumo

Esta estratégia usa o ciclo de fase lunar como sinais de negociação, combinado com RSI, MACD, OBV e outros indicadores para identificar oportunidades de negociação para criptomoedas como Bitcoin.

Estratégia lógica

A lógica central desta estratégia é determinar oportunidades longas ou curtas com base em diferentes estágios do ciclo de fase lunar.

Duração do ciclo de fases lunares = 29,5305882 dias Dada uma hora de lua cheia conhecida, o número de dias a partir dessa lua cheia até a hora atual pode ser calculado
Idade lunar = Dias desde a lua cheia conhecida % Duração do ciclo da fase lunar Valor da fase lunar = (1 + cos(Idade lunar / comprimento do ciclo da fase lunar * 2 * π)) / 2

O valor da fase lunar flutua entre 0 e 1. Quanto maior o valor significa mais perto da lua cheia, enquanto o valor menor significa mais perto da lua nova.

A estratégia julga oportunidades longas ou curtas com base nos limiares da fase lunar. Se o valor da fase lunar for maior que o limiar longo (padrão 0,51), há chance de ir longo. Se o valor da fase lunar for menor que o limiar curto (padrão 0,49), há chance de ir curto.

Além disso, a estratégia também combina indicadores como volume de negociação, RSI e MACD para evitar sinais de negociação durante condições desfavoráveis.

Análise das vantagens

As principais vantagens desta estratégia:

  1. Utilizar sinal de negociação de fase lunar única, evitar a manipulação do mercado até certo ponto
  2. Combinar indicadores para determinar a condição do mercado, evitar negociações em ambientes desfavoráveis
  3. Usar o ATR para calcular o tamanho razoável da posição, controlar eficazmente a perda máxima por transação
  4. Configure o stop loss para evitar perdas enormes
  5. Julgar a direção do fluxo de fundos com OBV, evitar a negociação contra a tendência
  6. Configurar o stop loss para bloquear os lucros

Em resumo, esta estratégia faz pleno uso das vantagens únicas das fases lunares e combina múltiplos indicadores técnicos para identificar oportunidades de negociação de alta probabilidade, ao mesmo tempo que utiliza mecanismos de controlo de risco para definir eficazmente os riscos de negociação.

Análise de riscos

Os principais riscos desta estratégia incluem:

  1. A fase lunar e os movimentos do mercado podem ocasionalmente falhar
  2. A estratégia pode ser interrompida prematuramente por uma interrupção de perdas de retração inadequada
  3. Probabilidade de sinais falsos do MACD, RSI
  4. Stop loss de trailing inadequado pode fazer com que a estratégia perca lucros maiores

Para controlar estes riscos, podem ser tomadas as seguintes medidas:

  1. Ajustar limiares de fase lunar para garantir sinais lunares válidos
  2. Teste múltiplos parâmetros de stop loss de drawdown e selecione o óptimo
  3. Ajuste fino dos parâmetros MACD e RSI para gerar sinais de forma eficiente
  4. Teste múltiplos conjuntos de parâmetros de stop loss para obter lucros máximos

Através da otimização dos parâmetros e da combinação de indicadores, os riscos comerciais podem ser reduzidos em grande medida.

Orientações de otimização

Ainda há espaço para uma melhor otimização desta estratégia:

  1. Teste diferentes parâmetros lunares para encontrar limiares ideais
  2. Tente combinar mais indicadores para a negociação em conjunto e melhorar a eficiência
  3. Otimizar os parâmetros dos mecanismos de stop loss para equilibrar riscos e retornos
  4. Expandir para mais ativos de negociação para testar a capacidade de generalização

Conclusão

Esta estratégia realiza uma negociação eficiente do Bitcoin através de sinais de negociação de fase lunar únicos, combinados com indicadores técnicos convencionais. Em comparação com as estratégias de indicador único, esta estratégia pode proteger melhor contra riscos de manipulação de mercado e tem vantagens únicas. Ao alavancar o stop loss para evitar riscos e otimização de parâmetros, retornos estáveis e bons podem ser obtidos de forma estável. Ainda há muito espaço para melhorar esta estratégia e tem perspectivas de aplicação promissoras.


/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Lunar Phase Strategy by Symphoenix", overlay=true)

// Input parameters
start_year = input(2023, title="Start year")
end_year = input(2023, title="End year")
longPhaseThreshold = input(0.51, title="Long Phase Threshold")
shortPhaseThreshold = input(0.49, title="Short Phase Threshold")
riskPerTrade = input(0.05, title="Risk Per Trade (as a % of Equity)")
stopLossPerc = input(0.01, title="Stop Loss Percentage")
atrLength = input(21, title="ATR Length for Volatility")
trailPerc = input(0.1, title="Trailing Stop Percentage")
maxDrawdownPerc = input(0.1, title="Maximum Drawdown Percentage")
volumeLength = input(7, title="Volume MA Length")

// Constants for lunar phase calculation and ATR
atr = ta.atr(atrLength)
volMA = ta.sma(volume, volumeLength) // Volume moving average

// Improved Lunar Phase Calculation
calculateLunarPhase() =>
    moonCycleLength = 29.5305882
    daysSinceKnownFullMoon = (time - timestamp("2019-12-12T05:12:00")) / (24 * 60 * 60 * 1000)
    lunarAge = daysSinceKnownFullMoon % moonCycleLength
    phase = ((1 + math.cos(lunarAge / moonCycleLength * 2 * math.pi)) / 2)
    phase

lunarPhase = calculateLunarPhase()

// Advanced Volume Analysis
priceChange = ta.change(close)
obv = ta.cum(priceChange > 0 ? volume : priceChange < 0 ? -volume : 0)

// Additional Technical Indicators
rsi = ta.rsi(close, 14)
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)

// Calculate Position Size based on Volatility and Account Equity
calculatePositionSize() =>
    equity = strategy.equity
    riskAmount = equity * riskPerTrade
    positionSize = riskAmount / atr
    if positionSize > 1000000000000
        positionSize := 1000000000000
    positionSize

positionSize = calculatePositionSize()

// Maximum Drawdown Tracking
var float maxPortfolioValue = na
maxPortfolioValue := math.max(maxPortfolioValue, strategy.equity)
drawdown = (maxPortfolioValue - strategy.equity) / maxPortfolioValue

// Check for maximum drawdown
if drawdown > maxDrawdownPerc
    strategy.close_all()
    strategy.cancel_all()

// Volume Analysis
isVolumeConfirmed = volume > volMA

// Date Check for Backtesting Period
isWithinBacktestPeriod = year >= start_year and year <= end_year

// Entry and Exit Conditions
// Adjusted Entry and Exit Conditions
longCondition = lunarPhase > longPhaseThreshold and lunarPhase < 0.999 and isVolumeConfirmed and obv > obv[1] and rsi < 70 and macdLine > signalLine and isWithinBacktestPeriod
shortCondition = lunarPhase < shortPhaseThreshold and lunarPhase > 0.001 and isVolumeConfirmed and obv < obv[1] and rsi > 30 and macdLine < signalLine and isWithinBacktestPeriod

if longCondition
    if strategy.position_size < 0
        strategy.close_all()
    if strategy.position_size < positionSize
        strategy.entry("Long", strategy.long, qty=positionSize)
        strategy.exit("Exit Long", "Long", trail_offset=atr * trailPerc, trail_points=atr)

if shortCondition
    if strategy.position_size > 0
        strategy.close_all()
    if strategy.position_size > -positionSize
        strategy.entry("Short", strategy.short, qty=positionSize)
        strategy.exit("Exit Short", "Short", trail_offset=atr * trailPerc, trail_points=atr)

// Implementing Stop-Loss Logic
longStopLoss = strategy.position_avg_price * (1 - stopLossPerc)
shortStopLoss = strategy.position_avg_price * (1 + stopLossPerc)

if strategy.position_size > 0 and close < longStopLoss
    strategy.close("Long")

if strategy.position_size < 0 and close > shortStopLoss
    strategy.close("Short")


Mais.