OPEN-SOURCE SCRIPT
猛の掟・本物っぽいTradingViewスクリーナー 完全版

//version=5
indicator("猛の掟・本物っぽいTradingViewスクリーナー 完全版", overlay=false, max_labels_count=500, max_lines_count=500)
// =============================
// 入力パラメータ
// =============================
emaLenShort = input.int(5, "短期EMA", minval=1)
emaLenMid = input.int(13, "中期EMA", minval=1)
emaLenLong = input.int(26, "長期EMA", minval=1)
macdFastLen = input.int(12, "MACD Fast", minval=1)
macdSlowLen = input.int(26, "MACD Slow", minval=1)
macdSignalLen = input.int(9, "MACD Signal", minval=1)
macdZeroTh = input.float(0.2, "MACDゼロライン近辺とみなす許容値", step=0.05)
volMaLen = input.int(5, "出来高平均日数", minval=1)
volMinRatio = input.float(1.3, "出来高倍率(初動判定しきい値)", step=0.1)
volStrongRatio = input.float(1.5, "出来高倍率(本物/三点シグナル用)", step=0.1)
highLookback = input.int(60, "直近高値の参照本数", minval=10)
pullbackMin = input.float(5.0, "押し目最小[%]", step=0.5)
pullbackMax = input.float(15.0, "押し目最大[%]", step=0.5)
breakLookback = input.int(15, "レジブレ後とみなす本数", minval=1)
wickBodyMult = input.float(2.0, "ピンバー:下ヒゲが実体の何倍以上か", step=0.5)
// 表示設定
showPanel = input.bool(true, "下パネルにスコアを表示する")
showTable = input.bool(true, "右上に8条件チェック表を表示する")
// =============================
// 基本指標計算
// =============================
emaShort = ta.ema(close, emaLenShort)
emaMid = ta.ema(close, emaLenMid)
emaLong = ta.ema(close, emaLenLong)
[macdLine, macdSignal, _] = ta.macd(close, macdFastLen, macdSlowLen, macdSignalLen)
volMa = ta.sma(volume, volMaLen)
volRatio = volMa > 0 ? volume / volMa : 0.0
recentHigh = ta.highest(high, highLookback)
prevHigh = ta.highest(high[1], highLookback)
pullbackPct = recentHigh > 0 ? (recentHigh - close) / recentHigh * 100.0 : 0.0
// ローソク足要素
body = math.abs(close - open)
upperWick = high - math.max(open, close)
lowerWick = math.min(open, close) - low
// =============================
// A:トレンド条件
// =============================
emaUp = emaShort > emaShort[1] and emaMid > emaMid[1] and emaLong > emaLong[1]
goldenOrder = emaShort > emaMid and emaMid > emaLong
aboveEma2 = close > emaLong and close[1] > emaLong[1]
trendOK = emaUp and goldenOrder and aboveEma2
// =============================
// B:MACD条件
// =============================
macdGC = ta.crossover(macdLine, macdSignal)
macdNearZero = math.abs(macdLine) <= macdZeroTh
macdUp = macdLine > macdLine[1]
macdOK = macdGC and macdNearZero and macdUp
// =============================
// C:出来高条件
// =============================
volInitOK = volRatio >= volMinRatio // 8条件用
volStrongOK = volRatio >= volStrongRatio // 三点シグナル用
volumeOK = volInitOK
// =============================
// D:ローソク足パターン
// =============================
isBullPinbar = lowerWick > wickBodyMult * body and lowerWick > upperWick and close >= open
isBullEngulf = close > open and open < close[1] and close > open[1]
isBigBullCross = close > emaShort and close > emaMid and open < emaShort and open < emaMid and close > open
candleOK = isBullPinbar or isBullEngulf or isBigBullCross
// =============================
// E:価格帯(押し目&レジブレ)
// =============================
pullbackOK = pullbackPct >= pullbackMin and pullbackPct <= pullbackMax
isBreakout = close > prevHigh and close[1] <= prevHigh
barsSinceBreak = ta.barssince(isBreakout)
afterBreakZone = barsSinceBreak >= 0 and barsSinceBreak <= breakLookback
afterBreakPullbackOK = afterBreakZone and pullbackOK and close > emaShort
priceOK = pullbackOK and afterBreakPullbackOK
// =============================
// 8条件の統合
// =============================
allRulesOK = trendOK and macdOK and volumeOK and candleOK and priceOK
// =============================
// 最終三点シグナル
// =============================
longLowerWick = lowerWick > wickBodyMult * body and lowerWick > upperWick
macdGCAboveZero = ta.crossover(macdLine, macdSignal) and macdLine > 0
volumeSpike = volStrongOK
finalThreeSignal = longLowerWick and macdGCAboveZero and volumeSpike
buyConfirmed = allRulesOK and finalThreeSignal
// =====================================================
// スクリーナー用スコア(0=なし, 1=猛, 2=確)
// =====================================================
score = buyConfirmed ? 2 : (allRulesOK ? 1 : 0)
// 色分け(1行で安全な書き方)
col = score == 2 ? color.new(color.yellow, 0) : score == 1 ? color.new(color.lime, 0) : color.new(color.gray, 80)
// -----------------------------------------------------
// ① 視覚用:下パネルのカラム表示
// -----------------------------------------------------
plot(showPanel ? score : na,
title = "猛スコア(0=なし,1=猛,2=確)",
style = plot.style_columns,
color = col,
linewidth = 2)
hline(0, "なし", color=color.new(color.gray, 80))
hline(1, "猛", color=color.new(color.lime, 60))
hline(2, "確", color=color.new(color.yellow, 60))
// -----------------------------------------------------
// ② Data Window 用出力(スクリーナー風)
// -----------------------------------------------------
plot(score, title="Score_0なし1猛2確", color=color.new(color.white, 100), display=display.data_window)
plot(allRulesOK ? 1 : 0, title="A_Trend_OK", color=color.new(color.white, 100), display=display.data_window)
plot(macdOK ? 1 : 0, title="B_MACD_OK", color=color.new(color.white, 100), display=display.data_window)
plot(volumeOK ? 1 : 0, title="C_Volume_OK", color=color.new(color.white, 100), display=display.data_window)
plot(candleOK ? 1 : 0, title="D_Candle_OK", color=color.new(color.white, 100), display=display.data_window)
plot(priceOK ? 1 : 0, title="E_Price_OK", color=color.new(color.white, 100), display=display.data_window)
plot(longLowerWick ? 1 : 0, title="F_Pin下ヒゲ_OK", color=color.new(color.white, 100), display=display.data_window)
plot(macdGCAboveZero ? 1 : 0, title="G_MACDゼロ上", color=color.new(color.white, 100), display=display.data_window)
plot(volumeSpike ? 1 : 0, title="H_出来高1.5倍", color=color.new(color.white, 100), display=display.data_window)
// -----------------------------------------------------
// ③ 右上に「8条件チェック表」を表示(最終バーのみ)
// -----------------------------------------------------
var table info = table.new(position.top_right, 2, 9,
border_width = 1,
border_color = color.new(color.white, 60))
// 1行分の表示用ヘルパー
fRow(string label, bool cond, int row) =>
color bg = cond ? color.new(color.lime, 70) : color.new(color.red, 80)
string txt = cond ? "達成" : "未達"
// 左列:条件名
table.cell(info, 0, row, label, text_color = color.white, bgcolor = color.new(color.black, 0))
// 右列:結果(達成 / 未達)
table.cell(info, 1, row, txt, text_color = color.white, bgcolor = bg)
if barstate.islast and showTable
// ヘッダー(2列とも黒背景)
table.cell(info, 0, 0, "猛の掟 8条件チェック", text_color = color.white, bgcolor = color.new(color.black, 0))
table.cell(info, 1, 0, "", text_color = color.white, bgcolor = color.new(color.black, 0))
fRow("A: トレンド", trendOK, 1)
fRow("B: MACD", macdOK, 2)
fRow("C: 出来高", volumeOK, 3)
fRow("D: ローソク", candleOK, 4)
fRow("E: 押し目/レジブレ", priceOK, 5)
fRow("三点: ヒゲ", longLowerWick, 6)
fRow("三点: MACDゼロ上", macdGCAboveZero,7)
fRow("三点: 出来高1.5倍", volumeSpike, 8)
indicator("猛の掟・本物っぽいTradingViewスクリーナー 完全版", overlay=false, max_labels_count=500, max_lines_count=500)
// =============================
// 入力パラメータ
// =============================
emaLenShort = input.int(5, "短期EMA", minval=1)
emaLenMid = input.int(13, "中期EMA", minval=1)
emaLenLong = input.int(26, "長期EMA", minval=1)
macdFastLen = input.int(12, "MACD Fast", minval=1)
macdSlowLen = input.int(26, "MACD Slow", minval=1)
macdSignalLen = input.int(9, "MACD Signal", minval=1)
macdZeroTh = input.float(0.2, "MACDゼロライン近辺とみなす許容値", step=0.05)
volMaLen = input.int(5, "出来高平均日数", minval=1)
volMinRatio = input.float(1.3, "出来高倍率(初動判定しきい値)", step=0.1)
volStrongRatio = input.float(1.5, "出来高倍率(本物/三点シグナル用)", step=0.1)
highLookback = input.int(60, "直近高値の参照本数", minval=10)
pullbackMin = input.float(5.0, "押し目最小[%]", step=0.5)
pullbackMax = input.float(15.0, "押し目最大[%]", step=0.5)
breakLookback = input.int(15, "レジブレ後とみなす本数", minval=1)
wickBodyMult = input.float(2.0, "ピンバー:下ヒゲが実体の何倍以上か", step=0.5)
// 表示設定
showPanel = input.bool(true, "下パネルにスコアを表示する")
showTable = input.bool(true, "右上に8条件チェック表を表示する")
// =============================
// 基本指標計算
// =============================
emaShort = ta.ema(close, emaLenShort)
emaMid = ta.ema(close, emaLenMid)
emaLong = ta.ema(close, emaLenLong)
[macdLine, macdSignal, _] = ta.macd(close, macdFastLen, macdSlowLen, macdSignalLen)
volMa = ta.sma(volume, volMaLen)
volRatio = volMa > 0 ? volume / volMa : 0.0
recentHigh = ta.highest(high, highLookback)
prevHigh = ta.highest(high[1], highLookback)
pullbackPct = recentHigh > 0 ? (recentHigh - close) / recentHigh * 100.0 : 0.0
// ローソク足要素
body = math.abs(close - open)
upperWick = high - math.max(open, close)
lowerWick = math.min(open, close) - low
// =============================
// A:トレンド条件
// =============================
emaUp = emaShort > emaShort[1] and emaMid > emaMid[1] and emaLong > emaLong[1]
goldenOrder = emaShort > emaMid and emaMid > emaLong
aboveEma2 = close > emaLong and close[1] > emaLong[1]
trendOK = emaUp and goldenOrder and aboveEma2
// =============================
// B:MACD条件
// =============================
macdGC = ta.crossover(macdLine, macdSignal)
macdNearZero = math.abs(macdLine) <= macdZeroTh
macdUp = macdLine > macdLine[1]
macdOK = macdGC and macdNearZero and macdUp
// =============================
// C:出来高条件
// =============================
volInitOK = volRatio >= volMinRatio // 8条件用
volStrongOK = volRatio >= volStrongRatio // 三点シグナル用
volumeOK = volInitOK
// =============================
// D:ローソク足パターン
// =============================
isBullPinbar = lowerWick > wickBodyMult * body and lowerWick > upperWick and close >= open
isBullEngulf = close > open and open < close[1] and close > open[1]
isBigBullCross = close > emaShort and close > emaMid and open < emaShort and open < emaMid and close > open
candleOK = isBullPinbar or isBullEngulf or isBigBullCross
// =============================
// E:価格帯(押し目&レジブレ)
// =============================
pullbackOK = pullbackPct >= pullbackMin and pullbackPct <= pullbackMax
isBreakout = close > prevHigh and close[1] <= prevHigh
barsSinceBreak = ta.barssince(isBreakout)
afterBreakZone = barsSinceBreak >= 0 and barsSinceBreak <= breakLookback
afterBreakPullbackOK = afterBreakZone and pullbackOK and close > emaShort
priceOK = pullbackOK and afterBreakPullbackOK
// =============================
// 8条件の統合
// =============================
allRulesOK = trendOK and macdOK and volumeOK and candleOK and priceOK
// =============================
// 最終三点シグナル
// =============================
longLowerWick = lowerWick > wickBodyMult * body and lowerWick > upperWick
macdGCAboveZero = ta.crossover(macdLine, macdSignal) and macdLine > 0
volumeSpike = volStrongOK
finalThreeSignal = longLowerWick and macdGCAboveZero and volumeSpike
buyConfirmed = allRulesOK and finalThreeSignal
// =====================================================
// スクリーナー用スコア(0=なし, 1=猛, 2=確)
// =====================================================
score = buyConfirmed ? 2 : (allRulesOK ? 1 : 0)
// 色分け(1行で安全な書き方)
col = score == 2 ? color.new(color.yellow, 0) : score == 1 ? color.new(color.lime, 0) : color.new(color.gray, 80)
// -----------------------------------------------------
// ① 視覚用:下パネルのカラム表示
// -----------------------------------------------------
plot(showPanel ? score : na,
title = "猛スコア(0=なし,1=猛,2=確)",
style = plot.style_columns,
color = col,
linewidth = 2)
hline(0, "なし", color=color.new(color.gray, 80))
hline(1, "猛", color=color.new(color.lime, 60))
hline(2, "確", color=color.new(color.yellow, 60))
// -----------------------------------------------------
// ② Data Window 用出力(スクリーナー風)
// -----------------------------------------------------
plot(score, title="Score_0なし1猛2確", color=color.new(color.white, 100), display=display.data_window)
plot(allRulesOK ? 1 : 0, title="A_Trend_OK", color=color.new(color.white, 100), display=display.data_window)
plot(macdOK ? 1 : 0, title="B_MACD_OK", color=color.new(color.white, 100), display=display.data_window)
plot(volumeOK ? 1 : 0, title="C_Volume_OK", color=color.new(color.white, 100), display=display.data_window)
plot(candleOK ? 1 : 0, title="D_Candle_OK", color=color.new(color.white, 100), display=display.data_window)
plot(priceOK ? 1 : 0, title="E_Price_OK", color=color.new(color.white, 100), display=display.data_window)
plot(longLowerWick ? 1 : 0, title="F_Pin下ヒゲ_OK", color=color.new(color.white, 100), display=display.data_window)
plot(macdGCAboveZero ? 1 : 0, title="G_MACDゼロ上", color=color.new(color.white, 100), display=display.data_window)
plot(volumeSpike ? 1 : 0, title="H_出来高1.5倍", color=color.new(color.white, 100), display=display.data_window)
// -----------------------------------------------------
// ③ 右上に「8条件チェック表」を表示(最終バーのみ)
// -----------------------------------------------------
var table info = table.new(position.top_right, 2, 9,
border_width = 1,
border_color = color.new(color.white, 60))
// 1行分の表示用ヘルパー
fRow(string label, bool cond, int row) =>
color bg = cond ? color.new(color.lime, 70) : color.new(color.red, 80)
string txt = cond ? "達成" : "未達"
// 左列:条件名
table.cell(info, 0, row, label, text_color = color.white, bgcolor = color.new(color.black, 0))
// 右列:結果(達成 / 未達)
table.cell(info, 1, row, txt, text_color = color.white, bgcolor = bg)
if barstate.islast and showTable
// ヘッダー(2列とも黒背景)
table.cell(info, 0, 0, "猛の掟 8条件チェック", text_color = color.white, bgcolor = color.new(color.black, 0))
table.cell(info, 1, 0, "", text_color = color.white, bgcolor = color.new(color.black, 0))
fRow("A: トレンド", trendOK, 1)
fRow("B: MACD", macdOK, 2)
fRow("C: 出来高", volumeOK, 3)
fRow("D: ローソク", candleOK, 4)
fRow("E: 押し目/レジブレ", priceOK, 5)
fRow("三点: ヒゲ", longLowerWick, 6)
fRow("三点: MACDゼロ上", macdGCAboveZero,7)
fRow("三点: 出来高1.5倍", volumeSpike, 8)
Skrip open-source
Dengan semangat TradingView yang sesungguhnya, pembuat skrip ini telah menjadikannya sebagai sumber terbuka, sehingga para trader dapat meninjau dan memverifikasi fungsinya. Salut untuk penulisnya! Meskipun Anda dapat menggunakannya secara gratis, perlu diingat bahwa penerbitan ulang kode ini tunduk pada Tata Tertib kami.
Pernyataan Penyangkalan
Informasi dan publikasi ini tidak dimaksudkan, dan bukan merupakan, saran atau rekomendasi keuangan, investasi, trading, atau jenis lainnya yang diberikan atau didukung oleh TradingView. Baca selengkapnya di Ketentuan Penggunaan.
Skrip open-source
Dengan semangat TradingView yang sesungguhnya, pembuat skrip ini telah menjadikannya sebagai sumber terbuka, sehingga para trader dapat meninjau dan memverifikasi fungsinya. Salut untuk penulisnya! Meskipun Anda dapat menggunakannya secara gratis, perlu diingat bahwa penerbitan ulang kode ini tunduk pada Tata Tertib kami.
Pernyataan Penyangkalan
Informasi dan publikasi ini tidak dimaksudkan, dan bukan merupakan, saran atau rekomendasi keuangan, investasi, trading, atau jenis lainnya yang diberikan atau didukung oleh TradingView. Baca selengkapnya di Ketentuan Penggunaan.