
Chiến lược này kết hợp các chỉ số giao dịch tương đối và các chỉ số xu hướng để đánh giá hành động giá, để thực hiện một hệ thống giao dịch tự động kết hợp theo dõi xu hướng và phá vỡ. Mua khi khối lượng giao dịch tăng và biến động ít hơn, đánh giá dừng hoặc mất theo điểm dừng và hành động giá.
Sử dụng Bollinger Bands để xác định giá có dao động nhỏ hay không. Thực hiện cụ thể là so sánh băng thông ATR và BOLL.
Tính trung bình giao dịch trong N ngày trước và so sánh với khối lượng hiện tại để xác định liệu khối lượng giao dịch có tăng hay không.
Khi giá thấp, khối lượng giao dịch tăng lên, và khi có ít biến động thì mua.
Thiết lập điểm dừng lỗ, theo dõi cập nhật giá tối thiểu.
Hạn chế khi giá phá vỡ điểm dừng xuống.
Giá sẽ dừng lại khi giá tạo ra mô hình ăn nhiều đầu.
Sự kết hợp giữa khối lượng giao dịch và chỉ số biến động có thể lọc hiệu quả các đột phá giả.
Sử dụng phương pháp theo dõi xu hướng dừng lỗ, có thể khóa lợi nhuận tối đa.
Sử dụng các hình thức phán đoán như ăn nhiều đầu như là một tín hiệu dừng, có thể dừng lại kịp thời trước khi xu hướng đảo ngược.
Các chiến lược này rất trực quan, dễ hiểu và dễ theo dõi.
Các quy tắc dừng lỗ và dừng lại rõ ràng hơn, giảm bớt sự không chắc chắn của thị trường đóng cửa antisipate.
Các chỉ số về số lượng sinh viên tốt nghiệp đã bị trì trệ, có thể đã bỏ lỡ điểm tốt nhất để vào học.
Các hình thức như nuốt nhiều đầu có thể không đáng tin cậy như một tín hiệu dừng, có nguy cơ dừng quá sớm.
Chiến lược dừng lỗ gần, có nguy cơ cao về tổn thất đơn lẻ.
Cần điều chỉnh các tham số hợp lý, chẳng hạn như ATR và chu kỳ giao dịch, nếu không có thể xảy ra giao dịch thường xuyên.
Cần chú ý và tối ưu hóa các quy tắc dừng lỗ để giảm khả năng thanh toán không cần thiết.
Thử kết hợp các chỉ số khác để lọc tín hiệu nhập cảnh, chẳng hạn như MACD.
Tối ưu hóa các tham số ATR và chu kỳ giao dịch, giảm rủi ro giao dịch thường xuyên.
Thử các tín hiệu dừng khác, chẳng hạn như cơ chế Exit.
Nghiên cứu khả năng khóa lợi nhuận nhiều hơn bằng cách điều chỉnh động điểm dừng lỗ.
Kiểm tra ảnh hưởng của thời gian giữ vị trí khác nhau đối với hiệu suất, tìm kiếm chu kỳ giữ vị trí tối ưu.
Phân tích hiệu quả hợp đồng của các giống khác nhau để tìm ra giống phù hợp nhất.
Chiến lược này đơn giản và trực quan hơn, thực hiện chiến lược theo dõi xu hướng bằng cách kết hợp các chỉ số giao dịch và phán đoán về hành động giá. Ưu điểm là việc tạo tín hiệu rõ ràng hơn, dễ theo dõi, giảm rủi ro hoạt động ngược. Tuy nhiên, vẫn cần tối ưu hóa chất lượng tín hiệu lọc và quy tắc dừng lỗ để làm cho chiến lược ổn định và đáng tin cậy hơn.
/*backtest
start: 2022-10-10 00:00:00
end: 2023-10-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DojiEmoji (kevinhhl)
//@version=4
strategy("[KL] Relative Volume Strategy",overlay=true,pyramiding=1)
ENUM_LONG = "Long"
VERBOSE_MODE = false
opened_position = false
// Timeframe {
backtest_timeframe_start = input(defval = timestamp("01 Apr 2016 13:30 +0000"), title = "Backtest Start Time", type = input.time)
USE_ENDTIME = input(false,title="Define backtest end-time (If false, will test up to most recent candle)")
backtest_timeframe_end = input(defval = timestamp("01 May 2021 19:30 +0000"), title = "Backtest End Time (if checked above)", type = input.time)
within_timeframe = true
// }
// Volatility Indicators {
// BOLL:
BOLL_length = 20, BOLL_src = close, SMA20 = sma(BOLL_src, BOLL_length), BOLL_sDEV_x2 = 2 * stdev(BOLL_src, BOLL_length)
BOLL_upper = SMA20 + BOLL_sDEV_x2, BOLL_lower = SMA20 - BOLL_sDEV_x2
plot(SMA20, "Basis", color=#872323, offset = 0)
BOLL_p1 = plot(BOLL_upper, "BOLL Upper", color=color.navy, offset = 0, transp=50)
BOLL_p2 = plot(BOLL_lower, "BOLL Lower", color=color.navy, offset = 0, transp=50)
//fill(BOLL_p1, BOLL_p2, title = "Background", color=#198787, transp=85)
// ATR v. sDev of prices
ATR_x2 = atr(input(10,title="Length of ATR [Trailing Stop Loss] (x2)"))*2
//plot(SMA20+ATR_x2, "SMA20 + ATR_x2", color=color.gray, offset = 0, transp=50)
//plot(SMA20-ATR_x2, "SMA20 - ATR_x2", color=color.gray, offset = 0, transp=50)
//plotchar(ATR_x2, "ATR_x2", "", location = location.bottom)
is_low_volat = ATR_x2 > BOLL_sDEV_x2
// }
// Trailing stop loss {
TSL_source = low
var entry_price = float(0), var stop_loss_price = float(0)
TSL_line_color = color.green
if strategy.position_size == 0 or not within_timeframe
TSL_line_color := color.black
stop_loss_price := TSL_source - ATR_x2
else if strategy.position_size > 0
stop_loss_price := max(stop_loss_price, TSL_source - ATR_x2)
plot(stop_loss_price, color=TSL_line_color)
// }
// Relative volume indicator {
LEN_RELATIVE_VOL = input(5, title="SMA(volume) length (for relative comparison)")
relative_vol = sma(volume,LEN_RELATIVE_VOL)
// }
// price actions {
bar_range_ratio = abs(close-open)/(high-low)
engulfing = low < low[1] and high > high[1] and abs(close-open) > abs(close-open)[1]
// }
// MAIN:
if within_timeframe
entry_msg = "", exit_msg = close <= entry_price ? "stop loss" : "take profit"
// ENTRY :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if close > open and volume > relative_vol and is_low_volat
if strategy.position_size > 0
entry_msg := "adding"
else if strategy.position_size == 0
entry_msg := "initial"
if strategy.position_size == 0
entry_price := close
stop_loss_price := TSL_source - ATR_x2
ATR_x2 := ATR_x2
strategy.entry(ENUM_LONG, strategy.long, comment=entry_msg)
// EXIT ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if strategy.position_size > 0
bExit = false
// EXIT: Case (A) touches trailing stop loss
if TSL_source <= stop_loss_price
exit_msg := exit_msg + "[TSL]"
bExit := true
// EXIT: Case (B)
else if close < open and not is_low_volat and engulfing and (high-low) > ATR_x2
exit_msg := VERBOSE_MODE ? exit_msg + "[engulfing bearish]" : exit_msg
bExit := true
strategy.close(ENUM_LONG, when=bExit, comment=exit_msg)
// CLEAN UP:
if strategy.position_size == 0
entry_price := 0
stop_loss_price := float(0)