Chiến lược này kết hợp chỉ số khối lượng tương đối và đánh giá xu hướng hành động giá để xây dựng một hệ thống giao dịch tự động tích hợp theo xu hướng và đột phá. Nó mua khi khối lượng tăng và biến động thấp, và bán dựa trên dừng lỗ và hành động giá.
Sử dụng Bollinger Bands để xác định xem sự biến động giá có thấp hay không.
Tính toán khối lượng trung bình trong N ngày qua, so sánh với khối lượng hiện tại để xem liệu khối lượng đã tăng hay không.
Mua khi giá gần thấp, khối lượng tăng và biến động thấp.
Đặt dừng lỗ, theo dõi giá thấp nhất.
Bán khi giá phá vỡ dưới mức dừng lỗ.
Bán khi giá hình thành mô hình tăng theo hướng tăng.
Kết hợp khối lượng và biến động lọc breakout giả hiệu quả.
Chế độ dừng lỗ sẽ giữ lợi nhuận tối đa.
Các tín hiệu ra ngoài như tăng giá, hấp thụ bắt đầu thay đổi xu hướng sớm.
Thông minh và dễ hiểu.
Các quy tắc rõ ràng về dừng lỗ và lấy lợi nhuận làm giảm sự không chắc chắn.
Chỉ số âm lượng chậm, có thể bỏ lỡ điểm xuất phát tốt nhất.
Các tín hiệu ra ngoài như ngập không đáng tin cậy, có nguy cơ ra ngoài sớm.
Dừng rộng hơn có nguy cơ mất mát lớn hơn trên giao dịch duy nhất.
Cần điều chỉnh các thông số như thời gian ATR và thời gian khối lượng để tránh giao dịch quá mức.
Cần tối ưu hóa các quy tắc thoát để tránh thoát không cần thiết.
Hãy thử các bộ lọc bổ sung như MACD để cải thiện tín hiệu nhập cảnh.
Tối ưu hóa thời gian ATR và khối lượng để giảm quá mức giao dịch.
Khám phá các tín hiệu thoát khác như giá phá vỡ dải dưới.
Nghiên cứu theo dõi dừng lỗ để khóa thêm lợi nhuận.
Kiểm tra thời gian giữ khác nhau để có hiệu suất tốt nhất.
Kiểm tra lại các sản phẩm khác nhau để tìm ra phù hợp nhất.
Chiến lược này tương đối đơn giản, sử dụng hành động khối lượng và giá để theo xu hướng. Nó có tín hiệu rõ ràng và dễ theo dõi. Nhưng chất lượng của bộ lọc và quy tắc thoát có thể được cải thiện hơn nữa để có hiệu suất đáng tin cậy hơn. Với các nỗ lực liên tục về điều chỉnh tham số và thiết kế nhập / xuất, kết quả xuất sắc có thể đạt được.
/*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)