Stratégie de trading Bitcoin basée sur la phase lunaire

Auteur:ChaoZhang est là., Date: 2024-01-15 à 12h01:06
Les étiquettes:

img

Résumé

Cette stratégie utilise le cycle de phase lunaire comme signaux de trading, combiné avec RSI, MACD, OBV et d'autres indicateurs pour identifier les opportunités de trading pour les crypto-monnaies comme le Bitcoin.

La logique de la stratégie

La logique de base de cette stratégie est de déterminer les opportunités longues ou courtes en fonction des différentes étapes du cycle de phase lunaire.

La longueur du cycle de la phase lunaire = 29,5305882 jours Étant donné un temps de pleine lune connu, le nombre de jours de cette pleine lune à l'heure actuelle peut être calculé
Âge lunaire = jours depuis la pleine lune connue % Longueur du cycle de la phase lunaire Valeur de la phase lunaire = (1 + cos(Âge lunaire / longueur du cycle de la phase lunaire * 2 * π)) / 2

La valeur de la phase lunaire fluctue entre 0 et 1. Plus la valeur est élevée, c'est-à-dire plus près de la pleine lune, tandis que la valeur inférieure signifie plus près de la nouvelle lune.

La stratégie juge les opportunités longues ou courtes en fonction des seuils de phase lunaire. Si la valeur de phase lunaire est supérieure au seuil long (défault 0.51), il y a une chance d'aller long. Si la valeur de phase lunaire est inférieure au seuil court (défault 0.49), il y a une chance d'aller court.

En outre, la stratégie combine également des indicateurs tels que le volume des transactions, le RSI et le MACD pour éviter les signaux de trading dans des conditions défavorables.

Analyse des avantages

Les principaux avantages de cette stratégie:

  1. Utilisez le signal de négociation unique de la phase lunaire, éviter la manipulation du marché dans une certaine mesure
  2. Combiner les indicateurs pour déterminer les conditions du marché, éviter les échanges dans des conditions défavorables
  3. Utiliser l'ATR pour calculer une taille de position raisonnable, contrôler efficacement la perte maximale par transaction
  4. Mettre en place un arrêt de perte pour éviter des pertes énormes
  5. Jugez la direction du flux de fonds avec OBV, évitez de négocier contre la tendance
  6. Mettre en place un stop-loss pour verrouiller les bénéfices

En résumé, cette stratégie tire pleinement parti des avantages uniques des phases lunaires et combine plusieurs indicateurs techniques pour identifier les opportunités de négociation à forte probabilité, tout en exploitant des mécanismes de contrôle des risques pour définir efficacement les risques de négociation.

Analyse des risques

Les principaux risques de cette stratégie sont les suivants:

  1. La phase lunaire et les mouvements du marché peuvent parfois échouer
  2. Une stratégie de stop loss de retrait inappropriée peut mettre fin prématurément à la stratégie
  3. Probabilité de faux signaux du MACD, du RSI
  4. Un arrêt-perte de suivi inapproprié peut entraîner une perte de profits plus élevés pour la stratégie

Pour contrôler ces risques, les mesures suivantes peuvent être prises:

  1. Ajuster les seuils de phase lunaire pour assurer des signaux lunaires valides
  2. Testez plusieurs paramètres d'arrêt des pertes de prélèvement et sélectionnez l'optimal
  3. Les paramètres MACD et RSI sont affinés pour générer efficacement des signaux
  4. Tester plusieurs ensembles de paramètres de stop loss pour obtenir des profits maximaux

Grâce à l'optimisation des paramètres et à la combinaison d'indicateurs, les risques commerciaux peuvent être atténués dans une large mesure.

Directions d'optimisation

Il reste encore des possibilités d'optimisation de cette stratégie:

  1. Testez différents paramètres lunaires pour trouver des seuils optimaux
  2. Essayez de combiner plus d'indicateurs pour le trading ensemble et améliorez l'efficacité
  3. Optimiser les paramètres des mécanismes de stop loss pour équilibrer les risques et les rendements
  4. Élargir à plus d'actifs commerciaux pour tester la capacité de généralisation

Conclusion

Cette stratégie réalise un trading Bitcoin efficace grâce à des signaux de trading de phase lunaire uniques, combinés à des indicateurs techniques traditionnels. Par rapport aux stratégies à indicateur unique, cette stratégie peut mieux se protéger contre les risques de manipulation du marché et présente des avantages uniques. En tirant parti du stop loss pour prévenir les risques et l'optimisation des paramètres, des rendements stables et bons peuvent être obtenus de manière stable. Il y a encore beaucoup de place pour améliorer cette stratégie et elle a des perspectives d'application prometteuses.


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


Plus de