Pineスクリプトにおける「if文」の構造
if文とは指定した条件を満たしたときに特定の処理を実行し、if文を使うことでより複雑なコードを作成することができます。
以下はif文の処理構造を図にしたものです。if文の条件分岐は理論式で書き、条件がTrueの場合処理Aを実行し、Falseの場合は処理Bを実行します。elseは省略することも可能ですし、elseを複数追加することも可能です。
「if文」を使ったインジケーターの書き方|変数に代入する
if文のコードは以下のように書きます。
//if文の書き方1
変数 = if 条件式1
条件1を満たした時の処理1
戻り値
インデント入れずにステートメント(if文が終了)
「変数 = if 条件式 」を書き、改行して結果がTrueの場合に実行する処理Aを記述します。処理コードは複数行書くことができます。処理と戻り値を書くときは先頭に半角スペース4つのインデントを入れる必要があります。インデントを入れずに次のステートメントを書くとif文が終了します。
if文を使って変数に値を代入する記述例
実際にif文を使ってPineスクリプトのコードを書いてみましょう。
ストラテジーではなく、インジケーターを作成するstudyで書いてみます。
以下コードでは、終値>始値の場合は終値を変数xに代入、それ以外の場合は始値を変数xに代入します。変数xの値をチャート下に青色でラインを表示させます。
//@version=4
study(title="if", overlay=false)
//if文を使って変数に値を代入する記述例
x = if close > open
close
else
open
plot(x, color=color.blue)
「if文」を使ったストラテジーの書き方|エントリー条件を決定する
ストラテジーを作成するとき、if文を使えば複雑なエントリー条件を指定することもできます。
先ほどはif文を使って変数に値を代入しましたが、以下のコードではif文でエントリー条件を指定した例です。
//if文の書き方2
if 条件式1
条件1を満たした時の処理1
インデント入れずにステートメント(if文が終了)
if文を使って指定した条件(ポジショニング条件)に当てはまる場合、エントリー実行を指定しています。
//@version=4
strategy("ifストラテジー", overlay=true)
//ポジショニング条件
LongCondition = crossover(sma(close, 14), sma(close, 28)) //SMA14がSMA28を上抜け
ShortCondition = crossunder(sma(close, 14), sma(close, 28)) //SMA14がSMA28を下抜け
//エントリー条件
//LongConditionの条件に当てはまる場合、longでエントリー実行
//ShortConditionの条件に当てはまる場合、shortでエントリー実行
if (LongCondition)
strategy.entry("My Long Entry Id", strategy.long)
if (ShortCondition)
strategy.entry("My Short Entry Id", strategy.short)
//エグジット条件
strategy.exit("My Long Exit Id", "My Long Entry Id", profit=1000, loss=500)
strategy.exit("My Short Exit Id", "My Short Entry Id", profit=1000, loss=500)
iff関数を使ってif文を一行で書く
ifを使って条件分岐をする場合はelseを書き、改行する必要があります。
iffを使うとこれらを一行で書くことができます。iffを使ったコードは以下のように書きます。
iff(条件, 処理(戻り値), else)
else分岐が必要ない場合はnaを入力します。
先ほど紹介した「if文を使って変数の値を代入する記述例」をiffで書き換えると以下のようになります。
//@version=4
study(title="iff", overlay=false)
//iff文を使って変数に値を代入する記述例
x = iff(close > open, close, open)
plot(x, color=color.lime)
使うコードが短い場合、iffを使ったほうが簡単に書けますね。逆にコードが長くなる場合、読みにくくなってしまうためifを使ったほうが良いと思います。
iffと三項条件演算子の使い方は同じ
三項条件演算子はiffと全く同じ機能を持ちます。三項条件演算子は以下のように書きます。
//条件がtrueなら処理を実行し、Falseならelseを実行する。
(条件? 処理(戻り値): else)
else分岐が必要ない場合はnaを入力します。
先ほどiffで書いたコードを三項条件演算子で書き換えてみます。
//@version=4
study(title="三項条件演算子", overlay=false)
//三項条件演算子を使って変数に値を代入する記述例
x = (close > open? close: open)
plot(x, color=color.lime)
iffを使うよりもわずかに効率的です。機能的には全く一緒なのでどちらを使うかは好みによります。
また、else部分に?:を追加して、さらに複雑な条件を書くこともできます。
//?:を複数使う
(条件1? 処理1(戻り値): 条件2? 処理2(戻り値): 条件3?処理3(戻り値): else)
今回はifを使ったコードの書き方を解説しました。ifはPineスクリプトでコードを書く上で必須の関数になるので、処理構造、書き方をしっかり理解しましょう。
トレーディングビューのアカウントを作成する
Trading View
本記事で使用しているトレーディングビューはPineスクリプトでバックテストを行う以外にも、自分のオリジナルインジケーターを作成したり、世界中のトレーダーが作成したオリジナルのインジケーターを使うことも可能です。
FX、株、ETF、コモディティなど国内外問わず様々な銘柄に対応しています。アカンウントを持っていない方は以下リンクから作成することができます。
コメント