Chiến lược chỉ số tâm lý thị trường động lực

Tác giả:ChaoZhang, Ngày: 2023-11-13 17:51:20
Tags:

img

Tổng quan

Chiến lược này tiết lộ tâm lý thị trường bằng cách so sánh thay đổi giá với khối lượng và trình bày nó trong định dạng MACD để tạo ra tín hiệu giao dịch.

Chiến lược logic

Chiến lược chủ yếu sử dụng các phương pháp sau đây để tiết lộ tâm lý thị trường:

  1. Thay đổi giá theo khối lượng của mỗi thanh. Điều này trực tiếp cho thấy sức mạnh của lực lượng mua và bán.

  2. Áp dụng các đường trung bình động theo cấp số nhân cho sự thay đổi giá và khối lượng riêng biệt, sau đó chia EMA của sự thay đổi giá bằng EMA của khối lượng. Điều này lọc ra một số tiếng ồn và dẫn đến đường cong tâm lý thị trường mượt mà hơn.

  3. Áp dụng đường EMA nhanh và chậm trên xu hướng thị trường để có được đường MACD. Đường MACD cho thấy hướng và sức mạnh động lực, đường tín hiệu là đường trung bình động của nó và biểu đồ biểu đồ cho thấy sự khác biệt của chúng, đại diện cho sự thay đổi động lực.

Biểu đồ vượt trên 0 báo hiệu tăng tâm lý tăng, trong khi vượt dưới 0 báo hiệu tăng tâm lý giảm.

Phân tích lợi thế

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

  1. Sử dụng thông tin khối lượng để đánh giá tâm lý thị trường, thuyết phục hơn.

  2. Mô hình MACD trực quan và dễ sử dụng.

  3. Các tham số có thể tùy chỉnh cho các sản phẩm và khung thời gian khác nhau.

  4. Có thể phát hiện sự chênh lệch trên biểu đồ để tìm ra sự đảo ngược xu hướng tiềm năng.

  5. Cấu trúc mã rõ ràng, dễ hiểu và tối ưu hóa.

Phân tích rủi ro

Chiến lược này cũng có những rủi ro sau:

  1. Số lượng phản ánh tình cảm nhưng không đảm bảo tín hiệu chính xác.

  2. Cài đặt tham số MACD không đúng có thể gây ra tín hiệu bị bỏ lỡ hoặc sai. Các tham số cần được tối ưu hóa cho các sản phẩm và khung thời gian cụ thể.

  3. Sự khác biệt có thể là tín hiệu sai, không thể xác nhận sự đảo ngược xu hướng, vì vậy cần phải được giải thích cẩn thận.

  4. Có thể chờ đợi để dừng lỗ hoặc xác nhận với xu hướng và các sản phẩm liên quan.

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

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

  1. Kiểm tra sự kết hợp các thông số trên các sản phẩm và khung thời gian khác nhau để tìm các thông số tối ưu.

  2. Thêm stop loss để giảm rủi ro mất mát.

  3. Kết hợp với xu hướng giá sản phẩm liên quan để xác nhận tín hiệu.

  4. Sử dụng máy học để tối ưu hóa các tham số một cách năng động.

  5. Thêm bộ lọc để giảm tín hiệu sai, ví dụ như xu hướng khung thời gian cao hơn, biến động, v.v.

Kết luận

Chiến lược đánh giá tâm lý thị trường bằng cách so sánh sự thay đổi giá và khối lượng, và tạo ra các tín hiệu theo định dạng MACD. Xem xét khối lượng ngoài chỉ giá có thể xác định chính xác hơn sức mạnh của người mua và người bán. Các thông số có thể được tối ưu hóa cho các sản phẩm và khung thời gian khác nhau, với tiềm năng tối ưu hóa hơn nữa. Nhìn chung, chiến lược có một ý tưởng mới, dễ sử dụng, nắm bắt hiệu quả đà thị trường và đáng để phát triển hơn nữa.


/*backtest
start: 2023-10-13 00:00:00
end: 2023-11-12 00:00:00
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/
// © dannylimardi

//@version=4
strategy("Sentiment Oscillator", "Sentiment", overlay=false, initial_capital=100, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.08)


//Inputs
msLen = input(49, type=input.integer, title="Market Sentiment Lookback Length")
emaLen1 = input(40, type=input.integer, title="Fast EMA Length")
emaLen2 = input(204, type=input.integer, title="Slow EMA Length")
signalLen = input(20, type=input.integer, title="Signal Length")
showMs = input(false, type=input.bool, title="Show Market Sentiment?")
showHist = input(true, type=input.bool, title="Show Momentum?")
showMacd = input(false, type=input.bool, title="Show MACD Line?")
showSignal = input(false, type=input.bool, title="Show Signal Line?")
showCpv = input(false, type=input.bool, title="(Show Change/Volume for Each Bar?)")
showEma1 = input(false, type=input.bool, title="(Show Fast EMA?)")
showEma2 = input(false, type=input.bool, title="(Show Slow EMA?)")

//Calculations
priceChange = close - close[1]
changePerVolume = (priceChange/volume) * 10000000  // (The 1000000 doesn't have any significance, it's just to avoid color-change errors when the values are too emall.)
priceChangeEma = ema(priceChange, msLen)
volumeEma = ema(volume, msLen)
marketSentiment = priceChangeEma/volumeEma * 100000000
msEma1 = ema(marketSentiment, emaLen1)
msEma2 = ema(marketSentiment, emaLen2)
macd = msEma1-msEma2
signal = ema(macd, signalLen)
hist = macd-signal

//Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

//Drawings
plot(showHist ? hist : na, title="Histogram", style=plot.style_area, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)), transp=0 )
plot(showMacd ? macd : na, title="MACD", color=col_macd, transp=0)
plot(showSignal ? signal : na, title="Signal", color=col_signal, transp=0)
plot(showCpv ? changePerVolume : na, color=changePerVolume > changePerVolume[1] ? color.teal : color.red)
plot(0, color=color.white, transp=80)
plot(showEma1 ? msEma1 : na, color=color.aqua)
plot(showEma2 ? msEma2 : na, color=color.yellow)
plot(showMs ? marketSentiment : na, color=color.lime)

//Strategy
strategy.entry("Buy", strategy.long, when=crossover(hist, 0))
strategy.close("Buy", when=crossunder(hist, 0))

Thêm nữa