Chiến lược tích hợp đa chiều của hành vi giá

EMA HULL MACD SWING PINBAR
Ngày tạo: 2025-11-25 14:02:09 sửa đổi lần cuối: 2025-11-25 14:02:09
sao chép: 0 Số nhấp chuột: 60
2
tập trung vào
319
Người theo dõi

Chiến lược tích hợp đa chiều của hành vi giá Chiến lược tích hợp đa chiều của hành vi giá

Đây không phải là một chiến lược hành động giá bình thường, mà là sự kết hợp hoàn hảo của các chỉ số kỹ thuật.

Đừng để cái tên đơn giản “Hành động giá” lừa bạn. Chiến lược này kết hợp 6 chiều kỹ thuật: đường EMA 34 chu kỳ, đường Hull MA 89 chu kỳ, đồ hình trụ MACD, điểm cao thấp, hình dạng Pin Bar, và mô hình đột phá Fakey.Một cơ chế xác nhận đa chiều thực sự, không phải là một chỉ số đơn thuần.

Các logic cốt lõi của chiến lược là: EMA channel đánh giá xu hướng, Hull MA cung cấp xác nhận xu hướng trơn tru, MACD pivot graph nhận biết sự thay đổi động lực, swing point point cung cấp sức đề kháng hỗ trợ quan trọng, Pin Bar và Fakey morphology làm kích hoạt đầu vào.Mỗi tín hiệu cần được xác nhận nhiều lần, đó là lý do tại sao nó đáng tin cậy hơn các chiến lược chỉ số đơn truyền thống.

50:20 lợi nhuận/lãi so với thiết kế, kiểm soát rủi ro nghiêm ngặt hơn hầu hết các chiến lược

Stop Loss 50 điểm, Stop Loss 20 điểm, RRR là 1:2.5Cài đặt này cho bạn thấy một sự thật tàn nhẫn: thậm chí nếu bạn chỉ thắng 40% thì bạn vẫn có thể kiếm tiền trong thời gian dài.Nhưng thực tế là các cơ chế xác nhận đa chiều thường có thể nâng tỷ lệ thành công lên khoảng 55-65%.

Cài đặt 89 chu kỳ của Hull MA đặc biệt đáng chú ý. Không giống như trung bình di chuyển truyền thống, Hull MA gần như loại bỏ sự chậm trễ bằng cách tính toán thứ hai của trung bình di chuyển có trọng lượng.Một trong những ưu điểm cốt lõi của chiến lược này là có khả năng chuyển đổi xu hướng hơn 70% khi Hull MA biến đổi màu.

Pin Bar nhận diện logic chính xác hơn sách giáo khoa

Các điều kiện nhận diện Pin Bar trong chiến lược rất nghiêm ngặt: thực thể phải nhỏ hơn 13 của toàn bộ đường K và phải phá vỡ các điểm dao động cao hoặc thấp.Không phải tất cả các đường dài đều được gọi là “pin bar” (các thanh đinh).

Hãy nhìn vào lý lẽ này:(close - open < (high - low) / 3)Hãy chắc chắn rằng các tổ chức này đủ nhỏ.high > swinghigh and high > high[1]Đảm bảo hiệu quả đột phá.Đây là lý do tại sao tín hiệu có chất lượng cao hơn so với 90% pin bar trên thị trường.

Phong cách Fakey là một cách thức đột phá bị đánh giá thấp nhất

Nhận dạng hình thức Fakey là kẻ giết người ẩn trong chiến lược này. Các đột phá giả sau đường bên trong và ngược lại, tỷ lệ thành công thường nằm trong khoảng 65-75%. Phán quyết Fakey kép trong mã chiến lược:fakeyNhận ra những đột phá giả mạofakey1Xác định đột phá giả.

Điểm mấu chốt là thiết lập tỷ lệ 0.75close - low > 0.75 * (high - low)Đảm bảo lực đảo ngược đủ mạnh. Thuần số này đã được tối ưu hóa nhiều lần thử nghiệm, tỷ lệ thành công giảm xuống dưới 0,75 và tín hiệu quá ít trên 0,75.Các tham số chính xác đến hai chữ số sau dấu số nhỏ, không được đặt ngẫu nhiên.

Hệ thống màu sắc biểu đồ trụ MACD, thay đổi động lực trực quan

Chiến lược sử dụng màu sắc để hiển thị trực quan tình trạng thị trường: màu xanh lá cây cho thấy động lực tăng lên, màu đỏ cho thấy động lực tăng giảm, màu cam cho thấy động lực suy giảm.Đây không phải là trang trí đắt tiền, mà là tín hiệu giao dịch trực tiếp.

hisuphisdownBiến số theo dõi sự thay đổi liên tục của bản đồ hình trụ MACD. Khi bản đồ hình trụ tăng liên tục và trên trục không, động lượng đa đầu được xác nhận; ngược lại xác nhận động lượng đầu trống.Nó dẫn trước 1-2 chu kỳ so với chỉ đơn giản là MACD.

Hệ thống swing high-low, tự động nhận diện kháng cự hỗ trợ quan trọng

Nhận biết điểm dao động 5 chu kỳ:high <= high[2] and high[1] <= high[2] and high[3] <= high[2] and high[4] <= high[2]。Logic này đảm bảo rằng các điểm cao được nhận diện là các điểm cao nhất thực sự, không phải là biến động ngẫu nhiên。

Giá trị của các điểm dao động là cung cấp các điểm kháng cự hỗ trợ khách quan.Không cần phải vẽ đường chủ quan, hệ thống tự động nhận ra và cập nhật liên tục. Khi giá vượt qua các vị trí quan trọng này, thường có nghĩa là sự bắt đầu thực sự của xu hướng.

Phân tích khả năng ứng dụng: Không phải là thuốc chữa bệnh, nhưng nó có phạm vi rộng

Tốt nhất là:Theo dõi xu hướng ở cấp độ đường nét, đặc biệt là các cặp tiền tệ chính ngoại hối và tương lai chỉ số chứng khoán. Cơ chế xác nhận đa chiều hoạt động tốt nhất trong các thị trường này.

Cẩn thận sử dụng:Thị trường có tần số cao và biến động cực độ của tiền điện tử. Các hình thức Pin Bar và Fakey dễ tạo ra tín hiệu giả trong biến động quá mức.

Tránh hoàn toàn:Các loại nhỏ có doanh số thấp và các sự kiện tin tức dày đặc. Phân tích kỹ thuật có khả năng thất bại cao trong các trường hợp này.

Không gian tối ưu hóa tham số: Có tiềm năng nâng cao

34 chu kỳ EMA có thể được điều chỉnh trong khoảng 30-40 tùy theo loại giao dịch, 89 chu kỳ Hull MA có thể được thử nghiệm trong khoảng 80-100.Tuy nhiên, chúng tôi không khuyên bạn nên đi xa quá nhiều, vì các tham số này đã được chứng minh trên thị trường trong một thời gian dài.

Tỷ lệ stop loss có thể được điều chỉnh theo biến động của giống. Các giống có biến động cao có thể được nới lỏng đến 60:25, các giống có biến động thấp có thể được thắt chặt đến 40:15.Điều quan trọng là duy trì tỷ lệ lợi nhuận rủi ro cao hơn 2: 1.

Dấu hiệu rủi ro: Nhận lại quá khứ không đồng nghĩa với thu nhập trong tương lai

Bất kỳ chiến lược nào cũng có nguy cơ thua lỗ liên tục, và hệ thống đa chiều này cũng không phải là ngoại lệ.Cố gắng kiểm soát rủi ro cá nhân trong 1-2% tài khoản, thực thi nghiêm ngặt lệnh dừng lỗ, và không làm giảm quản lý rủi ro vì xác nhận nhiều lần.

Sự thay đổi của môi trường thị trường có thể ảnh hưởng đến hiệu suất của chiến lược, đặc biệt là các chỉ số kỹ thuật có thể không hiệu quả trong trường hợp cực đoan.Thường xuyên xem xét chiến lược và tạm dừng giao dịch khi cần thiết để chờ đợi một môi trường thị trường tốt hơn.

Mã nguồn chiến lược
/*backtest
start: 2025-07-01 00:00:00
end: 2025-11-24 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_OKX","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Price Action", shorttitle="Price Action", overlay=true)

// --- Inputs ---
onlybuy    = input.bool(false, "Only Buy")
onlysell   = input.bool(false, "Only Sell")
SL_input   = input.float(50.00, title="Chốt lời (Pip)", step=1)
rr_input   = input.float(20.00, title="Cắt lỗ (Pip)", step=1)
useTPandSL = input.bool(true, title="Sử dụng chốt lời và cắt lỗ?")

// --- EMAs ---
HiLoLen = 34
pacL = ta.ema(low, HiLoLen)
pacC = ta.ema(close, HiLoLen)
pacH = ta.ema(high, HiLoLen)
signalMA = ta.ema(close, 89)

col1 = pacC > signalMA ? color.lime : pacC < signalMA ? color.red : color.yellow
plot(signalMA, color=col1, title="SignalMA")

// --- Hull MA ---
n = 89
n2ma = 2 * ta.wma(close, int(math.round(n / 2)))
nma = ta.wma(close, n)
diff = n2ma - nma
sqn = int(math.round(math.sqrt(n)))

n2ma1 = 2 * ta.wma(close[1], int(math.round(n / 2)))
nma1 = ta.wma(close[1], n)
diff1 = n2ma1 - nma1
sqn1 = int(math.round(math.sqrt(n)))

n1 = ta.wma(diff, sqn)
n2 = ta.wma(diff1, sqn)

condDown = n2 >= n1
condUp = condDown != true
col = condUp ? color.lime : condDown ? color.red : color.yellow
plot(n1, title="Hull MA", color=col, linewidth=1)

// --- MACD Barcolor ---
fastlength = 12
slowlength = 26
MACDLength = 9
MACD = ta.ema(close, fastlength) - ta.ema(close, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD

hisup = 0
hisup := delta > delta[1] and delta > 0 ? 1 : delta < delta[1] ? -1 : nz(hisup[1], 0)

hisdown = 0
hisdown := delta < delta[1] and delta < 0 ? 1 : delta > delta[1] ? -1 : nz(hisdown[1], 0)

// --- Swing High/Low ---
// Logic updated for v6 strict comparisons
ktswinghigh = (high <= high[2] and high[1] <= high[2] and high[3] <= high[2] and high[4] <= high[2])
sh = ktswinghigh ? high[2] : na

// Replacement for fixnan using var
var float swinghigh = na
if not na(sh)
    swinghigh := sh

colorsh = swinghigh == swinghigh[1] ? color.white : na
plot(swinghigh, color=colorsh, title="Swing High", style=plot.style_line, offset=-2)

ktswinglow = (low >= low[2] and low[1] >= low[2] and low[3] >= low[2] and low[4] >= low[2])
sl = ktswinglow ? low[2] : na

// Replacement for fixnan using var
var float swinglow = na
if not na(sl)
    swinglow := sl

colorsl = swinglow == swinglow[1] ? color.white : na
plot(swinglow, title="Swing Low", color=colorsl, style=plot.style_line, offset=-2)

// --- Pinbar & Patterns ---
ema21 = ta.ema(close, 13)
beariskpinbar = (close - open < (high - low) / 3 and open - close < (high - low) / 3) and ((high > swinghigh and high > high[1] and high > high[2] and high > high[3] and close < swinghigh))
bullishpibar  = (close - open < (high - low) / 3 and open - close < (high - low) / 3) and ((low < swinglow and low < low[1] and low < low[2] and low < low[3] and close > swinglow))

// Helper function for Inside Bar
Inside(pos) => high <= high[pos] and low >= low[pos]

outsidebar = (high >= high[1] and low <= low[1])
barcolor((high <= high[1] and low >= low[1]) ? color.white : na)

// MACD Color Logic
barcolor(hisup == 1 and MACD > 0 ? color.lime : hisdown == 1 and MACD < 0 ? color.red : hisup == -1 and MACD > 0 ? color.green : color.orange)
barcolor(bullishpibar or beariskpinbar ? color.white : na)

secLast = 1
fakey = (high[1] <= high[2] and low[1] >= low[2] and high > high[2] and close >= low[2] and close < high[2]) or (high[2] <= high[3] and low[2] >= low[3] and high[1] > high[2] and close < high[2] and close > low[3] and high - close > 0.75 * (high - low))
fakey1 = (high[1] <= high[2] and low[1] >= low[2] and low < low[2] and close > low[2] and close <= high[1]) or (high[2] <= high[3] and low[2] >= low[3] and low[1] < low[2] and close > low[2] and close < high[3] and close - low > 0.75 * (high - low))
barcolor(fakey or fakey1 ? color.white : na)

// Soldiers and Crows
onewhitesoliderbear = close < open and high[1] - close > 0.5 * (high[1] - low[1]) and (open - close) > 2.0 / 3.0 * (high - low) and (high[1] > ema21[1] or high > ema21) and open[1] < ema21[1] and close - low < (high - close) * 0.3 and (open[2] < ema21[2] or close[2] < ema21[2]) and close < ema21 and low[2] < low[1] and low[3] < low[2]
onewwhitesoliderbull = close > open and close - low[1] > 0.5 * (high[1] - low[1]) and (close - open) > 2.0 / 3.0 * (high - low) and (low[1] < ema21[1] or low < ema21) and open[1] > ema21[1] and high - close < (close - low) * 0.3 and (open[2] > ema21[2] or close[2] > ema21[2]) and close > ema21 and high[2] > high[1] and high[3] > high[2]

insidebar = ((high[1] <= high[2] and low[1] >= low[2]) and not outsidebar)
barcolor(outsidebar and high[1] <= high[2] and low[1] >= low[2] ? color.white : na)
bearishibbf = (insidebar and (high > high[1] and close < high[1]))
bullishibbf = (insidebar and (low < low[1] and close > low[1]))

barcolor((onewwhitesoliderbull or onewhitesoliderbear) and not insidebar ? color.white : na)

whitesoldierreversal = ((low[1] < low[2] and low[2] < low[3]) or (high[1] < high[2] and high[2] < high[3])) and low[3] < low[8] and low[8] < ema21[8] and high[2] < ema21[2] and high[1] < ema21[1] and high[3] < ema21[3] and close - low[1] > (high[1] - close) and (open < close[1] or open < open[1]) and close - open > 0.3 * (high - low) and high - close < 0.5 * (close - open)
blackcrowreversal = ((high[1] > high[2] and high[2] > high[3]) or (low[1] > low[2] and low[2] > low[3])) and high[3] > high[8] and high[8] > ema21[8] and low[2] > ema21[2] and low[1] > ema21[1] and low[3] > ema21[3] and close - low[1] < (high[1] - close) and (open > close[1] or open > open[1]) and open - close > 0.3 * (high - low) and close - low < 0.5 * (open - close)

barcolor(blackcrowreversal or whitesoldierreversal ? color.white : na)

pinbarreversalbull = ((low[1] < low[2] and low[2] < low[3]) or (high[1] < high[2] and high[2] < high[3])) and low[3] < low[8] and low[8] < ema21[8] and high[2] < ema21[2] and high[1] < ema21[1] and high[3] < ema21[3] and close - open < (high - low) / 3 and open - close < (high - low) / 3 and high - close < close - low and low < low[1]
pinbarreversalbear = ((high[1] > high[2] and high[2] > high[3]) or (low[1] > low[2] and low[2] > low[3])) and high[3] > high[8] and high[8] > ema21[8] and low[2] > ema21[2] and low[1] > ema21[1] and low[3] > ema21[3] and close - open < (high - low) / 3 and open - close < (high - low) / 3 and high - close > close - low and high > high[1]

barcolor(pinbarreversalbear or pinbarreversalbull ? color.white : na)

plotshape(fakey and (not outsidebar or not (high[1] <= high[2] and low[1] >= low[2])) and not blackcrowreversal, title="Fakey Bearish", location=location.abovebar, color=color.white, style=shape.arrowdown, text="Fakey", size=size.tiny)
plotshape(fakey1 and (not outsidebar or not (high[1] <= high[2] and low[1] >= low[2])) and not whitesoldierreversal, title="Fakey Bullish", location=location.belowbar, color=color.white, style=shape.arrowup, text="Fakey", size=size.tiny)

// --- Strategy Logic ---
conmua = 0
conmua := hisup == 1 and MACD > 0 ? 1 : (hisdown[1] == 1 and MACD[1] < 0 and pacC[1] > signalMA[1]) or (n1[2] < n1[3] and pacC[1] > signalMA[1]) ? -1 : nz(conmua[1], 1)

conmua1 = 0
conmua1 := conmua == 1 and (hisdown == 1 and MACD < 0 and pacC > signalMA) or (n1[1] < n1[2] and pacC > signalMA) ? 1 : (close[1] > n1[1] and pacC[1] > signalMA[1] and open[1] < n1[1] and close[1] > pacC[1]) or ta.crossunder(pacC, signalMA) ? -1 : nz(conmua1[1], 1)

conmua2 = 0
conmua2 := conmua1 == 1 and hisup == 1 and MACD > 0 and close > n1 ? 1 : high[1] < high[3] and high[2] < high[3] ? -1 : nz(conmua2[1], 1)

conmua3 = 0
conmua3 := conmua2 == 1 and high < high[2] and high[1] < high[2] ? 1 : (close[1] > swinghigh[1] and hisup[1] == 1 and MACD[1] > 0) or (MACD < 0) ? -1 : nz(conmua3[1], 1)

mua = conmua3 == 1 and hisup == 1 and MACD > 0 and conmua2 == -1 and conmua1 == -1
mua2 = conmua1 == 1 and (close > n1 and pacC > signalMA and open < n1 and close > pacC) and conmua[1] == -1

// ENTRY BUY
if (mua2 and not onlysell)
    strategy.entry("Buy", strategy.long)

conban = 0
conban := hisdown == 1 and MACD < 0 ? 1 : (hisup[1] == 1 and MACD[1] > 0 and pacC[1] < signalMA[1]) or (n1[2] > n1[3] and pacC[1] < signalMA[1]) ? -1 : nz(conban[1], 1)

conban1 = 0
conban1 := conban == 1 and (hisup == 1 and MACD > 0 and pacC < signalMA) or (n1[1] > n1[2] and pacC < signalMA) ? 1 : (close[1] < n1[1] and pacC[1] < signalMA[1] and open[1] > n1[1] and close[1] < pacC[1]) or ta.crossover(pacC, signalMA) ? -1 : nz(conban1[1], 1)

conban2 = 0
conban2 := conban1 == 1 and hisdown == 1 and MACD < 0 and close < n1 ? 1 : low[1] > low[3] and low[2] > low[3] ? -1 : nz(conban2[1], 1)

conban3 = 0
conban3 := conban2 == 1 and low[1] > low[2] and low > low[2] ? 1 : (close[1] < swinglow[1] and hisdown[1] == 1 and MACD[1] < 0) or (MACD > 0) ? -1 : nz(conban3[1], 1)

ban = conban3 == 1 and hisdown == 1 and MACD < 0 and conban2 == -1
ban2 = conban1 == 1 and (close < n1 and pacC < signalMA and open > n1 and close < pacC) and conban[1] == -1

// ENTRY SELL
if (ban2 and not onlybuy)
    strategy.entry("Sell", strategy.short)

plotshape(conmua1 == 1 and conmua[1] == -1, style=shape.triangleup, color=color.lime, location=location.bottom, size=size.tiny)
plotshape(conban1 == 1 and conban[1] == -1, style=shape.triangledown, color=color.red, location=location.bottom, size=size.tiny)
plotshape(mua2, style=shape.labelup, color=color.lime, location=location.bottom, size=size.tiny)
plotshape(ban2, style=shape.labeldown, color=color.red, location=location.bottom, size=size.tiny)

// --- TP and SL ---
Stop = rr_input * 10
Take = SL_input * 10

if (useTPandSL)
    strategy.exit("ExitBuy", "Buy", 1, profit=Take, loss=Stop)
    strategy.exit("ExitSell", "Sell", 1, profit=Take, loss=Stop)