Hệ thống giao dịch lượng đôi

Tác giả:ChaoZhang, Ngày: 2024-02-26 14:30:54
Tags:

img

Chiến lược này kết hợp chỉ số CCI, chỉ số RSI và hai đường trung bình động thành một hệ thống giao dịch hợp chất. Nó có thể nắm bắt các xu hướng thông thường trong khi sử dụng các đường chéo RSI để thêm xác nhận cho các mục để lọc một số tiếng ồn.

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

Hệ thống sử dụng hai đường chéo trung bình động để hỗ trợ xác định hướng xu hướng. Khi đường chéo trung bình động nhanh vượt qua đường chéo trung bình động chậm, đó là tín hiệu mua, và ngược lại đối với tín hiệu bán.

Sau khi xác định xu hướng tăng hoặc giảm, hệ thống sau đó sử dụng sự chéo chéo của hai chỉ số RSI với chiều dài tham số khác nhau như xác minh nhập cảnh. Ví dụ, trong thị trường tăng, nếu chỉ số RSI ngắn hạn vượt qua chỉ số RSI dài hạn, đó là tín hiệu mua cuối cùng. Thiết kế này chủ yếu lọc ra tiếng ồn để tránh các giao dịch sai do các điều chỉnh ngắn hạn trong xu hướng.

Chiến lược này chỉ mở các vị trí trong phiên giao dịch được chỉ định, tích cực đóng tất cả các vị trí 15 phút trước khi đóng để tránh rủi ro qua đêm.

Phân tích lợi thế

  • Kết hợp đánh giá xu hướng và chéo chỉ số có thể xác định hiệu quả xu hướng và lọc tiếng ồn cho các mục chính xác
  • Sử dụng các điểm dừng để kiểm soát rủi ro một cách tích cực tránh bị dừng lại do các vụ tai nạn đột ngột
  • Chỉ mở các vị trí trong các phiên giao dịch cụ thể để tránh rủi ro lỗ hổng qua đêm
  • Các thông số RSI có thể điều chỉnh có thể thích nghi linh hoạt với các môi trường thị trường khác nhau

Phân tích rủi ro

  • CCI cho thấy hiệu suất kém trên các thị trường biến động bất thường
  • Các điều kiện chéo RSI kép tương đối nghiêm ngặt, có khả năng bỏ lỡ một số cơ hội
  • Chặn sau có thể là quá chủ quan, đòi hỏi tối ưu hóa tham số
  • Các phiên giao dịch cụ thể có thể bỏ qua các khoảng trống tin tức lớn qua đêm

Các đề xuất tối ưu hóa

  • Kiểm tra các kết hợp tham số CCI khác nhau để tìm các thiết lập tối ưu
  • Kiểm tra loại bỏ điều kiện chéo RSI và nhập trực tiếp dựa trên CCI
  • Kiểm tra lại và tối ưu hóa các thông số dừng kéo theo để tìm các thiết lập tối ưu
  • Kiểm tra loại bỏ lập trường buộc đóng logic và thay vào đó theo dõi lợi nhuận với trailing dừng lại trong các vị trí để tối đa hóa lợi nhuận

Tóm lại

Chiến lược này xem xét toàn diện việc xác định xu hướng và xác nhận chéo chỉ số để đảm bảo tính hợp lệ của tín hiệu trong khi kiểm soát rủi ro. Thông qua tối ưu hóa tham số và điều chỉnh logic, chiến lược có tiềm năng mở rộng cơ hội lợi nhuận và giảm cơ hội bỏ lỡ. Đây là một khái niệm giao dịch rất hứa hẹn.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

//@version=5
strategy("EMA with RSI Cross Strategy", overlay=true)

//EMA
fastLen = input(title='Fast EMA Length', defval=9)
slowLen = input(title='Slow EMA Length', defval=20)

fastEMA = ta.ema(close, fastLen)
slowEMA = ta.ema(close, slowLen)

fema = plot(fastEMA, title='FastEMA', color=color.new(color.green, 0), linewidth=1, style=plot.style_line)
sema = plot(slowEMA, title='SlowEMA', color=color.new(color.red, 0), linewidth=1, style=plot.style_line)

fill(fema, sema, color=fastEMA > slowEMA ? color.new(#417505, 50) : color.new(#890101, 50), title='Cloud')

// Bull and Bear Alerts
//Bull = ta.crossover(fastEMA, slowEMA)
Bull = fastEMA > slowEMA
//Bear = ta.crossunder(fastEMA, slowEMA)
Bear = fastEMA < slowEMA

//RSIs
rsiLength1Input = input.int(9, minval=1, title="RSI Length", group="RSI Settings")
rsiSource1Input = input.source(close, "Source", group="RSI Settings")
rsiLength2Input = input.int(20, minval=1, title="RSI Length", group="RSI Settings")
rsiSource2Input = input.source(close, "Source", group="RSI Settings")

up1 = ta.rma(math.max(ta.change(rsiSource1Input), 0), rsiLength1Input)
down1 = ta.rma(-math.min(ta.change(rsiSource1Input), 0), rsiLength1Input)
rsi = down1 == 0 ? 100 : up1 == 0 ? 0 : 100 - (100 / (1 + up1 / down1))
up2 = ta.rma(math.max(ta.change(rsiSource2Input), 0), rsiLength2Input)
down2 = ta.rma(-math.min(ta.change(rsiSource2Input), 0), rsiLength2Input)
rsi2 = down2 == 0 ? 100 : up2 == 0 ? 0 : 100 - (100 / (1 + up2 / down2))

//CCI
cciLength = input.int(20, minval=1)
src = input(hlc3, title="Source")
ma = ta.sma(src, cciLength)
cci = (src - ma) / (0.015 * ta.dev(src, cciLength))

//Trail Stop Setup
trstp = input.float(title="Trail Loss($)", minval = 0.0, step = 0.01, defval = 0.5)

longStop = 0.0, shortStop = 0.0

longStop := if Bull
    stopValue = close - trstp
    math.max(stopValue, longStop[1])
else
    0.0

shortStop := if Bear
    stopValue = close + trstp
    math.min(stopValue, shortStop[1])
else
    999999


//Session Setup
open_session=input(defval="0930-1545")
session = time("1", open_session)
validSession=(na(session) ? 0 : 1)

//Trade Signals
longCondition = Bull and cci > 100 and ta.crossover(rsi,rsi2) and validSession
if (longCondition)
    strategy.entry("Long", strategy.long, 1)
    
//longExit = close > strategy.opentrades.entry_price(0) + 1.5 or close < strategy.opentrades.entry_price(0) - 0.75
longExit = close < longStop or not validSession
if (longExit)
    strategy.close("Long")

shortCondition = Bear and cci < 100 and ta.crossunder(rsi,rsi2) and validSession
if (shortCondition)
    strategy.entry("Short", strategy.short, 1)

//shortExit = close < strategy.opentrades.entry_price(0) - 1.5 or close > strategy.opentrades.entry_price(0) + 0.75
shortExit = close > shortStop or not validSession
if (shortExit)
    strategy.close("Short")


Thêm nữa