Garis Trend Berganda Pelacakan Pintar Strategi Pelaburan BTC

Penulis:ChaoZhang, Tarikh: 2023-11-22 15:18:53
Tag:

img

Ringkasan

Strategi ini digunakan terutamanya untuk pelaburan jangka panjang automatik dalam BTC. Ia menggunakan persilangan EMA dan LSMA berganda untuk menentukan arah trend dan menggunakan penunjuk ATR untuk mengira stop loss dinamik untuk mengesan trend kenaikan BTC dengan berkesan.

Logika Strategi

  1. Menggunakan 25 tempoh EMA dan 100 tempoh LSMA untuk membentuk purata bergerak berganda. silang mereka digunakan untuk menentukan trend pasaran. EMA bertindak balas dengan cepat terhadap perubahan harga manakala LSMA menapis keluar pecah palsu.

  2. Apabila EMA pantas melintasi di atas LSMA perlahan, ia ditentukan bahawa trend menaik masih utuh dan kedudukan panjang diambil. Sebaliknya, apabila EMA pantas melintasi di bawah LSMA perlahan, ia ditentukan bahawa trend menurun telah bermula dan kedudukan sedia ada ditutup.

  3. Selepas mengambil kedudukan panjang, stop loss dinamik yang dikira menggunakan penunjuk ATR terus menyesuaikan diri untuk mengesan aliran naik BTC dengan berkesan. Khususnya, titik awal garis stop loss adalah harga kemasukan. Selepas itu, setiap penyesuaian akan meluncur ke atas dengan peratusan tetap amplitud ATR.

  4. Garis stop loss secara berkesan dapat mengunci keuntungan terapung yang dibawa oleh trend kenaikan BTC, sementara mencegah titik stop loss terlalu dekat dengan harga terkini untuk mengelakkan kehilangan berhenti yang kerap. Di samping itu, strategi ini juga menetapkan dua keuntungan berhenti bergerak dengan perkadaran yang berbeza untuk mengunci lebih banyak keuntungan.

Analisis Kelebihan

  1. Menggunakan purata bergerak berganda untuk menentukan trend lebih boleh dipercayai dan dapat mencegah isyarat palsu dengan berkesan.

  2. Penghentian kerugian dinamik ATR boleh mengunci kebanyakan keuntungan sambil mengelakkan kerugian berhenti kecil yang kerap.

  3. Tidak kira sama ada trend menaik berakhir atau tidak, selagi purata bergerak mengeluarkan isyarat keluar, kedudukan akan dihentikan untuk mengawal risiko.

  4. Strategi ini mempunyai tahap automatik yang tinggi tanpa campur tangan manual, menjadikannya sesuai untuk perdagangan langsung jangka panjang.

Analisis Risiko

  1. Masih perlu memberi perhatian kepada berita besar tiba-tiba untuk mengelakkan kerugian besar.

  2. Walaupun gabungan purata bergerak berganda dapat mengurangkan isyarat palsu, masih sukar untuk mengelakkannya sepenuhnya di pasaran yang terhad.

  3. Tetapan parameter ATR yang tidak betul juga boleh menjejaskan kesan stop loss.

  4. Tempoh purata bergerak yang tidak munasabah atau kegagalan untuk mengemas kini mereka tepat pada masanya boleh menyebabkan kelewatan isyarat.

  5. Memastikan kestabilan pelayan untuk mengelakkan kerosakan yang tidak normal yang mengganggu perdagangan automatik.

Arahan pengoptimuman

  1. Lebih banyak penunjuk seperti Bollinger Bands boleh ditambah untuk menentukan trend. Model pembelajaran mesin juga boleh digunakan untuk meramalkan harga.

  2. Kaedah pengiraan kehilangan berhenti dinamik ATR juga boleh diselaraskan dan dioptimumkan untuk menjadikan kehilangan berhenti lebih lancar.

  3. Mekanisme amaran berasaskan jumlah dagangan dan ciri putaran intraday boleh ditambah untuk melindungi daripada kesan berita utama.

  4. Parameter berbeza untuk syiling yang berbeza. Lebih banyak data sejarah boleh digunakan untuk melatih parameter peribadi.

Ringkasan

Secara keseluruhan, ini adalah program pelaburan BTC automatik yang sangat praktikal. Menggunakan EMA berganda untuk menentukan trend utama sangat boleh dipercayai. Dengan ATR yang mengikuti stop loss, ia dapat mencapai keuntungan yang baik dan tempoh kesahihan boleh sangat lama. Oleh kerana parameter terus dioptimumkan, masih ada banyak ruang untuk peningkatan dalam prestasi strategi ini.


// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Wunderbit Trading

//@version=4
strategy("Automated Bitcoin (BTC) Investment Strategy", overlay=true, initial_capital=5000,pyramiding = 0, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100,  commission_type=strategy.commission.percent,commission_value=0.1)

////////////  Functions

Atr(p) =>
    atr = 0.
    Tr = max(high - low, max(abs(high - close[1]), abs(low - close[1])))
    atr := nz(atr[1] + (Tr - atr[1])/p,Tr)

//TEMA
TEMA(series, length) =>
    if (length > 0)
        ema1 = ema(series, length)
        ema2 = ema(ema1, length)
        ema3 = ema(ema2, length)
        (3 * ema1) - (3 * ema2) + ema3
    else
        na
tradeType = input("LONG", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"])

///////////////////////////////////////////////////
/// INDICATORS
source=close

/// TREND
trend_type1 = input("TEMA", title ="First Trend Line : ", options=["LSMA", "TEMA","EMA","SMA"])
trend_type2 = input("LSMA", title ="First Trend Line : ", options=["LSMA", "TEMA","EMA","SMA"])

trend_type1_length=input(25, "Length of the First Trend Line")
trend_type2_length=input(100, "Length of the Second Trend Line")

leadLine1 = if trend_type1=="LSMA"
    linreg(close, trend_type1_length, 0)
else if trend_type1=="TEMA"
    TEMA(close,trend_type1_length)
else if trend_type1 =="EMA"
    ema(close,trend_type1_length)
else
    sma(close,trend_type1_length)

leadLine2 = if trend_type2=="LSMA"
    linreg(close, trend_type2_length, 0)
else if trend_type2=="TEMA"
    TEMA(close,trend_type2_length)
else if trend_type2 =="EMA"
    ema(close,trend_type2_length)
else
    sma(close,trend_type2_length)

p3 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1)
p4 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1)
fill(p3, p4, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c)

//Upward Trend
UT=crossover(leadLine1,leadLine2)
DT=crossunder(leadLine1,leadLine2)

// TP/ SL/  FOR LONG
// TAKE PROFIT AND STOP LOSS
long_tp1_inp = input(15, title='Long Take Profit 1 %', step=0.1)/100
long_tp1_qty = input(20, title="Long Take Profit 1 Qty", step=1)

long_tp2_inp = input(30, title='Long Take Profit 2%', step=0.1)/100
long_tp2_qty = input(20, title="Long Take Profit 2 Qty", step=1)

long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp)
long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp)

long_sl_input = input(5, title='stop loss in %', step=0.1)/100
long_sl_input_level = strategy.position_avg_price * (1 - long_sl_input)

// Stop Loss
multiplier = input(3.5, "SL Mutiplier", minval=1, step=0.1)
ATR_period=input(8,"ATR period", minval=1, step=1)

// Strategy
//LONG STRATEGY CONDITION

SC = input(close, "Source", input.source)
SL1 = multiplier * Atr(ATR_period)  // Stop Loss
Trail1 = 0.0
Trail1 :=  iff(SC < nz(Trail1[1], 0) and SC[1] < nz(Trail1[1], 0), min(nz(Trail1[1], 0), SC + SL1), iff(SC > nz(Trail1[1], 0), SC - SL1, SC + SL1))
Trail1_high=highest(Trail1,50)

// iff(SC > nz(Trail1[1], 0) and SC[1] > nz(Trail1[1], 0), max(nz(Trail1[1], 0), SC - SL1),

entry_long=crossover(leadLine1,leadLine2) and Trail1_high < close
exit_long = close < Trail1_high or crossover(leadLine2,leadLine1) or close < long_sl_input_level

///// BACKTEST PERIOD ///////
testStartYear = input(2016, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(9999, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

if testPeriod()
    if tradeType=="LONG" or tradeType=="BOTH"
        if strategy.position_size == 0 or strategy.position_size > 0
            strategy.entry("long", strategy.long, comment="b8f60da7_ENTER-LONG_BINANCE_BTC/USDT_b8f60da7-BTC-Investment_4H", when=entry_long)
            strategy.exit("TP1", "long", qty_percent=long_tp1_qty, limit=long_take_level_1)
            strategy.exit("TP2", "long", qty_percent=long_tp2_qty, limit=long_take_level_2)
            strategy.close("long", when=exit_long, comment="b8f60da7_EXIT-LONG_BINANCE_BTC/USDT_b8f60da7-BTC-Investment_4H" )


// LONG POSITION

plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit")
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit")
plot(strategy.position_size > 0 ? Trail1_high : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")

Lebih lanjut