Sự biến động thích nghi

Tác giả:ChaoZhang, Ngày: 2024-01-25 12:43:43
Tags:

img

Tổng quan

Chiến lược này kết hợp các chỉ số theo xu hướng VFI và Moving Averages với chỉ số đảo ngược Bollinger Bands để bắt theo xu hướng và đảo ngược trên thị trường.

Chiến lược logic

Các thành phần chính của chiến lược này là:

  1. Chỉ số VFI để xác định xu hướng. Nó sử dụng tỷ lệ biến đổi logaritm của giá điển hình và khối lượng giao dịch để phù hợp hợp với giá và khối lượng.

  2. Chỉ số chênh lệch EMA để xác định xu hướng. Nó tính toán sự khác biệt tỷ lệ phần trăm giữa EMA 20 ngày và EMA 50 ngày để đánh giá hướng xu hướng trung dài hạn.

  3. Bollinger Bands để phát hiện sự đảo ngược. Dải giữa là SMA 20 ngày, và chiều rộng của các dải là độ lệch chuẩn 1,5 của dải giữa.

  4. Phạm vi VFI để phát hiện kiệt sức: Khi VFI đang tiến gần đến giới hạn của nó (0, 20), xác suất đảo ngược xu hướng được coi là cao hơn.

Khi giá phá vỡ trên dải Bollinger trên và sự khác biệt giữa VFI và EMA cho thấy xu hướng tăng, mua dài. Khi giá phá vỡ dưới dải dưới hoặc VFI đạt ngưỡng, đóng vị trí.

Ưu điểm

  1. Việc đưa ra VFI làm cho mối quan hệ giá-tháng lượng hợp lý hơn và tránh theo dõi mù quáng giá.

  2. Sự kết hợp giữa chênh lệch EMA và VFI làm cho việc xác định xu hướng đáng tin cậy hơn.

  3. Sự kết hợp của Bollinger Bands và VFI làm cho chiến lược thích nghi hơn với các biến động hai chiều trên thị trường.

Rủi ro

  1. Các chỉ số giá khối lượng không thể loại bỏ hoàn toàn nguy cơ đột phá sai.

  2. Sự khác biệt EMA có một chút chậm trễ và không thể phản ứng kịp thời với các biến ngắn hạn.

  3. Các thông số không chính xác của Bollinger Bands có thể dẫn đến giao dịch quá mức hoặc chiếm thị trường.

Giải pháp:

  1. Kết hợp nhiều chỉ số để xác định xu hướng để tránh dựa vào một chỉ số duy nhất.

  2. Điều chỉnh các thông số EMA đến các giá trị thích hợp.

  3. Kiểm tra tác động của các tham số Bollinger đối với chiến lược trong các điều kiện thị trường khác nhau.

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

  1. Tiếp tục tối ưu hóa các thông số VFI để làm cho nó nhạy hơn.

  2. Thêm phán đoán đột phá dựa trên các kênh giá hoặc chỉ số phong bì.

  3. Kiểm tra việc giới thiệu nhiều chỉ số giá khối lượng hơn như OBV, PVT v.v.

  4. Giới thiệu kỹ thuật học máy và AI để nhận ra tối ưu hóa tham số động.

Kết luận

Chiến lược này xem xét toàn diện việc theo dõi xu hướng và phát hiện đảo ngược với VFI, chênh lệch EMA và Bollinger Bands để bắt biến động thị trường hai chiều. Bước tiếp theo là tiếp tục tối ưu hóa các thông số, làm phong phú các chỉ số đánh giá, mở rộng khả năng áp dụng và cải thiện lợi nhuận.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © beststockalert

//@version=4

strategy(title="Super Bollinger Band Breakout", shorttitle = "Super BB-BO", overlay=true)
source = close

length = input(130, title="VFI length")
coef = input(0.2)
vcoef = input(2.5, title="Max. vol. cutoff")
signalLength=input(5)


// session 


pre = input( type=input.session, defval="0400-0935")
trade_session = input( type=input.session, defval="0945-1700")
use_trade_session = true
isinsession = use_trade_session ? not na(time('1', trade_session)) : true


is_newbar(sess) =>
    t = time("D", sess)
    not na(t) and (na(t[1]) or t > t[1])


is_session(sess) =>
    not na(time(timeframe.period, sess))

preNew = is_newbar(pre)
preSession = is_session(pre)

float preLow = na
preLow := preSession ? preNew ? low : min(preLow[1], low) : preLow[1]

float preHigh = na
preHigh := preSession ? preNew ? high : max(preHigh[1], high) : preHigh[1]



//   vfi 9lazybear 
ma(x,y) => 0 ? sma(x,y) : x

typical=hlc3
inter = log( typical ) - log( typical[1] )
vinter = stdev(inter, 30 )
cutoff = coef * vinter * close
vave = sma( volume, length )[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 , length )/vave, 3)
vfima=ema( vfi, signalLength )


//ema diff


ema20 = ema(close,20)
ema50 = ema(close,50)


diff = (ema20-ema50)*100/ema20
ediff = ema(diff,20)

//
basis = sma(source, 20)
dev = 1.5 * stdev(source, 20)

upper = basis + dev
lower = basis - dev


ema9 = ema(source, 9)

if ( ((crossover(source, upper) and diff>ediff and diff>0) or (close>upper and (vfi >0 or vfima>0 or ediff>0.05) and (vfi<14 or vfima<14)) ))
    strategy.entry("Long", strategy.long)


if (crossunder(source, lower) or vfi>19 or vfima>19 or diff<(ediff+0.01) )
    strategy.close("Long")



Thêm nữa