Chiến lược định lượng CCI kép

Tác giả:ChaoZhang, Ngày: 2023-11-28 15:47:04
Tags:

img

Tổng quan

Chiến lược này kết hợp chỉ số kỹ thuật cổ điển CCI và chỉ số kép VCI và MCI tự phát triển để tạo ra tín hiệu giao dịch, đó là một chiến lược giao dịch định lượng điển hình. Bằng cách xác định xu hướng và động lực của thay đổi khối lượng và giá, nó xác định hướng chính của thị trường hiện tại và tạo ra tín hiệu giao dịch. Nó có thể được sử dụng rộng rãi cho các công cụ tài chính như tiền kỹ thuật số, ngoại hối và cổ phiếu.

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

  1. Tính toán ohlc4 trung bình di chuyển và kết hợp với chỉ số cci để đánh giá mức giá;
  2. Tính toán chỉ số OBV để đo lưu vốn;
  3. Tính toán chỉ số VCI, đo phân phối dòng vốn thông qua biến dạng của chỉ số OBV;
  4. Tính toán chỉ số MCI, đo sự phân bố giá qua biến dạng giá;
  5. So sánh chỉ số VCI và MCI để đánh giá tâm lý thị trường;
  • VCI > MCI, sự quan tâm mua lớn;
  • VCI < MCI, sự quan tâm bán hàng mạnh;
  1. Tạo tín hiệu dài và ngắn dựa trên so sánh VCI và MCI;

Phân tích lợi thế

  1. Chiến lược tính đến nhiều khía cạnh như giá, khối lượng giao dịch và dòng vốn để đánh giá tâm lý thị trường, với các tín hiệu tương đối chính xác;
  2. VCI và MCI được tính bằng độ lệch chuẩn động, có thể thích nghi với những thay đổi thị trường thời gian thực;
  3. Các thông số chiến lược đã được tối ưu hóa thông qua kiểm tra hậu quả rộng rãi và có sự ổn định mạnh mẽ;

Phân tích rủi ro

  1. Việc tính toán các chỉ số giá và khối lượng giao dịch chậm và không thể nắm bắt trước các sự kiện đột ngột;
  2. Một chiến lược duy nhất không thể bao gồm đầy đủ các điều kiện thị trường phức tạp và biến động;
  3. Nó cần được kết hợp với các chỉ số phụ trợ khác và không thể chỉ đánh giá thị trường;

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

  1. Kết hợp các mô hình dự đoán như học sâu để cải thiện độ chính xác đánh giá tín hiệu;
  2. Thêm các mô-đun kiểm soát rủi ro như dừng lỗ để tăng cường tính ổn định của chiến lược;
  3. Thử các kết hợp tham số khác nhau để kiểm tra khả năng áp dụng trên các thị trường cụ thể;

Kết luận

Chiến lược này tạo ra tín hiệu giao dịch bằng cách so sánh các chỉ số CCI kép, tính đến các yếu tố như giá cả và khối lượng giao dịch để đánh giá tâm lý thị trường. Đây là một chiến lược giao dịch định lượng điển hình và thực tế. Nhưng nó vẫn cần được sử dụng với các công cụ phụ trợ khác để tối đa hóa hiệu quả của chiến lược.


/*backtest
start: 2023-10-28 00:00:00
end: 2023-11-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("MCI and VCI - Modified CCI Formulas")
test = cci(ohlc4, 13)
test1 = cci(ohlc4, 20)

obv(src) => cum(change(src) > 0 ? volume : change(src) < 0 ? -volume : 0*volume)
mDisc = input(0, title="Mode Discrepency")
mDiv = input(0.015, title="Interval")
mean(_src, _length)=>
    _return = sum(_src, _length) / _length

median(_src, _length)=>
    _return = _src
    for _i = 0 to _length
        _return := _return == 0 ? _src : (_return + _src[_i]) / 2
    _return


len = input(20, title="Standard (Average) Length")
mmm = input(20, title="Lookback length")
srcV = obv(input(ohlc4))
srcP = input(close)
x = sma(srcV, len)
MDV2 = abs(stdev(median(x, len), mmm))
MDV3 = abs(stdev(mean(x, len), mmm))
AMDV = (MDV2+MDV3)/2
pt1v = (srcV-ema(srcV, len))/ AMDV
pt2v = 1/mDiv
VCI=pt1v*pt2v
y = ema(srcP, len)
MDP2 =  abs(stdev(median(y, len), mmm))
MDP3 = abs(stdev(mean(y, len), mmm))
AMDA = (MDP2 + MDP3)/2
pt1p = 1/mDiv
pt2p = (srcP-ema(srcP, len))/ AMDA
MCI = pt1p * pt2p
plot(VCI, color=yellow, title="VCI", style="Histogram")
plot(MCI, color=white, title="MCI")

plot(500, style=line)

plot(0, style=line, linewidth=2)

plot(-500, style=line)
long = crossover(MCI, 0) and VCI > MCI[2] 
short = crossunder(MCI, 0) and VCI < MCI[2] 
//Time Control
//Set date and time
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 13, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"


direction = input(0, title = "Strategy Direction", minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))
if (long)
    strategy.entry("Long", strategy.long, when=window(), limit=ohlc4, oca_name="BollingerBands",  comment="BBandLE")
else
    strategy.cancel(id="Long")

if (short)
    strategy.entry("Short", strategy.short, when=window(), limit=ohlc4, oca_name="BollingerBands", comment="BBandSE")
else
    strategy.cancel(id="Short")

Thêm nữa