Chiến lược dao động chu kỳ xen kẽ dài-ngắn dựa trên tỷ lệ thay đổi thể tích


Ngày tạo: 2023-10-30 11:45:42 sửa đổi lần cuối: 2023-10-30 11:45:42
sao chép: 1 Số nhấp chuột: 686
1
tập trung vào
1617
Người theo dõi

Chiến lược dao động chu kỳ xen kẽ dài-ngắn dựa trên tỷ lệ thay đổi thể tích

Tổng quan

Chiến lược này, bằng cách tính toán tỷ lệ biến đổi của khối lượng giao dịch, để đánh giá chuyển đổi của chu kỳ đa không, thuộc loại chiến lược Phân biến giá. Nó kết hợp các chỉ số động lực của khối lượng giao dịch và dải Brinh của giá, để đánh giá hiệu ứng dẫn đầu của sự thay đổi khối lượng giao dịch đối với giá cả, để nắm bắt các điểm biến của xu hướng.

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

  1. Tính toán tỷ lệ thay đổi của tỷ lệ biến đổi khối lượng giao dịch (tỷ lệ biến đổi của chỉ số chênh lệch khối lượng giao dịch), lấy chỉ số dựa trên động lực khối lượng giao dịch nresult

  2. Đối với nresult tính các dải Brin, và nhận được bbr, đại diện cho sự chênh lệch tiêu chuẩn động lượng giao dịch.

  3. Tính đến giá đóng cửa, Brines được tính, và bbr1 được dùng để đại diện cho chênh lệch tiêu chuẩn của giá.

  4. Tính phân biệt giữa hai giá trị là hist, tức là chênh lệch tiêu chuẩn động lượng giao dịch trừ chênh lệch tiêu chuẩn giá, làm chỉ số cuối cùng.

  5. Khi sử dụng 0 trên là điểm vào đầu trống, khi sử dụng 0 dưới là điểm vào đầu nhiều.

Chiến lược này tăng cường hiệu ứng dẫn đầu của sự thay đổi khối lượng giao dịch đối với giá bằng cách tính toán tỷ lệ thay đổi khối lượng giao dịch. Khi khối lượng giao dịch bị đảo ngược và giá chưa đảo ngược, hist sẽ vượt lên hoặc xuống 0, tạo ra tín hiệu giao dịch. Nó có thể xác định trước điểm đảo chiều của xu hướng giá.

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

  1. Chiến lược này dựa trên tỷ lệ biến đổi khối lượng giao dịch và giá cả khác với chiến lược, có thể phản ánh trước xu hướng giá cả.

  2. Tính toán tỷ lệ biến đổi của tỷ lệ biến đổi khối lượng giao dịch, tăng cường hiệu ứng dẫn đầu của biến đổi khối lượng giao dịch đối với giá cả, hiệu quả giao dịch tốt hơn.

  3. Brinband kết hợp chỉ số động lượng giao dịch với chỉ số giá, làm cho tín hiệu giao dịch đáng tin cậy hơn.

  4. Sử dụng xử lý dữ liệu hist bằng ba lần trơn trơn, làm cho tín hiệu chính xác và mượt mà hơn.

  5. Thiết lập đường mua bán quá mức, và kết hợp với lệnh dừng lỗ dài hạn, có thể kiểm soát rủi ro hiệu quả.

  6. Các tham số có thể được tùy chỉnh, chẳng hạn như độ dài của dải Brin, nhân chênh lệch tiêu chuẩn, tham số làm mịn dữ liệu của Hist, v.v., có thể được tối ưu hóa theo chiến lược.

Rủi ro chiến lược

  1. Dữ liệu giao dịch không nhất thiết phải phản ánh một cách chính xác các giao dịch trên thị trường và có thể bị thao túng.

  2. Giá cả có thể vượt qua và không thay đổi.

  3. Thiết lập tham số không đúng có thể dẫn đến giao dịch thường xuyên hoặc tín hiệu không chính xác.

  4. Cần chú ý để tránh các tín hiệu sai lệch về số lượng giao dịch.

  5. Các tín hiệu đảo ngược có thể gây ra giao dịch sai.

Có thể lọc thông qua các tham số tối ưu hóa, kết hợp với các chỉ số khác, thiết lập chặn dừng để đảm bảo rủi ro có thể được kiểm soát.

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

  1. Tối ưu hóa các tham số của băng tần Brin để làm cho tín hiệu ổn định hơn.

  2. Kết hợp các chỉ số xu hướng để lọc tín hiệu và tránh giao dịch ngược.

  3. Thêm xác nhận các chỉ số khác, chẳng hạn như MACD, để ngăn chặn tín hiệu giả.

  4. Sử dụng công nghệ AI để tự điều chỉnh các tham số.

  5. Thêm mô-đun điều chỉnh động của Stop Loss Stop Stop và tối ưu hóa quản lý tiền.

  6. Kết hợp với máy học để đánh giá giá cả và tỷ lệ thành công, cải thiện chất lượng tín hiệu.

Tóm tắt

Chiến lược này có thể xác định xu hướng giá sớm bằng cách tính toán tỷ lệ thay đổi của tỷ lệ giao dịch, tăng cường hiệu quả dẫn đầu của sự thay đổi khối lượng giao dịch đối với giá. Điểm giao dịch có độ tin cậy và độ chính xác cao hơn so với chỉ số khối lượng giao dịch đơn lẻ.

Mã nguồn chiến lược
/*backtest
start: 2022-10-23 00:00:00
end: 2023-10-29 00:00:00
period: 1d
basePeriod: 1h
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/
// © tathal and special thanks to oakwhiz for his porting of my custom volume indicator

//@version=5
strategy('Volume Difference Delta Cycle Oscillator', 'VDDC Osc', default_qty_type=strategy.percent_of_equity, default_qty_value=100, max_bars_back=5000)

startDate = input.int(title='Start Date', defval=1, minval=1, maxval=31)
startMonth = input.int(title='Start Month', defval=1, minval=1, maxval=12)
startYear = input.int(title='Start Year', defval=2010, minval=1800, maxval=2100)

endDate = input.int(title='End Date', defval=31, minval=1, maxval=31)
endMonth = input.int(title='End Month', defval=12, minval=1, maxval=12)
endYear = input.int(title='End Year', defval=2021, minval=1800, maxval=2100)

// Normalize Function
normalize(_src, _min, _max) =>
    // Normalizes series with unknown min/max using historical min/max.
    // _src      : series to rescale.
    // _min, _min: min/max values of rescaled series.
    var _historicMin = 10e10
    var _historicMax = -10e10
    _historicMin := math.min(nz(_src, _historicMin), _historicMin)
    _historicMax := math.max(nz(_src, _historicMax), _historicMax)
    _min + (_max - _min) * (_src - _historicMin) / math.max(_historicMax - _historicMin, 10e-10)


// STEP 2:
// Look if the close time of the current bar
// falls inside the date range
inDateRange = true

// Stop loss & Take Profit Section     
l_sl_inp = input(2.0, title='Long Stop Loss %') / 100
l_tp_inp = input(4.0, title='Long Take Profit %') / 100

l_stop_level = strategy.position_avg_price * (1 - l_sl_inp)
l_take_level = strategy.position_avg_price * (1 + l_tp_inp)

s_sl_inp = input(2.0, title='Short Stop Loss %') / 100
s_tp_inp = input(4.0, title='Short Take Profit %') / 100

s_stop_level = strategy.position_avg_price * (1 + s_sl_inp)
s_take_level = strategy.position_avg_price * (1 - s_tp_inp)

src = close

//  Volume Differnce Indicator Delta

float change_src = ta.change(src)
float i_obv = ta.cum(change_src > 0 ? volume : change_src < 0 ? -volume : 0 * volume)
float i_pvt = ta.pvt

float result = ta.change(i_obv - i_pvt)

float nresult = ta.ema(normalize(result, -1, 1), 20)


// Volume Differnce Indicator Delta %B
length = input.int(20, minval=1, title='Volume Bands Length')
mult = input.float(2.0, minval=0.001, maxval=50, title='Volume Bands StdDev')
basis = ta.ema(nresult, length)
dev = mult * ta.stdev(nresult, length)
upper = basis + dev
lower = basis - dev
bbr = (nresult - lower) / (upper - lower)

// Normal %B, Based on close

l1 = input.int(20, minval=1, title='Bollinger Bands Length')
src2 = close
mult1 = input.float(2.0, minval=0.001, maxval=50, title='Bollinger Bands StdDev')
basis1 = ta.sma(src2, l1)
dev1 = mult1 * ta.stdev(src2, l1)
upper1 = basis1 + dev1
lower1 = basis1 - dev1
bbr1 = (src - lower1) / (upper1 - lower1)

/// Final Output Line

hist = ta.ema(ta.ema(ta.ema(bbr1 - bbr, input(2, title='Hist Smoothing Factor #1')), input(2, title='Hist Smoothing Factor #2')), input(2, title='Hist Smoothing Factor #3'))

/// Overbought / Oversold Line Creation
oversold = input(-.1)
overbought = input(.4)
hline(oversold, linewidth=2, color=color.new(#81c784, 62))
hline(overbought, linewidth=2, color=color.new(#c2185b, 38))

/// Long & Short Conditions

short = hist > overbought
long = hist < oversold

/// Colors & Plotting
histColor = hist >= 0 ? hist[1] < hist ? #26A69A : #B2DFDB : hist[1] < hist ? #FFCDD2 : #EF5350
plot(hist, title='Histogram', style=plot.style_columns, color=color.new(histColor, 0))

CrossBgColor = long ? color.new(#81c784, 62) : short ? color.new(#c2185b, 38) : na
bgcolor(color.new(CrossBgColor, 90))

/// Strategy Methodology

if inDateRange
    strategy.entry('long', strategy.long, when=long, stop=l_stop_level, limit=l_take_level)

if inDateRange and strategy.position_size > 0
    strategy.close_all(when=short)

if inDateRange
    strategy.entry('short', strategy.short, when=short, stop=s_stop_level, limit=s_take_level)

if inDateRange and strategy.position_size < 0
    strategy.close_all(when=long)