Tài nguyên đang được tải lên... tải...

Bảng cân bằng hỗn hợp của Ichimoku Macd và Tsi Chiến lược kết hợp

Tác giả:ChaoZhang, Ngày: 2023-11-27 11:50:43
Tags:

img

I. Tổng quan chiến lược

Chiến lược này sử dụng toàn diện các chỉ số kỹ thuật như Ichimoku Kinko Hyo, Macd, Chaikin Money Flow và Tsi Oscillator để đánh giá chính xác hướng của xu hướng thị trường cho giao dịch ngắn hạn.

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

Chiến lược này sử dụng đường Tenkan-sen, đường Kijun-sen, đường Senkou Span A và đường Senkou Span B ở Ichimoku để đánh giá xu hướng giá trong ngày. Đồng thời, nó kết hợp các tín hiệu chéo của đường trung bình di chuyển nhanh và chậm của Macd và chỉ số dòng tiền và chỉ số dao động để xác định dòng chảy và dòng chảy của quỹ. Sau khi đánh giá toàn diện của nhiều chỉ số, quyết định mua và bán được thực hiện.

Khi đường Tenkan-sen vượt qua trên đường Kijun-sen, Chicou Span nằm trên trục 0, và giá đóng cửa nằm trên đám mây Ichimoku, đó là tín hiệu tăng. Ngược lại, khi đường Tenkan-sen vượt qua dưới trục 0, Chicou Span nằm dưới trục 0, và giá đóng cửa nằm dưới đám mây, đó là tín hiệu giảm. Đồng thời, chiến lược phát hiện liệu biểu đồ MACD có dương tính hay không và liệu chỉ số dòng tiền Chaikin và dao động TSI có dương tính theo cùng một hướng. Nếu các chỉ số tăng theo cùng một hướng, vị trí dài được mở bằng cách mua vào, và nếu các chỉ số giảm theo cùng một hướng, vị trí ngắn được mở bằng cách bán ra.

Khi chỉ số phát ra một tín hiệu đối diện với tín hiệu trước đó, giao dịch ngược lại được thực hiện để làm phẳng vị trí trước đó.

III. Ưu điểm của Chiến lược

  1. Sử dụng một sự kết hợp của nhiều chỉ số cải thiện tính chính xác của phán đoán.

  2. Các hoạt động ngắn hạn theo dõi biến động thị trường trong thời gian thực.

  3. Không có can thiệp thủ công, giao dịch tự động đầy đủ.

IV. Rủi ro của Chiến lược và giải pháp

  1. Việc kết hợp các chỉ số tăng hoặc giảm cùng một lúc có nguy cơ đánh giá sai.

  2. Giao dịch ngắn hạn tần suất cao có phí hoa hồng tương đối cao và khó nắm bắt xu hướng. Thời gian giữ vị trí có thể được kéo dài một cách thích hợp để tìm kiếm lợi nhuận dư thừa để trang trải chi phí.

  3. Không có thiết lập stop loss có thể dẫn đến tổn thất lớn hơn. Các điểm stop loss thích hợp hoặc stop loss di chuyển có thể được thiết lập dựa trên ATR.

V. Hướng dẫn tối ưu hóa chiến lược

  1. Tối ưu hóa các kết hợp tham số. Điều chỉnh các tham số trung bình động để thích nghi với các chu kỳ và giống khác nhau.

  2. Tăng cơ chế dừng lỗ. Đặt các đường dừng lỗ động kết hợp với chỉ số ATR.

  3. Tăng quản lý vị trí. Điều chỉnh động tỷ lệ khối lượng giao dịch.

  4. Kết hợp công nghệ học máy để tối ưu hóa các chỉ số và tín hiệu.

VI. Kết luận

Chiến lược này sử dụng toàn diện nhiều chỉ số kỹ thuật để xác định biến động xu hướng trong thời gian thực cho giao dịch ngắn hạn tần số cao. Mặc dù có một số rủi ro, nó có thể được cải thiện thông qua tối ưu hóa. Chiến lược này đáng nghiên cứu sâu hơn và xác minh giao dịch trực tiếp. Bằng cách tăng stop loss và quản lý vị trí, rủi ro giao dịch có thể được giảm.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © exlux99

//@version=4
strategy("Ichimoku with MACD/ CMF/ TSI", overlay=true, margin_long=0, margin_short=0)



//Inputs
ts_bars = input(10, minval=1, title="Tenkan-Sen Bars")
ks_bars = input(30, minval=1, title="Kijun-Sen Bars")
ssb_bars = input(52, minval=1, title="Senkou-Span B Bars")
cs_offset = input(26, minval=1, title="Chikou-Span Offset")
ss_offset = input(26, minval=1, title="Senkou-Span Offset")
long_entry = input(true, title="Long Entry")
short_entry = input(true, title="Short Entry")

middle(len) => avg(lowest(len), highest(len))

// Ichimoku Components
tenkan = middle(ts_bars)
kijun = middle(ks_bars)
senkouA = avg(tenkan, kijun)
senkouB = middle(ssb_bars)


ss_high = max(senkouA[ss_offset-1], senkouB[ss_offset-1])
ss_low = min(senkouA[ss_offset-1], senkouB[ss_offset-1])

// Entry/Exit Signals
fast_length = input(title="Fast Length", type=input.integer, defval=17)
slow_length = input(title="Slow Length", type=input.integer, defval=28)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 5)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=true)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=true)

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal


tk_cross_bull = tenkan > kijun
tk_cross_bear = tenkan < kijun
cs_cross_bull = mom(close, cs_offset-1) > 0
cs_cross_bear = mom(close, cs_offset-1) < 0
price_above_kumo = close > ss_high
price_below_kumo = close < ss_low


//CMF
lengthA = input(8, minval=1, title="CMF Length")
ad = close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume
mf = sum(ad, lengthA) / sum(volume, lengthA)


//TSI
long = input(title="Long Length", type=input.integer, defval=8)
short = input(title="Short Length", type=input.integer, defval=8)
price = close
double_smooth(src, long, short) =>
	fist_smooth = ema(src, long)
	ema(fist_smooth, short)
pc = change(price)
double_smoothed_pc = double_smooth(pc, long, short)
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)



bullish = tk_cross_bull and cs_cross_bull and price_above_kumo and hist > 0 and mf > 0.1 and tsi_value > 0
bearish = tk_cross_bear and cs_cross_bear and price_below_kumo and hist < 0  and mf < -0.1 and tsi_value < 0



strategy.entry("Long", strategy.long, when=bullish and long_entry)
strategy.entry("Short", strategy.short, when=bearish and short_entry)

strategy.close("Long", when=bearish and not short_entry)
strategy.close("Short", when=bullish and not long_entry)

Thêm nữa