Двунаправленная торговая стратегия, основанная на фазах Луны


Дата создания: 2024-02-21 16:15:25 Последнее изменение: 2024-02-21 16:15:25
Копировать: 1 Количество просмотров: 816
1
Подписаться
1617
Подписчики

Двунаправленная торговая стратегия, основанная на фазах Луны

Обзор

Эта стратегия основана на изменении фаз луны, в новолуние делается больше, в полнолуние делается меньше, чтобы осуществить двустороннюю торговлю.

Стратегический принцип

Эта стратегия использует пользовательскую функцию, которая рассчитывает фазы месяца, и может точно рассчитать возраст фазы месяца в зависимости от даты. Возраст меньше 15 лет - это новый месяц, а старше 15 лет и меньше 30 лет - полный месяц.

Пользователь может выбрать одну из двух стратегий: на новолуние сделать больше, на полнолуние сделать больше или на новолуние сделать больше. Стратегия использует бульварную переменную, чтобы отследить, есть ли в настоящее время позиции.

Анализ преимуществ

  1. Цикличность лунных фаз для уловить тенденции
  2. Настройка цвета, заполнения и другие.
  3. Выбор двухсторонней стратегии торговли
  4. Показаны знаки открытия позиции, операционная ясность
  5. Настройка времени начала отслеживания и стратегии оптимизации

Анализ рисков

  1. Продолжительность лунных фаз не позволяет зафиксировать короткие тенденции
  2. Невозможность ограничить потери, которые могут привести к крупным потерям
  3. Фиксированный цикл, легко формирующийся шаблон

Решение риска:

  1. В сочетании с другими показателями для многоуровневой торговли
  2. Увеличение убыточности
  3. Оптимизация управления позициями, снижение влияния одиночных потерь

Направление оптимизации

Эта стратегия может быть оптимизирована в следующих областях:

  1. В сочетании с большим количеством циклических индикаторов образуются фильтры торговых сигналов, повышающие стабильность стратегии
  2. Добавление модуля управления позициями, оптимизация размеров позиций, снижение влияния одиночных убытков
  3. Добавление модуля Stop Loss, чтобы избежать увеличения убытков
  4. Оптимизация условий открытия и закрытия позиций, снижение просроченных сроков и повышение шансов на выигрыш

Подвести итог

Эта стратегия использует периодические законы лунных фаз, реализуя двустороннюю торговую стратегию, основанную на новолунии и полнолунии. Стратегия показывает четкость, высокую настраиваемость и подходит для захвата длиннолинейных тенденций. Однако, поскольку невозможно ограничить потери, риск выше, рекомендуется использовать в сочетании с другими индикаторами короткого цикла, а также добавить модуль управления позициями и стоп-убытками для дальнейшей оптимизации.

Исходный код стратегии
/*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