Chiến lược kết hợp hai đường chéo trung bình động và chỉ số Williams

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

img

Tổng quan

Chiến lược này kết hợp hai chiến lược khác nhau. Chiến lược đầu tiên tạo ra các tín hiệu dựa trên đường chéo trung bình động kép của giá cổ phiếu. Chiến lược thứ hai dựa trên dao động tuyệt vời từ Chỉ số Williams.

Chiến lược logic

Chiến lược đầu tiên tạo ra tín hiệu mua khi ngày hôm qua đóng cửa cao hơn ngày hôm trước đóng cửa và dao động Stochastic 9 ngày nhanh thấp hơn đường D-line Stochastic Oscillator 3 ngày chậm. Nó tạo ra tín hiệu bán khi ngày hôm qua đóng cửa thấp hơn ngày hôm trước đóng cửa và dao động Stochastic nhanh cao hơn đường D-line Stochastic Oscillator chậm.

Chiến lược thứ hai tính toán sự khác biệt giữa biến động giá 5 ngày và 34 ngày và tính toán trung bình động của sự khác biệt đó. Khi giá trị hiện tại cao hơn giai đoạn trước, đó là tín hiệu mua. Khi giá trị hiện tại thấp hơn giai đoạn trước, đó là tín hiệu bán.

Hai tín hiệu chiến lược được kết hợp bằng cách lấy giao điểm của chúng. Một vị trí dài được thực hiện khi cả hai chiến lược cung cấp tín hiệu mua. Một vị trí ngắn được thực hiện khi cả hai chiến lược cung cấp tín hiệu bán.

Phân tích lợi thế

Chiến lược này kết hợp các lợi thế của chiến lược chéo trung bình di chuyển kép và chiến lược chỉ số Williams. Chiến lược chéo trung bình di chuyển kép có thể bắt được xu hướng trung hạn đến dài hạn. Chiến lược chỉ số Williams có thể nắm bắt các cơ hội giao dịch ngắn hạn. Kết hợp hai chiến lược cho phép cả lợi nhuận và ngăn chặn sự phá vỡ sai.

Ngoài ra, việc sử dụng nhiều thông số đầu vào cho phép tối ưu hóa cho các cổ phiếu và điều kiện thị trường khác nhau, làm cho chiến lược có thể thích nghi với nhiều môi trường thị trường hơn.

Phân tích rủi ro

Rủi ro lớn nhất là các tín hiệu từ hai chiến lược có thể không phù hợp. Khi một chiến lược tạo ra tín hiệu mua trong khi chiến lược khác tạo ra tín hiệu bán, chiến lược kết hợp không thể tạo ra một tín hiệu có ý nghĩa, có khả năng bỏ lỡ cơ hội giao dịch.

Ngoài ra, nhiều tham số gây ra một số khó khăn cho việc tối ưu hóa.

Để giảm rủi ro, một trong hai tín hiệu chiến lược có thể được sử dụng độc quyền.

Cơ hội gia tăng

Chiến lược có thể được cải thiện trong một số khía cạnh:

  1. Đánh giá sự nhất quán tín hiệu giữa hai chiến lược dưới các kết hợp tham số khác nhau để tìm các tham số tối ưu cho sự phù hợp của tín hiệu.

  2. Kiểm tra hiệu suất trên các sản phẩm khác nhau, khung thời gian để tìm phạm vi ứng dụng tốt nhất.

  3. Xem xét thay thế đường chéo trung bình động kép bằng các chỉ số kỹ thuật khác như KDJ để đa dạng hóa sự kết hợp chiến lược.

  4. Tích hợp các cơ chế dừng lỗ để kiểm soát rủi ro, ví dụ: đặt mức dừng rút tối đa.

Kết luận

Chiến lược này kết hợp chiến lược chéo trung bình động kép và chiến lược chỉ số Williams để nắm bắt cả theo dõi xu hướng và tín hiệu ngắn hạn. Thông qua tối ưu hóa tham số, nó có thể thích nghi với một loạt các điều kiện thị trường. Tuy nhiên, việc khớp tín hiệu không nhất quán và tối ưu hóa tham số phức tạp vẫn là những thách thức của nó. Nhìn chung, nó cung cấp một cách tiếp cận hiệu quả cho giao dịch định lượng và đáng nghiên cứu và tối ưu hóa hơn nữa để giảm rủi ro và cải thiện độ bền.


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

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 20/06/2019
// 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 indicator plots the oscillator as a histogram where blue denotes 
//    periods suited for buying and red . for selling. If the current value 
//    of AO (Awesome Oscillator) is above previous, the period is considered 
//    suited for buying and the period is marked blue. If the AO value is not 
//    above previous, the period is considered suited for selling and the 
//    indicator marks it as red.
//  You can make changes in the property for set calculating strategy MA, EMA, WMA
//
// 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

BillWilliamsAC(nLengthSlow, nLengthFast,nLengthMA, nLengthEMA, nLengthWMA, bShowWMA, bShowMA, bShowEMA) =>
    pos = 0
    xSMA1_hl2 = sma(hl2, nLengthFast)
    xSMA2_hl2 = sma(hl2, nLengthSlow)
    xSMA1_SMA2 = xSMA1_hl2 - xSMA2_hl2
    xSMA_hl2 = sma(xSMA1_SMA2, nLengthFast)
    nRes =  xSMA1_SMA2 - xSMA_hl2
    xResWMA = wma(nRes, nLengthWMA)
    xResMA = sma(nRes, nLengthMA)
    xResEMA = ema(nRes, nLengthEMA)
    xSignalSeries = iff(bShowWMA, xResWMA,
                     iff(bShowMA, xResMA, 
                      iff(bShowEMA, xResEMA, na)))
    cClr = nRes > nRes[1] ? blue : red
    pos := iff(xSignalSeries[2] < 0 and xSignalSeries[1] > 0, 1,
	         iff(xSignalSeries[2] > 0 and xSignalSeries[1] < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Bill Williams. Awesome Oscillator (AC) with Signal Line", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
nLengthSlow = input(34, minval=1, title="Length Slow")
nLengthFast = input(5, minval=1, title="Length Fast")
nLengthMA = input(15, minval=1, title="MA")
nLengthEMA = input(15, minval=1, title="EMA")
nLengthWMA = input(15, minval=1, title="WMA")
bShowWMA = input(type=bool, defval=true, title="Show and trading WMA")
bShowMA = input(type=bool, defval=false, title="Show and trading MA")
bShowEMA = input(type=bool, defval=false, title="Show and trading EMA")
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posBillWilliamsAC = BillWilliamsAC(nLengthSlow, nLengthFast,nLengthMA, nLengthEMA, nLengthWMA, bShowWMA, bShowMA, bShowEMA)
pos = iff(posReversal123 == 1 and posBillWilliamsAC == 1 , 1,
	   iff(posReversal123 == -1 and posBillWilliamsAC == -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 ? red: possig == 1 ? green : blue )

Thêm nữa