import simplex.bn25.datemasa335859.trading.common.DisplayFormatter;
// 保有ポジションを計算し、表示するメソッド
public void displayPositions() {
Map<String, Position> positions = tradeDataLoader.calculatePositions();
if (positions.isEmpty()) {
System.out.println("取引データが登録されていません。");
return;
}
// 表のヘッダーを表示
System.out.println("|===============================================================================================================|");
System.out.println("| Ticker | Product Name | Quantity | Avg Unit Price | Realized PnL | Valuation | Unrealized PnL |");
System.out.println("|--------+-------------------------------+------------+------------------+----------------+-------------+----------------|");
// 各ポジションについて情報を表示
for (Map.Entry<String, Position> entry : positions.entrySet()) {
String ticker = entry.getKey();
Position position = entry.getValue();
// tickerNameの取得と短縮処理
String tickerName = TickerManager.getTickerToNameMap().getOrDefault(ticker, "Unknown");
tickerName = DisplayFormatter.truncateString(tickerName, 25); // 最大25文字に短縮
// 時価情報を取得
BigDecimal marketPrice = MarketPriceLoader.getMarketPrice(ticker);
// 評価額を計算
BigDecimal valuation = marketPrice != null
? position.calculateValuation(marketPrice).setScale(2, RoundingMode.HALF_UP)
: null;
// 評価損益を計算
BigDecimal unrealizedPnL = marketPrice != null
? position.calculateUnrealizedPnL(marketPrice).setScale(2, RoundingMode.HALF_UP)
: null;
// 表形式で出力。時価がない場合は"N/A"を表示
System.out.printf("| %-6s | %-29s | %10d | %,16.2f | %-14s | %-11s | %-14s |\n",
ticker,
tickerName,
position.quantity(),
position.getAverageUnitPrice(),
position.getRealizedPnL().compareTo(BigDecimal.ZERO) != 0 ? position.getRealizedPnL() : "N/A",
valuation != null ? valuation : "N/A",
unrealizedPnL != null ? unrealizedPnL : "N/A");
}
// 表のフッターを表示
System.out.println("|===============================================================================================================|");
}
package simplex.bn25.datemasa335859.trading.common;
public class DisplayFormatter {
// 文字列を最大長に切り詰め、必要に応じて"..."を追加する
public static String truncateString(String str, int maxLength) {
if (str.length() > maxLength) {
return str.substring(0, maxLength - 3) + "..."; // 最大長から3文字分を引いて"..."を追加
}
return str; // 短縮不要の場合はそのまま返す
}
// BigDecimalのフォーマット(例: 3桁区切りで表示)
public static String format(BigDecimal number) {
return NumberFormat.getNumberInstance().format(number);
}
}
コメント