pineスクリプト便利関数その1 all, any

Published: August 10, 2019

pine スクリプトの便利関数として、all、any を作りたいと思います。 (なぜ標準機能に無いのかが分からないようなものですが…)

all, any とは

all 関数、any 関数とは主に配列に対して適用する関数です。all 関数は、与えられた配列のすべての要素が条件を満たしている場合はtrueを返します。一方 any 関数は、与えられた配列のいずれか 1 つの要素が条件を満たしている場合にtrueを返します。 javascript ではArray.every, Array.some関数、python では(少し違いますが)all(),any()関数等、近年の関数型言語の流れを持つプログラミング言語には実装されていることが多い概念です。

これらall, any関数は、例えば「3 日以上移動平均線よりも終値が高い場合にインジケータを表示したい」等、特定の期間との判断に頻繁に利用する関数だと思います。

実装

以下の実装を、利用したい pine スクリプト内にコピーしてください。

all(conds, len) =>
    b = true
    for i = 0 to len - 1
        b := b and conds[i]
    b

any(conds, len) =>
    b = false
    for i = 0 to len - 1
        b := b or conds[i]
    b

使い方

今回は題材として、TradingView に内蔵されている「Consecutive Up/Down Strategy(連続アップ/ダウンストラテジー)」をこの all 関数を利用して実装してみたいと思います。

//@version=4
study("マイスクリプト", overlay=true)


all(conds, len) =>
    b = true
    for i = 0 to len - 1
        b := b and conds[i]
    b

any(conds, len) =>
    b = false
    for i = 0 to len - 1
        b := b or conds[i]
    b

// 3日間連続して終値の方が高い場合はlong
long = all(open <= close, 3)
short = all(open >= close, 3)

plotshape(long, style=shape.triangleup)
plotshape(short, style=shape.triangledown, color=color.red)

image

all 関数を利用することで、簡潔にわかりやすく実装することができました。

Tags

TradingView便利関数

share

Others