Garis Tren Dual Pelacakan Cerdas Strategi Investasi BTC

Penulis:ChaoZhang, Tanggal: 2023-11-22
Tag:

img

Gambaran umum

Strategi ini terutama digunakan untuk investasi jangka panjang otomatis di BTC. Ini menggunakan persilangan EMA dan LSMA ganda untuk menentukan arah tren dan menggunakan indikator ATR untuk menghitung stop loss dinamis untuk secara efektif melacak tren kenaikan BTC.

Logika Strategi

  1. Menggunakan EMA 25 periode dan LSMA 100 periode untuk membentuk rata-rata bergerak ganda. silang mereka digunakan untuk menentukan tren pasar. EMA merespon dengan cepat terhadap perubahan harga sementara LSMA menyaring keluar false breakout.

  2. Ketika EMA cepat melintasi di atas LSMA lambat, ditentukan bahwa uptrend masih utuh dan posisi panjang diambil. Sebaliknya, ketika EMA cepat melintasi di bawah LSMA lambat, ditentukan bahwa downtrend telah dimulai dan posisi yang ada ditutup.

  3. Setelah mengambil posisi panjang, stop loss dinamis yang dihitung menggunakan indikator ATR terus menyesuaikan diri untuk secara efektif melacak tren naiknya BTC. Secara khusus, titik awal garis stop loss adalah harga masuk. Setelah itu, setiap penyesuaian akan meluncur naik dengan persentase tetap dari amplitudo ATR.

  4. Garis stop loss dapat secara efektif mengunci keuntungan mengambang yang dibawa oleh tren naik BTC, sementara mencegah titik stop loss terlalu dekat dengan harga terbaru untuk menghindari stop loss yang sering terjadi.

Analisis Keuntungan

  1. Menggunakan rata-rata bergerak ganda untuk menentukan tren lebih dapat diandalkan dan dapat secara efektif mencegah sinyal palsu.

  2. Stop loss trailing dinamis ATR dapat mengunci sebagian besar keuntungan sambil menghindari stop loss kecil yang sering terjadi.

  3. Tidak peduli apakah tren bullish berakhir atau tidak, selama moving average mengeluarkan sinyal keluar, posisi akan dihentikan untuk mengendalikan risiko.

  4. Strategi ini memiliki tingkat otomatisasi yang tinggi tanpa intervensi manual, membuatnya cocok untuk perdagangan langsung jangka panjang.

Analisis Risiko

  1. Masih perlu memperhatikan berita besar tiba-tiba untuk menghindari kerugian besar.

  2. Meskipun kombinasi dua moving average dapat mengurangi sinyal palsu, masih sulit untuk sepenuhnya menghindarinya di pasar yang terikat rentang.

  3. Pengaturan parameter ATR yang tidak benar juga dapat mempengaruhi efek stop loss.

  4. Periode rata-rata bergerak yang tidak masuk akal atau kegagalan untuk memperbarui mereka tepat waktu dapat menyebabkan keterlambatan sinyal.

  5. Memastikan stabilitas server untuk menghindari crash abnormal yang mengganggu perdagangan otomatis.

Arahan Optimasi

  1. Lebih banyak indikator seperti Bollinger Bands dapat ditambahkan untuk menentukan tren. Model pembelajaran mesin juga dapat digunakan untuk memprediksi harga.

  2. Metode perhitungan stop loss dinamis ATR juga dapat disesuaikan dan dioptimalkan untuk membuat stop loss lebih lancar.

  3. Mekanisme peringatan berdasarkan volume perdagangan dan fitur rotasi intraday dapat ditambahkan untuk melindungi terhadap dampak dari berita utama.

  4. Parameter bervariasi untuk koin yang berbeda. Lebih banyak data historis dapat digunakan untuk melatih parameter yang dipersonalisasi.

Ringkasan

Secara keseluruhan, ini adalah program investasi BTC otomatis yang sangat praktis. Menggunakan EMA ganda untuk menentukan tren utama sangat dapat diandalkan. Dengan ATR trailing stop loss, ini dapat mencapai keuntungan yang layak dan periode validitasnya bisa sangat panjang. Karena parameter terus dioptimalkan, masih banyak ruang untuk perbaikan dalam kinerja 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 banyak