今回新登場の log.*() 関数でPineスクリプト®のデバッグ作業のレベルアップを図りましょう。これはスクリプトの実行時に、新設の「Pineログ」のペインにテキスト表示を行うものです。以下のとおり、ログについての新しい関数が3つあります:
- log.error() は、赤で表示される「エラー」タイプのメッセージを生成します。
- log.info() は、グレーで表示される「情報」タイプのメッセージを生成します。
- log.warning() は、オレンジで表示される「警告」タイプのメッセージを生成します。
「Pineログ」を見るには、エディタの「詳細」メニューから「Pineログ」を選択します。あるいは、チャート上に読み込まれたスクリプトが log.*() 関数を使用している場合であれば、そのスクリプトの「詳細」メニューから「Pineログ」を選択します。
「Pineログ」は、ヒストリカルバー/リアルタイム/リプレイモードのいずれにおいても機能します。ログ関数は、ローカルブロック/ループ/request.security() などの関数の内部からの場合も含め、スクリプトがどのようなタイプ(インジケータ/ストラテジー/ライブラリ)であっても場所を問わず呼び出すことができます。ログ関数を呼び出す方法には、文字列の引数のみを使用する方法と、str.format() 方式で文字列をフォーマットして値のリストを使用する方法があります。
スクリプトでログを使用するには個人のスクリプトである必要があります。プライベートスクリプトあるいは公開スクリプトでは、log.*() 関数の呼び出しが含まれていてもログを生成することはできません。
下記のコード例では3つのログ関数が全て使用されています:
//@version=5 indicator("Pine Logs") if barstate.ishistory if bar_index % 100 == 0 log.warning("\nBar index: {0,number,#}", bar_index) else // Realtime bar processing. varip lastTime = timenow varip updateNo = 0 if barstate.isnew updateNo := 0 log.error("\nNew bar") else log.info("\nUpdate no: {0}\nclose: {1}\nSeconds elapsed: {2}", updateNo, close, (timenow - lastTime) / 1000) updateNo += 1 lastTime := timenow plot(timenow)
この例では、ヒストリカルバーの100本目ごとにオレンジ色の警告メッセージを使ってバーインデックスを表示します。リアルタイムでは新規バーが現れるたびに赤でエラーメッセージを表示し、リアルタイムでの更新が行われるたびに、更新番号/終値/直近のチャート更新からの経過時間を示す情報メッセージが灰色で作成されます。
以下の方法でPineログの動きを確認することができます:
- 上記のコード例を個人用スクリプトに保存して、動いているマーケットのチャートに追加する。
- エディタの「詳細」メニュー、もしくはチャート上のインジケーターの「詳細」メニューを使って「Pineログ」のペインを開く。
タイムスタンプは各ログエントリーの先頭に付けられます。ヒストリカルバーの場合はバーの開始時刻、リアルタイムのメッセージの場合は現在時刻になります。新しいメッセージはペインの下に追加表示されます。ヒストリカルバーの場合、表示されるのは直近の10,000件のメッセージに限られ、リアルタイムのメッセージがそのあとに追加されます。
ペインの上部にあるアイコンで、ログの開始/停止、開始日の指定、メッセージタイプによるログのフィルタリング、およびログの検索ができます。検索欄にはサブメニューがあり、大文字と小文字の一致、単語全体の一致、正規表現による検索が可能です。
ログメッセージ上にカーソルを置くと、そのメッセージを生成したソースコードを表示できるアイコンや、チャート上で対応するバーにジャンプできるアイコンが表示されます:
チャート上にログを使用しているスクリプトが複数存在する場合、それぞれのスクリプトごとに各々のメッセージを一つのセットとして管理します。「Pineログ」のペイン上部にあるドロップダウンを使って、各スクリプトのログに切り替えることができます:
Pine Script® の新機能についての最新情報は、ユーザーマニュアルのリリースノートでご覧になれます。 PineCodersアカウントでは、Telegramの Squawk Box、Twitterアカウント、そしてTradingViewのPineスクリプト® Q&A 公開チャットからも最新情報を発信しています。
ご要望が多かっただけに役立つ機能になると考えていますが、皆様にそう思っていただければ幸いです。プラットフォームをできるかぎり最善のものにしていくためにも、引き続きフィードバックやご提案をお寄せください。私たちは皆様のためにTradingViewを構築しています。ご意見をいつでもお待ちしております。
— チーム・トレーディングビュー