Schaff Xu hướng chu kỳ Động lực theo chiến lược

Tác giả:ChaoZhang, Ngày: 2023-11-01 16:08:35
Tags:

img

Tổng quan

Chiến lược này dựa trên chỉ số Chu kỳ Xu hướng Schaff, kết hợp với các nguyên tắc mua quá nhiều và bán quá nhiều của Stoch RSI, để xác định và theo dõi xu hướng sử dụng số liệu động lực. Nó đi dài khi giá vượt ra khỏi khu vực bán quá nhiều vào khu vực mua quá nhiều và đi ngắn khi giá phá vỡ từ khu vực mua quá nhiều vào khu vực bán quá nhiều. Chiến lược điều chỉnh động các vị trí bằng cách nắm bắt những thay đổi trong xu hướng giá.

Chiến lược logic

    1. Tính toán MACD, nơi mặc định Fast Length là 23 và Slow Length là 50. MACD phản ánh sự khác biệt giữa trung bình động ngắn hạn và dài hạn để đánh giá đà giá.
    1. Áp dụng Stoch RSI cho MACD để tạo ra giá trị K, trong đó Độ dài chu kỳ mặc định là 10, phản ánh mức mua quá mức / bán quá mức của chỉ số động lực MACD.
    1. Lấy đường trung bình động cân của K thành dạng D, trong đó chiều dài %D mặc định thứ nhất là 3, để loại bỏ tiếng ồn từ K.
    1. Áp dụng Stoch RSI một lần nữa vào D để tạo ra giá trị STC ban đầu, trong đó độ dài %D mặc định thứ 2 là 3, để tạo ra các tín hiệu mua quá mức / bán quá mức chính xác.
    1. Hãy lấy đường trung bình động cân của STC ban đầu để có được giá trị STC cuối cùng, dao động từ 0-100.
    1. Đi dài khi STC vượt quá 25 lên, và ngắn khi STC vượt qua 75 xuống.

Ưu điểm

    1. Thiết kế STC kết hợp Stoch RSI xác định rõ các khu vực mua quá mức / bán quá mức, tạo ra các tín hiệu xu hướng mạnh.
    1. Việc lọc hai Stoch RSI có hiệu quả loại bỏ các sự đột phá sai.
    1. Phạm vi chuẩn hóa 0-100 của STC cho phép các tín hiệu giao dịch cơ khí đơn giản.
    1. Các backtest thực hiện các dấu hiệu đột phá trực quan và cảnh báo popup văn bản để thu thập tín hiệu rõ ràng và trực quan.
    1. Các thông số mặc định được tối ưu hóa tránh các tín hiệu quá nhạy cảm và giao dịch không cần thiết.

Rủi ro

    1. STC nhạy cảm với các tham số. Các đồng tiền và khung thời gian khác nhau yêu cầu điều chỉnh tham số để phù hợp với các đặc điểm của thị trường.
    1. Chiến lược thoát hiểm có xu hướng mắc cạm, đòi hỏi phải dừng lại để kiểm soát rủi ro.
    1. Sự phá vỡ giả có thanh khoản thấp có thể tạo ra tín hiệu xấu, cần lọc khối lượng.
    1. STC một mình có nguy cơ đảo ngược, cần xác nhận bằng các yếu tố khác.
    1. Các mức hỗ trợ / kháng cự chính nên được theo dõi để tránh các tín hiệu xấu.

Cơ hội gia tăng

    1. Tối ưu hóa các thông số MACD cho các giai đoạn và đồng tiền khác nhau.
    1. Cải thiện giá trị Stoch RSI K và D để làm mịn đường cong STC.
    1. Thêm bộ lọc khối lượng để tránh sự phá vỡ giả với thanh khoản thấp.
    1. Bao gồm các chỉ số bổ sung để xác nhận tín hiệu, ví dụ: Bollinger Bands.
    1. Thêm các cơ chế dừng như chuyển động / ATR dừng lại.
    1. Điều chỉnh mục nhập, ví dụ: nhập vào pullback sau khi phá vỡ để xác nhận xu hướng.

Kết luận

Chiến lược chu kỳ xu hướng Schaff xác định quá mua / quá bán thông qua các chỉ số động lực để xác định những thay đổi xu hướng giá ngắn hạn. Mặc dù đơn giản và có thể điều chỉnh, nó có nguy cơ bẫy.


/*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)


Thêm nữa