機能
フィボナッチツール
フィボナッチツール
フィボナッチツールは、株価チャートのトレンド分析に使用されます。
機能
チャートタイプ
ユーザー操作機能
分析機能
設定
説明
フィボナッチツールは、株価チャートのトレンド分析に使用されます。範囲セレクタを使用すると、計算対象のデータ範囲を選択できます。
using System.Collections.Generic;
using FinancialChartExplorer.Models;
using Microsoft.AspNetCore.Mvc;
namespace FinancialChartExplorer.Controllers
{
public partial class HomeController : Controller
{
public ActionResult FibonacciTool()
{
var model = BoxData.GetDataFromJson();
ViewBag.DemoSettingsModel = new ClientSettingsModel() { Settings = CreateFibonacciToolSettings() };
return View(model);
}
private static IDictionary<string, object[]> CreateFibonacciToolSettings()
{
var settings = new Dictionary<string, object[]>
{
{"Type", new object[]{"Arcs", "Fans", "Retracements", "Time Zones"}},
{"Uptrend", new object[]{"True","False"}},
{"Label Position", new object[]{"Bottom", "Center", "Left", "None", "Right", "Top"}},
{"Range Selector", new object[]{"False","True"}},
{"Start.X", new object[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"11", "12", "13", "14", "15", "20", "25", "30", "35", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "55", "60"}},
{"Start.Y", new object[]{"15.12", "15.75", "16.12", "16.75", "17.12", "17.75",
"18.12", "18.75", "19.12", "19.75", "20.12", "20.75", "21.12", "21.75", "22.12", "22.75", "23.12", "23.75", "24.12", "24.75", "25.12", "25.75"}},
{"End.X", new object[]{"30", "31", "32", "33", "34", "35", "36", "37", "38", "39",
"40", "45", "50", "51", "52", "53", "54", "55", "56", "57", "58", "60"}},
{"End.Y", new object[]{"15.10", "15.53", "16.10", "16.53", "17.10", "17.53",
"18.10", "18.53", "19.10", "19.53", "20.10", "20.53", "21.10", "21.53", "22.10", "22.53", "23.10", "23.53", "24.10", "24.53", "25.10", "25.53"}},
{"StartX", new object[]{"-10", "-5", "-4", "-3", "-2", "-1", "0", "1", "2", "3", "4", "5", "10"}},
{"EndX", new object[]{"-10", "-5", "-4", "-3", "-2", "-1", "0", "1", "2", "3", "4", "5", "10"}}
};
return settings;
}
}
}
@model List<FinanceData>
@{
ViewBag.DemoSettings = true;
ClientSettingsModel demoSettingsModel = ViewBag.DemoSettingsModel;
}
<script type="text/javascript">
var seriesIndex;
function hideOption(optionName) {
var eleMenu = wijmo.getElement('#' + optionName.replace('.', '_').replace(/ /g, ''));
if (eleMenu) {
eleMenu.style.display = 'none';
}
}
function showOption(optionName, value, allowedValues) {
var id = optionName.replace('.', '_').replace(/ /g, ''),
labelText = optionName.replace('.', ' '),
eleMenu = wijmo.getElement('#' + id), menu;
if (eleMenu) {
eleMenu.style.display = '';
}
if (typeof (value) !== 'undefined') {
menu = wijmo.Control.getControl('#' + id);
if (menu) {
menu.header = ' ' + labelText + ': ' + '<b>' + value + '</b>';
if (allowedValues && allowedValues.length > 0) {
var items = [];
allowedValues.forEach(function (item) {
items.push({ Header: item, CommandParameter: item });
});
menu.itemsSource = items;
}
}
}
}
function showSeries(chart, index) {
for (var i = 1; i < chart.series.length; i++) {
chart.series[i].visibility = (i == index) ? wijmo.chart.SeriesVisibility.Visible : wijmo.chart.SeriesVisibility.Hidden;
}
}
function updateType(chart, value) {
if (value !== 'Retracements') customChangeRangeSelector(chart, 'False');
var series;
switch (value) {
case 'Arcs':
seriesIndex = 2;
series = chart.series[seriesIndex];
showOption('Label Position', wijmo.chart.LabelPosition[series.labelPosition], ['Top', 'Center', 'Bottom', 'None']);
showOption('Start.X', series.start.x);
showOption('Start.Y', series.start.y);
showOption('End.X', series.end.x);
showOption('End.Y', series.end.y);
hideOption('StartX');
hideOption('EndX');
hideOption('Range Selector');
hideOption('Uptrend');
showSeries(chart, seriesIndex);
break;
case 'Fans':
seriesIndex = 3;
series = chart.series[seriesIndex];
showOption('Label Position', wijmo.chart.LabelPosition[series.labelPosition], ['Top', 'Center', 'Bottom', 'None']);
showOption('Start.X', series.start.x);
showOption('Start.Y', series.start.y);
showOption('End.X', series.end.x);
showOption('End.Y', series.end.y);
hideOption('StartX');
hideOption('EndX');
hideOption('Range Selector');
hideOption('Uptrend');
showSeries(chart, seriesIndex);
break;
case 'Retracements':
seriesIndex = 1;
series = chart.series[seriesIndex];
rs = c1.getExtender(chart, 'RangeSelector'),
showOption('Label Position', wijmo.chart.LabelPosition[series.labelPosition], ['Left', 'Center', 'Right', 'None']);
showOption('Uptrend', series.uptrend ? 'True' : 'False');
showOption('Range Selector', rs.isVisible ? 'True' : 'False');
hideOption('Start.X');
hideOption('Start.Y');
hideOption('End.X');
hideOption('End.Y');
hideOption('StartX');
hideOption('EndX');
showSeries(chart, seriesIndex);
break;
case 'Time Zones':
seriesIndex = 4;
series = chart.series[seriesIndex];
showOption('Label Position', wijmo.chart.LabelPosition[series.labelPosition], ['Left', 'Center', 'Right', 'None']);
showOption('StartX', series.startX);
showOption('EndX', series.endX);
hideOption('Start.X');
hideOption('Start.Y');
hideOption('End.X');
hideOption('End.Y');
hideOption('Range Selector');
hideOption('Uptrend');
showSeries(chart, seriesIndex);
break;
}
}
function rangeChanged(sender, args) {
var chart = wijmo.Control.getControl('#' + '@(demoSettingsModel.ControlId)'),
rs = c1.getExtender(chart, 'RangeSelector');
if (!chart || !rs) {
return;
}
chart.beginUpdate();
chart.series[1].minX = rs.min;
chart.series[1].maxX = rs.max;
chart.endUpdate();
}
function customChangeUptrend(control, value) {
var series = control.series[seriesIndex];
if (series) {
series.uptrend = (value === 'True');
}
}
function customChangeLabelPosition(control, value) {
var series = control.series[seriesIndex];
if (series) {
series.labelPosition = wijmo.chart.LabelPosition[value];
}
}
function customChangeRangeSelector(control, value) {
var rs = c1.getExtender(control, 'RangeSelector');
if (rs) {
rs.isVisible = (value === 'True');
}
}
function customChangeStart_X(control, value) {
var series = control.series[seriesIndex];
if (series) {
series.start = new wijmo.chart.DataPoint(parseFloat(value), series.start.y);
}
}
function customChangeStart_Y(control, value) {
var series = control.series[seriesIndex];
if (series) {
series.start = new wijmo.chart.DataPoint(series.start.x, parseFloat(value));
}
}
function customChangeEnd_X(control, value) {
var series = control.series[seriesIndex];
if (series) {
series.end = new wijmo.chart.DataPoint(parseFloat(value), series.end.y);
}
}
function customChangeEnd_Y(control, value) {
var series = control.series[seriesIndex];
if (series) {
series.end = new wijmo.chart.DataPoint(series.end.x, parseFloat(value));
}
}
function customChangeStartX(control, value) {
var series = control.series[seriesIndex];
if (series) {
series.startX = parseFloat(value);
}
}
function customChangeEndX(control, value) {
var series = control.series[seriesIndex];
if (series) {
series.endX = parseFloat(value);
}
}
c1.documentReady(function () {
var chart = wijmo.Control.getControl('#' + '@(demoSettingsModel.ControlId)');
if (chart) {
updateType(chart, 'Arcs');
}
});
</script>
<c1-financial-chart id="@demoSettingsModel.ControlId" symbol-size="6"
binding-x="X" chart-type="Candlestick">
<c1-items-source source-collection="@Model"></c1-items-source>
<c1-financial-chart-series binding="High,Low,Open,Close" name="BOX"></c1-financial-chart-series>
<c1-flex-chart-fibonacci binding="Close" uptrend="true" label-position="Left"></c1-flex-chart-fibonacci>
<c1-flex-chart-fibonacci-arcs binding="Close" start="new DataPoint(46, 19.75)" end="new DataPoint(54, 17.10)" label-position="Top"></c1-flex-chart-fibonacci-arcs>
<c1-flex-chart-fibonacci-fans binding="Close" start="new DataPoint(10, 18.12)" end="new DataPoint(32, 20.53)" label-position="Top"></c1-flex-chart-fibonacci-fans>
<c1-flex-chart-fibonacci-time-zones binding="Close" start-x="0" end-x="3"></c1-flex-chart-fibonacci-time-zones>
<c1-range-selector id="RangeSelector" seamless="true" is-visible="false" range-changed="rangeChanged"></c1-range-selector>
</c1-financial-chart>
@section Description{
<p>@Html.Raw(Home.FibonacciTool_Text0)</p>
}
@section Summary{
<p>@Html.Raw(Home.FibonacciTool_Text1)</p>
}