Chiến lược giao dịch dựa trên khối lượng tương đối và xu hướng


Ngày tạo: 2023-10-17 16:19:59 sửa đổi lần cuối: 2023-10-17 16:19:59
sao chép: 0 Số nhấp chuột: 648
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch dựa trên khối lượng tương đối và xu hướng

Tổng quan

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

Nguyên tắc chiến lược

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

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

  3. Khi giá thấp, khối lượng giao dịch tăng lên, và khi có ít biến động thì mua.

  4. Thiết lập điểm dừng lỗ, theo dõi cập nhật giá tối thiểu.

  5. Hạn chế khi giá phá vỡ điểm dừng xuống.

  6. Giá sẽ dừng lại khi giá tạo ra mô hình ăn nhiều đầu.

Phân tích lợi thế

  1. 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ả.

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

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

  4. Các chiến lược này rất trực quan, dễ hiểu và dễ theo dõi.

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

Phân tích rủi ro

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

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

  3. Chiến lược dừng lỗ gần, có nguy cơ cao về tổn thất đơn lẻ.

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

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

Hướng tối ưu hóa

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

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

  3. Thử các tín hiệu dừng khác, chẳng hạn như cơ chế Exit.

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

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

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

Tóm tắ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.

Mã nguồn chiến lượ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)