
Chiến lược này chủ yếu được sử dụng để tự động hóa đầu tư dài dòng của BTC. Định hướng xu hướng được đánh giá thông qua sự giao thoa của cặp EMA và LSMA và sử dụng chỉ số ATR để tính toán dừng động để theo dõi hiệu quả xu hướng đa đầu của BTC.
Sử dụng 25 EMA và 100 LSMA để tạo thành hai đường trung bình, các đường chéo của chúng được sử dụng để đánh giá xu hướng thị trường. EMA phản ứng nhanh với sự thay đổi giá, LSMA đập sóng giả phá vỡ.
Khi EMA nhanh vượt qua LSMA chậm và được đánh giá là vẫn đang trong xu hướng đa đầu, thì hãy làm nhiều hơn; ngược lại, khi EMA nhanh vượt qua LSMA chậm và được đánh giá là đi vào đầu trống, thì hãy cân bằng vị trí.
Sau khi tham gia, dừng động được tính toán bằng chỉ số ATR được điều chỉnh liên tục, để theo dõi hiệu quả xu hướng tăng giá của BTC. Cụ thể, điểm dừng ban đầu là giá nhập cảnh, sau đó mỗi lần điều chỉnh sẽ di chuyển lên tỷ lệ ATR cố định.
Đường dừng có thể khóa hiệu quả sự biến động của BTC, đồng thời ngăn chặn điểm dừng quá gần với giá mới nhất dẫn đến dừng thường xuyên. Ngoài ra, chiến lược cũng đặt hai mức dừng di chuyển với tỷ lệ khác nhau để khóa thêm lợi nhuận.
Việc sử dụng hai đường cân bằng để đánh giá xu hướng là đáng tin cậy hơn và có thể ngăn chặn hiệu quả các tín hiệu giả.
ATR có thể theo dõi các lỗ hổng động, không chỉ khóa phần lớn lợi nhuận mà còn có thể tránh các lỗ hổng nhỏ thường xuyên.
Bất kể giao dịch đa đầu kết thúc hay không, chỉ khi có tín hiệu thoát ra khỏi đường trung bình, kết thúc sẽ dừng lại và rủi ro sẽ được kiểm soát.
Mức độ tự động hóa cao, không cần sự can thiệp của con người, giúp ổ cứng hoạt động lâu dài.
Tuy nhiên, người ta vẫn cần chú ý đến những tin tức bất ngờ và quan trọng để tránh mất mát lớn.
Mặc dù kết hợp hai đường thẳng có thể làm giảm tín hiệu giả, nhưng nó cũng khó tránh được hoàn toàn trong trường hợp rung động.
Thiết lập tham số ATR không chính xác cũng ảnh hưởng đến hiệu quả dừng lỗ, cần điều chỉnh theo các giống khác nhau.
Chu kỳ trung bình không hợp lý hoặc không cập nhật kịp thời cũng có thể gây ra sự chậm trễ tín hiệu.
Bảo đảm sự ổn định của máy chủ, tránh sự cố bất thường dẫn đến gián đoạn giao dịch tự động.
Bạn có thể thử thêm một số chỉ số khác để xác định xu hướng, chẳng hạn như Blink Blend, hoặc sử dụng mô hình học máy để dự đoán giá cả.
Phương pháp tính toán ATR Dynamic Stop Loss cũng có thể được điều chỉnh và tối ưu hóa để làm cho dừng lỗ mượt mà hơn.
Có thể thêm một hệ thống cảnh báo dựa trên khối lượng giao dịch, chuyển động trong ngày của FEATURE để ngăn chặn sự ảnh hưởng của các trang tin tức lớn.
Các tham số khác nhau của các loại tiền tệ khác nhau có thể được đào tạo với nhiều dữ liệu lịch sử hơn cho các tham số cá nhân.
Chiến lược này nói chung là một chương trình đầu tư tự động BTC rất thực tế. Sử dụng hai EMA để xác định xu hướng lớn là rất đáng tin cậy, cộng với ATR theo dõi dừng lỗ, có thể nhận được lợi nhuận tốt, có hiệu lực cũng có thể kéo dài. Với tham số liên tục tối ưu hóa điều chỉnh, hiệu quả của chiến lược này vẫn có nhiều chỗ để nâng cao, rất đáng để thử nghiệm.
// 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")