Combo Momentum Reversal Dual-Rail Matching Strategy - Chiến lược khớp hai đường ray

Tác giả:ChaoZhang, Ngày: 2023-11-24 10:17:15
Tags:

img

Tổng quan

Chiến lược này kết hợp nhiều chỉ số kỹ thuật để thực hiện đảo ngược động lượng và khớp hai đường ray để tạo ra tín hiệu giao dịch. Chiến lược sử dụng mô hình 123 để xác định các điểm đảo ngược và khớp tín hiệu với chỉ số CSI ergodic để theo dõi xu hướng. Nó nhằm mục đích nắm bắt xu hướng trung hạn và đạt được lợi nhuận cao.

Nguyên tắc

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

  1. 123 mô hình để xác định các điểm đảo ngược
  2. Chỉ số CSI Ergodic để tạo ra các tín hiệu phù hợp

Mô hình 123 đánh giá sự đảo ngược giá dựa trên giá đóng của 3 thanh gần đây. Nếu giá đóng của thanh thứ 3 tăng so với 2 thanh trước đó, và cả cổ phiếu nhanh và chậm đều dưới 50, đó là tín hiệu mua. Nếu giá đóng của thanh thứ 3 giảm so với 2 thanh trước đó, và cả cổ phiếu nhanh và chậm đều trên 50, đó là tín hiệu bán.

Chỉ số CSI ergodic xem xét nhiều yếu tố như giá, phạm vi thực sự, chỉ số xu hướng để xác định toàn diện điều kiện thị trường và tạo ra các vùng mua / bán. Khi chỉ số tăng trên vùng mua, nó tạo ra một tín hiệu mua. Khi chỉ số giảm dưới vùng bán, nó tạo ra một tín hiệu bán.

Cuối cùng, các tín hiệu đảo ngược từ 123 tín hiệu mẫu và vùng từ CSI ergodic được ANDed để tạo ra tín hiệu chiến lược cuối cùng.

Ưu điểm

  1. Nhận được xu hướng trung hạn và ngắn hạn, tiềm năng lợi nhuận cao
  2. Xác định mô hình đảo ngược có hiệu quả bắt được các bước ngoặt
  3. Khớp nối hai đường ray làm giảm tín hiệu sai

Rủi ro

  1. Các cổ phiếu cá nhân có thể khác nhau, dẫn đến dừng lỗ
  2. Các mô hình đảo ngược dễ bị ảnh hưởng từ các thị trường giới hạn phạm vi
  3. Không gian tối ưu hóa tham số hạn chế, biến động hiệu suất cao

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

  1. Tối ưu hóa các thông số để cải thiện lợi nhuận chiến lược
  2. Thêm logic dừng lỗ để giảm lỗ giao dịch duy nhất
  3. Kết hợp các mô hình đa yếu tố để cải thiện lựa chọn cổ phiếu

Kết luận

Chiến lược này theo dõi hiệu quả xu hướng trung hạn ngắn hạn bằng cách kết hợp các mô hình đảo ngược và khớp hai đường ray. So với các chỉ số kỹ thuật duy nhất, nó có mức độ ổn định và lợi nhuận cao hơn.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 22/07/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 one of the techniques described by William Blau in his book 
// "Momentum, Direction and Divergence" (1995). If you like to learn more, 
// we advise you to read this book. His book focuses on three key aspects 
// of trading: momentum, direction and divergence. Blau, who was an electrical 
// engineer before becoming a trader, thoroughly examines the relationship between 
// price and momentum in step-by-step examples. From this grounding, he then looks 
// at the deficiencies in other oscillators and introduces some innovative techniques, 
// including a fresh twist on Stochastics. On directional issues, he analyzes the 
// intricacies of ADX and offers a unique approach to help define trending and 
// non-trending periods.
// This indicator plots Ergotic CSI and smoothed Ergotic CSI to filter out noise. 
//
// 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

fADX(Len) =>
    up = change(high)
    down = -change(low)
    trur = rma(tr, Len)
    plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, Len) / trur)
    minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, Len) / trur)
    sum = plus + minus 
    100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), Len)

ECSI(r,Length,BigPointValue,SmthLen,SellZone,BuyZone) =>
    pos = 0
    source = close
    K = 100 * (BigPointValue / sqrt(r) / (150 + 5))
    xTrueRange = atr(1) 
    xADX = fADX(Length)
    xADXR = (xADX + xADX[1]) * 0.5
    nRes = iff(Length + xTrueRange > 0, K * xADXR * xTrueRange / Length,0)
    xCSI = iff(close > 0,  nRes / close, 0)
    xSMA_CSI = sma(xCSI, SmthLen)
    pos := iff(xSMA_CSI > BuyZone, 1,
             iff(xSMA_CSI <= SellZone, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Ergodic CSI", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
r = input(32, minval=1)
LengthECSI = input(1, minval=1)
BigPointValue = input(1.0, minval=0.00001)
SmthLen = input(5, minval=1)
SellZone = input(0.06, minval=0.00001)
BuyZone = input(0.02, minval=0.001)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posECSI = ECSI(r,LengthECSI,BigPointValue,SmthLen,SellZone,BuyZone)
pos = iff(posReversal123 == 1 and posECSI == 1 , 1,
	   iff(posReversal123 == -1 and posECSI == -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