Estrategia de negociación de Bitcoin basada en la fase lunar

El autor:¿ Qué pasa?, Fecha: 2024-01-15 12:31:06
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el ciclo de fase lunar como señales de trading, combinadas con RSI, MACD, OBV y otros indicadores para identificar oportunidades de trading para criptomonedas como Bitcoin.

Estrategia lógica

La lógica central de esta estrategia es determinar oportunidades largas o cortas basadas en diferentes etapas del ciclo de la fase lunar.

La duración del ciclo de la fase lunar = 29,5305882 días Dado un tiempo de luna llena conocido, el número de días desde esa luna llena hasta el tiempo actual se puede calcular
Edad lunar = Días desde la luna llena conocida % Duración del ciclo de fase lunar Valor de la fase lunar = (1 + cos(edad lunar / longitud del ciclo de la fase lunar * 2 * π)) / 2

El valor de la fase lunar fluctúa entre 0 y 1. Cuanto mayor sea el valor significa más cerca de la luna llena, mientras que el valor más pequeño significa más cerca de la luna nueva.

La estrategia juzga las oportunidades largas o cortas en función de los umbrales de la fase lunar. Si el valor de la fase lunar es mayor que el umbral largo (por defecto 0.51), hay posibilidades de ir largo. Si el valor de la fase lunar es menor que el umbral corto (por defecto 0.49), hay posibilidades de ir corto.

Además, la estrategia también combina indicadores como el volumen de negociación, el RSI y el MACD para evitar señales de negociación durante condiciones desfavorables.

Análisis de ventajas

Las principales ventajas de esta estrategia:

  1. Utilice señales únicas de la fase lunar, evitar la manipulación del mercado hasta cierto punto
  2. Combinar indicadores para determinar las condiciones del mercado, evitar el comercio en entornos desfavorables
  3. Utilice ATR para calcular el tamaño razonable de la posición, controlar eficazmente la pérdida máxima por operación
  4. Establezca el stop loss para evitar pérdidas enormes
  5. Juzgar la dirección del flujo de fondos con OBV, evitar el comercio contra la tendencia
  6. Establecer el stop loss para bloquear las ganancias

En resumen, esta estrategia hace pleno uso de las ventajas únicas de las fases lunares y combina múltiples indicadores técnicos para identificar oportunidades comerciales de alta probabilidad, al tiempo que aprovecha los mecanismos de control de riesgos para definir eficazmente los riesgos comerciales.

Análisis de riesgos

Los principales riesgos de esta estrategia incluyen:

  1. La fase lunar y los movimientos del mercado pueden fallar ocasionalmente
  2. La estrategia puede interrumpirse prematuramente si se realiza un stop loss de extracción incorrecto.
  3. Probabilidad de señales falsas del MACD, RSI
  4. El stop loss de seguimiento incorrecto puede hacer que la estrategia pierda ganancias más grandes

Para controlar estos riesgos, pueden adoptarse las siguientes medidas:

  1. Ajustar los umbrales de fase lunar para garantizar señales lunares válidas
  2. Prueba varios parámetros de stop loss de descenso y selecciona el óptimo
  3. Ajuste fino de los parámetros MACD y RSI para generar señales eficientemente
  4. Prueba de varios conjuntos de parámetros de stop loss para obtener ganancias máximas

A través de la optimización de parámetros e indicadores combinados, los riesgos comerciales pueden mitigarse en gran medida.

Direcciones de optimización

Todavía hay margen para una mayor optimización de esta estrategia:

  1. Prueba diferentes parámetros lunares para encontrar umbrales óptimos
  2. Intenta combinar más indicadores para el comercio conjunto y mejora la eficiencia
  3. Optimizar los parámetros de los mecanismos de stop loss para equilibrar los riesgos y los rendimientos
  4. Expandirse a más activos comerciales para probar la capacidad de generalización

Conclusión

Esta estrategia realiza el comercio eficiente de Bitcoin a través de señales únicas de comercio de la fase lunar, combinadas con indicadores técnicos convencionales. En comparación con las estrategias de indicadores únicos, esta estrategia puede protegerse mejor contra los riesgos de manipulación del mercado y tiene ventajas únicas. Al aprovechar el stop loss para prevenir riesgos y la optimización de parámetros, se pueden obtener rendimientos constantes y buenos de manera estable. Todavía hay mucho espacio para mejorar esta estrategia y tiene perspectivas de aplicación prometedoras.


/*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")


Más.