ちょっと土曜日早起きしたので、ブログ記事を・・。
TradingView記事です。
TradingViewのPineスクリプトですが、エラーが割合不親切です。謎現象でチャートが出ないとかあります。
とっかかりで、よくハマるポイントが、次の2点です。
・宣言式と代入式の違い。
・NaNの扱い
宣言式と代入式の違いは、ブログでも何回か書いていますね。
宣言式
abc = 0.0
代入式
abc := 0.0
と代入には:が必要です。
で、宣言式と書いているので、その行の次の行から左側で宣言された変数が有効になります。
abc = 0.0
//ここからabcが使える
def = abc
これは、たとえばemaの計算などで過去値を使えるのも次の行からとなります。
_ema = 0.2 * close + 0.8 * _ema[1]
実行するとこんな感じです。
この式をチャートに追加出来るようにするためには、次のように書く必要があります。
_ema = 0.0
_ema:= 0.2 * close + 0.8 * _ema[1]
さて・・・。これでも出る時はでるのですが、出ない時があります。
チャートに出ている以上にデータが存在しない場合、値がNaNという未定義を示す値になります。この値に何を掛け足ししてもNaNのままです。
上記の式の場合、最初の1個がNaNになる可能性があります。
そこで、NaN対策を打つ必要がでてきます。
NaN対策を打った計算式が次の通りです。
_ema:= 0.2 * close + 0.8 * nz(_ema[1])
nz関数は、値がNaNなら0を返すというものです。
この関数を入れておくと、正しく計算できるようになります。
0以外の値にしたい場合はna関数を利用します。
naは値がNaNならtrueを返す関数です。
na関数を利用した場合で、上の計算式と同じ結果となるには次のように書きます。
_ema := 0.2 * close + 0.8 * (na(_ema[1]) ? 0.0 : _ema[1])
本数が増えると大体影響がなくなりますが、たまに0以外にしたい場合もあるかと思います。(例えば割り算の分母になる場合)
_ema := 0.2 * close + 0.8 * (na(_ema[1]) ? close : _ema[1])
「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧
Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール
ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 |
お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。