CT TTM Chiến lược giao dịch định lượng dựa trên áp suất

Tác giả:ChaoZhang, Ngày: 2023-11-15 16:06:37
Tags:

img

Tổng quan

Chiến lược này sử dụng chỉ số CT TTM Squeeze để xác định xu hướng giá và áp dụng trailing stops để kiểm soát rủi ro.

Chiến lược logic

Chiến lược sử dụng chỉ số CT TTM Squeeze để xác định xu hướng giá. Cụ thể, các biến sau đây được xác định trong chiến lược:

  • e1 - trung điểm của dải giữa
  • osc - dao động được tính từ sự khác biệt giữa giá đóng và e1 trong một khoảng thời gian hồi quy tuyến tính
  • Diff - sự khác biệt giữa Bollinger Bands và Keltner Channels
  • osc_color - chỉ định màu dao động
  • mid_color - chỉ định màu khác

Nếu osc vượt quá 0, nó hiển thị màu xanh lá cây, cho thấy dài; nếu osc vượt dưới 0, nó hiển thị màu đỏ, cho thấy ngắn.

Khi osc dương tính, đi dài; khi osc âm tính, đi ngắn.

Chiến lược này sử dụng oscillator osc để xác định hướng xu hướng và diff để đo đạc động lượng dài / ngắn. Khi osc vượt trên 0, nó báo hiệu xu hướng tăng, do đó đi dài. Khi osc vượt dưới 0, nó báo hiệu xu hướng giảm, do đó đi ngắn.

Phân tích lợi thế

Chiến lược có những lợi thế sau:

  1. Sử dụng CT TTM Squeeze để xác định xu hướng có độ chính xác tương đối cao. CT TTM Squeeze xem xét toàn diện các đường trung bình động, Bollinger Bands và Keltner Channels, có thể xác định hiệu quả xu hướng giá.

  2. Áp dụng dao động để xác định tín hiệu dài / ngắn tránh các tín hiệu sai trong các khu vực không có xu hướng.

  3. Chế độ dừng lại được sử dụng để kiểm soát rủi ro bằng cách hạn chế lỗ cho mỗi giao dịch.

  4. Chiến lược này có ít tham số và dễ tối ưu hóa. Chỉ với tham số chiều dài, nó tạo điều kiện cho kiểm tra nhanh để tìm sự kết hợp tham số tối ưu.

  5. Các chức năng vẽ đồ họa hiển thị rõ các tín hiệu. Các màu sắc khác nhau được sử dụng để phân biệt tín hiệu dài / ngắn và sức mạnh, trực quan trình bày các phán đoán xu hướng.

Phân tích rủi ro

Chiến lược này cũng có những rủi ro sau:

  1. CT TTM Squeeze có thể tạo ra tín hiệu sai trong một số điều kiện thị trường nhất định, dẫn đến thua lỗ giao dịch. Nó có thể tạo ra tín hiệu dài / ngắn không chính xác khi giá dao động mạnh mẽ.

  2. Sự khác biệt trong dao động có thể dẫn đến tín hiệu giao dịch sai.

  3. Việc dừng lại quá mạnh có thể gây ra tổn thất không cần thiết. Sự biến động bình thường có thể kích hoạt dừng lại và buộc phải thoát ra nếu mức dừng được đặt quá gần.

  4. Chiến lược này chỉ phù hợp với các sản phẩm có xu hướng mạnh, không dành cho các thị trường giới hạn phạm vi.

  5. Tối ưu hóa quá mức có thể dẫn đến phù hợp đường cong. Cần cẩn thận để tránh quá phù hợp trong tối ưu hóa tham số.

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

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Kết hợp nhiều chỉ số cho độ chính xác tín hiệu. Các chỉ số khác như MACD, KDJ có thể được thêm vào để tối ưu hóa tín hiệu đầu vào.

  2. Thêm các mô-đun tối ưu hóa stop loss để dừng thông minh hơn.

  3. Tối ưu hóa quản lý tiền bằng cách thử nghiệm phân số cố định, công thức Kelly v.v. Điều này có thể cải thiện hiệu quả sử dụng vốn trong khi đảm bảo rủi ro theo giao dịch.

  4. Điều chỉnh các thông số dựa trên các đặc điểm của sản phẩm có thể cải thiện sự phù hợp chiến lược.

  5. Thêm thuật toán học máy để học ứng dụng. Sử dụng RNN, LSTM vv có thể tăng khả năng thích nghi của chiến lược.

Kết luận

Chiến lược này sử dụng CT TTM Squeeze để xác định hướng xu hướng, dao động vượt qua 0 như tín hiệu đầu vào và dừng lại để quản lý rủi ro. Ưu điểm của nó nằm trong độ chính xác cao, tối ưu hóa dễ dàng, nhưng rủi ro như thất bại chỉ số, dừng quá chặt tồn tại.


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

//@version=2
strategy("CT TTM Squeeze") 
length = input(title="Length",  defval=20, minval=0) 
bband(length, mult) =>
	sma(close, length) + mult * stdev(close, length)
keltner(length, mult) =>
	ema(close, length) + mult * ema(tr, length)
	
	
// Variables
e1 = (highest(high, length) + lowest(low, length)) / 2 + sma(close, length)
osc = linreg(close - e1 / 2, length, 0)
diff = bband(length, 2) - keltner(length, 1)
osc_color = osc[1] < osc[0] ? osc[0] >= 0 ? #00ffff : #cc00cc : osc[0] >= 0 ? #009b9b : #ff9bff
mid_color = diff >= 0 ? green : red

// Strategy

long = osc > 0
short = osc < 0

if long
    strategy.entry("Long", strategy.long)

if short
    strategy.entry("Short", strategy.short) 


plot(osc, color=osc_color, style=histogram, linewidth=2)
plot(0, color=mid_color, style=circles, linewidth=3)


Thêm nữa