程序猿的量化交易之路(27)--Cointrader之PriceData价格数据(14)

转载须注明出处:http://blog.csdn.net/minimicall?viewmode=contentshttp://cloudtrade.top/

PriceData:价格数据。价格数据是市场数据的子类。

详细代码例如以下:

package org.cryptocoinpartners.schema;

import java.math.BigDecimal;

import javax.annotation.Nullable;
import javax.persistence.MappedSuperclass;
import javax.persistence.Transient;

import org.joda.time.Instant;

/**
 * Superclass for any MarketData which contains a price and volume, such as an Offer or a Trade ???靠,这个有问题。

只是整个平台的代码事实上非常垃圾。
 *
 * @author Tim Olson
 */
@MappedSuperclass
public abstract class PriceData extends MarketData {

    /**
     * @param time when the pricing event originally occured
     * @param remoteKey the exchange's unique ID for the pricing event (to prevent duplicates)
     * @param market which Market this pricing is for
     * @param priceCount relative to the Market's quoteBasis
     * @param volumeCount relative to the Market's volumeBasis
     */
    public PriceData(Instant time, @Nullable String remoteKey, Market market, @Nullable Long priceCount, @Nullable Long volumeCount) {
        super(time, remoteKey, market);
        this.priceCount = priceCount;
        this.volumeCount = volumeCount;
    }

    public PriceData(Instant time, @Nullable String remoteKey, Market market, @Nullable BigDecimal price, @Nullable BigDecimal volume) {
        super(time, remoteKey, market);
        this.priceCount = DiscreteAmount.roundedCountForBasis(price, market.getPriceBasis());
        this.volumeCount = DiscreteAmount.roundedCountForBasis(volume, market.getVolumeBasis());
    }

    /**
     * @param time when the pricing event originally occured
     * @param remoteKey the exchange's unique ID for the pricing event (to prevent duplicates)
     * @param market which Market this pricing is for
     * @param priceCount relative to the Market's quoteBasis
     * @param volumeCount relative to the Market's volumeBasis
     */
    public PriceData(Instant time, Instant timeReceived, @Nullable String remoteKey, Market market, @Nullable Long priceCount, @Nullable Long volumeCount) {
        super(time, timeReceived, remoteKey, market);
        this.priceCount = priceCount;
        this.volumeCount = volumeCount;
    }

    public PriceData(Instant time, Instant timeReceived, @Nullable String remoteKey, Market market, @Nullable BigDecimal price, @Nullable BigDecimal volume) {
        super(time, timeReceived, remoteKey, market);
        this.priceCount = DiscreteAmount.roundedCountForBasis(price, market.getPriceBasis());
        this.volumeCount = DiscreteAmount.roundedCountForBasis(volume, market.getVolumeBasis());
    }

    public @Nullable
    Long getPriceCount() {
        return priceCount;
    }

    public @Nullable
    Long getVolumeCount() {
        return volumeCount;
    }

    @Transient
    @Nullable
    public DiscreteAmount getPrice() {
        if (priceCount == null)
            return null;
        if (price == null)
            price = new DiscreteAmount(priceCount, getMarket().getPriceBasis());
        return price;
    }

    @Transient
    @Nullable
    public Double getPriceAsDouble() {
        Amount price = getPrice();
        return price == null ?

null : price.asDouble();
    }

    @Transient
    @Nullable
    public Double getPriceCountAsDouble() {
        Long price = getPriceCount();
        return price == null ? null : price.doubleValue();
    }

    @Transient
    @Nullable
    public Double getVolumeCountAsDouble() {
        Long volume = getVolumeCount();
        return volume == null ? null : volume.doubleValue();
    }

    @Transient
    @Nullable
    public BigDecimal getPriceAsBigDecimal() {
        Amount price = getPrice();
        return price == null ? null : price.asBigDecimal();
    }

    @Transient
    @Nullable
    public DiscreteAmount getVolume() {
        if (volumeCount == null)
            return null;
        if (volume == null)
            volume = new DiscreteAmount(volumeCount, getMarket().getVolumeBasis());
        return volume;
    }

    @Transient
    @Nullable
    public Double getVolumeAsDouble() {
        Amount volume = getVolume();
        return volume == null ?

null : volume.asDouble();
    }

    @Transient
    @Nullable
    public BigDecimal getVolumeAsBigDecimal() {
        Amount volume = getVolume();
        return volume == null ? null : volume.asBigDecimal();
    }

    // JPA
    protected PriceData() {
        super();
    }

    protected void setPriceCount(Long priceCount) {
        this.priceCount = priceCount;
    }

    protected void setVolumeCount(Long volumeCount) {
        this.volumeCount = volumeCount;
    }

    private DiscreteAmount price;//价
    private DiscreteAmount volume;//量
    private Long priceCount;
    private Long volumeCount;
}
时间: 2024-10-06 02:38:43

程序猿的量化交易之路(27)--Cointrader之PriceData价格数据(14)的相关文章

程序猿的量化交易之路(29)--Cointrader之Tick实体(16)

转载需注明出处:http://blog.csdn.net/minimicall,http://cloudtrade.top Tick:什么是Tick,在交易平台中很常见,事实上就 单笔交易时某仅仅证券的基本数据. 我们通过代码来学习吧: package org.cryptocoinpartners.schema; import javax.annotation.Nullable; import javax.persistence.Entity; import javax.persistence.

程序猿的量化交易之路(18)--Cointrader之Event实体(6)

转载需注明: 事件,是Esper的重要概念. 这里我们定义个事件类.它是Temporal实体的派生类. 不过对Temporal简单的包装.其代码例如以下: package org.cryptocoinpartners.schema; import org.joda.time.Instant; import javax.persistence.MappedSuperclass; /** * Subclasses of Event may be posted to Context * * @auth

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

转载须注明出处:http://blog.csdn.net/minimicall? viewmode=contents,http://cloudtrade.top Listing:挂牌. 比方某仅仅股票在某证券交易所挂牌交易.也就是上市交易. 老规矩,通过源代码学习: package org.cryptocoinpartners.schema; import java.util.ArrayList; import java.util.List; import javax.persistence.C

程序猿的量化交易之路(17)--Cointrader之Temporal实体(5)

转载须要注明:http://blog.csdn.net/minimicall,http://cloudtrader.top/ 这一小节说明一个时间实体Temporal实体,它的代码非常easy. package org.cryptocoinpartners.schema; import java.util.Date; import javax.persistence.Basic; import javax.persistence.MappedSuperclass; import javax.pe

程序猿的量化交易之路(28)--Cointrader之Offer报价实体(15)

转载须注明出处:http://blog.csdn.net/minimicall?viewmode=contents,http://cloudtrade.top/ Offer:报价. bid:买方报价 ask:卖方报价 非常easy的一个类.是PriceData的子类.还记得PriceData有什么吧. 时间戳.量.价, 而PriceData又是MarketData的子类,MarketData封装了Market.Market包括市场数据.Exchange,Listing,priceBasis.vo

程序员的量化交易之路(1)----规划开篇

其实,一直对量化交易有一定的理解和情节.早在中大读研究生的时候实验室师兄,已经去了中国平安核心投资团队,做高频交易研究的国源师兄的影响,就开始对金融世界产生了浓厚的兴趣.看了丁磊编著的<量化投资--策略与技术>和艾琳.奥尔德里奇的<高频交易>,反复的看,但是都入不了味,现在回过头来想,一个连股都不炒的人怎么可能入味呢.对一些金融的基本概念都不懂. 2013年7月出社会工作后,在10月份确立目标.需要炒股,而且需要一个深入的理解金融的世界.所以确定去考一个证券从业考试,选了证券基础和

程序员的量化交易之路(27)--Cointrader之PriceData价格数据(14)

转载须注明出处:http://blog.csdn.net/minimicall?viewmode=contents,http://cloudtrade.top/ PriceData:价格数据.价格数据是市场数据的子类. 具体代码如下: package org.cryptocoinpartners.schema; import java.math.BigDecimal; import javax.annotation.Nullable; import javax.persistence.Mappe

程序员的量化交易之路(2)----Esper文档学习之技术概览(1)

转载请注明出处:http://blog.csdn.net/minimicall/ 在接下来的20个工作日中,我将坚持翻译或者略翻译Esper的官方文档. 为什么需要学习Esper,因为我们需要理解复合事件处理 Complex Event Processing (CEP).在量化交易系统中,CEP是必不可少的.它负责处理海量的实时事件. 关于CEP更多知识,大家可以翻阅网络相关资料.我这里集中在学习开源的CEP系统,Esper.. 今天开始第一篇:技术概览. 1. CEP和事件序列分析 Esper

程序员的量化交易之路(13)--Cointrader类图(1)

转载须注明出处:http://blog.csdn.net/minimicall?viewmode=contents, htpp://cloudtrader.top 今天开始正式切入到Cointrader的源码分析学习中,其主页为:https://github.com/timolson/cointrader. 它是基于Esper的一个比特币云交易托管平台.和我想做的事情比较相近.而且虽然现在没什么功能,但代码量相对少,对于学习非常好. 下面是它的一个类图.: 后面我们会根据这个类图一步步的剖析整个