Chiến lược này giao dịch cả dài và ngắn dựa trên pha trăng, đi dài trên mặt trăng mới và đi ngắn trên mặt trăng tròn.
Chiến lược này tính toán chính xác các giai đoạn của mặt trăng dựa trên ngày sử dụng một hàm tùy chỉnh. Tuổi trăng dưới 15 là một mặt trăng mới, và từ 15 đến 30 là một mặt trăng tròn. Nó tạo ra các tín hiệu dài và ngắn dựa trên các giai đoạn của mặt trăng, mở các vị trí dài trên các mặt trăng mới và các vị trí ngắn trên các mặt trăng tròn. Nó đóng các vị trí trên các tín hiệu ngược lại - đóng dài trên các mặt trăng tròn và ngắn trên các mặt trăng mới.
Người dùng có thể chọn giữa
Giảm rủi ro:
Chiến lược có thể được cải thiện bằng cách:
Chiến lược này khai thác tính định kỳ của chu kỳ mặt trăng để thực hiện một chiến lược giao dịch hai chiều dựa trên mặt trăng mới và tròn. Nó có tín hiệu rõ ràng, khả năng tùy biến cao và bắt được xu hướng dài hạn tốt. Nhưng việc không thể hạn chế lỗ gây ra rủi ro đáng kể.
/*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