Chiến lược giao dịch lưới RSI đa thời kỳ

Tác giả:ChaoZhang, Ngày: 2023-11-23 17:50:13
Tags:

img

Tổng quan

Chiến lược này sử dụng 7 chỉ số RSI với các khung thời gian khác nhau để xác định xu hướng thị trường và thiết lập các vị trí lưới để giao dịch lưới hiệu quả khi các chỉ số RSI đang biến động.

Chiến lược logic

  1. Chiến lược này sử dụng 7 chỉ số RSI với các khung thời gian khác nhau (1 phút, 5 phút, 15 phút, 30 phút, 1 giờ, 2 giờ và 1 ngày). Khi tất cả 7 chỉ số RSI đồng thời thấp hơn đường mua quá mức, một tín hiệu mua được tạo ra. Khi tất cả 7 chỉ số RSI đồng thời cao hơn đường bán quá mức, một tín hiệu bán được tạo ra.

  2. Dựa trên tín hiệu mua và bán, 20 lệnh với khoảng thời gian giá tỷ lệ phần trăm cố định được đặt xung quanh giá hiện tại. ví dụ: nếu giá nhập là 100 đô la và khoảng thời gian giữa các lệnh là 2%, giá lệnh sẽ là 98 đô la, 96 đô la... xuống còn 60 đô la.

  3. Khi giá đạt một trong các giá lệnh, một lệnh được thực hiện và một vị trí được thiết lập.

Ưu điểm của Chiến lược

  1. Sử dụng nhiều chỉ số tránh hiểu sai xu hướng thị trường. 7 khung thời gian bao gồm các thay đổi xu hướng ngắn hạn và trung bình dài hạn để đánh giá chính xác.

  2. Chỉ số RSI xác định đáng tin cậy mức mua quá mức và bán quá mức, tránh mua cao và bán thấp.

  3. Các đơn đặt hàng lưới có hiệu quả vào các vị trí, tránh đuổi theo các cuộc biểu tình và giảm.

  4. Các thiết lập lấy lợi nhuận và dừng lỗ giúp quản lý rủi ro và giảm rủi ro lỗ trong các động thái cực đoan.

Rủi ro và giải pháp

  1. Động thái giá mạnh có thể xâm nhập vào lưới. Điều này có thể được giải quyết bằng cách thiết lập khoảng cách lưới hợp lý và thêm vào biên.

  2. Đặt dừng lỗ quá gần có thể gây ra chi phí trượt không cần thiết.

  3. Một số chỉ số RSI có thể tạo ra tín hiệu không chính xác.

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

  1. Các sự kết hợp khác nhau của các tham số và logic phán đoán thay thế có thể được thử nghiệm để tinh chỉnh các chiến lược nhập cảnh và xuất cảnh.

  2. Tích hợp các số liệu biến động để tự động điều chỉnh khoảng thời gian lưới, với khoảng thời gian rộng hơn trong môi trường biến động cao hơn.

  3. Thêm các mô-đun quản lý vốn để thay đổi động kích thước vị trí tối đa, khoảng cách lưới vv dựa trên vốn chủ sở hữu tài khoản.

Kết luận

Chiến lược này kết hợp các chỉ số RSI nhiều khung thời gian để xác định xu hướng thị trường, thiết lập hiệu quả các vị trí lưới trong các thị trường dao động. Những lợi thế của tối ưu hóa chi phí, lấy lợi nhuận, cắt giảm lỗ và kiểm soát rủi ro làm cho nó phù hợp với các nhà giao dịch tìm cách tận dụng các thị trường dao động trong khi dung nạp rủi ro xác định.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["MinLot",0.001,358374]]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © rrolik66

//@version=4
strategy(title="7-RSI strategy", overlay=true)

// inputs
src = input(close, "Source RSI", type = input.source)
bot_res = input(title="Bot period", type=input.resolution, defval="1")
srcin_bot = input(ohlc4, "Source Bot", type = input.source)
src_bot = security(syminfo.tickerid, bot_res, srcin_bot)

tradeDirection = input(title="Trade Direction", type=input.string,
     options=["Long Bot", "Short Bot"], defval="Long Bot")


rsi1_res = input(title="RSI-1 period", type=input.resolution, defval="1", group="indicators")
rsi1_Len = input(14, minval=1, title="RSI-1 Length", group="indicators")
rsi2_res = input(title="RSI-2 period", type=input.resolution, defval="5", group="indicators")
rsi2_Len = input(14, minval=1, title="RSI-2 Length", group="indicators")
rsi3_res = input(title="RSI-3 period", type=input.resolution, defval="15", group="indicators")
rsi3_Len = input(14, minval=1, title="RSI-3 Length", group="indicators")
rsi4_res = input(title="RSI-4 period", type=input.resolution, defval="30", group="indicators")
rsi4_Len = input(14, minval=1, title="RSI-4 Length", group="indicators")
rsi5_res = input(title="RSI-5 period", type=input.resolution, defval="60", group="indicators")
rsi5_Len = input(14, minval=1, title="RSI-5 Length", group="indicators")
rsi6_res = input(title="RSI-6 period", type=input.resolution, defval="120", group="indicators")
rsi6_Len = input(14, minval=1, title="RSI-6 Length", group="indicators")
rsi7_res = input(title="RSI-7 period", type=input.resolution, defval="1D", group="indicators")
rsi7_Len = input(14, minval=1, title="RSI-7 Length", group="indicators")

longProfitPerc = input(title="Long Bot Take Profit (%)",
     type=input.float, minval=0.0, step=0.05, defval=0.5, group="Long Bot") * 0.01
st_long_orders = input(title="Long Bot Step orders (%)",
     type=input.float, minval=0.0, step=0.1, defval=2.0, group="Long Bot") * 0.01

rsi1_low = input(100, title="RSI-1 <", group="Long Bot")
rsi2_low = input(100, title="RSI-2 <", group="Long Bot")
rsi3_low = input(100, title="RSI-3 <", group="Long Bot")
rsi4_low = input(100, title="RSI-4 <", group="Long Bot")
rsi5_low = input(100, title="RSI-5 <", group="Long Bot")
rsi6_low = input(100, title="RSI-6 <", group="Long Bot")
rsi7_low = input(100, title="RSI-7 <", group="Long Bot")

shortProfitPerc = input(title="Short Bot Take Profit (%)",
     type=input.float, minval=0.0, step=0.05, defval=0.5, group="Short Bot") * 0.01
st_short_orders = input(title="Short Bot Step orders (%)",
     type=input.float, minval=0.0, step=0.1, defval=2.0, group="Short Bot") * 0.01

rsi1_up = input(0, title="RSI-1 >", group="Short Bot")
rsi2_up = input(0, title="RSI-2 >", group="Short Bot")
rsi3_up = input(0, title="RSI-3 >", group="Short Bot")
rsi4_up = input(0, title="RSI-4 >", group="Short Bot")
rsi5_up = input(0, title="RSI-5 >", group="Short Bot")
rsi6_up = input(0, title="RSI-6 >", group="Short Bot")
rsi7_up = input(0, title="RSI-7 >", group="Short Bot")

//indicators
rsi1 = rsi(src, rsi1_Len)
rsi1_sec = security(syminfo.tickerid, rsi1_res, rsi1)
rsi2 = rsi(src, rsi2_Len)
rsi2_sec = security(syminfo.tickerid, rsi2_res, rsi2)
rsi3 = rsi(src, rsi3_Len)
rsi3_sec = security(syminfo.tickerid, rsi3_res, rsi3)
rsi4 = rsi(src, rsi4_Len)
rsi4_sec = security(syminfo.tickerid, rsi4_res, rsi4)
rsi5 = rsi(src, rsi5_Len)
rsi5_sec = security(syminfo.tickerid, rsi5_res, rsi5)
rsi6 = rsi(src, rsi6_Len)
rsi6_sec = security(syminfo.tickerid, rsi6_res, rsi6)
rsi7 = rsi(src, rsi7_Len)
rsi7_sec = security(syminfo.tickerid, rsi7_res, rsi7)

//RSI
rsi1_up_signal = rsi1_sec > rsi1_up
rsi1_low_signal = rsi1_sec < rsi1_low
rsi2_up_signal = rsi2_sec > rsi2_up
rsi2_low_signal = rsi2_sec < rsi2_low
rsi3_up_signal = rsi3_sec > rsi3_up
rsi3_low_signal = rsi3_sec < rsi3_low
rsi4_up_signal = rsi4_sec > rsi4_up
rsi4_low_signal = rsi4_sec < rsi4_low
rsi5_up_signal = rsi5_sec > rsi5_up
rsi5_low_signal = rsi5_sec < rsi5_low
rsi6_up_signal = rsi6_sec > rsi6_up
rsi6_low_signal = rsi6_sec < rsi6_low
rsi7_up_signal = rsi7_sec > rsi7_up
rsi7_low_signal = rsi7_sec < rsi7_low


//Buy & Sell
Buy = rsi1_low_signal and rsi2_low_signal and rsi3_low_signal and rsi4_low_signal and rsi5_low_signal and rsi6_low_signal and rsi7_low_signal
Sell = rsi1_up_signal and rsi2_up_signal and rsi3_up_signal and rsi4_up_signal and rsi5_up_signal and rsi6_up_signal and rsi7_up_signal

// input into trading conditions
longOK  = (tradeDirection == "Long Bot")
shortOK = (tradeDirection == "Short Bot")

// in entry orders price
longEntryPrice1 = src_bot * (1 - (st_long_orders))
longEntryPrice2 = src_bot * (1 - (st_long_orders*2))
longEntryPrice3 = src_bot * (1 - (st_long_orders*3))
longEntryPrice4 = src_bot * (1 - (st_long_orders*4))
longEntryPrice5 = src_bot * (1 - (st_long_orders*5))
longEntryPrice6 = src_bot * (1 - (st_long_orders*6))
longEntryPrice7 = src_bot * (1 - (st_long_orders*7))
longEntryPrice8 = src_bot * (1 - (st_long_orders*8))
longEntryPrice9 = src_bot * (1 - (st_long_orders*9))
longEntryPrice10 = src_bot * (1 - (st_long_orders*10))
longEntryPrice11 = src_bot * (1 - (st_long_orders*11))
longEntryPrice12 = src_bot * (1 - (st_long_orders*12))
longEntryPrice13 = src_bot * (1 - (st_long_orders*13))
longEntryPrice14 = src_bot * (1 - (st_long_orders*14))
longEntryPrice15 = src_bot * (1 - (st_long_orders*15))
longEntryPrice16 = src_bot * (1 - (st_long_orders*16))
longEntryPrice17 = src_bot * (1 - (st_long_orders*17))
longEntryPrice18 = src_bot * (1 - (st_long_orders*18))
longEntryPrice19 = src_bot * (1 - (st_long_orders*19))

shortEntryPrice1 = src_bot * (1 + st_short_orders)
shortEntryPrice2 = src_bot * (1 + (st_short_orders*2))
shortEntryPrice3 = src_bot * (1 + (st_short_orders*3))
shortEntryPrice4 = src_bot * (1 + (st_short_orders*4))
shortEntryPrice5 = src_bot * (1 + (st_short_orders*5))
shortEntryPrice6 = src_bot * (1 + (st_short_orders*6))
shortEntryPrice7 = src_bot * (1 + (st_short_orders*7))
shortEntryPrice8 = src_bot * (1 + (st_short_orders*8))
shortEntryPrice9 = src_bot * (1 + (st_short_orders*9))
shortEntryPrice10 = src_bot * (1 + (st_short_orders*10))
shortEntryPrice11 = src_bot * (1 + (st_short_orders*11))
shortEntryPrice12 = src_bot * (1 + (st_short_orders*12))
shortEntryPrice13 = src_bot * (1 + (st_short_orders*13))
shortEntryPrice14 = src_bot * (1 + (st_short_orders*14))
shortEntryPrice15 = src_bot * (1 + (st_short_orders*15))
shortEntryPrice16 = src_bot * (1 + (st_short_orders*16))
shortEntryPrice17 = src_bot * (1 + (st_short_orders*17))
shortEntryPrice18 = src_bot * (1 + (st_short_orders*18))
shortEntryPrice19 = src_bot * (1 + (st_short_orders*19))

// take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// take profit values for confirmation
plot(series=(strategy.position_size > 0) ? longExitPrice : na,
     color=color.green, style=plot.style_circles,
     linewidth=3, title="Long Take Profit")
plot(series=(strategy.position_size < 0) ? shortExitPrice : na,
     color=color.red, style=plot.style_circles,
     linewidth=3, title="Short Take Profit")


// entry orders

if (strategy.position_size == 0)
    strategy.order(id="Long0", long=true, limit=src_bot, when=longOK and Buy)
	strategy.order(id="Long1", long=true, limit=longEntryPrice1, when=longOK and Buy)
	strategy.order(id="Long2", long=true, limit=longEntryPrice2, when=longOK and Buy)
	strategy.order(id="Long3", long=true, limit=longEntryPrice3, when=longOK and Buy)
	strategy.order(id="Long4", long=true, limit=longEntryPrice4, when=longOK and Buy)
	strategy.order(id="Long5", long=true, limit=longEntryPrice5, when=longOK and Buy)
	strategy.order(id="Long6", long=true, limit=longEntryPrice6, when=longOK and Buy)
	strategy.order(id="Long7", long=true, limit=longEntryPrice7, when=longOK and Buy)
	strategy.order(id="Long8", long=true, limit=longEntryPrice8, when=longOK and Buy)
	strategy.order(id="Long9", long=true, limit=longEntryPrice9, when=longOK and Buy)
	strategy.order(id="Long10", long=true, limit=longEntryPrice10, when=longOK and Buy)
	strategy.order(id="Long11", long=true, limit=longEntryPrice11, when=longOK and Buy)
	strategy.order(id="Long12", long=true, limit=longEntryPrice12, when=longOK and Buy)
	strategy.order(id="Long13", long=true, limit=longEntryPrice13, when=longOK and Buy)
	strategy.order(id="Long14", long=true, limit=longEntryPrice14, when=longOK and Buy)
	strategy.order(id="Long15", long=true, limit=longEntryPrice15, when=longOK and Buy)
	strategy.order(id="Long16", long=true, limit=longEntryPrice16, when=longOK and Buy)
	strategy.order(id="Long17", long=true, limit=longEntryPrice17, when=longOK and Buy)
	strategy.order(id="Long18", long=true, limit=longEntryPrice18, when=longOK and Buy)
	strategy.order(id="Long19", long=true, limit=longEntryPrice19, when=longOK and Buy)

if (strategy.position_size == 0)
    strategy.order(id="Short0", long=false, limit=src_bot, when=shortOK and Sell)
	strategy.order(id="Short1", long=false, limit=shortEntryPrice1, when=shortOK and Sell)
	strategy.order(id="Short2", long=false, limit=shortEntryPrice2, when=shortOK and Sell)
	strategy.order(id="Short3", long=false, limit=shortEntryPrice3, when=shortOK and Sell)
	strategy.order(id="Short4", long=false, limit=shortEntryPrice4, when=shortOK and Sell)
	strategy.order(id="Short5", long=false, limit=shortEntryPrice5, when=shortOK and Sell)
	strategy.order(id="Short6", long=false, limit=shortEntryPrice6, when=shortOK and Sell)
	strategy.order(id="Short7", long=false, limit=shortEntryPrice7, when=shortOK and Sell)
	strategy.order(id="Short8", long=false, limit=shortEntryPrice8, when=shortOK and Sell)
	strategy.order(id="Short9", long=false, limit=shortEntryPrice9, when=shortOK and Sell)
	strategy.order(id="Short10", long=false, limit=shortEntryPrice10, when=shortOK and Sell)
	strategy.order(id="Short11", long=false, limit=shortEntryPrice11, when=shortOK and Sell)
	strategy.order(id="Short12", long=false, limit=shortEntryPrice12, when=shortOK and Sell)
	strategy.order(id="Short13", long=false, limit=shortEntryPrice13, when=shortOK and Sell)
	strategy.order(id="Short14", long=false, limit=shortEntryPrice14, when=shortOK and Sell)
	strategy.order(id="Short15", long=false, limit=shortEntryPrice15, when=shortOK and Sell)
	strategy.order(id="Short16", long=false, limit=shortEntryPrice16, when=shortOK and Sell)
	strategy.order(id="Short17", long=false, limit=shortEntryPrice17, when=shortOK and Sell)
	strategy.order(id="Short18", long=false, limit=shortEntryPrice18, when=shortOK and Sell)
	strategy.order(id="Short19", long=false, limit=shortEntryPrice19, when=shortOK and Sell)

// exit position based on take profit price

if (strategy.position_size > 0)
    strategy.order(id="exit_Long", long=false, limit=longExitPrice, qty=strategy.position_size)

if (strategy.position_size < 0)
    strategy.order(id="exit_Short", long=true, limit=shortExitPrice, qty=abs(strategy.position_size))


Thêm nữa