Chiến lược đảo ngược định lượng và tổng hợp khối lượng

Tác giả:ChaoZhang, Ngày: 2023-09-21 21:07:09
Tags:

Tổng quan

Chiến lược này kết hợp hai chiến lược giao dịch định lượng để tạo ra các tín hiệu giao dịch chính xác và đáng tin cậy hơn. Chiến lược đầu tiên dựa trên đảo ngược giá và chiến lược thứ hai dựa trên phân tích khối lượng. Các tín hiệu kết hợp có thể cải thiện hiệu quả lợi nhuận.

Chiến lược logic

Chiến lược bao gồm hai phần:

  1. Chiến lược đảo ngược

Sử dụng chỉ số STO cho tín hiệu đảo ngược. Đi dài khi gần tăng trong 2 ngày và đường chậm STO dưới 50. Đi ngắn khi gần giảm trong 2 ngày và đường nhanh STO trên 50.

  1. Chiến lược khối lượng

Phân tích mối quan hệ giá - khối lượng trong một khoảng thời gian để xác định hướng, với sự mượt mà trung bình động.

Nó đi dài khi cả hai chiến lược tín hiệu dài, và đi ngắn khi cả hai tín hiệu ngắn.

Sự kết hợp cải thiện chất lượng tín hiệu bằng cách giảm đáng kể các tín hiệu sai từ cả hai chiến lược.

Ưu điểm

  • Kết hợp hai chiến lược độc lập, cải thiện độ chính xác
  • Sự đảo ngược nắm bắt cơ hội chuyển đổi, khối lượng dự báo hướng đi trong tương lai
  • Các loại chiến lược khác nhau xác minh lẫn nhau, giảm tín hiệu sai
  • Kết hợp trực tiếp đơn giản, dễ thực hiện
  • Các tham số của mỗi chiến lược có thể được tối ưu hóa riêng biệt

Rủi ro

  • Việc đảo ngược rủi ro mà không có các quy tắc thoát nghiêm ngặt
  • Phân tích khối lượng có thể bị chậm
  • Chỉ dựa trên chỉ số, đòi hỏi phân tích kỹ thuật
  • Các chuỗi dữ liệu dài hơn cần thiết cho các đường trung bình động
  • Các thông số có thể không phổ biến trên tất cả các sản phẩm

Các rủi ro có thể được giảm bằng cách:

  • Tối ưu hóa STO để phát hiện đảo ngược tốt hơn
  • Thêm các chỉ số để xác nhận sự phá vỡ khối lượng
  • Tối ưu hóa thời gian trung bình động
  • Phân tích mô hình biểu đồ bổ sung
  • Kiểm tra tham số riêng biệt theo sản phẩm

Hướng dẫn cải thiện

Chiến lược có thể được cải thiện bằng cách:

  1. Tối ưu hóa các thông số STO

    Giá trị K, D tinh chỉnh cho các kết hợp tốt nhất

  2. Xác nhận thứ cấp về việc phá vỡ âm lượng

    Với các chỉ số như MACD, BOLL...

  3. Tối ưu hóa thời gian trung bình động

    Kiểm tra các khoảng thời gian khác nhau cho các tín hiệu ổn định hơn

  4. Thêm mẫu biểu đồ

    Nhập các mẫu ngoài các tín hiệu combo

  5. Kiểm tra tham số cụ thể sản phẩm

    Các thông số có thể khác nhau giữa các sản phẩm khác nhau

Tóm lại

Chiến lược này kết hợp các chiến lược đảo ngược và khối lượng để cải thiện chất lượng và độ chính xác tín hiệu. Nhưng tối ưu hóa tham số, các chỉ số kỹ thuật bổ sung, v.v. có thể cải thiện hiệu suất hơn nữa. Chúng ta có thể liên tục điều chỉnh dựa trên kết quả backtest, xác nhận trong giao dịch trực tiếp, để có được một chiến lược combo thực sự mạnh mẽ. Điều này đòi hỏi rất nhiều thời gian và nỗ lực, nhưng phần thưởng cũng sẽ đáng kể.


/*backtest
start: 2023-09-13 00:00:00
end: 2023-09-20 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 21/10/2020
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// This is another version of FVE indicator that we have posted earlier 
// in this forum.
// This version has an important enhancement to the previous one that`s 
// especially useful with intraday minute charts.
// Due to the volatility had not been taken into account to avoid the extra 
// complication in the formula, the previous formula has some drawbacks:
// The main drawback is that the constant cutoff coefficient will overestimate 
// price changes in minute charts and underestimate corresponding changes in 
// weekly or monthly charts.
// And now the indicator uses adaptive cutoff coefficient which will adjust to 
// all time frames automatically.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos


FVI(Samples,Perma,Cintra,Cinter) =>
    pos = 0
    xhl2 = hl2
    xhlc3 = hlc3
    xClose = close
    xIntra = log(high) - log(low)
    xInter = log(xhlc3) - log(xhlc3[1])
    xStDevIntra = stdev(sma(xIntra, Samples) , Samples)
    xStDevInter = stdev(sma(xInter, Samples) , Samples)
    xVolume = volume
    TP = xhlc3
    TP1 = xhlc3[1]
    Intra = xIntra
    Vintra = xStDevIntra
    Inter = xInter
    Vinter = xStDevInter
    CutOff = Cintra * Vintra + Cinter * Vinter
    MF = xClose - xhl2 + TP - TP1
    FveFactor =  iff(MF > CutOff * xClose, 1, 
                  iff(MF < -1 * CutOff * xClose, -1,  0))
    xVolumePlusMinus = xVolume * FveFactor
    Fvesum = sum(xVolumePlusMinus, Samples)
    VolSum = sum(xVolume, Samples)
    xFVE = (Fvesum / VolSum) * 100
    xEMAFVE = ema(xFVE, Perma)
    pos :=iff(xFVE > xEMAFVE, 1,
    	   iff(xFVE < xEMAFVE, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Volatility Finite Volume Elements", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
Samples = input(22, minval=1)
Perma = input(40, minval=1)
Cintra = input(0.1)
Cinter = input(0.1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posFVI = FVI(Samples,Perma,Cintra,Cinter)
pos = iff(posReversal123 == 1 and posFVI == 1 , 1,
	   iff(posReversal123 == -1 and posFVI == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Thêm nữa