Strategi perdagangan dua arah berdasarkan fasa bulan


Tarikh penciptaan: 2024-02-21 16:15:25 Akhirnya diubah suai: 2024-02-21 16:15:25
Salin: 1 Bilangan klik: 816
1
fokus pada
1617
Pengikut

Strategi perdagangan dua arah berdasarkan fasa bulan

Gambaran keseluruhan

Strategi ini adalah berdasarkan perubahan fasa bulan, lebih banyak pada bulan baru dan kosong pada bulan penuh, untuk mencapai perdagangan dua hala.

Prinsip Strategi

Strategi ini menggunakan fungsi tersuai untuk mengira fasa bulan, berdasarkan tarikh dapat dengan tepat mengira usia fasa bulan. Umur kurang dari 15 tahun adalah bulan baru, lebih tua dari 15 dan kurang dari 30 tahun adalah bulan penuh. Strategi berdasarkan fasa bulan membuat lebih banyak isyarat kosong, melakukan lebih banyak posisi pada bulan baru, membuka posisi kosong pada bulan penuh, dan sebaliknya, lebih banyak posisi pada bulan penuh, kosong pada bulan baru.

Pengguna boleh memilih antara dua jenis strategi. Strategi menggunakan pembolehubah Bull untuk mengesan sama ada kedudukan yang dipegang pada masa ini. Strategi membuka kedudukan baru apabila tidak ada kedudukan sebelum isyarat muncul, dan melonggarkan kedudukan semasa apabila isyarat berbalik.

Analisis kelebihan

  1. Menggunakan kitaran fasa bulan untuk menangkap trend garis panjang
  2. Warna yang boleh disesuaikan, penuhi dan sebagainya.
  3. Pilihan strategi perdagangan dua hala
  4. Tunjukkan tanda bukaan simpanan, operasi jelas
  5. Masa permulaan pengesanan semula yang boleh disesuaikan, strategi pengoptimuman

Analisis risiko

  1. Tempoh bulan yang panjang, tidak dapat menangkap trend garis pendek
  2. Tidak dapat mengehadkan kerugian, boleh menyebabkan kerugian besar
  3. Siklus tetap, mudah membentuk corak

Penyelesaian risiko:

  1. Berkongsi dengan penunjuk lain untuk mencapai perdagangan pelbagai peringkat
  2. Meningkatkan mekanisme kawalan kerugian
  3. Mengoptimumkan pengurusan kedudukan dan mengurangkan kesan kerugian tunggal

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan:

  1. Menggabungkan lebih banyak indikator kitaran untuk membentuk penapis isyarat perdagangan dan meningkatkan kestabilan strategi
  2. Menambah modul pengurusan kedudukan, mengoptimumkan saiz kedudukan, mengurangkan kesan kerugian tunggal
  3. Tambah modul stop-loss untuk mengelakkan peningkatan kerugian
  4. Mengoptimumkan keadaan kedudukan terbuka dan kedudukan, mengurangkan masa kehilangan, meningkatkan kadar kemenangan

ringkaskan

Strategi ini menggunakan undang-undang berkala fasa bulan untuk mewujudkan strategi perdagangan dua hala berdasarkan bulan baru dan bulan penuh. Strategi ini menunjukkan jelas, disesuaikan, sesuai untuk menangkap trend garis panjang. Tetapi kerana tidak dapat mengehadkan kerugian, risikonya lebih besar, disarankan untuk digunakan bersama-sama dengan indikator kitaran pendek yang lain, dan menambah kedudukan dan modul pengurusan stop loss untuk pengoptimuman lebih lanjut.

Kod sumber strategi
/*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