Chiến lược định lượng theo dõi xu hướng xuyên chu kỳ


Ngày tạo: 2023-12-15 15:59:37 sửa đổi lần cuối: 2023-12-15 15:59:37
sao chép: 0 Số nhấp chuột: 600
1
tập trung vào
1621
Người theo dõi

Chiến lược định lượng theo dõi xu hướng xuyên chu kỳ

Tổng quan

Chiến lược này kết hợp các chỉ số PSA để xác định xu hướng giá, chỉ số ADX để xác định xu hướng mạnh, chỉ số RSI để xác định khu vực mua bán quá mức và chỉ số CMF để xác định dòng tiền, xây dựng một chiến lược giao dịch định lượng theo dõi xu hướng xuyên chu kỳ. Chiến lược này xác định vị trí nhanh chóng khi giá bị phá vỡ để tạo ra một xu hướng xu hướng mới, và theo dõi liên tục trong xu hướng tiếp theo, đồng thời thiết lập các điều kiện lọc quy trình để giảm rủi ro giữ vị trí trong khi đảm bảo nắm bắt lợi nhuận của xu hướng chính.

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

Chính sách này có các quy định chính như sau:

  1. Sử dụng chỉ số PSAR để xác định liệu giá có đang trong xu hướng tăng hay không, giá phá vỡ PSAR được coi là kết thúc xu hướng tăng và chuyển sang giảm;

  2. Chỉ số RSI yêu cầu cao hơn đường trung bình 50, để lọc các đột phá giả tạo tạo ra khu vực bán tháo;

  3. ADX yêu cầu cao hơn đường trung bình EMA của nó, cho thấy kết quả phân tích xu hướng có tín hiệu liên tục;

  4. CMF yêu cầu lớn hơn 0, được coi là dòng tiền;

Một tín hiệu mua được tạo ra khi đáp ứng bốn điều kiện trên; một tín hiệu bán được tạo ra khi đáp ứng các điều kiện PSAR, RSI thấp hơn 50, ADX thấp hơn đường trung bình EMA và CMF nhỏ hơn 0.

Chiến lược tổng hợp xem xét xu hướng xu hướng giá, cường độ xu hướng, tình trạng mua bán quá mức và dòng tiền đến nhiều chiều thiết lập quy tắc giao dịch, thiết lập phán đoán logic nghiêm ngặt khi đánh giá tạo ra tín hiệu giao dịch, có thể lọc hiệu quả các trường hợp phá vỡ giả, đảm bảo nắm bắt xu hướng xu hướng có khả năng bền vững.

Phân tích lợi thế

Chiến lược này có những lợi thế chính như sau:

  1. Kết hợp với nhiều chỉ số thiết lập các quy tắc giao dịch, có thể ngăn chặn hiệu quả các đột phá giả mạo, đảm bảo chất lượng tín hiệu giao dịch;

  2. Xác định và theo dõi nhanh chóng các xu hướng mới nổi để nắm bắt đầy đủ lợi ích của quá trình xu hướng;

  3. Thiết lập quy trình theo dõi các điều kiện lọc để kiểm soát rủi ro hiệu quả và đảm bảo hiệu quả theo dõi;

  4. Kết hợp với các chỉ số đánh giá cường độ của xu hướng, bạn có thể tránh được tình trạng khó khăn trong việc điều chỉnh.

Phân tích rủi ro

Chiến lược này có những rủi ro chính như sau:

  1. Một chiến lược duy nhất dễ gây rủi ro và cần điều chỉnh vị trí để kiểm soát rủi ro tổng thể;

  2. Trong quá trình theo dõi, cần chú ý đến sự thay đổi của điều kiện lọc để tránh Loss Cut khi điều kiện bị hủy bỏ;

  3. Chiến lược này chủ yếu dựa trên đường dài và đường trung bình, các nội dung ngắn hạn dễ bị ảnh hưởng bởi sự biến động và có nguy cơ dừng lỗ.

Các biện pháp quản lý rủi ro tương ứng bao gồm: tối ưu hóa các quy tắc quản lý vị trí, thiết lập đường dây cảnh báo rủi ro, khoảng cách đường dừng lỗ được nới lỏng thích hợp.

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

Chính sách này có thể được tối ưu hóa:

  1. Tối ưu hóa thiết lập tham số, thiết lập tham số hiện nay là chủ quan hơn, có thể giới thiệu phương pháp học máy để tối ưu hóa tự động;

  2. Thêm mô-đun quản lý vị trí, có thể điều chỉnh vị trí theo tình trạng rủi ro;

  3. Tăng tối ưu hóa các cơ chế dừng lỗ, chẳng hạn như dừng theo dõi, dừng thời gian, phá vỡ dừng lỗ.

Tóm tắt

Chiến lược này tích hợp nhiều quy tắc đánh giá chỉ số, thực hiện định vị nhanh chóng và theo dõi liên tục các xu hướng mới nổi, xác nhận hiệu quả của phân tích đa chiều như xu hướng và tài chính kết hợp với giao dịch định lượng. Chiến lược này có thể được sử dụng theo chỉ số như là chiến lược cơ bản để theo dõi xu hướng xuyên thời kỳ, hoặc có thể được xây dựng thành chiến lược định lượng dài hạn trung bình ổn định sau khi tối ưu hóa tham số và mô-đun.

Mã nguồn chiến lược
/*backtest
start: 2023-11-14 00:00:00
end: 2023-12-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("psar+ adx + cmf + rsi Strategy", overlay=true,initial_capital = 1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent , commission_value=0.1 )

start = input(1.02)
increment = input(1.02)
maximum = input(1.2)
var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na
if bar_index > 0
	firstTrendBar = false
	SAR := nextBarSAR
	if bar_index == 1
		float prevSAR = na
		float prevEP = na
		lowPrev = low[1]
		highPrev = high[1]
		closeCur = close
		closePrev = close[1]
		if closeCur > closePrev
			uptrend := true
			EP := high
			prevSAR := lowPrev
			prevEP := high
		else
			uptrend := false
			EP := low
			prevSAR := highPrev
			prevEP := low
		firstTrendBar := true
		SAR := prevSAR + start * (prevEP - prevSAR)
	if uptrend
		if SAR > low
			firstTrendBar := true
			uptrend := false
			SAR := max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := min(AF + increment, maximum)
	if uptrend
		SAR := min(SAR, low[1])
		if bar_index > 1
			SAR := min(SAR, low[2])
	else
		SAR := max(SAR, high[1])
		if bar_index > 1
			SAR := max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)

//rsi strat
length = input( 50 )
middle_RSI=input(49)
price = close
vrsi = rsi(price, length)

//cmf
lengthCMF = input(20, minval=1)
ad = close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume
mf = sum(ad, lengthCMF) / sum(volume, lengthCMF)

//ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
ema_length=input(10)
ema_sig= ema(sig,ema_length)


long = not uptrend  and vrsi > middle_RSI and sig > ema_sig   and mf>0 
short= uptrend   and vrsi < middle_RSI and sig<ema_sig and mf<0

strategy.entry("long",1,when=long)
strategy.close('long',when=short)