Theo dõi chiến lược cao của ngày hôm qua


Ngày tạo: 2023-10-08 14:06:55 sửa đổi lần cuối: 2023-10-08 14:06:55
sao chép: 0 Số nhấp chuột: 757
1
tập trung vào
1617
Người theo dõi

Tổng quan

Chiến lược này hoạt động dựa trên mức giá cao nhất của ngày giao dịch trước đó và thuộc loại chiến lược theo dõi xu hướng. Nó sẽ mở nhiều vị trí khi phá vỡ mức giá cao nhất của ngày giao dịch trước đó và mở lại vị trí ngay cả khi có nhiều lần phá vỡ trong ngày.

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

  1. Sử dụng hàm LucF để tránh phản hồi khi lén nhìn vào dòng K mới nhất.

  2. Xác định xem ngày giao dịch mới có mở cửa hay không. Ghi lại giá cao nhất max_today và giá thấp nhất min_today.

  3. So sánh giá cao nhất hiện tại high và max_today, cập nhật max_today。

  4. So sánh mức giá thấp nhất hiện tại với min_today, cập nhật min_today。

  5. Hình vẽ giá cao nhất và giá thấp nhất trong ngày giao dịch trước đó.

  6. Thiết lập điểm mở cửa khi phá vỡ mức giá cao nhất của ngày giao dịch trước, bạn có thể thêm một khoảng cách nhất định trên mức giá cao nhất để trì hoãn hoặc mở cửa sớm.

  7. Cài đặt tỷ lệ dừng lỗ sl và tỷ lệ dừng tp

  8. Bắt đầu giao dịch khi giá vượt mức cao nhất trong ngày giao dịch trước đó.

  9. Thiết lập điểm dừng và điểm dừng

  10. Bạn có thể chọn để bắt đầu theo dõi dừng, thiết lập yêu cầu tối thiểu để bắt đầu theo dõi dừng, theo dõi khoảng cách dừng.

  11. Bạn có thể chọn xem trạng thái của EMA khi tắt hay không

Phân tích lợi thế

Đây là một chiến lược theo dõi xu hướng tương đối đơn giản với những lợi thế sau:

  1. Các tín hiệu chiến lược đơn giản, rõ ràng và dễ thực hiện.

  2. Sử dụng các tín hiệu xác nhận xu hướng được hình thành từ sự phá vỡ của mức giá cao nhất trong ngày giao dịch trước đó, có thể lọc hiệu quả tiếng ồn của thị trường chấn động.

  3. Độ nhạy của đường vào sân có thể được điều chỉnh thông qua các tham số GAP.

  4. Tổng rủi ro là có thể kiểm soát được, dừng lỗ là rõ ràng.

  5. Có thể chọn sử dụng Tracking Stop Loss để khóa thêm lợi nhuận.

  6. Có thể kết hợp với đánh giá của EMA để tránh bị mắc kẹt khi chết.

Phân tích rủi ro

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

  1. Thất bại trong việc phá vỡ có thể gây ra thiệt hại và cần thiết phải đặt giá dừng lỗ hợp lý.

  2. Hiệu quả của đột phá phụ thuộc vào thị trường đang có xu hướng, dễ bị mắc kẹt trong thị trường biến động.

  3. Theo dõi dừng lỗ có thể quá nhạy cảm nếu thiết lập không đúng, và dừng lỗ sẽ được điều chỉnh nhỏ theo giá.

  4. EMA cũng có thể quá nhạy cảm hoặc chậm chạp khi lựa chọn tham số không đúng.

  5. Có nhiều biến cần được quan tâm và tối ưu hóa, chẳng hạn như GAP, Stop Loss Amplitude, Tracking Stop Loss Settings, v.v.

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

Chiến lược này có thể được tiếp tục tối ưu hóa trong một số khía cạnh:

  1. Điều chỉnh dừng từ giá trị cố định thành ATR hoặc dừng động theo xu hướng

  2. Tăng hiệu quả đột phá thông qua bộ lọc chênh lệch tiêu chuẩn.

  3. Thêm điều kiện dựa trên biến động để tránh đột phá không hiệu quả của động đất.

  4. Tối ưu hóa các tham số EMA để đưa ra phán quyết ổn định và chính xác hơn.

  5. Tối ưu hóa các tham số theo dõi lỗ hổng để phù hợp hơn với mức độ biến động của thị trường.

  6. Kiểm tra sức khỏe tham số của các giống khác nhau.

  7. Tăng cơ chế động điều chỉnh kích thước vị thế.

Tóm tắt

Chiến lược này nói chung là đơn giản và thực tế, thuộc chiến lược theo dõi xu hướng điển hình, phá vỡ mức giá cao nhất trong ngày giao dịch trước đó là tín hiệu để theo dõi xu hướng, kiểm soát rủi ro chủ yếu dựa vào dừng lỗ để thực hiện. Bằng cách tối ưu hóa tham số hợp lý, chiến lược có thể có hiệu quả tốt hơn trong tình huống xu hướng.

Mã nguồn chiến lược
/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-07 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
// © TheSocialCryptoClub

//@version=5

strategy("Yesterday's High", 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)