Chiến lược chu kỳ xu hướng Schaff với đà tăng trưởng theo sau


Ngày tạo: 2023-11-01 16:08:35 sửa đổi lần cuối: 2023-11-01 16:08:35
sao chép: 2 Số nhấp chuột: 855
1
tập trung vào
1617
Người theo dõi

Chiến lược chu kỳ xu hướng Schaff với đà tăng trưởng theo sau

Tổng quan

Chiến lược này dựa trên chỉ số chu kỳ xu hướng của Schaff, kết hợp với nguyên tắc mua bán quá mức của Stoch RSI, để xác định và theo dõi xu hướng thông qua chỉ số động lực. Khi giá vượt qua vùng mua bán quá mức, hãy làm nhiều hơn; Khi giá từ vùng mua bán quá mức xuống khu vực bán quá mức, hãy làm trống.

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

    1. Tính MACD, trong đó Fast Length mặc định là 23 và Slow Length mặc định là 50. MACD phản ánh sự khác biệt giữa trung bình di chuyển ngắn hạn và dài hạn, được sử dụng để xác định động lực giá.
    1. MACD được xử lý bởi Stoch RSI để tạo ra giá trị K, trong đó Cycle Length mặc định là 10, phản ánh giá trị mua và bán quá mức của chỉ số động lực MACD.
    1. Đường trung bình di chuyển được trọng lượng đối với giá trị K, tạo ra giá trị D, trong đó 1st % D Length mặc định là 3, loại bỏ tiếng ồn trong giá trị K.
    1. Các giá trị D được xử lý một lần nữa bởi Stoch RSI để tạo ra giá trị STC ban đầu, trong đó giá trị mặc định của 2nd % D Length là 3, tạo ra tín hiệu bán tháo chính xác.
    1. Một trung bình chuyển động được trọng lượng đối với giá trị STC ban đầu, có giá trị STC cuối cùng, trong phạm vi 0-100 ◦ STC cao hơn 75 là vùng mua quá mức, thấp hơn 25 là vùng bán quá mức ◦
    1. Khi STC từ dưới lên vượt qua 25, làm thêm; khi STC từ trên xuống vượt qua 75, làm trống.

Lợi thế chiến lược

    1. Chỉ số STC kết hợp với thiết kế của Stoch RSI, có thể xác định rõ ràng các khu vực quá mua quá bán, tạo thành tín hiệu xu hướng mạnh mẽ hơn.
    1. Thông qua bộ lọc RSI Stoch kép, có thể lọc hiệu quả các đột phá giả.
    1. STC hình thành phạm vi tiêu chuẩn hóa 0-100 có thể tạo ra tín hiệu giao dịch cơ giới.
    1. Phương pháp này có thể hiển thị các dấu hiệu đột phá và cảnh báo pop-up bằng văn bản để nắm bắt cơ hội giao dịch một cách trực quan và rõ ràng.
    1. Chiến lược sử dụng các tham số tối ưu hóa để kiểm soát hiệu quả các giao dịch vô nghĩa và tránh quá nhạy cảm.

Rủi ro chiến lược

    1. Chỉ số STC nhạy cảm với các tham số khác nhau, các đồng tiền khác nhau và thời gian cần điều chỉnh các tham số để phù hợp với các đặc điểm của thị trường.
    1. Chiến lược giao dịch đột phá dễ bị lừa và cần thiết phải đặt lệnh dừng để kiểm soát rủi ro.
    1. Các đột phá giả mạo trong thị trường ít lưu động có thể gây ra tín hiệu sai, cần phải lọc các chỉ số như khối lượng giao dịch tổng hợp.
    1. Chiến lược này chỉ dựa trên chỉ số STC, có thể kết hợp với các yếu tố khác để xác nhận xu hướng và tránh bị dừng lại.
    1. Cần chú ý đến ngưỡng kháng cự hỗ trợ quan trọng để tránh tín hiệu sai trong khu vực.

Hướng tối ưu hóa chiến lược

    1. Tối ưu hóa các tham số của MACD để phù hợp với các chu kỳ và loại tiền tệ khác nhau.
    1. Tối ưu hóa giá trị K và giá trị D của Stoch RSI, làm phẳng đường cong STC.
    1. Kết hợp các chỉ số giao dịch để tránh đột phá giả mạo trong thị trường thiếu thanh khoản.
    1. Thêm các chỉ số khác để xác nhận các tín hiệu xu hướng, chẳng hạn như Blink.
    1. Thêm các cơ chế dừng lỗ, chẳng hạn như dừng di động hoặc dừng ATR.
    1. Điều chỉnh vị trí vào, chẳng hạn như quay trở lại vào sau khi phá vỡ, để đảm bảo xác nhận xu hướng.

Tóm tắt

Chiến lược vòng tròn xu hướng của Schaff xác định khu vực mua quá mức bằng chỉ số động lực và từ đó đánh giá sự thay đổi xu hướng ngắn hạn trong giá. Chiến lược này đơn giản và rõ ràng, có thể điều chỉnh theo các tham số khác nhau của thị trường, nhưng cũng có nguy cơ bị che khuất.

Mã nguồn chiến lược
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Copyright (c) 2018-present, Alex Orekhov (everget)
// Schaff Trend Cycle script may be freely distributed under the MIT license.
strategy("Schaff Trend Cycle", shorttitle="STC Backtest", overlay=true)

fastLength = input(title="MACD Fast Length",  defval=23)
slowLength = input(title="MACD Slow Length",  defval=50)
cycleLength = input(title="Cycle Length",  defval=10)
d1Length = input(title="1st %D Length",  defval=3)
d2Length = input(title="2nd %D Length",  defval=3)
src = input(title="Source",  defval=close)
highlightBreakouts = input(title="Highlight Breakouts ?", type=bool, defval=true)

macd = ema(src, fastLength) - ema(src, slowLength)

k = nz(fixnan(stoch(macd, macd, macd, cycleLength)))

d = ema(k, d1Length)

kd = nz(fixnan(stoch(d, d, d, cycleLength)))

stc = ema(kd, d2Length)
stc := 	stc > 100 ? 100 : stc < 0 ? 0 : stc

//stcColor = not highlightBreakouts ? (stc > stc[1] ? green : red) : #ff3013
//stcPlot = plot(stc, title="STC", color=stcColor, transp=0)

upper = input(75, defval=75)
lower = input(25, defval=25)

transparent = color(white, 100)

upperLevel = plot(upper, title="Upper", color=gray)
// hline(50, title="Middle", linestyle=dotted)
lowerLevel = plot(lower, title="Lower", color=gray)

fill(upperLevel, lowerLevel, color=#f9cb9c, transp=90)

upperFillColor = stc > upper and highlightBreakouts ? green : transparent
lowerFillColor = stc < lower and highlightBreakouts ? red : transparent

//fill(upperLevel, stcPlot, color=upperFillColor, transp=80)
//fill(lowerLevel, stcPlot, color=lowerFillColor, transp=80)

long =  crossover(stc, lower) ? lower : na
short = crossunder(stc, upper) ? upper : na

long_filt = long and not short
short_filt = short and not long

prev = 0
prev := long_filt ? 1 : short_filt ? -1 : prev[1]

long_final = long_filt and prev[1] == -1
short_final = short_filt and prev[1] == 1

strategy.entry("long", strategy.long, when = long )
strategy.entry("short", strategy.short, when = short)

plotshape(crossover(stc, lower) ? lower : na, title="Crossover", location=location.absolute, style=shape.circle, size=size.tiny, color=green, transp=0)
plotshape(crossunder(stc, upper) ? upper : na, title="Crossunder", location=location.absolute, style=shape.circle, size=size.tiny, color=red, transp=0)

alertcondition(long_final, "Long", message="Long")
alertcondition(short_final,"Short", message="Short")

plotshape(long_final, style=shape.arrowup, text="Long", color=green, location=location.belowbar)
plotshape(short_final, style=shape.arrowdown, text="Short", color=red, location=location.abovebar)