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

quant.fans.trade.Account Maven / Gradle / Ivy

The newest version!
package quant.fans.trade;

import com.google.common.collect.Maps;

import java.time.LocalDateTime;
import java.util.Map;
import java.util.TreeMap;

public class Account {
    public static final String DEFAULT_NAME = "JQuant";
    private String name;

    private static Integer INIT_FUND = 100000;  //起始资金数量

    private Record status = new Record(LocalDateTime.MIN);

    //需要在初始化时赋值
    private RiskAnalysis riskAnalysis = new RiskAnalysis();

    private TreeMap records = new TreeMap();    //记录各个时间点账户状态

    private LocalDateTime ts;//最后更新record的时间点

    private Map positions = Maps.newConcurrentMap();   //记录账户当前持仓情况

    private class RiskAnalysis{

        public double start = 0;   //起始资产
        public double end = 0;     //期末资产

        public double pnl = 0;    //交易盈亏
        public double pnlRate = 0;    //收益率=交易盈亏/起始资产
        public double annualReturn = 0; //年化收益率= 交易盈亏 / (平均持股天数/交易总天数)

        public int avgPositionDays = 0;   //平均每只股票持仓天数
        public int totalPositionDays = 0;    //持仓总天数

        public double maxEarnPerOp = 0; //最大单笔盈利
        public double maxLossPerOp = 0; //最大单笔亏损
        public double meanEarnPerOp = 0; //平均每笔盈利

        public double continuousEarnOp = 0; //连续盈利次数
        public double continuousLossOp = 0; //连续亏损次数

        public int totalOperate = 0;  //总交易次数
        public int earnOperate = 0;   //总盈利次数
        public int lossOperate = 0; //总亏损交易次数
        public double accuracy = 0;  //操作正确率=总盈利次数/总交易次数

        public double sharpe = 0;   //夏普率
        public double sortino = 0;  //所提诺比率

        public double benchmarkBenfit = 0; //基准收益额,同期股价涨跌额,单位:元
        public double benchmarkBenfitPercent = 0;   //基准收益百分比

        public double strategyBenfit = 0; //策略收益额
        public double strategyBenfitPercent = 0;   //策略收益率

        public double marketIndexPercent = 0; //大盘涨跌幅,同期大盘涨跌百分比
        public double max = 0;     //最大资产
        public double min = 0;     //最小资产
        public double maxDrawdown = 0; //最大回撤
    }

    /**
     * 记录股票交易状态,持仓情况,以及风险分析指标
     */
    private class Record {
        private Map positions;

        private RiskAnalysis riskAnalysis;

        private double todayBuy = 0;    //当日买入额
        private double todaySell = 0;    //当日卖出额
        private double todayEarn = 0;   //当日盈利,不包括亏损数额
        private double todayLoss = 0;   //当日亏损

        private double txnFees = 0; //税费总计

        private LocalDateTime ts;

        public Record(LocalDateTime ts) {
            this.ts = ts;
        }
    }

    //证券名称,证券数量,可卖数量,成本价,浮动盈亏,盈亏比例,最新市值,当前价,今买数量,今卖数量
    public class Position{
        public String stockName;   //证券名称
        public LocalDateTime ts;    //更新时间戳
        public String symbol;      //证券代码
        public int amount;      //证券数量
        public int canSell;     //可卖数量
        public double costPrice;   //成本价
        public double floatPnl;    //浮动盈亏
        public double pnlRatio;    //盈亏比例
        public double latestValue; //最新市值
        public double close;       //当前价
        public double buyAmount;   //今买数量
        public double sellAmount;  //今卖数量

        public Position(){}

        public Position(String symbol,LocalDateTime ts,int amount,double price,double close){
            this.symbol = symbol;
            this.ts = ts;
            this.amount = amount;
            this.canSell = amount;
            this.costPrice = price;
            this.floatPnl = amount*(price-close);
            this.pnlRatio = 0;
            this.latestValue = amount * price;
            this.close = close;
            this.buyAmount = amount;
            this.sellAmount = 0;
        }
    }

    public Account(String name, LocalDateTime startDate){
        this.name = name;
        this.ts = startDate;
        records.put(ts, new Record(ts));
    }

    public Account(){
        this(DEFAULT_NAME, LocalDateTime.MIN);
    }

    public Account(String name){
        this(name, LocalDateTime.MIN);
    }

    public Record getStatus() {
        return status;
    }

    public void setStatus(Record status) {
        this.status = status;
    }

    public Map getPositions() {
        return positions;
    }

    public void setPositions(Map positions){
        this.positions = positions;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy