Chiến lược này sử dụng chu kỳ pha trăng làm tín hiệu giao dịch, kết hợp với RSI, MACD, OBV và các chỉ số khác để xác định các cơ hội giao dịch cho tiền điện tử như Bitcoin. Ưu điểm chính của chiến lược này là sử dụng pha trăng, một yếu tố bên ngoài, như là kích hoạt giao dịch, khác với hầu hết các chiến lược chỉ dựa vào các chỉ số kỹ thuật, do đó có thể tránh thao túng thị trường ở một mức độ nào đó.
Lý thuyết cốt lõi của chiến lược này là xác định các cơ hội dài hoặc ngắn dựa trên các giai đoạn khác nhau của chu kỳ pha trăng.
Độ dài chu kỳ pha trăng = 29,5305882 ngày
Với thời gian trăng tròn được biết, số ngày từ trăng tròn đó đến thời gian hiện tại có thể được tính toán
Tuổi trăng = Ngày kể từ khi trăng tròn được biết đến % Độ dài chu kỳ pha trăng
Giá trị pha trăng = (1 + cos(Tuổi trăng / Độ dài chu kỳ pha trăng * 2 * π)) / 2
Giá trị pha trăng dao động từ 0 đến 1. Giá trị lớn hơn có nghĩa là gần trăng tròn hơn, trong khi giá trị nhỏ hơn có nghĩa là gần trăng mới hơn.
Chiến lược đánh giá các cơ hội dài hoặc ngắn dựa trên ngưỡng pha mặt trăng. Nếu giá trị pha mặt trăng lớn hơn ngưỡng dài (bên định 0.51), có cơ hội đi dài. Nếu giá trị pha mặt trăng thấp hơn ngưỡng ngắn (bên định 0.49), có cơ hội đi ngắn.
Ngoài ra, chiến lược cũng kết hợp các chỉ số như khối lượng giao dịch, RSI và MACD để tránh tín hiệu giao dịch trong điều kiện không thuận lợi.
Những lợi thế chính của chiến lược này:
Tóm lại, chiến lược này tận dụng đầy đủ những lợi thế độc đáo của các giai đoạn mặt trăng và kết hợp nhiều chỉ số kỹ thuật để xác định cơ hội giao dịch có xác suất cao, đồng thời tận dụng các cơ chế kiểm soát rủi ro để xác định hiệu quả rủi ro giao dịch.
Những rủi ro chính của chiến lược này bao gồm:
Để kiểm soát những rủi ro này, các biện pháp sau đây có thể được thực hiện:
Thông qua tối ưu hóa tham số và kết hợp các chỉ số, rủi ro giao dịch có thể được giảm thiểu ở mức độ lớn.
Vẫn còn chỗ để tối ưu hóa thêm chiến lược này:
Chiến lược này thực hiện giao dịch Bitcoin hiệu quả thông qua các tín hiệu giao dịch pha mặt trăng độc đáo, kết hợp với các chỉ số kỹ thuật chính thống. So với các chiến lược chỉ số duy nhất, chiến lược này có thể phòng ngừa tốt hơn các rủi ro thao túng thị trường và có những lợi thế độc đáo. Bằng cách tận dụng stop loss để ngăn ngừa rủi ro và tối ưu hóa tham số, lợi nhuận ổn định và tốt có thể được thu được ổn định.
/*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")