Pineスクリプト道場はPineスクリプト入門からコード作成までをサポートする初心者の方のための記事です。
Pineスクリプトをある程度使える方は「Pineスクリプトの学校」にて応用記事を書いておりますのでそちらをどうぞ。
では、今回はいよいよチャート上にインジケーターを表示してみます。また、合わせて「ビルトイン変数」と「ビルトイン関数」について解説します。
1、はじめに
まずはじめに、「インジケーターとは何か」「インジケーターを作成するとは何か」について整理しておきましょう。
「インジケーターって、チャート上に表示する線とかのことでしょ?」と思われる方もいるかもしれません。
この画像で言えば赤・青・黄のラインのことですね。
まぁ、実際にはそれであっているんですが、もっと言えば
何かしらの数値を描画したもの
ですよね。さらに言い換えれば、
インジケーターとは数値そのものである
ということなんです。
昔、中学生の時にこんな方眼紙に点を打ってそれを繋いでグラフを作図しましたよね!
これって、数値を線で表しているだけのことであって、グラフの正体とは数値そのものなんです。
インジケーターも同じで、あくまでも何かしらの数値を見やすいように線として描画しているのであって、こいつらの正体は数値なんです。
で、これをもとにインジケーターを作成するとは何かということについて考えてみると、こう表現ができるのではないでしょうか。
材料となる数値を意味のある数値へ加工を行い、チャート上に表示したもの
これは、料理に例えるとわかりやすいかと思います。
様々な具材(ここでいう材料となる数値)があって、それらを調理することで完成します。
インジケーター作成も、材料となる数値を加工してそれをチャート上に表示しているだけなんですね。
2、材料となる数値とは?
では、ここでいう材料となる数値とはなんでしょうか。
様々なものがありますが基本的には「始値」「高値」「安値」「終値」の4つを使用します。
これらを使用することで、例えば「始値から終値を引く」ことで当日に動いた値幅を出すこともできますし、この値幅がわかればヒストリカルボラティリティなども算出できます。
この「終値」とかの意味がわからない方は以下の記事を参照してください。
基本これらの数値があればほとんどのインジケーターは作成できますので、最初はこの4つだけ覚えておけば問題ありません。
そして、これらは「ビルトイン変数」で参照できます。
3、ビルトイン変数とは?
では、続いてビルトイン変数について説明します。ビルトイン変数とは、簡潔に言えば先ほどの例であげた材料となるもの、具体的には、
何かしらの意味を持つ文字のこと
だと覚えておきましょう。
少しふわっとしているので、以下にビルトイン変数の例をあげましょう。
このように、何かしらの意味を持った文字列であることがわかります。
例えば、openであればその足の始値を参照できますし、highを使えばその足の高値を参照できます。
4、ビルトイン関数とは?
では、続いて似た名前のビルトイン関数について説明します。
ビルトイン関数とは、
数値を調理する調理器のようなもの
です。これもふわっとしているので具体的なビルトイン関数の例をあげます。
こちらは、先ほどのビルトイン変数と違って何かしらの数値などを与える必要があります。
ビルトイン関数には()がついていますよね。この中に何かしらの数値や情報を与えてあげる必要があります。
そして、その情報をもとに計算された数値や、ブール値(trueかfalse)を返すのがビルトイン関数です。
関数やブール値の意味がわからない!という方は以下の記事を参照してください。
5、ビジュアルで理解する
では、これらの知識を踏まえてビジュアルで理解しましょう。
今回はシンプルに「終値から2期間の単純移動平均の値を生成する」流れを見てみましょう。
(ビルトイン関数で表現するとsma(close,2)が生成されるまでの流れになります)
まずは、ビルトイン変数のcloseにて各足の終値を取得します(上図オレンジ枠部)各足の終値は、配列のように取得されます。
次に、各足の単純移動平均が計算される様子を見てみましょう。
まずは、このように最初の2つの数字の単純移動平均が計算されます。
次は、2つめと3つ目の数字の単純移動平均線が計算されます↓
次は、3つめと4つめの数字から単純移動平均が計算されます↓
これを繰り返すことで単純移動平均が計算されます。
ちなみに、3期間の移動平均なら以下のように3つの値をもとに算出されます。
このような流れで、ビルトイン関数はビルトイン変数をもとに値の計算を行なっていきます。この値を変数に格納することができればあとはチャート上に表示するだけです。
この流れを知っておくのと知らないのとでは、理解の深度が違うのでしっかり覚えておきましょう!
6、チャート上に表示する
では、いよいよチャート上にインジケーターを表示してみましょう。
ビルトイン関数によってビルトイン変数を調理する方法はわかったので、あとはこれらの数字をグラフにしましょう。
チャート上に表示するには、plotという関数を使います。
詳細な使用方法については別途まとめますが、
plot(描画するデータ、タイトル、線の色)
と記述することでチャート上にラインを表示できます。
では、早速プログラムを見ていきましょう!
今回は終値の50期間単純移動平均をチャート上に表示することにします。
たったこれだけです。では、ポイントについてみていきます。
(1)overlay
まずはこのoverlayについてですが、今回はtrueにしておきます。
overlayはチャート上にラインを表示するのか、それともチャートとは別の画面に表示するのかを指定します。
文字で説明するより図を見た方がわかりやすいと思います。
overlay = false
overlay = true
(2)sma = sma(close,50)
ここでは、smaという変数に終値closeの50期間移動平均の値を格納しております。
この変数の名前はなんでもいいです。a = sma(close,50)とかでも問題ないです。
(3)plot(sma,title=”単純移動平均”,color=color.orange)
先ほど用意したsmaという変数をplot関数で表示しています。
7、まとめ
今回はやっとこさインジケーターをチャート上に表示するところまで来ました。
今回大事なポイントを以下にまとめます。
1、インジケーターとは数値そのものである
2、インジケーターを表示するということは、元となる数値を加工して表示すること
3、元となる数値はビルトイン変数にて取得できる
4、元となる数値は、ビルトイン関数にて加工できる
5、plot関数にてチャートに数値を表示する
これで、Pineスクリプトの基本となる、数値を加工してからインジケータとして表示するまでの流れを意識できたと思います。
あとは、この流れと同様の手順で「どんな値を使用するか」「どう加工するか」を使い分けることで様々なインジケーターを作成できます。この辺りは、各個人のセンスやひらめきによるものなので、まずは基本となるインジケーターにどんなのがあるかを知識として蓄えておくといいかもしれません。
では、次回の記事ではストラテジーの作成について記事にしていきます。
また次回の記事でお会いしましょう!
本記事を気に入っていただけたらブックマークお願いします!また、ツイッターもやってるのでフォローよろしくお願いいたします!
Twitter : makoto(@Makoto_beginner)
また、記事中で不明なことや間違い等ありましたら以下のコメント欄からコメントいただけると幸いです。
皆様のコメントをもとにどこよりもわかりやすいブログを目指していきます。
他のどのサイトより丁寧に説明いただいているのでとても分かりやすいです。
ありがとうございます!!
たこ様
いつもブログを読んでいただきありがとうございます。
そういったコメントをいただけるとは大変嬉しいです!
記事中でわからないことなどありましたらどんどんコメントしていただけますと幸いです。
今後ともよろしくお願いいたします。
ご返信ありがとうございます。
もし可能であれば以下について教えていただけないでしょうか。
①直前のゴールデンクロスから、ある条件(ヒゲより実体が長い等)が2回以上満たされればロングポディションを持つ、というストラテジーを組みたいのですがご存じでしょうか。
ゴールデンクロス後、1回目の条件達成ではエントリーせず、2回目以降(3回目もそれ以降もピラミッディングを許して)エントリーするというストラテジーを考えています。
②前回ロングポディションを持った時から、1本以上の陰線を挟むことをエントリーの条件に含めたいのですが、方法がわからず途方に暮れています。
たこ様
返信いただきありがとうございます。
複数条件を満たしてエントリーするロジックを再現したいということですね。
今後、記事にして回答させていただきます。
makoto様
ご返信ありがとうございました。
記事の掲載を楽しみにしております(^^)
どうぞよろしくお願いいたします。
たこ様
ご質問いただいた内容について本日記事を書きましたのでよろしければご覧ください。
https://yuru-sta.com/7-%e8%a4%87%e6%95%b0%e6%9d%a1%e4%bb%b6%e3%81%a7%e3%82%a8%e3%83%b3%e3%83%88%e3%83%aa%e3%83%bc%e3%81%99%e3%82%8b%e3%82%b9%e3%83%88%e3%83%a9%e3%83%86%e3%82%b8%e3%83%bc%e3%81%ae%e8%80%83%e3%81%88/
今のバージョンではta.smaになっているのでしょうか?
コメントいただきありがとうございます!
すみません、今のバージョンの勉強がまだ済んでいないので後日回答しますね!
まあ様コメントありがとうございます。
現在のバージョンで記述するには、おっしゃる通りta.smaとする必要があるようです!
今後ともよろしくお願いいたします。