Lite script入門覚書

せっかくpine書けるのでついでにlite scriptも書けるようにしちまおうというやつです。
Lite scriptもやってみたいという人がいれば役に立つかもしれません。

前置き

こちらのnoteは前提としてTradingviewを使用したことがある人およびTrading lite月額プラン利用者の方を対象としています。
「全部無料で済ませたい!」という方は一部のtrading liteの機能を使用することはできますが、lite scriptを使用するエッジの大部分を放棄していることを念頭に購入をご検討ください。

有料部分ではメインで使用するであろうデータのざっくりとした説明、および練習問題を一緒に解いていくスタンスでコードの例を用意しています。

また、試験的に質問やユーザー同士で交流できる場としてDiscordコミュニティも用意しました。
質問はしたいけどDMはしづらい、他の仲間と琢磨してコードを書きたいなどがあればどうぞご利用ください。

Pine Scriptとの違い

Trading lite用であるlite scriptでできることと、Trading view用のpine scriptでできることは当然ながら違います。
一方でできてもう一方でできないことがあるのでその違いを理解し、pineでできることであればそちらでやってしまうのがおそらく学習難易度は低いでしょう。

Pine scriptでできてLite scriptでできないこと

・バックテスト機能(strategy)
・異なるチャートの使用(security)
・描画に関する関数の幅広さ(box,lineなど)

Lite scriptでできてPine scriptでできないこと

・OI情報(oi_) ※一部はPineでもsecurityを使用することで可能です
・清算情報(liq_)
・売買ごとの出来高(vol_)
・FR情報(funding)

Pine vs Lite総評

・他のチャートも利用したマルチな情報を一元化したい
・様々な描画方法でスタイリッシュなインジにしたい
という方向性であればPinescript

・現在見ている取引所についてより深く情報を探りたい
という方向性であればLitescript

「広く浅くはPine」「狭く深くはLite」という認識でだいたいOKです。

といっても、基本的な関数はLiteでも備えているため、初歩的なインジ程度はlite Scriptでも使えます。なのでテクニカル指標+αでより深く情報を探りたいのであればlite scriptでコミュニティにないインジを自作して移行するという手段でもアリでしょう。

インジの作成・追加手順

上の写真のように「Indicators」タブを開き、「Add new」→「Create NEW Litescript」を選択。
するとスクリプト編集画面が出てくるので、デフォルトで入っているコードを一旦全部消して任意のコードを記述。
「Save」を押すとインジ名とは別に保存用のタイトルを入れる項目が出てくるので、わかりやすいよう任意のタイトルを入力してから「Confirm」で保存されます。
また、「Add to chart」を押せば書いたコードがチャートに表示されます。

以下、有料部分でLite scriptの書き方および例文を並べていきます。

※一部のデータはTrading liteの月額プランを利用していなければ使用できないものがあります。
むしろこのnoteで一番必要な情報が月額プラン内に含まれているため、無料プランの場合はpine scriptを使用した方が良いことが大半だと思われます。

基礎知識

このnoteを読むにあたって必要な用語や初歩的な書き方を書いていきます。

コードの書き方

基本的には一行ごとに処理します。
Lite scriptの場合は

名前(変数名・定数名) = 定義 関数(引数)

という順で書いていきます。
また、数字以外の文字列(タイトルなど)は「" "」の中に記述します。

定数

固定の数値です。

const a = 10

であれば、定数である定義のconstの後にaという名前をつけ、= の後に10という数字を配置します。
このコード内では「aは10という固定の数値」として扱われることになります。

変数

計算などにより変化する数値です。

var b = sma(close,14)

であれば、終値の変化と共にSMAの値も変化します。
varは変数である定義、smaはSMAを計算する関数です。

引数

計算に使用するための数値です。

var b = sma(close,14)

関数のカッコ内にあるcloseと14が引数となっています。計算に使用する素材の数値です。関数によって引数で使用できる数値などが変わるため、リファレンスを読んで把握するようにしましょう。

関数

var b = sma(close,14)

上記のコードであればsmaが関数に該当します。
計算で使用する計算機の役割を果たします。
複雑な計算を一つにまとめたものですね。
lite scriptではTradin liteで提供されているデータを引数として使用することができます。

基本構成


例文①

//@version=1

study("test",overlay=true)
const ma_len = input("MA length",14)
var ma = sma(close,ma_len)
plot(ma)

①バージョン
②study( )
③関数
④plot

という構成はpineと大差ありません。
しかし、strategyやlineなどの関数がないためよりシンプルになっていたり、pineではオプション扱いだった関数が独立して存在しているなどの違いがあります。

構文で大きな違いは、それぞれの変数・定数名の頭に定義をしなければならないことでしょう。
基本的な変数に対応する定義はvar、定数の場合はconst、他にもpine scriptのvarに該当するglobalや条件文のifなどいくつかあります。

例文①はテクニカル指標において最も基本的なインジケーターである「単純移動平均線」を表示させるソースコードです。

では一度おさらいしてみましょう。

//@version=1

こちらはバージョン情報です。現在は1ですが、今後バージョンアップに伴い仕様が変更されるため注意しましょう。
特に理由がなければ必ずつけるようにしておくのが無難です。

study("test",overlay=true)

こちらはインジケーター自体の情報を記述します。
今回の例文ではタイトルが「test」、「overlay」はチャートのローソクに重ねるかどうかの判定です。オシレーター系やOIなどの情報を出すのであればfalseにしておけば別の枠で表示されます。

const ma_len = input("MA length",14)

ここから少しpineとの違いが出てきます。
pineは親切仕様なので勝手に定義の処理をしてくれますが、liteはそうではありません。
そのためconstで記述するものが定数であると宣言してから定数名を記述します。
inputで宣言した定数はインジケーターの設定画面から変更することができます。状況によって期間設定を変更したりする可能性がある場合はinputを使用するのがいいでしょう。
注意すべきは、lite scriptは一部のタイトルがつけれる変数名や定数名について「title=」というオプション名を入れれません。そのためタイトルがつく引数に関しては最初にタイトルを記入する必要があります。
例文では「"MA length"」がタイトルとなり、その後に定数の「14」が記述されています。

var ma = sma(close,ma_len)

こちらはSMAを出すための変数です。
変数であることを宣言する varの後に変数名のma、SMAの場合はsma関数があるため、これを使用します。
なので、日本語で表現するのであれば

maという名前の変数はcloseというデータをma_lenという数値でsma関数によって計算した結果です

ということになります。

plot(ma)

こちらは先に記述した「ma」を表示させる関数です。

plot以外にも、plotshapeやhistogramなど用途に応じた表示用の関数があるため目的に合ったものを使用するのがいいでしょう。
こちらはpineのように、plot関数内のstyleで定義するのではなく、独立してhistogram関数があるため注意が必要です。

Lite scriptで取得できるデータ

Lite scriptにはsecurity関数がありません。
そのため「現在見ている銘柄とは別の銘柄や取引所の情報」というものを引っ張ってくることができません。
そのため乖離を見たりするインジケーターを作成するのは骨が折れるでしょう。これらに関してはTrading viewに登録されている幅広いチャート情報を活用できるpine scriptに軍配が上がります。

その代わり、trading liteで取得できる情報はOHLCだけではなく、Trading viewよりも詳細である場合があります。その際はlite scriptならではのインジケーターを作成することが可能です。

各引数や関数の詳細はこちらから確認することができます。
「基本構成」の部分にある画像でもざっくりとは書いてあるので参考にしていただければ。

以下にlite scriptで取得できる情報をベースにしたデータを挙げていきます。

OI

OIはチャートのOHLCと同じく

oi_open
oi_high
oi_low
oi_close

という引数で使用できます。
これらの派生として

oi_ohlc4
oi_hlc3
oi_hl2

という引数も使用できますが、こちらは簡略化したものであるというだけなので、

var oi_ohlc4_cal = (oi_open+oi_high+oi_low+oi_close)/4

という計算などで算出しても変わりません。

それぞれの数値はplot関数で表示させることもできますが、ローソク足として表示させるのであればplotcandleを使用するのが良いでしょう。

やろうと思えばこの情報から計算することによってOIの平均足を作成することも可能です。データ的に有用かは疑問ですが。

Liquidation

lite scriptではLiquidation(清算情報)を取得することもできます。
しかし一部ではこの清算情報自体が不確かであるという話もあるので、使用する際は十分にその情報が正確であるかどうか確認の上で使用した方が良いでしょう。

清算情報は

liq_bid
liq_ask

の二種類があります。
これらは後述のbid/ask関連の引数との相性が良い可能性を秘めているかもしれません。

bid/ask

bidとaskについてはいくつかの引数があります

bid_sum
ask_sum
bid_highest
ask_highest
bid_spread
ask_spread

これらの関数を使用するには取引所のbid/askの意味を理解してから使用した方がいいでしょう。
スプレッドと清算を組み合わせることによって死人の度合いを視認しやすくなるかもしれません(激ウマギャグ)

volume

lite scriptの出来高はtrading viewと違い売りと買いの二つで分かれています。
そのため通常の出来高であるローソクあたりの出来高を出すのであれば、

var volume = vbuy+vsell

といった具合で計算する必要があります。

funding rate

なんと、FRもあります。
特にアルトコインなどではFRを見ているプレイヤーも多いため、これらの情報を取り入れられれば先読みをすることもしやすくなるでしょう。

fundingの引数は2種類です

funding
funding_predicted

fundingが現在のFR、predictedは予想FRです。

おまけにマーク価格は

mark_price

で引っ張ってくることが可能です。

データ総括

上記のデータがlite scriptで引っ張ってくることのできるデータの引数です。
これらを操ることによってローソク足だけでは賄えなかったこれまでにないエッジを生み出すことが可能になるでしょう。
また、Trading viewの強みである各取引所価格を横並びで取得できるメリットを生かせば、両刀使いでさらにその根拠は強まるかもしれません。

関数について

関数は基本的にはpine scriptに近いため、あまり多くは書きません。
強いて言うならば、テクニカルインジ関連の関数はEMA,SMA,RMA,MOM程度と、ほぼ最低限のレベルです。
そのためRSIやRCIなど一般的なインジケーターを使用したいのであれば、自作する必要があるでしょう。
通常の計算で使うようなsqrtやstdev、logなどは一通り揃っているため計算式さえわかっていればそこまで難儀するものではないはずです。

描画について

描画についての関数は

plot
plotcandle
histogram
plotshape
fill
bgcolor

があります。
いずれも変数名をつけることはできません。
fill関数はpine scriptではplotを先に書いてからそれを引数にしていましたが、lite scriptではそのまま変数を入れることが可能です。

plotはそのまま線として時間に沿った変数の変化を描画していきます。
plotcandleは4つの値をローソク足として描画します。
histgramは時間に沿った変数の変化をヒストグラム(棒グラフみたいなやつ)で描画します。出来高などの表示でよく見るアレです。
plotshapeは図を描画します。描画する図の詳細についてはリファレンスを参照してください。
fillは任意の二つの値の間を塗りつぶします。
bgcolorは背景を指定の色で塗りつぶします。

ちょっとだけ実践

それでは早速これまでの過程を踏まえていくつかの簡単なインジケーターを作ってみましょう。

①OI candle


OIをローソク状に表示させるインジケーターです。
おそらく月額プラン利用者であればデフォルトで表示できるのでわざわざ書く必要はありませんが、今回は勉強の意味も兼ねて一緒に書いてみましょう。

まずはバージョンの記述からです

//@version=1

ここまでは問題ないでしょう。次に進みましょう。

//@version=1

study("OI candle",overlay=false)

インジケーターのタイトルである「OI candle」と、表示方法の「overlay=false」を記述しました。いよいよコードらしいものを書き始めます。

//@version=1

study("OI candle",overlay=false)

var oi_o = oi_open
var oi_h = oi_high
var oi_l = oi_low
var oi_c = oi_close

今回はローソク足という形式にするため、必要なのはOIのOHLC、つまり始値(O)・高値(H)・安値(L)・終値(C)です。
なのでそれぞれに変数であることをvarで定義した後、oi_oからoi_cにかけて命名、イコールの後に何の変数であるかを記述します。
ここまで来ればもう一息です。

//@version=1

study("OI candle",overlay=false)

var oi_o = oi_open
var oi_h = oi_high
var oi_l = oi_low
var oi_c = oi_close

plotcandle(oi_o,oi_h,oi_l,oi_c)

最後にplotcandleによってローソク足という形で4つの情報を描画することができました。
plotcandleはTrading lite自体のローソク足のカラー情報を共有しているため、陽線か陰線かという定義付けをしなくてもカラー情報が自動的に反映されます。そのため色はTrading liteの設定の配色に依存します。

②Buy/Sell volume gap


今度は出来高を使用したインジケーターを作ってみます。
trading liteの出来高は売りと買いで分かれているため、これらを計算することによってどちらの出来高の方が立っているかの判別をすることができます。

それでは書いてみましょう。タイトルまではいつも通りです。

//@version=1

study("Buy/Sell volume gap",overlay=false)

ここまでは何回かコードを書いていれば無意識にできるようになっていることでしょう。次に進みます。

//@version=1

study("Buy/Sell volume gap",overlay=false)

var buy = vbuy
var sell = vsell

ここまでも先ほどのOI candleを理解すれば察しの良い人ならコードを見る前に書けていることでしょう。次に進みます。

//@version=1

study("Buy/Sell volume gap",overlay=false)

var buy = vbuy
var sell = vsell

var gap = buy-sell

ここで計算式の登場です。
今回表示するのは「買いと売り、どちらの出来高の方が立っているか」というものです。
つまり、「買い出来高-売り出来高」をすれば
「買い>売り」の場合は0以上に
「買い<売り」の場合は0以下に数値が行くことになります。
これによって0を基準としてどちらの出来高が大きいかを判別することができますね。
さて、次はいよいよ描画です。

//@version=1

study("Buy/Sell volume gap",overlay=false)

var buy = vbuy
var sell = vsell

var gap = buy-sell

histogram(gap,color=gap>0?color.green:color.red)

今回はplotよりも見やすさを重視しhistogramを使用しました。
色に関しては先ほどのplotcandleと違って色に関しての情報はTrading liteに依存しません。そのため自分で定義してあげる必要があります。
今回のコードでは三項条件文(xx?yy:zz)という構文を使用し、
「gapが0以上の場合は緑、それ以外では赤」と記述しました。

さらに学習したい場合

他の人のコードを参考にするのもいいでしょう。

上図のように、コミュニティインジの中には「{ }」のマークがついているものがあります。それをクリックし、「Source」タブを開くとソースコードを見ることができます。
インジを形にするのに迷った時、自分では思いつかなかったアイデアのインジを見かけた時は参考にしてみるとヒントになるかもしれません。

最後に

いかがでしたか?
プログラミングと聞くと少し小難しいイメージのせいで足踏みしてしまいそうですが、「どんな情報を」「どうやって計算して」「どうやったら見やすく表示するか」ということを順番に考えていけばある程度のことはできるようになります。
まだ未発展のスクリプトということもあり、限定的なことしかできない点は否めませんが、それでも覚える関数が増えるにつれてできることはどんどん増えていきます。

最初の部分でも触れましたが、pine scriptとlite scriptではそれぞれの得手/不得手がはっきりとしています。できることならばどちらか一方のみに固執せず、それぞれの長所を生かせるような立ち回りで利用するのがベストな判断だと私は思います。

最後に参考にした公式のリファレンスマニュアルおよびドキュメントを記載しておきます。

今回のnoteでは説明しなかった関数やそれに伴うコードの例なども書いてあるため、しっかり書けるようになりたい人は一読することをお勧めします。
英文のため苦手な人は翻訳ツールを使用するのもいいでしょう。

ここから先は

75字

¥ 4,980

この記事が気に入ったらサポートをしてみませんか?