Эта стратегия использует лунный фазовый цикл в качестве торговых сигналов в сочетании с RSI, MACD, OBV и другими индикаторами для выявления торговых возможностей для криптовалют, таких как Биткойн.
Основная логика этой стратегии заключается в определении длинных или коротких возможностей на основе различных стадий лунного фазового цикла.
Продолжительность лунного цикла = 29,5305882 дня
Учитывая известное время полнолуния, количество дней от этого полнолуния до текущего времени можно рассчитать
Лунный возраст = Дни с момента известного полнолуния % Длина лунного фазового цикла
Значение лунной фазы = (1 + cos ((Лунный возраст / длина лунного цикла фазы * 2 * π)) / 2
Значение лунной фазы колеблется от 0 до 1. Чем больше значение, тем ближе к полнолунию, в то время как меньшее значение означает ближе к новолунию.
Стратегия оценивает длинные или короткие возможности на основе порогов лунной фазы. Если значение лунной фазы больше длинного порога (по умолчанию 0,51), есть шанс пойти длинным. Если значение лунной фазы меньше короткого порога (по умолчанию 0,49), есть шанс пойти коротким.
Кроме того, стратегия также сочетает в себе такие индикаторы, как объем торговли, RSI и MACD, чтобы избежать торговых сигналов во время неблагоприятных условий.
Основные преимущества этой стратегии:
В целом, эта стратегия в полной мере использует уникальные преимущества лунных фаз и сочетает в себе множество технических индикаторов для выявления высоковероятных торговых шансов, а также использует механизмы контроля рисков для эффективного определения торговых рисков.
К основным рискам этой стратегии относятся:
Для борьбы с этими рисками могут быть приняты следующие меры:
Благодаря оптимизации параметров и комбинированным показателям торговые риски могут быть значительно смягчены.
Эта стратегия еще может быть оптимизирована:
Эта стратегия реализует эффективную торговлю биткойнами с помощью уникальных торговых сигналов лунной фазы, в сочетании с основными техническими индикаторами. По сравнению с стратегиями с одним индикатором, эта стратегия может лучше защищаться от рисков манипулирования рынком и имеет уникальные преимущества. Используя стоп-лосс для предотвращения рисков и оптимизации параметров, можно стабильно получать устойчивую и хорошую отдачу.
/*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")