
Strategi ini digunakan terutamanya untuk mengotomatiskan pelaburan panjang BTC. Arah trend ditentukan melalui persilangan dua EMA dan LSMA, dan stop loss dinamik dikira menggunakan indikator ATR, untuk mengesan dengan berkesan trend BTC berbilang arah.
EMA 25 dan LSMA 100 digunakan untuk membentuk garis rata-rata ganda, dan persimpangan mereka digunakan untuk menentukan trend pasaran. EMA bertindak balas dengan cepat terhadap perubahan harga, LSMA memuntahkan gelombang palsu.
Apabila EMA pantas di atas melintasi LSMA perlahan dinilai masih berada dalam trend overhead, maka lakukan lebih banyak; sebaliknya apabila EMA pantas di bawah melintasi LSMA perlahan dinilai masuk ke kepala kosong, maka selesaikan kedudukan.
Selepas masuk ke dalam perdagangan, stop loss dinamik yang dikira menggunakan indikator ATR terus disesuaikan, untuk menjejaki trend kenaikan BTC dengan berkesan. Khususnya, titik permulaan garis stop loss adalah harga masuk, dan setiap penyesuaian akan bergerak ke atas dengan kadar ATR peratusan tetap.
Barisan hentian mampu mengunci pergerakan yang disebabkan oleh kenaikan harga BTC, dan mencegah titik hentian yang terlalu dekat dengan harga terkini yang menyebabkan hentian yang kerap. Selain itu, strategi ini juga menetapkan dua peratusan hentian bergerak yang berbeza untuk mengunci lebih banyak keuntungan.
Menggunakan dua garis keseimbangan untuk menilai trend lebih dipercayai dan dapat menghalang penciptaan isyarat palsu.
ATR dinamik menjejaki hentian untuk mengunci sebahagian besar keuntungan dan mengelakkan hentian kecil yang kerap.
Tidak kira sama ada perdagangan berbilang kepala berakhir atau tidak, apabila isyarat keluar keluar dari garis rata, simpul akan berhenti, dan risiko terkawal.
Tingkat automasi yang tinggi, tidak memerlukan campur tangan manusia, memudahkan operasi lama pada cakera.
Namun, ia perlu diwaspadai untuk mengelakkan kerugian besar.
Walaupun gabungan dua garis rata dapat mengurangkan isyarat palsu, ia juga sukar untuk dielakkan sepenuhnya dalam keadaan gegaran.
Tetapan parameter ATR yang tidak betul juga boleh menjejaskan kesan hentikan kerugian, yang perlu disesuaikan dengan varieti yang berbeza.
Siklus garis purata yang tidak munasabah atau kegagalan untuk mengemas kini pada masa yang tepat juga boleh menyebabkan isyarat terlewat.
Memastikan kestabilan pelayan dan mengelakkan gangguan yang tidak normal yang menyebabkan gangguan perdagangan automatik.
Anda boleh cuba menambah lebih banyak indikator untuk menilai trend, seperti Brinks. Atau menggunakan model pembelajaran mesin untuk meramalkan harga.
Kaedah pengiraan ATR boleh disesuaikan dan dioptimumkan untuk membuat penghentian lebih lancar.
Mekanisme amaran berdasarkan jumlah dagangan dan pergerakan harian FEATURE boleh ditambah untuk mengelakkan kejutan berita utama.
Parameter berbeza untuk setiap mata wang, dan anda boleh menggunakan lebih banyak data sejarah untuk melatih parameter peribadi.
Secara keseluruhan, strategi ini adalah program pelaburan automatik BTC yang sangat praktikal. Menggunakan EMA ganda untuk menentukan trend besar sangat dipercayai, ditambah dengan ATR untuk mengesan kerugian, kedua-dua boleh mendapatkan keuntungan yang baik, tempoh yang sah juga boleh ditarik sangat lama. Dengan parameter terus mengoptimumkan penyesuaian, keberkesanan strategi ini masih mempunyai ruang untuk meningkatkan, sangat bernilai untuk diuji.
// 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")