Xu hướng động lực sau chiến lược dao động

Tác giả:ChaoZhang, Ngày: 23-11-16 16:46:51
Tags:

img

Tổng quan

Chiến lược này kết hợp các chỉ số trung bình động, giá khối lượng và dao động để tạo thành bộ lọc ba, nhằm mục đích nắm bắt xu hướng trung hạn và đạt được lợi nhuận tốt trong các thị trường xu hướng.

Nguyên tắc

Chiến lược bao gồm ba thành phần chính:

  1. Các chỉ số trung bình động

Sử dụng EMA 20 ngày và EMA 60 ngày để xây dựng bộ lọc xu hướng. Một tín hiệu mua được tạo ra khi MA ngắn hạn vượt qua trên MA dài hạn. Một tín hiệu bán được tạo ra khi MA ngắn hạn vượt qua dưới MA dài hạn.

  1. Chỉ số giá khối lượng

Sử dụng khối lượng trên doanh thu để tính toán chỉ số VP, đánh giá hướng dòng vốn. VP tăng cho thấy dòng chảy ròng trong khi VP giảm cho thấy dòng chảy ròng. Sự đảo ngược VP có thể báo hiệu sự thay đổi xu hướng.

  1. Bollinger Bands

Sử dụng chiều rộng kênh Donchian 20 ngày để tính toán Bollinger Bands Parameter, tạo thành các dải trên và dưới. Giá tiếp cận dải trên có thể phải đối mặt với áp lực rút lui, trong khi giá tiếp cận dải dưới có thể tăng trở lại.

Kết hợp ba thành phần xây dựng một chiến lược theo xu hướng. Nó tạo ra tín hiệu mua khi MA ngắn vượt qua trên MA dài, VP đang trong xu hướng tăng và giá vừa rời khỏi dải trên. Các tín hiệu bán được tạo ra khi MA ngắn vượt qua dưới MA dài, VP đang trong xu hướng giảm và giá vừa rời khỏi dải dưới.

Ưu điểm

Chiến lược có những lợi thế sau:

  1. Các bộ lọc chỉ số ba giúp ngăn chặn các đứt sai.

  2. Xem xét xu hướng, dòng vốn và mua quá mức / bán quá mức cải thiện độ tin cậy tín hiệu.

  3. Các thông số tối ưu phù hợp với các giai đoạn và sản phẩm khác nhau.

  4. Thu nhập có thể kiểm soát được và lợi nhuận ổn định.

  5. Logic rõ ràng và điều chỉnh tham số linh hoạt.

Rủi ro

Ngoài ra còn có một số rủi ro:

  1. Rủi ro đảo ngược xu hướng.

  2. VP chậm phát hành. VP chậm thay đổi giá và có thể bỏ lỡ các điểm vào hoặc ra.

  3. Điều chỉnh tham số khó khăn. Các tham số cần điều chỉnh cho các sản phẩm và khung thời gian khác nhau.

  4. Điều khiển rút cần cải tiến. tối ưu hóa thêm với dừng động hoặc kích thước vị trí.

Hướng dẫn cải thiện

Chiến lược có thể được cải thiện trong các khía cạnh sau:

  1. Thêm các phương pháp dừng lỗ như dừng kéo theo để kiểm soát thêm rút tiền.

  2. Thêm mô-đun định kích thước vị trí để điều chỉnh kích thước một cách năng động dựa trên sự biến động.

  3. Tối ưu hóa các thông số để tìm ra các bộ tốt nhất cho các sản phẩm và thời gian khác nhau.

  4. Tăng các mô hình học máy để cải thiện độ chính xác tín hiệu.

  5. Kết hợp cảm xúc và phân tích tin tức để đánh giá các sự kiện đột ngột.

Kết luận

Chiến lược này kết hợp các chỉ số MA, VP và Bollinger Band để hoạt động tốt trong việc nắm bắt các xu hướng trung hạn. Những cải tiến hơn nữa trong việc dừng lỗ, kích thước vị trí và điều chỉnh tham số có thể đạt được kết quả tốt hơn.


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

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 29/04/2019
// This is combo strategies for get 
// a cumulative signal. Result signal will return 1 if two strategies 
// is long, -1 if all strategies is short and 0 if signals of strategies is not equal.
//
// 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.
//
// Secon strategy
// The Average Directional Movement Index Rating (ADXR) measures the strength 
// of the Average Directional Movement Index (ADX). It's calculated by taking 
// the average of the current ADX and the ADX from one time period before 
// (time periods can vary, but the most typical period used is 14 days).
// Like the ADX, the ADXR ranges from values of 0 to 100 and reflects strengthening 
// and weakening trends. However, because it represents an average of ADX, values 
// don't fluctuate as dramatically and some analysts believe the indicator helps 
// better display trends in volatile markets.
//
// 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)

ADXR(LengthADX, LengthADXR, Signal1, Signal2) =>
    xADX = fADX(LengthADX)
    xADXR = (xADX + xADX[LengthADXR]) / 2
    pos = 0.0
    pos := iff(xADXR < Signal1, 1,
           iff(xADXR > Signal2, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal and Average Directional Movement Index Rating", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
LengthADX = input(title="Length ADX", defval=14)
LengthADXR = input(title="Length ADXR", defval=14)
Signal1 = input(13, step=0.01)
Signal2 = input(45, step=0.01)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posADXR = ADXR(LengthADX, LengthADXR, Signal1, Signal2 )
pos = iff(posReversal123 == 1 and posADXR == 1 , 1,
	   iff(posReversal123 == -1 and posADXR == -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