
TradingViewへのコード貼り付け方法
購入後にダウンロードした Pine Script を、以下の手順で TradingView に登録します。
① TradingView を開く
- TradingView にログイン
- 画面上部の「チャート」を開く
② Pine Editor を開く
画面下部にある
「Pineエディタ」 をクリック
③ コードを貼り付け
- Pineエディタ内のコードをすべて削除
- 購入した Pine Script をすべて貼り付け
④ チャートに適用
- 上部の 「Add to chart(チャートに追加)」 をクリック
- エラーが出なければ自動で表示されます
このコードで確認できること
1) 月足・週足・日足で「意識されやすい価格帯」
各時間足(M/W/D)で発生したピボット高値・安値のうち、現在見ているチャートの過去データで何度も近づいた(反応した)水準だけを「意識されている」と判定してライン化します。
- 「意識されている」=
同じ水準に近い値動きが複数回(touch)ある
という考え方です。
2) 重要度の違い(月>週>日)を“見た目”で区別
あなたの指定どおり表示します。
- 月足の高値:赤・実線・太さ中
- 月足の安値:青・実線・太さ中
- 週足の高値:赤・点線・細
- 週足の安値:青・点線・細
- 日足の高値:ピンク・点線・細
- 日足の安値:水色・点線・細
→ チャートを見るだけで「これは月足由来」「これは日足由来」が判別できます。
3) “反応の強さ”の目安(touch回数)
ラベルに M H (xx) みたいに出ている xx が、判定に使った touch回数です。
回数が多いほど、その期間のデータ内では「その辺を何度も意識した」可能性が高い、という目安になります。
見方(実戦での使い方)
① まず月足ラインだけで“大局の壁”を掴む
- 月足 赤(実線):長期の上限(レジスタンス候補)
- 月足 青(実線):長期の下限(サポート候補)
見るポイント
- 価格が月足ラインに近づくほど、止まりやすい/反転しやすい/揉みやすい
- 月足を抜けた場合、その抜けは「環境認識が変わる」合図になりやすい
② 次に週足ラインで“週の節目”を確認
- 月足の間にある、週足の点線が「途中の節目」です。
- 月足ラインが遠いとき、週足ラインが現実的な反応ポイントになりやすいです。
③ 最後に日足ラインは“エントリーの位置取り”に使う
- 日足(ピンク/水色点線)は数が増えやすいので、
**「いまの価格に近いものだけ」**を見るのがコツです。 - 上位足(月・週)と近い場所に日足が重なると、反応が強くなりやすいです(コンフルエンス)。
ラベルの読み方
例:W H (8)
- W:週足由来
- H:高値(High)→レジスタンス側
- (8):touch回数(過去データでその水準に近づいた回数)
主要パラメータの意味(調整の考え方)
Pivot strength(pivotLen)
- 大きいほど「重要そうな山/谷」だけ拾い、ラインは減る
- 小さいほど「細かい山/谷」も拾い、ラインは増える
※根拠性:銘柄や時間足で最適値が変わる調整値
Min touches(minTouches)
- 大きいほど「本当に何度も反応した水準」だけ残る(厳しくなる)
- 小さいほど拾いやすい(ゆるくなる)
※根拠性:同上
Touch scan lookback(lookbackBars)
- 過去どれだけ遡ってtouchを数えるか
※根拠性:同上(見る時間足が変わると必要本数も変わります)
Tolerance(許容誤差:ATR / %)
- 「同じ水準」と判定する幅
- ATRモードだとボラに応じて幅が変わる
※根拠性:同上(ボラが違うと誤差幅の適正も変わります)
実用上の注意(ここ大事)
- 日足はラインが増えやすいので、邪魔なら
- minTouchesD を上げる(例:3〜4)
- maxLevelsPerTF を下げる(例:3)
- Show labels をOFF(線だけにする)
が効きます。
※この「3〜4」なども推奨の“目安”で、統計的に保証された数字ではありません。
もし、あなたが普段見ている時間足(例:1Hで売買、4Hで判断など)を言ってくれたら、
「月足/週足/日足の役割」を崩さずに、ライン数が適正になるように初期値を寄せた設定にします。
//@version=6
indicator("MTF S/R (Monthly > Weekly > Daily) - Pivot Touch Levels (Styled)", overlay=true, max_lines_count=500, max_labels_count=500)
// =====================
// Inputs
// =====================
grp1 = "Detection"
pivotLen = input.int(3, "Pivot strength (L/R bars)", minval=1, group=grp1)
lookbackBars = input.int(600, "Touch scan lookback (bars on current chart TF)", minval=100, maxval=5000, group=grp1)
minTouchesD = input.int(2, "Min touches for DAILY level", minval=1, maxval=10, group=grp1)
minTouchesW = input.int(2, "Min touches for WEEKLY level", minval=1, maxval=10, group=grp1)
minTouchesM = input.int(2, "Min touches for MONTHLY level", minval=1, maxval=10, group=grp1)
grp2 = "Tolerance"
tolMode = input.string("ATR", "Tolerance mode", options=["ATR","Percent"], group=grp2)
tolAtrMul = input.float(0.35, "ATR tolerance multiplier", minval=0.05, step=0.05, group=grp2)
tolPct = input.float(0.12, "Percent tolerance (%)", minval=0.01, step=0.01, group=grp2)
grp3 = "Display"
showD = input.bool(true, "Show DAILY levels", group=grp3)
showW = input.bool(true, "Show WEEKLY levels", group=grp3)
showM = input.bool(true, "Show MONTHLY levels",group=grp3)
maxLevelsPerTF = input.int(6, "Max levels per TF (kept)", minval=1, maxval=25, group=grp3)
showLabels = input.bool(true, "Show labels (follow right edge)", group=grp3)
// =====================
// Helpers
// =====================
atr = ta.atr(14)
toleranceFor(price) =>
tolMode == "ATR" ? atr * tolAtrMul : price * (tolPct / 100.0)
near(a, b, tol) =>
math.abs(a - b) <= tol
countTouches(level, bars, tol) =>
int c = 0
if bars <= 0
c
else
for i = 0 to bars - 1
if near(high[i], level, tol) or near(low[i], level, tol)
c += 1
c
// =====================
// Storage: line + label pair (1 label per line)
// =====================
var line[] dH_lines = array.new_line()
var label[] dH_labs = array.new_label()
var line[] dL_lines = array.new_line()
var label[] dL_labs = array.new_label()
var line[] wH_lines = array.new_line()
var label[] wH_labs = array.new_label()
var line[] wL_lines = array.new_line()
var label[] wL_labs = array.new_label()
var line[] mH_lines = array.new_line()
var label[] mH_labs = array.new_label()
var line[] mL_lines = array.new_line()
var label[] mL_labs = array.new_label()
updateFollow(linesArr, labsArr) =>
int n = array.size(linesArr)
if n > 0
for i = 0 to n - 1
line ln = array.get(linesArr, i)
float y = line.get_y1(ln)
line.set_x2(ln, bar_index)
if showLabels
label lb = array.get(labsArr, i)
if not na(lb)
label.set_x(lb, bar_index)
label.set_y(lb, y)
isDuplicate(linesArr, level, tol) =>
bool dup = false
int n = array.size(linesArr)
if n > 0
for i = 0 to n - 1
line ln = array.get(linesArr, i)
float y = line.get_y1(ln)
if near(y, level, tol)
dup := true
dup
addLevel(linesArr, labsArr, level, col, width, style, txt) =>
float tol = toleranceFor(level)
if not isDuplicate(linesArr, level, tol)
line lnNew = line.new(
bar_index, level, bar_index, level,
extend=extend.right,
color=col,
width=width,
style=style
)
label lbNew = na
if showLabels
lbNew := label.new(bar_index, level, txt, style=label.style_label_right, textcolor=color.white, color=col, size=size.tiny)
array.unshift(linesArr, lnNew)
array.unshift(labsArr, lbNew)
while array.size(linesArr) > maxLevelsPerTF
line lnOld = array.pop(linesArr)
line.delete(lnOld)
label lbOld = array.pop(labsArr)
if not na(lbOld)
label.delete(lbOld)
// =====================
// MTF Pivot sources
// =====================
getPivots(tf) =>
ph = request.security(syminfo.tickerid, tf, ta.pivothigh(high, pivotLen, pivotLen))
pl = request.security(syminfo.tickerid, tf, ta.pivotlow(low, pivotLen, pivotLen))
[ph, pl]
[phD, plD] = getPivots("D")
[phW, plW] = getPivots("W")
[phM, plM] = getPivots("M")
// =====================
// Main logic
// =====================
processLevel(level, isHigh, tfName, minTouches, enabled, linesArr, labsArr, col, width, style) =>
if enabled and not na(level)
float tol = toleranceFor(level)
int bars = math.min(lookbackBars, bar_index + 1)
int touches = countTouches(level, bars, tol)
if touches >= minTouches
string sideTxt = isHigh ? "H" : "L"
string txt = tfName + " " + sideTxt + " (" + str.tostring(touches) + ")"
addLevel(linesArr, labsArr, level, col, width, style, txt)
// ===== Your requested styles =====
// Monthly: solid, medium
processLevel(phM, true, "M", minTouchesM, showM, mH_lines, mH_labs, color.red, 2, line.style_solid)
processLevel(plM, false, "M", minTouchesM, showM, mL_lines, mL_labs, color.blue, 2, line.style_solid)
// Weekly: dotted, thin
processLevel(phW, true, "W", minTouchesW, showW, wH_lines, wH_labs, color.red, 1, line.style_dotted)
processLevel(plW, false, "W", minTouchesW, showW, wL_lines, wL_labs, color.blue, 1, line.style_dotted)
// Daily: dotted, thin (pink / aqua)
processLevel(phD, true, "D", minTouchesD, showD, dH_lines, dH_labs, color.fuchsia, 1, line.style_dotted)
processLevel(plD, false, "D", minTouchesD, showD, dL_lines, dL_labs, color.aqua, 1, line.style_dotted)
// Follow right edge
updateFollow(dH_lines, dH_labs)
updateFollow(dL_lines, dL_labs)
updateFollow(wH_lines, wH_labs)
updateFollow(wL_lines, wL_labs)
updateFollow(mH_lines, mH_labs)
updateFollow(mL_lines, mL_labs)
FXで「高値・安値(直近高値/安値、戻り高値/安値、日足・週足の高安など)」が意識されるのは、ざっくり言うと 注文が集まりやすい場所=需給が変わりやすい場所 だからです。理由を分解します。
1) そこは“価格の記憶”がある(参加者の損益が偏る)
高値・安値は、多くの人にとって
- 以前買った/売った場所
- 以前損切りした場所
- 「上がらなかった/下がらなかった」転換点
になっていて、再び近づくと行動が起きます。
例:
- 以前の高値で売られて落ちた →「また売られるかも」で利確・新規売りが出る
- 以前の高値で損切りした売り方 →「戻ってきたら逃げたい」で買い戻しが出る
こういう “感情と損益” が重なるので、注文が集中しやすいです。
2) ストップ(損切り)とブレイク注文が溜まる
高値・安値の近くには注文が溜まりやすい代表が2つあります。
- 逆指値(損切り):
高値の上に売りの損切り(買い戻し)、安値の下に買いの損切り(売り)が置かれやすい - ブレイクの新規注文:
「高値を超えたら買う」「安値を割れたら売る」の逆指値エントリーが置かれやすい
だから高値・安値は、到達すると
- 一気に走る(ストップ巻き込み)
- いったん跳ねる(利確・逆張り)
- 騙しになる(吸って戻す)
みたいに動きが出やすいです。
3) 大口が“執行”しやすい(流動性がある)
機関投資家や大口は、少ない滑りで大きな量を売買したいです。
そのために必要なのが 流動性(反対売買の量)。
高値・安値付近は
- ストップ注文
- ブレイク注文
- 逆張りの指値
が重なって流動性が増えやすいので、大口がポジションを作ったり手仕舞いしたりしやすい。
結果として、そこがさらに重要になります。
4) “構造”が明確で、ルール化しやすい
高値・安値は、相場の構造を作ります。
- 高値更新+安値切り上げ → 上昇トレンド
- 安値更新+高値切り下げ → 下降トレンド
- どちらも更新できない → レンジ
つまり高値安値は「相場の状態」を決める軸。
トレーダーは同じものを見て同じルールを使いやすいので、自己増殖的に意識されます。
5) 上位足の高安は“全員が見ている”可能性が高い
特に
- 週足の高値/安値
- 日足の高値/安値
- 前日高値安値、東京時間高安、ロンドン高安
などは、多くの参加者が基準にしやすい。
参加者が多いほど注文が集まりやすく、反応も大きくなりやすいです。