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í.
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.
Chiến lược Reverse Opening Engulfing có những lợi thế sau:
Chiến lược Reverse Opening Engulfing cũng có một số rủi ro, chủ yếu bao gồm:
Chiến lược mở ngược có thể được tối ưu hóa trong các khía cạnh sau:
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 **********