Estrategia de trading bidireccional basada en las fases lunares


Fecha de creación: 2024-02-21 16:15:25 Última modificación: 2024-02-21 16:15:25
Copiar: 1 Número de Visitas: 816
1
Seguir
1617
Seguidores

Estrategia de trading bidireccional basada en las fases lunares

Descripción general

Esta estrategia se basa en los cambios de las fases lunares, haciendo más en la luna nueva y más en la luna llena, para lograr un comercio bidireccional.

Principio de estrategia

La estrategia utiliza funciones personalizadas para calcular la fase lunar y puede calcular con precisión la edad de la fase lunar según la fecha. La edad menor de 15 años es la luna nueva, la edad mayor de 15 años y la menor de 30 años es la luna llena. La estrategia determina la fase lunar haciendo más señales de descuento, haciendo más posiciones en la luna nueva, abriendo posiciones en la luna llena, y en la posición cerrada, por el contrario, con la luna llena más posiciones, la luna nueva sin posición.

El usuario puede elegir entre hacer más en la luna nueva, hacer vacío en la luna llena o hacer vacío en la luna nueva, hacer más en la luna llena. La estrategia utiliza la variable de Bull para rastrear si actualmente tiene una posición.

Análisis de las ventajas

  1. El uso de la periodicidad de las fases lunares para capturar las tendencias de línea larga
  2. Display de políticas como colores personalizados y relleno
  3. Se puede elegir una estrategia de transacción bidireccional
  4. Muestra el marcador de apertura de posición abierta, la operación es clara
  5. Tiempo de inicio de retroalimentación personalizado y estrategias de optimización

Análisis de riesgos

  1. El ciclo lunar es largo y no capta las tendencias de línea corta
  2. No se pueden limitar las pérdidas, lo que puede causar grandes pérdidas
  3. Ciclo fijo, fácil de formar patrones

La solución al riesgo:

  1. Combinación de otros indicadores para lograr transacciones multinivel
  2. Aumentar el mecanismo de suspensión de pérdidas
  3. Optimización de la gestión de posiciones y reducción del impacto de las pérdidas individuales

Dirección de optimización

Esta estrategia puede ser optimizada en los siguientes aspectos:

  1. Combinación de más indicadores de ciclo para formar filtros de señales de negociación y mejorar la estabilidad de la estrategia
  2. Aumentar el módulo de gestión de posiciones, optimizar el tamaño de las posiciones y reducir el impacto de las pérdidas individuales
  3. Aumentar el módulo de stop loss para evitar la expansión de las pérdidas
  4. Optimización de las condiciones de apertura y negociación, reducción de pérdidas y mejora de la ganancia

Resumir

Esta estrategia utiliza la regla periódica de las fases lunares para implementar una estrategia de negociación bidireccional basada en la luna nueva y la luna llena. La estrategia muestra una claridad y una gran personalización, adecuada para capturar tendencias de línea larga.

Código Fuente de la Estrategia
/*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