• 程序猿的量化交易之路(26)--Cointrader之Listing挂牌实体(13)


    转载须注明出处:http://blog.csdn.net/minimicall?

    viewmode=contentshttp://cloudtrade.top

    Listing:挂牌。

    比方某仅仅股票在某证券交易所挂牌交易。也就是上市交易。

    老规矩,通过源代码学习:

    package org.cryptocoinpartners.schema;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.persistence.Cacheable;
    import javax.persistence.Entity;
    import javax.persistence.Index;
    import javax.persistence.ManyToOne;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.NoResultException;
    import javax.persistence.PostPersist;
    import javax.persistence.Table;
    import javax.persistence.Transient;
    
    import org.cryptocoinpartners.enumeration.FeeMethod;
    import org.cryptocoinpartners.util.PersistUtil;
    
    /**
     * Represents the possibility to trade one Asset for another
     */
    @SuppressWarnings("UnusedDeclaration")
    @Entity //在数据库创建Listing这个表
    @Cacheable//可缓存
    //命名查询
    @NamedQueries({ @NamedQuery(name = "Listing.findByQuoteBase", query = "select a from Listing a where base=?1 and quote=?2 and prompt IS NULL"),
            @NamedQuery(name = "Listing.findByQuoteBasePrompt", query = "select a from Listing a where base=?1 and quote=?2 and prompt=?3") })
    @Table(indexes = { @Index(columnList = "base"), @Index(columnList = "quote"), @Index(columnList = "prompt") })
    //@Table(name = "listing", uniqueConstraints = { @UniqueConstraint(columnNames = { "base", "quote", "prompt" }),
    //@UniqueConstraint(columnNames = { "base", "quote" }) })
    public class Listing extends EntityBase {
    
    
    
    <pre name="code" class="java">    protected Asset base;
        protected Asset quote;
        private Prompt prompt;

    
    
        @ManyToOne(optional = false)
        //@Column(unique = true)
        public Asset getBase() {
            return base;
        }
    
        @PostPersist
        private void postPersist() {
            //  PersistUtil.clear();
            //  PersistUtil.refresh(this);
            //PersistUtil.merge(this);
            // PersistUtil.close();
            //PersistUtil.evict(this);
    
        }
    
        @ManyToOne(optional = false)
        //@Column(unique = true)
        public Asset getQuote() {
            return quote;
        }
    
        @ManyToOne(optional = true)
        public Prompt getPrompt() {
            return prompt;
        }
    
        /** will create the listing if it doesn't exist */
        public static Listing forPair(Asset base, Asset quote) {
    
            try {
                Listing listing = PersistUtil.namedQueryZeroOne(Listing.class, "Listing.findByQuoteBase", base, quote);
                if (listing == null) {
                    listing = new Listing(base, quote);
                    PersistUtil.insert(listing);
                }
                return listing;
            } catch (NoResultException e) {
                final Listing listing = new Listing(base, quote);
                PersistUtil.insert(listing);
                return listing;
            }
        }
    
        public static Listing forPair(Asset base, Asset quote, Prompt prompt) {
            try {
    
                Listing listing = PersistUtil.namedQueryZeroOne(Listing.class, "Listing.findByQuoteBasePrompt", base, quote, prompt);
                if (listing == null) {
                    listing = new Listing(base, quote, prompt);
                    PersistUtil.insert(listing);
                }
                return listing;
            } catch (NoResultException e) {
                final Listing listing = new Listing(base, quote, prompt);
                PersistUtil.insert(listing);
                return listing;
            }
        }
    
        @Override
        public String toString() {
            return getSymbol();
        }
    
        @Transient
        public String getSymbol() {
            if (prompt != null)
                return base.getSymbol() + '.' + quote.getSymbol() + '.' + prompt;
            return base.getSymbol() + '.' + quote.getSymbol();
        }
    
        @Transient
        protected double getMultiplier() {
            if (prompt != null)
                return prompt.getMultiplier();
            return getContractSize() * getTickSize();
        }
    
        @Transient
        protected double getTickValue() {
            if (prompt != null)
                return prompt.getTickValue();
            return 1;
        }
    
        @Transient
        protected double getContractSize() {
            if (prompt != null)
                return prompt.getContractSize();
            return 1;
        }
    
        @Transient
        protected double getTickSize() {
            if (prompt != null)
                return prompt.getTickSize();
            return getPriceBasis();
        }
    
        @Transient
        protected Amount getMultiplierAsAmount() {
    
            return new DiscreteAmount((long) getMultiplier(), getVolumeBasis());
        }
    
        @Transient
        protected double getVolumeBasis() {
            double volumeBasis = 0;
            if (prompt != null)
                volumeBasis = prompt.getVolumeBasis();
            return volumeBasis == 0 ? getBase().getBasis() : volumeBasis;
    
        }
    
        @Transient
        public FeeMethod getMarginMethod() {
            FeeMethod marginMethod = null;
            if (prompt != null)
                marginMethod = prompt.getMarginMethod();
            return marginMethod == null ? null : marginMethod;
    
        }
    
        @Transient
        public FeeMethod getMarginFeeMethod() {
            FeeMethod marginFeeMethod = null;
            if (prompt != null)
                marginFeeMethod = prompt.getMarginFeeMethod();
            return marginFeeMethod == null ? null : marginFeeMethod;
    
        }
    
        @Transient
        protected double getPriceBasis() {
            double priceBasis = 0;
            if (prompt != null)
                priceBasis = prompt.getPriceBasis();
            return priceBasis == 0 ? getQuote().getBasis() : priceBasis;
    
        }
    
        @Transient
        protected Asset getTradedCurrency() {
            if (prompt != null && prompt.getTradedCurrency() != null)
                return prompt.getTradedCurrency();
            return getQuote();
        }
    
        @Transient
        public FeeMethod getFeeMethod() {
            if (prompt != null && prompt.getFeeMethod() != null)
                return prompt.getFeeMethod();
            return null;
        }
    
        @Transient
        public double getFeeRate() {
            if (prompt != null && prompt.getFeeRate() != 0)
                return prompt.getFeeRate();
            return 0;
        }
    
        @Transient
        protected int getMargin() {
            if (prompt != null && prompt.getMargin() != 0)
                return prompt.getMargin();
            return 0;
        }
    
        public static List<String> allSymbols() {
            List<String> result = new ArrayList<>();
            List<Listing> listings = PersistUtil.queryList(Listing.class, "select x from Listing x");
            for (Listing listing : listings)
                result.add((listing.getSymbol()));
            return result;
        }
    
        // JPA
        protected Listing() {
        }
    
        protected void setBase(Asset base) {
            this.base = base;
        }
    
        protected void setQuote(Asset quote) {
            this.quote = quote;
        }
    
        protected void setPrompt(Prompt prompt) {
            this.prompt = prompt;
        }
    
    
        public Listing(Asset base, Asset quote) {
            this.base = base;
            this.quote = quote;
        }
    
        public Listing(Asset base, Asset quote, Prompt prompt) {
            this.base = base;
            this.quote = quote;
            this.prompt = prompt;
        }
    
        public static Listing forSymbol(String symbol) {
            symbol = symbol.toUpperCase();
            final int dot = symbol.indexOf('.');
            if (dot == -1)
                throw new IllegalArgumentException("Invalid Listing symbol: "" + symbol + """);
            final String baseSymbol = symbol.substring(0, dot);
            Asset base = Asset.forSymbol(baseSymbol);
            if (base == null)
                throw new IllegalArgumentException("Invalid base symbol: "" + baseSymbol + """);
            int len = symbol.substring(dot + 1, symbol.length()).indexOf('.');
            len = (len != -1) ? Math.min(symbol.length(), dot + 1 + symbol.substring(dot + 1, symbol.length()).indexOf('.')) : symbol.length();
            final String quoteSymbol = symbol.substring(dot + 1, len);
            final String promptSymbol = (symbol.length() > len) ? symbol.substring(len + 1, symbol.length()) : null;
            Asset quote = Asset.forSymbol(quoteSymbol);
            if (quote == null)
                throw new IllegalArgumentException("Invalid quote symbol: "" + quoteSymbol + """);
            if (promptSymbol == null)
                return Listing.forPair(base, quote);
            Prompt prompt = Prompt.forSymbol(promptSymbol);
            return Listing.forPair(base, quote, prompt);
        }
    
        @Override
        public boolean equals(Object obj) {
            if (obj instanceof Listing) {
                Listing listing = (Listing) obj;
    
                if (!listing.getBase().equals(getBase())) {
                    return false;
                }
    
                if (!listing.getQuote().equals(getQuote())) {
                    return false;
                }
                if (listing.getPrompt() != null)
                    if (this.getPrompt() != null) {
                        if (!listing.getPrompt().equals(getPrompt()))
                            return false;
                    } else {
                        return false;
                    }
    
                return true;
            }
    
            return false;
        }
    
        @Override
        public int hashCode() {
            return getPrompt() != null ? getQuote().hashCode() + getBase().hashCode() + getPrompt().hashCode() : getQuote().hashCode() + getBase().hashCode();
    
        }
    
    }
    


        protected Asset base;
        protected Asset quote;
        private Prompt prompt;
  • 相关阅读:
    c++ 对象作为参数传递
    LeetCode总结 -- 树的性质篇
    【Bug笔记】The superclass &quot;javax.servlet.http.HttpServlet&quot; was not found on the Java Build Path
    poj3642 Charm Bracelet(0-1背包)
    [笔试题] 阿里巴巴2013技术类笔试题(完整版手工记录+具体解析)
    swift-switch使用方法
    Android OpenGL ES 应用(二) 纹理
    【VBA研究】查找目录以下全部文件的名称
    解决com.ibatis.sqlmap.client.SqlMapException: There is no statement named in this SqlMap
    Android菜鸟的成长笔记(27)——ViewPager的使用
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5133407.html
Copyright © 2020-2023  润新知