Chiến lược giao dịch hai chiều dựa trên các pha của mặt trăng


Ngày tạo: 2024-02-21 16:15:25 sửa đổi lần cuối: 2024-02-21 16:15:25
sao chép: 1 Số nhấp chuột: 816
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch hai chiều dựa trên các pha của mặt trăng

Tổng quan

Chiến lược này dựa trên sự thay đổi của pha trăng, làm nhiều hơn khi có trăng mới và trống khi trăng tròn, để thực hiện giao dịch hai chiều.

Nguyên tắc chiến lược

Chiến lược này sử dụng hàm tùy chỉnh tính pha trăng, dựa trên ngày có thể tính toán chính xác tuổi của pha trăng. Nếu tuổi dưới 15 là tháng mới, tuổi lớn hơn 15 và nhỏ hơn 30 là trăng tròn.

Người dùng có thể chọn làm nhiều vào tháng mới, làm trống vào tháng đầy hoặc làm trống vào tháng mới, làm nhiều vào tháng đầy hai chiến lược. Chiến lược sử dụng biến số Bull để theo dõi xem có vị trí hiện tại hay không. Mở một vị trí mới khi không có vị trí trước khi tín hiệu xuất hiện, đồng bằng vị trí hiện tại khi tín hiệu đảo ngược.

Phân tích lợi thế

  1. Sử dụng chu kỳ mặt trăng để nắm bắt xu hướng đường dài
  2. Hiển thị các chính sách như màu sắc, lấp đầy tùy chỉnh
  3. Có thể chọn chiến lược giao dịch hai chiều
  4. Hiển thị dấu hiệu mở kho, hoạt động rõ ràng
  5. Thời gian bắt đầu phản hồi tùy chỉnh, chiến lược tối ưu hóa

Phân tích rủi ro

  1. Chu kỳ trăng dài, không thể nắm bắt được xu hướng ngắn
  2. Không thể hạn chế thiệt hại, có thể gây ra thiệt hại lớn
  3. Chu kỳ cố định, dễ hình thành mô hình

Phương pháp giải quyết rủi ro:

  1. Kết hợp với các chỉ số khác để thực hiện giao dịch đa cấp
  2. Tăng hệ thống chống thiệt hại
  3. Tối ưu hóa quản lý vị trí, giảm tác động của tổn thất đơn lẻ

Hướng tối ưu hóa

Chính sách này có thể được tối ưu hóa bằng cách:

  1. Kết hợp nhiều chỉ số chu kỳ để tạo ra bộ lọc tín hiệu giao dịch, tăng sự ổn định của chiến lược
  2. Thêm mô-đun quản lý vị trí, tối ưu hóa kích thước vị trí, giảm tác động của lỗ đơn
  3. Thêm mô-đun dừng lỗ để tránh tổn thất mở rộng
  4. Tối ưu hóa các điều kiện mở và đóng vị trí, giảm thời gian bị mất, tăng tỷ lệ thắng

Tóm tắt

Chiến lược này sử dụng quy luật chu kỳ của pha trăng để thực hiện chiến lược giao dịch hai chiều dựa trên tháng mới và trăng tròn. Chiến lược hiển thị rõ ràng, có thể tùy chỉnh và phù hợp để nắm bắt xu hướng đường dài.

Mã nguồn chiến lược
/*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