このサイトは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で動かすまでの手順です。
- TradingViewのチャート画面下部にある「Pineエディタ」タブを開く
- 新規スクリプトを作成し、上のコードを貼り付ける
- 「保存」してから「チャートに追加」をクリックする
- サブウィンドウに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の知識がそのまま応用できます。
コメント