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ログの動きを確認することができます:

  1. 上記のコード例を個人用スクリプトに保存して、動いているマーケットのチャートに追加する。
  2. エディタの「詳細」メニュー、もしくはチャート上のインジケーターの「詳細」メニューを使って「Pineログ」のペインを開く。

タイムスタンプは各ログエントリーの先頭に付けられます。ヒストリカルバーの場合はバーの開始時刻、リアルタイムのメッセージの場合は現在時刻になります。新しいメッセージはペインの下に追加表示されます。ヒストリカルバーの場合、表示されるのは直近の10,000件のメッセージに限られ、リアルタイムのメッセージがそのあとに追加されます。

ペインの上部にあるアイコンで、ログの開始/停止、開始日の指定、メッセージタイプによるログのフィルタリング、およびログの検索ができます。検索欄にはサブメニューがあり、大文字と小文字の一致、単語全体の一致、正規表現による検索が可能です。

ログメッセージ上にカーソルを置くと、そのメッセージを生成したソースコードを表示できるアイコンや、チャート上で対応するバーにジャンプできるアイコンが表示されます:

チャート上にログを使用しているスクリプトが複数存在する場合、それぞれのスクリプトごとに各々のメッセージを一つのセットとして管理します。「Pineログ」のペイン上部にあるドロップダウンを使って、各スクリプトのログに切り替えることができます: