NinjaTraderのチャートデータ、OHLCV、インジケーター値をCSVに書き出す方法
NinjaTraderは、Data Managerを通じてOHLCVのバーデータを標準機能で書き出せます。銘柄を右クリックして書き出しを選ぶと、日付、時刻、始値、高値、安値、終値、出来高を含むセミコロン区切りのCSVが得られます。インジケーターの値はその書き出しに含まれません。インジケーターの値を取り出すには、値をファイルに出力するNinjaScriptのインジケーターを書く必要があります。2つの方法を順に説明します。
- NinjaTraderのData Managerは、OHLCVのバーデータをセミコロン区切りのCSVで書き出します。形式は日付と時刻、続いて始値、高値、安値、終値、出来高です。
- インジケーターの値は標準のOHLCV書き出しに含まれません。値をファイルに書き出すには、NinjaScriptの書き出し用インジケーターが必要です。
- OHLCVとインジケーターをまとめた出力にするには、バーデータの書き出しと並行してNinjaScriptの書き出しを実行し、出力を結合します。
NinjaTraderからOHLCVのバーデータを書き出す方法
NinjaTrader 8は、過去のバーデータを独自のローカルデータベースに保存しています。書き出すには、Control Centerを開き、Tools > Historical Data(バージョンによってはData Manager)に進み、書き出したい銘柄を右クリックして、Exportを選びます。日付範囲と時間足を選んで確定すると、NinjaTraderが選んだ出力フォルダにCSVを書き込みます。
書き出されたCSVは、初期設定ではカンマではなくセミコロンで区切られます。列の順序は、日中足ではDate;Time;Open;High;Low;Close;Volume、日足ではDate;Open;High;Low;Close;Volumeです。日付の形式はYYYYMMDD、時刻の形式はHHMMSSです。
OHLCVの書き出しは、その銘柄と時間足についてNinjaTraderがダウンロード済みの過去データすべてが対象です。さらに過去にさかのぼる履歴が必要なら、書き出す前に、プラットフォームの過去データのダウンロード機能で先に取得してください。
標準のNinjaTrader OHLCV書き出しに含まれないもの
Data ManagerのOHLCV書き出しに含まれるのは、バーデータだけです。そのバーから計算されたインジケーター値、作図オブジェクトや注釈のデータ、トレード履歴、セッション単位のメモは含まれません。
このファイルは、生の価格データの書き出しです。インジケーターの計算層はNinjaTraderの実行環境の中だけにあり、バーデータのファイルにはシリアライズされません。分析のワークフローが、価格と並んで特定のインジケーターの値を必要とする場合、OHLCVのみの書き出しではその情報を持ち出せません。
OHLCVとあわせて作図や注釈のデータを構造化して書き出す方法は、/resources/articles/ninjatrader-drawing-export をご覧ください。
| データの種類 | Data Managerの書き出しに含まれるか |
|---|---|
| 始値、高値、安値、終値(バーごと) | 含まれる |
| 出来高(バーごと) | 含まれる |
| 日付と時刻のタイムスタンプ | 含まれる |
| インジケーター値(EMA、RSI、VWAPなど) | 含まれない |
| 作図オブジェクトと注釈 | 含まれない |
| トレード履歴と約定 | 含まれない |
| セッション単位のメモ | 含まれない |
NinjaTraderの銘柄リストと限月:四半期ごとか毎月か
銘柄リストは、NinjaTrader Control CenterのTools、Instrument Listsにあります。リストは銘柄をまとめたもので、Strategy AnalyzerやMarket Analyzerを全銘柄に一度に実行したり、ほかのウィンドウにすばやく読み込んだりできます。
NinjaTraderの先物は、ES 12-26のように名前に満期が入っています。新しい限月がどのくらいの頻度で出るかは取引所が決めます。ESやNQなどのCME株価指数先物は四半期ごと(3月、6月、9月、12月)の限月で、原油(CL)は毎月限月があります。一般的な指数先物で、年1回だけ上場するものはありません。
限月がロールオーバー日に達すると、Tools、Database Managementで銘柄を次の限月に移します。NinjaTraderのヘルプガイドによると、ロールオーバーは開いているワークスペースのすべての銘柄リストとウィンドウで満期を更新し、変更を残すにはワークスペースを保存します。NinjaScriptのストラテジーは自動では次の限月に移りません。
書き出す前に、Tools、Options、Market dataのMerge Policyを確認しましょう。MergeBackAdjustedは各満期をロールオーバー日のオフセットつきで1つの連続した履歴につなげ、Do Not Mergeは1つの限月だけを保持します。あとでバーを照合できるよう、ファイル名に限月とマージ設定を入れておきましょう。
- 株価指数先物(ES、NQ):四半期ごと、3月、6月、9月、12月。
- 原油(CL):毎月新しい限月。
- Database Managementでのロールオーバーはすべての銘柄リストを更新します。ワークスペースを保存し直しましょう。
- 書き出す履歴が1つの限月か複数の限月かは、Merge Policyで決まります。
NinjaTraderからインジケーター値を書き出す方法
インジケーター値をCSVファイルに取り込むには、必要な値を計算し、バーが更新されるたびにファイルへ書き込むNinjaScriptのインジケーターを書きます。NinjaTraderのNinjaScript環境では、ファイル書き込み用にSystem.IOを使えます。
基本のパターンは次のとおりです。State.DataLoadedのOnStateChangeで、出力先のファイルパスに対してStreamWriterを開きます。OnBarUpdateでは、BarsInProgress == 0かつIsFirstTickOfBarのときに、現在のバーのDate、Time、インジケーター値をStreamWriterに書き込みます。State.TerminatedのOnStateChangeで、StreamWriterを閉じます。
StreamWriterを使う方法なら、NinjaTraderのライブラリにあるインジケーターでも、自分で書いたカスタムインジケーターでも、バーごとの記録が得られます。出力は区切り形式のテキストファイルで、Excelで開いたり、任意の分析ツールに取り込んだりできます。プラットフォームに依存しない書き出し方法は、/resources/articles/thinkorswim-to-csv-xlsx-annotations をご覧ください。
OHLCVとインジケーター値を1つのファイルにまとめる
OHLCVのバーとインジケーター値を組み合わせる方法は2つあります。1つ目は、各行にOHLCVの項目とインジケーター値を出力する、NinjaScriptの書き出し用インジケーターを1つ書く方法です。すべてが同じバーのタイムスタンプにそろうので、整合性が保てます。
2つ目は、Data ManagerからOHLCVを書き出し、インジケーター値は別にNinjaScriptで書き出して、共通のタイムスタンプを結合キーに、スプレッドシートやスクリプトで2つのファイルを結合する方法です。結合を正しく行うには、2つのファイルでタイムスタンプの形式がそろっている必要があります。
NinjaScriptで1つのファイルにまとめる方法は、分析しやすい反面、実装にNinjaScriptのスキルが必要です。結合する方法は、タイムスタンプの形式が合っていれば、独自のコードなしで実現できます。
NinjaTraderの書き出しの限界と、補うべき場面
NinjaTraderの書き出しワークフローは、Data ManagerからでもNinjaScriptからでも、バーごとのデータ抽出には信頼できます。ただし、生のOHLCV以外にはNinjaScriptの開発が必要です。開発者でない人にとって、インジケーター値の書き出しは大きな壁になります。
もう1つの限界は、注釈の持ち出しです。NinjaTraderで引いたチャートの作図、メモのテキスト、サポート・レジスタンスのレベルは、OHLCVの書き出しにもインジケーターの書き出しにも含まれません。チャートの文脈をバーデータと一緒に持ち出したいワークフローには、注釈を補う書き出しの層が必要です。
プラットフォームに依存しないその注釈の層については、/resources/articles/chart-annotation-export-for-trading-journal-xlsx-csv をご覧ください。インジケーター書き出しの方法をプラットフォーム横断で比べるには、/resources/articles/export-tradingview-indicator-values-csv をご覧ください。
よくある質問
- NinjaTraderは標準機能でインジケーター値をCSVに書き出せますか?
- いいえ。Data ManagerのOHLCV書き出しに含まれるのは、バーの価格と出来高のデータだけです。インジケーター値を書き出すには、バーが更新されるたびにSystem.IO.StreamWriterで値をファイルに書き込む、NinjaScriptのインジケーターを書く必要があります。
- NinjaTraderのチャートから、どんなOHLCVデータを書き出せますか?
- Data Managerを使うと、NinjaTraderがダウンロード済みのあらゆる銘柄と時間足について、日付、時刻、始値、高値、安値、終値、出来高を書き出せます。出力はセミコロン区切りのCSVです。日中足の書き出しには時刻の列がありますが、日足にはありません。
- NinjaTraderのチャートデータを外部で分析するには、どの方法が最適ですか?
- OHLCVのバーデータにはData Managerの書き出しを使います。インジケーター値には、バーごとのインジケーターの読み取り値をOHLCVの項目と一緒にファイルへ書き込む、NinjaScriptの書き出し用インジケーターを書きます。2つの書き出しを別々に使う場合は、タイムスタンプで出力を結合します。
- NinjaTraderのCSV書き出しの区切り文字は何ですか?
- NinjaTraderは、初期設定のCSV書き出しで、カンマではなくセミコロンを区切り文字に使います。ExcelやほかのツールにインポートするときはDelimiterにセミコロン(semicolon)を選んでください。カンマではありません。
- NinjaTraderの先物の限月は四半期ごとですか、毎月ですか?
- 取引所の上場の仕方によります。ESとNQは3月、6月、9月、12月の四半期ごと、CLは毎月です。NinjaTraderはES 12-26のように満期で名前を付け、Tools、Database Managementで銘柄リストを次の限月に移します。