Chiến lược chỉ báo tâm lý thị trường động lượng


Ngày tạo: 2023-11-13 17:51:20 sửa đổi lần cuối: 2023-11-13 17:51:20
sao chép: 0 Số nhấp chuột: 619
1
tập trung vào
1617
Người theo dõi

Chiến lược chỉ báo tâm lý thị trường động lượng

Tổng quan

Chiến lược này tiết lộ cảm xúc của người tham gia thị trường bằng cách so sánh biến động giá và khối lượng giao dịch, được thể hiện dưới dạng MACD và phát ra tín hiệu giao dịch.

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

Chiến lược này chủ yếu tiết lộ cảm xúc của thị trường thông qua các tính toán sau:

  1. Sự thay đổi giá của mỗi đường K chia cho khối lượng giao dịch. Điều này có thể trực tiếp cho thấy sức mạnh mua và bán.

  2. Sử dụng chỉ số trung bình di chuyển trơn cho biến động giá và khối lượng giao dịch, sau đó chia EMA của biến động giá cho EMA của khối lượng giao dịch. Điều này có thể lọc ra một số tiếng ồn và có được đường cong cảm xúc thị trường thỏi mịn hơn.

  3. Hình EMA được tính từ từ trên giá cảm xúc của thị trường, có đường cong tương tự như MACD. Dòng MACD cho thấy hướng và cường độ động lượng, đường tín hiệu là trung bình di chuyển của nó, và biểu đồ cột cho thấy chênh lệch giữa hai đường cong, đại diện cho sự thay đổi động lượng.

Khi trên biểu đồ trụ 0 là tín hiệu tăng cường tâm trạng thị trường đa đầu, dưới khi 0 là tín hiệu tăng cường tâm trạng thị trường trống. Bạn cũng có thể quan sát hiện tượng lệch của biểu đồ trụ.

Phân tích lợi thế

Chiến lược này có những ưu điểm sau:

  1. Dùng thông tin về khối lượng giao dịch để đánh giá cảm xúc của người tham gia thị trường sẽ thuyết phục hơn.

  2. Hình thức MACD trực quan, dễ sử dụng.

  3. Các tham số có thể điều chỉnh, áp dụng cho các giống và chu kỳ khác nhau.

  4. Có thể phát hiện các biểu đồ cột lệch và phát hiện các điểm biến 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 giao dịch có thể phản ánh cảm xúc của thị trường, nhưng không đảm bảo tín hiệu giao dịch chính xác.

  2. Thiết lập tham số MACD không đúng có thể dẫn đến tín hiệu bị lỗi hoặc tạo tín hiệu giả. Cần tối ưu hóa tham số cho các loại và chu kỳ.

  3. Các tín hiệu khác có thể là tín hiệu giả, không thể xác định được sự thay đổi xu hướng, nên cần thận trọng.

  4. Có nguy cơ bị đặt vào vào cuối. Có thể chờ đợi để theo dõi lỗ hổng, hoặc xác minh hợp lý với xu hướng và các giống liên quan.

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

Chính sách này có thể được tối ưu hóa bằng cách:

  1. testing các tham số khác nhau của các giống và chu kỳ, tìm tham số tối ưu.

  2. Tham gia chiến lược dừng lỗ để giảm nguy cơ mất mát.

  3. Kết hợp với xu hướng giá của các loại liên quan, xác nhận tín hiệu giao dịch.

  4. Các tham số tối ưu hóa động theo phương pháp học máy.

  5. Tăng các điều kiện lọc, giảm các tín hiệu giả. Ví dụ như xu hướng cấp độ lớn, tỷ lệ biến động, v.v.

Tóm tắt

Chiến lược này sử dụng sự thay đổi của giá và tỷ lệ khối lượng giao dịch để đánh giá cảm xúc của thị trường, tạo ra tín hiệu giao dịch dưới dạng MACD. So với chỉ xem thông tin giá, khối lượng giao dịch có thể đánh giá chính xác hơn về so sánh lực lượng không gian và nhiệt độ thị trường. Có thể tối ưu hóa tham số theo các giống và chu kỳ khác nhau, và có không gian tối ưu hóa hơn nữa.

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