Estratégia de negociação bidirecional baseada nas fases da lua


Data de criação: 2024-02-21 16:15:25 última modificação: 2024-02-21 16:15:25
cópia: 1 Cliques: 816
1
focar em
1617
Seguidores

Estratégia de negociação bidirecional baseada nas fases da lua

Visão geral

Esta estratégia é baseada em mudanças nas fases lunares, fazendo mais no momento da lua nova e mais no momento da lua cheia, para realizar transações bidirecionais.

Princípio da estratégia

A estratégia usa funções personalizadas para calcular a fase do mês e pode calcular com precisão a idade da fase do mês de acordo com a data. Menos de 15 anos de idade é um novo mês e mais de 15 anos e menos de 30 anos é um mês cheio. A estratégia julga o mês de acordo com a fase do mês.

Os usuários podem escolher entre fazer um novo mês com mais, um mês cheio com vazio ou um novo mês vazio, um mês cheio com mais. As estratégias usam a variável de Boole para rastrear se há posições atualmente em posse. Quando não há posições antes do sinal aparecer, abra uma nova posição e, quando o sinal inverter, elimine a posição atual.

Análise de vantagens

  1. A utilização da periodicidade das fases lunares para capturar tendências de linha longa
  2. Cores personalizáveis, padrões de preenchimento, etc.
  3. Opção de estratégia de negociação bidirecional
  4. Marcações de abertura de liquidação, operação clara
  5. Tempo de início do feedback personalizado, estratégias de otimização

Análise de Riscos

  1. O ciclo lunar é longo e não consegue captar tendências de linhas curtas
  2. Não é possível limitar os prejuízos, podendo causar grandes perdas
  3. Ciclo fixo, fácil formação de padrões

A solução para o risco:

  1. Combinação com outros indicadores para transações em vários níveis
  2. Aumentar o mecanismo de suspensão de perdas
  3. Optimizar a gestão de posições e reduzir o impacto de perdas individuais

Direção de otimização

Esta estratégia pode ser melhorada em:

  1. Combinação de mais indicadores de ciclo para formar filtros de sinais de negociação e aumentar a estabilidade da estratégia
  2. Adição de módulos de gerenciamento de posições, otimização do tamanho das posições e redução do impacto de perdas individuais
  3. Aumentar o módulo de stop loss para evitar a expansão dos prejuízos
  4. Optimizar as condições de abertura e de negociação, reduzir o período de perda e aumentar a taxa de ganho

Resumir

Esta estratégia utiliza a lei periódica das fases lunares para implementar uma estratégia de negociação bidirecional baseada na lua nova e na lua cheia. A estratégia apresenta uma visão clara e personalizável, adequada para capturar tendências de linha longa.

Código-fonte da estratégia
/*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