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; // 計算結果を返す
}
}
コメント