自家製クオンツ

ソフトウェア技術を使って金融や投資の考察をしています。

MagicalNuts.Primitive

f:id:yooce:20211125212013p:plain

ひとりアドベントカレンダー3日目です。今日は、MagicalNutsで最も基礎的なパッケージMagicalNuts.Primitiveの、その中でも最も基本的なクラスであるCandleStockの解説をします。

Candle

Candleはロウソク足を表すクラスです。(解説に必要な箇所のみを抜粋しています。)

/// <summary>
/// ロウソク足を表します。
/// </summary>
public class Candle
{
    /// <summary>
    /// ロウソク足の開始日時
    /// </summary>
    public DateTime DateTime { get; set; }

    /// <summary>
    /// 始値
    /// </summary>
    public decimal Open { get; set; }

    /// <summary>
    /// 高値
    /// </summary>
    public decimal High { get; set; }

    /// <summary>
    /// 安値
    /// </summary>
    public decimal Low { get; set; }

    /// <summary>
    /// 終値
    /// </summary>
    public decimal Close { get; set; }

    /// <summary>
    /// 出来高
    /// </summary>
    public decimal Volume { get; set; }

    /// <summary>
    /// 売買代金
    /// </summary>
    public decimal TradingValue => Close * Volume;
}

いわゆるOHLCVで、これといって特筆すべきところはないと思いますが、1点だけ挙げるなら数値変数の型にdecimalを使用しているところです。

当初はdoubleを使っていたのですが、特に為替や米国株の株価を扱う際に、どうしても小数点以下の誤差が出てしまうことがあり、MagicalNutsでは基本的に小数を扱う際はdecimalで統一しています。decimaldoubleに比べてデータサイズが大きく、処理時間もかかると思いますが、数値の正確性を優先しました。

MagicalNutsの各種機能を使用する場合、このCandleの配列やリスト、後日解説するCandleCollectionやその派生クラスのインスタンスをご用意いただくことになります。

Stock

Stockは銘柄情報を表すクラスです。

/// <summary>
/// 銘柄情報を表します。
/// </summary>
public class Stock
{
    /// <summary>
    /// 銘柄コード
    /// </summary>
    public string Code { get; set; }

    /// <summary>
    /// 銘柄名
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    /// 単元数
    /// </summary>
    public int Unit { get; set; }

    /// <summary>
    /// 市場の種類
    /// </summary>
    public int MarketType { get; set; }
}

CodeNameは自明かもしれませんが、Code = "7203"Name = "トヨタ自動車"というように銘柄コードと銘柄名を入れます。NameはMagicalNuts内では特に使用していないのですが、MagicalNutsを使ったアプリケーションを実装する際にあった方が良いと思うので入れています。

単元数のUnit日本株で言えば100を入れます。ミニ株であれば、証券会社によって違うと思いますが101、米国株であれば1を入れておきます。

市場の種類MarketTypeは、米国など日本市場以外のマーケットを扱うことを想定して用意しましたが、日本株のみを扱う場合は0で良いですし、デフォルトでそうなります。