Chiến lược đảo ngược nến liên tiếp

Tác giả:ChaoZhang, Ngày: 2023-10-08 13:56:39
Tags:

Tổng quan

Chiến lược này dựa trên một ý tưởng giao dịch ngắn hạn cổ điển - đi ngắn sau các nến tăng liên tiếp và đi dài sau các nến giảm liên tiếp. Cụ thể, chiến lược này phát hiện chiều cao cơ thể và màu sắc của nến để xác định sự xuất hiện của các nến liên tiếp với cùng một màu sắc, và sau đó sử dụng chỉ số RVI để xác định liệu một sự đảo ngược có nên xảy ra hay không. Nhìn chung, đây là một chiến lược kết hợp các mô hình nến và chỉ số RVI để thực hiện giao dịch đảo ngược ngắn hạn. Nó nhằm mục đích nắm bắt các cơ hội đảo ngược khi hành vi giá ngắn hạn bất thường xảy ra.

Chiến lược logic

Logic cốt lõi của chiến lược này bao gồm:

  1. Kiểm tra xem chiều cao thân cây nến vượt quá ngưỡng tối thiểu để lọc các động thái tăng / giảm không đáng kể.

  2. Xác định xem hai ngọn nến trước có cùng màu không, điều này có thể cho thấy một sự đảo ngược tiềm năng trong ngắn hạn.

  3. Nếu nến hiện tại có màu khác với hai nến trước đó, một tín hiệu giao dịch được tạo ra. tức là đi dài sau hai nến giảm và một nến tăng, đi ngắn sau hai nến tăng và một nến giảm.

  4. Sau khi tham gia giao dịch, các đường chéo của đường RVI và đường tín hiệu được sử dụng để xác định vị trí thoát.

  5. Tóm lại, chiến lược này kết hợp các mô hình nến và chỉ số RVI để tạo ra một hệ thống đảo ngược trung bình ngắn hạn, nắm bắt sự đảo ngược có lợi từ hành vi giá ngắn hạn bất thường.

Phân tích lợi thế

Những lợi thế chính của chiến lược này bao gồm:

  1. Bắt được sự bất thường về giá trong thời gian ngắn.

  2. Chỉ số RVI hỗ trợ xác định đảo ngược, bổ sung các mô hình nến cho các tín hiệu ổn định hơn.

  3. Tần suất giao dịch tương đối cao cho giao dịch ngắn hạn.

  4. Rủi ro có thể kiểm soát được từ kích thước giao dịch cố định và dừng lỗ/lợi nhuận.

  5. Logic đơn giản và rõ ràng dễ hiểu và thực hiện cho giao dịch trực tiếp.

Phân tích rủi ro

Một số rủi ro cần lưu ý:

  1. Sự đảo ngược ngắn hạn không được đảm bảo trong các xu hướng mạnh khi tín hiệu có thể thất bại.

  2. RVI có thể tạo ra các tín hiệu không chính xác trong điều kiện thị trường đặc biệt.

  3. Thiết lập stop loss không phù hợp có thể dẫn đến tổn thất lớn.

  4. Các tiêu chí nến liên tiếp là quá cứng nhắc. Hãy xem xét tối ưu hóa đến tỷ lệ cần thiết của nến cùng màu trong N thời gian.

  5. Kích thước giao dịch cố định không thể kiểm soát rủi ro vị trí tổng thể.

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

Một số cách để tối ưu hóa thêm chiến lược:

  1. Tối ưu hóa logic nến liên tiếp bằng cách sử dụng thống kê thay vì các khoảng thời gian cố định.

  2. Tối ưu hóa các thông số RVI để tìm kết hợp tốt nhất.

  3. Thêm stop loss dựa trên biến động thị trường.

  4. Thêm kích thước vị trí dựa trên sử dụng tài khoản.

  5. Thêm thêm các bộ lọc như kênh, xu hướng để cải thiện sự ổn định của hệ thống.

  6. Điều chỉnh tham số cho các sản phẩm khác nhau.

  7. Học máy trên dữ liệu lịch sử để tối ưu hóa các tham số một cách năng động.

Tóm lại

Tóm lại, đây là một chiến lược đảo ngược trung bình ngắn hạn điển hình dựa trên các mô hình nến và RVI. Nó có lợi thế nhưng cũng có rủi ro. Tăng cường thêm các thông số và độ bền có thể cải thiện sự ổn định và lợi nhuận của nó. Tuy nhiên, không có chiến lược nào loại bỏ hoàn toàn tổn thất. Các nhà giao dịch phải giữ kỷ luật trong quản lý rủi ro.


/*backtest
start: 2022-10-07 00:00:00
end: 2023-10-07 00:00:00
period: 3d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//This is part of a series of strategies developed automatically by a online software. I cannot share the site url, which is not related to me in any way, because it is against the TV reules.
//
//This strategy was optimized for GBPUSD, timeframe 1D, fixed lots 0.1, initial balance 1000€
//LOGIC:
//- LONG ENTRY when previous candle is bear
//- LONG EXIT: RVI > signal line
//- SHORT ENTRY when previous candle is bull
//- SHORT EXIT: RVI <  signal line
//
//NOTE: I considered the open of actual candle instead of close otherwise there will be a back shift of 1 candle in pine script
//
//Take profit = no
//Stop loss = no

// strategy("Expert studio strategy 1 - GBPUSD", overlay=false, precision=6, initial_capital=1000,calc_on_every_tick=true, pyramiding=0, default_qty_type=strategy.fixed, default_qty_value=10000, currency=currency.EUR)

//INPUTS
src = input(close, "source")
min_body_height = input(42, "Minimum body height", type=input.float)
//bars_back=input(2, "Consecutive bars of same color")
rvi_period = input(55, "RVI period")

//CALCULATIONS_____________________________
//candle color
body_height = abs(open - close) / syminfo.mintick
body_color = open > close ? color.red : color.green

//da migliorare for i=0 to bars_back-1

//RVI -------- thanks to hecate
p = rvi_period

CO = close - open
HL = high - low

value1 = (CO + 2 * CO[1] + 2 * CO[2] + CO[3]) / 6
value2 = (HL + 2 * HL[1] + 2 * HL[2] + HL[3]) / 6

num = sum(value1, p)
denom = sum(value2, p)

RVI = denom != 0 ? num / denom : 0

RVIsig = (RVI + 2 * RVI[1] + 2 * RVI[2] + RVI[3]) / 6

plot(RVI, color=color.green, style=plot.style_line, linewidth=1)
plot(RVIsig, color=color.red, style=plot.style_line, linewidth=1)

//----------------------------------

longCondition = body_height[1] >= min_body_height and body_color[1] == color.red and 
   body_height[0] >= min_body_height and body_color[0] == color.red and 
   RVIsig > RVI
exitLong = RVI > RVIsig

shortCondition = body_height[1] >= min_body_height and body_color[1] == color.green and 
   body_height[0] >= min_body_height and body_color[0] == color.green and 
   RVIsig < RVI
exitShort = RVI < RVIsig

if longCondition and strategy.opentrades == 0
    strategy.entry("Long", strategy.long)

strategy.close("Long", when=exitLong)

if shortCondition and strategy.opentrades == 0
    strategy.entry("Short", strategy.short)

strategy.close("Short", when=exitShort)

// === Backtesting Dates === thanks to Trost

testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2011, "Backtest Start Year")
testStartMonth = input(10, "Backtest Start Month")
testStartDay = input(7, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, 0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testStopHour = input(23, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, testStopHour, 0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
testPeriod_1 = testPeriod()
isPeriod = testPeriodSwitch == true ? testPeriod_1 : true
// === /END

if not isPeriod
    strategy.cancel_all()
    strategy.close_all()





Thêm nữa