Chiến lược tìm kiếm giao dịch dài hạn ngắn hạn

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

img

Tổng quan

Chiến lược này cố gắng xác định các cơ hội ngắn hạn mà Bitcoin có khả năng tăng lên bằng cách tìm kiếm các mô hình chênh lệch tăng trong chỉ số RSI, và do đó xác định các điểm đầu vào tốt cho các giao dịch dài.

Chiến lược logic

  1. Xác định chênh lệch tăng với chỉ số RSI

    • Xác định các thông số RSI (định mục 14 thời gian)
    • Tính toán giá trị RSI hiện tại
    • Kiểm tra xem sự khác biệt tăng giá sau đây có tồn tại không:
      • RSI hình thành một thấp hơn thấp
      • Giá hình thành thấp hơn cùng một lúc
      • RSI sau đó hình thành một mức thấp cao hơn
      • Giá sau đó hình thành một mức thấp cao hơn
  2. Kiểm tra xem giá trị RSI dưới ngưỡng

    • Định nghĩa ngưỡng thấp RSI (bên mặc định 40)
    • Nếu chỉ số RSI hiện tại thấp hơn ngưỡng này, nó có thể báo hiệu một điểm đầu vào dài
  3. Kiểm tra xem giá đóng là dưới mức thấp khác biệt trước đó

    • Nếu có, xác nhận thêm tín hiệu mua chênh lệch tăng
  4. Định nghĩa các điều kiện thoát khỏi lỗ dừng

    • Đặt tỷ lệ stop loss (bên mặc định 5%)
    • Ra khỏi nếu rút vốn đạt tỷ lệ này
  5. Xác định các điều kiện thoát khỏi lợi nhuận

    • Đặt ngưỡng cao RSI (bên mặc định 75)
    • RSI sẽ tăng trên ngưỡng này.

Phân tích lợi thế

  1. Sử dụng chênh lệch chỉ số RSI có thể nắm bắt hiệu quả các cơ hội tăng giá ngắn hạn

  2. Kết hợp với ngưỡng thấp RSI giúp xác định các điểm nhập cảnh cụ thể

  3. Các thiết lập dừng lỗ và lấy lợi nhuận giúp quản lý rủi ro và phần thưởng

  4. Chiến lược tham chiếu rất nhiều kinh nghiệm giao dịch thực tế với tín hiệu Bitcoin RSI và rất phù hợp với Bitcoin scalping dài

  5. Cài đặt tham số hợp lý làm cho chiến lược thích nghi với các điều kiện thị trường khác nhau và tốt cho giao dịch trực tiếp

Phân tích rủi ro

  1. Sự khác biệt của chỉ số RSI có thể thất bại, dẫn đến việc mất giao dịch nếu được xác định sai

  2. Một chỉ số duy nhất có xu hướng tạo ra tín hiệu sai, nên kết hợp với các chỉ số khác

  3. Cần phải chọn đúng các giá trị tham số, cài đặt không đúng ảnh hưởng đến lợi nhuận

  4. Giao dịch dài cần xem xét xu hướng tổng thể, tránh giao dịch chống lại xu hướng

  5. Cần phải cảnh giác với chi phí giao dịch, giao dịch tần số cao ảnh hưởng đến lợi nhuận

  6. Cần kiểm tra lại và tối ưu hóa các thông số thường xuyên dựa trên thị trường thay đổi

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

  1. Xem xét thêm các chỉ số khác như trung bình động cho điều kiện bộ lọc để giảm tín hiệu sai

  2. Kiểm tra các thiết lập thời gian khác nhau trên mỗi khung thời gian để tìm kết hợp tối ưu

  3. Kết hợp phân tích xu hướng khung thời gian cao hơn để tránh mua theo xu hướng đảo ngược

  4. Thực hiện stop loss động dần dần tăng stop khi mức lợi nhuận tăng lên

  5. Điều chỉnh tỷ lệ dừng lỗ dựa trên kích thước vị trí cụ thể

  6. Giới thiệu máy học để tối ưu hóa tham số tự động

Kết luận

Chiến lược này nhằm mục đích xác định các cơ hội phục hồi ngắn hạn của Bitcoin bằng cách phát hiện các chênh lệch tăng RSI và xác định các điểm đầu vào dài tốt. Chiến lược này đơn giản và hiệu quả, kết hợp rất nhiều kinh nghiệm giao dịch thực tế, làm cho nó rất phù hợp với giao dịch dài Bitcoin. Tuy nhiên, việc dựa vào một chỉ số duy nhất có xu hướng tạo ra tín hiệu sai, vì vậy nó nên được kết hợp với các chỉ số khác.


/*backtest
start: 2023-11-02 00:00:00
end: 2023-11-09 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Bullish Divergence Short-term Long Trade Finder", overlay=false)

max_range = 50 
min_range = 5
///pivot_left = 25
pivot_right = 5

//Inputs
src = input(close, title="Source")
rsiBearCondMin = input.int(50, title="RSI Bearish Condition Minimum")
rsiBearCondSellMin = input.int(60, title="RSI Bearish Condition Sell Min")
rsiBullCondMin = input.int(40, title="RSI Bull Condition Minimum")
pivot_left = input.int(25, title="Look Back this many candles")
SellWhenRSI = input.int(75, title="RSI Sell Value")
StopLossPercent = input.int(5, title="Stop loss Percentage")
rsiPeriod = input.int(14, title="RSI Length")
rsiOversold = input.int(30, title="RSI Oversold Level")
rsiOverbought = input.int(70, title="RSI Overbought Level")

//RSI Function/ value 
rsi_value = ta.rsi(src, rsiPeriod)
rsi_hour = request.security(syminfo.tickerid,'60',rsi_value)
rsi_4hour = request.security(syminfo.tickerid,'240',rsi_value)
rsi_Day = request.security(syminfo.tickerid,'D',rsi_value)
plot(rsi_value, title="RSI", linewidth = 2, color = color.black, display =display.all)
hline(50, linestyle = hline.style_dotted)
rsi_ob = hline(70, linestyle=hline.style_dotted)
rsi_os = hline(30, linestyle=hline.style_dotted)
fill(rsi_ob, rsi_os, color.white)
SL_percent = (100-StopLossPercent)/100 

pivot_low_true = na(ta.pivotlow(rsi_value, pivot_left, pivot_right)) ? false : true

//create a function that returns truee/false
confirm_range(x) => 
    bars = ta.barssince(x == true) //counts the number of bars since thee last time condition was true
    min_range <= bars and bars <= max_range // makees sure bars is less than max_range(50) and greater than min_range(5) 


// RSI higher check / low check
RSI_HL_check = rsi_value<rsiBullCondMin and rsi_value > ta.valuewhen(pivot_low_true and rsi_value<rsiBullCondMin, rsi_value,1) and confirm_range(pivot_low_true[1]) 

// price check for lower low
price_ll_check = low < ta.valuewhen(pivot_low_true, low, 1)

bullCond = price_ll_check and RSI_HL_check and pivot_low_true

//pivot_high_true = na(ta.pivothigh(rsi_value, pivot_left, pivot_right))  ? false : true
pivot_high_true = na(ta.pivothigh(rsi_value, pivot_left, pivot_right))   ? false : true

// RSI Lower check / high check ensuring that the RSI dips below 30 to start divergence 
RSI_LH_check = rsi_value < ta.valuewhen(pivot_high_true and rsi_value>rsiBearCondMin, rsi_value,1) and confirm_range(pivot_high_true[1]) //and rsi_value[pivot_right] >= 65

// price check for lower low
price_hh_check = high > ta.valuewhen(pivot_high_true, high, 1)

bearCond = price_hh_check and RSI_LH_check and pivot_high_true and rsi_value[3] > rsiBearCondSellMin

plot(pivot_low_true ? rsi_value : na, offset=-5, linewidth=3, color=(bullCond ? color.green : color.new(color.white, 100)))

plotshape(bullCond ? rsi_value : na , text = "BUY", style =  shape.labelup, location = location.absolute, color = color.green, offset =0, textcolor = color.white )

plot(pivot_low_true ? rsi_value : na, offset=-5, linewidth=3, color=(bearCond ? color.red : color.new(color.white, 100)))

plotshape(bearCond ? rsi_value : na , text = "Sell", style =  shape.labelup, location = location.absolute, color = color.red, offset =0, textcolor = color.white )
//[bbUpperBand, bbMiddleBand, bbLowerBand] = ta.bb(src, bbPeriod, bbDev)

//Entry Condition
longCondition = false

//bullEntry = bullCond and RSI_HL_check and confirm_range(pivot_low_true[1])
if bullCond and close < ta.valuewhen(pivot_low_true, low, 1) and rsi_hour <40 ///and rsi_4hour<40 //and rsi_Day<50
    strategy.entry("Long", strategy.long)
    
//Exit Condition
if (strategy.position_size > 0 and close < strategy.position_avg_price*SL_percent)
    strategy.close("Long")
if (strategy.position_size > 0 and (rsi_value > SellWhenRSI or bearCond))
    strategy.close("Long")


Thêm nữa