2017年7月1日土曜日

[Trading View]NaNを気をつけよう

久しぶりです。

ちょっと土曜日早起きしたので、ブログ記事を・・。

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])

naを使うとNaNときに0以外に設定可能です。

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

2017年6月30日金曜日

[ハーモニック]複数通貨ハーモニック監視インジケータアップデートのお知らせ

複数通貨ハーモニック監視インジケータをバージョンアップしました。

V1.2
http://fx-on.com/ebooks/detail/?id=11763

修正点は次の通りです。

週足のハーモニックが表示されない件修正しました。
月足のハーモニックがどうしても表示出来ないため、設定から月足を一旦削除しました。

#追伸
客先作業が7末まで伸びました。
ブログ及びTwitterの反応がしばらくありません・・。

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

2017年6月6日火曜日

[Trading View]日付の頭からの差分を取りたい

■日本時間の頭から、Close値の差分を足していく

ちょっとコメントで、どうやってやりますか?と質問を受けたので、Sessionで日本時間の頭を判定して、そこからの終値の差分を足していくコードを書いてみました。
Trading Viewでは、最新バーから100本とかいうのは難しいですが、このように特定の区切りの頭からという形でなら作成可能です。

なお、引き続き仕事で反応鈍いです。色々申し訳ありません。

//@version=3
study("day diff")

//UTC-4 Sessions
_japan = input("2000-0200", "Japan Session", type=session)

japanSession = 0.0
if not na(time(period, _japan)) 
    japanSession :=  1

//Close値の差分を足していく1日は720分 1分足で最大720本遡る
diff = 0.0
for index = 0 to 720
    if japanSession[index + 1] == 0 and japanSession[index] == 1
        break
    diff := diff + abs(close[index] - close[index + 1])

plot(diff)

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。