리소스 로딩... 로딩...

달 위기 기반 비트코인 거래 전략

저자:차오장, 날짜: 2024-01-15 12:31:06
태그:

img

전반적인 설명

이 전략은 달의 위기 주기를 거래 신호로 사용하고 RSI, MACD, OBV 및 기타 지표와 결합하여 비트코인과 같은 암호화폐의 거래 기회를 식별합니다. 이 전략의 주요 장점은 외적인 요소인 달의 위기를 거래 트리거로 활용하는 것입니다. 이는 기술 지표에만 의존하는 대부분의 전략과는 다릅니다. 따라서 어느 정도 시장 조작을 피할 수 있습니다.

전략 논리

이 전략의 핵심 논리는 달 위기 주기의 다른 단계에 따라 긴 또는 짧은 기회를 결정하는 것입니다. 달 위기는 다음과 같이 계산됩니다.

달 위상 주기의 길이는 = 29.5305882 일 정월 시간 을 알면 그 정월 부터 현재 시간 까지의 날 수 를 계산 할 수 있다
달 연령 = 알려진 보름달 이후의 날 % 달 위상 주기의 길이가 달 위상 값 = (1 + cos ((달 연령 / 달 위상 주기의 길이가 * 2 * π)) / 2

달의 위상 값은 0에서 1 사이로 변동합니다. 값이 클수록 보름달에 더 가깝다는 것을 의미하며, 값이 작으면 신달에 더 가깝다는 것을 의미합니다.

이 전략은 달 위상 임계값에 따라 긴 또는 짧은 기회를 판단합니다. 달 위상 값이 긴 임계값 (0.51 기본값) 보다 크다면, 길게 갈 가능성이 있습니다. 달 위상 값이 짧은 임계값 (0.49 기본값) 보다 작다면, 짧게 갈 가능성이 있습니다.

또한, 전략은 거래량, RSI 및 MACD와 같은 지표를 결합하여 불리한 조건에서 거래 신호를 피합니다. 거래량이 급증하고 RSI 및 MACD 신호가 일치 할 때만 포지션을 개척합니다.

이점 분석

이 전략의 주요 장점:

  1. 독특한 달 위상 거래 신호를 활용하고 어느 정도 시장 조작을 피하십시오.
  2. 시장 상태를 결정하기 위해 지표를 결합하고 불리한 환경에서 거래를 피하십시오.
  3. ATR을 사용하여 합리적인 포지션 크기를 계산하고 거래당 최대 손실을 효과적으로 제어합니다.
  4. 큰 손실을 방지하기 위해 마감 중지 손실을 설정
  5. OBV와 함께 기금 흐름 방향을 판단, 추세에 반대하는 거래를 피합니다
  6. 수익을 차단하기 위해 후속 스톱 손실을 설정

요약하자면 이 전략은 달 위기의 특유의 장점을 최대한 활용하고, 높은 확률의 거래 기회를 식별하기 위해 여러 기술적 지표를 결합하며, 거래 위험을 효과적으로 정의하기 위해 위험 통제 메커니즘을 활용합니다.

위험 분석

이 전략의 주요 위험은 다음과 같습니다.

  1. 달 위기 및 시장 움직임은 때때로 실패 할 수 있습니다.
  2. 부적절한 마감 스톱 손실은 전략을 조기 중단 할 수 있습니다.
  3. MACD, RSI에서 잘못된 신호의 확률
  4. 부적절한 후속 스톱 손실은 전략이 더 큰 이익을 놓칠 수 있습니다.

이러한 위험을 통제하기 위해 다음과 같은 조치를 취할 수 있습니다.

  1. 유효한 달 신호를 보장하기 위해 달 위상 임계값을 조정합니다.
  2. 여러 마감 중지 손실 매개 변수를 테스트하고 최적을 선택
  3. 신호를 효율적으로 생성하기 위해 MACD 및 RSI 매개 변수를 정렬하십시오.
  4. 최대 수익을 위해 후속 스톱 손실 매개 변수 여러 세트를 테스트

매개 변수 최적화와 조합된 지표로 거래 위험을 크게 완화할 수 있습니다.

최적화 방향

이 전략의 더 많은 최적화를 위한 여지가 있습니다.

  1. 최적의 임계값을 찾기 위해 달의 다른 매개 변수를 테스트합니다.
  2. 앙상블 거래를 위한 더 많은 지표를 결합하여 효율성을 향상시키도록 시도하십시오.
  3. 위험과 수익을 균형을 맞추기 위해 스톱 로스 메커니즘 매개 변수를 최적화
  4. 일반화 능력을 테스트하기 위해 더 많은 거래 자산으로 확장

결론

이 전략은 독특한 달 단계 거래 신호를 통해 효율적인 비트코인 거래를 실현하고, 주류 기술 지표와 결합한다. 단일 지표 전략에 비해, 이 전략은 시장 조작 위험으로부터 더 잘 헤지 할 수 있으며 독특한 이점을 가지고 있다. 위험을 방지하기 위해 스톱 로스를 활용하고 매개 변수 최적화를 통해 안정적이고 좋은 수익을 얻을 수 있다. 이 전략은 여전히 개선할 여지가 많으며 유망한 응용 전망이 있다.


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


더 많은