package simplex.bn25.makino335926.trading.Position;
import simplex.bn25.makino335926.trading.StockDisplayAndRegister.CsvReader; // 銘柄マスタ用のCSVリーダー
import simplex.bn25.makino335926.trading.TradeRegisterAndDisplay.CsvReader; // 取引データ用のCSVリーダー
import simplex.bn25.makino335926.trading.TradeRegisterAndDisplay.Trade;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
// クラス: DisplayPosition(保有ポジションを表形式で表示するクラス)
public class DisplayPosition {
/**
* メソッド: displayPosition
* 取引データから保有ポジションを計算し、表形式で表示する。
*/
public static void displayPosition() {
// 取引データをCSVファイルから読み込む
List<Trade> trades = simplex.bn25.makino335926.trading.TradeRegisterAndDisplay.CsvReader.readTradesFromCsv();
if (trades.isEmpty()) {
System.out.println("> エラーが発生したため、保有ポジション表示を中止しました。");
return; // 取引データがない場合、処理を中断
}
// 銘柄マスタデータを読み込む
Map<String, String> stockNames = getStockNames();
if (stockNames.isEmpty()) {
System.out.println("> エラーが発生したため、保有ポジション表示を中止しました。");
return; // 銘柄マスタデータがない場合、処理を中断
}
// 保有ポジションを計算
Map<String, Long> positions = PositionCalculator.calculatePositions(trades);
// ヘッダーを表示
System.out.println("|===============================================|");
System.out.println("| Ticker | Name | Quantity |");
System.out.println("|--------+----------------------------+----------|");
// 各銘柄の保有ポジションを表示
positions.forEach((ticker, quantity) -> {
String name = stockNames.getOrDefault(ticker, "Unknown"); // 銘柄名を取得
System.out.printf("| %-6s | %-26s | %10s |\n", ticker, name, String.format("%,d", quantity));
});
// テーブル終了線を表示
System.out.println("|===============================================|");
}
/**
* メソッド: getStockNames
* 銘柄マスタデータを読み込み、銘柄コードと銘柄名の対応関係をMapで返す。
* ファイルが読み込めなかった場合はエラーメッセージを表示し、空のMapを返す。
*
* @return Map<String, String> 銘柄コードをキー、銘柄名を値とするMap
*/
private static Map<String, String> getStockNames() {
Map<String, String> stockNames = new HashMap<>(); // 初期化
try {
// 銘柄マスタのCSVデータを読み込む
List<String[]> stockData = CsvReader.readCsvFile();
for (String[] stock : stockData) {
if (stock.length > 1) {
stockNames.put(stock[0], stock[1]); // 銘柄コードをキー、銘柄名を値として保存
}
}
} catch (Exception e) {
// ファイル読み込み失敗時の例外処理
System.out.println("> 銘柄マスタデータの読み込み中にエラーが発生しました: " + e.getMessage());
}
return stockNames; // 銘柄情報のMapを返す
}
}
コメント