Chiến lược này chủ yếu được sử dụng cho đầu tư dài hạn tự động vào BTC. Nó sử dụng sự chéo chéo của EMA và LSMA kép để xác định hướng xu hướng và sử dụng chỉ số ATR để tính toán stop loss động để theo dõi hiệu quả xu hướng tăng của BTC.
Sử dụng EMA 25 giai đoạn và LSMA 100 giai đoạn để tạo thành một đường trung bình động kép. Sự chéo chéo của chúng được sử dụng để xác định xu hướng thị trường. EMA phản ứng nhanh chóng với những thay đổi giá trong khi LSMA lọc ra những đột phá sai.
Khi EMA nhanh vượt qua trên LSMA chậm, nó được xác định rằng xu hướng tăng vẫn còn nguyên vẹn và các vị trí dài được thực hiện. Ngược lại, khi EMA nhanh vượt qua dưới LSMA chậm, nó được xác định rằng xu hướng giảm đã bắt đầu và các vị trí hiện có được đóng.
Sau khi thực hiện các vị trí dài, stop loss động được tính bằng chỉ số ATR tiếp tục điều chỉnh để theo dõi hiệu quả xu hướng tăng của BTC. Cụ thể, điểm khởi đầu của đường stop loss là giá nhập. Sau đó, mỗi điều chỉnh sẽ trượt lên một tỷ lệ phần trăm cố định của kích thước ATR.
Đường dừng lỗ có thể khóa hiệu quả lợi nhuận nổi do xu hướng tăng BTC mang lại, đồng thời ngăn chặn điểm dừng lỗ quá gần với giá mới nhất để tránh giảm giảm thường xuyên. Ngoài ra, chiến lược cũng đặt ra hai lợi nhuận dừng chuyển động có tỷ lệ khác nhau để khóa thêm lợi nhuận.
Sử dụng các đường trung bình động kép để xác định 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 sai.
Các ATR động trailing stop loss có thể khóa trong hầu hết lợi nhuận trong khi tránh thường xuyên nhỏ stop losses.
Bất kể xu hướng tăng có kết thúc hay không, miễn là đường trung bình động phát ra tín hiệu thoát, vị trí sẽ được dừng lại để kiểm soát rủi ro.
Chiến lược có mức độ tự động hóa cao mà không cần can thiệp bằng tay, làm cho nó phù hợp với giao dịch trực tiếp dài hạn.
Vẫn cần chú ý đến tin tức đột ngột để tránh mất mát lớn.
Mặc dù sự kết hợp của hai đường trung bình động có thể làm giảm các tín hiệu sai, nhưng vẫn rất khó để tránh hoàn toàn chúng trong các thị trường giới hạn phạm vi.
Cài đặt tham số không chính xác của ATR cũng có thể ảnh hưởng đến hiệu ứng dừng lỗ.
Các khoảng thời gian trung bình động không hợp lý hoặc không cập nhật đúng thời gian có thể dẫn đến sự chậm trễ tín hiệu.
Đảm bảo sự ổn định của máy chủ để tránh sự cố bất thường làm gián đoạn giao dịch tự động.
Nhiều chỉ số như Bollinger Bands có thể được thêm vào để xác định xu hướng. Các mô hình học máy cũng có thể được sử dụng để dự đoán giá.
Phương pháp tính toán của lỗ dừng động ATR cũng có thể được điều chỉnh và tối ưu hóa để làm cho lỗ dừng trơn tru hơn.
Các cơ chế cảnh báo dựa trên khối lượng giao dịch và tính năng xoay trong ngày có thể được thêm vào để bảo vệ chống lại tác động từ tin tức lớn.
Các tham số khác nhau cho các đồng xu khác nhau.
Nhìn chung, đây là một chương trình đầu tư BTC tự động rất thực tế. Sử dụng EMA kép để xác định xu hướng chính là rất đáng tin cậy. Với ATR trailing stop loss, nó có thể đạt được lợi nhuận tốt và thời gian hiệu lực có thể rất dài. Khi các thông số tiếp tục được tối ưu hóa, vẫn còn nhiều chỗ để cải thiện hiệu suất của chiến lược này. Nó rất đáng để xác minh giao dịch trực tiếp.
// 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")