Chỉ số động lực Chiến lược ngắn dài

Tác giả:ChaoZhang, Ngày: 2023-11-02 16:34:48
Tags:

img

Tổng quan

Chiến lược này sử dụng các chỉ số động lực bao gồm Chỉ số hướng trung bình (ADX), Chỉ số chuyển động theo hướng (DMI) và Chỉ số kênh hàng hóa (CCI) để xác định hướng xu hướng và theo dõi xu hướng.

Chiến lược logic

  1. Tính toán các chỉ số ADX, DMI và CCI.

    • ADX đo sức mạnh xu hướng. ADX cao cho thấy xu hướng mạnh.
    • DMI bao gồm DI + và DI-. DI + cho thấy sức mạnh xu hướng tăng trong khi DI- cho thấy sức mạnh xu hướng giảm. Nếu DI + lớn hơn DI-, nó là xu hướng tăng và ngược lại.
    • CCI đánh giá mức mua quá mức / bán quá mức: dưới -100 là bán quá mức trong khi trên 100 là mua quá mức.
  2. Xác định hướng xu hướng.

    • Khi DI + vượt trên DI-, một xu hướng tăng được xác định.
    • Khi DI- vượt dưới DI+, một xu hướng giảm được xác định.
  3. Đi vào vị trí.

    • Khi xu hướng tăng hình, ADX cao, và CCI < -100, đi dài.
    • Khi xu hướng giảm hình thành, ADX cao và CCI > 100, đi ngắn.
  4. Vị trí xuất cảnh với stop loss.

    • Khi dài, thoát khi DI- vượt dưới DI +.
    • Khi ngắn, thoát khi DI + vượt qua DI-.

Phân tích lợi thế

  1. ADX lọc giao dịch trong thời gian xu hướng yếu.

  2. DMI làm giảm các lỗi trong xác định xu hướng.

  3. Việc tham gia quá mức CCI cải thiện thời gian và giảm rủi ro.

  4. Kết hợp các chỉ số động lượng cải thiện độ chính xác.

  5. Đặt giới hạn dừng lỗ cho mỗi giao dịch.

Rủi ro và phòng ngừa rủi ro

  1. Lấy giày giày khi ADX giảm, nâng ngưỡng ADX để đảm bảo xu hướng đủ mạnh.

  2. DMI tụt lại phía sau xu hướng ở giai đoạn đầu.

  3. Tần số giao dịch CCI cao, mở rộng phạm vi CCI để lọc tiếng ồn.

  4. Xem xét chiến lược trung lập thị trường khi dài và ngắn, để bảo hiểm rủi ro vị trí tổng thể.

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

  1. Tối ưu hóa các thông số ADX để cân bằng lọc tiếng ồn và xu hướng bắt.

  2. Tối ưu hóa các thông số DMI để cân bằng độ trễ và độ nhạy.

  3. Tối ưu hóa các thông số CCI để cân bằng tần suất giao dịch và bắt kịp các sự đảo ngược.

  4. Kiểm tra thêm hoặc sửa đổi các chỉ số để kết hợp tốt hơn. ví dụ: MACD, KDJ.

  5. Thử nghiệm trên các sản phẩm khác nhau để tìm phù hợp nhất.

  6. Tối ưu hóa kích thước vị trí để kiểm soát rủi ro trong khi duy trì theo dõi xu hướng.

Kết luận

Chiến lược hợp lý sử dụng ADX cho xu hướng, DMI cho hướng và CCI cho sự đảo ngược. Nhưng các tham số cần tối ưu hóa và kích thước vị trí để kiểm soát rủi ro. Được điều chỉnh và áp dụng đúng cách cho các sản phẩm xu hướng, nó có thể mang lại lợi nhuận ổn định. Các nhà giao dịch nên điều chỉnh năng động cho thị trường thay đổi.


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

//@version=4
strategy("ADX Strategy", currency = "USD", initial_capital = 1000, overlay=true)
adxlen = input(9, title="ADX Smoothing")
dilen = input(14, title="DI Length")
ADX_Entry = input(25, title="ADX Entry")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	[adx, plus, minus]

[sig, up, down] = adx(dilen, adxlen)
cci_length = input(20, minval=1, title="CCI Length")
cci_ma = sma(close, cci_length)
cci = (close - cci_ma) / (0.015 * dev(close, cci_length))

stop_loss = syminfo.mintick * 100


open_longs = strategy.position_size > 0
open_shorts = strategy.position_size < 0

possible_bull = false
possible_bull := not open_longs ? (possible_bull[1] and not crossunder(up,down) ? true : false) : false
possible_bear = false
possible_bear := not open_shorts ? (possible_bear[1] and not crossunder(down,up) ? true : false) : false



bool bull_entry = crossover(up,down)

if(bull_entry and up < ADX_Entry and cci < 0)
	possible_bull := true
	bull_entry := false

if(possible_bull and up > ADX_Entry and cci > -100)
	bull_entry := true

bool bear_entry = crossover(down,up)

if(bear_entry and down < ADX_Entry and cci > 0)
	possible_bear := true
	bear_entry := false

if(possible_bear and down >= ADX_Entry and cci < 100)
	bear_entry := true

strategy.entry("Short", strategy.short, qty = 1,comment="Short", stop=high[1] - stop_loss, when = bear_entry)
strategy.entry("Long", strategy.long, qty = 1, comment="Long", stop=low[1] - stop_loss, when = bull_entry )	

strategy.close_all(when = (open_shorts and (crossover(up,down) or crossover(sig,down))) or (open_longs and ( crossover(down,up) or crossover(sig, up))))


Thêm nữa