All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.fluxtion.server.lib.pnl.PositionSnapshot Maven / Gradle / Ivy

The newest version!
/*
 * SPDX-FileCopyrightText: © 2025 Gregory Higgins 
 * SPDX-License-Identifier: AGPL-3.0-only
 */

package com.fluxtion.server.lib.pnl;

import com.fluxtion.runtime.annotations.builder.FluxtionIgnore;
import com.fluxtion.server.lib.pnl.refdata.Instrument;
import lombok.Data;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

@Data
public class PositionSnapshot {

    public static PositionSnapshot of(InstrumentPosition... positions) {
        PositionSnapshot positionSnapshot = new PositionSnapshot();
        for (InstrumentPosition position : positions) {
            positionSnapshot.getPositions().add(position);
        }
        return positionSnapshot;
    }

    @FluxtionIgnore
    private Collection positions = new ArrayList<>();
    @FluxtionIgnore
    private Collection feePositions = new ArrayList<>();
    @FluxtionIgnore
    private Map instrumentPositionSnopshotMap = new HashMap<>();

    public Map getInstrumentPositionMap() {
        Map instrumentPositionMap = new HashMap<>();
        instrumentPositionSnopshotMap.forEach((instrument, positionSnapshot) -> {
            InstrumentPosMtm instrumentPosMtm = new InstrumentPosMtm();
            instrumentPosMtm.setBookName(instrument.instrumentName());

            positionSnapshot.getPositions().forEach((inst) -> {
                instrumentPosMtm.getPositionMap().put(inst.instrument(), inst.position());
            });

            instrumentPositionMap.put(instrument, instrumentPosMtm);
        });
        return instrumentPositionMap;
    }

    public Map getInstrumentFeePositionMap() {
        Map instrumentPositionMap = new HashMap<>();
        instrumentPositionSnopshotMap.forEach((instrument, positionSnapshot) -> {
            FeeInstrumentPosMtm instrumentPosMtm = new FeeInstrumentPosMtm();
            instrumentPosMtm.setBookName(instrument.instrumentName());

            positionSnapshot.feePositions.forEach((inst) -> {
                instrumentPosMtm.getFeesPositionMap().put(inst.instrument(), inst.position());
            });

            instrumentPositionMap.put(instrument, instrumentPosMtm);
        });
        return instrumentPositionMap;
    }

    @Data
    public static class InstrumentPositionSnapshot {
        private Collection positions = new ArrayList<>();
        private Collection feePositions = new ArrayList<>();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy