演算子

From TradingView Wiki
Jump to: navigation, search
Language: English  • 日本語 • Русский

算術演算子 (+, -, *, /, %)

+
加算
-
減算
*
乗算
/
除算
 %
剰余

算術演算子はバイナリです。 結果のタイプはオペランドのタイプによって異なります。少なくとも1つのオペランドが系列である場合、その結果も系列になります。 両方のオペランドが数値であるけれど、少なくとも1つがfloat型の場合は、結果もfloat型になります 。 両方のオペランドが整数の場合、結果も整数型になります。

脚注: 少なくとも1つのオペランドがNaN'の場合、結果はNaNになります。

比較演算子 (<, <=, !=, ==, >, >=)

<
未満
<=
以下
 !=
等しくない
==
等しい
>
より大きい
>=
以上

比較操作はバイナリです。結果はオペランドの系列によって決まります。 オペランドの少なくとも1つに系列がある場合、結果の型もタイプ(一連の数値)になります。 両方のオペランドが数値型の場合、結果は論理型boolになります。

論理演算子 (not, and, or)

not
否定
and
論理積
or
論理和

すべての論理演算子は、boolオペランドか数値オペランド、または系列オペランドで扱えます。 算術演算子や比較演算子と同様に、オペランドの少なくとも1つに系列がある場合は、結果も系列型になります。 それ以外の場合、演算子の結果の型は論理型boolになります。

演算子は単項ではありません'。1つの演算子のオペランドがtrueの場合、結果はfalseになります。 オペランドがfalseの場合、結果はtrueとなります。

and 演算子の真偽値表:

a b a and b
true true true
true false false
false true false
false false false

or 演算子の真偽値表:

a b a or b
true true true
true false true
false true true
false false false

3項演算子 (?) とiff関数

3項演算子は、最初の式(条件)を評価し、2番目のオペランド(条件が true の場合)または3番目のオペランド(条件が false の場合)のいずれかの値を返します。

構文:

condition ? result1 : result2

条件が true の場合、result1 が評価され、そうでなければ result2 が評価されます。いくつかの条件演算子の組み合わせは、他言語のswitch文と同様の構造を構築するのに役立ちます。

例えば:

isintraday ? red : isdaily ? green : ismonthly ? blue : na

この例は次の順序で評価されます(括弧は与えられた式の処理順序を示します)。

isintraday ? red : (isdaily ? green : (ismonthly ? blue : na))

最初に 'isintraday' 'が評価されます。そしてそれが true の場合、結果は赤となります。false の場合は 'isdaily' が評価され、それが true ならば結果は緑になります。false であれば 'ismonthly' が評価されます。true の場合、結果は青となり、そうでなければけっかは naになります。?: 演算子が使いづらければ、Pineには 別の(同等の機能を持つ)組み込み関数 iff があります。この関数の構文は以下の通りです。

iff(condition, result1, result2)

この関数は演算子 ?: と同じように動作します。つまり、条件が true の場合は result1 を返し、それ以外の場合は result2 を返します。iff を使った場合の先ほどの例は次の様になります。

iff(isintraday, red, iff(isdaily, green,
                     iff(ismonthly, blue, na)))

履歴参照演算子 (角括弧 [])

[] 演算子で連続する任意の変数(前のバーの値)の履歴値を参照することができます。 例えば10個(仮想の10個のバーがあるチャートに対応する)の値を含む変数 close があるとします。

Index 0 1 2 3 4 5 6 7 8 9
close 15.25 15.46 15.35 15.03 15.02 14.80 15.01 12.87 12.53 12.43

演算子 [] に引数1、2、3を適用すると、次のベクトルが得られます。

Index 0 1 2 3 4 5 6 7 8 9
close[1] NaN 15.25 15.46 15.35 15.03 15.02 14.80 15.01 12.87 12.53
close[2] NaN NaN 15.25 15.46 15.35 15.03 15.02 14.80 15.01 12.87
close[3] NaN NaN NaN 15.25 15.46 15.35 15.03 15.02 14.80 15.01

ベクトルがシフトされると、特別な 'NaN 値がベクトルの末尾にプッシュされます。NaN は指定されたインデックスに基づく数値が存在しないことを意味します。10要素の行ベクトルに配置するのに空きがない右側の値は単純に削除されます。ベクトルの先頭の値は ポップ されます。この例では現在のバーのインデックスは9に等しくなります。

  • 現在のバーのベクトル 'close[1]' の値は、初期ベクトル 'close' の前の値と等しくなります
  • 'close[2]' の値は2つ前のバーの 'close'の値に等しくなります。

よって演算子 [] は履歴参照演算子と考えることができます。

脚注1. Pineのほとんどの標準ライブラリの組み込み関数は、関数 'sma' の様に一連の結果を返します。したがって演算子 [] を直接関数呼び出しに利用することができます。

sma(close, 10)[1]

脚注2. 演算子 [] が一連の結果を返すかどうかにかかわらず、この演算子を同じオペランドに何度も繰り返し適用することは禁じられています。

誤用の例を以下に示します。

close[1][2]        // Error: incorrect use of operator []

コンパイルエラーメッセージが表示されます。

状況によっては、系列を左にシフトさせたい場合があります。しかし演算子 [] の否定的な引数は禁止されています。これを実現するには、plot アノテーションの offset 引数を使用します。これは正の値と負の値の両方をサポートします。ただし注意すべきなのは、それはあくまで視覚的なシフトであり、全てが評価された後に適用されます。plot とその引数のさらなる詳細は、こちらを参照して下さい。

それ以外にもPineスクリプトで演算子 [] を使う時の重要な考慮すべき点があります。インジケーターは最も古いバーから最新のバーまで各バーの計算を実行します。さきほどの表に示すように、close[3] 最初の3つのバー値は NaN です。NaN は数値ではない値を表していて、それを何からの数式で使用すると結果は 'NaN になります。ですのであなたのコードでは NaN は関数naとnzを使ってはっきりとハンドリングすべきです。

演算子の優先順位

計算の順序は演算子の優先順位によって決まります。 より優先度の高い演算子が最初に計算されます。下記のリストは演算子の優先順位を低い方から並べたものです。

優先順位 演算子
9 []
8 + (単項)

- (単項)

not

7

*

/

%

6 +

-

5 >

<

>=

<=

4 ==

!=

3 and
2 or
1  ?:

1つの式に同じ優先順位を持つ複数の演算子がある場合は左から右に計算されます。

計算の順序を変更する必要がある場合は、式の一部を括弧でグループ化する必要があります。


前の項目: リテラル, 次の項目: 関数とアノテーション関数, メニューに戻る: Pineスクリプトチュートリアル