Chiến lược đảo ngược nhấp đôi Quant Trading

Tác giả:ChaoZhang, Ngày: 2023-11-22 10:03:04
Tags:

img

Tổng quan

Chiến lược này trước tiên sử dụng mô hình 123 để xác định tín hiệu đảo ngược, và sau đó kết hợp Bộ dao động khối lượng Klinger như một bộ lọc để thực hiện chiến lược lợi nhuận định lượng nhấp hai lần để nắm bắt hiệu quả các cơ hội đảo ngược.

Nguyên tắc

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

  1. Mô hình để xác định tín hiệu đảo ngược: khi giá đóng liên tục giảm trong 2 ngày liên tiếp và ngày thứ 3 đóng tích cực, và chỉ số chứng khoán ở mức thấp trong thời gian dài; khi giá đóng liên tục tăng trong 2 ngày liên tiếp và ngày thứ 3 đóng âm, và chỉ số chứng khoán ở mức cao trong thời gian ngắn.

  2. Klinger Volume Oscillator section: Klinger Volume Oscillator kết hợp phạm vi biến động giá và thay đổi khối lượng giao dịch để xác định dòng vốn chảy vào và chảy ra. Khi dao động khối lượng vượt quá giá trị trung bình của nó, đó là tín hiệu dài; khi nó vượt dưới giá trị trung bình của nó, đó là tín hiệu ngắn.

Cuối cùng, chiến lược kết hợp các tín hiệu từ hai phần trên và nhấp đúp để xác định mục cuối cùng.

Phân tích lợi thế

Ưu điểm lớn nhất của chiến lược này là nó kết hợp các mô hình đảo ngược và các chỉ số khối lượng để nắm bắt hiệu quả các cơ hội đảo ngược. Ngoài ra, với sự giúp đỡ của chỉ số cổ phiếu, tránh đột phá sai, và Bộ dao động khối lượng Klinger để xác định hướng dòng tiền thực, thời gian vào chính xác có thể được đảm bảo.

Phân tích rủi ro

Rủi ro chính của chiến lược này nằm ở vấn đề đánh giá mô hình đảo ngược và thiết lập tham số. Do sự chậm trễ trong tín hiệu đảo ngược, nó cần đảm bảo rằng các tham số được thiết lập hợp lý để tránh bỏ lỡ thời gian đảo ngược tốt nhất. Ngoài ra, các mô hình đảo ngược có thể thất bại.

Để giảm rủi ro, bạn có thể tối ưu hóa các tham số để làm cho tín hiệu đảo ngược nhanh hơn và kịp thời.

Hướng tối ưu hóa

Không gian tối ưu hóa chính cho chiến lược này là điều chỉnh tham số và thêm các phán đoán phụ khác. Cụ thể, có thể rút ngắn các tham số chỉ số cổ phiếu một cách thích hợp để tối ưu hóa độ nhạy của sự phân biệt mô hình 123. Nó cũng có thể kết hợp với các chỉ số và mô hình chính thống hiện tại, chẳng hạn như thêm các đường chéo vàng và đường chéo chết người của MACD, hoặc các đường đáy đa gấp đôi trên / dưới và các phán đoán khác.

Ngoài ra, hãy xem xét điều chỉnh động các điều kiện dừng lỗ và lấy lợi nhuận để làm cho chiến lược thích nghi hơn với những thay đổi của thị trường.

Tóm lại

Chiến lược này tích hợp việc áp dụng các lý thuyết đảo ngược cổ điển và các chỉ số kỹ thuật khối lượng để nắm bắt hiệu quả các cơ hội đảo ngược. Không gian tối ưu hóa rất lớn và có tiềm năng cải thiện thêm hiệu quả, đáng để xác nhận và tối ưu hóa liên tục trong giao dịch thực tế.


/*backtest
start: 2023-10-22 00:00:00
end: 2023-11-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 23/12/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
// The Klinger Oscillator (KO) was developed by Stephen J. Klinger. Learning 
// from prior research on volume by such well-known technicians as Joseph Granville, 
// Larry Williams, and Marc Chaikin, Mr. Klinger set out to develop a volume-based 
// indicator to help in both short- and long-term analysis.
// The KO was developed with two seemingly opposite goals in mind: to be sensitive 
// enough to signal short-term tops and bottoms, yet accurate enough to reflect the 
// long-term flow of money into and out of a security.
// The KO is based on the following tenets:
// Price range (i.e. High - Low) is a measure of movement and volume is the force behind 
// the movement. The sum of High + Low + Close defines a trend. Accumulation occurs when 
// today's sum is greater than the previous day's. Conversely, distribution occurs when 
// today's sum is less than the previous day's. When the sums are equal, the existing trend 
// is maintained.
// Volume produces continuous intra-day changes in price reflecting buying and selling pressure. 
// The KO quantifies the difference between the number of shares being accumulated and distributed 
// each day as "volume force". A strong, rising volume force should accompany an uptrend and then 
// gradually contract over time during the latter stages of the uptrend and the early stages of 
// the following downtrend. This should be followed by a rising volume force reflecting some 
// accumulation before a bottom develops.
//
// 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

KVO(TrigLen,FastX,SlowX) =>
    pos = 0.0
    xTrend = iff(hlc3 > hlc3[1], volume * 100, -volume * 100)
    xFast = ema(xTrend, FastX)
    xSlow = ema(xTrend, SlowX)
    xKVO = xFast - xSlow
    xTrigger = ema(xKVO, TrigLen)
    pos := iff(xKVO > xTrigger, 1,
    	     iff(xKVO < xTrigger, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Klinger Volume Oscillator", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
TrigLen = input(13, minval=1)
FastX = input(34, minval=1)
SlowX = input(55, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posKVO = KVO(TrigLen,FastX,SlowX)
pos = iff(posReversal123 == 1 and posKVO == 1 , 1,
	   iff(posReversal123 == -1 and posKVO == -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