このサイトはMQL4/MQL5の解説が主軸ですが、

TradingViewのPine Scriptにも、

同じテクニカル指標の値を取得する関数があります。

この記事では、Pine Script v6のta.sma/ta.emaや、

ta.rsi/ta.macdの使い方を、

既刊のiMA/iRSI/iMACD関数と対比しながら解説します。

この記事で分かること
・ta.sma/ta.ema/ta.rsi/ta.macdのシグネチャと戻り値
・MQLのiMA/iRSI/iMACD関数との引数の違い
・Pine Scriptで動くサンプルインジケーターの書き方
・MQLユーザーがつまずきやすいPine Script特有の仕様

MQLユーザーがPine Scriptを学ぶ理由

まず、このサイトでPine Scriptを扱う位置づけを確認します。

このサイトの立ち位置(MQLがベース)

このサイトの主軸は、あくまでMQL4/MQL5です。

Pine Scriptは、MQL開発者が別のプラットフォームに触れたときの、

橋渡しとして扱います。

バージョンの違いに注意する

注意
・Pine Scriptはv1からv6まで仕様が変わっている
・v4以前のstudy()はv5以降indicator()に名前が変わった
・この記事はv6の書き方で統一する

MQLと違い、バージョンごとに関数名そのものが変わることがある点が、

まず最初の違いです。

ta.smaとta.emaの使い方

移動平均を取得する2つの関数を確認します。

ta.smaのシグネチャ

ta.sma(source, length) → series float

`source`(系列、終値等)と`length`(期間)の2つだけで、

単純移動平均を返します。

ta.emaのシグネチャ

ta.ema(source, length) → series float

引数の形は同じですが、

内部でalpha = 2 / (length + 1)という重み付けを行う点が、

SMAと異なります。

既刊iMA関数との対比

項目 MQLのiMA Pine Scriptのta.sma/ta.ema
引数の数 7個(symbol/timeframe/ma_period/ma_shift/ma_method/applied_price/shift) 2個(source/length)
手法の切り替え ma_method引数でSMA/EMA等を1つの関数内で切り替え ta.sma/ta.emaという別々の関数名で切り替え
通貨ペア指定 symbol引数で他のチャートの値も取得可能 基本はそのチャートのsourceのみ(他シンボルはrequest.security()が必要)

既刊iMA関数の記事で解説したとおり、MQL4のiMAは1つの関数に多くの引数を詰め込む設計である一方、

Pine Scriptは関数自体を分けることでシンプルな引数構成にしています。

ta.rsiの使い方

RSIを取得する関数を確認します。

ta.rsiのシグネチャ

ta.rsi(source, length) → series float (0〜100)

`source`と`length`の2引数で、0〜100の範囲のRSI値を返します。

既刊iRSI関数との対比

既刊iRSI関数の記事のMQL4版は、symbol/timeframe/period/applied_price/shiftの5引数が必要でした。

Pine Scriptのta.rsiは、現在のチャートのsourceを前提にしているため、

引数が大幅に少なくなっています。

ta.macdの使い方

MACDを取得する関数を確認します。

ta.macdのシグネチャ(タプルを返す)

[macdLine, signalLine, histLine] = ta.macd(source, fastLen, slowLen, signalLen)

MACDラインとシグナルライン、

ヒストグラムの3つの値を、1回の呼び出しでまとめて受け取れます。

既刊iMACD関数との対比(呼び出し回数の違い)

補足
・MQL4のiMACDはmode引数(MODE_MAIN/MODE_SIGNAL)を、
変えて2回呼ぶ必要がある
・Pine Scriptのta.macdは1回の呼び出しで、
3つの値を同時に受け取れる
・ヒストグラムも自分で引き算せず、関数が計算済みの値を返す

既刊iMACD関数の記事で解説したMQL4版は、同じ引数構成のまま`mode`だけを変えて2回呼び出す設計でしたが、

Pine Scriptは1回でまとめて受け取れる点が対照的です。

実際に動くPine Scriptのサンプルコード

4つの関数をまとめて使う、サブウィンドウ表示のサンプルです。

//@version=6
indicator("SMA/EMA/RSI/MACD Sample", overlay = false)

smaValue = ta.sma(close, 20)
emaValue = ta.ema(close, 20)
rsiValue = ta.rsi(close, 14)
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)

plot(rsiValue, title = "RSI", color = color.purple)
hline(70, title = "Overbought", color = color.red)
hline(30, title = "Oversold", color = color.blue)

plot(histLine, title = "MACD Hist", color = color.gray, style = plot.style_histogram)
plot(macdLine, title = "MACD", color = color.orange)
plot(signalLine, title = "Signal", color = color.teal)

RSIとMACDを同じサブウィンドウに重ねていますが、

実際に使う際はスケールが異なるため、

別々のペインに分けることをおすすめします。

TradingViewでの貼り付け・実行手順

実際にTradingViewで動かすまでの手順です。

  1. TradingViewのチャート画面下部にある「Pineエディタ」タブを開く
  2. 新規スクリプトを作成し、上のコードを貼り付ける
  3. 「保存」してから「チャートに追加」をクリックする
  4. サブウィンドウにRSIとMACDが表示されることを確認する

MQLユーザーがつまずきやすい違い

MQLからPine Scriptに移るときに戸惑いやすい点です。

名前空間ta.の必須化

v6では、`sma()`のように名前空間を省略した書き方は使えません。

必ず`ta.sma()`のように書く必要があります。

複数戻り値のタプル代入

MQLには複数の値を同時に返す書き方がないため、

`[macdLine, signalLine, histLine]`という、

角括弧でまとめて受け取る書き方は、

最初は見慣れないはずです。

seriesとsimpleという型の違い

実践アドバイス
・seriesはバーごとに値が変わる系列(close等がこれに該当)
・simpleはスクリプト実行中に変わらない値(入力値等)
・ta.ema()のlengthがsimple intを要求するのはこの区別のため

MQLには無いこの区別のせいで、

コンパイルエラーの原因が分かりにくくなることがあります。

よくある質問

Pine Scriptのta関数について、よく検索される疑問に回答します。

MQLのEAをそのままPine Scriptに移植できますか?

関数名や発注の仕組みが大きく異なるため、そのままの移植はできません。

ただし、ta.sma/ta.rsi等の計算部分だけであれば、

考え方は近いため移植しやすい部分です。

Pine Scriptでバックテストもできますか?

できます。

strategy.entry/strategy.close等を使う「ストラテジー」

として書けば、TradingView上でそのままバックテストできます。

本記事はインジケーター(indicator())の書き方のみを扱っています。

MQL5のiMA/iRSI(ハンドル方式)とはどう違いますか?

MQL5はCopyBuffer()で値を取得する2段階の設計ですが、

Pine Scriptのta.sma/ta.rsiは、

呼び出した瞬間にその場で値を受け取れる1段階の設計です。

ハンドルの生成・解放という概念自体がPine Scriptにはありません。

【Pine Script入門】ta.sma/ta.ema/ta.rsi/ta.macdの使い方をMQLユーザー向けに解説してみた(iMA/iRSI/iMACDとの比較):まとめ

Pine Scriptのta.sma/ta.ema/ta.rsi/ta.macdは、

MQLのiMA/iRSI/iMACDと同じ指標を、より少ない引数で取得できる関数です。

名前空間ta.の必須化、複数戻り値のタプル代入、

series/simpleという型の区別がMQLとの主な違いであり、

ここを押さえればMQLの知識がそのまま応用できます。

関連記事