Pine Script入門 - TradingViewで自分だけのインジケーターを作る
Pine ScriptはTradingView独自のプログラミング言語です。プログラミング未経験でも、基本的なインジケーターなら意外と簡単に作れます。
この記事ではPine Script v6の基礎を、実際のコード例とともに解説します。
Pine Scriptでできること
- カスタムインジケーター — 既存にないオリジナルの指標を表示
- ストラテジー — 売買ルールを定義してバックテスト
- アラート条件 — 独自条件でアラートを設定
- ライブラリ — 再利用可能な関数を作成・公開
Pine Scriptエディタの開き方
- TradingViewでチャートを表示
- チャート下部の「Pine Script」タブをクリック
- エディタが開く
「新規作成」→「インジケーター」を選ぶと、テンプレートコードが表示されます。
最初のインジケーター
まずは最もシンプルなインジケーターを作ってみましょう。
終値を線で表示する
//@version=6
indicator("マイ終値ライン", overlay=true)
plot(close, color=color.blue, linewidth=2)
コード解説:
| 行 | 意味 |
|---|---|
//@version=6 | Pine Scriptのバージョン指定(最新はv6) |
indicator(...) | インジケーターの宣言 |
"マイ終値ライン" | インジケーター名 |
overlay=true | チャート上に重ねて表示(falseなら別パネル) |
plot(close, ...) | 終値を青い線で描画 |
「チャートに追加」ボタンを押すと、チャート上に青い線が表示されます。
Pine Scriptの基本構造
すべてのPine Scriptは以下の構造を持ちます:
//@version=6
indicator("インジケーター名", overlay=true)
// 1. 入力パラメータの定義
// 2. 計算ロジック
// 3. 描画(plot / plotshape / bgcolor など)
変数と型
組み込み変数
Pine Scriptには価格データなどの組み込み変数が用意されています。
| 変数 | 意味 |
|---|---|
open | 始値 |
high | 高値 |
low | 安値 |
close | 終値 |
volume | 出来高 |
time | バーの時刻 |
bar_index | バーの番号(0始まり) |
変数の定義
myLength = 14
myPrice = close
myAvg = (high + low) / 2
型は自動推論されますが、明示的に指定することもできます。
input() — ユーザーが値を変更できるパラメータ
input() を使うと、チャート上の設定画面からパラメータを変更できるようになります。
//@version=6
indicator("カスタムMA", overlay=true)
length = input.int(20, title="期間", minval=1, maxval=200)
maType = input.string("EMA", title="MAタイプ", options=["SMA", "EMA"])
ma = maType == "EMA" ? ta.ema(close, length) : ta.sma(close, length)
plot(ma, color=color.orange, linewidth=2, title="移動平均線")
このコードは:
- 期間を1〜200の範囲で変更可能
- SMAとEMAを切り替え可能
- コードを編集しなくても設定画面から調整できる
input の種類:
| 関数 | 用途 |
|---|---|
input.int() | 整数値 |
input.float() | 小数値 |
input.bool() | true / false |
input.string() | 文字列(選択肢付き) |
input.color() | 色の選択 |
input.source() | データソース(close, open等) |
ta.関数 — テクニカル分析の計算
Pine Scriptには主要なテクニカル指標の計算関数が組み込まれています。
| 関数 | 内容 |
|---|---|
ta.sma(source, length) | 単純移動平均 |
ta.ema(source, length) | 指数移動平均 |
ta.rsi(source, length) | RSI |
ta.macd(source, fast, slow, signal) | MACD |
ta.bb(source, length, mult) | ボリンジャーバンド |
ta.atr(length) | ATR |
ta.crossover(a, b) | aがbを上抜けたらtrue |
ta.crossunder(a, b) | aがbを下抜けたらtrue |
ta.highest(source, length) | 期間内の最高値 |
ta.lowest(source, length) | 期間内の最安値 |
描画関数
plot() — 線を描画
plot(close, color=color.blue, linewidth=2, title="終値")
plotshape() — マーカーを描画
buySignal = ta.crossover(ta.ema(close, 20), ta.ema(close, 50))
plotshape(buySignal, style=shape.triangleup,
location=location.belowbar, color=color.green,
size=size.small, title="買いシグナル")
条件を満たしたバーの下に緑の三角マーカーが表示されます。
bgcolor() — 背景色を変更
isUpTrend = close > ta.ema(close, 200)
bgcolor(isUpTrend ? color.new(color.green, 90) : color.new(color.red, 90))
200EMAの上なら薄緑、下なら薄赤の背景色。color.new(色, 透明度) で透明度を0〜100で指定します。
hline() — 水平線を描画
hline(70, "買われすぎ", color=color.red)
hline(30, "売られすぎ", color=color.green)
RSIなどのオシレーターで基準線を引く時に使います。
実践例:RSI + MAクロスインジケーター
学んだ内容を組み合わせて、実用的なインジケーターを作ってみましょう。
//@version=6
indicator("RSI + MAクロス シグナル", overlay=true)
// === 入力パラメータ ===
fastLen = input.int(20, title="短期MA期間")
slowLen = input.int(50, title="長期MA期間")
rsiLen = input.int(14, title="RSI期間")
rsiThreshold = input.int(50, title="RSI閾値")
// === 計算 ===
fastMA = ta.ema(close, fastLen)
slowMA = ta.ema(close, slowLen)
rsi = ta.rsi(close, rsiLen)
// MAクロス + RSI条件
buySignal = ta.crossover(fastMA, slowMA) and rsi > rsiThreshold
sellSignal = ta.crossunder(fastMA, slowMA) and rsi < rsiThreshold
// === 描画 ===
plot(fastMA, color=color.blue, title="短期MA")
plot(slowMA, color=color.red, title="長期MA")
plotshape(buySignal, style=shape.labelup,
location=location.belowbar, color=color.green,
text="BUY", textcolor=color.white, size=size.small)
plotshape(sellSignal, style=shape.labeldown,
location=location.abovebar, color=color.red,
text="SELL", textcolor=color.white, size=size.small)
// === アラート条件 ===
alertcondition(buySignal, title="買いシグナル",
message="MAゴールデンクロス + RSI>" + str.tostring(rsiThreshold))
alertcondition(sellSignal, title="売りシグナル",
message="MAデッドクロス + RSI<" + str.tostring(rsiThreshold))
このインジケーターの機能:
- 短期EMAと長期EMAを表示
- MAクロス + RSI条件を満たした時にBUY/SELLラベルを表示
- アラート条件も定義済み。チャートに追加後、アラート設定画面から有効化できる
次のステップ
Pine Scriptの基礎を覚えたら、以下のステップで腕を磨いていきましょう。
1. コミュニティスクリプトを読む
TradingViewのコミュニティには数万のオープンソーススクリプトがあります。人気スクリプトのコードを読んで、書き方のパターンを学びましょう。
2. 既存スクリプトを改造する
ゼロから書くより、既存のスクリプトを少し改造する方が学びやすいです。パラメータを変えたり、条件を追加したりしてみましょう。
3. Pine Script公式リファレンス
TradingView公式のPine Scriptリファレンスは最も正確な情報源です。関数の使い方に迷ったら必ず参照してください。
4. AIを活用する
Pine Scriptのコード生成はAIが得意な分野です。「RSIダイバージェンスを検出するインジケーターを作って」とAIに依頼し、生成されたコードを理解・修正していく方法も効率的です。
当サイトでもAIを使ったインジケーター改良について解説しています。
まとめ
-
Pine Scriptはプログラミング未経験でも始められる
-
indicator()→ 計算 →plot()の基本構造を覚える -
input()でユーザーが設定変更できるパラメータを作る -
ta.関数で主要なテクニカル指標は簡単に計算できる -
alertcondition()でオリジナルのアラート条件を定義 -
まずは既存スクリプトの改造から始めるのがおすすめ
TradingViewの使い方の記事
- TradingViewの基本操作 - チャート設定とテクニカル分析の始め方
- TradingViewにPine Scriptインジケーターを追加する方法
- TradingView無料 vs 有料プラン徹底比較 - あなたに最適なプランは?
- TradingViewアラート機能完全ガイド - 設定方法からWebhook連携まで
- TradingViewチャートレイアウト完全ガイド - マルチチャート・テンプレート活用術
- TradingViewリプレイモードで練習トレード - 過去検証のやり方完全ガイド
- TradingView知らないと損する便利機能10選 - 意外と知られていない隠れ機能
- TradingView描画ツール徹底解説 - トレンドラインからフィボナッチまで
- TradingView内蔵インジケーター活用ガイド - 設定値の考え方と組み合わせ
- TradingViewウォッチリスト&スクリーナー活用術 - 銘柄管理と条件検索
- TradingViewでマルチタイムフレーム分析 - 複数時間足の実践的な見方
- Pine Script入門 - TradingViewで自分だけのインジケーターを作る
- TradingView比較チャートと相関分析 - 通貨ペアの重ね合わせ方法
- TradingViewコミュニティスクリプトの探し方と評価基準
- TradingViewスマホアプリの使い方 - モバイルでできること・できないこと
- TradingViewブローカー連携ガイド - チャートから直接発注する方法
- TradingView経済指標カレンダーの活用法 - チャート上でイベントを確認