Xu hướng khối lượng tương đối sau chiến lược giao dịch

Tác giả:ChaoZhang, Ngày: 2023-10-17 16:19:59
Tags:

img

Tổng quan

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á.

Làm thế nào nó hoạt động

  1. Sử dụng Bollinger Bands để xác định xem sự biến động giá có thấp hay không.

  2. 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.

  3. Mua khi giá gần thấp, khối lượng tăng và biến động thấp.

  4. Đặt dừng lỗ, theo dõi giá thấp nhất.

  5. Bán khi giá phá vỡ dưới mức dừng lỗ.

  6. Bán khi giá hình thành mô hình tăng theo hướng tăng.

Ưu điểm

  1. Kết hợp khối lượng và biến động lọc breakout giả hiệu quả.

  2. Chế độ dừng lỗ sẽ giữ lợi nhuận tối đa.

  3. 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.

  4. Thông minh và dễ hiểu.

  5. 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.

Rủi ro

  1. Chỉ số âm lượng chậm, có thể bỏ lỡ điểm xuất phát tốt nhất.

  2. 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.

  3. 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.

  4. 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.

  5. Cần tối ưu hóa các quy tắc thoát để tránh thoát không cần thiết.

Cơ hội gia tăng

  1. Hãy thử các bộ lọc bổ sung như MACD để cải thiện tín hiệu nhập cảnh.

  2. Tối ưu hóa thời gian ATR và khối lượng để giảm quá mức giao dịch.

  3. Khám phá các tín hiệu thoát khác như giá phá vỡ dải dưới.

  4. Nghiên cứu theo dõi dừng lỗ để khóa thêm lợi nhuận.

  5. Kiểm tra thời gian giữ khác nhau để có hiệu suất tốt nhất.

  6. Kiểm tra lại các sản phẩm khác nhau để tìm ra phù hợp nhất.

Tóm lại

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)


Thêm nữa