Sponsored Links
Forループを使って単純移動平均(SMA)を実装する手順をまとめました。そもそもForループを使う必要はないのですが、練習のために。
移動平均は任意の幅の区間をずらしながら平均値を出したものです。
どこでループを使うかと言うと、区間内の値の合計を求めるのに使います。
PineでのForループの書式は2つあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 | // 1つ目の書き方 for counter = start to end stateemt // 2つ目の書き方 returnedVar = for counter = start to end statement // counter : カウンタ変数 // statement : カウンタの初期値 // end : カウンタの終了値 // stert,emt: ループする処理 // returnedVar : ループ終了後に返される値の格納先 |
2つ目の書式を使うと、Forループを抜けた時にブロック内の最後の式を評価した値がreturnedVarに格納されます。特に必要なければ、1つ目の書式で良いのかなと思います。
実際のコードはこんな感じになりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | //@version=2属性はifステートメントとforステートメントを使うのに必要です。 //@version=2 // study()は呼び出し必須の関数で、インジケータの名前やプロパティを設定します。 // overlayはチャート上にインジケータを重ねるか、重ねずにプロットするかを指定できます。 study("SMA", overlay=true) // SMAの期間。今回は20としました。 count = 20 // 合計した値を格納するための変数で、初期値には最新の値を入れておきます。 sum = close // 必要な期間のデータがあればSMAの計算を開始します。 // notは文字通り論理否定を表します。 // na()は渡した変数がNaNの場合はTrueを返します。 if (not(na(close[count-1]))) // close[1]からclose[19]までの値を足し合わせます。 // 変数の値を変更するには:=を使います。 for i = 1 to count-1 sum := sum + close[i] // 足し合わせた合計値を期間で割ってSMAを計算してplot()でグラフとしてプロットしてもらいます。 plot(sum/count) |
ところで、変数の初期化なり、値の変更なり変数の値を変更する場合には単純に=を使いたくなりますが、初期化には=を、初期化後の値の変更には:=を使います。
Sponsored Links