Chiến lược mở ngược để nuốt

Tác giả:ChaoZhang, Ngày: 2023-11-22 16:05:24
Tags:

img

Tổng quan

Chiến lược mở ngược là một chiến lược giao dịch trong ngày đơn giản dựa trên nến đầu tiên sau khi mở. Ý tưởng cốt lõi của chiến lược này là đánh giá xu hướng tăng hoặc giảm của nến đầu tiên khi nó xuất hiện sau khi mở mỗi ngày, và thực hiện các giao dịch đối phó. Nếu nến đầu tiên là đường yang đỏ, đi dài; nếu nến đầu tiên là đường yin xanh, đi ngắn. Chiến lược cũng thiết lập cơ chế dừng lỗ và lấy lợi nhuận để thoát khỏi các vị trí.

Chiến lược logic

Nguyên tắc đằng sau chiến lược này là đặc tính của ngọn nến đầu tiên sau khi mở. Khi thị trường mở cửa, các lực lượng dài và ngắn đối đầu mạnh nhất, và xác suất đảo ngược tương đối lớn.

Cụ thể, sau khi mở một ngày mới, chiến lược sẽ ghi lại giá mở, giá đóng và thay đổi giá của ngọn nến đầu tiên. Nếu giá mở cao hơn giá đóng (đường yin màu xanh lá cây), điều đó có nghĩa là những con gấu đã thắng và chúng ta nên mua dài; nếu giá mở thấp hơn giá đóng (đường yang màu đỏ), điều đó có nghĩa là những con bò đã thắng và chúng ta nên mua ngắn. Bằng cách thực hiện các hoạt động đối phó như vậy, chiến lược cố gắng nắm bắt các cơ hội đảo ngược sau khi mở.

Trong khi đó, chiến lược cũng thiết lập các cơ chế dừng lỗ và lấy lợi nhuận, bao gồm giá dừng lỗ dài, giá lấy lợi nhuận dài, giá dừng lỗ ngắn và giá lấy lợi nhuận ngắn, để kiểm soát rủi ro và lợi nhuận của các vị trí dài và ngắn, tránh mất mát quá mức hoặc lấy lợi nhuận sớm.

Phân tích lợi thế

Chiến lược Reverse Opening Engulfing có những lợi thế sau:

  1. Lý thuyết đơn giản và rõ ràng, dễ hiểu và thực hiện.
  2. Nó sử dụng giá trị dự đoán cao của phân đoạn mở để nắm bắt các cơ hội đảo ngược.
  3. Các thiết lập dừng lỗ và lấy lợi nhuận có thể kiểm soát rủi ro hiệu quả.
  4. Ý tưởng chiến lược có tính phổ quát và phù hợp với hầu hết các cổ phiếu.
  5. Chi phí tham gia tương đối thấp và kiểm soát vốn dễ dàng.

Phân tích rủi ro

Chiến lược Reverse Opening Engulfing cũng có một số rủi ro, chủ yếu bao gồm:

  1. Khả năng thất bại đảo ngược mở. Một tín hiệu đảo ngược thất bại của ngọn nến đầu tiên có thể gây ra tổn thất lớn.
  2. Không có khả năng lọc hiệu quả các cổ phiếu chất lượng thấp. Chiến lược thiếu phân tích cơ bản đầy đủ và có thể chọn một số cổ phiếu có cơ bản kém.
  3. Không có khả năng kiểm soát hiệu quả rủi ro hệ thống từ các sự kiện thiên nga đen, chẳng hạn như tác động của tin tức tiêu cực đáng kể.
  4. Các thiết lập dừng lỗ và lấy lợi nhuận không đúng có thể dẫn đến việc gia tăng lỗ hoặc thu hẹp lợi nhuận.

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

Chiến lược mở ngược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Tăng kiểm tra tính hợp lệ của các tín hiệu đảo ngược mở để tránh các tín hiệu không hợp lệ, ví dụ, kết hợp phân tích âm lượng.
  2. Chọn các nhóm cổ phiếu bằng cách tích hợp phân tích cơ bản và kỹ thuật để lọc các cổ phiếu chất lượng thấp.
  3. Thêm các mô-đun giám sát cho các sự kiện lớn và tin tức để kiểm soát rủi ro hệ thống.
  4. Sử dụng các thuật toán di truyền, học máy và các phương pháp khác để tối ưu hóa động các thiết lập dừng lỗ và lấy lợi nhuận.

Tóm lại

Chiến lược Reverse Opening Engulfing cố gắng nắm bắt các cơ hội đảo ngược sau khi mở bằng cách đánh giá hướng của ngọn nến đầu tiên và thực hiện các hoạt động phản đối. Ý tưởng chiến lược đơn giản với chi phí tham gia thấp, và có một số giá trị thực tế. Nhưng chúng ta cũng nên tỉnh táo về rủi ro, và liên tục cải thiện và tối ưu hóa chiến lược trong thực tế để làm cho nó mạnh mẽ và đáng tin cậy hơn.


/*backtest
start: 2023-10-22 00:00:00
end: 2023-11-21 00:00:00
period: 3h
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/
// © vikris
//@version=4
strategy("[VJ]First Candle Strategy", overlay = true,calc_on_every_tick = true,default_qty_type=strategy.percent_of_equity,default_qty_value=100,initial_capital=750,commission_type=strategy.commission.percent, 
     commission_value=0.02)


// ********** Strategy inputs - Start **********

// Used for intraday handling
// Session value should be from market start to the time you want to square-off 
// your intraday strategy
// Important: The end time should be at least 2 minutes before the intraday
// square-off time set by your broker
var i_marketSession = input(title="Market session", type=input.session, 
     defval="0915-1455", confirm=true)

// Make inputs that set the take profit % (optional)
longProfitPerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=1) * 0.01

shortProfitPerc = input(title="Short Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=1) * 0.01
     
// Set stop loss level with input options (optional)
longLossPerc = input(title="Long Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01

shortLossPerc = input(title="Short Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01    


// ********** Strategy inputs - End **********


// ********** Supporting functions - Start **********

// A function to check whether the bar or period is in intraday session
barInSession(sess) => time(timeframe.period, sess) != 0



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

// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


// ********** Supporting functions - End **********


// ********** Strategy - Start **********
// See if intraday session is active
bool intradaySession = barInSession(i_marketSession)

// Trade only if intraday session is active

//=================Strategy logic goes in here===========================
 
// If start of the daily session changed, then it's first bar of the new session
isNewDay = time("D") != time("D")[1]
var firstBarCloseValue = close
var firstBarOpenValue = open
if isNewDay
    firstBarCloseValue := close
    firstBarOpenValue := open


greenCandle = firstBarOpenValue < firstBarCloseValue
redCandle = firstBarOpenValue > firstBarCloseValue

buy = redCandle
sell = greenCandle


// plot(firstBarCloseValue)
// plot(firstBarOpenValue)



//Final Long/Short Condition
longCondition = buy
shortCondition =sell
 
//Long Strategy - buy condition and exits with Take profit and SL
if (longCondition and intradaySession)
    stop_level = longStopPrice
    profit_level = longExitPrice
    strategy.entry("My Long Entry Id", strategy.long)
    strategy.exit("TP/SL", "My Long Entry Id", stop=stop_level, limit=profit_level)


//Short Strategy - sell condition and exits with Take profit and SL
if (shortCondition and intradaySession)
    stop_level = shortStopPrice
    profit_level = shortExitPrice
    strategy.entry("My Short Entry Id", strategy.short)
    strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level)
 
 
// Square-off position (when session is over and position is open)
squareOff = (not intradaySession) and (strategy.position_size != 0)
strategy.close_all(when = squareOff, comment = "Square-off")

// ********** Strategy - End **********

Thêm nữa