Chiến lược này tạo ra các tín hiệu giao dịch dựa trên sự đột phá giá trong một khoảng thời gian nhất định. Ý tưởng chính là quan sát các biến động giá trong những khoảng thời gian nhất định và sử dụng sự đột phá trong phạm vi giá để xác định sự thay đổi xu hướng.
Chiến lược tính toán mức cao nhất và thấp nhất của giá trong một khung thời gian nhất định, được gọi là pivot high và pivot low, để đo lường chuyển động giá.
Cụ thể, nó tính toán mức cao nhất của các thanh N trong quá khứ là mức cao trung tâm và mức thấp nhất của các thanh M trong quá khứ là mức thấp trung tâm. Một tín hiệu dài được tạo ra khi mức cao của thanh hiện tại vượt qua mức cao trung tâm. Một tín hiệu ngắn được tạo ra khi mức thấp của thanh hiện tại vượt qua mức thấp trung tâm.
Sau khi vào, chiến lược sử dụng ATR để dừng lỗ và dừng lỗ trong ngày. Nó cũng đóng tất cả các vị trí trong một khung thời gian cụ thể (ví dụ: 14:55).
Chiến lược này có hiệu quả nắm bắt xu hướng bằng cách sử dụng sự đột phá giá đơn giản trong các khoảng thời gian nhất định, làm cho nó lý tưởng cho giao dịch trong ngày.
Khả năng chậm trễ, có thể bỏ lỡ sự khởi đầu xu hướng sớm
Điều chỉnh khung thời gian hoặc kết hợp các chỉ số khác để nhập
Nhiều tín hiệu sai khi xu hướng không rõ ràng
Điều chỉnh các thông số, thêm các bộ lọc như chỉ số, âm lượng vv
Chi phí vốn cao hơn cho giao dịch nội ngày hoạt động
Điều chỉnh kích thước vị trí, kéo dài thời gian giữ
Sự dựa vào tối ưu hóa tham số
Điều chỉnh các thông số để thay đổi điều kiện thị trường bằng cách sử dụng máy học vv
Kiểm tra dữ liệu giá khác như giá điển hình, giá trung bình v.v.
Thêm bộ lọc như khối lượng, biến động
Thử các kết hợp tham số khác nhau
Bao gồm các chỉ số xu hướng để xác định hướng
Tự động tối ưu hóa các tham số bằng cách sử dụng máy học
Mở rộng đến nhiều khung thời gian để nhập tốt hơn
Chiến lược này có logic rõ ràng và ngắn gọn, tận dụng hiệu quả các sự đột phá giá để nắm bắt các xu hướng ngắn hạn với các yếu tố lợi nhuận tốt. Với một số tham số có thể điều chỉnh dễ dàng để thử nghiệm và tối ưu hóa, nó rất phù hợp với giao dịch trong ngày. Trong khi sự chậm trễ và tín hiệu sai tồn tại, chúng có thể được giải quyết thông qua điều chỉnh tham số, thêm bộ lọc vv. Chiến lược cung cấp một khuôn khổ giao dịch dựa trên sự đột phá mạnh mẽ với không gian tối ưu hóa rộng rãi.
/*backtest start: 2022-10-27 00:00:00 end: 2023-11-02 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // ____________ _________ _____________ // |____________| ||________| ||__________| // || || || || // || ||________|| || // || H E ||________ U L L || H A R T I S T // || || || || // || ||________|| ||__________ // || ||________| ||__________| //@version=5 // strategy("PIVOT STRATEGY [5MIN TF]",overlay=true ,commission_type = strategy.cash, commission_value = 30 , slippage = 2, default_qty_value = 60, currency = currency.NONE, pyramiding = 0) leftbars = input(defval = 10) rightbars = input(defval = 15) // ═══════════════════════════ // // ——————————> INPUTS <——————— // // ═══════════════════════════ // EMA1 = input.int(title='PRICE CROSS EMA', defval = 150, minval = 10 ,maxval = 400) factor1 = input.float(title='_ATR LONG',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL LONG") factor2 = input.float(title='_ATR SHORT',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL SHORT") risk = input.float(title='RISK',defval = 200 , minval = 1 , maxval = 5000 , step = 50, tooltip = "RISK PER TRADE") var initialCapital = strategy.equity t = time(timeframe.period, '0935-1400:1234567') time_cond = true // ══════════════════════════════════ // // ———————————> EMA DATA <——————————— // // ══════════════════════════════════ // ema1 = ta.ema(close, EMA1) plot(ema1, color=color.new(color.yellow, 0), style=plot.style_linebr, title='ema1') // ══════════════════════════════════ // // ————————> TRAIL DATA <———————————— // // ══════════════════════════════════ // // *******Calculate LONG TRAIL data***** ATR_LO = ta.atr(14)*factor1 // *******Calculate SHORT TRAIL data***** ATR_SH = ta.atr(14)*factor2 longStop = close - ATR_LO shortStop = close + ATR_SH // Plot atr data //plot(longStop, color=color.new(color.green, 0), style=plot.style_linebr, title='Long Trailing Stop') //plot(shortStop , color=color.new(color.red, 0), style=plot.style_linebr, title='Short Trailing Stop') // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ // // ————————————————————————————————————————————————————————> PIVOT DATA <———————————————————————————————————————————————————————————————————————————————————————————————————— // // ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ // ph = ta.pivothigh(close,leftbars, rightbars) pl = ta.pivotlow(close,leftbars, rightbars) pvt_condition1 = not na(ph) upper_price = 0.0 upper_price := pvt_condition1 ? ph : upper_price[1] pvt_condition2 = not na(pl) lower_price = 0.0 lower_price := pvt_condition2 ? pl : lower_price[1] // Signals long = ta.crossover(high, upper_price + syminfo.mintick) short = ta.crossunder(low, lower_price - syminfo.mintick) plot(upper_price, color= close > ema1 ? color.green : na, style=plot.style_line, title='PH') plot(lower_price, color= close < ema1 ? color.red : na, style=plot.style_line, title='PL') // ══════════════════════════════════// // ————————> LONG POSITIONS <————————// // ══════════════════════════════════// //******barinstate.isconfirmed used to avoid repaint in real time******* if ( long and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close >= ema1 ) strategy.entry(id= "Long" ,direction = strategy.long, comment = "B") //plot(longStop , color=color.new(color.blue, 0), style=plot.style_linebr, title='long Stop') if strategy.position_size > 0 strategy.exit("long tsl", "Long" , stop = longStop ,comment='S') // ═════════════════════════════════════// // ————————> SHORT POSITIONS <————————— // // ═════════════════════════════════════// if ( short and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close <= ema1 ) strategy.entry(id = "Short" ,direction = strategy.short, comment = "S") if strategy.position_size < 0 strategy.exit("short tsl", "Short" , stop = shortStop ,comment='B') // ════════════════════════════════════════════════// // ————————> CLOSE ALL POSITIONS BY 3PM <————————— // // ════════════════════════════════════════════════// strategy.close_all(when = hour == 14 and minute == 55) // ════════════════════════════════════════// // ————————> MAX INTRADAY LOSS <————————— // // ════════════════════════════════════════// // strategy.risk.max_intraday_loss(type = strategy.cash, value = risk)