FlexChart for WinForms
WinForms 株価チャート(財務チャート)
WinForms のチャートタイプ > WinForms 株価チャート(財務チャート)

WinForms ローソク足チャート

ローソク足チャートは、株の短期間の始値、終値、高値、安値をプロットする金融チャートです。チャートのローソク足は、胴体、上ヒゲ、下ヒゲから構成されます。 ローソク足チャートの胴体は、ある期間内の株の始値と終値を表し、胴体の上と下に伸びた上ヒゲと下ヒゲはその期間内の最高値と最安値を示します。このチャート 1 つにたくさんの情報が詰まっており、株価の動向を追跡するために使用されます。

WinForms HighLowOpenClose (HLOC) チャート

ローソク足チャートと同様に、HighLowOpenClose チャートHLOC チャートとも呼ばれる)も、指定した期間の株の高値、安値、始値、終値をプロットし、株価分析を行うために使用されます。ローソク足チャートとの違いは、HLOC チャートにはローソク足の「胴体」がないことだけです。

ローソク足チャート

HighLowOpenClose チャート

WinForms ローソク足チャート WinForms HighLowOpenClose チャート

WinForms ローソク足チャートまたは HLOC チャートの作成

FlexChart を使用してローソク足チャートまたは HLOC チャートを作成できます。それには、FlexChart クラスの ChartType プロパティを Candlestick または HighLowOpenClose に設定します。このプロパティは、C1.Chart 名前空間の ChartType 列挙に含まれる値を受け取ります。HLOC チャートのローソクまたはシンボルのサイズは、系列の SymbolSize プロパティを設定することによって変更できます。

FlexChart を使用してローソク足または HLOC チャートを作成するには

設計時

  1. フォームで FlexChart コントロールを右クリックして[プロパティ]ウィンドウを開きます。
  2. ChartType プロパティに移動して、その値を Candlestick または HighLowOpenClose に設定します。
  3. DataSource プロパティを使用してデータソースを設定します。
  4. BindingX および Binding プロパティを設定して、X 軸と Y 軸の値をそれぞれ構成します。

コードの使用

WinForms HLOC またはローソク足チャートをコードで作成するには、コントロールを初期化した後に、最初にデフォルトの系列をクリアし、Add メソッドを使用して新しい系列を追加します。DataSource プロパティを使用してデータソースを設定し、BindingX および Binding プロパティを設定して X 軸と Y 軸を構成します。また、ChartType などの必要なプロパティを使用して、チャートを設定する必要があります。

this.flexChart1.Series.Clear();

// データを取得します
var data = GetQuotes(350);

// FinancialChartのヘッダーを設定します 
this.flexChart1.Header.Content = "Daily Price Movement";

// チャートのX軸を「Date」にバインドして、日付が横軸に表示されるようにします
this.flexChart1.BindingX = "Date";
            
// ChartTypeをHighLowOpenCloseに設定して、FinancialChartに系列を作成します
var _sPrice = new Series
{
    Name = "Price",
    Binding = "High,Low,Open,Close",
    ChartType = ChartType.HighLowOpenClose,
};
this.flexChart1.Series.Add(_sPrice);

//// Y軸の最小値と最大値を設定します
var minPrice = data.Min((q) => q.Low);
var maxPrice = data.Max((q) => q.High);
this.flexChart1.AxisY.Min = minPrice - 10;
this.flexChart1.AxisY.Max = maxPrice + 10;

// X軸のラベルを書式設定します
this.flexChart1.AxisX.Format = "MMMM dd";

// データをFinancialChartに渡します
this.flexChart1.DataSource = data;
Me.flexChart1.Series.Clear()

' データを取得します
Dim data As List(Of Quote) = GetQuotes(350)

' FinancialChartのヘッダーを設定します 
Me.flexChart1.Header.Content = "Daily Price Movement"

' チャートのX軸を「Date」にバインドして、日付が横軸に表示されるようにします
Me.flexChart1.BindingX = "Date"

' ChartTypeをHighLowOpenCloseに設定して、FinancialChartに系列を作成します
Dim _sPrice As Series = New Series() With {
     .Name = "Price",
     .Binding = "High,Low,Open,Close",
     .ChartType = ChartType.HighLowOpenClose
}
Me.flexChart1.Series.Add(_sPrice)

'''/ Y軸の最小値と最大値を設定します
Dim minPrice As Double = data.Min(Function(q) q.Low)
Dim maxPrice As Double = data.Max(Function(q) q.High)
Me.flexChart1.AxisY.Min = minPrice - 10
Me.flexChart1.AxisY.Max = maxPrice + 10

' X軸のラベルを書式設定します
Me.flexChart1.AxisX.Format = "MMMM dd"

' データをFinancialChartに渡します
Me.flexChart1.DataSource = data

上記のサンプルコードは、GetQuotes という名前のカスタムメソッドを使用してチャートにデータを提供しています。要件に基づいてデータソースを設定できます。

    /// <summary>
    /// FinancialChartのデータを作成するメソッド
    /// </summary>
private static List<Quote> dt;
public static List<Quote> GetQuotes(int count = 365)
{
    var buildDir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
    var quotesPath = Path.Combine(buildDir, "Resources", "HistoricalQuotes.json");
    var text = File.ReadAllText(quotesPath);
    var jsonSerializer = new JavaScriptSerializer();
    dt = jsonSerializer.Deserialize<List<Quote>>(text);
    count = Math.Min(count, dt.Count);
    return dt.Take(count).ToList();
}
''' <summary>
''' FinancialChartのデータを作成するメソッド
''' </summary>
Private Shared dt As List(Of Quote)
Public Shared Function GetQuotes(Optional count As Integer = 365) As List(Of Quote)
    Dim buildDir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
    Dim quotesPath = Path.Combine(buildDir, "Resources", "HistoricalQuotes.json")
    Dim text = File.ReadAllText(quotesPath)
    Dim jsonSerializer = New JavaScriptSerializer()
    dt = jsonSerializer.Deserialize(Of List(Of Quote))(text)
    count = Math.Min(count, dt.Count)
    Return dt.Take(count).ToList()
End Function