Chiến lược giao dịch lượng xác nhận kép

Tác giả:ChaoZhang, Ngày: 2024-01-15
Tags:

img

Tổng quan

Chiến lược giao dịch số lượng xác nhận kép thực hiện xác nhận kép các tín hiệu giao dịch bằng cách kết hợp chiến lược đảo ngược 123 và các chiến lược phụ Tỷ lệ phần trăm khối lượng dao động (PVO) để giảm rủi ro giao dịch.

Nguyên tắc giao dịch

123 Chiến lược đảo ngược

Chiến lược đảo ngược 123 dựa trên các mô hình đường K được thực hiện bởi chỉ số Stochastic. Cụ thể, nó đi dài khi giá đóng thấp hơn giá đóng của ngày trước trong hai ngày liên tiếp và Stochastic chậm 9 ngày dưới 50; nó đi ngắn khi giá đóng cao hơn giá đóng của ngày trước trong hai ngày liên tiếp và Stochastic nhanh 9 ngày trên 50.

Phân phần khối lượng dao động (PVO)

PVO là một bộ dao động động dựa trên khối lượng. Nó đo sự khác biệt giữa hai trung bình động theo cấp số nhân của khối lượng trong các giai đoạn khác nhau như một tỷ lệ phần trăm của trung bình thời gian dài hơn. Nó là dương tính khi EMA thời gian ngắn hơn nằm trên EMA thời gian dài hơn và âm khi EMA thời gian ngắn hơn nằm dưới. Chỉ số này phản ánh sự tăng và giảm của khối lượng giao dịch.

Phân tích lợi thế

Chiến lược này kết hợp các chỉ số giá và khối lượng để lọc hiệu quả các sự phá vỡ sai. Đồng thời, bằng cách sử dụng cơ chế xác nhận kép, nó có thể giảm tần suất giao dịch và giảm rủi ro giao dịch.

Phân tích rủi ro

Chiến lược này dựa trên thời gian giữ dài hơn, với nguy cơ rút tiền. Ngoài ra, cài đặt tham số không đúng cũng có thể dẫn đến giao dịch quá mức hoặc mất tín hiệu.

Hướng dẫn tối ưu hóa

Hiệu suất của các chiến lược phụ có thể được tối ưu hóa bằng cách điều chỉnh các tham số của Stochastic và PVO. Các cơ chế dừng lỗ cũng có thể được giới thiệu để kiểm soát rủi ro. Ngoài ra, lọc tín hiệu với các chỉ số khác có thể cải thiện thêm sự ổn định của chiến lược.

Kết luận

Chiến lược giao dịch số lượng xác nhận kép tính đến cả yếu tố giá cả và khối lượng với kết quả backtest tốt. Thông qua điều chỉnh tham số và tối ưu hóa lọc tín hiệu, chiến lược này có tiềm năng tăng thêm sự ổn định và trở thành một công cụ mạnh mẽ cho giao dịch định lượng.


/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 14/04/2021
// 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
// The Percentage Volume Oscillator (PVO) is a momentum oscillator for volume. 
// PVO measures the difference between two volume-based moving averages as a 
// percentage of the larger moving average. As with MACD and the Percentage Price 
// Oscillator (PPO), it is shown with a signal line, a histogram and a centerline. 
// PVO is positive when the shorter volume EMA is above the longer volume EMA and 
// negative when the shorter volume EMA is below. This indicator can be used to define 
// the ups and downs for volume, which can then be use to confirm or refute other signals. 
// Typically, a breakout or support break is validated when PVO is rising or positive. 
//
// 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


PVO(LengthShortEMA,LengthLongEMA,LengthSignalEMA) =>
    pos = 0.0
    xShortEMA = ema(volume , LengthShortEMA)
    xLongEMA = ema(volume , LengthLongEMA)
    xPVO = ((xShortEMA - xLongEMA) / xLongEMA) * 100
    xSignalEMA = ema(xPVO , LengthSignalEMA)
    xPVOHisto = xPVO - xSignalEMA
    pos := iff(xSignalEMA < xPVO, -1,
    	      iff(xSignalEMA > xPVO, 1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Percentage Volume Oscillator (PVO)", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- Percentage Volume OscillatorA ----")
LengthShortEMA = input(12, minval=1)
LengthLongEMA = input(26, minval=1)
LengthSignalEMA = input(9, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posPVO = PVO(LengthShortEMA,LengthLongEMA,LengthSignalEMA)
pos = iff(posReversal123 == 1 and posPVO == 1 , 1,
	   iff(posReversal123 == -1 and posPVO == -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