Chiến lược xu hướng động lượng của nhiều chỉ báo kỹ thuật


Ngày tạo: 2024-01-26 11:45:55 sửa đổi lần cuối: 2024-01-26 11:45:55
sao chép: 0 Số nhấp chuột: 575
1
tập trung vào
1617
Người theo dõi

Chiến lược xu hướng động lượng của nhiều chỉ báo kỹ thuật

Tổng quan

Chiến lược này sử dụng nhiều chỉ số kỹ thuật như đường trung bình di chuyển, đường tương đối mạnh (RSI), đường biến động số (VFI) và đường thực tế (TSI) để đánh giá động lượng và xu hướng tổng thể của thị trường để nắm bắt các đường dài và trung bình.

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

  1. Tính trung bình di chuyển của đường RSI (7 ngày), đường RSI (14 ngày) và đường RSI (50 ngày) để đánh giá xu hướng và động lực của RSI.

  2. Tính toán trung bình di động của VFI và VFI EMA (25 ngày), SMA (25 ngày), đánh giá dòng tiền vào và ra khỏi thị trường.

  3. Tính tỷ lệ giữa đường trung bình dài hạn và đường trung bình ngắn hạn của TSI để đánh giá cường độ của xu hướng thị trường.

  4. Kết hợp các kết quả của RSI, VFI và TSI để đưa ra hướng động lực tổng thể của thị trường.

  5. Khi đánh giá thị trường có động lực đi xuống, hãy tháo dỡ; Khi đánh giá động lực thị trường đảo ngược, hãy tháo dỡ.

Phân tích lợi thế

  1. Kết hợp nhiều chỉ số sẽ giúp đánh giá toàn diện và chính xác hơn về động lực và xu hướng của thị trường.

  2. VFI phản ánh dòng tiền vào và ra thị trường, tránh các giao dịch đảo ngược.

  3. Các bộ lọc TSI đã làm cho tín hiệu trở nên đáng tin cậy hơn.

  4. Nhìn chung, chiến lược này có độ tin cậy cao và tỷ lệ thắng tốt hơn.

Phân tích rủi ro

  1. Kết hợp nhiều chỉ số, thiết lập tham số phức tạp, cần thử nghiệm nhiều lần để đạt được tham số tối ưu.

  2. Chiến lược nhập cảnh và xuất cảnh đơn giản, không thể tận dụng đầy đủ thông tin cung cấp bởi chỉ số, có thể dẫn đến thua lỗ đảo ngược quá ngắn.

  3. Trong một thị trường chật chội, có thể có những tín hiệu sai và những tổn thất nhỏ.

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

  1. Tối ưu hóa các tham số chỉ số để tìm tham số tối ưu.

  2. Thêm quy tắc Exit, sử dụng các chỉ số để đánh giá điều kiện rút lui.

  3. Tăng cơ chế bảo vệ lợi nhuận và giảm lỗ nhỏ.

Tóm tắt

Chiến lược này sử dụng nhiều chỉ số tổng hợp để đánh giá động lực tổng thể của thị trường, để kiếm lợi nhuận khi đánh giá thị trường có động lực giảm. Chiến lược này có độ tin cậy cao, nhưng cơ chế nhập cảnh và xuất cảnh đơn giản, thông tin về chỉ số không được sử dụng đầy đủ.

]

Mã nguồn chiến lược
//@version=2
//credit to LazyBear, Lewm444, and others for direct and indirect inputs/////////////////////////////////
//script is very rough, publishing more for collaborative input value than as a finished product/////////
strategy("Momo", overlay=true)
length = input( 50 )
overSold = input( 50 )
overBought = input( 65 )
price = ohlc4

/////////////////////////////////////////////////////macd/////////////////////////////////////////////////

fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)

fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)
MACD = (fastMA - slowMA)
Msignal = (sma(MACD, 9))*40
//plot(Msignal, color=blue, linewidth=3)

/////////////////////////////////////////////////rsi spread/////////////////////////////////////////////////

source = price

RSIFast  = rsi(source, input(7))
RSINorm  = rsi(source, input(14))
RSISlow = rsi(source, input(50))

//plot(RSIFast, color=silver, style=area, histbase=50)
//plot(RSINorm, color=#98b8be, style=area, histbase=50)
//plot(RSISlow, color=#be9e98, style=area, histbase=50)

//plot(RSIFast, color=gray, style=line, linewidth=1)
//plot(RSINorm, color=purple, style=line, linewidth=2)
//plot(RSISlow, color=black, style=line, linewidth=3)

exponential = input(true, title="Exponential MA")

src = (RSIFast)

ma05 = exponential ? ema(src, 05) : sma(src, 05)
ma30 = exponential ? ema(src, 30) : sma(src, 30)
ma50 = exponential ? ema(src, 50) : sma(src, 50)
ma70 = exponential ? ema(src, 70) : sma(src, 70)
ma90 = exponential ? ema(src, 90) : sma(src, 90)
ma100 = exponential ? ema(src, 100) : sma(src, 100)

exponential1 = input(true, title="Exponential MA")

src1 = (RSINorm)

ma051 = exponential1 ? ema(src1, 05) : sma(src1, 05)
ma301 = exponential1 ? ema(src1, 30) : sma(src1, 30)
ma501 = exponential1 ? ema(src1, 50) : sma(src1, 50)
ma701 = exponential1 ? ema(src1, 70) : sma(src1, 70)
ma901 = exponential1 ? ema(src1, 90) : sma(src1, 90)
ma1001 = exponential1 ? ema(src1, 100) : sma(src1, 100)


exponential2 = input(true, title="Exponential MA")

src2 = (RSINorm)

ma052 = exponential2 ? ema(src2, 05) : sma(src2, 05)
ma302 = exponential2 ? ema(src2, 30) : sma(src2, 30)
ma502 = exponential2 ? ema(src2, 50) : sma(src2, 50)
ma702 = exponential2 ? ema(src2, 70) : sma(src2, 70)
ma902 = exponential2 ? ema(src2, 90) : sma(src2, 90)
ma1002 = exponential2 ? ema(src2, 100) : sma(src2, 100)


////////////////////////////////////////////////vfi by LazyBear, modified////////////////////////////////////

VFIlength = input(130, title="VFI length")
coef = input(0.2)
vcoef = input(2.5, title="Max. vol. cutoff")
signalLength=input(10)
signalLength2 = input(100)
smoothVFI=input(false, type=bool)

ma(x,y) => smoothVFI ? sma(x,y) : x

typical=hlc3
inter = log( typical ) - log( typical[1] )
vinter = stdev(inter, 30 )
cutoff = coef * vinter * close
vave = sma( volume, VFIlength )[1]
vmax = vave * vcoef
vc = iff(volume < vmax, volume, vmax) //min( volume, vmax )
mf = typical - typical[1]
vcp = iff( mf > cutoff, vc, iff ( mf < -cutoff, -vc, 0 ) )

vfi = ma(sum( vcp , VFIlength )/vave, 3)
vfima = ema( vfi, 25 )
vfimaS = (sma(vfima, 25))
zima = ema( vfima, signalLength2 )
d=vfi-vfima
vfi_avg = avg(vfi, vfima, vfimaS)
vfi_avgS = (sma(vfi_avg,5))

plot( zima, title="EMA of vfima", color=fuchsia, linewidth=1)
plot( vfimaS, title="SMA of vfima", color=blue, linewidth=1)
plot( vfima , title="EMA of vfi", color=black, linewidth=1)
//plot( vfi, title="vfi", color=green,linewidth=1)
//plot( vfi_avg, title="vfi_avg", color=blue, linewidth=2)
//plot( vfi_avgS, title="vfi_avgS", color=maroon, linewidth=2)

/////////////////////////////////////////////////////tsi////////////////////////////////////////////////

long2 = input(title="Long Length",  defval=24)
short2 = input(title="Short Length",  defval=7)
signal2 = input(title="Signal Length",  defval=13)
pc = change(price)
double_smooth2(src, long2, short2) =>
    fist_smooth2 = ema(src, long2)
    ema(fist_smooth2, short2)
double_smoothed_pc2 = double_smooth2(pc, long2, short2)
double_smoothed_abs_pc2 = double_smooth2(abs(pc), long2, short2)
tsi_value2 = 60 * (double_smoothed_pc2 / double_smoothed_abs_pc2)
//plot( tsi_value2, title="tsi2", color=black, linewidth=1)

////////////////////////////////////////////////////////mjb////////////////////////////////////////////////

trendSignal = avg(tsi_value2, Msignal, vfi)*1.75
T1 = sma(trendSignal, 5)
T2 = ema(trendSignal, 25)
T3 = ema(T2, 25)
//plot( T1, title="Trend", color=red, linewidth=3)
plot( T3, title="Trend3", color=black, linewidth=3)

/////////////////////////////////////////////////////mjb////////////////////////////////////////////////

Momentum = avg (T3, vfimaS, vfima)
plot( Momentum, title="Momentum", color=blue, linewidth=2)
vrsi = rsi(price, length)
clearance = abs(zima - Msignal)

/////////////////////////////////////////////////////mjb////////////////////////////////////////////////

if (not na(vrsi)) 
    if (zima > T3) and (clearance > 5) and (falling(zima, 1) == 1) and (zima > vfimaS) and (zima > vfima) and (falling(T3, 1) == 1) and (zima > 6)
        strategy.entry("ss", strategy.short)
    if (T3 > zima) and (rising(zima, 1) == 1)
        strategy.entry("Zcover", strategy.long)
    if (strategy.openprofit > 750) and (rising(T2, 1) == 1) and (T2 > 10)
        strategy.entry("ProfitTake", strategy.long)
// strategy.risk.allow_entry_in(strategy.direction.short)
// strategy.risk.max_intraday_loss(2000, strategy.cash)