Chiến lược đảo ngược động lực

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

img

Tổng quan

Chiến lược này nhằm mục đích phát hiện sự thay đổi tỷ lệ phần trăm giá của cổ phiếu trong một khoảng thời gian nhất định và tạo ra tín hiệu giao dịch khi một ngưỡng bị vượt quá. Nó phù hợp với giao dịch ngắn hạn và cắt đầu da để nắm bắt cơ hội từ các biến động đột ngột của thị trường.

Chiến lược logic

  1. Các thông số đầu vào x đại diện cho số thời gian nến để kiểm tra, với một mặc định là 5 cho nến 5 phút.

  2. Tính toán tỷ lệ thay đổi tỷ lệ phần trăm của giá đóng cửa hiện tại so với giá đóng cửa x giai đoạn trước, được lưu dưới dạng trueChange1 và trueChange2.

  3. Các tham số đầu vào percentChangePos và percentChangeNeg đại diện cho tỷ lệ thay đổi tỷ lệ thành phần ngưỡng, với các giá trị mặc định là 0,4% và -0,4%.

  4. Khi trueChange1 lớn hơn %ChangePos, một tín hiệu mua mua được tạo ra. Khi trueChange2 nhỏ hơn %ChangeNeg, một tín hiệu bán bán được tạo ra.

  5. Thêm văn bản và màu nền cho trạng thái mua và bán.

  6. Đặt các quy tắc vào và ra dựa trên tín hiệu.

  7. Thiết lập cảnh báo và bản vẽ.

Ưu điểm

  1. Sử dụng thay đổi tỷ lệ phần trăm thay vì thay đổi giá tuyệt đối, thích nghi với các cổ phiếu khác nhau.

  2. Thiết lập các ngưỡng tỷ lệ phần trăm tích cực và âm để xác định sự đột phá của Bollinger Bands.

  3. Thời gian phát hiện có thể điều chỉnh để xác định sự thay đổi xu hướng trong các khung thời gian khác nhau.

  4. Cảnh báo có thể cấu hình để bắt tín hiệu quan trọng.

  5. Logic tín hiệu đơn giản và thẳng thắn, dễ hiểu và sử dụng.

  6. Bắt được sự đảo ngược ngắn hạn khi thị trường mở.

Rủi ro

  1. Sự thay đổi tỷ lệ phần trăm không xác định hướng xu hướng, có thể tạo ra các tín hiệu gây hiểu lầm.

  2. Các thông số mặc định có thể không phù hợp với tất cả các cổ phiếu, cần điều chỉnh cụ thể.

  3. Không có lệnh dừng lỗ, không thể hạn chế lỗ.

  4. Các tín hiệu thường xuyên, chi phí giao dịch có khả năng cao.

  5. Không thể xác định cấu trúc thị trường, dễ bị chọc theo các thị trường khác nhau

Giải pháp:

  1. Kết hợp với các chỉ số xu hướng như hồi quy tuyến tính để xác định xu hướng tổng thể.

  2. Tối ưu hóa các thông số dựa trên các đặc điểm cổ phiếu.

  3. Thực hiện stop loss thích hợp.

  4. Bộ lọc tín hiệu để tránh giao dịch quá mức.

  5. Đánh giá cấu trúc thị trường từ khung thời gian cao hơn để tránh giao dịch whipsaws.

Những cải tiến

  1. Thêm các cơ chế dừng lỗ như dừng lỗ để hạn chế lỗ.

  2. Thêm các điều kiện lọc như âm lượng, trung bình động để tránh chém.

  3. Tối ưu hóa các quy tắc vào và ra với các chỉ số như MACD.

  4. Sử dụng máy học để tự động tối ưu hóa các thông số.

  5. Bao gồm việc phân tích cấu trúc thị trường để tránh những vấn đề khó khăn.

  6. Đặt các tham số năng động dựa trên biến động và thanh khoản.

  7. Kết hợp với phân tích khung thời gian cao hơn để xác định xu hướng tổng thể.

Tóm lại

Chiến lược này tạo ra các giao dịch bằng cách so sánh tỷ lệ thay đổi giá phần trăm với ngưỡng đã đặt trước, làm cho nó trở thành một chiến lược đảo ngược trung bình ngắn hạn. Những lợi thế nằm ở sự đơn giản, linh hoạt và khả năng nắm bắt các biến động đột ngột của thị trường. Những nhược điểm là rủi ro có thể được giải quyết thông qua tối ưu hóa và sử dụng đúng cách với phân tích xu hướng và quản lý rủi ro. Nhìn chung, nó có logic hợp lý và có thể là một chiến lược giao dịch ngắn hạn hiệu quả khi được tăng cường đúng cách.


/*backtest
start: 2023-10-13 00:00:00
end: 2023-11-12 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// created by Oliver
strategy("Percentage Change strategy w/BG color", overlay=true, scale=scale.none, precision=2)

x = input(5, title = 'x candles difference', minval = 1)
trueChange1 = (close - close[x]) / close[x] * 100
percentChangePos = input(0.4, title="Percent Change")

//if (percentChange > trueChange) then Signal  

plotChar1 = if percentChangePos > trueChange1
    false
else
    true

plotchar(series=plotChar1, char='🥶', color=color.green, location=location.top, size = size.tiny )

trueChange2 = (close - close[x]) / close[x] * 100
percentChangeNeg = input(-0.4, title="Percent Change")

plotChar2 = if percentChangeNeg < trueChange2
    false
else
    true
plotchar(series=plotChar2, char='🥵', color=color.red, location=location.top, size = size.tiny)

//------------------------------------------------------------------------
UpColor() => percentChangePos < trueChange1
DownColor() => percentChangeNeg > trueChange2

//Up = percentChangePos < trueChange1
//Down = percentChangeNeg > trueChange2


col = percentChangePos < trueChange1 ? color.lime : percentChangeNeg > trueChange2 ? color.red : color.white
//--------
condColor = percentChangePos < trueChange1 ? color.new(color.lime,50) : percentChangeNeg > trueChange2 ? color.new(color.red,50) : na
//c_lineColor = condUp ? color.new(color.green, 97) : condDn ? color.new(color.maroon, 97) : na
//barcolor(Up ? color.blue : Down ? color.yellow : color.gray, transp=70)

//Background Highlights
//bgcolor(condColor, transp=70)


//---------

barcolor(UpColor() ? color.lime: DownColor() ? color.red : na)
bgcolor(UpColor() ? color.lime: DownColor() ? color.red : na)

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

buy = percentChangePos < trueChange1
sell = percentChangeNeg > trueChange2


//------------------------------------------------------------------------
/////////////// Alerts /////////////// 
alertcondition(buy, title='buy', message='Buy')
alertcondition(sell, title='sell', message='Sell')

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

if (buy)
    strategy.entry("My Long Entry Id", strategy.long)

if (sell)
    strategy.entry("My Short Entry Id", strategy.short)


/////////////////// Plotting //////////////////////// 
plotshape(buy, title="buy", text="Buy", color=color.green, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0)  //plot for buy icon
plotshape(sell, title="sell", text="Sell", color=color.red, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0)


Thêm nữa