TradingViewのdatafeedクラス詳細

# 概要
TradingViewはサーバから情報を取得して、チャートデータを表示することができる。その時に利用するのが「datafeed」。
パラメータとしては、下記の用に指定する

```javascript:test.js
datafeed: new Datafeeds.UDFCompatibleDatafeed("https://demo_feed.tradingview.com")
```

第一引数はデータを取得するサーバのURL。第二引数はデータを更新するインターバルデフォルト10秒、省略可能。
ただ、独自データをリアルタイムで反映する際は、独自にJavaScriptでクラスを実装し。指定する必要がある。

```javascript:test.js
datafeed: new MyChartDataFeed("https://api.hogehoge.jp")
```


# 独自クラス実装方針
1. 参考となるクラス(UDFCompatibleDatafeed)がES5で記述されているが、ES6でも問題なく動作する。
2. 下記メソッドを必ず実装する。([メソッドの英語資料のリンク：要TradingView認証](https://github.com/tradingview/charting_library/wiki/JS-Api))。実装内容がわからなければ、Datafeeds.UDFCompatibleDatafeedの同名メソッドを参考にするといい

- onReady
- searchSymbolsByName
- resolveSymbol
- getBars
- subscribeBars
- unsubscribeBars
- calculateHistoryDepth
- getMarks
- getTimescaleMarks
- getServerTime

# メソッド詳細
## onReady
### 引数

| 名前       | 詳細    |
|:-----------------|:------------------|
| callback | 基本設定をセットするためのコールバック関数  |

### 説明
最初に実行される。
TradingViewで利用される全体設定をディクショナリ形式で指定して、コールバック変数を実行する。
setTimeoutを利用しないと警告がでるので注意。
[全体設定の具体的な中身](https://demo_feed.tradingview.com/config)

## searchSymbolsByName
### 引数

| 名前       | 詳細    |
|:-----------------|:------------------|
| userInput | ユーザが入力した文字列  |
| exchange | 取引所名  |
| symbolType | シンボル名称  |
| onResultReadyCallback | シンボル情報をセットするコールバック関数  |

### 補足
左上のシンボル(AAPLとか)を変更した時に実行される。
onResultReadyCallbackには配列形式で引数に対応するシンボル情報をセットすればいい。
データ形式は辞書型の配列。
[具体的な中身](https://github.com/tradingview/charting_library/wiki/JS-Api#searchsymbolsbynameuserinput-exchange-symboltype-onresultreadycallback)。

## resolveSymbol
### 引数

| 名前       | 詳細    |
|:-----------------|:------------------|
| symbolName | 設定されたシンボル名称  |
| onSymbolResolvedCallback | 正常処理時にシンボル情報を設定する  |
| onResolveErrorCallback | エラー発生時にエラーメッセージをセットする  |


### 補足
シンボルの設定に完了した時に実行される。
正常処理時にはonSymbolResolvedCallbackにシンボル情報をセットする。
異常発生時にはonResolveErrorCallbackにエラーメッセージをセットする
[シンボル情報の詳細](https://github.com/tradingview/charting_library/wiki/Symbology#symbolinfo-structure)。

## getBars
チャートを表示するためのデータを取得する時に実行される。
独自データを表示したい場合、サーバと非同期通信を行い、チャートデータを取得する必要がある。
### 引数

| 名前       | 詳細    |
|:-----------------|:------------------|
| symbolInfo | シンボル情報  |
| resolution | 日付単位。"D"とか"M"とか  |
| from | 欲しいデータの日付範囲開始時間(エポック)  |
| to | 欲しいデータの日付範囲終了時間(エポック) |
| onHistoryCallback | データをセットする関数 |
| onErrorCallback | エラーが発生した場合、引数にエラーメッセージをセットして実行する  |
| firstDataRequest | 一番最初のデータ読み込み時、trueが設定される |


## subscribeBars
シンボルが決定された時実行される。
独自データを表示したい場合、サーバと非同期通信を行い、チャートデータを取得する必要がある。
### 引数

| 名前       | 詳細    |
|:-----------------|:------------------|
| symbolInfo | シンボル情報  |
| resolution | 日付単位。"D"とか"M"とか  |
| onRealtimeCallback | リアルタイム情報表示時にデータを登録する関数 |
| listenerGUID | データを呼び出すときの一意のID |
| onResetCacheNeededCallback | ごめん、わからん |

## unsubscribeBars
シンボルが決定される前に実行される。
### 引数

| 名前       | 詳細    |
|:-----------------|:------------------|
| subscriberUID | データを呼び出すときの一意のID  |

## calculateHistoryDepth
getBars実行時、データを読み込む期間をカスタマイズしたい時に実装する。
不要な場合は関数だけ作成して未実装でもよい。
### 引数

| 名前       | 詳細    |
|:-----------------|:------------------|
| resolution | 指定した日付単位。"D"とか"M"とか  |
| resolutionBack | 呼び込む期間の単位。"D"とか"M"とか  |
| intervalBack | 実際に読み込む期間 |

## getMarks
チャート下部にマークを表示させたい時に実装する。
必要ない場合はコールバック関数に空の配列を渡して実行していればok

| 名前       | 詳細    |
|:-----------------|:------------------|
| symbolInfo | シンボル情報  |
| startDate | 開始日時  |
| endDate | 　終了日時 |
| onDataCallback | マーク表示情報設定関数 |
| resolution | 指定した日付単位。"D"とか"M"とか |

## getTimescaleMarks
チャートにマークを表示させたい時に実装する。
必要ない場合はコールバック関数に空の配列を渡して実行していればok

| 名前       | 詳細    |
|:-----------------|:------------------|
| symbolInfo | シンボル情報  |
| startDate | 開始日時  |
| endDate | 　終了日時 |
| onDataCallback | マーク表示情報設定関数 |
| resolution | 指定した日付単位。"D"とか"M"とか |

## getServerTime
サーバからの時間を取得する関数

| 名前       | 詳細    |
|:-----------------|:------------------|
| callback | サーバの時間を指定して実行する関数  |