チャート:カギ足チャート

カギ足チャートは、一連の垂直線を連結して、需要と供給のトレンドを示します。線の太さと方向は、株価の動きによって決まります。終値が直前の終値と同じ方向に進む場合は、そのカギ足ラインが延長されます。しかし、終値があらかじめ設定した反転幅以上に反転した場合は、次の列に、新しいカギ足ラインが反対方向に引かれます。細い線は、価格が直前の底値を下回ったこと(売り)を、太い線は、価格が直前の高値を上回ったこと(買い)を示します。

import 'bootstrap.css'; import '@mescius/wijmo.styles/wijmo.css'; import './styles.css'; import * as core from '@mescius/wijmo'; import * as input from '@mescius/wijmo.input'; import * as finance from '@mescius/wijmo.chart.finance'; import { getData } from './data'; // document.readyState === 'complete' ? init() : window.onload = init; // function init() { // create the chart let data = getData(); let theChart = new finance.FinancialChart('#theChart', { itemsSource: data, bindingX: 'date', chartType: 'Kagi', series: [ { binding: 'high,low,open,close', style: { stroke: 'rgb(136, 189, 230)' }, altStyle: { stroke: 'rgb(136, 189, 230)' }, name: 'Facebook' } ], options: { kagi: { reversalAmount: 1, rangeMode: 'Fixed', fields: 'Close' } }, legend: { position: 'None' }, tooltip: { content: function (ht) { var date = ht.item && ht.item.date ? ht.item.date : null, content = ''; if (core.isDate(date)) { date = core.Globalize.formatDate(date, 'd'); } if (ht && ht.item) { content = '<b>' + ht.name + '</b><br/>' + '日付: ' + date + '<br/>' + '始値: ' + core.Globalize.format(ht.item.open, 'n2') + '<br/>' + '高値: ' + core.Globalize.format(ht.item.high, 'n2') + '<br/>' + '安値: ' + core.Globalize.format(ht.item.low, 'n2') + '<br/>' + '終値: ' + core.Globalize.format(ht.item.close, 'n2') + '<br/>' + '出来高: ' + core.Globalize.format(ht.item.volume, 'n0'); } return content; } } }); // let revAmount = new input.InputNumber('#inputRevAmount', { step: 1, min: 0, value: 1, format: 'n0', valueChanged: function (sender) { if (sender == null || sender.value < sender.min) { return; } theChart.options.kagi.reversalAmount = sender.value; theChart.invalidate(); } }); // let rangeMode = new input.Menu('#selRangeMode', { selectedValue: 'Fixed', itemClicked: function (sender) { theChart.options.kagi.rangeMode = sender.selectedValue; var reversalInput = revAmount; if (sender.selectedValue === 'Percentage') { reversalInput.format = 'p0'; reversalInput.min = 0; reversalInput.max = 1; reversalInput.value = core.clamp(reversalInput.value, 0, .05); reversalInput.step = 0.05; } else if (sender.selectedValue === 'ATR') { reversalInput.format = 'n0'; reversalInput.min = 2; reversalInput.max = data.length - 2; reversalInput.value = core.clamp(reversalInput.value, 14, data.length - 2); reversalInput.step = 1; } else { reversalInput.format = 'n0'; reversalInput.min = 1; reversalInput.max = null; reversalInput.value = 1; reversalInput.step = 1; } updateMenuHeader(rangeMode, '範囲モード'); theChart.invalidate(); } }); updateMenuHeader(rangeMode, '範囲モード'); // let dataFields = new input.Menu('#selDataFields', { selectedValue: 'Close', itemClicked: function (sender) { theChart.options.kagi.fields = sender.selectedValue; updateMenuHeader(dataFields, 'データフィールド'); theChart.invalidate(); } }); updateMenuHeader(dataFields, 'データフィールド'); // let series = theChart.series[0]; let stroke = new input.InputColor('#inputStroke', { value: 'rgb(136, 189, 230)', valueChanged: function (sender) { let color = sender.value; series.style.stroke = color; theChart.invalidate(); } }); let altStroke = new input.InputColor('#inputAltStroke', { value: 'rgb(136, 189, 230)', valueChanged: function (sender) { let color = sender.value; series.altStyle.stroke = color; theChart.invalidate(); } }); } // show menu header and current value function updateMenuHeader(menu, header) { menu.header = header ? header + ': <b>' + menu.text + '</b>' : menu.text; }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>MESCIUS Wijmo FlexChart Kagi</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- SystemJS --> <script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.21.5/system.src.js" integrity="sha512-skZbMyvYdNoZfLmiGn5ii6KmklM82rYX2uWctB