Diese Strategie verwendet den Mondphasenzyklus als Handelssignale, kombiniert mit RSI, MACD, OBV und anderen Indikatoren, um Handelschancen für Kryptowährungen wie Bitcoin zu identifizieren. Der Hauptvorteil dieser Strategie ist die Nutzung der Mondphase, eines externen Faktors, als Handelsauslöser, der sich von den meisten Strategien unterscheidet, die sich ausschließlich auf technische Indikatoren stützen, so dass Marktmanipulationen bis zu einem gewissen Grad vermieden werden können.
Die Kernlogik dieser Strategie besteht darin, nach verschiedenen Phasen des Mondzyklus lange oder kurze Chancen zu bestimmen.
Die Länge des Mondzyklus = 29,5305882 Tage
Angesichts einer bekannten Vollmondzeit kann die Anzahl der Tage von diesem Vollmond bis zur aktuellen Zeit berechnet werden
Mondalter = Tage seit bekannter Vollmond % Länge des Mondphasenzyklus
Lunarphasenwert = (1 + cos(Lunaralter / Lunarphasenzykluslänge * 2 * π)) / 2
Der Mondphasenwert schwankt zwischen 0 und 1. Je größer der Wert, desto näher ist der Vollmond, und je kleiner der Wert, desto näher ist der Neumond.
Die Strategie beurteilt lange oder kurze Chancen anhand der Schwellenwerte der Mondphase. Wenn der Mondphasenwert größer als die lange Schwelle (Standard 0.51) ist, besteht die Chance, lang zu gehen. Wenn der Mondphasenwert kleiner als die kurze Schwelle (Standard 0.49) ist, besteht die Chance, kurz zu gehen.
Darüber hinaus kombiniert die Strategie auch Indikatoren wie Handelsvolumen, RSI und MACD, um Handelssignale unter ungünstigen Bedingungen zu vermeiden.
Die wichtigsten Vorteile dieser Strategie sind:
Zusammenfassend lässt sich sagen, dass diese Strategie die einzigartigen Vorteile der Mondphasen voll ausnutzt und mehrere technische Indikatoren kombiniert, um Handelschancen mit hoher Wahrscheinlichkeit zu identifizieren, während gleichzeitig Risikokontrollmechanismen genutzt werden, um Handelsrisiken effektiv zu definieren.
Zu den wichtigsten Risiken dieser Strategie gehören:
Zur Kontrolle dieser Risiken können folgende Maßnahmen ergriffen werden:
Durch die Optimierung von Parametern und die Kombination von Indikatoren können Handelsrisiken weitgehend gemildert werden.
Diese Strategie kann noch weiter optimiert werden:
Diese Strategie realisiert einen effizienten Bitcoin-Handel durch einzigartige Handelssignale der Mondphase, kombiniert mit Mainstream-technischen Indikatoren. Im Vergleich zu Einzelindikatorstrategien kann diese Strategie besser gegen Marktmanipulationsrisiken abgesichert werden und hat einzigartige Vorteile. Durch die Nutzung von Stop Loss zur Verhinderung von Risiken und Parameteroptimierung können stabile und gute Renditen stabil erzielt werden. Es gibt noch viel Raum für die Verbesserung dieser Strategie und sie hat vielversprechende Anwendungsperspektiven.
/*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")