
Jangan tertipu oleh nama sederhana “Price Action”. Strategi ini mengintegrasikan 6 dimensi teknologi: 34 siklus EMA channel, 89 siklus Hull MA, MACD column chart, swing high low point, Pin Bar shape, dan Fakey breakthrough mode.Mekanisme verifikasi multidimensi yang sesungguhnya, bukan hanya mengikuti satu indikator saja.
Logika inti dari strategi ini adalah: EMA channel untuk menentukan arah tren, Hull MA untuk memberikan konfirmasi tren yang halus, MACD pilar untuk mengidentifikasi perubahan dinamika, swing point point untuk memberikan resistensi pendukung yang penting, Pin Bar dan Fakey shape sebagai pemicu masuk.Setiap sinyal membutuhkan beberapa kali konfirmasi, itulah sebabnya ini lebih dapat diandalkan daripada strategi indikator tunggal tradisional.
Stop Loss 50 poin, Stop Loss 20 poin, RRR mencapai 1: 2: 5.Pengaturan ini memberi tahu Anda fakta yang kejam: bahkan jika Anda hanya menang 40%, Anda akan tetap menguntungkan dalam jangka panjang.Namun kenyataannya adalah bahwa mekanisme verifikasi multi-dimensi biasanya dapat meningkatkan tingkat keberhasilan hingga 55-65%.
Hull MA memiliki pengaturan 89 periode yang menarik perhatian khusus. Berbeda dengan rata-rata bergerak tradisional, Hull MA hampir menghilangkan keterbelakangan dengan penghitungan kedua rata-rata bergerak berbobot.Ketika Hull MA berubah warna, kemungkinan perubahan tren lebih dari 70%, yang merupakan salah satu keunggulan inti dari strategi tersebut.
Syarat identifikasi Pin Bar dalam strategi sangat ketat: entitas harus kurang dari 1⁄3 dari garis K dan harus menembus titik tinggi dan rendah.Tidak semua garis panjang disebut Pin Bar, hanya yang menembus posisi kunci yang memiliki nilai transaksi.
Lihatlah logika penilaian ini:(close - open < (high - low) / 3)Ini adalah salah satu cara untuk memastikan bahwa entitas tersebut cukup kecil.high > swinghigh and high > high[1]Pastikan terobosan efektif.Ini adalah strategi yang lebih ketat daripada 90% dari Pin Bar yang ada di pasar, dan itulah sebabnya kualitas sinyalnya lebih tinggi.
Identifikasi bentuk Fakey adalah pembunuh tersembunyi dari strategi ini. False breakout setelah inbuilt line kemudian dibalik, dan tingkat keberhasilannya biasanya antara 65-75%.fakeyIni adalah salah satu contoh yang bagus.fakey1Identifikasi terobosan palsu ke bawah.
Kuncinya adalah pengaturan rasio 0,75:close - low > 0.75 * (high - low)Parameter ini dioptimalkan dengan banyak pengetesan ulang, tingkat keberhasilan turun di bawah 0,75, dan sinyal terlalu sedikit di atas 0,75.Parameter yang tepat dua digit setelah titik kecil, tidak disetel secara acak.
Strategi menggunakan warna untuk menunjukkan status pasar secara intuitif: hijau menunjukkan peningkatan momentum naik, merah menunjukkan peningkatan momentum turun, oranye menunjukkan penurunan momentum.Ini bukan hiasan mewah, ini adalah sinyal perdagangan yang muncul secara real time.
hisupDanhisdownVariabel yang melacak perubahan berturut-turut dari MACD pilar. Bila pilar terus tumbuh dan berada di atas sumbu nol, multi-kepala dinamika dikonfirmasi; sebaliknya dikonfirmasi kosong kepala dinamika.Ini adalah 1-2 siklus lebih baik daripada hanya melihat MACD.
Identifikasi titik ayunan 5 siklus:high <= high[2] and high[1] <= high[2] and high[3] <= high[2] and high[4] <= high[2]Logika ini memastikan bahwa titik tertinggi yang diidentifikasi adalah titik tertinggi lokal yang sebenarnya, bukan fluktuasi acak.
Nilai dari titik-titik ayunan adalah bahwa mereka menyediakan titik-titik resistensi pendukung yang objektif.Tidak perlu garis subjektif, sistem secara otomatis mengenali dan terus-menerus memperbarui. Ketika harga menembus titik-titik kunci ini, biasanya berarti awal sebenarnya dari tren.
Paling cocok untuk:Melacak tren di tingkat garis waktu, terutama mata uang asing utama dan indeks saham berjangka.
Perhatikan:Pasar bergoyang frekuensi tinggi dan lingkungan fluktuasi ekstrem cryptocurrency. Pin Bar dan Fakey mudah menghasilkan sinyal palsu dalam fluktuasi yang berlebihan.
Menghindari sepenuhnya:Varietas minoritas dengan volume transaksi yang sangat rendah dan periode yang padat dengan berita. Analisis teknis memiliki probabilitas kegagalan yang tinggi dalam situasi ini.
34 siklus EMA dapat disesuaikan dengan varietas yang diperdagangkan ke kisaran 30-40, 89 siklus Hull MA dapat diuji dalam kisaran 80-100.Namun, tidak disarankan untuk menyimpang secara drastis, karena parameter ini telah lama terbukti di pasar.
Rasio stop loss dapat disesuaikan dengan volatilitas varietas. Varietas dengan fluktuasi tinggi dapat diperluas menjadi 60:25, varietas dengan fluktuasi rendah dapat diperketat menjadi 40:15.Kuncinya adalah menjaga rasio risiko-keuntungan lebih dari 2:1.
Strategi apa pun memiliki risiko kerugian berkelanjutan, dan sistem multidimensi ini tidak terkecuali.Disarankan untuk mengontrol 1-2% dari risiko per akun, dengan ketat menerapkan stop loss, dan jangan membiarkan manajemen risiko melemah karena banyak konfirmasi.
Perubahan lingkungan pasar dapat mempengaruhi kinerja strategi, terutama dalam situasi ekstrem di mana indikator teknis dapat gagal secara bersamaan.Periksa kembali kinerja strategi secara berkala, dan jika perlu, hentikan perdagangan sampai kondisi pasar lebih baik.
/*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)