Chiến lược kết hợp của 123 đảo ngược và Fractal Chaos Oscillator

Tác giả:ChaoZhang, Ngày: 2023-11-02 16:43:41
Tags:

img

Tổng quan

Đây là một chiến lược kết hợp kết hợp chiến lược 123 Reversal và chiến lược Fractal Chaos Oscillator để có được các tín hiệu giao dịch đáng tin cậy hơn.

Chiến lược logic

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

  1. 123 Chiến lược đảo ngược

    Chiến lược này được lấy từ cuốn sách How I Tripled My Money in The Futures Market của Ulf Jensen, trang 183.

    • Đi dài khi giá đóng cửa cao hơn giá đóng cửa trước đó trong 2 ngày liên tiếp, và Stoch chậm 9 ngày dưới 50.

    • Đi ngắn khi giá đóng cửa thấp hơn giá đóng cửa trước đó trong 2 ngày liên tiếp, và Stoch nhanh 9 ngày trên 50.

  2. Chiến lược dao động hỗn loạn fractal

    FCO tính toán sự khác biệt giữa các chuyển động tinh tế nhất trên thị trường. Giá trị của nó dao động giữa -1 và 1. Giá trị càng cao, xu hướng càng mạnh, bất kể xu hướng tăng hay giảm.

    Đi dài khi FCO đạt mức cao. Đi ngắn khi FCO đạt mức thấp. Chỉ số này phù hợp với giao dịch trong ngày.

Khi các tín hiệu của cả hai chiến lược đồng ý, một giao dịch sẽ được thực hiện theo hướng đó.

Phân tích lợi thế

  • Kết hợp các chiến lược đảo ngược và xu hướng giúp lọc các tín hiệu sai và cải thiện độ tin cậy.

  • Chiến lược đảo ngược nắm bắt các cơ hội đảo ngược ngắn hạn, trong khi chiến lược FCO nắm bắt xu hướng trung bình dài hạn.

  • Các thông số Stoch tối ưu hóa có hiệu quả lọc các tín hiệu sai trong các thị trường giới hạn phạm vi.

  • FCO nhạy cảm với biến động thị trường tinh tế và có thể phát hiện sớm những thay đổi xu hướng.

Rủi ro và giải pháp

  • Chiến lược đảo ngược có thể bị áp đảo bởi sự đảo ngược xu hướng lớn. Điều chỉnh các thông số hoặc kết hợp với các chiến lược xu hướng.

  • Các chiến lược chỉ số có thể tạo ra tín hiệu quá mức. Điều chỉnh tham số hoặc thêm các chỉ số lọc.

  • Các tín hiệu mâu thuẫn có thể xảy ra. tối ưu hóa các tham số dựa trên kết quả backtest để cải thiện hợp tác.

  • Thêm stop loss để kiểm soát lỗ giao dịch duy nhất.

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

  • Kiểm tra các kết hợp tham số đảo ngược khác nhau để tìm ra tối ưu.

  • Kiểm tra các thông số FCO khác nhau để tìm ra tốt nhất.

  • Thử các phương pháp tối ưu hóa tham số khác nhau như thuật toán di truyền, rừng ngẫu nhiên v.v.

  • Thêm thêm các chỉ số phụ trợ cho các tín hiệu lọc khác.

  • Thêm các mô hình máy học để cải thiện độ chính xác tín hiệu.

  • Đưa ra các cơ chế quản lý rủi ro như dừng lỗ, kích thước vị trí vv.

Tóm lại

Chiến lược này kết hợp các điểm mạnh của các chiến lược đảo ngược và FCO thông qua việc sử dụng danh mục đầu tư, và cải thiện chất lượng tín hiệu. Nó cho thấy hiệu suất tốt trong backtests. Tăng cường thêm như điều chỉnh tham số, thêm chỉ số, quản lý rủi ro vv có thể cải thiện hiệu suất trực tiếp của nó.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 07/10/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 value of Fractal Chaos Oscillator is calculated as the difference between 
// the most subtle movements of the market. In general, its value moves between 
// -1.000 and 1.000. The higher the value of the Fractal Chaos Oscillator, the 
// more one can say that it follows a certain trend – an increase in prices trend, 
// or a decrease in prices trend.
//
//   Being an indicator expressed in a numeric value, traders say that this is an 
// indicator that puts a value on the trendiness of the markets. When the FCO reaches 
// a high value, they initiate the “buy” operation, contrarily when the FCO reaches a 
// low value, they signal the “sell” action. This is an excellent indicator to use in 
// intra-day trading.
//
// 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

fractalUp(pattern) =>
    p = high[pattern+1]
    okl = 1
    okr = 1
    res = 0.0
	for i = pattern to 1
		okl := iff(high[i] < high[i+1] and okl == 1 , 1, 0)
	for i = pattern+2 to pattern*2+1
		okr := iff(high[i] < high[i-1] and okr == 1, 1, 0)
	res := iff(okl == 1 and okr == 1, p, res[1])
    res

fractalDn(pattern) =>
    p = low[pattern+1]
    okl = 1
    okr = 1
    res = 0.0
	for i = pattern to 1
		okl := iff(low[i] > low[i+1] and okl == 1 , 1, 0)
	for i = pattern+2 to pattern*2+1
		okr := iff(low[i] > low[i-1] and okr == 1, 1, 0)
	res := iff(okl == 1 and okr == 1, p, res[1])
    res

FCO(Pattern) =>
    pos = 0.0
    xUpper = fractalUp(Pattern) 
    xLower = fractalDn(Pattern)
    xRes = iff(xUpper != xUpper[1], 1, 
             iff(xLower != xLower[1], -1, 0))
    pos := iff(xRes == 1, 1,
             iff(xRes == -1, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Fractal Chaos Oscillator", shorttitle="Combo", overlay = true)
Length = input(15, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
Pattern = input(1, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posFCO = FCO(Pattern)
pos = iff(posReversal123 == 1 and posFCO == 1 , 1,
	   iff(posReversal123 == -1 and posFCO == -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