
Strategi ini terutama digunakan untuk mengotomatiskan investasi panjang BTC. Untuk menentukan arah tren melalui persilangan dua EMA dan LSMA, dan untuk menghitung stop loss dinamis menggunakan indikator ATR, untuk melacak tren BTC multihead secara efektif.
EMA 25 dan LSMA 100 digunakan untuk membentuk dua garis rata-rata, dan persimpangan mereka digunakan untuk menilai tren pasar. EMA bereaksi cepat terhadap perubahan harga, dan LSMA memanaskan false breakout.
Ketika EMA cepat di atas melewati LSMA yang lambat dan dinilai masih berada dalam tren overhead, maka lakukan lebih banyak; sebaliknya ketika EMA cepat di bawah melewati LSMA yang lambat dan dinilai masuk ke posisi kosong, maka posisi kosong.
Setelah masuk ke dalam perdagangan, stop loss dinamis yang dihitung dengan indikator ATR terus disesuaikan, untuk melacak tren kenaikan BTC secara efektif. Secara khusus, titik awal stop loss adalah harga masuk, dan setiap penyesuaian selanjutnya akan bergerak ke atas dengan amplitudo ATR proporsi tetap.
Stop loss line dapat secara efektif mengunci fluktuasi yang ditimbulkan oleh kenaikan harga BTC, sekaligus mencegah stop loss yang terlalu dekat dengan harga terbaru yang menyebabkan stop loss yang terlalu sering. Selain itu, strategi ini juga mengatur dua stop loss bergerak dengan proporsi yang berbeda untuk mengunci lebih banyak keuntungan.
Menggunakan dua garis kesetaraan untuk menilai tren lebih dapat diandalkan dan dapat secara efektif mencegah terjadinya sinyal palsu.
ATR dapat melacak stop loss secara dinamis, mengunci sebagian besar keuntungan dan menghindari stop loss kecil yang sering terjadi.
Tidak peduli apakah perdagangan multihead berakhir atau tidak, jika sinyal keluar keluar dari garis rata, maka simpul akan berhenti rusak, dan risiko dikendalikan.
Tingkat otomatisasi yang tinggi, tidak memerlukan intervensi manusia, memudahkan operasi jangka panjang dari hard disk.
Namun, ada beberapa hal yang perlu diperhatikan dalam menghadapi berita-berita penting, untuk menghindari kerugian besar.
Meskipun kombinasi dua garis rata dapat mengurangi sinyal palsu, itu juga sulit untuk dihindari sepenuhnya dalam situasi getaran.
Setting parameter ATR yang tidak tepat juga dapat mempengaruhi efek stop loss, yang perlu disesuaikan dengan varietas yang berbeda.
Siklus rata-rata yang tidak masuk akal atau kegagalan untuk memperbarui sinyal pada waktu yang tepat juga dapat menyebabkan keterlambatan sinyal.
Memastikan stabilitas server, menghindari gangguan yang tidak biasa yang menyebabkan gangguan transaksi otomatis.
Anda dapat mencoba menambahkan lebih banyak indikator untuk menilai tren, seperti Brinks. Atau menggunakan model pembelajaran mesin untuk memprediksi harga.
Metode perhitungan ATR Dynamic Stop Loss juga dapat disesuaikan dan dioptimalkan untuk membuat stop loss lebih halus.
Untuk mencegah terjadinya berita besar, Anda dapat menambahkan fitur peringatan berdasarkan volume transaksi dan pergerakan harian.
Parameter yang berbeda untuk setiap mata uang dapat dilatih dengan lebih banyak data historis untuk parameter yang dipersonalisasi.
Secara keseluruhan, strategi ini adalah program investasi otomatis BTC yang sangat praktis. Menggunakan EMA ganda untuk menentukan tren besar sangat andal, ditambah dengan ATR untuk melacak stop loss, Anda dapat memperoleh keuntungan yang baik, dan dapat bertahan lama. Dengan parameter yang terus dioptimalkan dan disesuaikan, efektivitas strategi ini masih memiliki banyak ruang untuk ditingkatkan, sangat layak untuk diuji coba.
// 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")