Chiến lược dừng lỗ và chốt lời động RSI


Ngày tạo: 2024-03-19 15:54:01 sửa đổi lần cuối: 2024-03-19 15:54:01
sao chép: 1 Số nhấp chuột: 623
1
tập trung vào
1617
Người theo dõi

Chiến lược dừng lỗ và chốt lời động RSI

Ghi chú chiến lược: Chiến lược này dựa trên mối quan hệ giữa chỉ số RSI và giá, để tối ưu hóa hiệu suất giao dịch bằng cách điều chỉnh động điểm dừng lỗ. Ý tưởng chính của chiến lược là sử dụng tính năng mua quá mức của chỉ số RSI, kết hợp với thay đổi giá và khối lượng giao dịch, dừng lại kịp thời khi RSI xuất hiện, đồng thời kiểm soát rủi ro bằng cách dừng động.

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

  1. Tính toán giá trị của chỉ số RSI và xác định ngưỡng quá mua và quá bán dựa trên các tham số đầu vào.
  2. Bằng cách so sánh giá trị RSI hiện tại với giá trị RSI của các đường K trước đó, để xác định xem có hình dạng đỉnh ((isPeak) hay hình dạng đáy ((isBottom) không.
  3. Khi hình thức đỉnh xuất hiện, nếu giá hiện tại cao hơn mức cao của đỉnh trước và khối lượng giao dịch nhỏ hơn khối lượng giao dịch của đỉnh trước, sẽ tạo ra tín hiệu bán.
  4. Khi hình dạng đáy xuất hiện, một tín hiệu mua sẽ được tạo ra nếu giá hiện tại thấp hơn mức thấp của đáy trước và khối lượng giao dịch nhỏ hơn khối lượng giao dịch của đáy trước.
  5. Sau khi tín hiệu mua được kích hoạt, dừng lại khi giá quay trở lại mức thấp trước đó hoặc khối lượng giao dịch nhỏ hơn khối lượng giao dịch trước đó.
  6. Sau khi kích hoạt tín hiệu bán, dừng lại khi giá tăng trở lại mức cao nhất trước đó hoặc khối lượng giao dịch thấp hơn khối lượng giao dịch trước đó.
  7. Sau khi mở vị trí, giá dừng lỗ được thiết lập là một tỷ lệ nhất định của giá mở vị trí ((2%)), để kiểm soát rủi ro.

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

  1. Bằng cách dừng động, bạn có thể khóa lợi nhuận kịp thời trong giai đoạn đầu của xu hướng đảo ngược và tăng lợi nhuận chiến lược.
  2. Sử dụng sự thay đổi khối lượng giao thông như một điều kiện phán đoán phụ, có thể lọc hiệu quả tín hiệu giả và tăng độ chính xác của tín hiệu.
  3. Cài đặt dừng lỗ có thể kiểm soát hiệu quả lỗ hổng rủi ro cho giao dịch đơn lẻ và giảm rút lại chiến lược.
  4. Các tham số có thể điều chỉnh, phù hợp với các môi trường thị trường khác nhau và các loại giao dịch.

Rủi ro chiến lược:

  1. Trong thị trường chấn động, chỉ số RSI có thể xuất hiện thường xuyên trong các tín hiệu quá mua quá bán, dẫn đến việc chiến lược tạo ra nhiều tín hiệu giả.
  2. Cài đặt dừng lỗ có thể dẫn đến một sự rút lui lớn trong chiến lược trong thời gian ngắn.
  3. Chiến lược này có thể hoạt động kém hơn chiến lược theo dõi xu hướng trong thị trường xu hướng.

Định hướng tối ưu hóa:

  1. Các chỉ số kỹ thuật khác như MACD, Brinband, v.v. có thể được xem xét để cải thiện độ tin cậy của tín hiệu.
  2. Tối ưu hóa ngưỡng dừng lỗ, điều chỉnh theo đặc điểm của các giống khác nhau và động lực của môi trường thị trường.
  3. Tham gia vào mô-đun quản lý vị trí, điều chỉnh kích thước vị trí theo biến động thị trường và tình trạng rủi ro tài khoản.
  4. Tối ưu hóa tham số cho chiến lược, tìm ra sự kết hợp tham số tối ưu nhất.

Tóm lại: Chiến lược dừng lỗ động của RSI thông qua mối quan hệ sai lệch của chỉ số RSI với giá, kết hợp với sự thay đổi khối lượng giao dịch, dừng lỗ động vào thời điểm bắt đầu xu hướng, đồng thời thiết lập dừng lỗ động để kiểm soát rủi ro. Ưu điểm của chiến lược này là có thể khóa lợi nhuận vào thời điểm bắt đầu xu hướng đảo ngược, giảm rút lại chiến lược, đồng thời có một số tính thích ứng. Tuy nhiên, trong thị trường bất ổn, chiến lược này có thể có nhiều tín hiệu sai, do đó cần giới thiệu các chỉ số kỹ thuật khác và tối ưu hóa giá trị dừng lỗ để nâng cao hiệu suất chiến lược. Ngoài ra, việc quản lý vị trí và tối ưu hóa tham số cũng là một hướng quan trọng để nâng cao sự ổn định và lợi nhuận của chiến lược.

Mã nguồn chiến lược
/*backtest
start: 2024-03-11 00:00:00
end: 2024-03-15 09:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("RMM_byMR", overlay=true)

// RSI uzunluğu girişi
rsiLength = input(14, title="RSI Uzunluğu")

// Tepe ve dip seviyeleri için girişler
overboughtLevel = input(70, title="Aşırı Alım Seviyesi")
oversoldLevel = input(30, title="Aşırı Satım Seviyesi")

// RSI hesaplama
rsiValue = rsi(close, rsiLength)

// Son tepe noktalarını tespit etme // Son dip noktalarını tespit etme
isPeak = rsiValue[2] > overboughtLevel and rsiValue[2] > rsiValue[1] and rsiValue[2] > rsiValue[3] and (rsiValue[1] > rsiValue or rsiValue[3] > rsiValue[4])
isBottom = rsiValue[2] < oversoldLevel and rsiValue[2] < rsiValue[1] and rsiValue[2] < rsiValue[3] and (rsiValue[1] < rsiValue or rsiValue[3] < rsiValue[4])

// Önceki tepe noktalarını tespit etme
prevPeak = valuewhen(isPeak, rsiValue[2], 1)
prevPeakHighPrice = valuewhen(isPeak, high[2], 1)
volumePeak = valuewhen(isPeak, volume[1]+volume[2]+volume[3], 1)
prevPeakBarIndex = valuewhen(isPeak, bar_index, 1)

// Önceki dip noktalarını tespit etme
prevBottom = valuewhen(isBottom, rsiValue[2], 1)
prevBottomLowPrice = valuewhen(isBottom, low[2], 1)
volumeBottom = valuewhen(isBottom, volume[1]+volume[2]+volume[3], 1)
prevBottomBarIndex = valuewhen(isBottom, bar_index, 1)

// Tepe noktasında satış sinyali
isSellSignal = prevPeakBarIndex > prevBottomBarIndex and isPeak and rsiValue[2] < prevPeak and high[2] > prevPeakHighPrice and (volume[1]+volume[2]+volume[3]) < volumePeak
isBuyTakeProfit = isPeak and ((rsiValue[2] < prevPeak and high[2] > prevPeakHighPrice) or (rsiValue[2] < prevPeak and (volume[1]+volume[2]+volume[3]) < volumePeak))

// Dip noktasında alış sinyali
isBuySignal = prevBottomBarIndex > prevPeakBarIndex and isBottom and rsiValue[2] > prevBottom and low[2] < prevBottomLowPrice and (volume[1]+volume[2]+volume[3]) < volumeBottom
isSellTakeProfit = isBottom and ((rsiValue[2] > prevBottom and low[2] < prevBottomLowPrice) or (rsiValue[2] > prevBottom and (volume[1]+volume[2]+volume[3]) < volumeBottom))

sellTakeProfit = valuewhen(isSellTakeProfit, low, 1)
buyTakeProfit = valuewhen(isBuyTakeProfit, high, 1)

// isSellTakeProfit koşulu için işaretlemeyi yap
plotshape(isSellTakeProfit, style=shape.triangleup, location=location.abovebar, color=color.green, size=size.small, title="Sell Take Profit", offset=-2) 

// isBuyTakeProfit koşulu için işaretlemeyi yap
plotshape(isBuyTakeProfit, style=shape.triangledown, location=location.belowbar, color=color.red, size=size.small, title="Buy Take Profit", offset=-2)

buyComment = "Buy \n Rsi:" + tostring(round(rsiValue[2], 2)) + " \n Low:" + tostring(round(low[2],2)) + " \n Hacim:" + tostring(round(volume[1]+volume[2]+volume[3],2))
sellComment = "Sell \n Rsi:" + tostring(round(rsiValue[2], 2)) + " \n High:" + tostring(round(high[2],2)) + " \n Hacim:" + tostring(round(volume[1]+volume[2]+volume[3],2)) 

// Alış sinyali durumunda uzun pozisyon aç
if (isBuySignal)
    strategy.entry("Buy", strategy.long, comment = buyComment )
    strategy.exit("SL", "Buy", stop=close * 0.98)

// Satış sinyali durumunda kısa pozisyon aç
if (isSellSignal)
    strategy.entry("Sell", strategy.short, comment = sellComment )
    strategy.exit("SL","Sell", stop=close * 1.02)
// Limit değerini sonradan belirleme


// Alış sinyali durumunda uzun pozisyon kapat
if (isBuyTakeProfit)
    strategy.close("Buy", comment="TP")

// Satış sinyali durumunda kısa pozisyon kapat
if (isSellTakeProfit)
    strategy.close("Sell", comment="TP")