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


Ngày tạo: 2024-02-01 15:04:51 sửa đổi lần cuối: 2024-02-01 15:04:51
sao chép: 0 Số nhấp chuột: 520
1
tập trung vào
1617
Người theo dõi

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

Tổng quan

Chiến lược này là sự kết hợp của hai chiến lược khác nhau, chiến lược đầu tiên dựa trên giá cổ phiếu để tạo ra tín hiệu; chiến lược thứ hai dựa trên chỉ số dao động kỳ diệu trong chỉ số Williams.

Nguyên tắc chiến lược

Nguyên tắc của chiến lược thứ nhất là, khi giá đóng cửa ngày hôm qua cao hơn giá đóng cửa ngày hôm trước, và đường K nhanh 9 ngày chỉ số ngẫu nhiên thấp hơn đường D chậm 3 ngày chỉ số ngẫu nhiên, tạo ra tín hiệu mua; khi giá đóng cửa ngày hôm qua thấp hơn giá đóng cửa ngày hôm trước, và đường K nhanh 9 ngày chỉ số ngẫu nhiên cao hơn đường D chậm 3 ngày chỉ số ngẫu nhiên, tạo ra tín hiệu bán.

Nguyên tắc của chiến lược thứ hai là tính toán chênh lệch giữa biến động giá trong 5 và 34 ngày và tính toán trung bình di chuyển của chênh lệch đó. Định nghĩa là mua khi giá hiện tại cao hơn chu kỳ trước và bán khi giá hiện tại thấp hơn chu kỳ trước.

Kết hợp hai chiến lược, tín hiệu cuối cùng lấy sự giao thoa của hai tín hiệu chiến lược. Khi hai chiến lược cùng phát ra tín hiệu mua, hãy làm nhiều hơn; Khi hai chiến lược cùng phát ra tín hiệu bán, hãy làm trống.

Phân tích lợi thế

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

Ngoài ra, chiến lược này sử dụng nhiều thiết lập nhập tham số, có thể tối ưu hóa tham số theo các cổ phiếu và tình hình thị trường khác nhau để thích ứng với môi trường thị trường rộng hơn.

Phân tích rủi ro

Rủi ro lớn nhất của chiến lược này là hai tín hiệu chiến lược có thể không phù hợp. Khi một chiến lược gửi tín hiệu mua và một chiến lược khác gửi tín hiệu bán, chiến lược không thể tạo ra tín hiệu hiệu quả và có thể bỏ lỡ cơ hội giao dịch.

Ngoài ra, chiến lược bao gồm nhiều tham số, điều này gây ra một số khó khăn cho việc tối ưu hóa tham số. Sự kết hợp tham số không phù hợp có thể dẫn đến hiệu suất chiến lược kém.

Để giảm rủi ro, bạn có thể xem xét chỉ sử dụng một trong những tín hiệu chiến lược; hoặc nghiên cứu để xác định phạm vi tham số phù hợp với các môi trường thị trường khác nhau.

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

Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:

  1. Đánh giá sự đồng nhất của hai tín hiệu chiến lược, nghiên cứu mức độ phù hợp của tín hiệu của chúng với các tham số khác nhau để xác định sự kết hợp tham số tối ưu.

  2. Thử nghiệm chiến lược này với các giống khác nhau và các chu kỳ khác nhau để tìm ra phạm vi ứng dụng tốt nhất.

  3. Có thể xem xét thay đổi chiến lược moving average đôi sang các chỉ số khác, chẳng hạn như chỉ số KDJ, để làm giàu danh mục chiến lược.

  4. Thêm các cơ chế dừng lỗ để kiểm soát rủi ro, chẳng hạn như thiết lập dừng lỗ thu hồi tối đa.

Tóm tắt

Chiến lược này kết hợp chiến lược đường trung bình di chuyển kép và chiến lược chỉ số Williams, đồng thời kết hợp theo dõi xu hướng và bắt tín hiệu đường ngắn. Có thể thích nghi với môi trường thị trường rộng hơn thông qua tối ưu hóa tham số. Tuy nhiên, cũng có rủi ro do sự không đồng nhất của tín hiệu và sự khó khăn của tối ưu hóa tham số phức tạp.

Mã nguồn chiến lược
/*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 )