DR 銘柄名省略

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);
    }
}

コメント

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