Chiến lược di chuyển khối lượng theo thời gian


Ngày tạo: 2023-11-03 16:35:15 sửa đổi lần cuối: 2023-11-03 16:35:15
sao chép: 0 Số nhấp chuột: 621
1
tập trung vào
1617
Người theo dõi

Chiến lược di chuyển khối lượng theo thời gian

Tổng quan

Chiến lược này tạo ra tín hiệu giao dịch dựa trên sự đột phá của khối lượng di chuyển, và ý tưởng chính là quan sát sự di chuyển của giá trong một khoảng thời gian nhất định để đánh giá sự thay đổi xu hướng của giá dựa trên sự đột phá của khối lượng di chuyển.

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

Chiến lược này dùng để đánh giá sự di chuyển của giá bằng cách tính toán giá cao nhất và giá thấp nhất trong một khoảng thời gian nhất định, tức là giá cao và giá thấp.

Cụ thể, chiến lược sẽ tính giá cao nhất của dòng N gốc K trong quá khứ là giá cao trọng số, và giá thấp nhất của dòng M gốc K trong quá khứ là giá thấp trọng số. Khi điểm cao của dòng K hiện tại vượt quá mức cao trọng số, nó sẽ tạo ra tín hiệu làm nhiều; Khi điểm thấp của dòng K hiện tại giảm xuống mức thấp trọng số, nó sẽ tạo ra tín hiệu làm trống.

Sau khi tháo lỗ và tháo lỗ, chiến lược sẽ sử dụng ATR để thiết lập dừng lỗ và dừng lỗ theo giai đoạn trong ngày. Đồng thời, chiến lược cũng sẽ thanh toán tất cả các vị trí trong một khoảng thời gian nhất định (ví dụ: 14:55).

Chiến lược này đơn giản và hiệu quả sử dụng giá phá vỡ trong một khoảng thời gian nhất định để nắm bắt xu hướng, rất phù hợp với giao dịch ngắn trong ngày.

Lợi thế chiến lược

  • Sử dụng sự đột phá của biến động giá để nắm bắt sự thay đổi xu hướng, tín hiệu đáng tin cậy hơn
  • Chỉ cần dữ liệu K-line cơ bản, thực hiện đơn giản
  • Hạn lý hợp lý, Hạn lý trong ngày, Kiểm soát rủi ro hiệu quả
  • Thích hợp cho các tuyến đường ngắn trong ngày, tránh nguy cơ qua đêm
  • Các tham số ít hơn, dễ dàng tối ưu hóa

Rủi ro chiến lược và giải pháp

  • Có một số sự chậm trễ, có thể bỏ lỡ cơ hội để bắt đầu xu hướng

Có thể điều chỉnh khoảng thời gian thích hợp, hoặc kết hợp các chỉ số khác để xác định thời gian nhập cảnh

  • Có nhiều tín hiệu sai khi xu hướng không rõ ràng

Các tham số có thể được điều chỉnh thích hợp, hoặc thêm các điều kiện lọc, chẳng hạn như chỉ số xu hướng, khối lượng giao dịch, v.v.

  • Giao dịch đường dây ngắn trong ngày đòi hỏi chi phí tài chính cao hơn

Có thể điều chỉnh kích thước vị thế hoặc kéo dài thời gian giữ vị trí một cách thích hợp

  • Tùy thuộc vào tối ưu hóa tham số, hiệu quả có thể khác nhau tùy theo tình huống thị trường

Điều chỉnh các tham số theo các điều kiện thị trường khác nhau hoặc tự động tối ưu hóa bằng các phương pháp như học máy

Hướng tối ưu hóa chiến lược

  • Thử các dữ liệu giá khác như giá điển hình, giá trung bình, v.v.

  • Điều kiện lọc như tăng khối lượng giao dịch hoặc tỷ lệ biến động

  • Thử các tham số khác nhau

  • Kết hợp các chỉ số xu hướng để xác định xu hướng

  • Tự động tối ưu hóa tham số bằng cách sử dụng phương pháp học máy

  • Mở rộng đến nhiều khoảng thời gian, thay đổi thời gian vào sân

Tóm tắt

Chiến lược này có ý tưởng tổng thể rõ ràng và đơn giản, nắm bắt xu hướng ngắn hạn bằng cách sử dụng hiệu quả đột phá di động của giá, đạt được yếu tố lợi nhuận cao hơn. Các tham số chiến lược ít hơn, dễ kiểm tra và tối ưu hóa, phù hợp với hoạt động ngắn hạn trong ngày. Mặc dù có một số vấn đề về chậm trễ và tín hiệu giả, nhưng có thể được cải thiện bằng cách điều chỉnh tham số, thêm các điều kiện lọc, v.v., có rất nhiều không gian tối ưu hóa.

Mã nguồn chiến lược
/*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)