package simplex.bn25.makino335926.trading.Position;

import simplex.bn25.makino335926.trading.TradeRegisterAndDisplay.Trade;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

// クラス: PositionCalculator(保有ポジションの算出ロジックを実装するクラス)
public class PositionCalculator {

/**
 * メソッド: calculatePositions
 * 取引データから各銘柄の保有数量を計算する。
 * 
 * @param trades List<Trade> 取引データのリスト
 * @return Map<String, Long> 各銘柄コードに対応する保有数量
 */
public static Map<String, Long> calculatePositions(List<Trade> trades) {
    // 保有数量を管理するMapを初期化
    Map<String, Long> positions = new HashMap<>();

    // 取引リストを順次処理
    for (Trade trade : trades) {
        String ticker = trade.ticker(); // 銘柄コード
        // 売買区分に応じて数量を加算(買いはプラス、売りはマイナス)
        long quantity = trade.side().equals("BUY") ? trade.quantity() : -trade.quantity();

        // 現在の保有数量に追加
        positions.put(ticker, positions.getOrDefault(ticker, 0L) + quantity);
    }

    return positions; // 計算結果を返す
}

}

package simplex.bn25.makino335926.trading.Position;

import simplex.bn25.makino335926.trading.TradeRegisterAndDisplay.CsvReader;
import simplex.bn25.makino335926.trading.TradeRegisterAndDisplay.Trade;

import java.util.List;
import java.util.Map;

// クラス: DisplayPosition(保有ポジションを表形式で表示するクラス)
public class DisplayPosition {

/**
 * メソッド: displayPosition
 * 取引データから保有ポジションを計算し、表形式で表示する。
 */
public static void displayPosition() {
    // CSVファイルから取引データを読み込み
    List<Trade> trades = CsvReader.readTradesFromCsv();

    // 保有ポジションを計算
    Map<String, Long> positions = PositionCalculator.calculatePositions(trades);

    // ヘッダーを表示
    System.out.println("|===============================================|");
    System.out.println("| Ticker | Name                       | Quantity |");
    System.out.println("|--------+----------------------------+----------|");

    // 各銘柄の保有ポジションを表示
    positions.forEach((ticker, quantity) -> {
        // 銘柄名はデモ用に "N/A" を仮置き
        System.out.printf("| %-6s | %-26s | %10s |\n", ticker, "N/A", String.format("%,d", quantity));
    });

    // テーブル終了線を表示
    System.out.println("|===============================================|");
}

}

package simplex.bn25.makino335926.trading.Position;

import simplex.bn25.makino335926.trading.TradeRegisterAndDisplay.Trade;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

// クラス: PositionCalculator(保有ポジションの算出ロジックを実装するクラス)
public class PositionCalculator {

/**
 * メソッド: calculatePositions
 * 取引データから各銘柄の保有数量を計算する。
 * 
 * @param trades List<Trade> 取引データのリスト
 * @return Map<String, Long> 各銘柄コードに対応する保有数量
 */
public static Map<String, Long> calculatePositions(List<Trade> trades) {
    // 保有数量を管理するMapを初期化
    Map<String, Long> positions = new HashMap<>();

    // 取引リストを順次処理
    for (Trade trade : trades) {
        String ticker = trade.ticker(); // 銘柄コード
        // 売買区分に応じて数量を加算(買いはプラス、売りはマイナス)
        long quantity = trade.side().equals("BUY") ? trade.quantity() : -trade.quantity();

        // 現在の保有数量に追加
        positions.put(ticker, positions.getOrDefault(ticker, 0L) + quantity);
    }

    return positions; // 計算結果を返す
}

}

コメント

タイトルとURLをコピーしました