Chiến lược Phá vỡ cao của ngày hôm qua

Tác giả:ChaoZhang, Ngày: 2023-11-06 10:49:57
Tags:

img

Tổng quan

Chiến lược Breakout cao hôm qua là một hệ thống theo xu hướng kéo dài khi giá vượt quá mức cao hôm qua, ngay cả khi sự đột phá xảy ra nhiều lần trong một ngày.

Nguyên tắc

Chiến lược sử dụng một số chỉ số kỹ thuật cho tín hiệu nhập cảnh và xuất cảnh:

  • ROC Filter - Chiến lược chỉ được kích hoạt khi đóng cửa ngày hôm nay có tỷ lệ thay đổi giá trên ngưỡng so với đóng cửa ngày trước.

  • Điểm kích hoạt - Mức giá cao, thấp và mở ngày hôm nay.

  • Điều kiện nhập và thoát - Sau khi nhập, tỷ lệ dừng lỗ và lấy lợi nhuận được thiết lập. Chặn theo dõi có thể được kích hoạt để khóa lợi nhuận. Ra khỏi có điều kiện khi giá giảm xuống dưới EMA tham chiếu.

  • Cấu hình - Tỷ lệ phần trăm Gap để dự đoán hoặc trì hoãn nhập cảnh.

Đặc biệt, nó theo dõi giá cao ngày hôm nay cho tín hiệu nhập cảnh. Tham gia dài khi giá phá vỡ trên mức cao ngày hôm nay. Sau đó, dừng lỗ và lấy lợi nhuận được thiết lập, với việc bật dừng lại. Lái lại khi giá vượt qua dưới EMA. Tối ưu hóa bằng cách đặt tỷ lệ chênh lệch, điều chỉnh tỷ lệ dừng lỗ và lấy lợi nhuận để kiểm soát rủi ro, cho phép dừng lại để khóa lợi nhuận.

Phân tích lợi thế

Những lợi thế của chiến lược này:

  • Tiếp theo xu hướng, thu lợi nhuận từ xu hướng di chuyển.

  • Chiến lược thoát hiểm cho thấy các tín hiệu rõ ràng.

  • Xem xét giá cao ngày hôm nay, tránh các mục liên tiếp.

  • Dừng lỗ và lấy lợi nhuận giúp kiểm soát rủi ro.

  • Chạy theo chặn khóa trong lợi nhuận.

  • Thời gian nhập có thể được điều chỉnh với tối ưu hóa tham số để kiểm soát rủi ro.

  • Đơn giản và trực quan, dễ hiểu và thực hiện.

  • Áp dụng cho các giao dịch dài và ngắn.

Phân tích rủi ro

Những rủi ro cần xem xét:

  • Các chiến lược đột phá dễ bị thổi bay. Giá có thể ngay lập tức đảo ngược sau khi vào.

  • Chỉ hiệu quả cho thị trường xu hướng, hoạt động kém trong điều kiện dao động.

  • Cần tỷ lệ dừng lỗ hợp lý, quá rộng có thể làm tăng lỗ.

  • Mức chênh lệch cần thiết, quá mạnh có thể làm tăng tổn thất.

  • Sự phá vỡ sai có thể gây ra tổn thất không cần thiết, cần điều chỉnh.

  • Khối lượng cần hỗ trợ sau khi phá vỡ.

  • Sự nhất quán cần thiết giữa các tham số trên các khung thời gian.

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

Tối ưu hóa có thể:

  • Thêm các chỉ số khác như khối lượng, biến động để tránh những biến động trong các thị trường dao động.

  • Thêm các chỉ số phù hợp đường cong để xác định sức mạnh xu hướng, tránh xu hướng sai.

  • Tối ưu hóa năng động của khoảng cách nhập khẩu dựa trên biến động thị trường.

  • Tối ưu hóa năng động của dừng lỗ và lấy lợi nhuận theo điều kiện thị trường.

  • Các thiết lập tham số khác nhau cho các biểu tượng và khung thời gian khác nhau.

  • Máy học để TEST tác động của tham số vào hiệu suất chiến lược.

  • Thêm chức năng tùy chọn để tối ưu hóa cấu hình.

  • Áp dụng nghiên cứu trong các điều kiện thị trường khác nhau.

  • Mở rộng để vượt qua khung thời gian và chiến lược đa tài sản.

Kết luận

Chiến lược này cung cấp hiệu suất tốt trong các thị trường xu hướng dựa trên sự đột phá của khái niệm cao ngày hôm qua. Nhưng có nguy cơ gặp khó khăn trong việc tối ưu hóa tham số. Tăng thêm tối ưu hóa có thể bằng cách thêm các phán đoán, điều chỉnh tham số động, mở rộng sang các chiến lược kết hợp vv. Nhìn chung nó phù hợp với xu hướng ngắn hạn sau, nhưng cần kiểm soát rủi ro và điều chỉnh tham số.


/*backtest
start: 2023-10-06 00:00:00
end: 2023-11-05 00:00:00
period: 1h
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/
// Author: © tumiza 999 
// © TheSocialCryptoClub

//@version=5

strategy("Yesterday's High v.17.07", overlay=true, pyramiding = 1,
         initial_capital=10000, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=10,
         slippage=1, backtest_fill_limits_assumption=1, use_bar_magnifier=true,
         commission_type=strategy.commission.percent, commission_value=0.075
         )

// -----------------------------------------------------------------------------
// ROC Filter
// -----------------------------------------------------------------------------

// f_security function by LucF for PineCoders available here: https://www.tradingview.com/script/cyPWY96u-How-to-avoid-repainting-when-using-security-PineCoders-FAQ/
f_security(_sym, _res, _src, _rep) => request.security(_sym, _res, _src[not _rep and barstate.isrealtime ? 1 : 0])[_rep or barstate.isrealtime ? 0 : 1]
high_daily = f_security(syminfo.tickerid, "D", high, false)

roc_enable = input.bool(false, "", group="ROC Filter from CloseD", inline="roc")
roc_threshold = input.float(1, "Treshold", step=0.5, group="ROC Filter from CloseD", inline="roc")

closed = f_security(syminfo.tickerid,"1D",close, false)
roc_filter= roc_enable ? (close-closed)/closed*100  > roc_threshold  : true


// -----------------------------------------------------------------------------
// Trigger Point 
// -----------------------------------------------------------------------------

open_session = ta.change(time('D'))
price_session = ta.valuewhen(open_session, open, 0)
tf_session = timeframe.multiplier <= 60

bgcolor(open_session and tf_session ?color.new(color.blue,80):na, title = "Session")

first_bar = 0
if open_session
    first_bar := bar_index

var max_today = 0.0
var min_today = 0.0
var high_daily1 = 0.0
var low_daily1 = 0.0
var today_open = 0.0

if first_bar
    high_daily1 := max_today
    low_daily1 := min_today
    today_open := open
    max_today := high
    min_today := low


if high >= max_today
    max_today := high

if low < min_today
    min_today := low


same_day  = today_open == today_open[1]

plot( timeframe.multiplier <= 240 and same_day ? high_daily1 : na, color= color.yellow , style=plot.style_linebr, linewidth=1, title='High line')
plot( timeframe.multiplier <= 240 and same_day ? low_daily1 : na, color= #E8000D , style=plot.style_linebr, linewidth=1, title='Low line')

// -----------------------------------------------------------------------------
// Strategy settings 
// -----------------------------------------------------------------------------

Gap = input.float(1,"Gap%", step=0.5, tooltip="Gap di entrata su entry_price -n anticipa entrata, con +n posticipa entrata", group = "Entry")
Gap2 = (high_daily1 * Gap)/100

sl  = input.float(3, "Stop-loss", step= 0.5,  group = "Entry")
tp  = input.float(9, "Take-profit", step= 0.5, group = "Entry")
stop_loss_price = strategy.position_avg_price * (1-sl/100)
take_price = strategy.position_avg_price * (1+tp/100)

sl_trl = input.float(2, "Trailing-stop", step = 0.5, tooltip = "Attiva trailing stop dopo che ha raggiunto...",group = "Trailing Stop Settings")//group = "Trailing Stop Settings")
Atrl= input.float(1, "Offset Trailing", step=0.5,tooltip = "Distanza dal prezzo", group = "Trailing Stop Settings")
stop_trl_price_cond = sl_trl * high/syminfo.mintick/100
stop_trl_price_offset_cond = Atrl * high/syminfo.mintick/100

stop_tick = sl * high/syminfo.mintick/100
profit_tick = tp * high/syminfo.mintick/100

mess_buy = "buy"
mess_sell = "sell"

// -----------------------------------------------------------------------------
// Entry - Exit - Close
// -----------------------------------------------------------------------------

if close < high_daily1 and roc_filter
    strategy.entry("Entry", strategy.long, stop = high_daily1 + (Gap2), alert_message = mess_buy)

ts_n  = input.bool(true, "Trailing-stop", tooltip = "Attiva o disattiva trailing-stop", group = "Trailing Stop Settings")
close_ema = input.bool(false, "Close EMA", tooltip = "Attiva o disattiva chiusura su EMA", group = "Trailing Stop Settings")
len1 = input.int(10, "EMA length", step=1, group = "Trailing Stop Settings")
ma1 = ta.ema(close, len1)

plot(ma1, title='EMA', color=color.new(color.yellow, 0))

if ts_n == true
    strategy.exit("Trailing-Stop","Entry",loss= stop_tick, stop= stop_loss_price, limit= take_price, trail_points = stop_trl_price_cond, trail_offset = stop_trl_price_offset_cond, comment_loss="Stop-Loss!!",comment_profit ="CASH!!", comment_trailing = "TRL-Stop!!", alert_message = mess_sell)
else
    strategy.exit("TP-SL", "Entry",loss= stop_tick, stop=stop_loss_price, limit= take_price, comment_loss= "Stop-loss!!!", comment_profit = "CASH!!", alert_message = mess_sell)

if close_ema == true and ta.crossunder(close,ma1)
    strategy.close("Entry",comment = "Close" , alert_message = mess_sell)



Thêm nữa