Chiến lược Xu hướng Động lực

Tác giả:ChaoZhang, Ngày: 2024-01-26 11:45:55
Tags:

img

Tổng quan

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

Chiến lược logic

  1. Tính toán trung bình động của đường RSI nhanh (7 ngày), đường RSI bình thường (14 ngày) và đường RSI chậm (50 ngày) để xác định xu hướng và động lực của RSI.

  2. Tính toán VFI và đường trung bình động VFI EMA (25 ngày) và VFI SMA (25 ngày) để đánh giá dòng chảy và dòng chảy vốn.

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

  4. Kết hợp các kết quả RSI, VFI và TSI để rút ra hướng phát triển thị trường tổng thể.

  5. Lấy vị trí ngắn khi xác định động lượng giảm.

Phân tích lợi thế

  1. Kết hợp nhiều chỉ số cho phép đo lường toàn diện và chính xác hơn về động lực và xu hướng thị trường tổng thể.

  2. VFI phản ánh dòng tiền thị trường, tránh giao dịch chống lại xu hướng.

  3. TSI lọc sự biến động của thị trường, làm cho tín hiệu đáng tin cậy hơn.

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

Phân tích rủi ro

  1. Điều chỉnh tham số phức tạp cần thiết cho kết quả tối ưu từ thiết lập nhiều chỉ số.

  2. Quy tắc nhập và xuất đơn giản không thể tận dụng đầy đủ thông tin chỉ số, dễ bị tổn thất đảo ngược ngắn hạn.

  3. Nhạy cảm với các tín hiệu sai và lỗ giảm nhỏ trong các thị trường biến động.

Hướng dẫn tối ưu hóa

  1. Tối ưu hóa các kết hợp chỉ số để tìm các thông số tốt nhất.

  2. Cải thiện các quy tắc thoát dựa trên các điều kiện chỉ số để bắt được sự đảo ngược.

  3. Xây dựng các cơ chế bảo vệ lợi nhuận để giảm tổn thất từ sự rạn nứt.

Tóm lại

Chiến lược này kết hợp nhiều chỉ số để đo đạc động lực thị trường tổng thể và nắm giữ các vị trí ngắn khi xác định động lực giảm. Nó có độ tin cậy tương đối cao nhưng các quy tắc nhập / xuất đơn giản không thể sử dụng đầy đủ thông tin chỉ số.

]


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

Thêm nữa