Stratégie de trading bidirectionnelle basée sur les phases de la lune


Date de création: 2024-02-21 16:15:25 Dernière modification: 2024-02-21 16:15:25
Copier: 1 Nombre de clics: 816
1
Suivre
1617
Abonnés

Stratégie de trading bidirectionnelle basée sur les phases de la lune

Aperçu

Cette stratégie est basée sur la variation des phases de la lune, en faisant plus à la nouvelle lune et moins à la pleine lune, pour réaliser des transactions bidirectionnelles.

Principe de stratégie

La stratégie utilise une fonction personnalisée pour calculer les phases de la lune, en fonction de la date, l’âge des phases de la lune peut être calculé avec précision. L’âge de moins de 15 ans est un nouveau mois, plus de 15 ans et moins de 30 ans sont des pleins.

L’utilisateur peut choisir entre deux stratégies. La stratégie utilise la variable Boole pour suivre si une position est actuellement détenue ou non. Une nouvelle position est ouverte lorsqu’il n’y a pas de position avant l’apparition du signal et la position actuelle est compensée lorsque le signal est inversé.

Analyse des avantages

  1. La cyclicité des phases de la lune pour capturer les tendances à long terme
  2. Affichage de couleurs personnalisables, de polices de remplissage, etc.
  3. Option de stratégie de négociation bidirectionnelle
  4. Affichage des marqueurs de la position ouverte et des opérations claires
  5. Début de la rétroaction personnalisable, stratégies d’optimisation

Analyse des risques

  1. Les phases de la lune sont longues et ne permettent pas de saisir les courts courants.
  2. Les pertes potentielles ne peuvent être limitées et peuvent être considérables.
  3. Cycles fixes, faciles à modéliser

Comment gérer les risques:

  1. Combiné à d’autres indicateurs, pour une transaction à plusieurs niveaux
  2. Augmentation du mécanisme de prévention des pertes
  3. Optimiser la gestion des positions et réduire l’impact des pertes individuelles

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Combiner plus d’indicateurs cycliques pour former un filtre de signal de transaction et améliorer la stabilité de la stratégie
  2. Ajout d’un module de gestion des positions, optimisation de la taille des positions et réduction de l’impact des pertes individuelles
  3. Ajout d’un module de stop-loss pour éviter l’expansion des pertes
  4. Optimiser les conditions d’ouverture et de clôture des positions, réduire les pertes et augmenter le taux de victoire

Résumer

Cette stratégie utilise la loi cyclique des phases de la lune pour réaliser une stratégie de trading bidirectionnelle basée sur la nouvelle lune et la pleine lune. La stratégie affiche une clarté et une personnalisation élevées, adaptées à la capture de la tendance de la ligne longue. Cependant, comme il est impossible de limiter les pertes et le risque est élevé, il est recommandé de combiner l’utilisation d’autres indicateurs de courte période et d’ajouter des positions et des modules de gestion des pertes pour optimiser davantage.

Code source de la stratégie
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// ---------------------------© paaax----------------------------
// ---------------- Author1: Pascal Simon (paaax) ----------------
// -------------------- www.pascal-simon.de ---------------------
// ---------------- www.tradingview.com/u/paaax/-----------------
// Source: https://gist.github.com/L-A/3497902#file-moonobject-js

// -------------------------© astropark--------------------------
// --------------- Author2: Astropark (astropark) ---------------
// -------------- https://bit.ly/astroparktrading ---------------
// -------------- www.tradingview.com/u/astropark/---------------


// @version=4
strategy(title="[astropark] Moon Phases [strategy]", overlay=true, pyramiding = 10, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 100000, currency = currency.USD, commission_value = 0.1)

// INPUT    --- {

newMoonColor = input(color.black, "New Moon Color")
fullMoonColor = input(color.white, "Full Moon Color")

fillBackground = input(true, "Fill Background?")
newMoonBackgroundColor = input(#fffff0aa, "New Moon Background Color")
fullMoonBackgroundColor = input(#aaaaaaaa, "Full Moon Background Color")

//} --- INPUT

// FUNCTION --- {

normalize(_v) =>
    x = _v
    x := x - floor(x)
    if x < 0
        x := x + 1
    x

calcPhase(_year, _month, _day) =>

    int y = na
    int m = na
    float k1 = na 
    float k2 = na 
    float k3 = na
    float jd = na
    float ip = na

    y := _year - floor((12 - _month) / 10)       
    m := _month + 9
    if m >= 12 
        m := m - 12
    
    k1 := floor(365.25 * (y + 4712))
    k2 := floor(30.6 * m + 0.5)
    k3 := floor(floor((y / 100) + 49) * 0.75) - 38
    
    jd := k1 + k2 + _day + 59
    if jd > 2299160
        jd := jd - k3
    
    ip := normalize((jd - 2451550.1) / 29.530588853)
    age = ip * 29.53

//} --- FUNCTION

// INIT     --- {

age = calcPhase(year, month, dayofmonth)
moon = 
     floor(age)[1] > floor(age) ? 1 : 
     floor(age)[1] < 15 and floor(age) >= 15 ? -1 : na

//} --- INIT

// PLOT     --- {

plotshape(
     moon==1, 
     "Full Moon", 
     shape.circle, 
     location.top, 
     color.new(newMoonColor, 20), 
     size=size.normal
     )   

plotshape(
     moon==-1, 
     "New Moon", 
     shape.circle, 
     location.bottom, 
     color.new(fullMoonColor, 20), 
     size=size.normal
     )   

var color col = na
if moon == 1 and fillBackground
    col := fullMoonBackgroundColor
if moon == -1 and fillBackground
    col := newMoonBackgroundColor
bgcolor(col, title="Moon Phase", transp=10)

//} --- PLOT


// STRATEGY     --- {

strategy = input("buy on new moon, sell on full moon", options=["buy on new moon, sell on full moon","sell on new moon, buy on full moon"])
longCond = strategy == "buy on new moon, sell on full moon" ? moon == -1 : moon == 1
shortCond = strategy == "buy on new moon, sell on full moon" ? moon == 1 : moon == -1

weAreInLongTrade = false
weAreInShortTrade = false
weAreInLongTrade := (longCond or weAreInLongTrade[1]) and shortCond == false
weAreInShortTrade := (shortCond or weAreInShortTrade[1]) and longCond == false
buySignal = longCond and weAreInLongTrade[1] == false
sellSignal = shortCond and weAreInShortTrade[1] == false

showBuySellSignals = input(defval=true, title = "Show Buy/Sell Signals")
longEnabled = input(true, title="Long enabled")
shortEnabled = input(true, title="Short enabled")

analysisStartYear = input(2017, "Backtesting From Year", minval=1980)
analysisStartMonth = input(1, "And Month", minval=1, maxval=12)
analysisStartDay = input(1, "And Day", minval=1, maxval=31)
analysisStartHour = input(0, "And Hour", minval=0, maxval=23)
analysisStartMinute = input(0, "And Minute", minval=0, maxval=59)
analyzeFromTimestamp = timestamp(analysisStartYear, analysisStartMonth, analysisStartDay, analysisStartHour, analysisStartMinute)

plotshape(showBuySellSignals and buySignal, title="Buy Label", text="Buy", location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
plotshape(showBuySellSignals and sellSignal, title="Sell Label", text="Sell", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)

strategy.entry("long", strategy.long, when = time > analyzeFromTimestamp and buySignal and longEnabled)
strategy.entry("short", strategy.short, when = time > analyzeFromTimestamp and sellSignal and shortEnabled)
strategy.close("long", when = sellSignal)
strategy.close("short", when = buySignal)

//} --- STRATEGY