マルチタイムフレーム


ver1.8.4.0よりカスタムインジケーター作成とストレタジーテスターは個人利用データ使用時のみ可能になりました。 FXCM配信データを使っている場合はご利用いただけません。

概要

あるチャートから異なる時間足のチャートのデータを取得することが可能です。

異なる通貨ペアのチャートのデータの取得も可能です。

異なる時間足のデータの取得

  • 初めに、同じ通貨ペアのチャートを2つ追加し、時間足を1時間足未満と1時間足にセットしてください。
  • 下記のインジケーターを1時間足未満のチャートに挿入してください。
ver1.8.5.0時点ではあらかじめ取得する時間足のチャートを手動で表示している必要があります。
export default (): ItemIndicator => {
    return {
        type: "i",
        name: "tutor.MultiTimeFameSample1",
        onInit() {
            const chart = this.chart; //1
            const chartManager = chart.chartManager; //2
            const charts = chartManager.charts; //3
            const h1Chart = //4
                charts.find(c => c !== chart && c.period === 60 * 60 && c.symbol.name === chart.symbol.name)
            if (!h1Chart) {
                throw new Error(`${chart.symbol.name}の1時間足チャートを事前に表示してください`)
            }
            this.onChartChange = ({ index, times, opens, highs, lows, closes, spreads }) => {//6
                const currentTime = times.get(index - 1);
                const { times: h1Times, opens: h1Opens, highs: h1Highs, lows: h1Lows, closes: h1Closes } = h1Chart,
                    h1Time = h1Times.getByTime(currentTime), //5
                    h1Open = h1Opens.getByTime(currentTime),
                    h1High = h1Highs.getByTime(currentTime),
                    h1Low = h1Lows.getByTime(currentTime),
                    h1Close = h1Closes.getByTime(currentTime);
                console.log(currentTime.toDateString(),//6
                    h1Time.toDateString(),//7
                    h1Open, h1High, h1Low, h1Close)
            }
        },
    }
}

               
1 インジケーターのchartプロパティでそのインジケーターが属しているchartオブジェクトへの参照を取得しています。
chartプロパティはストラテジーにも存在します。
2 chartオブジェクトのchartManagerプロパティでchartManagerオブジェクトへの参照を取得しています。 chartManagerオブジェクトは表示中のチャートの管理をしているオブジェクトです。
3 chartManagerオブジェクトのchartsプロパティで表示中のchartを格納した配列への参照を取得しています。
4 表示中のchartの中でデータを取得したいチャートを検索しています。
ここでは、同じシンボルを表示している1時間足のチャートを検索しています。
5 異なる時間足のインジケーターバッファーからデータを取得する場合、getByTextメソッドで日時を引数にわたします。
日時はTypeScriptのDateではなく、JSTraderで定義された整数です。
6 ここではコンソール出力をしているだけですが、実際には売買シグナルの判定などに利用してください
7 toDateStringメソッドは時刻を文字列にします。

取得したチャートにインジケーターを設定する

チャートは事前に表示しておく必要はありますが、インジケーターはコードで追加することができます。

export default (): ItemIndicator => {
    return {
        type: "i",
        name: "tutor.MultiTimeFameSample2",
        onInit() {
            const chart = this.chart;
            const chartManager = chart.chartManager;
            const charts = chartManager.charts;
            const h1Chart =
                charts.find(c => c !== chart && c.period === 60 * 60 && c.symbol.name === chart.symbol.name)
            if (!h1Chart) {
                throw new Error(`${chart.symbol.name}の1時間足チャートを事前に表示してください`)
            }
            const h1MainContainerIndicator = h1Chart.mainContainerIndicator //1
            const h1SmaIndi = h1MainContainerIndicator.addItemIndicator('builtin.SMA', { smaPeriod: 100 }) //2
            const h1MacdIndi = h1Chart.addContainerIndicator('builtin.MACD') //3
            this.onChartChange = ({ index, times, opens, highs, lows, closes, spreads }) => {
                const currentTime = times.get(index - 1);
                const { times: h1Times, opens: h1Opens, highs: h1Highs, lows: h1Lows, closes: h1Closes } = h1Chart,
                    h1Time = h1Times.getByTime(currentTime),
                    h1Open = h1Opens.getByTime(currentTime),
                    h1High = h1Highs.getByTime(currentTime),
                    h1Low = h1Lows.getByTime(currentTime),
                    h1Close = h1Closes.getByTime(currentTime);
                const h1Sma = h1SmaIndi.smaBuffer.getByTime(currentTime)//4
                const h1Macd = h1MacdIndi.macdBuffer.getByTime(currentTime)//5
                console.log(currentTime.toDateString(),
                    h1Time.toDateString(),
                    h1Open, h1High, h1Low, h1Close,
                    h1Sma, h1Macd
                )
            }
        },
        params: {}
    }
}
               
1 1時間足のchartのmainContainerIndicatorを取得しています。 mainContainerIndicatorとは初期表示されるローソク足チャートです。
2 1時間足のmainContainerIndicatorにSMAを挿入しています。
3 1時間足のchartにコンテナインジケーター(MACD)を挿入しています。
4 1時間足のSMAの値を取得しています
5 1時間足のMACDの値を取得しています