Chiến lược giao dịch mở cao và đóng thấp


Ngày tạo: 2024-02-02 12:03:45 sửa đổi lần cuối: 2024-02-02 12:03:45
sao chép: 0 Số nhấp chuột: 905
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch mở cao và đóng thấp

Tổng quan

Chiến lược giao dịch mở vị trí cao, đóng cửa thấp, hút đơn là một chiến lược giao dịch theo xu hướng. Chiến lược này xác định xu hướng ngắn hạn của giá bằng cách đánh giá mối quan hệ giữa giá mở cửa và giá đóng cửa của đường K, tạo thêm lỗ hổng khi xu hướng bắt đầu, đạt được mục đích truy cập nhanh vào thị trường và theo dõi xu hướng.

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

Chiến lược này chủ yếu đánh giá mối quan hệ giữa giá mở và giá đóng của đường K, tạo ra nhiều tín hiệu khi giá mở bằng giá thấp nhất; tạo ra tín hiệu tắt khi giá mở bằng giá cao nhất. Như vậy, có thể bắt được đột phá ngắn hạn của giá, theo dõi xu hướng.

Sau khi vào tín hiệu, nó sẽ ngay lập tức sử dụng số lượng cố định để mở vị trí và thiết lập vị trí. Địa điểm dừng sẽ tham khảo thiết lập chỉ số ATR, theo dõi sự biến động của thị trường. Mục tiêu dừng là phần tỷ lệ RR của khoảng cách giữa điểm dừng và giá vào. Khi giá chạm điểm dừng hoặc mục tiêu dừng, nó sẽ dừng hoặc dừng kịp thời.

Chiến lược này cũng sẽ xóa tất cả các vị trí tại các thời điểm mà người dùng đặt, ví dụ: 30 phút trước khi thị trường Mỹ đóng cửa, để tránh rủi ro biến động lớn qua đêm.

Phân tích lợi thế

Chiến lược này có một số ưu điểm:

  1. Sử dụng mối quan hệ giữa giá mở và giá đóng để đánh giá xu hướng, bạn có thể nhanh chóng nhận ra sự đột phá ngắn hạn của giá.

  2. Dấu hiệu vào cửa đơn giản, rõ ràng và dễ thực hiện.

  3. Giữ lỗ và dừng lại kịp thời, bạn có thể khóa lợi nhuận và tránh thiệt hại.

  4. Việc bắt buộc các nhà đầu tư phải giữ vị thế yên ổn trong một khoảng thời gian nhất định sẽ giúp tránh rủi ro biến động qua đêm.

  5. Không cần chọn loại giao dịch cụ thể, áp dụng cho thị trường ngoại hối, cổ phiếu, tiền điện tử.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Sử dụng ATR dừng, trong trường hợp chấn động có thể dừng thường xuyên.

  2. Có thể có sự phù hợp quá mức mà không tính đến các đặc điểm của loại và thời gian giao dịch.

  3. Mục tiêu dừng cố định có thể không phù hợp với điều kiện thị trường và không mang lại lợi nhuận bền vững.

  4. Việc ép buộc các nhà đầu tư giảm giá không đúng lúc có thể làm mất cơ hội hoặc gây thiệt hại thêm.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:

  1. Tối ưu hóa phương thức dừng lỗ, sử dụng dừng giữ trong tình huống xu hướng, sử dụng dừng lệnh treo trong tình huống chấn động.

  2. Thêm các điều kiện lọc, kết hợp với các chỉ số xu hướng để xác định thời điểm nhập cảnh và tránh phá vỡ giả.

  3. Điều chỉnh động vị trí dừng để xác định khoảng cách dừng hợp lý theo mức độ biến động của thị trường.

  4. Tối ưu hóa thời gian thanh toán, chọn thời gian thanh toán phù hợp cho các loại giao dịch và khu vực khác nhau.

Tóm tắt

Chiến lược giao dịch mở vị trí cao, đóng cửa thấp và ăn đơn đặt vị trí nhanh chóng bằng cách xác định xu hướng ngắn hạn của giá. Có lợi thế rõ ràng về việc nhập cảnh đơn giản, dừng lỗ. Nhưng cũng có một số khía cạnh có thể được tối ưu hóa, chẳng hạn như phương thức dừng lỗ, tín hiệu lọc, v.v.. Bằng cách liên tục kiểm tra và tối ưu hóa, bạn có thể làm cho các tham số của chiến lược này thích ứng với nhiều môi trường thị trường hơn, có khả năng thích ứng và lợi nhuận mạnh mẽ hơn.

Mã nguồn chiến lược
/*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"}]
*/

//@version=5
// Open-High-Low strategy

strategy('Strategy: OLH', shorttitle="OLH", overlay=true)

// Inputs
slAtrLen = input.int(defval=14, title="ATR Period for placing SL", group="StopLoss settings")
showSLLines = input.bool(defval=false, title="Show SL lines in chart", tooltip="Show SL lines also as dotted lines in chart. Note: chart may look untidy.", group="Stolploss settings")
// Trade related
rrRatio = input.float(title='Risk:Reward', step=0.1, defval=2.0, group="Trade settings")
endOfDay = input.int(defval=1500, title="Close all trades, default is 3:00 PM, 1500 hours (integer)", group="Trade settings")
mktAlwaysOn = input.bool(defval=true, title="Markets that never closed (Crypto, Forex, Commodity)", tooltip="Some markers never closes. For those cases, make this checked.", group="Trade settings")
lotSize = input.int(title='Lot Size', step=1, defval=1, group="Trade settings")


// Utils
green(open, close) => close > open ? true : false
red(open, close) => close < open ? true : false
body(open, close) => math.abs(open - close)
lowerwick = green(open, close) ? open - low : close - low
upperwick = green(open, close) ? high - close : high - open
crange = high - low
crangep = high[1] - low[1] // previous candle's candle-range
bullish = close > open ? true : false
bearish = close < open ? true : false


// Trade signals
longCond = barstate.isconfirmed and (open == low)
shortCond = barstate.isconfirmed and (open == high)

// For SL calculation
atr = ta.atr(slAtrLen)
highestHigh = ta.highest(high, 7)
lowestLow = ta.lowest(low, 7)
longStop = showSLLines ? lowestLow - (atr * 1) : na
shortStop = showSLLines ? highestHigh + (atr * 1) : na
plot(longStop, title="Buy SL", color=color.green, style=plot.style_cross)
plot(shortStop, title="Sell SL", color=color.red, style=plot.style_cross)

// Trade execute
h = hour(time('1'), syminfo.timezone)
m = minute(time('1'), syminfo.timezone)
hourVal = h * 100 + m
totalTrades = strategy.opentrades + strategy.closedtrades
if (mktAlwaysOn or (hourVal < endOfDay))
    // Entry
    var float sl = na
    var float target = na
    if (longCond)
        strategy.entry("enter long", strategy.long, lotSize, limit=na, stop=na, comment="Enter Long")
        sl := longStop
        target := close + ((close - longStop) * rrRatio)
        alert('Buy:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)
    if (shortCond)
        strategy.entry("enter short", strategy.short, lotSize, limit=na, stop=na, comment="Enter Short")
        sl := shortStop
        target := close - ((shortStop - close) * rrRatio)
        alert('Sell:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)

    // Exit: target or SL
    if ((close >= target) or (close <= sl))
        strategy.close("enter long", comment=close < sl ? "Long SL hit" : "Long target hit")
    if ((close <= target) or (close >= sl))
        strategy.close("enter short", comment=close > sl ? "Short SL hit" : "Short target hit")
else if (not mktAlwaysOn)
    // Close all open position at the end if Day
    strategy.close_all(comment = "Close all entries at end of day.")