Chiến lược giao dịch đảo ngược đột phá


Ngày tạo: 2023-10-25 12:09:40 sửa đổi lần cuối: 2023-10-25 12:38:23
sao chép: 0 Số nhấp chuột: 425
1
tập trung vào
1176
Người theo dõi

Chiến lược giao dịch đảo ngược đột phá

Tổng quan

Chiến lược giao dịch phá vỡ ngược là một chiến lược giao dịch dựa trên việc phá vỡ giá lên hoặc xuống liên tục. Chiến lược này được thực hiện bằng cách thiết lập chu kỳ giá tăng hoặc giảm liên tục, sau khi giá tạo ra một xu hướng nhất định, để hoạt động ngược để kiếm lợi nhuận.

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

Chiến lược này được thực hiện thông qua các phần sau:

  1. Cài đặt chiều dài chu kỳ của giá tăng và giảm liên tiếp, tức là ConscutiveBarsUp và ConscutiveBarsDown, để kích hoạt tín hiệu giao dịch sau khi xu hướng giá chu kỳ hiện tại đạt đến chiều dài thiết lập.

  2. Tính toán giá hiện tại so với giá của chu kỳ trước khi giá hiện tại tăng hoặc giảm theo chu kỳ ups và dns.

  3. Thiết lập phạm vi thời gian của lần hồi đáp, hạn chế chính sách chỉ hoạt động trong thời gian hồi đáp bằng time_cond

  4. Thiết lập thời gian giao dịch hàng ngày, giới hạn tín hiệu giao dịch chỉ trong khoảng thời gian được thiết lập thông quatimetobuy.

  5. Khi chu kỳ tăng giá liên tục đạt đến độ dài đặt, phát tín hiệu nhiều, thông qua strategy.long; khi chu kỳ giảm giá liên tục đạt đến độ dài đặt, phát tín hiệu ngắn, thông qua strategy.short

  6. Bạn có thể đặt giá dừng lỗ và giá dừng. Đặt giá dừng ngắn hạn khi giao dịch giao dịch và giá dừng dài hạn khi giao dịch. Đặt giá dừng dài hạn khi giao dịch và giá dừng ngắn hạn khi giao dịch.

  7. Bạn có thể thiết lập thông báo khi gửi tín hiệu giao dịch.

  8. Dựa trên các thông số và giá trị trên, phát ra tín hiệu làm nhiều hoặc làm ít khi phù hợp.

Phân tích lợi thế

Chiến lược này có một số lợi thế:

  1. Để nắm bắt các điểm đảo ngược giá, hoạt động đảo ngược có thể thu được lợi nhuận tốt hơn. Khi giá tạo ra xu hướng, thực hiện hoạt động đảo ngược có thể kiếm lợi nhuận khi giá đảo ngược.

  2. Các tham số có thể được cấu hình linh hoạt, có thể điều chỉnh tham số theo thị trường. Có thể điều chỉnh số chu kỳ tăng và giảm liên tục, điều chỉnh điểm dừng lỗ, giới hạn thời gian giao dịch, có thể tối ưu hóa tham số theo tình hình thực tế.

  3. Bạn có thể thêm lệnh dừng lỗ để kiểm soát rủi ro. Bạn có thể đặt trước lệnh dừng lỗ và lệnh dừng để giúp kiểm soát rủi ro giao dịch.

  4. Có thể thiết lập tin nhắn nhắc giao dịch, để dễ dàng tự động hóa giao dịch. Có thể thiết lập tin nhắn nhắc khi gửi tín hiệu giao dịch, kết hợp với hệ thống giao dịch tự động.

  5. Có thể thiết lập phạm vi thời gian phản hồi để dễ dàng kiểm tra chiến lược. Thêm các thiết lập phạm vi thời gian phản hồi để dễ dàng quan sát hiệu quả của chiến lược trong các điều kiện thị trường khác nhau.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro cần lưu ý:

  1. Cần tránh các sự kiện tin tức quan trọng. Không thể xác định xu hướng giá khi phát hành tin tức quan trọng, chiến lược sẽ đồng thời phát đi nhiều tín hiệu giảm giá, gây ra tổn thất. Cần tránh thời gian phát hành tin tức tài chính quan trọng.

  2. Khi không có xu hướng rõ ràng, hoạt động đảo ngược không hiệu quả và cần thận trọng.

  3. Rủi ro phù hợp với dữ liệu phản hồi. Chiến lược tối ưu hóa để tránh phụ thuộc quá nhiều vào dữ liệu phản hồi, dữ liệu phản hồi không đại diện cho xu hướng trong tương lai.

  4. Tần suất giao dịch quá cao dễ bị phá giá. Nếu chu kỳ giao dịch được thiết lập quá ngắn, tần suất giao dịch quá cao, không có lợi cho lợi nhuận ổn định lâu dài.

  5. Các chiến lược dừng lỗ có thể được tối ưu hóa thích hợp để giảm rủi ro. Các ngăn chặn dừng lỗ cố định hiện có có thể được tối ưu hóa hơn nữa để theo dõi xu hướng.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa hơn nữa ở những khía cạnh sau:

  1. Tăng cơ chế phán đoán xu hướng, tránh đảo ngược hỗn loạn của thị trường không xu hướng. Có thể phát hiện các chỉ số như tỷ lệ biến động giá, kênh, đánh giá mức độ xu hướng, tránh bỏ lỡ điểm đảo ngược giá.

  2. Tối ưu hóa chiến lược dừng lỗ để có thể tự động điều chỉnh theo biến động thị trường. Có thể sử dụng các phương pháp như dừng phần trăm số dư, dừng ATR, để thiết lập dừng lỗ thông minh hơn.

  3. Thêm chỉ số lượng năng lượng để đánh giá. Kết hợp với các chỉ số như biến đổi khối lượng giao dịch, tránh các tín hiệu sai lệch chỉ dựa trên hình dạng K-line.

  4. Sự kết hợp nhiều giống. Sử dụng chiến lược cho các giống khác nhau để kết hợp, có thể phân tán rủi ro của một giống.

  5. Tối ưu hóa tham số và học máy. Thu thập nhiều dữ liệu lịch sử hơn, sử dụng phương pháp học máy để tự động tối ưu hóa tham số, làm cho chiến lược ổn định hơn.

Tóm tắt

Chiến lược giao dịch đột phá ngược hoạt động ngược bằng cách nắm bắt điểm biến đổi giá, có thể có được tín hiệu giao dịch tốt. Ưu điểm của chiến lược này là cấu hình linh hoạt, có thể kiểm soát rủi ro, phù hợp với giao dịch tự động. Nhưng cũng có một số rủi ro, cần phải liên tục tối ưu hóa và hoàn thiện các tham số và chiến lược để có thể kiếm được lợi nhuận ổn định lâu dài.

Mã nguồn chiến lược
/*backtest
start: 2023-10-17 00:00:00
end: 2023-10-24 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// Strategy
strategy("Up/Down Strategy - Contrarian", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)

consecutiveBarsUp = input(1, title='Consecutive Bars Up')
consecutiveBarsDown = input(1, title='Consecutive Bars Down')

price = close

ups = 0.0
ups := price > price[1] ? nz(ups[1]) + 1 : 0

dns = 0.0
dns := price < price[1] ? nz(dns[1]) + 1 : 0

// Strategy Backtesting
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true

//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = true
timetoclose = true

// Stop Loss & Take Profit Tick Based
enablesltp = input(false, title='Enable Take Profit & Stop Loss')
stopTick = input(5.0, title='Stop Loss Ticks', type=input.float) / 100
takeTick = input(10.0, title='Take Profit Ticks', type=input.float) / 100

longStop = strategy.position_avg_price - stopTick
shortStop = strategy.position_avg_price + stopTick
shortTake = strategy.position_avg_price - takeTick
longTake = strategy.position_avg_price + takeTick

plot(strategy.position_size > 0 and enablesltp ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesltp ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enablesltp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enablesltp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")

// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")

// Strategy Execution
if (dns >= consecutiveBarsDown) and time_cond and timetobuy
    strategy.entry("Long", strategy.long, stop = high + syminfo.mintick, alert_message = message_enterlong)
    
if (ups >= consecutiveBarsUp) and time_cond and timetobuy
    strategy.entry("Short", strategy.short, stop = low + syminfo.mintick, alert_message = message_entershort)
    
if strategy.position_size < 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size > 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closeshort)
    
if strategy.position_size < 0 and enablesltp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size > 0 and enablesltp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)