Trading Viewのエラー
目次
- 目次
- エラーについて
- はじめに
- スクリプト全体に対するエラー
- 「script must have one study() or strategy() function call」 エラー
- 「The script must have at least one output function call (e.g. plot, barcolor, etc.). 」エラー
- 「out of depth at index」 エラー
- 「loop is too long」 エラー
- 「script requests too many securities」 エラー
- 「Compiled script code is too long: xxxxx. The limit is 50000」エラー
- 一般的な構文エラー
- 参考サイト
エラーについて
本ページではTradingViewのエラー内容の説明内容を記載します。
いつも参考サイトをgoogle翻訳して活用しましたが、自身のメモとして記載してます。(参考サイトは最下参照)
素人記述ですので誤認等あれば指摘いただけるとうれしいです。
はじめに
エラーが生じる場合はPineScriptを保存した(コンパイルされた)時にコンソールログに赤色で表示されます。
通常「line ○:~」のようにエラーが発生している行を示してくれるため、その行、または直前の行にほぼ原因が存在するので、確認し修正しましょう。
たくさんのエラーが表示されるとPCを そっ閉じ・・・ したくなりますが、1つのエラーに起因し複数のエラーが出力されていることもありますので、落ち着いて一つ一つ対処していきましょう。
前述の通り一つのエラーが起因していることもあるため、複数エラーが発生した場合は最初(一番上)のエラーから徐々に対処していくのがお勧めです。
スクリプト全体に対するエラー
「script must have one study() or strategy() function call」 エラー
TradingViewではインジケータ自身の名前や設定を記述するためのstudy()関数とstrategy()関数があります。
このstudy()又はstrategy()はスクリプト内に一度だけしか記述できません。複数ある場合に出力されるエラーです。
「The script must have at least one output function call (e.g. plot, barcolor, etc.). 」エラー
スクリプトには、少なくとも最低一つの出力関数の呼び出しが必要になります。
plot(),line.new(),barcount() 等のアクションを起こさないスクリプトに対して出力するエラーです。
「plot(0)」でも構いませんので何かしら出力するようにしましょう。
「out of depth at index」 エラー
スクリプト内に用いる履歴データの数が足りない場合に生じるエラーです。
通常はTradingViewにて必要なデータ量を算出しますが、コードが複雑になると自動では調整されないようです。
その場合、study()内に「max_bars_back」引数を指定して解決することができます。
必要なバーの数を設定する方法です。具体的な書き方は以下参照。この場合100足分は強制的に読み込みを行います。
study (title = "WR_test_indicator" , overlay = true , max_bars_back = 100 )
「loop is too long」 エラー
スクリプトをフリーズさせないために、TradingViewはループのあるコードを実行できる時間を制限しています。スクリプトに時間がかかりすぎると、「ループが長すぎます」というエラーが表示されます。
自分の場合は、単純に抜けられないループ等で発生するエラーですが、
実コードにて処理が長すぎる場合は以下のような対策が考えられます。
- for文が長い場合はcontinue等を用いてスキップ等を追加する。
- コードの全文をforで回すのではなく、一部分のみをforで回す様にコードを変更する。
「script requests too many securities」 エラー
直訳は「スクリプトが要求する証券が多すぎる」
TradingViewではsecurity()関数により価格データをクラウド上からダウンロードして使うことができますが、security関数が多すぎると生じるエラーです。
具体的には最大40に設定されているようです。
無駄なsecurity関数が記述されていないか確認しましょう。記述が簡単なのでついつい増えてしまいます。
例えば、close-open 等を確認したい場合は
security(syminfo.tickerid, "D", close) - security(syminfo.tickerid, "D", open)
上の様に2回security関数を使うのではなく、
以下として、securty内で計算したデータをダウンロードすることでsecurityの数を減らすことができます。
security(syminfo.tickerid, "D", close - open)
「Compiled script code is too long: xxxxx. The limit is 50000」エラー
スクリプトが長すぎると発生するエラーです。
(おそらく)文字数が50000以下になるようにコードを工夫する必要があります。
データをコード内に保存しない限りはこんなに打つことはめったに無いと思いますが。(゚д゚; )
あと、 if文のネストを深くしすぎると「メモリが足りない」のようなエラーも出てました。次出たら調べてみます
一般的な構文エラー
「undeclared identifier」 エラー
(私が書いたプログラムでは)もっとも発生するエラーです。
直訳は「宣言されていない識別子」
TradingViewでは、ユーザが自由に変数と関数を定義することができますが、定義されていない変数名、関数名を参照した(呼び出した)際に発生するエラーです。
間違いとして
- 変数の定義忘れ。 しっかり、「=」にて定義しましょう。
- 変数の誤記。 正しい変数名に修正しましょう。
「syntax error at input」 エラー
こちらもよく見るエラーです。
TradingViewの構文規則に合致していない場合に生じるエラーです。
演算子の誤った使い方や、文字の欠落、余分な文字、誤ったインデントなどで発生します。
エラーが発生している箇所の構文について、ヘルプの構文と見比べて誤っているところがないか確認しましょう。
豆知識 : "ctrl"とマウスクリックで該当のヘルプを見ることができます。
- カッコが正しくクローズされているか。
- 演算子に間違いはないか。
("=>"は関数の定義、"<="は比較)
("="は変数定義、"=="は比較) - study()、strategy()の引数の順番は誤っていないか。
(最初に名称定義 「 study("name",overlay=true) 」もしくは"title"で指定。「study(title="name",overlay=true) 」 ) - インデントの数は間違っていないか。
「variable is already declared」 エラー
直訳は「変数は既に宣言されています」
TradingViewでは、変数は一度しか定義できません。
同じ変数を2回定義しようとすると、「変数は既に宣言されています」というエラーが表示されます。
変数を更新する場合は、「:=」を用いて上書きを示す必要があります。
value = open if open < close value := close
「no viable alternative at character」 エラー
直訳は「文字で実行可能な代替はありません」
直訳だとなんのことかさっぱりわかりませんね。
これは、PineScriptのコードに構文間違いがある場合に生じるエラーです。
例えば、以下のようなものです。
- 「.」(ドット)を書くべきところに「,」(カンマ)を書いた (逆もあり)
- 「)」(かっこ)を書くべきところに「}」(中かっこ)を書いた
- 行末に「;」(セミコロン)を入れている。(トレステと勘違い)
- 3項演算の時に「:」(コロン)を書くべきところに「;」(セミコロン)を書いた
「cannot assign expression of type」 エラー
各変数に定義した「型」と異なる「型」を入力しようとすると発生するエラーです。
例えば、数値を定義した型にtrue/falseの真偽値を入力しようとすることです。
入れ物が違うものに無理やり入れれませんよってことですかね。
PineScript側にて自動に「型」変換してくれる条件は以下となります。
変数の型 | 許容できる型 | 許容できない型 |
---|---|---|
整数(Integer) | Integers, Floats, na | Bool,Color |
浮動小数点数(Float) | Floats, Integers, na | Bool,Color |
真偽値(Bool(true/false)) | Bools, Floats, Integers, na | Color |
色(Color) | Colours ,na | Integers,Floats,Bool,Color |
「end of line without continuation」 エラー
コードのインデント(タブや空白)の間違いにより発生するエラーです。
TradingViewではインデント(タブや空白)が重要となります。
タブや空白の数により、関数の行がどこまでの範囲を含むのか、またfor文やif文の範囲はどこまでの行なのかを認識しています。
インデントに関して、まず、【 タブ1つ = 4つのスペース(半角) 】は同等であることを覚えてください。
TradingViewでは関数や、for文、if文を用いた際、タブ1つor4つのスペースでインデントすることで、それらの範囲内であることを指示できます。
if文の中に更にif文を記述する場合はインデントは2つ分必要になります。(タブ2つor8つのスペース)
また、コードの行が長くなり、複数行にわたる記述を行う場合は
【 タブ1つ = 4つのスペース(半角) 】に1つのスペースを付足す必要があります。5つのスペース分となります。
(本当は4つのスペースでなければ良いのですが、ばらばらだとコードが読みづらくなるので、上で覚えた方が良いかと。)
インデントの管理が大変そうに見えますが、PineScriptのエディタには、タブを複数使用した場合にインデント毎に垂直線が表示されるため、そこまで意識する必要はありません。
重要なのは2つで、
- 関数、for、if 等で範囲を指定する場合のインデントは【タブ1つor4つのスペース】
- 複数の行にわたる場合のインデントは【タブ1つor4つのスペース + 1つのスペース】
「mismatched input」 エラー
誤った構文にて記載されている場合に発生するエラーです。
"expecting ..."にて、記載忘れている文字等を予測で出力してくれます。
エラー例を下記します。
「mismatched input 'end of line without line continuation' expecting ')'」
「(」の数が「)」と合致しておらず、カッコがクローズしていない時。「mismatched input 'strategy.exit' expecting 'end of line without line continuation'」
if文を記載したにも関わらず、中身を記載しなかった時。(インデントを含んだ行が記述されない時)「mismatched input ')' expecting ']'」
"close[]" と書くべきところに"close[)"の様に記載した時。「mismatched input 'end of line without line continuation' expecting ':'」
三項演算子「?」 を使っているにもかかわらず 「:」以降(非成立時)が記載されていない時。
参考サイト
Trading Viewはじめました
目次
Trading Viewとは?
Trading Viewは、株式やFX・仮想通貨などの投資家のためのツールです。 ブラウザベースで使用することができ、特定のPCでなくとも使用することが可能です。 更にはスマホのアプリも提供されており外出先でも自宅と同様の環境を構築することが可能です。
こんな感じで、自分の好きなオシレータ等を入れることが出来ます。
自分がプログラムしたコードも入れれます。
更には他の人が公開しているインジケータも見ることが可能です。
Trading Viewの良いところ
自分はこれまでマネックスさんが提供するTrade Station(トレステ)を使用してきましたが、以下の3点でTradingStationに魅力を感じました。
- ブラウザベース
インストールするソフトではなく、ブラウザベースで提供されており、どこでも同じ環境で確認できる。 - スマホでの確認
上記の通りブラウザベースである為、PCのみではなくスマホでも同一環境で示すことが可能。 更にはアラート機能によりプッシュ通知を受け取ることが可能!?=>有料の機能っぽいです。 - 基本機能が無料
がっつり制限がありますが基本無料で使用することが出来ます。
有料版にも、段階があり徐々に制限が少なくなるようです。詳細は以下参照。
上記のように無料版だと機能制限はありますが、自作インジケータをチャート上で見れるだけでも活用するべきツールでしょう。
※トレステも基本的には無料で使用することができますが、先日の改変に伴い無料使用に条件が加わりました。
・過去1年間においてトレードステーションを通じた取引がない場合(約定日基準)
・月末残高(証券総合取引口座に預託されている日本円、MRF、国内上場有価証券および投資信託(外国籍投資信託を除く))が30万円に満たない場合
トレステの良いところ
上記までさんざんTrading Viewが素晴らしい!と記載していますが、トレステも負けてません!
- 全銘柄のバックテストが可能
標準機能では単一銘柄のみですが、アプリを自作すれば全銘柄でのバックテストが可能! - オフラインでも使用可能!
移動時のPC等でもインジケータの作成が可能。あらかじめ表示させたチャートであれば、ある程度は確認可能!
といってもメンテ多いけどね(・・;) - ファンダデータや外部データを扱える
TradingViewではファンダデータはもちろん、外部からデータを読み込む方法がありません。
トレステのファンダ情報やcsv等の外部データを使えるのは大きい。
いずれ、TradingViewにもその機能が追加されるとは思うが現時点では大きいメリット。 日本語のフォーラム
まだまだ小さいですが、日本語のフォーラムサイトがあり、わからないことを相談する場所があります。 トレビュもありますが、英語チャットが主で、日本語のチャットはあまり活発でない。。。(`・д´・; )ほかにも色々
トレステで使用するEasyLanguageは正直通常のプログラム言語と同じようにつかえ、やりたいと思うことはほぼほぼ作れます。
(簡単なところでいえば文字列の操作。他には外部プログラムとの連携等。。。)
まとめ
トレステ、TradingViewのどちらかを選ぶというわけではなく、どちらにも良いとこがあるので、使いやすいところだけを利用すれば良いでしょう。 白黒つけないことも大事です。
トレステとTradingViewのすみわけ(自分的)
ということで、自分の中では以下の様に使っていきます( ゚Д゚)ノ
トレステ
- インジケータの作成・検証
- 明日の銘柄選定
- ストラテジーの作成・検証(バックテスト含む)
TradingView
- トレステで抽出した監視銘柄を登録。
- 登録銘柄を外出先でチェック。(自作インジケータで)
おわりに
今後、インジケータで便利なのができたらゆるーくアップしていきたいなヾ(o゚ω゚o)ノ゙
一応紹介リンク貼っておきます。
下記から有料版に申し込んでいただくと双方に特典付きらしいです(´∀`)
今まで作ったもの
自分が使うためにいろいろ作ってきたプログラム。
頭を整理するために書いてみる。随時更新予定。
トレードで使う指標については他の方のインジケータを少しアレンジする程度で大概は使える。
(そういうのは省いてます。)
トレードの指標
- 酒田五法のバーを四角で囲うやつ 酒田は現在勉強中。まだ1種類だけ。今後順次拡大予定。
- 銘柄、日付のcsvデータからその後の推移(10日間)を表示してくれる
みっちゃん銘柄のcsvデータから取得し後日検証用(トレステレーダースクリーン) - 時価総額の水平ライン
- 信用残高、貸株、融資を表示
便利系
- 銘柄と日付と価格を入力して後から指定日付をチャートで参照できるアプリ
SNS等でつぶやかれた銘柄の勉強用 - 複数銘柄のバックテストアプリ
銘柄リストのバックテスト。合算の取引回数、勝率程度は表示できる。 - 複数銘柄のファンダデータグラフ化アプリ
銘柄リストからファンダデータを散布図にて表示
(上のバックテストアプリとの合作) - 株価と日付から合致する銘柄を検索インジケータ
SNSで株価だけわかる場合に合致する銘柄を検索。 - Yahooファイナンスから時系列データ取得してチャート記述(python)
- トレステのスキャン結果をtwitterに画像として投稿(python)
- twitterの特定垢のコメントを抽出(python)
- slackで文字入力すると家のスピーカから声で知らせてくるbot(python+razpi)
したいもの
- 注文用ツール
価格幅を入力すれば自動で指定金額分の購入を指値で発注できる。
トレーリングストップを自動注文。