Chiến lược giao dịch theo phạm vi dựa trên bộ dao động ngẫu nhiên

ATR
Ngày tạo: 2024-06-17 14:52:10 sửa đổi lần cuối: 2024-06-17 14:52:10
sao chép: 0 Số nhấp chuột: 568
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch theo phạm vi dựa trên bộ dao động ngẫu nhiên

Tổng quan

Chiến lược này sử dụng chỉ số dao động ngẫu nhiên (Stochastic Oscillator) để xác định tình trạng quá mua và quá bán của thị trường, kích hoạt giao dịch với các tham số rủi ro và lợi nhuận được xác định trước, với hy vọng kiếm lợi nhuận trong khu vực giao dịch biến động. Ý tưởng chính của chiến lược này là mua ở mức thấp trong khu vực giao dịch và bán ở mức cao trong khu vực giao dịch, đồng thời kiểm soát chặt chẽ rủi ro.

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

  1. Khi chỉ số dao động ngẫu nhiên giảm xuống mức bán quá mức ((20), chiến lược mở nhiều vị trí; khi chỉ số dao động ngẫu nhiên vượt qua mức mua quá mức ((80), chiến lược mở lỗ.
  2. Mức dừng lỗ và ngăn chặn được thiết lập dựa trên 2 lần sóng thực trung bình ((ATR), trong khi rủi ro cho mỗi giao dịch được kiểm soát trong 1% lợi nhuận tài khoản.
  3. Để ngăn chặn giao dịch quá mức, chiến lược buộc phải có khoảng cách ít nhất 20 đường K giữa mỗi giao dịch, để cho thời gian nguội và tránh biến động.

Lợi thế chiến lược

  1. Chiến lược này có khả năng nắm bắt biến động giá trong các khu vực giao dịch biến động, mua ở mức thấp và bán ở mức cao để kiếm lợi nhuận.
  2. Chiến lược này sử dụng các biện pháp quản lý rủi ro nghiêm ngặt, bao gồm các lệnh dừng và dừng dựa trên ATR và rủi ro cố định 1% cho mỗi giao dịch, giúp kiểm soát sự rút lui và tổn thất giao dịch đơn lẻ.
  3. Bằng cách thiết lập khoảng cách tối thiểu giữa các giao dịch (20 đường K), chiến lược tránh giao dịch thường xuyên và bị lừa bởi tiếng ồn thị trường.
  4. Chiến lược này có logic rõ ràng, dễ hiểu và dễ thực hiện, phù hợp với nhiều môi trường thị trường.

Rủi ro chiến lược

  1. Sự thành công của chiến lược phụ thuộc rất nhiều vào việc xác định đúng các vùng giao dịch, nếu không xác định chính xác các vùng giao dịch, có thể dẫn đến giao dịch thua lỗ.
  2. Chiến lược này có thể bỏ lỡ cơ hội giao dịch theo xu hướng nếu thị trường phá vỡ các khu vực giao dịch và hình thành xu hướng.
  3. Mặc dù có các biện pháp quản lý rủi ro trong chiến lược, trong các điều kiện thị trường khắc nghiệt, tổn thất có thể vượt quá dự kiến.
  4. Các tham số chiến lược (như mức quá mua / quá bán, ATR, v.v.) cần được tối ưu hóa cho các điều kiện thị trường khác nhau, các tham số không phù hợp có thể dẫn đến hiệu suất kém.

Hướng tối ưu hóa chiến lược

  1. Cân nhắc kết hợp với các chỉ số kỹ thuật khác (như MACD, RSI, v.v.) để xác nhận tín hiệu giao dịch và tăng độ tin cậy tín hiệu.
  2. Tham gia vào các cơ chế dừng và dừng động, chẳng hạn như điều chỉnh điểm dừng khi giá di chuyển theo hướng thuận lợi để có được tỷ lệ lợi nhuận cao hơn.
  3. Đối với việc nhận dạng các phân khúc giao dịch, có thể sử dụng các công nghệ tiên tiến hơn, chẳng hạn như thuật toán học máy, để cải thiện độ chính xác.
  4. Trong thị trường xu hướng, bạn có thể xem xét giới thiệu bộ lọc xu hướng để tránh giao dịch trong thị trường xu hướng.

Tóm tắt

Chiến lược giao dịch trong khu vực dao động dựa trên chỉ số dao động ngẫu nhiên cố gắng kích hoạt giao dịch trong khu vực giao dịch được xác định trước bằng cách sử dụng tín hiệu mua và bán quá mức của chỉ số ngẫu nhiên. Chiến lược này kiểm soát rủi ro thông qua quản lý rủi ro nghiêm ngặt và khoảng thời gian giao dịch. Mặc dù có một số ưu điểm, thành công của chiến lược phụ thuộc rất nhiều vào việc xác định đúng khu vực giao dịch.

Mã nguồn chiến lược
/*backtest
start: 2023-06-11 00:00:00
end: 2024-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Range Trading with Stochastic", overlay=true)

// Input Parameters
overboughtLevel = input.int(80, title="Overbought Level", minval=1, maxval=100)
oversoldLevel = input.int(20, title="Oversold Level", minval=1, maxval=100)
stochLength = input.int(14, title="Stochastic Length", minval=1)
riskPerTrade = input.float(0.01, title="Risk per Trade (%)", minval=0.01, maxval=100, step=0.01)
barsBetweenTrades = input.int(20, title="Bars Between Trades", minval=1)

// Calculate Stochastic Oscillator
k = ta.sma(ta.stoch(close, high, low, stochLength), 3)
d = ta.sma(k, 3)

// Variables to Track Time Since Last Trade
var lastTradeBar = 0
barsSinceLastTrade = bar_index - lastTradeBar

// Risk Management
atr = ta.atr(14)
stopLoss = 2 * atr
takeProfit = 2 * atr
riskAmount = strategy.equity * riskPerTrade / 100
positionSize = 1

// Entry Conditions
longCondition = k < oversoldLevel and strategy.position_size == 0 and barsSinceLastTrade >= barsBetweenTrades
shortCondition = k > overboughtLevel and strategy.position_size == 0 and barsSinceLastTrade >= barsBetweenTrades

// Entry/Exit Orders
if longCondition
    strategy.entry("Long", strategy.long, qty=positionSize)
    strategy.exit("Long Exit", "Long", stop=close - stopLoss, limit=close + takeProfit)
    lastTradeBar := bar_index // Update last trade bar
if shortCondition
    strategy.entry("Short", strategy.short, qty=positionSize)
    strategy.exit("Short Exit", "Short", stop=close + stopLoss, limit=close - takeProfit)
    lastTradeBar := bar_index // Update last trade bar

// Plot Stochastic
plot(k, color=color.blue, title="%K")
plot(d, color=color.orange, title="%D")
hline(overboughtLevel, color=color.red, title="Overbought")
hline(oversoldLevel, color=color.green, title="Oversold")