副業への道

TradingViewで使えるオリジナル高値安値コード

  1. HOME >
  2. 副業への道 >

TradingViewで使えるオリジナル高値安値コード

アドセンス広告

TradingViewへのコード貼り付け方法

購入後にダウンロードした Pine Script を、以下の手順で TradingView に登録します。

① TradingView を開く

  1. TradingView にログイン
  2. 画面上部の「チャート」を開く

② Pine Editor を開く

画面下部にある
「Pineエディタ」 をクリック

③ コードを貼り付け

  1. Pineエディタ内のコードをすべて削除
  2. 購入した Pine Script をすべて貼り付け

④ チャートに適用

  1. 上部の 「Add to chart(チャートに追加)」 をクリック
  2. エラーが出なければ自動で表示されます

このコードで確認できること

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) 上位足の高安は“全員が見ている”可能性が高い

特に

  • 週足の高値/安値
  • 日足の高値/安値
  • 前日高値安値、東京時間高安、ロンドン高安
    などは、多くの参加者が基準にしやすい。

参加者が多いほど注文が集まりやすく、反応も大きくなりやすいです。

アドセンス広告

-副業への道