Chiến lược thoát dựa trên thương mại rùa

Tác giả:ChaoZhang, Ngày: 2023-10-17 17:22:34
Tags:

img

Tổng quan

Chiến lược này dựa trên hệ thống giao dịch rùa nổi tiếng, sử dụng kênh Donchian để xác định sự đột phá và ATR để thiết lập dừng lỗ cho xu hướng theo. Ưu điểm là khả năng kiểm soát giảm mạnh bằng cách hạn chế hiệu quả lỗ giao dịch duy nhất. Tuy nhiên, khả năng thích nghi giữa các công cụ giao dịch khác nhau là yếu và cần điều chỉnh tham số. Nhìn chung, như một phiên bản giới thiệu của hệ thống giao dịch rùa, chiến lược này có thể được sử dụng để xác nhận hiệu quả của các quy tắc giao dịch rùa và cũng phục vụ như một chiến lược giao dịch định lượng cơ bản.

Nguyên tắc

Chiến lược chủ yếu dựa trên hai chỉ số: kênh Donchian và ATR.

Kênh Donchian được xây dựng bởi mức cao nhất và thấp nhất. Độ dài kênh mặc định là 20 ngày, được vẽ với mức cao nhất và thấp nhất 20 ngày.

ATR đo biến động của thị trường và được sử dụng để thiết lập stop loss. Thời gian ATR mặc định là 20 ngày. Chiến lược sử dụng 2N ATR như mức stop loss.

Logic giao dịch cụ thể là:

  1. Đi dài khi giá phá vỡ trên dải trên.

  2. Thiết lập stop loss ở mức giá thấp khi nhập trừ 2N ATR.

  3. Đóng vị trí dài khi giá phá vỡ dưới dải dưới.

  4. Đi ngắn khi giá phá vỡ dưới dải dưới.

  5. Thiết lập stop loss ở mức giá cao khi nhập cảnh cộng với 2N ATR.

  6. Đóng vị trí ngắn khi giá vượt qua dải trên.

Tóm lại, chiến lược xác định hướng xu hướng và tín hiệu đầu vào với kênh Donchian, và kiểm soát rủi ro bằng lệnh dừng lỗ dựa trên ATR, để theo xu hướng.

Phân tích lợi thế

Những lợi thế chính của chiến lược này là:

  1. Khả năng kiểm soát giảm mạnh. ATR dừng lỗ có thể hạn chế hiệu quả lỗ giao dịch duy nhất.

  2. Khả năng theo dõi xu hướng: Donchian Channel có thể xác định hiệu quả sự đột phá và thay đổi xu hướng.

  3. Áp dụng cho các công cụ biến động cao. ATR xem xét biến động thị trường trong việc thiết lập dừng lỗ.

  4. Logic đơn giản và rõ ràng, dễ hiểu và thực hiện.

  5. Tính linh hoạt để tối ưu hóa với ngôn ngữ Python.

Phân tích rủi ro

Một số rủi ro của chiến lược này cần lưu ý:

  1. Các thông số kênh cần tối ưu hóa cho các thiết bị và khung thời gian khác nhau.

  2. Rủi ro dừng lỗ liên tiếp: Nhiều yếu tố kích hoạt dừng lỗ có thể xảy ra trong điều kiện thị trường biến động.

  3. Các thông số ATR cần kiểm tra lại. ATR ảnh hưởng trực tiếp đến dừng lỗ và nên được điều chỉnh dựa trên biến động.

  4. Có khả năng giao dịch tần suất quá cao. Có thể xảy ra quá nhiều tín hiệu whipsaw dưới thị trường giới hạn phạm vi.

  5. Khả năng lợi nhuận hạn chế. Chiến lược tập trung vào dừng lỗ và không thể nắm bắt hoàn toàn lợi nhuận xu hướng.

  6. Không đủ stop loss trong các động thái biến động.

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

Chiến lược có thể được cải thiện trong các khía cạnh sau:

  1. Tối ưu hóa các thông số kênh cho các thiết bị khác nhau.

  2. Thêm bộ lọc để tránh quá nhiều tín hiệu dưới thị trường giới hạn phạm vi.

  3. Tối ưu hóa tham số thời gian ATR và tác động của thử nghiệm đối với stop loss.

  4. Thêm mục nhập kim tự tháp để tăng kích thước vị trí để tối đa hóa lợi nhuận xu hướng.

  5. Bao gồm các chỉ số khác như MACD, KD để tránh tín hiệu sai.

  6. Điều chỉnh stop loss dựa trên chi phí trượt và hoa hồng.

  7. Kiểm tra khả năng thích nghi trên các thiết bị khác nhau và tối ưu hóa các thông số.

Tóm lại

Là một phiên bản giới thiệu của hệ thống giao dịch rùa, chiến lược này có logic đơn giản và rõ ràng, khả năng kiểm soát giảm mạnh, và có thể xác nhận hiệu quả các nguyên tắc giao dịch rùa. Nhưng khả năng thích nghi giữa các công cụ là yếu và các tham số cần phải được điều chỉnh dựa trên các công cụ cụ thể. Với các tối ưu hóa như điều chỉnh tham số, thêm bộ lọc, điều này có thể phục vụ như một xu hướng cơ bản sau chiến lược giao dịch định lượng.


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

//@version=3
//Based on Turtle traders strategy: buy/sell on Donchian breakouts and stop loss on ATR 2x
// initial version considerations :
//// 1. Does not consider filter for avoiding new entries after winning trades (filtering rule from Turtle Strategy on 20 day breakout strategy) 
//// 2. Does not consider pyramiding (aditional entries after 1N price movements)

strategy("Turtle trading strategy (Donchian/ATR)", overlay=true)

enter_period = input(20, minval=1, title="Enter Channel")
exit_period = input(10, minval=1, title="Exit Channel")
offset_bar = input(0,minval=0, title ="Offset Bars")
direction = input("Long",options=["Long","Short"],title="Direction")
max_length = max(enter_period,exit_period)
atrmult = input(2,title="ATR multiplier (Stop Loss)")
atrperiod = input(20,title="ATR Period")

closed_pos = false
dir_long = direction == "Long"? true : false
atr = atr(atrperiod)
upper = dir_long ? highest(enter_period): highest(exit_period)
lower = dir_long ? lowest(exit_period): lowest(enter_period)
atrupper = close + atr
atrlower = close - atr
plotted_atr = dir_long ? atrlower : atrupper

//basis = avg(upper, lower)

l = plot(lower, style=line, linewidth=3, color=lime, offset=1)
u = plot(upper, style=line, linewidth=3, color=lime, offset=1)
a = plot(plotted_atr, style=line,linewidth=2,color=red,offset=1)
//plot(basis, color=yellow, style=line, linewidth=1, title="Mid-Line Average")
//break upper Donchian (with 1 candle offset) (buy signal)
break_up = (close >= upper[1])
//break lower Donchian (with 1 candle offset) (sell signal)
break_down = (close <= lower[1])
stop_loss = dir_long ? (close<=plotted_atr[1]) : (close>=plotted_atr[1])

if break_up and dir_long
    strategy.entry("buy", strategy.long, 1)
    closed_pos :=false
if (break_down or stop_loss) and dir_long
    strategy.close("buy")
    
if break_down and not dir_long
    strategy.entry("sell", strategy.short, 1)
    closed_pos :=false
if (break_up or stop_loss) and not dir_long
    strategy.close("sell")
    closed_pos :=true
    
losing_trade = strategy.equity[0]<strategy.equity[1]
//plotshape(losing_trade,text="Losing!")    
plotshape(stop_loss,style=dir_long?shape.labeldown:shape.labelup,text="Stop!")
//plot(strategy.equity)


    



Thêm nữa