「東雲 忠太郎」の平凡な日常のできごと

「東雲 忠太郎」の平凡な日常のできごと

2024.03.18
XML
カテゴリ: C#.NET


ローソク足チャートは、金融市場の価格変動を視覚化するためによく使用されるグラフの一種です。以下に、C# WPFアプリケーションでローソク足チャートを描画するための基本的なサンプルコードを示します。このサンプルでは、WPFの`Canvas`要素を使用してグラフを描画します。


まず、`Candlestick`クラスを定義します。このクラスは、個々のローソク足を表します。


```csharp

public class Candlestick

{

    public DateTime Date { get; set; }

    public double Open { get; set; }

    public double High { get; set; }

    public double Low { get; set; }

    public double Close { get; set; }

}

```


次に、WPFアプリケーションの`MainWindow.xaml`ファイルを設定します。


```xml

<Window x:Class="CandlestickChart.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Title="Candlestick Chart" Width="800" Height="600">

    <Grid>

        <Canvas x:Name="canvas" Background="White"/>

    </Grid>

</Window>

```


最後に、`MainWindow.xaml.cs`でローソク足チャートを描画します。


```csharp

using System;

using System.Collections.Generic;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Media;


namespace CandlestickChart

{

    public partial class MainWindow : Window

    {

        private List<Candlestick> data;


        public MainWindow()

        {

            InitializeComponent();

            data = GetData(); // ダミーデータの取得

            DrawCandlestickChart();

        }


        private void DrawCandlestickChart()

        {

            double canvasWidth = canvas.ActualWidth;

            double canvasHeight = canvas.ActualHeight;


            double minX = 0;

            double minY = 0;

            double maxX = data.Count;

            double maxY = data[0].High;


            foreach (var candle in data)

            {

                maxY = Math.Max(maxY, candle.High);

                minY = Math.Min(minY, candle.Low);

            }


            double xRatio = canvasWidth / (maxX - minX);

            double yRatio = canvasHeight / (maxY - minY);


            for (int i = 0; i < data.Count; i++)

            {

                var candle = data[i];

                double x = (i + 0.5) * xRatio;

                double yHigh = (maxY - candle.High) * yRatio;

                double yLow = (maxY - candle.Low) * yRatio;

                double yOpen = (maxY - candle.Open) * yRatio;

                double yClose = (maxY - candle.Close) * yRatio;


                DrawLine(canvas, x, yHigh, x, yLow, Brushes.Black, 1); // ローソク足の縦線

                DrawRectangle(canvas, x - 5, yOpen, x + 5, yClose, candle.Open < candle.Close ? Brushes.Green : Brushes.Red); // ローソク足の矩形

            }

        }


        private void DrawLine(Canvas canvas, double x1, double y1, double x2, double y2, Brush color, double thickness)

        {

            Line line = new Line

            {

                X1 = x1,

                Y1 = y1,

                X2 = x2,

                Y2 = y2,

                Stroke = color,

                StrokeThickness = thickness

            };

            canvas.Children.Add(line);

        }


        private void DrawRectangle(Canvas canvas, double x1, double y1, double x2, double y2, Brush color)

        {

            Rectangle rectangle = new Rectangle

            {

                Width = Math.Abs(x2 - x1),

                Height = Math.Abs(y2 - y1),

                Fill = color

            };

            Canvas.SetLeft(rectangle, Math.Min(x1, x2));

            Canvas.SetTop(rectangle, Math.Min(y1, y2));

            canvas.Children.Add(rectangle);

        }


        private List<Candlestick> GetData()

        {

            // ダミーデータを返す

            List<Candlestick> dummyData = new List<Candlestick>();

            Random random = new Random();

            DateTime currentDate = DateTime.Today;

            for (int i = 0; i < 30; i++)

            {

                var candle = new Candlestick

                {

                    Date = currentDate.AddDays(i),

                    Open = random.Next(100, 200),

                    High = random.Next(200, 300),

                    Low = random.Next(50, 100),

                    Close = random.Next(100, 200)

                };

                dummyData.Add(candle);

            }

            return dummyData;

        }

    }

}

```


このサンプルでは、`DrawCandlestickChart`メソッドでローソク足チャートを描画します。`DrawLine`メソッドと`DrawRectangle`メソッドを使用して、線と矩形を描画します。


これで、C# WPFアプリケーションでローソク足チャートを描画するサンプルコードが完成しました。






お気に入りの記事を「いいね!」で応援しよう

Last updated  2024.03.18 07:14:42


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

© Rakuten Group, Inc.
X
Create a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: