機能
インジケータ
インジケータ
テクニカルインジケータは、元のデータセットに 1 つ以上の数式を適用して計算することにより派生したデータのセットです。
機能
チャートタイプ
ユーザー操作機能
分析機能
設定
説明
テクニカルインジケータは、元のデータセットに 1 つ以上の数式を適用して計算することにより派生したデータのセットです。テクニカルインジケータは、一般に資産の市場の方向を予測するために使用され、通常は元のデータと Y 軸のスケールが異なるため、別にプロットされます。
using FinancialChartExplorer.Models; using Microsoft.AspNetCore.Mvc; namespace FinancialChartExplorer.Controllers { public partial class HomeController : Controller { public ActionResult Indicators() { var model = BoxData.GetDataFromJson(); return View(model); } } }
@model List<FinanceData> @{ ViewBag.DemoSettings = true; var indicators = new List<AnalysisType> { new AnalysisType{Name = Home.Indicators_AnalysisTypeAtr, Abbreviation = "atr"}, new AnalysisType{Name = Home.Indicators_AnalysisTypeRsi, Abbreviation = "rsi" }, new AnalysisType{Name = Home.Indicators_AnalysisTypeCci, Abbreviation = "cci" }, new AnalysisType{Name = Home.Indicators_AnalysisTypeWilliamsR, Abbreviation = "williamsR" }, new AnalysisType{Name = Home.Indicators_AnalysisTypeMacd, Abbreviation = "macd" }, new AnalysisType{Name = Home.Indicators_AnalysisTypeStoch, Abbreviation = "stoch" } }; } <script type="text/javascript"> var indicatorAbbs = [@Html.Raw(string.Join(",", indicators.Select(idi => "'" + idi.Abbreviation + "'")))]; function showOption(indicator) { for (var i = 0; i < indicatorAbbs.length; i++) { toggleGroup(indicatorAbbs[i], indicatorAbbs[i] == indicator); } } function toggleGroup(indicator, shown) { var optGroup = wijmo.getElement('#' + indicator); if (optGroup) { if (shown) { optGroup.style.display = ''; } else { optGroup.style.display = 'none'; } } } function updateIndicatorType(combox) { var indicator = combox.selectedValue, index = combox.selectedIndex, indexes = []; if (index == 4) { indexes = [index, index + 1]; } else if (index == 5) { indexes.push(index + 1); } else { indexes.push(index); } showSeries(indexes); showOption(indicator); } function showSeries(indexes) { var chart = wijmo.Control.getControl('#indicator'); if (indexes == null || !indexes.length || !chart) { return; } for (var i = 0; i < chart.series.length; i++) { chart.series[i].visibility = (indexes.indexOf(i) != -1) ? wijmo.chart.SeriesVisibility.Visible : wijmo.chart.SeriesVisibility.Hidden; } } function updateATRPeriod(atrPDNumber) { var chart = wijmo.Control.getControl('#indicator'); if (!checkValue(atrPDNumber)) { return; } if (chart) { chart.series[0].period = atrPDNumber.value; } } function updateRSIPeriod(rsiPDNumber) { var chart = wijmo.Control.getControl('#indicator'); if (!checkValue(rsiPDNumber)) { return; } if (chart) { chart.series[1].period = rsiPDNumber.value; } } function updateCCIPeriod(cciPDNumber) { var chart = wijmo.Control.getControl('#indicator'); if (!checkValue(cciPDNumber)) { return; } if (chart) { chart.series[2].period = cciPDNumber.value; } } function updateWilliamsRPeriod(wrPDNumber) { var chart = wijmo.Control.getControl('#indicator'); if (!checkValue(wrPDNumber)) { return; } if (chart) { chart.series[3].period = wrPDNumber.value; } } function getDataLength(){ return @(Model.Count); } function isValidSmoothingPeriod(newValue) { var dataLength = getDataLength(), chart = wijmo.Control.getControl('#indicator'), max; if (dataLength <= 0 || !chart) { return false; } max = Math.max(chart.series[4].fastPeriod, chart.series[4].slowPeriod); return newValue >= 2 && newValue <= Math.abs(dataLength - max); } function isValidPeriod(newValue) { var dataLength = getDataLength(), chart = wijmo.Control.getControl('#indicator'), smoothing; if (dataLength <= 0 || !chart) { return false; } smoothing = chart.series[4].smoothingPeriod; return newValue >= 2 && newValue <= Math.abs(dataLength - smoothing); } function updateFastPeriod(macdFPNumber) { var chart = wijmo.Control.getControl('#indicator'), validPeriod = macdFPNumber.value; if (!isValidPeriod(validPeriod)) { return; } if (chart) { chart.series[4].fastPeriod = validPeriod; chart.series[5].fastPeriod = validPeriod; macdFPNumber.value = validPeriod; } } function updateSlowPeriod(macdSPNumber) { var chart = wijmo.Control.getControl('#indicator'), validPeriod = macdSPNumber.value; if (!isValidPeriod(validPeriod)) { return; } if (chart) { chart.series[4].slowPeriod = validPeriod; chart.series[5].slowPeriod = validPeriod; macdSPNumber.value = validPeriod; } } function updateSmoothingPeriod(macdSPNumber) { var chart = wijmo.Control.getControl('#indicator'), validPeriod = macdSPNumber.value; if (!isValidSmoothingPeriod(validPeriod)) { return; } if (chart) { chart.series[4].smoothingPeriod = validPeriod; chart.series[5].smoothingPeriod = validPeriod; macdSPNumber.value = validPeriod; } } function isValidKPeriod(newValue) { var dataLength = getDataLength(), chart = wijmo.Control.getControl('#indicator'), kMax, smoothingPeriod; if (dataLength <= 0 || !chart) { return false; } kMax = Math.abs(dataLength - chart.series[6].dPeriod); smoothingPeriod = chart.series[6].smoothingPeriod; if (smoothingPeriod > 1) { kMax -= smoothingPeriod; } return newValue >= 2 && newValue <= kMax; } function isValidDPeriod(newValue) { var dataLength = getDataLength(), chart = wijmo.Control.getControl('#indicator'), dMax, smoothingPeriod; if (dataLength <= 0 || !chart) { return false; } dMax = Math.abs(dataLength - chart.series[6].kPeriod); smoothingPeriod = chart.series[6].smoothingPeriod; if (smoothingPeriod > 1) { dMax -= smoothingPeriod; } return newValue >= 2 && newValue <= dMax; } function isValidStochSmoothingPeriod(newValue) { var dataLength = getDataLength(), chart = wijmo.Control.getControl('#indicator'), sMax; if (dataLength <= 0 || newValue <= 1) { return false; } sMax = Math.abs(dataLength - chart.series[6].kPeriod - chart.series[6].dPeriod); sMax = sMax || 1; return newValue >= 1 && newValue <= sMax; } function updateKPeriod(stochKPNumber) { var chart = wijmo.Control.getControl('#indicator'), validPeriod = stochKPNumber.value; if (!isValidKPeriod(validPeriod)) { return; } if (chart) { chart.series[6].kPeriod = validPeriod; stochKPNumber.value = validPeriod; } } function updateDPeriod(stochDPNumber) { var chart = wijmo.Control.getControl('#indicator'), validPeriod = stochDPNumber.value; if (!isValidDPeriod(validPeriod)) { return; } if (chart) { chart.series[6].dPeriod = validPeriod; stochDPNumber.value = validPeriod; } } function updateStochSmoothingPeriod(stochSPNumber) { var chart = wijmo.Control.getControl('#indicator'), validPeriod = stochSPNumber.value; if (!isValidStochSmoothingPeriod(validPeriod)) { return; } if (chart) { chart.series[6].smoothingPeriod = validPeriod; stochSPNumber.value = validPeriod; } } function checkValue(number) { return number.value >= number.min && number.value <= number.max; } c1.documentReady(function () { var combox = wijmo.Control.getControl('#indicatorSel'); if (combox) { combox.selectedIndex = 0; updateIndicatorType(combox); } }); function chartRendered(sender, args) { // set min/max for indicator chart to match main chart var indicatorChart = wijmo.Control.getControl('#indicator'), chart = wijmo.Control.getControl('#financeChart'); if (chart && indicatorChart) { indicatorChart.axisX.min = chart.axisX.actualMin; indicatorChart.axisX.max = chart.axisX.actualMax; } }; </script> <c1-financial-chart id="financeChart" binding-x="X" rendered="chartRendered" legend-position="Top"> <c1-items-source source-collection="@Model"></c1-items-source> <c1-financial-chart-series binding="Close" name="BOX"></c1-financial-chart-series> <c1-flex-chart-tooltip content="tooltip"></c1-flex-chart-tooltip> </c1-financial-chart> <c1-financial-chart id="indicator" height="200px" binding-x="X" rendered="chartRendered" legend-position="Bottom"> <c1-items-source source-collection="@Model"></c1-items-source> <c1-flex-chart-atr binding="High,Low,Open,Close" period="14" name="ATR"></c1-flex-chart-atr> <c1-flex-chart-rsi binding="Close" period="14" name="RSI"></c1-flex-chart-rsi> <c1-flex-chart-cci binding="High,Low,Open,Close" period="20" name="CCI"></c1-flex-chart-cci> <c1-flex-chart-williams-r binding="High,Low,Open,Close" period="14" name="Williams %R"></c1-flex-chart-williams-r> <c1-flex-chart-macd binding="Close" fast-period="12" slow-period="26" smoothing-period="9" name="MACD,Signal"> <c1-flex-chart-line-style c1-property="macdLine" stroke="#bfa554"></c1-flex-chart-line-style> <c1-flex-chart-line-style c1-property="signalLine" stroke="#bf8c54"></c1-flex-chart-line-style> </c1-flex-chart-macd> <c1-flex-chart-macd-histogram binding="Close" fast-period="12" slow-period="26" smoothing-period="9" name="MACD Histogram"></c1-flex-chart-macd-histogram> <c1-flex-chart-stochastic binding="High,Low,Open,Close" k-period="14" d-period="3" smoothing-period="1" name="%K,%D"> <c1-flex-chart-line-style c1-property="kLine" stroke="#eddd46"></c1-flex-chart-line-style> <c1-flex-chart-line-style c1-property="dLine" stroke="#edb747"></c1-flex-chart-line-style> </c1-flex-chart-stochastic> <c1-flex-chart-tooltip content="tooltip"></c1-flex-chart-tooltip> </c1-financial-chart> @section Settings{ <div class="panel-body"> <!-- Indicator Selector --> <ul class="list-inline"> <li> <label>@Html.Raw(Home.Indicators_IndicatorType)</label> <c1-combo-box id="indicatorSel" selected-value-path="Abbreviation" display-member-path="Name" selected-index-changed="updateIndicatorType" is-editable="false"> <c1-items-source source-collection="indicators"></c1-items-source> </c1-combo-box> </li> </ul> <!-- ATR Properties --> <ul class="list-inline" id="atr"> <li> <label>@Html.Raw(Home.Indicators_Period)</label> <c1-input-number min="2" step="1" format="n0" max="@(Model.Count-1)" value="14" value-changed="updateATRPeriod"></c1-input-number> </li> </ul> <!-- RSI Properties --> <ul class="list-inline" id="rsi"> <li> <label>@Html.Raw(Home.Indicators_Period)</label> <c1-input-number min="2" step="1" format="n0" max="@(Model.Count-1)" value="14" value-changed="updateRSIPeriod"></c1-input-number> </li> </ul> <!-- CCI Properties --> <ul class="list-inline" id="cci"> <li> <label>@Html.Raw(Home.Indicators_Period)</label> <c1-input-number min="2" step="1" format="n0" max="@(Model.Count-1)" value="20" value-changed="updateCCIPeriod"></c1-input-number> </li> </ul> <!-- Williams %R Properties --> <ul class="list-inline" id="williamsR"> <li> <label>@Html.Raw(Home.Indicators_Period)</label> <c1-input-number min="2" step="1" format="n0" max="@(Model.Count-1)" value="14" value-changed="updateWilliamsRPeriod"></c1-input-number> </li> </ul> <!-- MACD & MACD Histogram Properties --> <ul class="list-inline" id="macd"> <li> <label>@Html.Raw(Home.Indicators_FastPeriod)</label> <c1-input-number min="2" step="1" format="n0" max="@(Model.Count-1)" value="12" value-changed="updateFastPeriod"></c1-input-number> </li> <li> <label>@Html.Raw(Home.Indicators_SlowPeriod)</label> <c1-input-number min="2" step="1" format="n0" max="@(Model.Count-1)" value="26" value-changed="updateSlowPeriod"></c1-input-number> </li> <li> <label>@Html.Raw(Home.Indicators_SignalSmoothingPeriod)</label> <c1-input-number min="2" step="1" format="n0" max="@(Model.Count-1)" value="9" value-changed="updateSmoothingPeriod"></c1-input-number> </li> </ul> <!-- Fast Stochastic Properties --> <ul class="list-inline" id="stoch"> <li> <label>@Html.Raw(Home.Indicators_KPeriod)</label> <c1-input-number min="2" step="1" format="n0" max="@(Model.Count-1)" value="14" value-changed="updateKPeriod"></c1-input-number> </li> <li> <label>@Html.Raw(Home.Indicators_DPeriod)</label> <c1-input-number min="2" step="1" format="n0" max="@(Model.Count-1)" value="3" value-changed="updateDPeriod"></c1-input-number> </li> <li> <label>@Html.Raw(Home.Indicators_SmoothingPeriod)</label> <c1-input-number min="1" step="1" format="n0" max="@(Model.Count-1)" value="1" value-changed="updateStochSmoothingPeriod"></c1-input-number> </li> </ul> </div> } @section Description{ <p>@Html.Raw(Home.Indicators_Text0)</p> } @section Summary{ <p>@Html.Raw(Home.Indicators_Text1)</p> }