Chiến lược chỉ số động của nhà giao dịch

Tác giả:ChaoZhang, Ngày: 2023-11-13 10:09:48
Tags:

img

Tổng quan

Chiến lược này sử dụng Chỉ số Động lực Thương nhân (TDI) làm chỉ số kỹ thuật chính, kết hợp với trung bình động trên các khung thời gian khác nhau để tạo ra tín hiệu giao dịch.

Chiến lược logic

Chiến lược này đầu tiên tính toán chỉ số RSI của đóng với một khoảng thời gian 13. Sau đó nó tính toán trung bình động đơn giản 34 giai đoạn của chỉ số RSI, và sử dụng 1.6185 lần độ lệch chuẩn 34 giai đoạn của chỉ số RSI như các dải trên và dưới. Dải trên là trung bình động cộng với sự dịch chuyển, và dải dưới là trung bình chuyển trừ sự dịch chuyển.

Sau đó, nó tính toán MA nhanh của RSI với một khoảng thời gian 2, và MA chậm của RSI với một khoảng thời gian 7. Sau đó nó lấy giá trị lịch sử của các chỉ số này từ một khung thời gian cao hơn. Khi MA nhanh vượt qua dưới MA chậm, một tín hiệu mua được tạo ra. Khi MA nhanh vượt qua trên MA chậm, một tín hiệu bán được tạo ra.

Phân tích lợi thế

Chiến lược này sử dụng đặc điểm đảo ngược trung bình của chỉ số RSI và kết hợp các chỉ số động lực để thực hiện giao dịch đảo ngược. Các dải trên và dưới của chỉ số RSI phản ánh các điều kiện mua quá mức và bán quá mức, trong khi dải giữa phản ánh mức giá trung bình.

Đặc biệt, các dải RSI thiết lập ngưỡng mua quá mức và bán quá mức hợp lý để phát hiện nhanh sự bất thường. Dải giữa nắm bắt mức giá cân bằng. MA nhanh lọc ra tiếng ồn ngắn hạn và MA chậm xác định xu hướng trung hạn. Làm việc cùng nhau, chúng có thể xác định hiệu quả các cơ hội đảo ngược. Ngoài ra, sự kết hợp của các chỉ số trên các khung thời gian khác nhau cho phép chiến lược xác nhận trên nhiều chân trời thời gian, giảm nguy cơ tín hiệu sai.

Phân tích rủi ro

Chiến lược này chủ yếu dựa trên sự đảo ngược trung bình, có những rủi ro thời gian vốn có. Các lỗ liên tiếp có thể xảy ra nếu thị trường trải qua một sự mở rộng không hợp lý kéo dài, chẳng hạn như một sự ép ngắn. Ngoài ra, việc không thiết lập đúng MAs nhanh và chậm có thể gây ra cơ hội đảo ngược bị bỏ lỡ hoặc tín hiệu sai. Một số mức độ tối ưu hóa tham số là cần thiết.

Để kiểm soát các rủi ro trên, nên điều chỉnh các khoảng thời gian MA một cách hợp lý hoặc thêm cơ chế dừng lỗ. Khi thị trường đi vào chế độ không hợp lý, kích thước vị trí nên được giảm hoặc ngừng giao dịch hoàn toàn. Nhìn chung, điều quan trọng là điều chỉnh chiến lược cho môi trường thị trường cụ thể.

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. Kiểm tra các giai đoạn RSI có độ dài khác nhau để tìm các thiết lập phù hợp hơn với điều kiện thị trường hiện tại.

  2. Tối ưu hóa chiều dài của các MAs nhanh và chậm để cân bằng bắt ngược và lọc ra tiếng ồn.

  3. Thêm stop loss dựa trên biến động để kiểm soát mức rút tối đa.

  4. Cố gắng thêm các yếu tố khác như thay đổi âm lượng trong logic nhập để cải thiện độ chính xác.

  5. Kiểm tra hiệu quả của việc sử dụng lại cùng một bộ tín hiệu giao dịch trên nhiều khung thời gian.

  6. Phát triển các cơ chế tối ưu hóa thích nghi để điều chỉnh tham số động.

Kết luận

Khung tổng thể của chiến lược đảo ngược RSI này là hợp lý với logic rõ ràng và có thể giải thích được. Nó có không gian và tiềm năng tối ưu hóa có thể tùy chỉnh. Với điều chỉnh tham số và kiểm soát rủi ro thích hợp, khả năng nắm bắt đảo ngược là đầy hứa hẹn. Bước tiếp theo là tối ưu hóa thêm chiến lược thông qua kiểm tra lại và điều chỉnh tham số hơn nữa, để cải thiện độ bền và lợi nhuận của nó.


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

//@version=2

strategy("TDI - Traders Dynamic Index [Mehdi]", shorttitle="TDIMEHDI")

rsiPeriod = input(13, minval = 1, title = "RSI Period")
bandLength = input(34, minval = 1, title = "Band Length")
lengthrsipl = input(7, minval = 0, title = "Fast MA on RSI")
lengthtradesl = input(2, minval = 1, title = "Slow MA on RSI")
p1 = input("15", title = "Signal Timeframe")

src = close                                                             // Source of Calculations (Close of Bar)

r = rsi(src, rsiPeriod)                                                 // RSI of Close
ma = sma(r, bandLength)                                                 // Moving Average of RSI [current]
offs = (1.6185 * stdev(r, bandLength))                                  // Offset
up = ma + offs                                                          // Upper Bands
dn = ma - offs                                                          // Lower Bands
mid = (up + dn) / 2                                                     // Average of Upper and Lower Bands
fastMA = sma(r, lengthrsipl)                                            // Moving Average of RSI 2 bars back
slowMA = sma(r, lengthtradesl)                                          // Moving Average of RSI 7 bars back

hline(20)                                                               // ExtremelyOversold
hline(30)                                                               // Oversold
hline(50)                                                               // Midline
hline(70)                                                               // Overbought
hline(80)                                                               // ExtremelyOverbought

up1 = request.security(syminfo.tickerid, p1, up)
dn1 = request.security(syminfo.tickerid, p1, dn)
mid1 = request.security(syminfo.tickerid, p1, mid)
slowMA1 = request.security(syminfo.tickerid, p1, slowMA)
fastMA1 = request.security(syminfo.tickerid, p1, fastMA)

plot(up1, "Upper Band", color = #3286c3, linewidth = 2)               // Upper Band
plot(dn1, "Lower Band", color = #3286c3, linewidth = 2)               // Lower Band
plot(mid1, "Middle of Bands", color = yellow, linewidth = 2)      // Middle of Bands
plot(slowMA1, "Slow MA", color=green, linewidth=2)                       // Plot Slow MA
plot(fastMA1, "Fast MA", color=red, linewidth=1)                         // Plot Fast MA

if (crossover(slowMA1, fastMA1))
    strategy.entry("Buy", strategy.long, comment="Buy")

if (crossunder(slowMA1, fastMA1))
    strategy.entry("Sell", strategy.short, comment="Sell")

Thêm nữa