Changeset 1495 in algoquant
- Timestamp:
- 12/30/2013 4:48:13 PM (9 days ago)
- Files:
-
- 1 deleted
- 132 edited
- 8 moved
-
core/src/main/java/com/numericalmethod/algoquant/data/cache/processor/transformer/DoubleDataTransformers.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/cache/processor/transformer/DoubleEntryTransformers.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/calendar/holiday/ExchangeIndex.java (modified) (4 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/calendar/holiday/WebHolidayUpdater.java (modified) (5 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/equity/CompanyHistory.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/equity/CompanyHistoryImpl.java (modified) (5 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/equity/CompanyProfile.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/equity/CompanyProfileImpl.java (modified) (4 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/equity/bucketing/Bucket.java (modified) (3 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/equity/bucketing/Bucketing.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/equity/filter/companyhistories/EmptyHistoryFilter.java (modified) (1 diff)
-
core/src/main/java/com/numericalmethod/algoquant/data/equity/filter/companyhistory/CompanyHistoryPredicateFilter.java (modified) (1 diff)
-
core/src/main/java/com/numericalmethod/algoquant/data/equity/filter/equities/EquitiesFilter.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/equity/filter/equities/LiquidityFilter.java (modified) (4 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/equity/measure/StockMeasure.java (moved) (moved from core/src/main/java/com/numericalmethod/algoquant/data/equity/measure/EquityMeasure.java) (1 diff)
-
core/src/main/java/com/numericalmethod/algoquant/data/equity/snapshot/MarketSnapshot.java (modified) (3 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/equity/snapshot/MarketSnapshotUtils.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/equity/snapshot/MonthlyDataFromMarketSnapshots.java (modified) (4 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/DataSources.java (modified) (4 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/DepthCacheUtils.java (modified) (4 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/StockEOD2Depth.java (moved) (moved from core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/EquityEOD2Depth.java) (5 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/compustat/AccountingUpdate.java (modified) (6 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/compustat/CompanyHistoryDB.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/MultipleYahooEOD.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/YahooEOD.java (modified) (11 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/YahooEODCsvZipFileReader.java (modified) (5 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/YahooEODCsvZipFileWriter.java (modified) (6 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/YahooEODWebDownloader.java (modified) (7 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/YahooProductUtils.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/data/type/StockEOD.java (moved) (moved from core/src/main/java/com/numericalmethod/algoquant/data/type/EquityEOD.java) (1 diff)
-
core/src/main/java/com/numericalmethod/algoquant/data/type/portfolio/PortfolioGenerator.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/ProductUtils.java (modified) (4 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/EquityComparatorBySymbol.java (deleted)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/Stock.java (moved) (moved from core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/Equity.java) (5 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/hkex/HK0005.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/hkex/HKEXProduct.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/hkex/HSI.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/sgx/SGXProduct.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/GSPC.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/SP500.java (modified) (4 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/VFINX.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nasdaq/AAPL.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nasdaq/GOOG.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nasdaq/IBM.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nasdaq/MSFT.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nasdaq/NASDAQ100.java (modified) (5 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nasdaq/ORCL.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nyse/ERO.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nyse/GBB.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nyse/JYN.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nyse/NYSEProduct.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/simulator/handler/ChannelMessageHandlerFactories.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/execution/simulator/handler/StockEODMessageHandler.java (moved) (moved from core/src/main/java/com/numericalmethod/algoquant/execution/simulator/handler/EquityEODMessageHandler.java) (1 diff)
-
core/src/main/java/com/numericalmethod/algoquant/execution/strategy/handler/StockEODHandler.java (moved) (moved from core/src/main/java/com/numericalmethod/algoquant/execution/strategy/handler/EquityEODHandler.java) (3 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/FactorValueEvaluator.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/FactorValueLookup.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/StockFactorValues.java (moved) (moved from core/src/main/java/com/numericalmethod/algoquant/model/factormodel/EquityFactorValues.java) (3 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/amp2008/ZeroCostByFactorsPortfolioGenerator.java (modified) (12 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/backtest/AnnualizedSummaryBacktester.java (modified) (3 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/backtest/BacktestUtils.java (modified) (3 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/backtest/MonthlyReturnsBacktester.java (modified) (4 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/factor/Beta.java (modified) (3 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/factor/Factor.java (modified) (4 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/factor/Intercept.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/factor/LogMarketCap.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/factor/MeasureFactor.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/factor/accounting/AccountingFactor.java (modified) (3 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/factor/accounting/BookToMarket.java (modified) (3 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/backtest/IndexedPortfoliosAverageReturnsCalculator.java (modified) (4 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/backtest/PerPortfolioIndicesResults.java (modified) (3 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/backtest/PortfolioSnapshotsCalculator.java (modified) (7 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/backtest/PortfoliosSnapshot.java (modified) (3 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/portfolio/FactorRanking.java (modified) (5 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/portfolio/PortfolioSeriesGenerator.java (modified) (3 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/portfolio/PortfolioSetGenerator.java (modified) (3 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/regression/crosssectional/CrossSectionalRegression.java (modified) (4 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/FamaMacBethRegression.java (modified) (6 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/capm/CAPMEstimatorForPortfolio.java (modified) (3 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/capm/CAPMPerPortfolio.java (modified) (7 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/panel/FactorPanelRegression.java (modified) (5 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/panel/FamaMacBethPanelRegression.java (modified) (8 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/portfoliooptimization/performance/PerformanceOptimizedYahooEODPortfolio.java (modified) (8 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/signal/volume/AccumulationDistributionLine.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/signal/volume/ChaikinMoneyFlow.java (modified) (2 diffs)
-
core/src/main/java/com/numericalmethod/algoquant/model/signal/volume/ChaikinVolumeSignal.java (modified) (3 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/data/cache/conversion/Cache2MatrixTest.java (modified) (6 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/data/cache/conversion/Cache2ReturnsMatrixTest.java (modified) (7 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/data/equity/CompanyProfileTest.java (modified) (2 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/data/equity/filter/companyhistories/DummyCompanyHistory.java (modified) (4 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/data/equity/filter/companyhistories/SmallCapFilterTest.java (modified) (1 diff)
-
core/src/test/java/com/numericalmethod/algoquant/data/equity/filter/companyhistories/TestCompanyHistory.java (modified) (3 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/data/equity/snapshot/MonthlyDataFromMarketSnapshotsTest.java (modified) (6 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/data/export/BatchSimulationXmlWriterUtilsTest.java (modified) (1 diff)
-
core/src/test/java/com/numericalmethod/algoquant/data/historicaldata/compustat/CompanyHistoryDBTest.java (modified) (3 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/data/historicaldata/compustat/TestMarketData.java (modified) (2 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/MultipleYahooEODTest.java (modified) (2 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/YahooEODCsvZipFileWriterTest.java (modified) (6 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/YahooEODTest.java (modified) (6 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/YahooEODWebDownloaderTest.java (modified) (4 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/data/type/portfolio/weighting/RankWeightingTest.java (modified) (3 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/data/type/portfolio/weighting/TopBottomQuantilesEqualWeightingTest.java (modified) (4 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/execution/depth/SimulatedDepthCacheTest.java (modified) (4 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/execution/product/equity/StockTest.java (moved) (moved from core/src/test/java/com/numericalmethod/algoquant/execution/product/equity/EquityTest.java) (2 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/execution/simulator/SimpleSimulatorTest.java (modified) (7 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/model/analysis/cointegration/MovingCointegrationTest.java (modified) (3 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/amp2008/ZeroCostByFactorsPortfolioGeneratorTest.java (modified) (3 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/backtest/AnnualizedSummaryBacktesterTest.java (modified) (3 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/backtest/IndexedPortfoliosAverageReturnsCalculatorTest.java (modified) (7 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/backtest/PortfolioSnapshotsCalculatorTest.java (modified) (3 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/portfolio/FactorRankingTest.java (modified) (11 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/portfolio/PortfolioSeriesGeneratorTest.java (modified) (4 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/portfolio/RandomFactor.java (modified) (2 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/FamaMacBethRegressionTest.java (modified) (6 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/capm/CAPMPerPortfolioTest.java (modified) (5 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/panel/FactorPanelRegressionTest.java (modified) (7 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/panel/FamaMacBethPanelRegressionTest.java (modified) (4 diffs)
-
core/src/test/java/com/numericalmethod/algoquant/model/volarb/MeanReversionStrategyTest.java (modified) (5 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/execution/simulation/batch/sensitivity/demo/DemoSensitivityAnalyzer.java (modified) (2 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/execution/strategy/demo/DemoTimer.java (modified) (3 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/execution/strategy/demo/DemoTutorialStrategy.java (modified) (3 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/model/corvalan2005/demo/DemoCorvalan2005.java (modified) (1 diff)
-
demo/src/main/java/com/numericalmethod/algoquant/model/factormodel/amp2008/demo/AMP2008DemoUtils.java (modified) (2 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/model/factormodel/amp2008/demo/DemoMultiFactor.java (modified) (4 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/model/factormodel/amp2008/demo/DemoMultiFactorTiming.java (modified) (4 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/demo/DemoFamaFrench1992.java (modified) (6 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/demo/DemoPartitioningByFactors.java (modified) (4 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/demo/FamaFrench1992DemoUtils.java (modified) (2 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/demo/DemoFamaMacBethRegression.java (modified) (4 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/panel/demo/DemoFamaMacBethPanelRegression.java (modified) (5 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/model/infantino2010/demo/Demo010.java (modified) (1 diff)
-
demo/src/main/java/com/numericalmethod/algoquant/model/kst1995/demo/Demo020.java (modified) (2 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/model/lai2010/demo/DemoLai2010Signal.java (modified) (1 diff)
-
demo/src/main/java/com/numericalmethod/algoquant/model/lai2010/demo/DemoPeriodicRebalancing.java (modified) (1 diff)
-
demo/src/main/java/com/numericalmethod/algoquant/model/portfoliooptimization/markowitz/signal/demo/DemoMarkowitz.java (modified) (1 diff)
-
demo/src/main/java/com/numericalmethod/algoquant/model/signal/crossover/demo/DemoBatchParamSimulation.java (modified) (2 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/model/signal/crossover/demo/DemoSMA2CrossoverDynamic_010.java (modified) (2 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/model/signal/crossover/demo/DemoSMA2_010.java (modified) (2 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/model/signal/crossover/demo/DemoSMA2_011.java (modified) (2 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/model/signal/demo/DemoPairsTrading.java (modified) (4 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/model/signal/volume/demo/DemoADL.java (modified) (8 diffs)
-
demo/src/main/java/com/numericalmethod/algoquant/model/signal/volume/demo/DemoCMF.java (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
core/src/main/java/com/numericalmethod/algoquant/data/cache/processor/transformer/DoubleDataTransformers.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.data.type.Depth; 26 import com.numericalmethod.algoquant.data.type. EquityEOD;26 import com.numericalmethod.algoquant.data.type.StockEOD; 27 27 import com.numericalmethod.algoquant.data.type.Price; 28 28 … … 37 37 } 38 38 /** 39 * This converts an {@link EquityEOD} data to a {@code Double}.39 * This converts an {@link StockEOD} data to a {@code Double}. 40 40 */ 41 public static final DoubleDataTransformer< EquityEOD> EQUITYEOD =42 new DoubleDataTransformer< EquityEOD>() {41 public static final DoubleDataTransformer<StockEOD> STOCK_EOD = 42 new DoubleDataTransformer<StockEOD>() { 43 43 @Override 44 public Double transform( EquityEOD data) {44 public Double transform(StockEOD data) { 45 45 return data.getAdjClose(); 46 46 } -
core/src/main/java/com/numericalmethod/algoquant/data/cache/processor/transformer/DoubleEntryTransformers.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.data.type.Depth; 26 import com.numericalmethod.algoquant.data.type. EquityEOD;26 import com.numericalmethod.algoquant.data.type.StockEOD; 27 27 import com.numericalmethod.algoquant.data.type.Price; 28 28 … … 37 37 } 38 38 /** 39 * This converts an {@link EquityEOD} data to a {@code Double}.39 * This converts an {@link StockEOD} data to a {@code Double}. 40 40 */ 41 public static final DoubleEntryTransformer< EquityEOD> EQUITYEOD =42 new DoubleEntryTransformer< EquityEOD>(DoubleDataTransformers.EQUITYEOD);41 public static final DoubleEntryTransformer<StockEOD> STOCK_EOD = 42 new DoubleEntryTransformer<StockEOD>(DoubleDataTransformers.STOCK_EOD); 43 43 /** 44 44 * This converts a {@link Price} data to a {@code Double}. -
core/src/main/java/com/numericalmethod/algoquant/data/calendar/holiday/ExchangeIndex.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.data.calendar.TimeZoneUtils; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 28 28 import java.util.Arrays; … … 42 42 43 43 HKEX( 44 Arrays.asList(new Equity("^HSI", Exchange.HKEX)),44 Arrays.asList(new Stock("^HSI", Exchange.HKEX)), 45 45 new DateMidnight(1990, 1, 1, TimeZoneUtils.HONG_KONG)), 46 46 NYSE( … … 51 51 * finding the union of trading dates would increase the error resilience. 52 52 */ 53 new Equity("^IXIC", Exchange.NASDAQ),54 new Equity("IBM", Exchange.NYSE)),53 new Stock("^IXIC", Exchange.NASDAQ), 54 new Stock("IBM", Exchange.NYSE)), 55 55 // JodaTimeUtils.getDate(1962, 1, 1, TimeZoneUtils.NYSE)), // earliest available date (comment out for better performance while loading) 56 56 new DateMidnight(1980, 1, 1, TimeZoneUtils.NEW_YORK)), 57 57 SGX( 58 58 Arrays.asList( 59 new Equity("^STI", Exchange.SGX), // STRAITS TIMES INDEX60 new Equity("S68.SI", Exchange.SGX), // Singapore Exchange Ltd.61 new Equity("FSTAS.SI", Exchange.SGX)), // FTSE ST All-Share Index59 new Stock("^STI", Exchange.SGX), // STRAITS TIMES INDEX 60 new Stock("S68.SI", Exchange.SGX), // Singapore Exchange Ltd. 61 new Stock("FSTAS.SI", Exchange.SGX)), // FTSE ST All-Share Index 62 62 new DateMidnight(1997, 1, 1, TimeZoneUtils.SINGAPORE)); 63 private final List< Equity> equities;63 private final List<Stock> equities; 64 64 private final DateMidnight earliestDate; 65 65 private final DateTimeZone timeZone; 66 66 67 private ExchangeIndex(List< Equity> equities, DateMidnight earliestDate) {67 private ExchangeIndex(List<Stock> equities, DateMidnight earliestDate) { 68 68 this.equities = equities; 69 69 this.earliestDate = earliestDate; … … 71 71 } 72 72 73 public List< Equity> getEquities() {73 public List<Stock> getEquities() { 74 74 return Collections.unmodifiableList(equities); 75 75 } -
core/src/main/java/com/numericalmethod/algoquant/data/calendar/holiday/WebHolidayUpdater.java
r1366 r1495 26 26 import com.numericalmethod.algoquant.data.historicaldata.yahoo.YahooEODWebDownloader; 27 27 import com.numericalmethod.algoquant.data.structure.TimedEntry; 28 import com.numericalmethod.algoquant.data.type. EquityEOD;29 import com.numericalmethod.algoquant.execution.product.equity. Equity;28 import com.numericalmethod.algoquant.data.type.StockEOD; 29 import com.numericalmethod.algoquant.execution.product.equity.Stock; 30 30 import com.numericalmethod.suanshu.misc.datastructure.time.JodaTimeUtils; 31 import java.util.HashSet; 32 import java.util.List; 33 import java.util.Set; 31 import java.util.*; 34 32 import org.joda.time.DateMidnight; 35 33 import org.joda.time.Period; … … 43 41 public class WebHolidayUpdater { 44 42 45 private final List< Equity> equities;43 private final List<Stock> equities; 46 44 47 public WebHolidayUpdater(List< Equity> equities) {45 public WebHolidayUpdater(List<Stock> equities) { 48 46 this.equities = equities; 49 47 } … … 59 57 Set<DateMidnight> tradingDay = new HashSet<DateMidnight>(8192); 60 58 61 for ( Equityindicator : equities) {59 for (Stock indicator : equities) { 62 60 63 SequentialCache< EquityEOD> yahooCache =61 SequentialCache<StockEOD> yahooCache = 64 62 getYahooCache(fromDate, toDate, indicator); 65 63 66 for (TimedEntry< EquityEOD> te : yahooCache) {64 for (TimedEntry<StockEOD> te : yahooCache) { 67 65 if (isTradingDay(te.getData())) { 68 66 tradingDay.add(te.getTime().toDateMidnight()); … … 83 81 } 84 82 85 private SequentialCache< EquityEOD> getYahooCache(DateMidnight fromDate, DateMidnight endDate,86 EquityyahooInstrument) {83 private SequentialCache<StockEOD> getYahooCache(DateMidnight fromDate, DateMidnight endDate, 84 Stock yahooInstrument) { 87 85 YahooEODWebDownloader downloader = new YahooEODWebDownloader(yahooInstrument); 88 SequentialCache< EquityEOD> cache = downloader.getCache(fromDate.toDateTime(), endDate.toDateTime());86 SequentialCache<StockEOD> cache = downloader.getCache(fromDate.toDateTime(), endDate.toDateTime()); 89 87 return cache; 90 88 } 91 89 92 private boolean isTradingDay( EquityEOD equityEOD) {90 private boolean isTradingDay(StockEOD stockEOD) { 93 91 /* 94 92 * We assume if the volume of a particular day is zero and its open, … … 96 94 * dummy data row returned by !Yahoo finance. 97 95 */ 98 return !( equityEOD.getVolume() == 099 && equityEOD.getClose() == equityEOD.getHigh()100 && equityEOD.getHigh() == equityEOD.getLow()101 && equityEOD.getLow() == equityEOD.getOpen());96 return !(stockEOD.getVolume() == 0 97 && stockEOD.getClose() == stockEOD.getHigh() 98 && stockEOD.getHigh() == stockEOD.getLow() 99 && stockEOD.getLow() == stockEOD.getOpen()); 102 100 } 103 101 } -
core/src/main/java/com/numericalmethod/algoquant/data/equity/CompanyHistory.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.data.cache.RandomAccessCache; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 28 28 /** … … 34 34 35 35 /** 36 * Gets the equityrepresented by this company.36 * Gets the stock represented by this company. 37 37 * 38 * @return the equityof this company38 * @return the stock of this company 39 39 */ 40 public Equity getEquity();40 public Stock getStock(); 41 41 42 42 public CompanyInfo getCompanyInfo(); -
core/src/main/java/com/numericalmethod/algoquant/data/equity/CompanyHistoryImpl.java
r1366 r1495 23 23 package com.numericalmethod.algoquant.data.equity; 24 24 25 import com.numericalmethod.algoquant.data.cache.BufferCache; 26 import com.numericalmethod.algoquant.data.cache.RandomAccessCache; 27 import com.numericalmethod.algoquant.data.cache.SequentialCache; 28 import com.numericalmethod.algoquant.data.cache.VectorCache; 25 import com.numericalmethod.algoquant.data.cache.*; 29 26 import com.numericalmethod.algoquant.data.cache.VectorCache.Vector; 30 27 import com.numericalmethod.algoquant.data.equity.measure.AccountingData; 31 28 import com.numericalmethod.algoquant.data.equity.measure.TradingData; 32 29 import com.numericalmethod.algoquant.data.structure.TimedEntry; 33 import com.numericalmethod.algoquant.execution.product.equity. Equity;30 import com.numericalmethod.algoquant.execution.product.equity.Stock; 34 31 35 32 /** … … 39 36 public class CompanyHistoryImpl implements CompanyHistory { 40 37 41 private final Equity equity;38 private final Stock stock; 42 39 private final CompanyInfo info; 43 40 private final BufferCache<CompanyProfile> buffer = new BufferCache<CompanyProfile>(); 44 41 45 42 public CompanyHistoryImpl( 46 Equity equity,43 Stock stock, 47 44 CompanyInfo info, 48 45 SequentialCache<? extends TradingData> trading, 49 46 SequentialCache<? extends AccountingData> accounting) { 50 this. equity = equity;47 this.stock = stock; 51 48 this.info = info; 52 49 … … 57 54 TradingData tradingData = (TradingData) vector.get(1); 58 55 AccountingData accountingData = (AccountingData) vector.get(2); 59 buffer.add(entry.getTime(), new CompanyProfileImpl( equity, tradingData, accountingData));56 buffer.add(entry.getTime(), new CompanyProfileImpl(stock, tradingData, accountingData)); 60 57 } 61 58 } 62 59 63 60 public CompanyHistoryImpl( 64 Equity equity,61 Stock stock, 65 62 CompanyInfo info, 66 63 SequentialCache<? extends CompanyProfile> profiles) { 67 this. equity = equity;64 this.stock = stock; 68 65 this.info = info; 69 66 … … 74 71 75 72 @Override 76 public Equity getEquity() {77 return equity;73 public Stock getStock() { 74 return stock; 78 75 } 79 76 … … 90 87 @Override 91 88 public String toString() { 92 return String.format("history of %s", equity);89 return String.format("history of %s", stock); 93 90 } 94 91 } -
core/src/main/java/com/numericalmethod/algoquant/data/equity/CompanyProfile.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.data.equity.measure.CompanyMeasure; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 28 28 /** … … 33 33 public interface CompanyProfile { 34 34 35 public Equity getEquity();35 public Stock getStock(); 36 36 37 37 public double getPrice(); -
core/src/main/java/com/numericalmethod/algoquant/data/equity/CompanyProfileImpl.java
r1366 r1495 23 23 package com.numericalmethod.algoquant.data.equity; 24 24 25 import com.numericalmethod.algoquant.data.equity.measure.AccountingData; 26 import com.numericalmethod.algoquant.data.equity.measure.CompanyMeasure; 27 import com.numericalmethod.algoquant.data.equity.measure.TradingData; 28 import com.numericalmethod.algoquant.execution.product.equity.Equity; 25 import com.numericalmethod.algoquant.data.equity.measure.*; 26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 27 30 28 /** … … 34 32 public class CompanyProfileImpl implements CompanyProfile { 35 33 36 private final Equity equity;34 private final Stock stock; 37 35 private final TradingData trading; 38 36 private final AccountingData accounting; 39 37 40 public CompanyProfileImpl( Equity equity, TradingData trading, AccountingData accounting) {41 this. equity = equity;38 public CompanyProfileImpl(Stock stock, TradingData trading, AccountingData accounting) { 39 this.stock = stock; 42 40 this.trading = trading; 43 41 this.accounting = accounting; … … 45 43 46 44 @Override 47 public Equity getEquity() {48 return equity;45 public Stock getStock() { 46 return stock; 49 47 } 50 48 … … 61 59 @Override 62 60 public String toString() { 63 return String.format("[%s]: %s %s", equity, trading, accounting);61 return String.format("[%s]: %s %s", stock, trading, accounting); 64 62 } 65 63 } -
core/src/main/java/com/numericalmethod/algoquant/data/equity/bucketing/Bucket.java
r1366 r1495 23 23 package com.numericalmethod.algoquant.data.equity.bucketing; 24 24 25 import com.numericalmethod.algoquant.execution.product.equity. Equity;25 import com.numericalmethod.algoquant.execution.product.equity.Stock; 26 26 import java.util.Collections; 27 27 import java.util.HashSet; … … 37 37 38 38 private final K key; 39 private final HashSet< Equity> equities;39 private final HashSet<Stock> equities; 40 40 41 public Bucket(K key, Set< Equity> equities) {41 public Bucket(K key, Set<Stock> equities) { 42 42 this.key = key; 43 this.equities = new HashSet< Equity>(equities);43 this.equities = new HashSet<Stock>(equities); 44 44 } 45 45 … … 48 48 } 49 49 50 public Set< Equity> getEquitySet() {50 public Set<Stock> getStocks() { 51 51 return Collections.unmodifiableSet(equities); 52 52 } -
core/src/main/java/com/numericalmethod/algoquant/data/equity/bucketing/Bucketing.java
r1366 r1495 23 23 package com.numericalmethod.algoquant.data.equity.bucketing; 24 24 25 import com.numericalmethod.algoquant.execution.product.equity. Equity;25 import com.numericalmethod.algoquant.execution.product.equity.Stock; 26 26 import java.util.Map; 27 27 import java.util.Set; … … 49 49 * @return the buckets of equities 50 50 */ 51 public Map<K, Bucket<K>> sort(Set< Equity> equities);51 public Map<K, Bucket<K>> sort(Set<Stock> equities); 52 52 } -
core/src/main/java/com/numericalmethod/algoquant/data/equity/filter/companyhistories/EmptyHistoryFilter.java
r1491 r1495 43 43 public boolean evaluate(CompanyHistory history) { 44 44 if (history.getProfiles().size() == 0) { 45 logger.warn(String.format("Removed empty history (%s) !", history.get Equity()));45 logger.warn(String.format("Removed empty history (%s) !", history.getStock())); 46 46 return false; 47 47 } -
core/src/main/java/com/numericalmethod/algoquant/data/equity/filter/companyhistory/CompanyHistoryPredicateFilter.java
r1488 r1495 49 49 50 50 return new CompanyHistoryImpl( 51 history.get Equity(),51 history.getStock(), 52 52 history.getCompanyInfo(), 53 53 new SequentialCache<CompanyProfile>() { -
core/src/main/java/com/numericalmethod/algoquant/data/equity/filter/equities/EquitiesFilter.java
r1492 r1495 25 25 import com.numericalmethod.algoquant.data.cache.RandomAccessCache; 26 26 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 27 import com.numericalmethod.algoquant.execution.product.equity. Equity;27 import com.numericalmethod.algoquant.execution.product.equity.Stock; 28 28 import java.util.Collection; 29 29 import java.util.Set; … … 38 38 public interface EquitiesFilter { 39 39 40 public Set< Equity> getFilteredEquities(RandomAccessCache<MarketSnapshot> marketSnapshotCache,41 Collection< Equity> equities);40 public Set<Stock> getFilteredEquities(RandomAccessCache<MarketSnapshot> marketSnapshotCache, 41 Collection<Stock> equities); 42 42 } -
core/src/main/java/com/numericalmethod/algoquant/data/equity/filter/equities/LiquidityFilter.java
r1492 r1495 28 28 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 29 29 import com.numericalmethod.algoquant.data.structure.TimedEntry; 30 import com.numericalmethod.algoquant.execution.product.equity. Equity;30 import com.numericalmethod.algoquant.execution.product.equity.Stock; 31 31 import com.numericalmethod.suanshu.number.DoubleUtils; 32 32 import com.numericalmethod.suanshu.stats.descriptive.moment.Mean; 33 import java.util.ArrayList; 34 import java.util.Collection; 35 import java.util.HashSet; 36 import java.util.Iterator; 37 import java.util.List; 38 import java.util.Set; 33 import java.util.*; 39 34 import org.joda.time.DateTime; 40 35 … … 75 70 76 71 @Override 77 public Set< Equity> getFilteredEquities(72 public Set<Stock> getFilteredEquities( 78 73 RandomAccessCache<MarketSnapshot> marketSnapshotCache, 79 Collection< Equity> equities) {80 Set< Equity> outputEquities = new HashSet<Equity>();81 for ( Equity equity : equities) {74 Collection<Stock> stocks) { 75 Set<Stock> outputEquities = new HashSet<Stock>(); 76 for (Stock stock : stocks) { 82 77 83 if (testLiquidity( equity, marketSnapshotCache.iteratorBetween(startDate, endDate))) {84 outputEquities.add( equity);78 if (testLiquidity(stock, marketSnapshotCache.iteratorBetween(startDate, endDate))) { 79 outputEquities.add(stock); 85 80 } 86 81 } … … 89 84 } 90 85 91 private boolean testLiquidity( Equity equity,92 Iterator<TimedEntry<MarketSnapshot>> snapshotsIterator) {86 private boolean testLiquidity(Stock stock, 87 Iterator<TimedEntry<MarketSnapshot>> snapshotsIterator) { 93 88 List<Double> dollarVolumes = new ArrayList<Double>(); 94 89 List<Double> prices = new ArrayList<Double>(); … … 96 91 while (snapshotsIterator.hasNext()) { 97 92 MarketSnapshot snapshot = snapshotsIterator.next().getData(); 98 double price = snapshot.getProfile( equity).getMeasureValue(new TradedPrice());99 double volume = snapshot.getProfile( equity).getMeasureValue(new TradedVolume());93 double price = snapshot.getProfile(stock).getMeasureValue(new TradedPrice()); 94 double volume = snapshot.getProfile(stock).getMeasureValue(new TradedVolume()); 100 95 double dollarVolume = price * volume; 101 96 -
core/src/main/java/com/numericalmethod/algoquant/data/equity/measure/StockMeasure.java
r1484 r1495 27 27 * @author Johannes Lehmann 28 28 */ 29 public class EquityMeasure extends CompanyMeasure {29 public class StockMeasure extends CompanyMeasure { 30 30 31 31 @Override -
core/src/main/java/com/numericalmethod/algoquant/data/equity/snapshot/MarketSnapshot.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.data.equity.CompanyProfile; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import static com.numericalmethod.nmutils.collection.CollectionUtils.*; 28 28 import com.numericalmethod.suanshu.misc.ArgumentAssertion; 29 import java.util.Collections; 30 import java.util.HashSet; 31 import java.util.List; 32 import java.util.Map; 33 import java.util.Set; 29 import java.util.*; 34 30 35 31 /** … … 40 36 public class MarketSnapshot { 41 37 42 private final double marketValue; // the value of a market index or benchmark38 private final double benchmark; // the value of a market index or benchmark 43 39 private final double riskFreeRate; // the risk-free interest rate 44 private final List<CompanyProfile> profiles; // data of each company at the snapshot time 45 private final Map<Equity, CompanyProfile> map = newHashMap(); 40 private final Map<Stock, CompanyProfile> map = newHashMap(); 46 41 47 42 /** 48 * Creates an instance given the values of the marketand companies.43 * Creates an instance given the values of the benchmark and companies. 49 44 * 50 * @param marketValuethe market value, e.g., HS index value45 * @param benchmark the market value, e.g., HS index value 51 46 * @param riskFreeRate the risk-free rate 52 * @param profiles the company profiles47 * @param profiles the data of each company at the snapshot time 53 48 */ 54 public MarketSnapshot(double marketValue, double riskFreeRate, List<CompanyProfile> profiles) {55 this. marketValue = marketValue;49 public MarketSnapshot(double benchmark, double riskFreeRate, Collection<CompanyProfile> profiles) { 50 this.benchmark = benchmark; 56 51 this.riskFreeRate = riskFreeRate; 57 this.profiles = profiles;58 52 59 53 for (CompanyProfile profile : profiles) { 60 Equity equity = profile.getEquity();61 ArgumentAssertion.assertTrue(!map.containsKey( equity),62 "duplicate product (%s) in the profile list", equity);63 map.put(profile.get Equity(), profile);54 Stock stock = profile.getStock(); 55 ArgumentAssertion.assertTrue(!map.containsKey(stock), 56 "duplicate product (%s) in the profile list", stock); 57 map.put(profile.getStock(), profile); 64 58 } 65 59 } 66 60 67 public double get MarketValue() {68 return marketValue;61 public double getBenchmark() { 62 return benchmark; 69 63 } 70 64 … … 73 67 } 74 68 75 public List<CompanyProfile> getProfiles() {76 return Collections.unmodifiable List(profiles);69 public Set<Stock> getEquities() { 70 return Collections.unmodifiableSet(map.keySet()); 77 71 } 78 72 79 public Co mpanyProfile getProfile(Equity equity) {80 return map.get(equity);73 public Collection<CompanyProfile> getProfiles() { 74 return Collections.unmodifiableCollection(map.values()); 81 75 } 82 76 83 public Set<Equity> getEquities() { 84 Set<Equity> equities = new HashSet<Equity>(); 85 for (CompanyProfile profile : profiles) { 86 equities.add(profile.getEquity()); 87 } 88 return equities; 77 public CompanyProfile getProfile(Stock stock) { 78 return map.get(stock); 89 79 } 90 80 } -
core/src/main/java/com/numericalmethod/algoquant/data/equity/snapshot/MarketSnapshotUtils.java
r1366 r1495 32 32 import com.numericalmethod.algoquant.data.equity.CompanyProfile; 33 33 import com.numericalmethod.algoquant.data.structure.TimedEntry; 34 import com.numericalmethod.algoquant.execution.product.equity. Equity;34 import com.numericalmethod.algoquant.execution.product.equity.Stock; 35 35 import java.util.ArrayList; 36 36 import java.util.List; … … 95 95 } 96 96 97 public static Set< Equity> getEquitiesFromFirstSnapshot(97 public static Set<Stock> getEquitiesFromFirstSnapshot( 98 98 SequentialCache<MarketSnapshot> marketSnapshots) { 99 99 return CacheUtils.getFirstEntry(marketSnapshots).getData().getEquities(); -
core/src/main/java/com/numericalmethod/algoquant/data/equity/snapshot/MonthlyDataFromMarketSnapshots.java
r1366 r1495 26 26 import com.numericalmethod.algoquant.data.cache.processor.sampler.EquiTimeSampler; 27 27 import com.numericalmethod.algoquant.data.structure.TimedEntry; 28 import com.numericalmethod.algoquant.execution.product.equity. Equity;28 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 29 import com.numericalmethod.algoquant.model.signal.movingwindow.MovingWindowByPeriod; 30 import java.util.ArrayList; 31 import java.util.Collections; 32 import java.util.List; 30 import java.util.*; 33 31 import org.joda.time.DateTime; 34 32 import org.joda.time.Period; … … 47 45 private final List<Double> priceSeries; 48 46 49 public MonthlyDataFromMarketSnapshots(SequentialCache<MarketSnapshot> snapshots Cache,50 Equity equity) {51 monthlyMarketSnapshots = getMonthlyFromDailySnapshots(snapshotsCache);47 public MonthlyDataFromMarketSnapshots(SequentialCache<MarketSnapshot> snapshots, 48 Stock stock) { 49 monthlyMarketSnapshots = new EquiTimeSampler<MarketSnapshot>(Period.months(1)).doProcess(snapshots); 52 50 times = new ArrayList<DateTime>(); 53 51 market = new ArrayList<Double>(); … … 58 56 MarketSnapshot snapshot = entry.getData(); 59 57 times.add(entry.getTime()); 60 market.add(snapshot.get MarketValue());58 market.add(snapshot.getBenchmark()); 61 59 rates.add(snapshot.getRiskFreeRate()); 62 priceSeries.add(snapshot.getProfile( equity).getPrice());60 priceSeries.add(snapshot.getProfile(stock).getPrice()); 63 61 } 64 }65 66 private static SequentialCache<MarketSnapshot> getMonthlyFromDailySnapshots(67 SequentialCache<MarketSnapshot> snapshots) {68 return new EquiTimeSampler<MarketSnapshot>(Period.months(1)).doProcess(snapshots);69 62 } 70 63 … … 85 78 86 79 /** 87 * @return A map which for each equity contains the price of that equityfor each of the times80 * @return A map which for each stock contains the price of that stock for each of the times 88 81 * returned by {@code getTimes()}. 89 82 */ -
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/DataSources.java
r1430 r1495 31 31 import com.numericalmethod.algoquant.data.type.Depth; 32 32 import com.numericalmethod.algoquant.execution.product.Product; 33 import com.numericalmethod.algoquant.execution.product.equity. Equity;33 import com.numericalmethod.algoquant.execution.product.equity.Stock; 34 34 import com.numericalmethod.suanshu.misc.ArgumentAssertion; 35 35 … … 56 56 */ 57 57 GAIN_CAPITAL { 58 @Override59 public String getDefaultDataFolder() {60 return Config.INSTANCE.getString(ConfigProperties.DATA_GAINCAPITAL.getPropertyName());61 }58 @Override 59 public String getDefaultDataFolder() { 60 return Config.INSTANCE.getString(ConfigProperties.DATA_GAINCAPITAL.getPropertyName()); 61 } 62 62 63 @Override64 public CacheFactory<Depth> forProduct(Product product, String dataFolder) {65 return new GainCapitalFx(product, dataFolder);66 }67 },63 @Override 64 public CacheFactory<Depth> forProduct(Product product, String dataFolder) { 65 return new GainCapitalFx(product, dataFolder); 66 } 67 }, 68 68 /** 69 69 * Bloomberg tick data. … … 72 72 */ 73 73 BLOOMBERG { 74 @Override75 public String getDefaultDataFolder() {76 return Config.INSTANCE.getString(ConfigProperties.DATA_BLOOMBERG.getPropertyName());77 }74 @Override 75 public String getDefaultDataFolder() { 76 return Config.INSTANCE.getString(ConfigProperties.DATA_BLOOMBERG.getPropertyName()); 77 } 78 78 79 @Override80 public CacheFactory<Depth> forProduct(Product product, String dataFolder) {81 return new BloombergTickData(product, dataFolder);82 }83 },79 @Override 80 public CacheFactory<Depth> forProduct(Product product, String dataFolder) { 81 return new BloombergTickData(product, dataFolder); 82 } 83 }, 84 84 /** 85 85 * Yahoo! data. … … 88 88 */ 89 89 YAHOO { 90 @Override91 public String getDefaultDataFolder() {92 return Config.INSTANCE.getString(ConfigProperties.DATA_YAHOO.getPropertyName());93 }90 @Override 91 public String getDefaultDataFolder() { 92 return Config.INSTANCE.getString(ConfigProperties.DATA_YAHOO.getPropertyName()); 93 } 94 94 95 @Override96 public CacheFactory<Depth> forProduct(Product product, String dataFolder) {97 ArgumentAssertion.assertTrue(98 product.is(Equity.class),99 "YahooEOD supports equityclass only");95 @Override 96 public CacheFactory<Depth> forProduct(Product product, String dataFolder) { 97 ArgumentAssertion.assertTrue( 98 product.is(Stock.class), 99 "YahooEOD supports stock class only"); 100 100 101 return DepthCacheUtils.fromEquityEODCacheFactory(102 product,103 new YahooEOD(product.as(Equity.class), dataFolder, dataFolder));104 }105 };101 return DepthCacheUtils.fromStockEODCacheFactory( 102 product, 103 new YahooEOD(product.as(Stock.class), dataFolder, dataFolder)); 104 } 105 }; 106 106 107 107 /** -
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/DepthCacheUtils.java
r1476 r1495 31 31 import com.numericalmethod.algoquant.data.cache.processor.transformer.EntryDataTransformer; 32 32 import com.numericalmethod.algoquant.data.type.Depth; 33 import com.numericalmethod.algoquant.data.type. EquityEOD;33 import com.numericalmethod.algoquant.data.type.StockEOD; 34 34 import com.numericalmethod.algoquant.execution.product.Product; 35 35 import com.numericalmethod.algoquant.execution.simulation.DepthCachesLoader; … … 55 55 * Same as calling 56 56 * <pre>{@code 57 * from EquityEODCache(product, cache, EquityEOD2Depth.Type.ADJ_CLOSE);57 * fromStockEODCache(product, cache, StockEOD2Depth.Type.ADJ_CLOSE); 58 58 * }</pre> 59 59 * 60 * @param product the equityproduct61 * @param cache the cache containing {@code EquityEOD}60 * @param product the stock product 61 * @param cache the cache containing {@code StockEOD} 62 62 * @return a cache containing transformed {@code Depth} 63 63 * 64 * @see #from EquityEODCache(com.numericalmethod.algoquant.execution.product.Product,64 * @see #fromStockEODCache(com.numericalmethod.algoquant.execution.product.Product, 65 65 * com.numericalmethod.algoquant.data.cache.SequentialCache, 66 * com.numericalmethod.algoquant.data.historicaldata. EquityEOD2Depth.Type)66 * com.numericalmethod.algoquant.data.historicaldata.StockEOD2Depth.Type) 67 67 */ 68 public static SequentialCache<Depth> fromEquityEODCache( 69 Product product, 70 SequentialCache<EquityEOD> cache) { 71 return fromEquityEODCache(product, cache, EquityEOD2Depth.Type.ADJ_CLOSE); 68 public static SequentialCache<Depth> fromStockEODCache(Product product, 69 SequentialCache<StockEOD> cache) { 70 return fromStockEODCache(product, cache, StockEOD2Depth.Type.ADJ_CLOSE); 72 71 } 73 72 74 73 /** 75 * Transforms a cache of {@code EquityEOD} to a cache of {@code Depth},74 * Transforms a cache of {@code StockEOD} to a cache of {@code Depth}, 76 75 * usually for simulation purpose. 77 76 * 78 * @param product the equityproduct79 * @param cache the cache containing {@code EquityEOD}80 * @param conversionType how each {@code EquityEOD} item is transformed to a {@code Depth}77 * @param product the stock product 78 * @param cache the cache containing {@code StockEOD} 79 * @param conversionType how each {@code StockEOD} item is transformed to a {@code Depth} 81 80 * @return a cache containing transformed {@code Depth} 82 81 */ 83 public static SequentialCache<Depth> fromEquityEODCache( 84 Product product, 85 SequentialCache<EquityEOD> cache, 86 EquityEOD2Depth.Type conversionType) { 87 DataTransformer<EquityEOD, Depth> transformer = new EquityEOD2Depth(product, conversionType); 88 CacheProcessor<EquityEOD, Depth> processor = new EntryDataTransformer<EquityEOD, Depth>(transformer); 82 public static SequentialCache<Depth> fromStockEODCache(Product product, 83 SequentialCache<StockEOD> cache, 84 StockEOD2Depth.Type conversionType) { 85 DataTransformer<StockEOD, Depth> transformer = new StockEOD2Depth(product, conversionType); 86 CacheProcessor<StockEOD, Depth> processor = new EntryDataTransformer<StockEOD, Depth>(transformer); 89 87 90 88 return processor.doProcess(cache); … … 94 92 * Same as calling 95 93 * <pre>{@code 96 * from EquityEODCacheFactory(product, factory, EquityEOD2Depth.Type.ADJ_CLOSE);94 * fromStockEODCacheFactory(product, factory, StockEOD2Depth.Type.ADJ_CLOSE); 97 95 * }</pre> 98 96 * 99 * @param product the equityproduct100 * @param factory the cache factory that creates cache of {@code EquityEOD}97 * @param product the stock product 98 * @param factory the cache factory that creates cache of {@code StockEOD} 101 99 * @return a cache factory that creates transformed {@code Depth} 102 100 * 103 * @see #from EquityEODCacheFactory(com.numericalmethod.algoquant.execution.product.Product,101 * @see #fromStockEODCacheFactory(com.numericalmethod.algoquant.execution.product.Product, 104 102 * com.numericalmethod.algoquant.data.cache.CacheFactory, 105 * com.numericalmethod.algoquant.data.historicaldata. EquityEOD2Depth.Type)103 * com.numericalmethod.algoquant.data.historicaldata.StockEOD2Depth.Type) 106 104 */ 107 public static CacheFactory<Depth> fromEquityEODCacheFactory( 108 Product product, 109 CacheFactory<EquityEOD> factory) { 110 return fromEquityEODCacheFactory(product, factory, EquityEOD2Depth.Type.ADJ_CLOSE); 105 public static CacheFactory<Depth> fromStockEODCacheFactory(Product product, 106 CacheFactory<StockEOD> factory) { 107 return fromStockEODCacheFactory(product, factory, StockEOD2Depth.Type.ADJ_CLOSE); 111 108 } 112 109 113 110 /** 114 * Transforms a cache factory of {@code EquityEOD} to a cache factory of111 * Transforms a cache factory of {@code StockEOD} to a cache factory of 115 112 * {@code Depth}, usually for simulation purpose. 116 113 * 117 * @param product the equityproduct118 * @param factory the cache factory that creates cache of {@code EquityEOD}119 * @param conversionType how each {@code EquityEOD} item is transformed to a {@code Depth}114 * @param product the stock product 115 * @param factory the cache factory that creates cache of {@code StockEOD} 116 * @param conversionType how each {@code StockEOD} item is transformed to a {@code Depth} 120 117 * @return a cache factory that creates transformed {@code Depth} 121 118 */ 122 public static CacheFactory<Depth> fromEquityEODCacheFactory( 123 final Product product, 124 final CacheFactory<EquityEOD> factory, 125 final EquityEOD2Depth.Type conversionType) { 119 public static CacheFactory<Depth> fromStockEODCacheFactory(final Product product, 120 final CacheFactory<StockEOD> factory, 121 final StockEOD2Depth.Type conversionType) { 126 122 return new CacheFactory<Depth>() { 127 123 @Override 128 124 public SequentialCache<Depth> getCache(DateTime begin, DateTime end) { 129 return from EquityEODCache(product, factory.getCache(begin, end), conversionType);125 return fromStockEODCache(product, factory.getCache(begin, end), conversionType); 130 126 } 131 127 }; … … 141 137 * @return the returns matrix 142 138 */ 143 public static Matrix loadReturnsMatrix( 144 DataSource dataSource, 145 List<Product> products, 146 DateTime begin, 147 DateTime end) { 148 DepthCaches caches = 149 new DepthCachesLoader(dataSource).loadCaches(products, begin, end); 139 public static Matrix loadReturnsMatrix(DataSource dataSource, 140 List<Product> products, 141 DateTime begin, 142 DateTime end) { 143 DepthCaches caches = new DepthCachesLoader(dataSource).loadCaches(products, begin, end); 150 144 151 145 List<SequentialCache<Double>> doubleCaches = -
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/StockEOD2Depth.java
r1484 r1495 24 24 25 25 import com.numericalmethod.algoquant.data.cache.processor.transformer.DataTransformer; 26 import com.numericalmethod.algoquant.data.type.Depth; 27 import com.numericalmethod.algoquant.data.type.DepthUtils; 28 import com.numericalmethod.algoquant.data.type.EquityEOD; 26 import com.numericalmethod.algoquant.data.type.*; 29 27 import com.numericalmethod.algoquant.execution.product.Product; 30 28 31 29 /** 32 30 * The values in this enum implements {@link DataTransformer} interface 33 * for converting {@link EquityEOD} to {@link Depth}.31 * for converting {@link StockEOD} to {@link Depth}. 34 32 * 35 33 * @author Ken Yiu 36 34 */ 37 public class EquityEOD2Depth implements DataTransformer<EquityEOD, Depth> {35 public class StockEOD2Depth implements DataTransformer<StockEOD, Depth> { 38 36 39 37 public static enum Type { … … 43 41 */ 44 42 OPEN { 45 @Override46 double getValue(EquityEOD equityEod) {47 return equityEod.getOpen();48 }49 },43 @Override 44 double getValue(StockEOD stockEod) { 45 return stockEod.getOpen(); 46 } 47 }, 50 48 /** 51 49 * /** … … 53 51 */ 54 52 CLOSE { 55 @Override56 double getValue(EquityEOD equityEod) {57 return equityEod.getClose();58 }59 },53 @Override 54 double getValue(StockEOD stockEod) { 55 return stockEod.getClose(); 56 } 57 }, 60 58 /** 61 59 * The source will return "adjusted close" price of the EOD. 62 60 */ 63 61 ADJ_CLOSE { 64 @Override65 double getValue(EquityEOD equityEod) {66 return equityEod.getAdjClose();67 }68 };62 @Override 63 double getValue(StockEOD stockEod) { 64 return stockEod.getAdjClose(); 65 } 66 }; 69 67 70 abstract double getValue( EquityEOD equityEod);68 abstract double getValue(StockEOD stockEod); 71 69 } 70 72 71 private final Product product; 73 72 private final Type type; … … 79 78 * @param type conversion type 80 79 */ 81 public EquityEOD2Depth(Product product, Type type) {80 public StockEOD2Depth(Product product, Type type) { 82 81 this.product = product; 83 82 this.type = type; … … 85 84 86 85 @Override 87 public Depth transform( EquityEOD equityEod) {88 return DepthUtils.newSinglePriceDepth(product, type.getValue( equityEod));86 public Depth transform(StockEOD stockEod) { 87 return DepthUtils.newSinglePriceDepth(product, type.getValue(stockEod)); 89 88 } 90 89 } -
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/compustat/AccountingUpdate.java
r1366 r1495 50 50 I 51 51 } 52 52 53 private static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormat.forPattern("yyyyMMdd"); 53 54 private final String stockid; … … 60 61 private final long nCommonStocks; 61 62 private final long nTreasuryStocks; 62 private final double equity;63 private final double stock; 63 64 private final double revenue; 64 65 private final double sales; … … 84 85 long nCommonStocks = parseLong((String) map.get("CStock")); 85 86 long nTreasuryStocks = parseLong((String) map.get("TStock")); 86 long equity= parseLong((String) map.get("Equity"));87 long stock = parseLong((String) map.get("Equity")); 87 88 long revenue = parseLong((String) map.get("Revenue")); 88 89 long sales = parseLong((String) map.get("Sales")); … … 97 98 long netDebt = parseLong((String) map.get("NetDebt")); 98 99 99 return new AccountingUpdate(stockid, fydate, popsrc, denomination, asset, liability, nPreferredStocks, nCommonStocks, nTreasuryStocks, equity, revenue, sales, expense, earnings, earningAfterDepreciation, interest, income, tax, dividend, cashflow, netDebt);100 return new AccountingUpdate(stockid, fydate, popsrc, denomination, asset, liability, nPreferredStocks, nCommonStocks, nTreasuryStocks, stock, revenue, sales, expense, earnings, earningAfterDepreciation, interest, income, tax, dividend, cashflow, netDebt); 100 101 } 101 102 … … 110 111 long nCommonStocks, 111 112 long nTreasuryStocks, 112 double equity,113 double stock, 113 114 double revenue, 114 115 double sales, … … 131 132 this.nCommonStocks = nCommonStocks; 132 133 this.nTreasuryStocks = nTreasuryStocks; 133 this. equity = equity;134 this.stock = stock; 134 135 this.revenue = revenue; 135 136 this.sales = sales; -
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/compustat/CompanyHistoryDB.java
r1401 r1495 28 28 import com.numericalmethod.algoquant.data.equity.CompanyInfo; 29 29 import com.numericalmethod.algoquant.data.equity.measure.AccountingData; 30 import com.numericalmethod.algoquant.execution.product.equity. Equity;30 import com.numericalmethod.algoquant.execution.product.equity.Stock; 31 31 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 32 32 import static com.numericalmethod.nmutils.NMUtils.*; … … 154 154 155 155 return new CompanyHistoryImpl( 156 new Equity(company.getStockId(), company.getExchange()), // Note: Symbols from Compustat are sometimes missing, use stockId instead156 new Stock(company.getStockId(), company.getExchange()), // Note: Symbols from Compustat are sometimes missing, use stockId instead 157 157 company, 158 158 prices, -
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/MultipleYahooEOD.java
r1366 r1495 27 27 import com.numericalmethod.algoquant.data.cache.processor.transformer.DoubleEntryTransformer; 28 28 import com.numericalmethod.algoquant.data.cache.processor.transformer.DoubleEntryTransformers; 29 import com.numericalmethod.algoquant.data.type. EquityEOD;30 import com.numericalmethod.algoquant.execution.product.equity. Equity;29 import com.numericalmethod.algoquant.data.type.StockEOD; 30 import com.numericalmethod.algoquant.execution.product.equity.Stock; 31 31 import java.util.ArrayList; 32 32 import java.util.List; … … 39 39 public class MultipleYahooEOD extends VectorCache<Double> { 40 40 41 public MultipleYahooEOD( Equity[] equity, DateTime begin, DateTime end,42 DoubleEntryTransformer<EquityEOD> converter,43 String dirIn, String dirOut) {44 super(getConstituents( equity, begin, end, converter, dirIn, dirOut));41 public MultipleYahooEOD(Stock[] stock, DateTime begin, DateTime end, 42 DoubleEntryTransformer<StockEOD> converter, 43 String dirIn, String dirOut) { 44 super(getConstituents(stock, begin, end, converter, dirIn, dirOut)); 45 45 } 46 46 47 public MultipleYahooEOD( Equity[] equity, DateTime begin, DateTime end,48 String dirIn, String dirOut) {49 this( equity, begin, end, DoubleEntryTransformers.EQUITYEOD, dirIn, dirOut);47 public MultipleYahooEOD(Stock[] stock, DateTime begin, DateTime end, 48 String dirIn, String dirOut) { 49 this(stock, begin, end, DoubleEntryTransformers.STOCK_EOD, dirIn, dirOut); 50 50 } 51 51 52 52 private static List<SequentialCache<Double>> getConstituents( 53 Equity[] equity, DateTime begin, DateTime end,54 DoubleEntryTransformer< EquityEOD> transformer,53 Stock[] stocks, DateTime begin, DateTime end, 54 DoubleEntryTransformer<StockEOD> transformer, 55 55 String dirIn, String dirOut) { 56 final int length = equity.length;56 final int length = stocks.length; 57 57 List<SequentialCache<Double>> caches = new ArrayList<SequentialCache<Double>>(length); 58 58 for (int i = 0; i < length; ++i) { 59 59 YahooEOD source = new YahooEOD( 60 equity[i],60 stocks[i], 61 61 dirIn, 62 62 dirOut); 63 63 64 SequentialCache< EquityEOD> seq = source.getCache(begin, end);64 SequentialCache<StockEOD> seq = source.getCache(begin, end); 65 65 66 66 SequentialCache<Double> doubleCache = transformer.doProcess(seq); -
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/YahooEOD.java
r1366 r1495 30 30 import com.numericalmethod.algoquant.data.structure.TimedBuffer; 31 31 import com.numericalmethod.algoquant.data.structure.TimedEntry; 32 import com.numericalmethod.algoquant.data.type.EquityEOD; 33 import com.numericalmethod.algoquant.execution.product.equity.Equity; 32 import com.numericalmethod.algoquant.data.type.StockEOD; 34 33 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 34 import com.numericalmethod.algoquant.execution.product.equity.Stock; 35 35 import static com.numericalmethod.nmutils.NMUtils.getClassLogger; 36 36 import com.numericalmethod.nmutils.iterator.ReadOnlyIterator; … … 48 48 * @author Haksun Li 49 49 */ 50 public class YahooEOD implements CacheFactory< EquityEOD> {50 public class YahooEOD implements CacheFactory<StockEOD> { 51 51 52 52 private static final Logger logger = getClassLogger(); 53 private final Equity equity;53 private final Stock stock; 54 54 private final String dirIn; 55 55 private final String dirOut; 56 private final TimedBuffer< EquityEOD> buffer = new TimedBuffer<EquityEOD>();56 private final TimedBuffer<StockEOD> buffer = new TimedBuffer<StockEOD>(); 57 57 58 58 /** … … 61 61 * from the local directory, data will be downloaded from Yahoo! website. 62 62 * 63 * @param equity the equityproduct63 * @param stock the stock product 64 64 * @param dirIn the directory where the local data is saved 65 65 * @param dirOut the directory where the loaded data is saved (for future use) 66 66 */ 67 public YahooEOD( Equity equity, String dirIn, String dirOut) {68 this. equity = equity;67 public YahooEOD(Stock stock, String dirIn, String dirOut) { 68 this.stock = stock; 69 69 this.dirIn = dirIn; 70 70 this.dirOut = dirOut; // TODO: 100% of the time, this is the same as dirIn, so merge them 71 71 } 72 72 73 public YahooEOD( Equity equity, String dirIn) {74 this( equity, dirIn, null);75 } 76 77 public YahooEOD( Equity equity) {78 this( equity, null, null);73 public YahooEOD(Stock stock, String dirIn) { 74 this(stock, dirIn, null); 75 } 76 77 public YahooEOD(Stock stock) { 78 this(stock, null, null); 79 79 } 80 80 81 81 @Override 82 public SequentialCache< EquityEOD> getCache(DateTime begin, DateTime end) {83 final DateTime cacheBegin = roundTime(begin, equity.getExchange());84 final DateTime cacheEnd = roundTime(end, equity.getExchange());82 public SequentialCache<StockEOD> getCache(DateTime begin, DateTime end) { 83 final DateTime cacheBegin = roundTime(begin, stock.getExchange()); 84 final DateTime cacheEnd = roundTime(end, stock.getExchange()); 85 85 86 86 if (!hasBufferedDataForInterval(cacheBegin, cacheEnd)) { … … 88 88 } 89 89 90 return new SequentialCache< EquityEOD>() {90 return new SequentialCache<StockEOD>() { 91 91 92 92 @Override 93 public Iterator<TimedEntry< EquityEOD>> iterator() {94 return new ReadOnlyIterator<TimedEntry< EquityEOD>>(95 buffer.iteratorBetween(cacheBegin, cacheEnd.plus(1))); // including cacheEnd93 public Iterator<TimedEntry<StockEOD>> iterator() { 94 return new ReadOnlyIterator<TimedEntry<StockEOD>>( 95 buffer.iteratorBetween(cacheBegin, cacheEnd.plus(1))); // including cacheEnd 96 96 } 97 97 }; … … 104 104 105 105 /** 106 * Rounds the time to the trading hour close for an equity.106 * Rounds the time to the trading hour close for an stock. 107 107 */ 108 108 private static DateTime roundTime(DateTime time, Exchange exchange) { … … 124 124 125 125 private boolean loadBufferFromFile(DateTime begin, DateTime end) { 126 String fileName = String.format("%s/%s.csv.zip", dirIn, equity.getSymbol());126 String fileName = String.format("%s/%s.csv.zip", dirIn, stock.getSymbol()); 127 127 logger.debug(String.format("reading Yahoo! data from file %s from %s to %s", 128 128 fileName, begin, end)); … … 153 153 for (; row != null && !row.timestamp.isAfter(businessDayEnd); row = reader.next()) { 154 154 buffer.put(row.timestamp, 155 new EquityEOD(row.open, row.high, row.low, row.close, row.volume, row.adjClose));155 new StockEOD(row.open, row.high, row.low, row.close, row.volume, row.adjClose)); 156 156 if (!row.timestamp.isBefore(businessDayEnd)) { // got enough data 157 157 /* … … 181 181 182 182 private DateTime findFirstBusinessDay(DateTime begin) { 183 Holidays holidays = ExchangeHolidays.forExchange( equity.getExchange());183 Holidays holidays = ExchangeHolidays.forExchange(stock.getExchange()); 184 184 DateTime businessDayBegin = begin; 185 185 while (holidays.isHoliday(businessDayBegin)) { … … 191 191 192 192 private DateTime findLastBusinessDay(DateTime end) { 193 Holidays holidays = ExchangeHolidays.forExchange( equity.getExchange());193 Holidays holidays = ExchangeHolidays.forExchange(stock.getExchange()); 194 194 DateTime businessDayEnd = end; 195 195 while (holidays.isHoliday(businessDayEnd)) { … … 205 205 logger.debug(String.format("reading Yahoo! data from the Internet from %s to %s", 206 206 begin.toString(), end.toString())); 207 YahooEODWebDownloader webReader = new YahooEODWebDownloader( equity);208 SequentialCache< EquityEOD> webCache = webReader.getCache(begin, end);209 for (TimedEntry< EquityEOD> entry : webCache) {207 YahooEODWebDownloader webReader = new YahooEODWebDownloader(stock); 208 SequentialCache<StockEOD> webCache = webReader.getCache(begin, end); 209 for (TimedEntry<StockEOD> entry : webCache) { 210 210 buffer.put(entry.getTime(), entry.getData()); 211 211 } … … 216 216 } 217 217 218 private void saveCacheToFile(SequentialCache< EquityEOD> cache) {218 private void saveCacheToFile(SequentialCache<StockEOD> cache) { 219 219 try { 220 220 YahooEODCsvZipFileWriter writer = new YahooEODCsvZipFileWriter(dirOut); 221 writer.save( equity, cache);221 writer.save(stock, cache); 222 222 } catch (Exception ex) {//the code is able to continue despite not being able to saveFromWeb data 223 223 logger.warn(String.format("unable to write the Yahoo! data to %s", dirOut), ex); -
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/YahooEODCsvZipFileReader.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.data.structure.TimedEntry; 26 import com.numericalmethod.algoquant.data.type. EquityEOD;26 import com.numericalmethod.algoquant.data.type.StockEOD; 27 27 import static com.numericalmethod.nmutils.NMUtils.*; 28 28 import static com.numericalmethod.nmutils.collection.CollectionUtils.*; … … 42 42 43 43 /** 44 * This reads a Yahoo! end of day equitydata csv.zip file.44 * This reads a Yahoo! end of day stock data csv.zip file. 45 45 * 46 46 * @author Simon Lui … … 74 74 } 75 75 76 YahooRow(TimedEntry< EquityEOD> equityEOD) {77 timestamp = new DateTime( equityEOD.getTime());78 open = equityEOD.getData().getOpen();79 high = equityEOD.getData().getHigh();80 low = equityEOD.getData().getLow();81 close = equityEOD.getData().getClose();82 volume = equityEOD.getData().getVolume();83 adjClose = equityEOD.getData().getAdjClose();76 YahooRow(TimedEntry<StockEOD> stockEOD) { 77 timestamp = new DateTime(stockEOD.getTime()); 78 open = stockEOD.getData().getOpen(); 79 high = stockEOD.getData().getHigh(); 80 low = stockEOD.getData().getLow(); 81 close = stockEOD.getData().getClose(); 82 volume = stockEOD.getData().getVolume(); 83 adjClose = stockEOD.getData().getAdjClose(); 84 84 } 85 85 … … 98 98 } 99 99 }; 100 100 101 private static final Logger logger = getClassLogger(); 101 102 private static final Charset CHARSET = Charset.forName("windows-1252"); … … 107 108 private static CellProcessor[] newCellProcessor() { 108 109 return new CellProcessor[]{ 109 new StrMinMax(1, 100), // timestamp110 new ParseDouble(), // open111 new ParseDouble(), // high112 new ParseDouble(), // low113 new ParseDouble(), // close114 new ParseDouble(), // volume115 new ParseDouble() // adjClose116 };110 new StrMinMax(1, 100), // timestamp 111 new ParseDouble(), // open 112 new ParseDouble(), // high 113 new ParseDouble(), // low 114 new ParseDouble(), // close 115 new ParseDouble(), // volume 116 new ParseDouble() // adjClose 117 }; 117 118 } 118 119 -
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/YahooEODCsvZipFileWriter.java
r1366 r1495 26 26 import com.numericalmethod.algoquant.data.historicaldata.yahoo.YahooEODCsvZipFileReader.YahooRow; 27 27 import com.numericalmethod.algoquant.data.structure.TimedEntry; 28 import com.numericalmethod.algoquant.data.type. EquityEOD;29 import com.numericalmethod.algoquant.execution.product.equity. Equity;28 import com.numericalmethod.algoquant.data.type.StockEOD; 29 import com.numericalmethod.algoquant.execution.product.equity.Stock; 30 30 import static com.numericalmethod.nmutils.NMUtils.*; 31 31 import com.numericalmethod.nmutils.csvzip.CsvZipFileWriter; … … 49 49 50 50 /** 51 * Creates a writer to save equitydata to a given folder.51 * Creates a writer to save stock data to a given folder. 52 52 * 53 53 * @param dir the output folder … … 60 60 * Writes Yahoo! data cache to a .csv.zip file 61 61 * 62 * @param equitythe equity to be saved63 * @param cache {@link YahooEOD} data cache62 * @param stock the equity to be saved 63 * @param cache {@link YahooEOD} data cache 64 64 * @return the number of rows written to the file 65 65 * @throws IOException if an error occurs during saving the data into the files 66 66 */ 67 public int save( Equity equity, SequentialCache<EquityEOD> cache) throws IOException {67 public int save(Stock stock, SequentialCache<StockEOD> cache) throws IOException { 68 68 createFolder(dir); 69 69 70 String fileName = String.format("%s/%s.csv.zip", dir, equity.getSymbol());70 String fileName = String.format("%s/%s.csv.zip", dir, stock.getSymbol()); 71 71 CsvZipFileWriter csvzip = new CsvZipFileWriter(fileName, 72 72 new String[]{"timestamp", "open", "high", "low", "close", "volume", "adjClose"}, … … 77 77 int nRows = 0; 78 78 try { 79 for (TimedEntry< EquityEOD> entry : cache) {79 for (TimedEntry<StockEOD> entry : cache) { 80 80 if (entry.getData() != null) { 81 81 CsvZipRow row = new YahooRow(entry); … … 93 93 94 94 /** 95 * Downloads and writes Yahoo! data for an equityto a .csv.zip file.95 * Downloads and writes Yahoo! data for an stock to a .csv.zip file. 96 96 * 97 97 * @param downloader the web downloader … … 102 102 */ 103 103 public int saveFromWeb(YahooEODWebDownloader downloader, DateTime begin, DateTime end) throws IOException { 104 return save(downloader.get Equity(), downloader.getCache(begin, end));104 return save(downloader.getStock(), downloader.getCache(begin, end)); 105 105 } 106 106 107 107 /** 108 * Downloads and writes all available Yahoo! data for an equityto a .csv.zip file.108 * Downloads and writes all available Yahoo! data for an stock to a .csv.zip file. 109 109 * 110 * @param equity the equityto be saved110 * @param stock the stock to be saved 111 111 * @return the number of rows written to the file 112 112 * @throws IOException if an error occurs during downloading and saving the data into the files 113 113 */ 114 public int saveAllFromWeb( Equity equity) throws IOException {115 return saveFromWeb(new YahooEODWebDownloader( equity),116 JodaTimeUtils.getDate(1900, 1, 1, equity.getExchange().timeZone),//before the start date in Yahoo114 public int saveAllFromWeb(Stock stock) throws IOException { 115 return saveFromWeb(new YahooEODWebDownloader(stock), 116 JodaTimeUtils.getDate(1900, 1, 1, stock.getExchange().timeZone),//before the start date in Yahoo 117 117 new DateTime()); //today 118 118 } -
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/YahooEODWebDownloader.java
r1366 r1495 26 26 import com.numericalmethod.algoquant.data.cache.SequentialCache; 27 27 import com.numericalmethod.algoquant.data.structure.TimedEntry; 28 import com.numericalmethod.algoquant.data.type.EquityEOD; 29 import com.numericalmethod.algoquant.execution.product.equity.Equity; 28 import com.numericalmethod.algoquant.data.type.StockEOD; 30 29 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 30 import com.numericalmethod.algoquant.execution.product.equity.Stock; 31 31 import com.numericalmethod.nmutils.io.WebUtils; 32 32 import com.numericalmethod.nmutils.iterator.AbstractReadOnlyIterator; 33 33 import com.numericalmethod.nmutils.iterator.FilterIterator; 34 34 import com.numericalmethod.nmutils.logic.Predicate; 35 import java.util.Iterator; 36 import java.util.List; 37 import java.util.ListIterator; 35 import java.util.*; 38 36 import org.joda.time.DateTime; 39 37 40 38 /** 41 * Downloads equitydata from Yahoo! Finance.39 * Downloads stock data from Yahoo! Finance. 42 40 * 43 41 * @author Simon Lui 44 42 */ 45 public class YahooEODWebDownloader implements CacheFactory< EquityEOD> {43 public class YahooEODWebDownloader implements CacheFactory<StockEOD> { 46 44 47 private final Equity equity;45 private final Stock stock; 48 46 private final Exchange exchange; 49 47 50 48 /** 51 * Creates a downloader for a given equitywhose data will be downloaded.49 * Creates a downloader for a given stock whose data will be downloaded. 52 50 * 53 * @param equity the equity51 * @param stock the stock 54 52 */ 55 public YahooEODWebDownloader( Equity equity) {56 this. equity = equity;57 this.exchange = equity.getExchange();53 public YahooEODWebDownloader(Stock stock) { 54 this.stock = stock; 55 this.exchange = stock.getExchange(); 58 56 } 59 57 60 public Equity getEquity() {61 return equity;58 public Stock getStock() { 59 return stock; 62 60 } 63 61 64 62 @Override 65 public SequentialCache< EquityEOD> getCache(final DateTime begin, final DateTime end) {63 public SequentialCache<StockEOD> getCache(final DateTime begin, final DateTime end) { 66 64 // URL 67 65 String inputURL = String.format("http://ichart.finance.yahoo.com/table.csv?s=%s&d=%d&e=%d&f=%d&g=d&a=%d&b=%d&c=%d&ignore=.csv", 68 get Equity().getSymbol(),66 getStock().getSymbol(), 69 67 end.getMonthOfYear() - 1, 70 68 end.getDayOfMonth(), … … 85 83 } 86 84 87 return new SequentialCache< EquityEOD>() {85 return new SequentialCache<StockEOD>() { 88 86 /** 89 87 * Gets the Yahoo! data entry in ascending order of timestamps. … … 92 90 */ 93 91 @Override 94 public Iterator<TimedEntry< EquityEOD>> iterator() {95 return new FilterIterator<TimedEntry< EquityEOD>>(96 new AbstractReadOnlyIterator<TimedEntry< EquityEOD>>() {92 public Iterator<TimedEntry<StockEOD>> iterator() { 93 return new FilterIterator<TimedEntry<StockEOD>>( 94 new AbstractReadOnlyIterator<TimedEntry<StockEOD>>() { 97 95 private final ListIterator<String> it = lines.listIterator(lines.size()); 98 96 … … 103 101 104 102 @Override 105 public TimedEntry< EquityEOD> next() {103 public TimedEntry<StockEOD> next() { 106 104 String[] line = it.previous().split(","); 107 TimedEntry< EquityEOD> entry =108 line[0].matches("(?i).*Date|Open|High|Low|Close|Volume|Adj.*")109 ? null110 : parseYahooLine(line);105 TimedEntry<StockEOD> entry = 106 line[0].matches("(?i).*Date|Open|High|Low|Close|Volume|Adj.*") 107 ? null 108 : parseYahooLine(line); 111 109 return entry; 112 110 } 113 111 }, 114 new Predicate<TimedEntry< EquityEOD>>() {112 new Predicate<TimedEntry<StockEOD>>() { 115 113 @Override 116 public boolean evaluate(TimedEntry< EquityEOD> entry) {114 public boolean evaluate(TimedEntry<StockEOD> entry) { 117 115 return entry != null; // filter null entry 118 116 } … … 123 121 124 122 /** 125 * Constructs {@code TimedEntry< EquityEOD>} from Yahoo! string array.123 * Constructs {@code TimedEntry<StockEOD>} from Yahoo! string array. 126 124 * 127 125 * @param line 128 126 * @return 129 127 */ 130 private TimedEntry< EquityEOD> parseYahooLine(String[] line) {128 private TimedEntry<StockEOD> parseYahooLine(String[] line) { 131 129 String[] timeParts = line[0].split("-"); 132 130 DateTime date = new DateTime( … … 140 138 exchange.timeZone); 141 139 142 TimedEntry< EquityEOD> entry = new TimedEntry<EquityEOD>(140 TimedEntry<StockEOD> entry = new TimedEntry<StockEOD>( 143 141 date, 144 new EquityEOD(142 new StockEOD( 145 143 Double.parseDouble(line[1]),//open 146 144 Double.parseDouble(line[2]),//high … … 149 147 Double.parseDouble(line[5]),//volume 150 148 Double.parseDouble(line[6])//adjClose 151 ));149 )); 152 150 153 151 return entry; -
core/src/main/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/YahooProductUtils.java
r1366 r1495 26 26 import com.numericalmethod.algoquant.data.historicaldata.yahoo.api.YahooPropertyLoader; 27 27 import com.numericalmethod.algoquant.execution.product.Product; 28 import com.numericalmethod.algoquant.execution.product.equity. Equity;28 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 29 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 30 30 import java.util.ArrayList; … … 61 61 products.add(new Product() { 62 62 { 63 add(new Equity(symbol, exchange));63 add(new Stock(symbol, exchange)); 64 64 } 65 65 -
core/src/main/java/com/numericalmethod/algoquant/data/type/StockEOD.java
r1484 r1495 29 29 * @author Haksun Li 30 30 */ 31 public class EquityEOD extends OHLC implements Subscribable {31 public class StockEOD extends OHLC implements Subscribable { 32 32 33 33 private final double volume; 34 34 private final double adjClose; 35 35 36 public EquityEOD(double open, double high, double low, double close, double volume,36 public StockEOD(double open, double high, double low, double close, double volume, 37 37 double adjClose) { 38 38 super(open, high, low, close); -
core/src/main/java/com/numericalmethod/algoquant/data/type/portfolio/PortfolioGenerator.java
r1366 r1495 23 23 package com.numericalmethod.algoquant.data.type.portfolio; 24 24 25 import com.numericalmethod.algoquant.execution.product.equity. Equity;25 import com.numericalmethod.algoquant.execution.product.equity.Stock; 26 26 import java.util.Set; 27 27 … … 40 40 * @return the generated portfolio 41 41 */ 42 public Portfolio< Equity> newPortfolio(Set<Equity> equities);42 public Portfolio<Stock> newPortfolio(Set<Stock> equities); 43 43 } -
core/src/main/java/com/numericalmethod/algoquant/execution/product/ProductUtils.java
r1366 r1495 23 23 package com.numericalmethod.algoquant.execution.product; 24 24 25 import com.numericalmethod.algoquant.execution.product.equity.Equity;26 25 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 27 import java.util.ArrayList; 28 import java.util.Currency; 29 import java.util.List; 26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 import java.util.*; 30 28 31 29 /** … … 80 78 81 79 /** 82 * Creates an equityproduct with its symbol, trading exchange, and denomination currency.80 * Creates an stock product with its symbol, trading exchange, and denomination currency. 83 81 * 84 82 * @param symbol the symbol of the product … … 87 85 * @return the product 88 86 */ 89 public static Product newEquityProduct( 90 final String symbol, 91 final Exchange exchange, 92 final Currency currency) { 87 public static Product newStockProduct(final String symbol, 88 final Exchange exchange, 89 final Currency currency) { 93 90 return new Product() { 94 91 { 95 add(new Equity(symbol, exchange));92 add(new Stock(symbol, exchange)); 96 93 } 97 94 … … 117 114 * @return the list of created products 118 115 */ 119 public static List<Product> newEquityProductList( 120 String[] symbols, 121 Exchange exchange, 122 Currency currency) { 116 public static List<Product> newStockProductList(String[] symbols, 117 Exchange exchange, 118 Currency currency) { 123 119 List<Product> products = new ArrayList<Product>(symbols.length); 124 120 125 121 for (String symbol : symbols) { 126 products.add(ProductUtils.new EquityProduct(symbol, exchange, currency));122 products.add(ProductUtils.newStockProduct(symbol, exchange, currency)); 127 123 } 128 124 -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/Stock.java
r1484 r1495 26 26 27 27 /** 28 * This class represents a n equity product.28 * This class represents a stock. 29 29 * 30 30 * @author Haksun Li 31 31 */ 32 public class Equity implements ProductProperty{32 public class Stock implements ProductProperty, Comparable<Stock> { 33 33 34 34 /** … … 41 41 private final Exchange exchange; 42 42 43 public Equity(String symbol, Exchange exchange) {43 public Stock(String symbol, Exchange exchange) { 44 44 this.symbol = symbol; 45 45 this.exchange = exchange; … … 52 52 public Exchange getExchange() { 53 53 return exchange; 54 } 55 56 @Override 57 public int compareTo(Stock that) { 58 return this.getSymbol().compareTo(that.getSymbol()); 54 59 } 55 60 … … 68 73 return false; 69 74 } 70 final Equity other = (Equity) obj;75 final Stock other = (Stock) obj; 71 76 if ((this.getSymbol() == null) ? (other.getSymbol() != null) : !this.symbol.equals(other.symbol)) { 72 77 return false; … … 85 90 return hash; 86 91 } 92 87 93 } -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/hkex/HK0005.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.execution.product.HKDProduct; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 28 28 … … 34 34 35 35 private HK0005() {//singleton 36 add(new Equity("0005.HK", Exchange.HKEX));36 add(new Stock("0005.HK", Exchange.HKEX)); 37 37 } 38 38 -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/hkex/HKEXProduct.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.execution.product.HKDProduct; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 28 28 … … 34 34 35 35 public HKEXProduct(String symbol) { 36 add(new Equity(symbol, Exchange.HKEX));36 add(new Stock(symbol, Exchange.HKEX)); 37 37 } 38 38 39 39 @Override 40 40 public String name() { 41 return this.as( Equity.class).getSymbol();41 return this.as(Stock.class).getSymbol(); 42 42 } 43 43 } -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/hkex/HSI.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.execution.product.HKDProduct; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 28 28 … … 34 34 35 35 private HSI() {//singleton 36 add(new Equity("^HSI", Exchange.HKEX));36 add(new Stock("^HSI", Exchange.HKEX)); 37 37 } 38 38 -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/sgx/SGXProduct.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.execution.product.SGDProduct; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 28 28 … … 34 34 35 35 public SGXProduct(String symbol) { 36 add(new Equity(symbol, Exchange.SGX));36 add(new Stock(symbol, Exchange.SGX)); 37 37 } 38 38 39 39 @Override 40 40 public String name() { 41 return this.as( Equity.class).getSymbol();41 return this.as(Stock.class).getSymbol(); 42 42 } 43 43 } -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/GSPC.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.execution.product.USDProduct; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 28 28 … … 38 38 39 39 private GSPC() {//singleton 40 add(new Equity("^GSPC", Exchange.NEW_YORK));40 add(new Stock("^GSPC", Exchange.NEW_YORK)); 41 41 } 42 42 -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/SP500.java
r1366 r1495 26 26 import com.numericalmethod.algoquant.execution.product.Product; 27 27 import com.numericalmethod.algoquant.execution.product.ProductUtils; 28 import com.numericalmethod.algoquant.execution.product.equity. Equity;28 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 29 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 30 30 import static com.numericalmethod.algoquant.execution.product.equity.Exchange.*; … … 39 39 /** 40 40 * This enum contains the 500 components in S&P 500. Information for each stock 41 * like symbol, company name, exchange, {@link Equity} instance and41 * like symbol, company name, exchange, {@link Stock} instance and 42 42 * {@link Product} instance can be obtained from the corresponding enum value. 43 43 * … … 566 566 567 567 public Product getProduct() { 568 return ProductUtils.new EquityProduct(symbol, exchange, USD);569 } 570 571 public Equity getEquity() {572 return new Equity(symbol, exchange);568 return ProductUtils.newStockProduct(symbol, exchange, USD); 569 } 570 571 public Stock getStock() { 572 return new Stock(symbol, exchange); 573 573 } 574 574 … … 599 599 } 600 600 601 public static List< Equity> getAllEquities() {601 public static List<Stock> getAllEquities() { 602 602 return getEquities(EnumSet.allOf(SP500.class)); 603 603 } 604 604 605 public static List< Equity> getEquities(Set<SP500> stocks) {606 List< Equity> equities = new ArrayList<Equity>(stocks.size());605 public static List<Stock> getEquities(Set<SP500> stocks) { 606 List<Stock> equities = new ArrayList<Stock>(stocks.size()); 607 607 for (SP500 stock : stocks) { 608 equities.add(stock.get Equity());608 equities.add(stock.getStock()); 609 609 } 610 610 return equities; -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/VFINX.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.execution.product.USDProduct; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 28 28 … … 37 37 38 38 private VFINX() {//singleton 39 add(new Equity("VFINX", Exchange.NEW_YORK));39 add(new Stock("VFINX", Exchange.NEW_YORK)); 40 40 } 41 41 -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nasdaq/AAPL.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.execution.product.USDProduct; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 28 28 … … 40 40 41 41 private AAPL() {//singleton 42 add(new Equity("AAPL", Exchange.NASDAQ));42 add(new Stock("AAPL", Exchange.NASDAQ)); 43 43 } 44 44 -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nasdaq/GOOG.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.execution.product.USDProduct; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 28 28 … … 35 35 36 36 private GOOG() {//singleton 37 add(new Equity("GOOG", Exchange.NASDAQ));37 add(new Stock("GOOG", Exchange.NASDAQ)); 38 38 } 39 39 -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nasdaq/IBM.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.execution.product.USDProduct; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 28 28 … … 35 35 36 36 private IBM() {//singleton 37 add(new Equity("IBM", Exchange.NASDAQ));37 add(new Stock("IBM", Exchange.NASDAQ)); 38 38 } 39 39 -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nasdaq/MSFT.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.execution.product.USDProduct; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 28 28 … … 35 35 36 36 private MSFT() {//singleton 37 add(new Equity("MSFT", Exchange.NASDAQ));37 add(new Stock("MSFT", Exchange.NASDAQ)); 38 38 } 39 39 -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nasdaq/NASDAQ100.java
r1455 r1495 28 28 import com.numericalmethod.algoquant.data.historicaldata.yahoo.YahooEOD; 29 29 import com.numericalmethod.algoquant.data.structure.TimedEntry; 30 import com.numericalmethod.algoquant.data.type. EquityEOD;30 import com.numericalmethod.algoquant.data.type.StockEOD; 31 31 import com.numericalmethod.algoquant.execution.product.Product; 32 32 import com.numericalmethod.algoquant.execution.product.USDProduct; 33 import com.numericalmethod.algoquant.execution.product.equity. Equity;33 import com.numericalmethod.algoquant.execution.product.equity.Stock; 34 34 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 35 35 import com.numericalmethod.nmutils.iterator.AbstractReadOnlyIterator; … … 87 87 88 88 { 89 add(new Equity(name, Exchange.NASDAQ));89 add(new Stock(name, Exchange.NASDAQ)); 90 90 } 91 91 … … 102 102 } 103 103 104 public Map<Product, SequentialCache< EquityEOD>> getDepthCaches(DateTime begin, DateTime end) {105 Map<Product, SequentialCache< EquityEOD>> map = new HashMap<Product, SequentialCache<EquityEOD>>();104 public Map<Product, SequentialCache<StockEOD>> getDepthCaches(DateTime begin, DateTime end) { 105 Map<Product, SequentialCache<StockEOD>> map = new HashMap<Product, SequentialCache<StockEOD>>(); 106 106 107 107 for (Iterator<USDProduct> it = iterator(); it.hasNext();) { 108 108 Product product = it.next(); 109 YahooEOD yahoo = new YahooEOD(product.as( Equity.class), "./log", "./log");110 SequentialCache< EquityEOD> cache = yahoo.getCache(begin, end);109 YahooEOD yahoo = new YahooEOD(product.as(Stock.class), "./log", "./log"); 110 SequentialCache<StockEOD> cache = yahoo.getCache(begin, end); 111 111 map.put(product, cache); 112 112 } … … 116 116 117 117 public Matrix getMatrix(DateTime begin, DateTime end) { 118 AbstractCacheTransformer< EquityEOD, Double> transformer =119 new AbstractCacheTransformer< EquityEOD, Double>() {118 AbstractCacheTransformer<StockEOD, Double> transformer = 119 new AbstractCacheTransformer<StockEOD, Double>() { 120 120 @Override 121 public TimedEntry<Double> transform(TimedEntry< EquityEOD> entry) {121 public TimedEntry<Double> transform(TimedEntry<StockEOD> entry) { 122 122 return new TimedEntry<Double>(entry.getTime(), entry.getData().getAdjClose()); 123 123 } … … 125 125 126 126 List<SequentialCache<Double>> list = new ArrayList<SequentialCache<Double>>(); 127 Map<Product, SequentialCache< EquityEOD>> map = getDepthCaches(begin, end);128 for (SequentialCache< EquityEOD> cache0 : map.values()) {127 Map<Product, SequentialCache<StockEOD>> map = getDepthCaches(begin, end); 128 for (SequentialCache<StockEOD> cache0 : map.values()) { 129 129 SequentialCache<Double> cache1 = transformer.doProcess(cache0); 130 130 list.add(cache1); -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nasdaq/ORCL.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.execution.product.USDProduct; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 28 28 … … 35 35 36 36 private ORCL() {//singleton 37 add(new Equity("ORCL", Exchange.NASDAQ));37 add(new Stock("ORCL", Exchange.NASDAQ)); 38 38 } 39 39 -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nyse/ERO.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.execution.product.USDProduct; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 28 28 … … 38 38 39 39 private ERO() {//singleton 40 add(new Equity("ERO", Exchange.NYSE_ARCA));40 add(new Stock("ERO", Exchange.NYSE_ARCA)); 41 41 } 42 42 -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nyse/GBB.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.execution.product.USDProduct; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 28 28 … … 38 38 39 39 private GBB() {//singleton 40 add(new Equity("GBB", Exchange.NYSE_ARCA));40 add(new Stock("GBB", Exchange.NYSE_ARCA)); 41 41 } 42 42 -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nyse/JYN.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.execution.product.USDProduct; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 28 28 … … 41 41 42 42 private JYN() {//singleton 43 add(new Equity("JYN", Exchange.NYSE_ARCA));43 add(new Stock("JYN", Exchange.NYSE_ARCA)); 44 44 } 45 45 -
core/src/main/java/com/numericalmethod/algoquant/execution/product/equity/usa/nyse/NYSEProduct.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.execution.product.USDProduct; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 28 28 … … 34 34 35 35 public NYSEProduct(String symbol) { 36 add(new Equity(symbol, Exchange.NYSE));36 add(new Stock(symbol, Exchange.NYSE)); 37 37 } 38 38 39 39 @Override 40 40 public String name() { 41 return this.as( Equity.class).getSymbol();41 return this.as(Stock.class).getSymbol(); 42 42 } 43 43 } -
core/src/main/java/com/numericalmethod/algoquant/execution/simulator/handler/ChannelMessageHandlerFactories.java
r1401 r1495 23 23 package com.numericalmethod.algoquant.execution.simulator.handler; 24 24 25 import com.numericalmethod.algoquant.data.type.Depth; 26 import com.numericalmethod.algoquant.data.type.EquityEOD; 27 import com.numericalmethod.algoquant.data.type.Execution; 25 import com.numericalmethod.algoquant.data.type.*; 28 26 import com.numericalmethod.algoquant.execution.simulator.subscription.ChannelMessage; 29 27 import com.numericalmethod.algoquant.execution.simulator.subscription.Subscribable; 30 28 import com.numericalmethod.algoquant.execution.simulator.subscription.timer.TimerEvent; 31 import com.numericalmethod.algoquant.execution.strategy.handler.DepthHandler; 32 import com.numericalmethod.algoquant.execution.strategy.handler.EquityEODHandler; 33 import com.numericalmethod.algoquant.execution.strategy.handler.ExecutionHandler; 34 import com.numericalmethod.algoquant.execution.strategy.handler.TimerHandler; 35 import com.numericalmethod.algoquant.execution.strategy.handler.UpdateHandler; 29 import com.numericalmethod.algoquant.execution.strategy.handler.*; 36 30 37 31 /** … … 47 41 */ 48 42 DEPTH(Depth.class) { 49 @Override50 public ChannelMessageHandler newHandler(UpdateHandler handler) {43 @Override 44 public ChannelMessageHandler newHandler(UpdateHandler handler) { 51 45 52 if (handler instanceof DepthHandler) { 53 return new DepthMessageHandler((DepthHandler) handler); 46 if (handler instanceof DepthHandler) { 47 return new DepthMessageHandler((DepthHandler) handler); 48 } 49 50 return new NoOpMessageHandler(); 54 51 } 55 56 return new NoOpMessageHandler(); 57 } 58 }, 52 }, 59 53 /** 60 54 * Factory for {@link ChannelMessageHandler} of {@link Execution}. 61 55 */ 62 56 EXECUTION(Execution.class) { 63 @Override64 public ChannelMessageHandler newHandler(UpdateHandler handler) {57 @Override 58 public ChannelMessageHandler newHandler(UpdateHandler handler) { 65 59 66 if (handler instanceof ExecutionHandler) { 67 return new ExecutionMessageHandler((ExecutionHandler) handler); 60 if (handler instanceof ExecutionHandler) { 61 return new ExecutionMessageHandler((ExecutionHandler) handler); 62 } 63 64 return new NoOpMessageHandler(); 68 65 } 66 }, 67 /** 68 * Factory for {@link ChannelMessageHandler} of {@link StockEOD}. 69 */ 70 STOCK_EOD(StockEOD.class) { 71 @Override 72 public ChannelMessageHandler newHandler(UpdateHandler handler) { 69 73 70 return new NoOpMessageHandler(); 71 } 72 }, 73 /** 74 * Factory for {@link ChannelMessageHandler} of {@link EquityEOD}. 75 */ 76 EQUITY_EOD(EquityEOD.class) { 77 @Override 78 public ChannelMessageHandler newHandler(UpdateHandler handler) { 74 if (handler instanceof StockEODHandler) { 75 return new StockEODMessageHandler((StockEODHandler) handler); 76 } 79 77 80 if (handler instanceof EquityEODHandler) { 81 return new EquityEODMessageHandler((EquityEODHandler) handler); 78 return new NoOpMessageHandler(); 82 79 } 83 84 return new NoOpMessageHandler(); 85 } 86 }, 80 }, 87 81 /** 88 82 * Factory for {@link ChannelMessageHandler} of {@link TimerEvent}. 89 83 */ 90 84 TIMER(TimerEvent.class) { 91 @Override92 public ChannelMessageHandler newHandler(UpdateHandler handler) {85 @Override 86 public ChannelMessageHandler newHandler(UpdateHandler handler) { 93 87 94 if (handler instanceof TimerHandler) { 95 return new TimerMessageHandler((TimerHandler) handler); 88 if (handler instanceof TimerHandler) { 89 return new TimerMessageHandler((TimerHandler) handler); 90 } 91 92 return new NoOpMessageHandler(); 96 93 } 97 98 return new NoOpMessageHandler(); 99 } 100 }; 94 }; 101 95 private final Class<? extends Subscribable> subscriberClass; 102 96 -
core/src/main/java/com/numericalmethod/algoquant/execution/simulator/handler/StockEODMessageHandler.java
r1484 r1495 23 23 package com.numericalmethod.algoquant.execution.simulator.handler; 24 24 25 import com.numericalmethod.algoquant.data.type. EquityEOD;25 import com.numericalmethod.algoquant.data.type.StockEOD; 26 26 import com.numericalmethod.algoquant.execution.simulator.subscription.ChannelMessage; 27 import com.numericalmethod.algoquant.execution.strategy.handler. EquityEODHandler;27 import com.numericalmethod.algoquant.execution.strategy.handler.StockEODHandler; 28 28 29 29 /** 30 30 * A implementation of {@link ChannelMessageHandler} which handles a 31 * {@link ChannelMessage} using the underlying {@link EquityEODHandler} instance.31 * {@link ChannelMessage} using the underlying {@link StockEODHandler} instance. 32 32 * 33 33 * @author Chung Lee 34 34 */ 35 public class EquityEODMessageHandler implements ChannelMessageHandler {35 public class StockEODMessageHandler implements ChannelMessageHandler { 36 36 37 private final EquityEODHandler equityEODHandler;37 private final StockEODHandler stockEODHandler; 38 38 39 public EquityEODMessageHandler(EquityEODHandler equityEODHandler) {40 this. equityEODHandler = equityEODHandler;39 public StockEODMessageHandler(StockEODHandler stockEODHandler) { 40 this.stockEODHandler = stockEODHandler; 41 41 } 42 42 43 43 @Override 44 44 public void handleMessage(ChannelMessage msg) { 45 equityEODHandler.onEODUpdate(45 stockEODHandler.onEODUpdate( 46 46 msg.getTime(), 47 ( EquityEOD) msg.getData(),47 (StockEOD) msg.getData(), 48 48 msg.getMarketCondition(), 49 49 msg.getBlotter(), -
core/src/main/java/com/numericalmethod/algoquant/execution/strategy/handler/StockEODHandler.java
r1484 r1495 23 23 package com.numericalmethod.algoquant.execution.strategy.handler; 24 24 25 import com.numericalmethod.algoquant.data.type. EquityEOD;25 import com.numericalmethod.algoquant.data.type.StockEOD; 26 26 import com.numericalmethod.algoquant.data.type.MarketCondition; 27 27 import com.numericalmethod.algoquant.execution.component.tradeblotter.TradeBlotter; … … 30 30 31 31 /** 32 * Interface for a strategy to implement for listening to {@link EquityEOD} updates in a simulation.32 * Interface for a strategy to implement for listening to {@link StockEOD} updates in a simulation. 33 33 * 34 34 * @author Chung Lee 35 35 */ 36 public interface EquityEODHandler extends UpdateHandler {36 public interface StockEODHandler extends UpdateHandler { 37 37 38 38 /** … … 47 47 public void onEODUpdate( 48 48 DateTime now, 49 EquityEOD eod,49 StockEOD eod, 50 50 MarketCondition mc, 51 51 TradeBlotter blotter, -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/FactorValueEvaluator.java
r1366 r1495 25 25 import com.numericalmethod.algoquant.data.cache.RandomAccessCache; 26 26 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 27 import com.numericalmethod.algoquant.execution.product.equity. Equity;27 import com.numericalmethod.algoquant.execution.product.equity.Stock; 28 28 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 29 29 import static com.numericalmethod.nmutils.collection.CollectionUtils.*; 30 import java.util.Collection; 31 import java.util.List; 32 import java.util.Map; 30 import java.util.*; 33 31 import org.joda.time.DateTime; 34 32 … … 51 49 52 50 public FactorValueLookup evaluateForEquities( 53 Collection< Equity> equities,51 Collection<Stock> stocks, 54 52 DateTime time) { 55 EquityFactorValues factorValues = new EquityFactorValues();53 StockFactorValues factorValues = new StockFactorValues(); 56 54 57 55 for (Factor factor : factors) { 58 Map< Equity, Double> currentFactorResults = newHashMap();59 for ( Equity equity : equities) {60 double factorValue = factor.getFactorExposure( equity, time, marketSnapshots);61 currentFactorResults.put( equity, factorValue);56 Map<Stock, Double> currentFactorResults = newHashMap(); 57 for (Stock stock : stocks) { 58 double factorValue = factor.getFactorExposure(stock, time, marketSnapshots); 59 currentFactorResults.put(stock, factorValue); 62 60 } 63 61 -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/FactorValueLookup.java
r1492 r1495 23 23 package com.numericalmethod.algoquant.model.factormodel; 24 24 25 import com.numericalmethod.algoquant.execution.product.equity. Equity;25 import com.numericalmethod.algoquant.execution.product.equity.Stock; 26 26 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 27 27 … … 33 33 public interface FactorValueLookup { 34 34 35 public double getValue( Equity equity, Factor factor);35 public double getValue(Stock stock, Factor factor); 36 36 } -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/StockFactorValues.java
r1484 r1495 23 23 package com.numericalmethod.algoquant.model.factormodel; 24 24 25 import com.numericalmethod.algoquant.execution.product.equity. Equity;25 import com.numericalmethod.algoquant.execution.product.equity.Stock; 26 26 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 27 27 import static com.numericalmethod.nmutils.collection.CollectionUtils.*; … … 33 33 * @author Johannes Lehmann 34 34 */ 35 public class EquityFactorValues implements FactorValueLookup {35 public class StockFactorValues implements FactorValueLookup { 36 36 37 private final Map<Factor, Map< Equity, Double>> map = newHashMap(16);37 private final Map<Factor, Map<Stock, Double>> map = newHashMap(16); 38 38 39 public void put(Factor factor, Equity equity, double value) {40 Map< Equity, Double> equity2Value = map.get(factor);41 if ( equity2Value == null) {42 equity2Value = newHashMap();43 map.put(factor, equity2Value);39 public void put(Factor factor, Stock stock, double value) { 40 Map<Stock, Double> stock2Value = map.get(factor); 41 if (stock2Value == null) { 42 stock2Value = newHashMap(); 43 map.put(factor, stock2Value); 44 44 } 45 equity2Value.put(equity, value);45 stock2Value.put(stock, value); 46 46 } 47 47 48 public void put(Factor factor, Map< Equity, Double> factorValues) {48 public void put(Factor factor, Map<Stock, Double> factorValues) { 49 49 map.put(factor, factorValues); 50 50 } 51 51 52 public double get(Factor factor, Equity equity) {53 return map.get(factor).get( equity);52 public double get(Factor factor, Stock stock) { 53 return map.get(factor).get(stock); 54 54 } 55 55 56 56 @Override 57 public double getValue( Equity equity, Factor factor) {58 return get(factor, equity);57 public double getValue(Stock stock, Factor factor) { 58 return get(factor, stock); 59 59 } 60 60 … … 62 62 public String toString() { 63 63 StringBuilder sb = new StringBuilder(); 64 for (Map.Entry<Factor, Map< Equity, Double>> entry : map.entrySet()) {65 for (Map.Entry< Equity, Double> entry1 : entry.getValue().entrySet()) {66 sb.append(String.format("factor: %s -> ( equity: %s, value: %f)%n", entry.getKey().getClass().getSimpleName(), entry1.getKey().getSymbol(), entry1.getValue()));64 for (Map.Entry<Factor, Map<Stock, Double>> entry : map.entrySet()) { 65 for (Map.Entry<Stock, Double> entry1 : entry.getValue().entrySet()) { 66 sb.append(String.format("factor: %s -> (stock: %s, value: %f)%n", entry.getKey().getClass().getSimpleName(), entry1.getKey().getSymbol(), entry1.getValue())); 67 67 } 68 68 } -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/amp2008/ZeroCostByFactorsPortfolioGenerator.java
r1492 r1495 28 28 import com.numericalmethod.algoquant.data.type.portfolio.*; 29 29 import com.numericalmethod.algoquant.data.type.portfolio.weighting.ZeroCostWeighting; 30 import com.numericalmethod.algoquant.execution.product.equity. Equity;30 import com.numericalmethod.algoquant.execution.product.equity.Stock; 31 31 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 32 32 import static com.numericalmethod.nmutils.collection.CollectionUtils.*; … … 43 43 * 44 44 * <ol> 45 * <li>Factor exposures (such as book-to-market ratio) are calculated for each equity.45 * <li>Factor exposures (such as book-to-market ratio) are calculated for each stock. 46 46 * <li>The calculated exposures are standardized in its group, as defined by the given 47 47 * {@link GroupGranularity}. … … 104 104 private final RandomAccessCache<MarketSnapshot> marketSnapshotCache; 105 105 private final Map<String, CompanyInfo> companyInfos; 106 private final ZeroCostWeighting< Equity> weighting;106 private final ZeroCostWeighting<Stock> weighting; 107 107 private final GroupGranularity granularity; 108 108 … … 116 116 */ 117 117 public Builder(RandomAccessCache<MarketSnapshot> marketSnapshotCache, 118 Map<String, CompanyInfo> companyInfos, ZeroCostWeighting< Equity> weighting,118 Map<String, CompanyInfo> companyInfos, ZeroCostWeighting<Stock> weighting, 119 119 GroupGranularity granularity) { 120 120 this.marketSnapshotCache = marketSnapshotCache; … … 129 129 * 130 130 * @param factor the factor the portfolio generation is based on 131 * @param time the time at which the factor exposure of each equityis used for the131 * @param time the time at which the factor exposure of each stock is used for the 132 132 * generation 133 133 * @return the portfolio generator based on the given factor … … 140 140 private final RandomAccessCache<MarketSnapshot> marketSnapshotCache; 141 141 private final Map<String, CompanyInfo> companyInfos; 142 private final ZeroCostWeighting< Equity> weighting;142 private final ZeroCostWeighting<Stock> weighting; 143 143 private final GroupGranularity granularity; 144 144 private final Factor factor; … … 146 146 147 147 ZeroCostByFactorsPortfolioGenerator(RandomAccessCache<MarketSnapshot> marketSnapshotCache, 148 Map<String, CompanyInfo> companyInfos, ZeroCostWeighting< Equity> weighting,148 Map<String, CompanyInfo> companyInfos, ZeroCostWeighting<Stock> weighting, 149 149 GroupGranularity granularity, Factor factor, DateTime time) { 150 150 this.marketSnapshotCache = marketSnapshotCache; … … 157 157 158 158 @Override 159 public Portfolio< Equity> newPortfolio(Set<Equity> equities) {160 Map< Equity, Double> exposures = getFactorExposures(factor, equities, time);161 Map< Equity, Double> zScores = standardize(exposures);162 Map< Equity, Double> weights = weighting.computeWeights(zScores);163 return PortfolioUtils.normalize(new Portfolio< Equity>(weights));164 } 165 166 private Map< Equity, Double> getFactorExposures(Factor factor, Collection<Equity> equities,167 DateTime time) {168 Map< Equity, Double> factorExposures = newHashMap();169 170 for ( Equity equity : equities) {171 factorExposures.put( equity, factor.getFactorExposure(equity, time, marketSnapshotCache));159 public Portfolio<Stock> newPortfolio(Set<Stock> equities) { 160 Map<Stock, Double> exposures = getFactorExposures(factor, equities, time); 161 Map<Stock, Double> zScores = standardize(exposures); 162 Map<Stock, Double> weights = weighting.computeWeights(zScores); 163 return PortfolioUtils.normalize(new Portfolio<Stock>(weights)); 164 } 165 166 private Map<Stock, Double> getFactorExposures(Factor factor, Collection<Stock> stocks, 167 DateTime time) { 168 Map<Stock, Double> factorExposures = newHashMap(); 169 170 for (Stock stock : stocks) { 171 factorExposures.put(stock, factor.getFactorExposure(stock, time, marketSnapshotCache)); 172 172 } 173 173 … … 175 175 } 176 176 177 private Map< Equity, Double> standardize(Map<Equity, Double> equityFactorValues) { // TODO: extract z-score analysis178 Map<String, List<Double>> groupValues = getGroupValues( equityFactorValues);177 private Map<Stock, Double> standardize(Map<Stock, Double> stockFactorValues) { // TODO: extract z-score analysis 178 Map<String, List<Double>> groupValues = getGroupValues(stockFactorValues); 179 179 180 180 Map<String, Double> averagePerGroup = newHashMap(); // group id -> average … … 192 192 } 193 193 194 return standardizePerGroup( equityFactorValues, averagePerGroup, stDevPerGroup);195 } 196 197 private Map<String, List<Double>> getGroupValues(Map< Equity, Double> equityFactorValues) {198 Map<String, List<Double>> groupValues = initializeEmptyListPerGroup( equityFactorValues);199 for (Map.Entry< Equity, Double> entry : equityFactorValues.entrySet()) {194 return standardizePerGroup(stockFactorValues, averagePerGroup, stDevPerGroup); 195 } 196 197 private Map<String, List<Double>> getGroupValues(Map<Stock, Double> stockFactorValues) { 198 Map<String, List<Double>> groupValues = initializeEmptyListPerGroup(stockFactorValues); 199 for (Map.Entry<Stock, Double> entry : stockFactorValues.entrySet()) { 200 200 String groupId = getGroupId(entry.getKey()); 201 201 groupValues.get(groupId).add(entry.getValue()); … … 206 206 207 207 private Map<String, List<Double>> initializeEmptyListPerGroup( 208 Map< Equity, Double> equityFactorValues) {208 Map<Stock, Double> stockFactorValues) { 209 209 Map<String, List<Double>> groupValues = newHashMap(); 210 for (Map.Entry< Equity, Double> entry : equityFactorValues.entrySet()) {211 Equity equity= entry.getKey();212 String groupId = getGroupId( equity);210 for (Map.Entry<Stock, Double> entry : stockFactorValues.entrySet()) { 211 Stock stock = entry.getKey(); 212 String groupId = getGroupId(stock); 213 213 if (!groupValues.containsKey(groupId)) { 214 214 groupValues.put(groupId, new ArrayList<Double>(10)); … … 218 218 } 219 219 220 private Map< Equity, Double> standardizePerGroup(221 Map< Equity, Double> equityFactorValues,220 private Map<Stock, Double> standardizePerGroup( 221 Map<Stock, Double> stockFactorValues, 222 222 Map<String, Double> averagePerGroup, 223 223 Map<String, Double> stDevPerGroup) { 224 224 // compute z scores for each stock 225 Map< Equity, Double> zScores = newHashMap();226 for (Map.Entry< Equity, Double> equityValue : equityFactorValues.entrySet()) {227 String groupId = getGroupId( equityValue.getKey());225 Map<Stock, Double> zScores = newHashMap(); 226 for (Map.Entry<Stock, Double> stockValue : stockFactorValues.entrySet()) { 227 String groupId = getGroupId(stockValue.getKey()); 228 228 229 229 // standardize the factor exposure (per group) to make values of equities from different groups can be compared 230 double zScore = ( equityValue.getValue() - averagePerGroup.get(groupId)) / stDevPerGroup.get(groupId);231 232 zScores.put( equityValue.getKey(), zScore);230 double zScore = (stockValue.getValue() - averagePerGroup.get(groupId)) / stDevPerGroup.get(groupId); 231 232 zScores.put(stockValue.getKey(), zScore); 233 233 } 234 234 return zScores; 235 235 } 236 236 237 private String getGroupId( Equity equity) {238 return granularity.getGroupId(companyInfos.get( equity.getSymbol()));237 private String getGroupId(Stock stock) { 238 return granularity.getGroupId(companyInfos.get(stock.getSymbol())); 239 239 } 240 240 } -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/backtest/AnnualizedSummaryBacktester.java
r1366 r1495 27 27 import com.numericalmethod.algoquant.data.structure.TimedEntry; 28 28 import com.numericalmethod.algoquant.data.type.portfolio.Portfolio; 29 import com.numericalmethod.algoquant.execution.product.equity. Equity;29 import com.numericalmethod.algoquant.execution.product.equity.Stock; 30 30 import com.numericalmethod.algoquant.model.factormodel.backtest.Backtester.IterationBody; 31 31 import static com.numericalmethod.algoquant.model.returns.ReturnCalculators.*; 32 32 import static com.numericalmethod.nmutils.collection.CollectionUtils.*; 33 import java.util.ArrayList; 34 import java.util.List; 35 import java.util.Map; 33 import java.util.*; 36 34 import org.joda.time.DateTime; 37 35 … … 54 52 55 53 public BacktestResult backtest( 56 Portfolio< Equity> portfolio,54 Portfolio<Stock> portfolio, 57 55 DateTime startDate, 58 56 DateTime endDate) { … … 69 67 } 70 68 71 private double getTotalReturns(Map< Equity, Double> portfolioWeights, DateTime startDate,72 DateTime endDate) {73 double initialValue = getTotalPortfolioValueFrom EquityValues(portfolioWeights);74 final Map< Equity, Double> currentEquityValues = newHashMap(portfolioWeights);69 private double getTotalReturns(Map<Stock, Double> portfolioWeights, DateTime startDate, 70 DateTime endDate) { 71 double initialValue = getTotalPortfolioValueFromStockValues(portfolioWeights); 72 final Map<Stock, Double> currentStockValues = newHashMap(portfolioWeights); 75 73 backtest.performIteration(startDate, endDate, new IterationBody() { 76 74 @Override 77 75 public void step(TimedEntry<MarketSnapshot> previousSnapshot, 78 TimedEntry<MarketSnapshot> currentSnapshot) {79 BacktestUtils.update EquityValues(currentEquityValues, previousSnapshot.getData(), currentSnapshot.getData());76 TimedEntry<MarketSnapshot> currentSnapshot) { 77 BacktestUtils.updateStockValues(currentStockValues, previousSnapshot.getData(), currentSnapshot.getData()); 80 78 } 81 79 }); 82 double currentValue = BacktestUtils.computeSum(current EquityValues.values());80 double currentValue = BacktestUtils.computeSum(currentStockValues.values()); 83 81 double totalReturn = SIMPLE.computeReturn(initialValue, currentValue); 84 82 return totalReturn; 85 83 } 86 84 87 private double getTotalPortfolioValueFrom EquityValues(Map<Equity, Double> currentEquityValues) {88 return BacktestUtils.computeSum(current EquityValues.values());85 private double getTotalPortfolioValueFromStockValues(Map<Stock, Double> currentStockValues) { 86 return BacktestUtils.computeSum(currentStockValues.values()); 89 87 } 90 88 91 private List<Double> getDailyMarginalReturns(Map< Equity, Double> portfolioWeights,92 DateTime startDate, DateTime endDate) {89 private List<Double> getDailyMarginalReturns(Map<Stock, Double> portfolioWeights, 90 DateTime startDate, DateTime endDate) { 93 91 final List<Double> dailyMarginalReturns = new ArrayList<Double>(); 94 final Map< Equity, Double> currentEquityValues = newHashMap(portfolioWeights);92 final Map<Stock, Double> currentStockValues = newHashMap(portfolioWeights); 95 93 96 94 backtest.performIteration(startDate, endDate, new IterationBody() { 97 95 @Override 98 96 public void step(TimedEntry<MarketSnapshot> previousSnapshot, 99 TimedEntry<MarketSnapshot> currentSnapshot) {100 double lastPortfolioValue = getTotalPortfolioValueFrom EquityValues(currentEquityValues);101 BacktestUtils.update EquityValues(currentEquityValues, previousSnapshot.getData(), currentSnapshot.getData());102 double currentPortfolioValue = getTotalPortfolioValueFrom EquityValues(currentEquityValues);97 TimedEntry<MarketSnapshot> currentSnapshot) { 98 double lastPortfolioValue = getTotalPortfolioValueFromStockValues(currentStockValues); 99 BacktestUtils.updateStockValues(currentStockValues, previousSnapshot.getData(), currentSnapshot.getData()); 100 double currentPortfolioValue = getTotalPortfolioValueFromStockValues(currentStockValues); 103 101 double marginalReturn = SIMPLE.computeReturn(lastPortfolioValue, currentPortfolioValue); 104 102 dailyMarginalReturns.add(marginalReturn); -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/backtest/BacktestUtils.java
r1366 r1495 26 26 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 27 27 import com.numericalmethod.algoquant.data.structure.TimedEntry; 28 import com.numericalmethod.algoquant.execution.product.equity. Equity;28 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 29 import com.numericalmethod.algoquant.model.returns.ReturnCalculators; 30 30 import com.numericalmethod.suanshu.number.DoubleUtils; 31 31 import com.numericalmethod.suanshu.number.doublearray.DoubleArrayMath; 32 import java.util.ArrayList; 33 import java.util.Collection; 34 import java.util.List; 35 import java.util.Map; 32 import java.util.*; 36 33 import org.joda.time.DateTime; 37 34 … … 54 51 } 55 52 56 public static void update EquityValues(57 Map< Equity, Double> equityValueAccumulator,53 public static void updateStockValues( 54 Map<Stock, Double> stockValueAccumulator, 58 55 MarketSnapshot oldSnapshot, 59 56 MarketSnapshot newSnapshot) { 60 for ( Equity equity : equityValueAccumulator.keySet()) {61 double previousPeriodsPrice = equityValueAccumulator.get(equity);62 double thisPeriodsReturn = getReturnFor Equity(oldSnapshot, newSnapshot, equity);57 for (Stock stock : stockValueAccumulator.keySet()) { 58 double previousPeriodsPrice = stockValueAccumulator.get(stock); 59 double thisPeriodsReturn = getReturnForStock(oldSnapshot, newSnapshot, stock); 63 60 double currentPrice = previousPeriodsPrice * (1 + thisPeriodsReturn); 64 equityValueAccumulator.put(equity, currentPrice);61 stockValueAccumulator.put(stock, currentPrice); 65 62 } 66 63 } 67 64 68 private static double getReturnFor Equity(MarketSnapshot oldSnapshot, MarketSnapshot newSnapshot,69 Equity equity) {70 double oldPrice = oldSnapshot.getProfile( equity).getPrice();71 double newPrice = newSnapshot.getProfile( equity).getPrice();65 private static double getReturnForStock(MarketSnapshot oldSnapshot, MarketSnapshot newSnapshot, 66 Stock stock) { 67 double oldPrice = oldSnapshot.getProfile(stock).getPrice(); 68 double newPrice = newSnapshot.getProfile(stock).getPrice(); 72 69 double returnValue = ReturnCalculators.SIMPLE.computeReturn(oldPrice, newPrice); 73 70 return returnValue; … … 84 81 @Override 85 82 public void step(TimedEntry<MarketSnapshot> previousSnapshot, 86 TimedEntry<MarketSnapshot> currentSnapshot) {83 TimedEntry<MarketSnapshot> currentSnapshot) { 87 84 riskFreeReturns.add(getDailyFromAnnualRate(currentSnapshot.getData().getRiskFreeRate() / 100.0)); 88 85 } -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/backtest/MonthlyReturnsBacktester.java
r1366 r1495 27 27 import com.numericalmethod.algoquant.data.structure.TimedEntry; 28 28 import com.numericalmethod.algoquant.data.type.portfolio.Portfolio; 29 import com.numericalmethod.algoquant.execution.product.equity. Equity;29 import com.numericalmethod.algoquant.execution.product.equity.Stock; 30 30 import static com.numericalmethod.nmutils.collection.CollectionUtils.*; 31 31 import java.util.Iterator; … … 47 47 } 48 48 49 public BacktestResult backtest(Portfolio< Equity> portfolio, DateTime startDate, DateTime endDate) {49 public BacktestResult backtest(Portfolio<Stock> portfolio, DateTime startDate, DateTime endDate) { 50 50 BacktestResult result = new BacktestResult(); 51 51 result.monthlyMarginalReturns = getMonthlyMarginalReturnsFromDaily(portfolio, startDate, endDate); … … 55 55 } 56 56 57 private Map<DateTime, Double> getMonthlyMarginalReturnsFromDaily(Portfolio< Equity> portfolio,57 private Map<DateTime, Double> getMonthlyMarginalReturnsFromDaily(Portfolio<Stock> portfolio, 58 58 DateTime startDate, DateTime endDate) { 59 59 final Map<DateTime, Double> monthlyReturns = newHashMap(); … … 66 66 67 67 while (marketSnaphotsIterator.hasNext()) { 68 Map< Equity, Double> monthlyValueAccumulator = newHashMap(portfolio.getWeights());68 Map<Stock, Double> monthlyValueAccumulator = newHashMap(portfolio.getWeights()); 69 69 int currentMonth = currentSnapshot.getTime().getMonthOfYear(); 70 70 while (marketSnaphotsIterator.hasNext()) { 71 BacktestUtils.update EquityValues(monthlyValueAccumulator, previousSnapshot.getData(), currentSnapshot.getData());71 BacktestUtils.updateStockValues(monthlyValueAccumulator, previousSnapshot.getData(), currentSnapshot.getData()); 72 72 previousSnapshot = currentSnapshot; 73 73 currentSnapshot = marketSnaphotsIterator.next(); -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/factor/Beta.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.data.cache.RandomAccessCache; 26 import com.numericalmethod.algoquant.data.cache.SequentialCache;27 26 import com.numericalmethod.algoquant.data.equity.measure.CompanyMeasure; 28 27 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 29 28 import com.numericalmethod.algoquant.data.equity.snapshot.MonthlyDataFromMarketSnapshots; 30 import com.numericalmethod.algoquant.execution.product.equity. Equity;29 import com.numericalmethod.algoquant.execution.product.equity.Stock; 31 30 import com.numericalmethod.algoquant.model.factormodel.capm.CAPM; 32 31 import com.numericalmethod.algoquant.model.factormodel.capm.CAPMFromMonthlyData; … … 55 54 56 55 @Override 57 public double getFactorExposure( Equity equity, DateTime time,58 RandomAccessCache<MarketSnapshot> marketSnapshotCache) {59 MonthlyDataFromMarketSnapshots monthlyData = getMonthlyData(marketSnapshotCache, equity);56 public double getFactorExposure(Stock stock, DateTime time, 57 RandomAccessCache<MarketSnapshot> snapshots) { 58 MonthlyDataFromMarketSnapshots monthlyData = new MonthlyDataFromMarketSnapshots(snapshots, stock); 60 59 61 60 CAPM capm = new CAPMFromMonthlyData().regressFromMonthlyPrices( … … 66 65 time.minusMonths(periodInMonths)); 67 66 return capm.beta(); 68 }69 70 private static MonthlyDataFromMarketSnapshots getMonthlyData(71 SequentialCache<MarketSnapshot> marketSnapshotCache,72 Equity equity) {73 return new MonthlyDataFromMarketSnapshots(marketSnapshotCache, equity);74 67 } 75 68 -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/factor/Factor.java
r1492 r1495 26 26 import com.numericalmethod.algoquant.data.equity.measure.CompanyMeasure; 27 27 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 28 import com.numericalmethod.algoquant.execution.product.equity. Equity;28 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 29 import java.util.Set; 30 30 import org.joda.time.DateTime; … … 39 39 40 40 /** 41 * Computes the exposure of this factor for a given equityat a given date/time.41 * Computes the exposure of this factor for a given stock at a given date/time. 42 42 * <p/> 43 43 * Note: the caller has to ensure that data ranging from {@link #getFirstRequiredDate} to time … … 45 45 * the data. As a consequence, returns should always be calculated from the change in prices. 46 46 * 47 * @param equity the equityfor which the factor is to be calculated47 * @param stock the stock for which the factor is to be calculated 48 48 * @param time the time for which the factor is to be calculated 49 49 * @param marketSnapshotCache the {@link RandomAccessCache} of {@link MarketSnapshot}s from … … 52 52 */ 53 53 // TODO: should take in a lookup interface instead of cache of marketsnapshot (DIP) 54 public double getFactorExposure( Equity equity, DateTime time,54 public double getFactorExposure(Stock stock, DateTime time, 55 55 RandomAccessCache<MarketSnapshot> marketSnapshotCache); 56 56 -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/factor/Intercept.java
r1366 r1495 26 26 import com.numericalmethod.algoquant.data.equity.measure.CompanyMeasure; 27 27 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 28 import com.numericalmethod.algoquant.execution.product.equity. Equity;28 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 29 import com.numericalmethod.suanshu.misc.datastructure.time.JodaTimeUtils; 30 30 import java.util.Collections; … … 41 41 42 42 @Override 43 public double getFactorExposure( Equityequity, DateTime time,43 public double getFactorExposure(Stock equity, DateTime time, 44 44 RandomAccessCache<MarketSnapshot> marketSnapshotCache) { 45 45 return 1.0; -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/factor/LogMarketCap.java
r1366 r1495 26 26 import com.numericalmethod.algoquant.data.equity.measure.MarketCap; 27 27 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 28 import com.numericalmethod.algoquant.execution.product.equity. Equity;28 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 29 import org.joda.time.DateTime; 30 30 … … 41 41 42 42 @Override 43 public double getFactorExposure( Equity equity, DateTime time,44 RandomAccessCache<MarketSnapshot> marketSnapshotCache) {45 double mCap = super.getFactorExposure( equity, time, marketSnapshotCache); // For more readable results43 public double getFactorExposure(Stock stock, DateTime time, 44 RandomAccessCache<MarketSnapshot> marketSnapshotCache) { 45 double mCap = super.getFactorExposure(stock, time, marketSnapshotCache); // For more readable results 46 46 return (mCap <= 1.) ? 0. : Math.log(mCap); 47 47 } -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/factor/MeasureFactor.java
r1366 r1495 26 26 import com.numericalmethod.algoquant.data.equity.measure.CompanyMeasure; 27 27 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 28 import com.numericalmethod.algoquant.execution.product.equity. Equity;28 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 29 import java.util.Collections; 30 30 import java.util.Set; … … 46 46 47 47 @Override 48 public double getFactorExposure( Equity equity, DateTime time,49 RandomAccessCache<MarketSnapshot> marketSnapshotCache) {48 public double getFactorExposure(Stock stock, DateTime time, 49 RandomAccessCache<MarketSnapshot> marketSnapshotCache) { 50 50 MarketSnapshot marketSnapshot = marketSnapshotCache.get(time).getData(); 51 return marketSnapshot.getProfile( equity).getMeasureValue(measure);51 return marketSnapshot.getProfile(stock).getMeasureValue(measure); 52 52 } 53 53 -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/factor/accounting/AccountingFactor.java
r1366 r1495 26 26 import com.numericalmethod.algoquant.data.equity.CompanyProfile; 27 27 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 28 import com.numericalmethod.algoquant.execution.product.equity. Equity;28 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 29 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 30 30 import com.numericalmethod.suanshu.misc.datastructure.time.JodaTimeUtils; … … 56 56 57 57 @Override 58 public double getFactorExposure( Equity equity, DateTime time,59 RandomAccessCache<MarketSnapshot> marketSnapshotCache) {58 public double getFactorExposure(Stock stock, DateTime time, 59 RandomAccessCache<MarketSnapshot> marketSnapshotCache) { 60 60 DateTime marketDate = time.minus(marketDateOffset); 61 61 DateTime accountDate = time.minus(accountDateOffset); 62 62 63 CompanyProfile profileAtMarketDate = marketSnapshotCache.get(marketDate).getData().getProfile( equity);64 CompanyProfile profileAtAccountingDate = marketSnapshotCache.get(accountDate).getData().getProfile( equity);63 CompanyProfile profileAtMarketDate = marketSnapshotCache.get(marketDate).getData().getProfile(stock); 64 CompanyProfile profileAtAccountingDate = marketSnapshotCache.get(accountDate).getData().getProfile(stock); 65 65 66 66 double factorValue = getFactorValue(profileAtMarketDate, profileAtAccountingDate); … … 69 69 70 70 public abstract double getFactorValue(CompanyProfile profileAtMarketDate, 71 CompanyProfile profileAtAccountingDate);71 CompanyProfile profileAtAccountingDate); 72 72 73 73 @Override -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/factor/accounting/BookToMarket.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.data.equity.CompanyProfile; 26 import com.numericalmethod.algoquant.data.equity.measure.CompanyMeasure; 27 import com.numericalmethod.algoquant.data.equity.measure.EquityMeasure; 28 import com.numericalmethod.algoquant.data.equity.measure.MarketCap; 29 import java.util.Arrays; 30 import java.util.Collections; 31 import java.util.HashSet; 32 import java.util.Set; 26 import com.numericalmethod.algoquant.data.equity.measure.*; 27 import java.util.*; 33 28 34 29 /** … … 38 33 39 34 private static final MarketCap MCAP = new MarketCap(); 40 private static final EquityMeasure EQUITY = new EquityMeasure();41 private static final Set<CompanyMeasure> MEASURES = Collections.unmodifiableSet(new HashSet<CompanyMeasure>(Arrays.asList(MCAP, EQUITY)));35 private static final StockMeasure STOCK = new StockMeasure(); 36 private static final Set<CompanyMeasure> MEASURES = Collections.unmodifiableSet(new HashSet<CompanyMeasure>(Arrays.asList(MCAP, STOCK))); 42 37 43 38 @Override … … 46 41 CompanyProfile profileAtAccountingDate) { 47 42 double marketCapitalization = profileAtMarketDate.getMeasureValue(MCAP); 48 double book = profileAtAccountingDate.getMeasureValue( EQUITY);43 double book = profileAtAccountingDate.getMeasureValue(STOCK); 49 44 double bm = book / marketCapitalization; 50 45 return bm; -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/backtest/IndexedPortfoliosAverageReturnsCalculator.java
r1401 r1495 27 27 import com.numericalmethod.algoquant.data.structure.TimedEntry; 28 28 import com.numericalmethod.algoquant.data.type.portfolio.IndexedPortfolio; 29 import com.numericalmethod.algoquant.execution.product.equity. Equity;29 import com.numericalmethod.algoquant.execution.product.equity.Stock; 30 30 import com.numericalmethod.algoquant.model.factormodel.famafrench1992.portfolio.FactorRanking.FactorRanks; 31 31 import static com.numericalmethod.nmutils.collection.CollectionUtils.*; … … 58 58 * @return the returns at each time instant 59 59 */ 60 public static SequentialCache<Map<IndexedPortfolio<FactorRanks, Equity>, Double>> computeAverageReturnsTimeSeries(61 SequentialCache<List<IndexedPortfolio<FactorRanks, Equity>>> portfoliosTimeSeries,60 public static SequentialCache<Map<IndexedPortfolio<FactorRanks, Stock>, Double>> computeAverageReturnsTimeSeries( 61 SequentialCache<List<IndexedPortfolio<FactorRanks, Stock>>> portfoliosTimeSeries, 62 62 List<TimedEntry<PortfoliosSnapshot>> portfoliosSnapshots, 63 63 DateTime endDate) { 64 64 65 BufferCache<Map<IndexedPortfolio<FactorRanks, Equity>, Double>> avgReturnsSeries =66 new BufferCache<Map<IndexedPortfolio<FactorRanks, Equity>, Double>>();65 BufferCache<Map<IndexedPortfolio<FactorRanks, Stock>, Double>> avgReturnsSeries = 66 new BufferCache<Map<IndexedPortfolio<FactorRanks, Stock>, Double>>(); 67 67 68 Iterator<TimedEntry<List<IndexedPortfolio<FactorRanks, Equity>>>> portfoliosIterator = portfoliosTimeSeries.iterator();69 TimedEntry<List<IndexedPortfolio<FactorRanks, Equity>>> lastPortfolios = portfoliosIterator.next();68 Iterator<TimedEntry<List<IndexedPortfolio<FactorRanks, Stock>>>> portfoliosIterator = portfoliosTimeSeries.iterator(); 69 TimedEntry<List<IndexedPortfolio<FactorRanks, Stock>>> lastPortfolios = portfoliosIterator.next(); 70 70 71 71 while (portfoliosIterator.hasNext()) { 72 TimedEntry<List<IndexedPortfolio<FactorRanks, Equity>>> currPortfolios = portfoliosIterator.next();72 TimedEntry<List<IndexedPortfolio<FactorRanks, Stock>>> currPortfolios = portfoliosIterator.next(); 73 73 DateTime startTime = lastPortfolios.getTime(); 74 74 DateTime endTime = currPortfolios.getTime(); 75 List<IndexedPortfolio<FactorRanks, Equity>> portfolios = lastPortfolios.getData(); // compute the return for the last portfolio75 List<IndexedPortfolio<FactorRanks, Stock>> portfolios = lastPortfolios.getData(); // compute the return for the last portfolio 76 76 77 77 avgReturnsSeries.add(startTime, getAverageReturnsPerPortfolio(portfolios, portfoliosSnapshots, startTime, endTime)); … … 80 80 } 81 81 DateTime startTime = lastPortfolios.getTime(); 82 List<IndexedPortfolio<FactorRanks, Equity>> portfolios = lastPortfolios.getData(); // compute the return for the last portfolio82 List<IndexedPortfolio<FactorRanks, Stock>> portfolios = lastPortfolios.getData(); // compute the return for the last portfolio 83 83 84 84 avgReturnsSeries.add(startTime, getAverageReturnsPerPortfolio(portfolios, portfoliosSnapshots, startTime, endDate)); … … 94 94 * startTime and endTime 95 95 */ 96 private static Map<IndexedPortfolio<FactorRanks, Equity>, Double> getAverageReturnsPerPortfolio(97 List<IndexedPortfolio<FactorRanks, Equity>> portfolios,96 private static Map<IndexedPortfolio<FactorRanks, Stock>, Double> getAverageReturnsPerPortfolio( 97 List<IndexedPortfolio<FactorRanks, Stock>> portfolios, 98 98 List<TimedEntry<PortfoliosSnapshot>> portfoliosStates, 99 99 DateTime startTime, 100 100 DateTime endTime) { 101 Map<IndexedPortfolio<FactorRanks, Equity>, Double> averageReturns = newHashMap();102 for (IndexedPortfolio<FactorRanks, Equity> portfolio : portfolios) {101 Map<IndexedPortfolio<FactorRanks, Stock>, Double> averageReturns = newHashMap(); 102 for (IndexedPortfolio<FactorRanks, Stock> portfolio : portfolios) { 103 103 double[] returns = getMarginalReturnsForPortfolioIndices( 104 104 portfolio.getIndex(), -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/backtest/PerPortfolioIndicesResults.java
r1366 r1495 26 26 import com.numericalmethod.algoquant.data.structure.TimedEntry; 27 27 import com.numericalmethod.algoquant.data.type.portfolio.IndexedPortfolio; 28 import com.numericalmethod.algoquant.execution.product.equity. Equity;28 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 29 import com.numericalmethod.algoquant.model.factormodel.famafrench1992.portfolio.FactorRanking.FactorRanks; 30 30 import java.util.List; … … 42 42 public class PerPortfolioIndicesResults { 43 43 44 private final SequentialCache<Map<IndexedPortfolio<FactorRanks, Equity>, Double>> resultsTimeSeries;44 private final SequentialCache<Map<IndexedPortfolio<FactorRanks, Stock>, Double>> resultsTimeSeries; 45 45 private final List<Integer> measureDimensions; 46 46 47 47 public PerPortfolioIndicesResults( 48 SequentialCache<Map<IndexedPortfolio<FactorRanks, Equity>, Double>> returnsTimeSeries,48 SequentialCache<Map<IndexedPortfolio<FactorRanks, Stock>, Double>> returnsTimeSeries, 49 49 List<Integer> measureDimensions) { 50 50 this.resultsTimeSeries = returnsTimeSeries; … … 58 58 int[][] twoDimensionalCount = new int[dimensionA][dimensionB]; 59 59 60 for (TimedEntry<Map<IndexedPortfolio<FactorRanks, Equity>, Double>> timedResultsTable : resultsTimeSeries) {61 for (Entry<IndexedPortfolio<FactorRanks, Equity>, Double> result : timedResultsTable.getData().entrySet()) {60 for (TimedEntry<Map<IndexedPortfolio<FactorRanks, Stock>, Double>> timedResultsTable : resultsTimeSeries) { 61 for (Entry<IndexedPortfolio<FactorRanks, Stock>, Double> result : timedResultsTable.getData().entrySet()) { 62 62 int resultMeasureA = result.getKey().getIndex().getRanks()[measureAIndex]; 63 63 int resultMeasureB = result.getKey().getIndex().getRanks()[measureBIndex]; -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/backtest/PortfolioSnapshotsCalculator.java
r1401 r1495 23 23 package com.numericalmethod.algoquant.model.factormodel.famafrench1992.backtest; 24 24 25 import com.numericalmethod.algoquant.data.cache.CacheUtils; 26 import com.numericalmethod.algoquant.data.cache.RandomAccessCache; 27 import com.numericalmethod.algoquant.data.cache.SequentialCache; 25 import com.numericalmethod.algoquant.data.cache.*; 28 26 import com.numericalmethod.algoquant.data.cache.processor.sampler.EquiTimeSampler; 29 27 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 30 28 import com.numericalmethod.algoquant.data.structure.TimedEntry; 31 29 import com.numericalmethod.algoquant.data.type.portfolio.IndexedPortfolio; 32 import com.numericalmethod.algoquant.execution.product.equity. Equity;30 import com.numericalmethod.algoquant.execution.product.equity.Stock; 33 31 import com.numericalmethod.algoquant.model.factormodel.famafrench1992.portfolio.FactorRanking.FactorRanks; 34 32 import com.numericalmethod.algoquant.model.returns.ReturnCalculators; 35 33 import static com.numericalmethod.nmutils.collection.CollectionUtils.*; 36 import java.util.ArrayList; 37 import java.util.Iterator; 38 import java.util.List; 39 import java.util.Map; 34 import java.util.*; 40 35 import org.joda.time.DateTime; 41 36 import org.joda.time.Period; … … 74 69 // TODO: refactor this!! why need the last date?! 75 70 public List<TimedEntry<PortfoliosSnapshot>> computePortfolioStates( 76 SequentialCache<List<IndexedPortfolio<FactorRanks, Equity>>> portfoliosCache,71 SequentialCache<List<IndexedPortfolio<FactorRanks, Stock>>> portfoliosCache, 77 72 DateTime endDate) { 78 73 List<TimedEntry<PortfoliosSnapshot>> allPortfoliosSnapshots = … … 83 78 new EquiTimeSampler<MarketSnapshot>(totalStartTime, period).doProcess(marketSnapshots); 84 79 85 86 87 88 Iterator<TimedEntry<List<IndexedPortfolio<FactorRanks, Equity>>>> timedPortfoliosIterator = portfoliosCache.iterator(); 89 TimedEntry<List<IndexedPortfolio<FactorRanks, Equity>>> lastPortfolios = null; // 1st set of portfolios 90 TimedEntry<List<IndexedPortfolio<FactorRanks, Equity>>> currPortfolios = timedPortfoliosIterator.next(); 80 Iterator<TimedEntry<List<IndexedPortfolio<FactorRanks, Stock>>>> timedPortfoliosIterator = portfoliosCache.iterator(); 81 TimedEntry<List<IndexedPortfolio<FactorRanks, Stock>>> lastPortfolios = null; // 1st set of portfolios 82 TimedEntry<List<IndexedPortfolio<FactorRanks, Stock>>> currPortfolios = timedPortfoliosIterator.next(); 91 83 while (timedPortfoliosIterator.hasNext()) { 92 84 lastPortfolios = currPortfolios; … … 98 90 List<TimedEntry<PortfoliosSnapshot>> portfoliosSnapshots = 99 91 generatePortfolioSnapshotsTimeSeries( 100 lastPortfolios.getData(),101 marketSnapshotPerPeriod,102 startTime,103 endTime);92 lastPortfolios.getData(), 93 marketSnapshotPerPeriod, 94 startTime, 95 endTime); 104 96 allPortfoliosSnapshots.addAll(portfoliosSnapshots); 105 97 } 106 98 List<TimedEntry<PortfoliosSnapshot>> portfoliosSnapshots = // for the last period 107 99 generatePortfolioSnapshotsTimeSeries( 108 currPortfolios.getData(),109 marketSnapshotPerPeriod,110 currPortfolios.getTime(),111 endDate);100 currPortfolios.getData(), 101 marketSnapshotPerPeriod, 102 currPortfolios.getTime(), 103 endDate); 112 104 allPortfoliosSnapshots.addAll(portfoliosSnapshots); 113 105 return allPortfoliosSnapshots; … … 132 124 */ 133 125 private List<TimedEntry<PortfoliosSnapshot>> generatePortfolioSnapshotsTimeSeries( 134 List<IndexedPortfolio<FactorRanks, Equity>> portfolios,126 List<IndexedPortfolio<FactorRanks, Stock>> portfolios, 135 127 SequentialCache<MarketSnapshot> marketSnapshotPerPeriod, 136 128 DateTime calculationStartDate, … … 154 146 portfolioSnapshots.add( 155 147 new TimedEntry<PortfoliosSnapshot>( 156 currentTime,157 new PortfoliosSnapshot(snapshot, returns, portfolios)));148 currentTime, 149 new PortfoliosSnapshot(snapshot, returns, portfolios))); 158 150 } 159 151 … … 171 163 172 164 private Map<FactorRanks, Double> getPortfolioReturns( 173 List<IndexedPortfolio<FactorRanks, Equity>> portfolios,165 List<IndexedPortfolio<FactorRanks, Stock>> portfolios, 174 166 MarketSnapshot periodStartSnapshot, 175 167 MarketSnapshot periodEndSnapshot) { 176 168 Map<FactorRanks, Double> portfolioReturns = newHashMap(); 177 169 178 for (IndexedPortfolio<FactorRanks, Equity> portfolio : portfolios) {170 for (IndexedPortfolio<FactorRanks, Stock> portfolio : portfolios) { 179 171 double price = 0.; 180 for (Map.Entry< Equity, Double> equityWeight : portfolio.getPortfolio().getWeights().entrySet()) {181 Equity equity = equityWeight.getKey();182 double equityPriceStart = periodStartSnapshot.getProfile(equity).getPrice();183 double equityPriceEnd = periodEndSnapshot.getProfile(equity).getPrice();184 double returns = ReturnCalculators.SIMPLE.computeReturn( equityPriceStart, equityPriceEnd);185 double returnsContribution = equityWeight.getValue() * returns;172 for (Map.Entry<Stock, Double> stockWeight : portfolio.getPortfolio().getWeights().entrySet()) { 173 Stock stock = stockWeight.getKey(); 174 double stockPriceStart = periodStartSnapshot.getProfile(stock).getPrice(); 175 double stockPriceEnd = periodEndSnapshot.getProfile(stock).getPrice(); 176 double returns = ReturnCalculators.SIMPLE.computeReturn(stockPriceStart, stockPriceEnd); 177 double returnsContribution = stockWeight.getValue() * returns; 186 178 price += returnsContribution; 187 179 } -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/backtest/PortfoliosSnapshot.java
r1366 r1495 25 25 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 26 26 import com.numericalmethod.algoquant.data.type.portfolio.IndexedPortfolio; 27 import com.numericalmethod.algoquant.execution.product.equity. Equity;27 import com.numericalmethod.algoquant.execution.product.equity.Stock; 28 28 import com.numericalmethod.algoquant.model.factormodel.famafrench1992.portfolio.FactorRanking.FactorRanks; 29 29 import static com.numericalmethod.nmutils.collection.CollectionUtils.*; … … 42 42 43 43 private final MarketSnapshot marketSnapshot; 44 private final List<IndexedPortfolio<FactorRanks, Equity>> portfolios;44 private final List<IndexedPortfolio<FactorRanks, Stock>> portfolios; 45 45 private final Map<FactorRanks, Double> portfolioReturns; // for previous period // TODO: why store the last period return but not this period??!!! 46 private final Map<FactorRanks, IndexedPortfolio<FactorRanks, Equity>> portfolioMap = newHashMap();46 private final Map<FactorRanks, IndexedPortfolio<FactorRanks, Stock>> portfolioMap = newHashMap(); 47 47 48 48 public PortfoliosSnapshot( 49 49 MarketSnapshot marketSnapshot, 50 50 Map<FactorRanks, Double> portfolioReturns, 51 List<IndexedPortfolio<FactorRanks, Equity>> portfolios) {51 List<IndexedPortfolio<FactorRanks, Stock>> portfolios) { 52 52 this.marketSnapshot = marketSnapshot; 53 53 this.portfolios = portfolios; 54 54 this.portfolioReturns = portfolioReturns; 55 55 56 for (IndexedPortfolio<FactorRanks, Equity> portfolio : portfolios) {56 for (IndexedPortfolio<FactorRanks, Stock> portfolio : portfolios) { 57 57 portfolioMap.put(portfolio.getIndex(), portfolio); 58 58 } … … 71 71 } 72 72 73 public List<IndexedPortfolio<FactorRanks, Equity>> getPortfolios() {73 public List<IndexedPortfolio<FactorRanks, Stock>> getPortfolios() { 74 74 return Collections.unmodifiableList(portfolios); 75 75 } 76 76 77 public IndexedPortfolio<FactorRanks, Equity> getIndexedPortfolio(FactorRanks index) {77 public IndexedPortfolio<FactorRanks, Stock> getIndexedPortfolio(FactorRanks index) { 78 78 return portfolioMap.get(index); 79 79 } -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/portfolio/FactorRanking.java
r1420 r1495 25 25 import com.numericalmethod.algoquant.data.equity.bucketing.Bucket; 26 26 import com.numericalmethod.algoquant.data.equity.bucketing.Bucketing; 27 import com.numericalmethod.algoquant.execution.product.equity. Equity;27 import com.numericalmethod.algoquant.execution.product.equity.Stock; 28 28 import com.numericalmethod.algoquant.model.factormodel.FactorValueLookup; 29 29 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; … … 132 132 */ 133 133 public FactorRanking( 134 List<Factor> factors,135 Map<Factor, Integer> factor2nBuckets,136 FactorValueLookup factorValueLookup,137 BucketSizeAllocation allocation) {134 List<Factor> factors, 135 Map<Factor, Integer> factor2nBuckets, 136 FactorValueLookup factorValueLookup, 137 BucketSizeAllocation allocation) { 138 138 this.factors = factors; 139 139 this.factor2nBuckets = factor2nBuckets; … … 143 143 144 144 @Override 145 public Map<FactorRanks, Bucket<FactorRanks>> sort(Set< Equity> equities) {146 Map< Equity, List<Integer>> equity2Ranks = computeEquityRanks(equities);147 148 Map<FactorRanks, Set< Equity>> ranks2Equities = assignEquitiesToSets(equities, equity2Ranks);145 public Map<FactorRanks, Bucket<FactorRanks>> sort(Set<Stock> equities) { 146 Map<Stock, List<Integer>> stock2Ranks = computeStockRanks(equities); 147 148 Map<FactorRanks, Set<Stock>> ranks2Equities = assignEquitiesToSets(equities, stock2Ranks); 149 149 150 150 Map<FactorRanks, Bucket<FactorRanks>> buckets = newHashMap(); 151 for (Map.Entry<FactorRanks, Set< Equity>> entry : ranks2Equities.entrySet()) {151 for (Map.Entry<FactorRanks, Set<Stock>> entry : ranks2Equities.entrySet()) { 152 152 buckets.put(entry.getKey(), new Bucket<FactorRanks>(entry.getKey(), entry.getValue())); 153 153 } … … 156 156 } 157 157 158 private Map< Equity, List<Integer>> computeEquityRanks(Set<Equity> equities) {159 List< Equity> equityList = new ArrayList<Equity>(equities);160 Map< Equity, List<Integer>> equity2Ranks = newHashMap();161 for ( Equity equity : equities) { // initialize ranks list162 equity2Ranks.put(equity, new ArrayList<Integer>(factors.size()));158 private Map<Stock, List<Integer>> computeStockRanks(Set<Stock> stocks) { 159 List<Stock> stockList = new ArrayList<Stock>(stocks); 160 Map<Stock, List<Integer>> stock2Ranks = newHashMap(); 161 for (Stock stock : stocks) { // initialize ranks list 162 stock2Ranks.put(stock, new ArrayList<Integer>(factors.size())); 163 163 } 164 164 … … 166 166 final Factor factor = factor1; 167 167 // sort equities for each factor 168 Collections.sort( equityList, new Comparator<Equity>() {168 Collections.sort(stockList, new Comparator<Stock>() { 169 169 @Override 170 public int compare( Equity o1, Equityo2) {170 public int compare(Stock o1, Stock o2) { 171 171 return Double.compare( 172 factorValueLookup.getValue(o1, factor),173 factorValueLookup.getValue(o2, factor));172 factorValueLookup.getValue(o1, factor), 173 factorValueLookup.getValue(o2, factor)); 174 174 } 175 175 }); 176 176 177 int[] bucketSizes = allocation.computeBucketSizes( equityList.size(), factor2nBuckets.get(factor));178 179 Iterator< Equity> equityIterator = equityList.iterator();177 int[] bucketSizes = allocation.computeBucketSizes(stockList.size(), factor2nBuckets.get(factor)); 178 179 Iterator<Stock> stockIterator = stockList.iterator(); 180 180 for (int bucketRank = 1; bucketRank <= bucketSizes.length; ++bucketRank) { // bucket index starts from 1 181 181 int bucketSize = bucketSizes[bucketRank - 1]; 182 182 for (int i = 0; i < bucketSize; ++i) { 183 equity2Ranks.get(equityIterator.next()).add(bucketRank);183 stock2Ranks.get(stockIterator.next()).add(bucketRank); 184 184 } 185 185 } 186 186 } 187 187 188 return equity2Ranks;189 } 190 191 private Map<FactorRanks, Set< Equity>> assignEquitiesToSets(Set<Equity> equities,192 Map<Equity, List<Integer>> equity2Ranks) {193 Map<FactorRanks, Set< Equity>> ranks2Equities = newHashMap();188 return stock2Ranks; 189 } 190 191 private Map<FactorRanks, Set<Stock>> assignEquitiesToSets(Set<Stock> stocks, 192 Map<Stock, List<Integer>> stock2Ranks) { 193 Map<FactorRanks, Set<Stock>> ranks2Equities = newHashMap(); 194 194 for (List<Integer> ranks : computeRankProduct(factors, factor2nBuckets)) { 195 ranks2Equities.put(new FactorRanks(ranks), new HashSet< Equity>());196 } 197 for ( Equity equity : equities) {198 ranks2Equities.get(new FactorRanks( equity2Ranks.get(equity))).add(equity);195 ranks2Equities.put(new FactorRanks(ranks), new HashSet<Stock>()); 196 } 197 for (Stock stock : stocks) { 198 ranks2Equities.get(new FactorRanks(stock2Ranks.get(stock))).add(stock); 199 199 } 200 200 -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/portfolio/PortfolioSeriesGenerator.java
r1401 r1495 27 27 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 28 28 import com.numericalmethod.algoquant.data.type.portfolio.IndexedPortfolio; 29 import com.numericalmethod.algoquant.execution.product.equity. Equity;29 import com.numericalmethod.algoquant.execution.product.equity.Stock; 30 30 import com.numericalmethod.algoquant.model.factormodel.FactorValueEvaluator; 31 31 import com.numericalmethod.algoquant.model.factormodel.FactorValueLookup; … … 49 49 50 50 /** 51 * Creates an instance from market snapshots, and the factors used for partitioning the equity51 * Creates an instance from market snapshots, and the factors used for partitioning the stock 52 52 * universe. 53 53 * … … 77 77 * @return the generated portfolios at each time instant 78 78 */ 79 public RandomAccessCache<List<IndexedPortfolio<FactorRanks, Equity>>> generatePortfolios(80 Set< Equity> equities,79 public RandomAccessCache<List<IndexedPortfolio<FactorRanks, Stock>>> generatePortfolios( 80 Set<Stock> equities, 81 81 DateTime startTime, 82 82 DateTime endTime, 83 83 Period stepSize) { 84 BufferCache<List<IndexedPortfolio<FactorRanks, Equity>>> portfoliosCache = new BufferCache<List<IndexedPortfolio<FactorRanks, Equity>>>();84 BufferCache<List<IndexedPortfolio<FactorRanks, Stock>>> portfoliosCache = new BufferCache<List<IndexedPortfolio<FactorRanks, Stock>>>(); 85 85 86 86 for (DateTime baseTime = startTime; !baseTime.plus(stepSize).isAfter(endTime); baseTime = baseTime.plus(stepSize)) { 87 87 FactorValueLookup factorValueLookup = factorValueEvaluator.evaluateForEquities(equities, baseTime); 88 List<IndexedPortfolio<FactorRanks, Equity>> portfolios = portfolioSetGenerator.newPortfolios(equities, factorValueLookup);88 List<IndexedPortfolio<FactorRanks, Stock>> portfolios = portfolioSetGenerator.newPortfolios(equities, factorValueLookup); 89 89 90 90 portfoliosCache.add(baseTime, portfolios); -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/portfolio/PortfolioSetGenerator.java
r1366 r1495 27 27 import com.numericalmethod.algoquant.data.type.portfolio.IndexedPortfolio; 28 28 import com.numericalmethod.algoquant.data.type.portfolio.PortfolioUtils; 29 import com.numericalmethod.algoquant.execution.product.equity. Equity;29 import com.numericalmethod.algoquant.execution.product.equity.Stock; 30 30 import com.numericalmethod.algoquant.model.factormodel.FactorValueLookup; 31 31 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; … … 60 60 } 61 61 62 public List<IndexedPortfolio<FactorRanks, Equity>> newPortfolios(63 Set< Equity> equities,62 public List<IndexedPortfolio<FactorRanks, Stock>> newPortfolios( 63 Set<Stock> equities, 64 64 FactorValueLookup factorValueLookup) { 65 65 Map<Factor, Integer> factor2nBuckets = newHashMap(); … … 75 75 new TreeMap<FactorRanking.FactorRanks, Bucket<FactorRanking.FactorRanks>>(bucketing.sort(equities)); 76 76 77 List<IndexedPortfolio<FactorRanks, Equity>> portfolios =78 new ArrayList<IndexedPortfolio<FactorRanks, Equity>>(buckets.size());77 List<IndexedPortfolio<FactorRanks, Stock>> portfolios = 78 new ArrayList<IndexedPortfolio<FactorRanks, Stock>>(buckets.size()); 79 79 for (Map.Entry<FactorRanks, Bucket<FactorRanks>> bucket : buckets.entrySet()) { 80 80 portfolios.add( 81 new IndexedPortfolio<FactorRanks, Equity>(81 new IndexedPortfolio<FactorRanks, Stock>( 82 82 bucket.getKey(), 83 PortfolioUtils.newEqualWeightedPortfolio(bucket.getValue().get EquitySet())));83 PortfolioUtils.newEqualWeightedPortfolio(bucket.getValue().getStocks()))); 84 84 } 85 85 return portfolios; -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/regression/crosssectional/CrossSectionalRegression.java
r1366 r1495 23 23 package com.numericalmethod.algoquant.model.factormodel.regression.crosssectional; 24 24 25 import com.numericalmethod.algoquant.execution.product.equity. Equity;25 import com.numericalmethod.algoquant.execution.product.equity.Stock; 26 26 import com.numericalmethod.algoquant.model.factormodel.FactorValueLookup; 27 27 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; … … 38 38 39 39 /** 40 * A cross-sectional regression computes the betas for the factors that41 * may explainthe returns of <i>multiple</i> assets, hence cross-section.40 * A cross-sectional regression computes the factor exposures (betas for the factors) that explain 41 * the returns of <i>multiple</i> assets, hence cross-section. 42 42 * 43 43 * @author Ken Yiu … … 45 45 public class CrossSectionalRegression { 46 46 47 public static class Result { // TODO: add other statistics to the result47 public static class Result { // TODO: add other statistics to the result 48 48 49 private final Map<Factor, Double> regressedPremiums;49 private final Map<Factor, Double> exposures; // factor exposures 50 50 51 Result(Map<Factor, Double> regressedPremiums) {52 this. regressedPremiums = regressedPremiums;51 private Result(Map<Factor, Double> exposures) { 52 this.exposures = exposures; 53 53 } 54 54 55 public Map<Factor, Double> get RegressedPremiums() {56 return Collections.unmodifiableMap( regressedPremiums);55 public Map<Factor, Double> getExposures() { 56 return Collections.unmodifiableMap(exposures); 57 57 } 58 58 } … … 65 65 } 66 66 67 public Result run( 68 Map<Equity, Double> returns, 69 List<Factor> factors) 70 throws Exception { 71 List<Equity> equities = new ArrayList<Equity>(returns.keySet()); 67 public Result run(Map<Stock, Double> returns, List<Factor> factors) throws Exception { 68 List<Stock> stocks = new ArrayList<Stock>(returns.keySet()); 69 final int N = stocks.size(); // number of assets 70 final int M = factors.size(); 72 71 73 // construct the y = Ax linear equations 74 double[] r = new double[returns.size()]; 75 Vector[] rows = new Vector[returns.size()]; 76 for (int i = 0; i < equities.size(); ++i) { 77 Equity equity = equities.get(i); 78 double[] row = new double[factors.size()]; 72 // construct the R = B*F linear equations 73 double[] r = new double[N]; 74 Vector[] rows = new Vector[N]; 75 for (int i = 0; i < N; ++i) { 76 Stock stock = stocks.get(i); 79 77 80 for (int j = 0; j < factors.size(); ++j) { 81 row[j] = lookup.getValue(equity, factors.get(j)); 78 double[] row = new double[M]; 79 for (int j = 0; j < M; ++j) { 80 row[j] = lookup.getValue(stock, factors.get(j)); 82 81 } 82 rows[i] = new DenseVector(row); 83 83 84 rows[i] = new DenseVector(row); 85 r[i] = returns.get(equity); 84 r[i] = returns.get(stock); 86 85 } 87 86 88 Matrix X = CreateMatrix.rbind(rows);89 Vector y = new DenseVector(r);87 Matrix F = CreateMatrix.rbind(rows); // factors 88 Vector R = new DenseVector(r); // returns 90 89 91 90 try { 92 LMProblem crossSection = new LMProblem(y, X, false); // always turn off the intercept; use intercept factor instead93 OLSRegression ols = new OLSRegression(crossSection );91 LMProblem crossSectionalRegression = new LMProblem(R, F, false); // always turn off the intercept; use intercept factor instead 92 OLSRegression ols = new OLSRegression(crossSectionalRegression); 94 93 95 Map<Factor, Double> regressedPremiums = newHashMap();96 for (int i = 0; i < factors.size(); i++) {97 regressedPremiums.put(factors.get(i), ols.beta().betaHat().get(i + 1));94 Map<Factor, Double> exposures = newHashMap(); 95 for (int i = 0; i < M; i++) { 96 exposures.put(factors.get(i), ols.beta().betaHat().get(i + 1)); 98 97 } 99 100 return new Result(regressedPremiums); 98 return new Result(exposures); 101 99 } catch (Exception ex) { 102 logger.error(String.format("failed in cross-sectional regression:%n%n%s%n%n%s%n", X, y), ex);100 logger.error(String.format("failed in cross-sectional regression:%n%n%s%n%n%s%n", F, R), ex); 103 101 throw new Exception(ex); 104 102 } -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/FamaMacBethRegression.java
r1366 r1495 25 25 import com.numericalmethod.algoquant.data.cache.RandomAccessCache; 26 26 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 27 import com.numericalmethod.algoquant.execution.product.equity.Equity; 28 import com.numericalmethod.algoquant.model.factormodel.EquityFactorValues; 27 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 28 import com.numericalmethod.algoquant.model.factormodel.FactorValueLookup; 29 import com.numericalmethod.algoquant.model.factormodel.StockFactorValues; 30 30 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 31 31 import com.numericalmethod.algoquant.model.factormodel.regression.crosssectional.CrossSectionalRegression; … … 36 36 import static com.numericalmethod.nmutils.collection.CollectionUtils.newHashMap; 37 37 import static com.numericalmethod.suanshu.misc.ArgumentAssertion.assertTrue; 38 import java.util.ArrayList; 39 import java.util.List; 40 import java.util.Map; 41 import java.util.Set; 42 import org.joda.time.DateTime; 43 import org.joda.time.Interval; 44 import org.joda.time.Period; 38 import java.util.*; 39 import org.joda.time.*; 45 40 import org.slf4j.Logger; 46 41 47 42 /** 48 * Performs the cross-sectional regression as explained in the Fama-MacBeth 49 * paper from 1973. 43 * Performs the cross-sectional regression as explained in the Fama-MacBeth paper from 1973. 50 44 * <p/> 51 * Precisely, this implementation does the cross-sectional regressions over 52 * each given period. The returned {@link FamaMacBethRegressionResults} flexibly53 * allows further processing, e.g., averagingthe regressed coefficients.45 * Precisely, this implementation does the cross-sectional regressions over each given period. The 46 * returned {@link FamaMacBethRegressionResults} flexibly allows further processing, e.g., averaging 47 * the regressed coefficients. 54 48 * 55 49 * @author Haksun Li … … 84 78 * coefficients of the factors from the regression 85 79 */ 86 public FamaMacBethRegressionResults run( 87 final Set<Equity> equities, 88 final List<Factor> factors, 89 DateTime startTime, 90 Period period, 91 int nPeriods) { 80 public FamaMacBethRegressionResults run(final Set<Stock> equities, 81 final List<Factor> factors, 82 DateTime startTime, 83 Period period, 84 int nPeriods) { 92 85 assertTrue(factors.size() <= equities.size(), 93 86 "number of factors (%d) must be no bigger than number of companies (%d)", … … 99 92 100 93 for (Interval interval : intervals) { 101 Map< Equity, Double> equityReturns = computeEquityReturns(equities, interval);94 Map<Stock, Double> stockReturns = computeStockReturns(equities, interval); 102 95 FactorValueLookup factorValueLookup = computeFactorExposures(equities, factors, interval.getStart()); 103 96 … … 105 98 // cross-sectional regression, eq. 10 106 99 CrossSectionalRegression regression = new CrossSectionalRegression(factorValueLookup); 107 CrossSectionalRegression.Result result = regression.run( equityReturns, factors);108 time2RegressedPremiums.put(interval.getStart(), result.get RegressedPremiums());100 CrossSectionalRegression.Result result = regression.run(stockReturns, factors); 101 time2RegressedPremiums.put(interval.getStart(), result.getExposures()); 109 102 } catch (Exception ex) { 110 103 logger.error(String.format("failed in regression at time %s", interval), ex); … … 126 119 } 127 120 128 private Map< Equity, Double> computeEquityReturns(Set<Equity> equities, Interval interval) {129 Map< Equity, Double> equityReturns = newHashMap();130 for ( Equity equity : equities) {131 equityReturns.put(equity, computeReturnForEquity(equity, interval));121 private Map<Stock, Double> computeStockReturns(Set<Stock> stocks, Interval interval) { 122 Map<Stock, Double> stockReturns = newHashMap(); 123 for (Stock stock : stocks) { 124 stockReturns.put(stock, computeReturnForEquity(stock, interval)); 132 125 } 133 return equityReturns;126 return stockReturns; 134 127 } 135 128 136 private double computeReturnForEquity( Equity equity, Interval interval) {137 double priceStart = marketSnapshotCache.get(interval.getStart()).getData().getProfile( equity).getPrice();138 double priceEnd = marketSnapshotCache.get(interval.getEnd()).getData().getProfile( equity).getPrice();129 private double computeReturnForEquity(Stock stock, Interval interval) { 130 double priceStart = marketSnapshotCache.get(interval.getStart()).getData().getProfile(stock).getPrice(); 131 double priceEnd = marketSnapshotCache.get(interval.getEnd()).getData().getProfile(stock).getPrice(); 139 132 140 133 return RETURN_CALCULATOR.computeReturn(priceStart, priceEnd); 141 134 } 142 135 143 private FactorValueLookup computeFactorExposures(Set< Equity> equities, List<Factor> factors,144 DateTime time) {145 EquityFactorValues factorValues = new EquityFactorValues();146 for ( Equity equity : equities) {136 private FactorValueLookup computeFactorExposures(Set<Stock> stocks, List<Factor> factors, 137 DateTime time) { 138 StockFactorValues factorValues = new StockFactorValues(); 139 for (Stock stock : stocks) { 147 140 for (Factor factor : factors) { 148 double factorValue = factor.getFactorExposure( equity, time, marketSnapshotCache);149 factorValues.put(factor, equity, factorValue);141 double factorValue = factor.getFactorExposure(stock, time, marketSnapshotCache); 142 factorValues.put(factor, stock, factorValue); 150 143 } 151 144 } -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/capm/CAPMEstimatorForPortfolio.java
r1366 r1495 3 3 import com.numericalmethod.algoquant.data.structure.TimedEntry; 4 4 import com.numericalmethod.algoquant.data.type.portfolio.IndexedPortfolio; 5 import com.numericalmethod.algoquant.execution.product.equity. Equity;5 import com.numericalmethod.algoquant.execution.product.equity.Stock; 6 6 import com.numericalmethod.algoquant.model.factormodel.capm.CAPM; 7 7 import com.numericalmethod.algoquant.model.factormodel.capm.CAPMFromMonthlyData; … … 32 32 List<TimedEntry<PortfoliosSnapshot>> portfoliosSnapshots) { // TODO: should just pass in the required parameters instead of the whole thing 33 33 Map<FactorRanks, CAPM> indexedCapm = newHashMap(); // p.431 3rd para. "full samples" 34 List<IndexedPortfolio<FactorRanks, Equity>> portfolios = portfoliosSnapshots.get(0).getData().getPortfolios();35 for (IndexedPortfolio<FactorRanks, Equity> portfolio : portfolios) {34 List<IndexedPortfolio<FactorRanks, Stock>> portfolios = portfoliosSnapshots.get(0).getData().getPortfolios(); 35 for (IndexedPortfolio<FactorRanks, Stock> portfolio : portfolios) { 36 36 FactorRanks index = portfolio.getIndex(); 37 37 CAPM capm = estimateFromMonthlyData(portfoliosSnapshots, index); … … 54 54 PortfoliosSnapshot snapshot = timedSnapshot.getData(); 55 55 returns.add(snapshot.getReturnsForPortfolioIndex(index)); 56 marketPrices.add(snapshot.getMarketSnapshot().get MarketValue());56 marketPrices.add(snapshot.getMarketSnapshot().getBenchmark()); 57 57 rates.add(snapshot.getMarketSnapshot().getRiskFreeRate()); 58 58 } -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/capm/CAPMPerPortfolio.java
r1366 r1495 24 24 25 25 import com.numericalmethod.algoquant.data.equity.CompanyProfile; 26 import com.numericalmethod.algoquant.data.equity.measure.AccountingData; 27 import com.numericalmethod.algoquant.data.equity.measure.CompanyMeasure; 28 import com.numericalmethod.algoquant.data.equity.measure.TradingData; 26 import com.numericalmethod.algoquant.data.equity.measure.*; 29 27 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 30 28 import com.numericalmethod.algoquant.data.structure.TimedEntry; 31 29 import com.numericalmethod.algoquant.data.type.portfolio.IndexedPortfolio; 32 import com.numericalmethod.algoquant.execution.product.equity. Equity;30 import com.numericalmethod.algoquant.execution.product.equity.Stock; 33 31 import com.numericalmethod.algoquant.model.factormodel.capm.CAPM; 34 32 import com.numericalmethod.algoquant.model.factormodel.factor.MeasureFactor; … … 36 34 import com.numericalmethod.algoquant.model.factormodel.famafrench1992.portfolio.FactorRanking.FactorRanks; 37 35 import static com.numericalmethod.nmutils.collection.CollectionUtils.newHashMap; 38 import java.util.ArrayList; 39 import java.util.List; 40 import java.util.Map; 36 import java.util.*; 41 37 import org.joda.time.DateTime; 42 38 … … 60 56 61 57 @Override 62 public Equity getEquity() {63 return profile.get Equity();58 public Stock getStock() { 59 return profile.getStock(); 64 60 } 65 61 … … 115 111 } 116 112 } 113 117 114 private final CAPMEstimatorForPortfolio estimator; 118 115 … … 139 136 PortfoliosSnapshot snapshot = entry.getData(); 140 137 141 List<CompanyProfile> profiles = snapshot.getMarketSnapshot().getProfiles();138 Collection<CompanyProfile> profiles = snapshot.getMarketSnapshot().getProfiles(); 142 139 List<CompanyProfile> newProfiles = new ArrayList<CompanyProfile>(profiles.size()); 143 for (IndexedPortfolio<FactorRanks, Equity> portfolio : snapshot.getPortfolios()) {140 for (IndexedPortfolio<FactorRanks, Stock> portfolio : snapshot.getPortfolios()) { 144 141 FactorRanks index = portfolio.getIndex(); 145 142 … … 151 148 152 149 for (CompanyProfile profile : profiles) { 153 if (portfolio.getPortfolio().getProducts().contains(profile.get Equity())) {150 if (portfolio.getPortfolio().getProducts().contains(profile.getStock())) { 154 151 newProfiles.add(new OverridenCompanyProfile(profile, capmValues)); 155 152 } … … 159 156 PortfoliosSnapshot newSnapshot = new PortfoliosSnapshot( 160 157 new MarketSnapshot( 161 snapshot.getMarketSnapshot().getMarketValue(),162 snapshot.getMarketSnapshot().getRiskFreeRate(),163 newProfiles),158 snapshot.getMarketSnapshot().getBenchmark(), 159 snapshot.getMarketSnapshot().getRiskFreeRate(), 160 newProfiles), 164 161 snapshot.getPortfolioReturns(), 165 162 snapshot.getPortfolios()); -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/panel/FactorPanelRegression.java
r1366 r1495 25 25 import com.numericalmethod.algoquant.data.cache.SequentialCache; 26 26 import com.numericalmethod.algoquant.data.structure.TimedEntry; 27 import com.numericalmethod.algoquant.execution.product.equity.Equity; 28 import com.numericalmethod.algoquant.execution.product.equity.EquityComparatorBySymbol; 27 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 28 import com.numericalmethod.algoquant.model.factormodel.FactorValueLookup; 30 29 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 31 import com.numericalmethod.nmutils.NMUtils;32 30 import com.numericalmethod.suanshu.algebra.linear.matrix.doubles.Matrix; 33 31 import com.numericalmethod.suanshu.algebra.linear.matrix.doubles.operation.CreateMatrix; … … 39 37 import static org.apache.commons.lang.ArrayUtils.toPrimitive; 40 38 import org.joda.time.DateTime; 41 import org.slf4j.Logger;42 39 43 40 /** … … 48 45 public class FactorPanelRegression { 49 46 50 private static final Logger logger = NMUtils.getClassLogger();51 47 private final Map<DateTime, FactorValueLookup> lookup; 52 48 … … 56 52 57 53 public FamaMacBethPanelRegressionResults run( 58 SequentialCache<Map<Equity, Double>> returnsCache,59 List<Factor> factors)60 throws Exception {54 SequentialCache<Map<Stock, Double>> returnsCache, 55 List<Factor> factors) 56 throws Exception { 61 57 62 58 List<Matrix> exposureMatrices = new ArrayList<Matrix>(); 63 59 List<Vector> returnVectors = new ArrayList<Vector>(); 64 60 65 for (TimedEntry<Map< Equity, Double>> te : returnsCache) {61 for (TimedEntry<Map<Stock, Double>> te : returnsCache) { 66 62 67 63 List<Vector> exposureMatrixRows = new ArrayList<Vector>(); 68 64 List<Double> returnVectorItems = new ArrayList<Double>(); 69 65 70 for ( Equity equity: getSortedMap(te.getData()).keySet()) {66 for (Stock stock : getSortedMap(te.getData()).keySet()) { 71 67 List<Double> row = new ArrayList<Double>(); 72 68 73 69 for (Factor factor : factors) { 74 row.add(lookup.get(te.getTime()).getValue( equity, factor));70 row.add(lookup.get(te.getTime()).getValue(stock, factor)); 75 71 } 76 72 77 73 exposureMatrixRows.add(new DenseVector(toPrimitive(row.toArray(new Double[0])))); 78 returnVectorItems.add(te.getData().get( equity));74 returnVectorItems.add(te.getData().get(stock)); 79 75 } 80 76 … … 91 87 } 92 88 93 private SortedMap< Equity, Double> getSortedMap(Map<Equity, Double> map) {94 SortedMap< Equity, Double> sortedMap = new TreeMap<Equity, Double>(new EquityComparatorBySymbol());89 private SortedMap<Stock, Double> getSortedMap(Map<Stock, Double> map) { 90 SortedMap<Stock, Double> sortedMap = new TreeMap<Stock, Double>(); 95 91 96 for (Map.Entry< Equity, Double> entry : map.entrySet()) {92 for (Map.Entry<Stock, Double> entry : map.entrySet()) { 97 93 sortedMap.put(entry.getKey(), entry.getValue()); 98 94 } -
core/src/main/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/panel/FamaMacBethPanelRegression.java
r1366 r1495 23 23 package com.numericalmethod.algoquant.model.factormodel.regression.famamacbeth.panel; 24 24 25 import com.numericalmethod.algoquant.data.cache.BufferCache; 26 import com.numericalmethod.algoquant.data.cache.RandomAccessCache; 27 import com.numericalmethod.algoquant.data.cache.SequentialCache; 25 import com.numericalmethod.algoquant.data.cache.*; 28 26 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 29 import com.numericalmethod.algoquant.execution.product.equity.Equity; 30 import com.numericalmethod.algoquant.model.factormodel.EquityFactorValues; 27 import com.numericalmethod.algoquant.execution.product.equity.Stock; 31 28 import com.numericalmethod.algoquant.model.factormodel.FactorValueLookup; 29 import com.numericalmethod.algoquant.model.factormodel.StockFactorValues; 32 30 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 33 31 import com.numericalmethod.algoquant.model.factormodel.regression.famamacbeth.FamaMacBethRegressionResults; … … 37 35 import static com.numericalmethod.nmutils.collection.CollectionUtils.newHashMap; 38 36 import static com.numericalmethod.suanshu.misc.ArgumentAssertion.assertTrue; 39 import java.util.ArrayList; 40 import java.util.List; 41 import java.util.Map; 42 import java.util.Set; 43 import org.joda.time.DateTime; 44 import org.joda.time.Interval; 45 import org.joda.time.Period; 37 import java.util.*; 38 import org.joda.time.*; 46 39 47 40 /** … … 85 78 */ 86 79 public FamaMacBethPanelRegressionResults run( 87 final Set< Equity> equities,80 final Set<Stock> equities, 88 81 final List<Factor> factors, 89 82 DateTime startTime, … … 99 92 computeFactorExposures(intervals, equities, factors); 100 93 101 SequentialCache<Map< Equity, Double>> returnCache =102 compute EquityReturns(intervals, equities);94 SequentialCache<Map<Stock, Double>> returnCache = 95 computeStockReturns(intervals, equities); 103 96 104 97 FactorPanelRegression regression = new FactorPanelRegression(factorExposures); … … 118 111 } 119 112 120 private SequentialCache<Map< Equity, Double>> computeEquityReturns(113 private SequentialCache<Map<Stock, Double>> computeStockReturns( 121 114 List<Interval> intervals, 122 Set< Equity> equities) {115 Set<Stock> stocks) { 123 116 124 BufferCache<Map< Equity, Double>> returnCache = new BufferCache<Map<Equity, Double>>();117 BufferCache<Map<Stock, Double>> returnCache = new BufferCache<Map<Stock, Double>>(); 125 118 126 119 for (Interval interval : intervals) { 127 Map< Equity, Double> equityReturns = newHashMap();128 for ( Equity equity : equities) {129 equityReturns.put(equity, computeReturnForEquity(equity, interval));120 Map<Stock, Double> stockReturns = newHashMap(); 121 for (Stock stock : stocks) { 122 stockReturns.put(stock, computeStockReturns2(stock, interval)); 130 123 } 131 124 132 returnCache.add(interval.getStart(), equityReturns);125 returnCache.add(interval.getStart(), stockReturns); 133 126 } 134 127 … … 136 129 } 137 130 138 private double compute ReturnForEquity(Equity equity, Interval interval) {131 private double computeStockReturns2(Stock stock, Interval interval) { 139 132 double priceStart = marketSnapshotCache.get(interval.getStart()). 140 getData().getProfile( equity).getPrice();133 getData().getProfile(stock).getPrice(); 141 134 double priceEnd = marketSnapshotCache.get(interval.getEnd()). 142 getData().getProfile( equity).getPrice();135 getData().getProfile(stock).getPrice(); 143 136 144 137 return RETURN_CALCULATOR.computeReturn(priceStart, priceEnd); … … 147 140 private Map<DateTime, FactorValueLookup> computeFactorExposures( 148 141 List<Interval> intervals, 149 Set< Equity> equities,142 Set<Stock> stocks, 150 143 List<Factor> factors) { 151 144 … … 154 147 for (Interval interval : intervals) { 155 148 156 EquityFactorValues factorValues = new EquityFactorValues();157 for ( Equity equity : equities) {149 StockFactorValues factorValues = new StockFactorValues(); 150 for (Stock stock : stocks) { 158 151 for (Factor factor : factors) { 159 152 double factorValue = factor.getFactorExposure( 160 equity, interval.getStart(), marketSnapshotCache);161 factorValues.put(factor, equity, factorValue);153 stock, interval.getStart(), marketSnapshotCache); 154 factorValues.put(factor, stock, factorValue); 162 155 } 163 156 } -
core/src/main/java/com/numericalmethod/algoquant/model/portfoliooptimization/performance/PerformanceOptimizedYahooEODPortfolio.java
r1366 r1495 26 26 import com.numericalmethod.algoquant.data.historicaldata.DepthCacheUtils; 27 27 import com.numericalmethod.algoquant.data.historicaldata.yahoo.YahooEOD; 28 import com.numericalmethod.algoquant.data.type. EquityEOD;28 import com.numericalmethod.algoquant.data.type.StockEOD; 29 29 import com.numericalmethod.algoquant.execution.performance.measure.ExchangeRateTable; 30 30 import com.numericalmethod.algoquant.execution.performance.measure.PerformanceMeasure; 31 31 import com.numericalmethod.algoquant.execution.product.Product; 32 import com.numericalmethod.algoquant.execution.product.equity. Equity;32 import com.numericalmethod.algoquant.execution.product.equity.Stock; 33 33 import com.numericalmethod.algoquant.execution.simulator.DepthCaches; 34 34 import com.numericalmethod.algoquant.execution.strategy.ProductParams; 35 35 import static com.numericalmethod.nmutils.collection.CollectionUtils.*; 36 import java.util.ArrayList; 37 import java.util.Collections; 38 import java.util.List; 39 import java.util.Map; 36 import java.util.*; 40 37 import org.joda.time.DateTime; 41 38 … … 44 41 * @author Haksun Li 45 42 */ 46 public class PerformanceOptimizedYahooEODPortfolio extends PerformanceOptimizedPortfolio< EquityEOD> {43 public class PerformanceOptimizedYahooEODPortfolio extends PerformanceOptimizedPortfolio<StockEOD> { 47 44 48 45 public static interface YahooEODFactory { 49 46 50 public YahooEOD newYahooEOD( Equity equity);47 public YahooEOD newYahooEOD(Stock stock); 51 48 } 52 49 … … 54 51 55 52 protected final List<ProductParams> productParams; 56 private final Map<Product, CacheFactory< EquityEOD>> cacheFactories;53 private final Map<Product, CacheFactory<StockEOD>> cacheFactories; 57 54 private final ExchangeRateTable rates; 58 55 … … 62 59 new YahooEODFactory() { 63 60 @Override 64 public YahooEOD newYahooEOD( Equity equity) {65 return new YahooEOD( equity, "./log/Yahoo", "./log/Yahoo");61 public YahooEOD newYahooEOD(Stock stock) { 62 return new YahooEOD(stock, "./log/Yahoo", "./log/Yahoo"); 66 63 } 67 64 }, … … 70 67 71 68 public Specification(List<ProductParams> productParams, YahooEODFactory yahooEodFactory, 72 ExchangeRateTable rates) {69 ExchangeRateTable rates) { 73 70 this.productParams = new ArrayList<ProductParams>(productParams); 74 71 this.cacheFactories = createSourceFactories(productParams, yahooEodFactory); … … 88 85 depthCaches.addCache( 89 86 product, 90 DepthCacheUtils.from EquityEODCache(product,91 cacheFactories.get(product).getCache(begin, end)));87 DepthCacheUtils.fromStockEODCache(product, 88 cacheFactories.get(product).getCache(begin, end))); 92 89 } 93 90 … … 99 96 } 100 97 101 public Map<Product, CacheFactory< EquityEOD>> getCacheFactories() {98 public Map<Product, CacheFactory<StockEOD>> getCacheFactories() { 102 99 return Collections.unmodifiableMap(cacheFactories); 103 100 } … … 107 104 } 108 105 109 private static Map<Product, CacheFactory< EquityEOD>> createSourceFactories(106 private static Map<Product, CacheFactory<StockEOD>> createSourceFactories( 110 107 List<ProductParams> productParams, 111 108 YahooEODFactory yahooEodFactory) { 112 Map<Product, CacheFactory< EquityEOD>> sourceFactories = newHashMap(16);109 Map<Product, CacheFactory<StockEOD>> sourceFactories = newHashMap(16); 113 110 for (ProductParams param : productParams) { 114 111 Product product = param.product; 115 Equity equityProduct = product.as(Equity.class);116 YahooEOD yahoo = yahooEodFactory.newYahooEOD( equityProduct);112 Stock stockProduct = product.as(Stock.class); 113 YahooEOD yahoo = yahooEodFactory.newYahooEOD(stockProduct); 117 114 sourceFactories.put(product, yahoo); 118 115 } -
core/src/main/java/com/numericalmethod/algoquant/model/signal/volume/AccumulationDistributionLine.java
r1366 r1495 23 23 package com.numericalmethod.algoquant.model.signal.volume; 24 24 25 import com.numericalmethod.algoquant.data.type. EquityEOD;25 import com.numericalmethod.algoquant.data.type.StockEOD; 26 26 import org.joda.time.DateTime; 27 27 … … 45 45 46 46 @Override 47 public Double update(DateTime t, EquityEOD data) {47 public Double update(DateTime t, StockEOD data) { 48 48 super.update(data); 49 49 this.value += super.getMoneyFlowVolume(); -
core/src/main/java/com/numericalmethod/algoquant/model/signal/volume/ChaikinMoneyFlow.java
r1366 r1495 23 23 package com.numericalmethod.algoquant.model.signal.volume; 24 24 25 import com.numericalmethod.algoquant.data.type. EquityEOD;25 import com.numericalmethod.algoquant.data.type.StockEOD; 26 26 import com.numericalmethod.algoquant.model.signal.movingwindow.MovingWindowBySize; 27 27 import com.numericalmethod.suanshu.number.DoubleUtils; … … 48 48 49 49 @Override 50 public Double update(DateTime t, EquityEOD data) {50 public Double update(DateTime t, StockEOD data) { 51 51 super.update(data); 52 52 moneyFlowVolumeWindow.add(getMoneyFlowVolume()); -
core/src/main/java/com/numericalmethod/algoquant/model/signal/volume/ChaikinVolumeSignal.java
r1366 r1495 23 23 package com.numericalmethod.algoquant.model.signal.volume; 24 24 25 import com.numericalmethod.algoquant.data.type. EquityEOD;25 import com.numericalmethod.algoquant.data.type.StockEOD; 26 26 import com.numericalmethod.algoquant.model.signal.DoubleSignal; 27 27 … … 32 32 * @author Johannes Lehmann 33 33 */ 34 abstract class ChaikinVolumeSignal implements DoubleSignal< EquityEOD> {34 abstract class ChaikinVolumeSignal implements DoubleSignal<StockEOD> { 35 35 36 36 private double moneyFlowMultiplier; … … 38 38 39 39 // Signature intentionally doesn't match that of interface, to force subclasses to implement their own update 40 public Double update( EquityEOD eod) {40 public Double update(StockEOD eod) { 41 41 this.moneyFlowMultiplier = ((eod.getClose() - eod.getLow()) - (eod.getHigh() - eod.getClose())) / (eod.getHigh() - eod.getLow()); 42 42 this.moneyFlowVolume = moneyFlowMultiplier * eod.getVolume(); -
core/src/test/java/com/numericalmethod/algoquant/data/cache/conversion/Cache2MatrixTest.java
r1366 r1495 23 23 package com.numericalmethod.algoquant.data.cache.conversion; 24 24 25 import static com.numericalmethod.algoquant.data.cache.processor.transformer.DoubleEntryTransformers. EQUITYEOD;25 import static com.numericalmethod.algoquant.data.cache.processor.transformer.DoubleEntryTransformers.STOCK_EOD; 26 26 import com.numericalmethod.algoquant.data.historicaldata.yahoo.YahooEOD; 27 import com.numericalmethod.algoquant.execution.product.equity. Equity;27 import com.numericalmethod.algoquant.execution.product.equity.Stock; 28 28 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 29 29 import com.numericalmethod.suanshu.algebra.linear.matrix.doubles.AreMatrices; … … 45 45 public void test_0010() { 46 46 //setup data source 47 Equity GOOG = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.GOOG.getInstance().as(Equity.class);47 Stock GOOG = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.GOOG.getInstance().as(Stock.class); 48 48 DateTime begin = JodaTimeUtils.getDate(2010, 1, 1, Exchange.NASDAQ.timeZone); 49 49 DateTime end = JodaTimeUtils.getDate(2010, 1, 10, Exchange.NASDAQ.timeZone); … … 55 55 56 56 @SuppressWarnings("unchecked") 57 Cache2Matrix instance = new Cache2Matrix( EQUITYEOD.doProcess(GOOGsrc.getCache(begin, end)));57 Cache2Matrix instance = new Cache2Matrix(STOCK_EOD.doProcess(GOOGsrc.getCache(begin, end))); 58 58 59 59 // System.out.println(instance); … … 73 73 public void test_0020() { 74 74 //setup data source 75 Equity AAPL = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.AAPL.getInstance().as(Equity.class);75 Stock AAPL = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.AAPL.getInstance().as(Stock.class); 76 76 DateTime begin = JodaTimeUtils.getDate(2010, 1, 1, Exchange.NASDAQ.timeZone); 77 77 DateTime end = JodaTimeUtils.getDate(2010, 1, 10, Exchange.NASDAQ.timeZone); … … 81 81 "./log/Yahoo"); 82 82 83 Equity GOOG = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.GOOG.getInstance().as(Equity.class);83 Stock GOOG = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.GOOG.getInstance().as(Stock.class); 84 84 YahooEOD GOOGsrc = new YahooEOD( 85 85 GOOG, … … 89 89 @SuppressWarnings("unchecked") 90 90 Cache2Matrix instance = new Cache2Matrix( 91 EQUITYEOD.doProcess(AAPLsrc.getCache(begin, end)),92 EQUITYEOD.doProcess(GOOGsrc.getCache(begin, end)));91 STOCK_EOD.doProcess(AAPLsrc.getCache(begin, end)), 92 STOCK_EOD.doProcess(GOOGsrc.getCache(begin, end))); 93 93 94 94 // System.out.println(instance); -
core/src/test/java/com/numericalmethod/algoquant/data/cache/conversion/Cache2ReturnsMatrixTest.java
r1366 r1495 23 23 package com.numericalmethod.algoquant.data.cache.conversion; 24 24 25 import static com.numericalmethod.algoquant.data.cache.processor.transformer.DoubleEntryTransformers. EQUITYEOD;25 import static com.numericalmethod.algoquant.data.cache.processor.transformer.DoubleEntryTransformers.STOCK_EOD; 26 26 import com.numericalmethod.algoquant.data.historicaldata.yahoo.YahooEOD; 27 import com.numericalmethod.algoquant.execution.product.equity. Equity;27 import com.numericalmethod.algoquant.execution.product.equity.Stock; 28 28 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 29 29 import com.numericalmethod.suanshu.algebra.linear.matrix.doubles.AreMatrices; … … 46 46 public void test_0010() { 47 47 //setup data source 48 Equity VFINX = com.numericalmethod.algoquant.execution.product.equity.usa.VFINX.getInstance().as(Equity.class);48 Stock VFINX = com.numericalmethod.algoquant.execution.product.equity.usa.VFINX.getInstance().as(Stock.class); 49 49 DateTime begin = JodaTimeUtils.getDate(2010, 1, 1, Exchange.NASDAQ.timeZone); 50 50 DateTime end = JodaTimeUtils.getDate(2010, 1, 10, Exchange.NASDAQ.timeZone); … … 53 53 "./test-data/Yahoo"); 54 54 55 Equity GOOG = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.GOOG.getInstance().as(Equity.class);55 Stock GOOG = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.GOOG.getInstance().as(Stock.class); 56 56 YahooEOD GOOGsrc = new YahooEOD( 57 57 GOOG, … … 60 60 @SuppressWarnings("unchecked") 61 61 Cache2ReturnsMatrix instance = new Cache2ReturnsMatrix( 62 EQUITYEOD.doProcess(VFINXsrc.getCache(begin, end)), EQUITYEOD.doProcess(GOOGsrc.getCache(begin, end)));62 STOCK_EOD.doProcess(VFINXsrc.getCache(begin, end)), STOCK_EOD.doProcess(GOOGsrc.getCache(begin, end))); 63 63 64 64 // System.out.println(instance); … … 77 77 public void test_0020() { 78 78 //setup data source 79 Equity GOOG = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.GOOG.getInstance().as(Equity.class);79 Stock GOOG = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.GOOG.getInstance().as(Stock.class); 80 80 DateTime begin = JodaTimeUtils.getDate(2009, 1, 1, Exchange.NASDAQ.timeZone); 81 81 DateTime end = JodaTimeUtils.getDate(2010, 12, 31, Exchange.NASDAQ.timeZone); … … 84 84 "./test-data/Yahoo"); 85 85 86 Equity AAPL = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.AAPL.getInstance().as(Equity.class);86 Stock AAPL = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.AAPL.getInstance().as(Stock.class); 87 87 YahooEOD AAPLsrc = new YahooEOD( 88 88 AAPL, … … 91 91 @SuppressWarnings("unchecked") 92 92 Cache2ReturnsMatrix returns = new Cache2ReturnsMatrix( 93 EQUITYEOD.doProcess(GOOGsrc.getCache(begin, end)), EQUITYEOD.doProcess(AAPLsrc.getCache(begin, end)));93 STOCK_EOD.doProcess(GOOGsrc.getCache(begin, end)), STOCK_EOD.doProcess(AAPLsrc.getCache(begin, end))); 94 94 95 95 SampleCovariance instance = new SampleCovariance(returns); -
core/src/test/java/com/numericalmethod/algoquant/data/equity/CompanyProfileTest.java
r1492 r1495 26 26 import com.numericalmethod.algoquant.data.equity.measure.TradedPrice; 27 27 import com.numericalmethod.algoquant.data.equity.measure.TradingData; 28 import com.numericalmethod.algoquant.execution.product.equity. Equity;28 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 29 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 30 30 import com.numericalmethod.algoquant.execution.product.equity.hkex.HKEXProduct; … … 43 43 CompanyMeasure price = new TradedPrice(); 44 44 45 CompanyProfileImpl instance = new CompanyProfileImpl(new HKEXProduct("0005").as( Equity.class), new TradingData() {45 CompanyProfileImpl instance = new CompanyProfileImpl(new HKEXProduct("0005").as(Stock.class), new TradingData() { 46 46 @Override 47 47 public DateTime getDate() { -
core/src/test/java/com/numericalmethod/algoquant/data/equity/filter/companyhistories/DummyCompanyHistory.java
r1492 r1495 28 28 import com.numericalmethod.algoquant.data.equity.measure.CompanyMeasure; 29 29 import com.numericalmethod.algoquant.data.structure.TimedEntry; 30 import com.numericalmethod.algoquant.execution.product.equity.Equity;31 30 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 31 import com.numericalmethod.algoquant.execution.product.equity.Stock; 32 32 import com.numericalmethod.nmutils.iterator.AbstractReadOnlyIterator; 33 33 import java.util.Iterator; … … 48 48 49 49 public DummyCompanyHistory(List<DateTime> dates) { 50 Equity equity = new Equity("Foo" + counter++, Exchange.HKEX);50 Stock stock = new Stock("Foo" + counter++, Exchange.HKEX); 51 51 this.history = new CompanyHistoryImpl( 52 equity,52 stock, 53 53 null, 54 newSequentialCache(dates, equity));54 newSequentialCache(dates, stock)); 55 55 } 56 56 57 57 @Override 58 public Equity getEquity() {59 return history.get Equity();58 public Stock getStock() { 59 return history.getStock(); 60 60 } 61 61 … … 66 66 67 67 private static SequentialCache<CompanyProfile> newSequentialCache(final List<DateTime> dates, 68 final Equity equity) {68 final Stock stock) { 69 69 return new SequentialCache<CompanyProfile>() { 70 70 @Override … … 82 82 return new TimedEntry<CompanyProfile>(datesIterator.next(), new CompanyProfile() { 83 83 @Override 84 public Equity getEquity() {85 return equity;84 public Stock getStock() { 85 return stock; 86 86 } 87 87 -
core/src/test/java/com/numericalmethod/algoquant/data/equity/filter/companyhistories/SmallCapFilterTest.java
r1492 r1495 72 72 73 73 for (CompanyHistory history : companyHistories) { 74 symbols.add(history.get Equity().getSymbol());74 symbols.add(history.getStock().getSymbol()); 75 75 } 76 76 -
core/src/test/java/com/numericalmethod/algoquant/data/equity/filter/companyhistories/TestCompanyHistory.java
r1492 r1495 25 25 import com.numericalmethod.algoquant.data.cache.RandomAccessCache; 26 26 import com.numericalmethod.algoquant.data.cache.SequentialCache; 27 import com.numericalmethod.algoquant.data.equity.CompanyHistory; 28 import com.numericalmethod.algoquant.data.equity.CompanyHistoryImpl; 29 import com.numericalmethod.algoquant.data.equity.CompanyInfo; 30 import com.numericalmethod.algoquant.data.equity.CompanyProfile; 27 import com.numericalmethod.algoquant.data.equity.*; 31 28 import com.numericalmethod.algoquant.data.structure.TimedEntry; 32 import com.numericalmethod.algoquant.execution.product.equity. Equity;29 import com.numericalmethod.algoquant.execution.product.equity.Stock; 33 30 import java.util.Iterator; 34 31 import java.util.List; … … 42 39 private final CompanyHistory history; 43 40 44 public TestCompanyHistory( Equity equity, final List<TimedEntry<CompanyProfile>> companyProfiles) {41 public TestCompanyHistory(Stock stock, final List<TimedEntry<CompanyProfile>> companyProfiles) { 45 42 this.history = new CompanyHistoryImpl( 46 equity,43 stock, 47 44 null, 48 45 new SequentialCache<CompanyProfile>() { … … 55 52 56 53 @Override 57 public Equity getEquity() {58 return history.get Equity();54 public Stock getStock() { 55 return history.getStock(); 59 56 } 60 57 -
core/src/test/java/com/numericalmethod/algoquant/data/equity/snapshot/MonthlyDataFromMarketSnapshotsTest.java
r1492 r1495 30 30 import com.numericalmethod.algoquant.data.equity.measure.TradedPrice; 31 31 import com.numericalmethod.algoquant.data.structure.TimedEntry; 32 import com.numericalmethod.algoquant.execution.product.equity.Equity;33 32 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 34 import java.util.Collections; 35 import java.util.Iterator; 36 import java.util.List; 33 import com.numericalmethod.algoquant.execution.product.equity.Stock; 34 import java.util.*; 37 35 import org.joda.time.DateTime; 38 36 import org.joda.time.Period; … … 45 43 public class MonthlyDataFromMarketSnapshotsTest { 46 44 47 private static final Equity equity = new Equity("01550906W", Exchange.HKEX);45 private static final Stock stock = new Stock("01550906W", Exchange.HKEX); 48 46 49 47 @Test … … 51 49 RandomAccessCache<MarketSnapshot> marketSnapshotCache = generateTestMarketSnapshotCache(); 52 50 53 MonthlyDataFromMarketSnapshots monthlyData = new MonthlyDataFromMarketSnapshots(marketSnapshotCache, equity);51 MonthlyDataFromMarketSnapshots monthlyData = new MonthlyDataFromMarketSnapshots(marketSnapshotCache, stock); 54 52 55 53 Iterator<TimedEntry<MarketSnapshot>> marketSnapshotsIterator = marketSnapshotCache.iterator(); … … 67 65 68 66 assertEquals("times are equal", currentMarketSnapshot.getTime(), times.get(currentIndex)); 69 assertEquals("market Prices are equal", currentMarketSnapshot.getData().get MarketValue(), market.get(currentIndex), 1e-15);67 assertEquals("market Prices are equal", currentMarketSnapshot.getData().getBenchmark(), market.get(currentIndex), 1e-15); 70 68 71 69 currentIndex += 1; … … 76 74 public void test_0020() { 77 75 RandomAccessCache<MarketSnapshot> marketSnapshotCache = generateTestMarketSnapshotCache(); 78 MonthlyDataFromMarketSnapshots monthlyData = new MonthlyDataFromMarketSnapshots(marketSnapshotCache, equity);76 MonthlyDataFromMarketSnapshots monthlyData = new MonthlyDataFromMarketSnapshots(marketSnapshotCache, stock); 79 77 80 78 List<DateTime> times = monthlyData.getTimes(); … … 108 106 new CompanyProfile() { 109 107 @Override 110 public Equity getEquity() {111 return equity;108 public Stock getStock() { 109 return stock; 112 110 } 113 111 -
core/src/test/java/com/numericalmethod/algoquant/data/export/BatchSimulationXmlWriterUtilsTest.java
r1472 r1495 61 61 @Test 62 62 public void test_exportSensitivityAnalysisResults() throws Exception { 63 List<Product> products = ProductUtils.new EquityProductList(63 List<Product> products = ProductUtils.newStockProductList( 64 64 new String[]{ 65 65 "AAPL", "GOOG", "AMZN", "IBM", "HPQ", "MSFT", "CSCO", "ORCL", "INTC", "YHOO"}, -
core/src/test/java/com/numericalmethod/algoquant/data/historicaldata/compustat/CompanyHistoryDBTest.java
r1366 r1495 61 61 CompanyProfile profile = entry.getData(); 62 62 63 assertEquals(symbol, profile.get Equity().getSymbol());63 assertEquals(symbol, profile.getStock().getSymbol()); 64 64 } 65 65 … … 96 96 for (String name : names) { 97 97 CompanyHistory history = db.getCompanyHistory(name); 98 assertEquals(name, history.get Equity().getSymbol());98 assertEquals(name, history.getStock().getSymbol()); 99 99 } 100 100 } … … 113 113 114 114 assertEquals(1, histories.size()); 115 assertEquals("01550906W", histories.get(0).get Equity().getSymbol());115 assertEquals("01550906W", histories.get(0).getStock().getSymbol()); 116 116 117 117 } -
core/src/test/java/com/numericalmethod/algoquant/data/historicaldata/compustat/TestMarketData.java
r1492 r1495 6 6 import com.numericalmethod.algoquant.data.equity.CompanyHistory; 7 7 import com.numericalmethod.algoquant.data.equity.measure.CompanyMeasure; 8 import com.numericalmethod.algoquant.data.equity.measure. EquityMeasure;8 import com.numericalmethod.algoquant.data.equity.measure.StockMeasure; 9 9 import com.numericalmethod.algoquant.data.equity.measure.MarketCap; 10 10 import com.numericalmethod.algoquant.data.equity.measure.PE; … … 40 40 new PE(), 41 41 new MarketCap(), 42 new EquityMeasure(),42 new StockMeasure(), 43 43 new TradedVolume()))); 44 44 public static final DateTime START_TIME = new DateTime(2001, 1, 1, 16, 0, TimeZoneUtils.HONG_KONG); -
core/src/test/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/MultipleYahooEODTest.java
r1366 r1495 25 25 import com.numericalmethod.algoquant.data.cache.VectorCache.Vector; 26 26 import com.numericalmethod.algoquant.data.structure.TimedEntry; 27 import com.numericalmethod.algoquant.execution.product.equity. Equity;27 import com.numericalmethod.algoquant.execution.product.equity.Stock; 28 28 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 29 29 import com.numericalmethod.suanshu.misc.datastructure.time.JodaTimeUtils; … … 44 44 DateTime end = JodaTimeUtils.getDate(2011, 3, 31, Exchange.NASDAQ.timeZone); 45 45 46 MultipleYahooEOD instance = new MultipleYahooEOD(new Equity[]{47 com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.IBM.getInstance().as( Equity.class),48 com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.ORCL.getInstance().as( Equity.class)},46 MultipleYahooEOD instance = new MultipleYahooEOD(new Stock[]{ 47 com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.IBM.getInstance().as(Stock.class), 48 com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.ORCL.getInstance().as(Stock.class)}, 49 49 begin, end, 50 50 "./test-data/Yahoo", "./log/Yahoo"); -
core/src/test/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/YahooEODCsvZipFileWriterTest.java
r1395 r1495 25 25 import com.numericalmethod.algoquant.data.cache.BufferCache; 26 26 import com.numericalmethod.algoquant.data.historicaldata.yahoo.YahooEODCsvZipFileReader.YahooRow; 27 import com.numericalmethod.algoquant.data.type. EquityEOD;28 import com.numericalmethod.algoquant.execution.product.equity. Equity;27 import com.numericalmethod.algoquant.data.type.StockEOD; 28 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 29 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 30 30 import com.numericalmethod.algoquant.execution.product.equity.hkex.HK0005; … … 48 48 public void test_0010() throws IOException, ParseException { 49 49 YahooEODCsvZipFileWriter instance = new YahooEODCsvZipFileWriter("./log"); 50 int nRows = instance.saveAllFromWeb(HK0005.getInstance().as( Equity.class));50 int nRows = instance.saveAllFromWeb(HK0005.getInstance().as(Stock.class)); 51 51 52 52 YahooEODCsvZipFileReader reader = new YahooEODCsvZipFileReader("./test-data/Yahoo/0005.HK.csv.zip"); … … 58 58 public void test_0020() throws IOException, ParseException { 59 59 YahooEODCsvZipFileWriter instance = new YahooEODCsvZipFileWriter("./log"); 60 int nRows = instance.saveAllFromWeb(AAPL.getInstance().as( Equity.class));60 int nRows = instance.saveAllFromWeb(AAPL.getInstance().as(Stock.class)); 61 61 62 62 YahooEODCsvZipFileReader reader = new YahooEODCsvZipFileReader("./test-data/Yahoo/AAPL.csv.zip"); … … 68 68 public void test_0030() throws IOException, ParseException { 69 69 YahooEODCsvZipFileWriter instance = new YahooEODCsvZipFileWriter("./log"); 70 int nRows = instance.saveAllFromWeb(HSI.getInstance().as( Equity.class));70 int nRows = instance.saveAllFromWeb(HSI.getInstance().as(Stock.class)); 71 71 72 72 YahooEODCsvZipFileReader reader = new YahooEODCsvZipFileReader("./test-data/Yahoo/^HSI.csv.zip"); … … 79 79 String dataFolder = "./log/YahooEODCsvZipFileWriterTest"; 80 80 YahooEODCsvZipFileWriter instance = new YahooEODCsvZipFileWriter(dataFolder); 81 BufferCache< EquityEOD> cache = new BufferCache<EquityEOD>();81 BufferCache<StockEOD> cache = new BufferCache<StockEOD>(); 82 82 DateTime time = new DateTime(2011, 9, 16, 1, 2, 3, 4); 83 EquityEOD data = new EquityEOD(10, 15, 8, 12, 1000, 12);83 StockEOD data = new StockEOD(10, 15, 8, 12, 1000, 12); 84 84 cache.add(time, data); 85 int nRows = instance.save(new Equity("DUMMY", Exchange.HKEX), cache);85 int nRows = instance.save(new Stock("DUMMY", Exchange.HKEX), cache); 86 86 87 87 assertEquals(1, nRows); … … 108 108 public void downloadData() throws IOException, ParseException { 109 109 YahooEODCsvZipFileWriter instance = new YahooEODCsvZipFileWriter("./log/"); 110 instance.saveAllFromWeb(VFINX.getInstance().as( Equity.class));110 instance.saveAllFromWeb(VFINX.getInstance().as(Stock.class)); 111 111 } 112 112 } -
core/src/test/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/YahooEODTest.java
r1407 r1495 25 25 import com.numericalmethod.algoquant.data.cache.SequentialCache; 26 26 import com.numericalmethod.algoquant.data.structure.TimedEntry; 27 import com.numericalmethod.algoquant.data.type. EquityEOD;28 import com.numericalmethod.algoquant.execution.product.equity. Equity;27 import com.numericalmethod.algoquant.data.type.StockEOD; 28 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 29 import com.numericalmethod.nmutils.io.NMIO; 30 30 import com.numericalmethod.suanshu.misc.datastructure.time.JodaTimeUtils; … … 55 55 @Test 56 56 public void test_loadFromFile_0010() { 57 Equity HK0005 = com.numericalmethod.algoquant.execution.product.equity.hkex.HK0005.getInstance().as(Equity.class);57 Stock HK0005 = com.numericalmethod.algoquant.execution.product.equity.hkex.HK0005.getInstance().as(Stock.class); 58 58 DateTime begin = JodaTimeUtils.getDate(2003, 1, 1, HK0005.getExchange().timeZone); 59 59 DateTime end = JodaTimeUtils.getDate(2003, 1, 10, HK0005.getExchange().timeZone); 60 SequentialCache< EquityEOD> instance =60 SequentialCache<StockEOD> instance = 61 61 new YahooEOD(HK0005, "./test-data/Yahoo", getTestFolderName()).getCache(begin, end); 62 62 63 63 int count = 0; 64 for (TimedEntry< EquityEOD> entry : instance) {64 for (TimedEntry<StockEOD> entry : instance) { 65 65 ++count; 66 66 } … … 74 74 @Test 75 75 public void test_notEnoughData_0010() { 76 Equity AAPL = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.AAPL.getInstance().as(Equity.class);76 Stock AAPL = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.AAPL.getInstance().as(Stock.class); 77 77 DateTime begin = JodaTimeUtils.getDate(1984, 9, 5, AAPL.getExchange().timeZone); // there is no data from web on 9-5 and 9-6 78 78 DateTime end = JodaTimeUtils.getDate(1984, 9, 10, AAPL.getExchange().timeZone); 79 SequentialCache< EquityEOD> instance =79 SequentialCache<StockEOD> instance = 80 80 new YahooEOD(AAPL, "./test-data/Yahoo/partial", getTestFolderName()).getCache(begin, end); 81 81 82 82 int count = 0; 83 for (TimedEntry< EquityEOD> entry : instance) {83 for (TimedEntry<StockEOD> entry : instance) { 84 84 ++count; 85 85 } … … 95 95 @Test 96 96 public void test_notEnoughData_0020() { 97 Equity AAPL = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.AAPL.getInstance().as(Equity.class);97 Stock AAPL = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.AAPL.getInstance().as(Stock.class); 98 98 DateTime begin = JodaTimeUtils.getDate(1984, 9, 7, AAPL.getExchange().timeZone); 99 99 DateTime end = JodaTimeUtils.getDate(1984, 10, 1, AAPL.getExchange().timeZone); 100 SequentialCache< EquityEOD> instance =100 SequentialCache<StockEOD> instance = 101 101 new YahooEOD(AAPL, "./test-data/Yahoo/partial", getTestFolderName()).getCache(begin, end); 102 102 103 103 int count = 0; 104 for (TimedEntry< EquityEOD> entry : instance) {104 for (TimedEntry<StockEOD> entry : instance) { 105 105 ++count; 106 106 } … … 113 113 @Test 114 114 public void test_alwaysDownloadFromWeb() { 115 Equity AAPL = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.AAPL.getInstance().as(Equity.class);115 Stock AAPL = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.AAPL.getInstance().as(Stock.class); 116 116 DateTime begin = JodaTimeUtils.getDate(1984, 9, 7, AAPL.getExchange().timeZone); 117 117 DateTime end = JodaTimeUtils.getDate(1984, 10, 1, AAPL.getExchange().timeZone); 118 SequentialCache< EquityEOD> instance = new YahooEOD(AAPL).getCache(begin, end);118 SequentialCache<StockEOD> instance = new YahooEOD(AAPL).getCache(begin, end); 119 119 120 120 int count = 0; 121 for (TimedEntry< EquityEOD> entry : instance) {121 for (TimedEntry<StockEOD> entry : instance) { 122 122 ++count; 123 123 } … … 127 127 @Test 128 128 public void test_multipleInstancesOfTheSameSource() { 129 Equity HK0005 = com.numericalmethod.algoquant.execution.product.equity.hkex.HK0005.getInstance().as(Equity.class);129 Stock HK0005 = com.numericalmethod.algoquant.execution.product.equity.hkex.HK0005.getInstance().as(Stock.class); 130 130 DateTime begin = JodaTimeUtils.getDate(2004, 1, 1, HK0005.getExchange().timeZone); 131 131 DateTime end = JodaTimeUtils.getDate(2006, 1, 1, HK0005.getExchange().timeZone); 132 132 YahooEOD source = new YahooEOD(HK0005, "./test-data/Yahoo", getTestFolderName()); 133 133 134 SequentialCache< EquityEOD> instance1 = source.getCache(134 SequentialCache<StockEOD> instance1 = source.getCache( 135 135 JodaTimeUtils.getDate(2005, 1, 1, HK0005.getExchange().timeZone), 136 136 JodaTimeUtils.getDate(2005, 1, 10, HK0005.getExchange().timeZone)); 137 137 138 SequentialCache< EquityEOD> instance2 = source.getCache(138 SequentialCache<StockEOD> instance2 = source.getCache( 139 139 JodaTimeUtils.getDate(2004, 12, 20, HK0005.getExchange().timeZone), 140 140 JodaTimeUtils.getDate(2005, 1, 10, HK0005.getExchange().timeZone)); 141 141 142 142 int count1 = 0, count2 = 0; 143 for (TimedEntry< EquityEOD> entry : instance1) {143 for (TimedEntry<StockEOD> entry : instance1) { 144 144 if (entry != null) { 145 145 ++count1; 146 146 } 147 147 } 148 for (TimedEntry< EquityEOD> entry : instance2) {148 for (TimedEntry<StockEOD> entry : instance2) { 149 149 if (entry != null) { 150 150 ++count2; -
core/src/test/java/com/numericalmethod/algoquant/data/historicaldata/yahoo/YahooEODWebDownloaderTest.java
r1366 r1495 25 25 import com.numericalmethod.algoquant.data.cache.SequentialCache; 26 26 import com.numericalmethod.algoquant.data.structure.TimedEntry; 27 import com.numericalmethod.algoquant.data.type. EquityEOD;28 import com.numericalmethod.algoquant.execution.product.equity. Equity;27 import com.numericalmethod.algoquant.data.type.StockEOD; 28 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 29 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 30 30 import com.numericalmethod.algoquant.execution.product.equity.hkex.HK0005; … … 45 45 final DateTime endDate = JodaTimeUtils.getDate(2010, 11, 12, Exchange.HKEX.timeZone); 46 46 47 SequentialCache< EquityEOD> instance = new YahooEODWebDownloader(HK0005.getInstance().as(Equity.class)).getCache(startDate, endDate);47 SequentialCache<StockEOD> instance = new YahooEODWebDownloader(HK0005.getInstance().as(Stock.class)).getCache(startDate, endDate); 48 48 49 49 int count = 0; 50 for (TimedEntry< EquityEOD> entry : instance) {50 for (TimedEntry<StockEOD> entry : instance) { 51 51 count++; 52 52 } … … 60 60 final DateTime endDate = JodaTimeUtils.getDate(2010, 11, 12, Exchange.NASDAQ.timeZone); 61 61 62 SequentialCache< EquityEOD> instance = new YahooEODWebDownloader(HK0005.getInstance().as(Equity.class)).getCache(startDate, endDate);62 SequentialCache<StockEOD> instance = new YahooEODWebDownloader(HK0005.getInstance().as(Stock.class)).getCache(startDate, endDate); 63 63 64 64 int count = 0; 65 for (TimedEntry< EquityEOD> entry : instance) {65 for (TimedEntry<StockEOD> entry : instance) { 66 66 count++; 67 67 } … … 72 72 @Test 73 73 public void test_getCache_0010() { 74 YahooEODWebDownloader source = new YahooEODWebDownloader(HK0005.getInstance().as( Equity.class));74 YahooEODWebDownloader source = new YahooEODWebDownloader(HK0005.getInstance().as(Stock.class)); 75 75 76 SequentialCache< EquityEOD> instance1 = source.getCache(JodaTimeUtils.getDate(2010, 11, 5, Exchange.HKEX.timeZone),76 SequentialCache<StockEOD> instance1 = source.getCache(JodaTimeUtils.getDate(2010, 11, 5, Exchange.HKEX.timeZone), 77 77 JodaTimeUtils.getDate(2010, 11, 12, Exchange.HKEX.timeZone)); 78 78 79 SequentialCache< EquityEOD> instance2 = source.getCache(79 SequentialCache<StockEOD> instance2 = source.getCache( 80 80 JodaTimeUtils.getDate(2010, 11, 5, Exchange.HKEX.timeZone), 81 81 JodaTimeUtils.getDate(2010, 11, 15, Exchange.HKEX.timeZone)); 82 82 83 83 int count1 = 0, count2 = 0; 84 for (TimedEntry< EquityEOD> entry : instance1) {84 for (TimedEntry<StockEOD> entry : instance1) { 85 85 if (entry != null) { 86 86 ++count1; 87 87 } 88 88 } 89 for (TimedEntry< EquityEOD> entry : instance2) {89 for (TimedEntry<StockEOD> entry : instance2) { 90 90 if (entry != null) { 91 91 ++count2; -
core/src/test/java/com/numericalmethod/algoquant/data/type/portfolio/weighting/RankWeightingTest.java
r1366 r1495 23 23 package com.numericalmethod.algoquant.data.type.portfolio.weighting; 24 24 25 import com.numericalmethod.algoquant.execution.product.equity. Equity;25 import com.numericalmethod.algoquant.execution.product.equity.Stock; 26 26 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 27 27 import static com.numericalmethod.nmutils.collection.CollectionUtils.*; … … 38 38 @Test 39 39 public void test_getWeightsFromFactorsEvenNumberOfEquities_0010() { 40 Map< Equity, Double> factorValues = newHashMap();40 Map<Stock, Double> factorValues = newHashMap(); 41 41 for (int i = 1; i <= 100; i++) { 42 factorValues.put(new Equity(Integer.toString(i), Exchange.HKEX), (double) i);42 factorValues.put(new Stock(Integer.toString(i), Exchange.HKEX), (double) i); 43 43 } 44 RankWeighting< Equity> weighting = new RankWeighting<Equity>();44 RankWeighting<Stock> weighting = new RankWeighting<Stock>(); 45 45 46 Map< Equity, Double> weights = weighting.computeWeights(factorValues);46 Map<Stock, Double> weights = weighting.computeWeights(factorValues); 47 47 48 for (Map.Entry< Equity, Double> weight : weights.entrySet()) {48 for (Map.Entry<Stock, Double> weight : weights.entrySet()) { 49 49 double factorValue = factorValues.get(weight.getKey()); 50 50 … … 59 59 @Test 60 60 public void test_getWeightsFromFactorsOddNumberOfEquities_0010() { 61 Map< Equity, Double> factorValues = newHashMap();61 Map<Stock, Double> factorValues = newHashMap(); 62 62 for (int i = 1; i <= 101; i++) { 63 factorValues.put(new Equity(Integer.toString(i), Exchange.HKEX), (double) i);63 factorValues.put(new Stock(Integer.toString(i), Exchange.HKEX), (double) i); 64 64 } 65 RankWeighting< Equity> weighting = new RankWeighting<Equity>();65 RankWeighting<Stock> weighting = new RankWeighting<Stock>(); 66 66 67 Map< Equity, Double> weights = weighting.computeWeights(factorValues);67 Map<Stock, Double> weights = weighting.computeWeights(factorValues); 68 68 69 for (Map.Entry< Equity, Double> weight : weights.entrySet()) {69 for (Map.Entry<Stock, Double> weight : weights.entrySet()) { 70 70 double factorValue = factorValues.get(weight.getKey()); 71 71 -
core/src/test/java/com/numericalmethod/algoquant/data/type/portfolio/weighting/TopBottomQuantilesEqualWeightingTest.java
r1366 r1495 23 23 package com.numericalmethod.algoquant.data.type.portfolio.weighting; 24 24 25 import com.numericalmethod.algoquant.execution.product.equity. Equity;25 import com.numericalmethod.algoquant.execution.product.equity.Stock; 26 26 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 27 27 import static com.numericalmethod.nmutils.collection.CollectionUtils.*; … … 37 37 @Test(expected = IllegalArgumentException.class) 38 38 public void test_tooSmallQ_0010() { 39 TopBottomQuantilesEqualWeighting< Equity> weighting = new TopBottomQuantilesEqualWeighting<Equity>(1);39 TopBottomQuantilesEqualWeighting<Stock> weighting = new TopBottomQuantilesEqualWeighting<Stock>(1); 40 40 } 41 41 42 42 @Test(expected = IllegalArgumentException.class) 43 43 public void test_tooFewEquities_0010() { 44 Map< Equity, Double> factorValues = newHashMap();44 Map<Stock, Double> factorValues = newHashMap(); 45 45 for (int i = 1; i <= 99; i++) { 46 factorValues.put(new Equity(Integer.toString(i), Exchange.HKEX), (double) i);46 factorValues.put(new Stock(Integer.toString(i), Exchange.HKEX), (double) i); 47 47 } 48 48 49 TopBottomQuantilesEqualWeighting< Equity> weighting = new TopBottomQuantilesEqualWeighting<Equity>(100);49 TopBottomQuantilesEqualWeighting<Stock> weighting = new TopBottomQuantilesEqualWeighting<Stock>(100); 50 50 weighting.computeWeights(factorValues); 51 51 } … … 53 53 @Test 54 54 public void test_getWeightsFromFactors_0010() { 55 Map< Equity, Double> factorValues = newHashMap();55 Map<Stock, Double> factorValues = newHashMap(); 56 56 for (int i = 1; i <= 100; i++) { 57 factorValues.put(new Equity(Integer.toString(i), Exchange.HKEX), (double) i);57 factorValues.put(new Stock(Integer.toString(i), Exchange.HKEX), (double) i); 58 58 } 59 59 60 TopBottomQuantilesEqualWeighting< Equity> weighting = new TopBottomQuantilesEqualWeighting<Equity>(5);60 TopBottomQuantilesEqualWeighting<Stock> weighting = new TopBottomQuantilesEqualWeighting<Stock>(5); 61 61 62 Map< Equity, Double> weights = weighting.computeWeights(factorValues);62 Map<Stock, Double> weights = weighting.computeWeights(factorValues); 63 63 64 64 checkWeightCounts(weights, 20); 65 65 66 66 // check weight values 67 for (Map.Entry< Equity, Double> weight : weights.entrySet()) {67 for (Map.Entry<Stock, Double> weight : weights.entrySet()) { 68 68 double factorValue = factorValues.get(weight.getKey()); 69 69 double weightValue = weight.getValue(); … … 76 76 } 77 77 78 private static void checkWeightCounts(Map< Equity, Double> weights, int quantileSize) {78 private static void checkWeightCounts(Map<Stock, Double> weights, int quantileSize) { 79 79 int nNeg = 0; 80 80 int nPos = 0; 81 for (Map.Entry< Equity, Double> weight : weights.entrySet()) {81 for (Map.Entry<Stock, Double> weight : weights.entrySet()) { 82 82 if (weight.getValue() > 0.0) { 83 83 nPos++; -
core/src/test/java/com/numericalmethod/algoquant/execution/depth/SimulatedDepthCacheTest.java
r1366 r1495 30 30 import com.numericalmethod.algoquant.data.type.Depth; 31 31 import com.numericalmethod.algoquant.execution.depth.returns.ReturnsGenerator; 32 import com.numericalmethod.algoquant.execution.product.Currencies; 33 import com.numericalmethod.algoquant.execution.product.Product; 34 import com.numericalmethod.algoquant.execution.product.ProductUtils; 35 import com.numericalmethod.algoquant.execution.product.equity.Equity; 32 import com.numericalmethod.algoquant.execution.product.*; 36 33 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 34 import com.numericalmethod.algoquant.execution.product.equity.Stock; 37 35 import com.numericalmethod.algoquant.execution.product.equity.hkex.HSI; 38 36 import com.numericalmethod.algoquant.model.returns.ReturnCalculators; 39 37 import com.numericalmethod.suanshu.misc.datastructure.time.JodaTimeUtils; 40 import java.util.ArrayList; 41 import java.util.Iterator; 42 import java.util.List; 38 import java.util.*; 43 39 import org.joda.time.DateTime; 44 40 import org.joda.time.Period; … … 60 56 } 61 57 } 58 62 59 private static final Product PRODUCT = HSI.getInstance(); 63 60 … … 120 117 @Test 121 118 public void test_0020() { 122 Product product = ProductUtils.new EquityProduct("XOM", Exchange.NYSE, Currencies.USD);123 Equity equity = product.as(Equity.class);124 DateTime begin = JodaTimeUtils.getDate(2012, 5, 21, equity.getExchange().timeZone);119 Product product = ProductUtils.newStockProduct("XOM", Exchange.NYSE, Currencies.USD); 120 Stock stock = product.as(Stock.class); 121 DateTime begin = JodaTimeUtils.getDate(2012, 5, 21, stock.getExchange().timeZone); 125 122 DateTime end = begin.plusDays(4); 126 YahooEOD yahoo = new YahooEOD( equity, "./log/Yahoo", "./log/Yahoo");127 SequentialCache<Depth> modelCache = DepthCacheUtils.from EquityEODCache(product, yahoo.getCache(begin, end));;123 YahooEOD yahoo = new YahooEOD(stock, "./log/Yahoo", "./log/Yahoo"); 124 SequentialCache<Depth> modelCache = DepthCacheUtils.fromStockEODCache(product, yahoo.getCache(begin, end));; 128 125 129 126 SequentialCache<Depth> simulatedCache = new SimulatedDepthCache( … … 143 140 for (int i = 0; i < 4; i++) { 144 141 TimedEntry<Depth> timedDepth = depths.get(i); 145 DateTime closingTime = equity.getExchange().getClosingTimeOnDate(146 new DateTime(2012, 5, 21, 0, 0, 0, equity.getExchange().timeZone).plusDays(i));142 DateTime closingTime = stock.getExchange().getClosingTimeOnDate( 143 new DateTime(2012, 5, 21, 0, 0, 0, stock.getExchange().timeZone).plusDays(i)); 147 144 assertEquals(closingTime, timedDepth.getTime()); 148 145 if (i > 0) { -
core/src/test/java/com/numericalmethod/algoquant/execution/product/equity/StockTest.java
r1484 r1495 30 30 * @author Haksun Li 31 31 */ 32 public class EquityTest {32 public class StockTest { 33 33 34 34 @Test 35 35 public void test_0010() { 36 Equity instance1 = new Equity("SAME", Exchange.HKEX);37 Equity instance2 = new Equity("SAME", Exchange.HKEX);36 Stock instance1 = new Stock("SAME", Exchange.HKEX); 37 Stock instance2 = new Stock("SAME", Exchange.HKEX); 38 38 assertEquals(instance1, instance2); 39 39 assertEquals(instance1.hashCode(), instance2.hashCode()); … … 42 42 @Test 43 43 public void test_0020() { 44 Equity instance1 = new Equity("instance1", Exchange.HKEX);45 Equity instance2 = new Equity("instance2", Exchange.HKEX);44 Stock instance1 = new Stock("instance1", Exchange.HKEX); 45 Stock instance2 = new Stock("instance2", Exchange.HKEX); 46 46 assertFalse(instance1.equals(instance2)); 47 47 assertFalse(instance1.hashCode() == instance2.hashCode()); -
core/src/test/java/com/numericalmethod/algoquant/execution/simulator/SimpleSimulatorTest.java
r1366 r1495 30 30 import com.numericalmethod.algoquant.execution.component.chart.plotter.NoOpPlotter; 31 31 import com.numericalmethod.algoquant.execution.component.tradeblotter.TradeBlotter; 32 import com.numericalmethod.algoquant.execution.order.BasicOrderDescription; 33 import com.numericalmethod.algoquant.execution.order.Order; 34 import com.numericalmethod.algoquant.execution.order.OrderUtils; 32 import com.numericalmethod.algoquant.execution.order.*; 35 33 import com.numericalmethod.algoquant.execution.product.Product; 36 import com.numericalmethod.algoquant.execution.product.equity. Equity;34 import com.numericalmethod.algoquant.execution.product.equity.Stock; 37 35 import com.numericalmethod.algoquant.execution.product.equity.hkex.HSI; 38 import com.numericalmethod.algoquant.execution.simulator.handler.ChannelMessageHandler; 39 import com.numericalmethod.algoquant.execution.simulator.handler.ChannelMessageHandlerFactory; 40 import com.numericalmethod.algoquant.execution.simulator.handler.NoOpMessageHandler; 36 import com.numericalmethod.algoquant.execution.simulator.handler.*; 41 37 import com.numericalmethod.algoquant.execution.simulator.market.LimitOrderExecutionModel; 42 38 import com.numericalmethod.algoquant.execution.simulator.market.StrictFillModel; … … 48 44 import com.numericalmethod.algoquant.execution.strategy.handler.UpdateHandler; 49 45 import com.numericalmethod.suanshu.misc.datastructure.time.JodaTimeUtils; 50 import java.util.ArrayList; 51 import java.util.Collections; 52 import java.util.List; 46 import java.util.*; 53 47 import org.joda.time.DateTime; 54 48 import org.joda.time.DateTimeZone; … … 66 60 67 61 static { 68 Equity equity = PRODUCT.as(Equity.class);69 DateTimeZone tz = equity.getExchange().timeZone;62 Stock stock = PRODUCT.as(Stock.class); 63 DateTimeZone tz = stock.getExchange().timeZone; 70 64 DateTime begin = JodaTimeUtils.getDate(2000, 1, 1, tz); 71 65 DateTime end = JodaTimeUtils.getDate(2001, 3, 1, tz); 72 YahooEOD yahoo = new YahooEOD( equity, "./test-data/Yahoo", "./log/Yahoo");66 YahooEOD yahoo = new YahooEOD(stock, "./test-data/Yahoo", "./log/Yahoo"); 73 67 DEPTH_CACHES = DepthCaches.newInstanceWithSingleCache( 74 PRODUCT, DepthCacheUtils.from EquityEODCache(PRODUCT, yahoo.getCache(begin, end)));68 PRODUCT, DepthCacheUtils.fromStockEODCache(PRODUCT, yahoo.getCache(begin, end))); 75 69 } 76 70 … … 88 82 broker.sendOrder(Collections.singletonList( 89 83 OrderUtils.newLimitOrder( 90 PRODUCT, BasicOrderDescription.Side.BUY, 1.0, depth.ask(1))));84 PRODUCT, BasicOrderDescription.Side.BUY, 1.0, depth.ask(1)))); 91 85 ordersCounter++; 92 86 } … … 114 108 Simulator extendedSimulator = 115 109 new SimpleSimulator.Builder(DEPTH_CACHES).useLimitOrderExecutionModel( 116 new LimitOrderExecutionModel() {117 @Override118 public double getExecutedQuantity(Depth currentDepth, Order order) {119 return 0.0; // never execute order120 }121 122 @Override123 public double getExecutedPrice(Depth currentDepth, Order order) {124 throw new UnsupportedOperationException("Shouldn't be called!");125 }126 }).build();110 new LimitOrderExecutionModel() { 111 @Override 112 public double getExecutedQuantity(Depth currentDepth, Order order) { 113 return 0.0; // never execute order 114 } 115 116 @Override 117 public double getExecutedPrice(Depth currentDepth, Order order) { 118 throw new UnsupportedOperationException("Shouldn't be called!"); 119 } 120 }).build(); 127 121 AlwaysLimitOrderStrategy strategy = new AlwaysLimitOrderStrategy(); 128 122 TradeBlotter blotter = extendedSimulator.run(strategy, new NoOpPlotter()); … … 156 150 } 157 151 } 152 158 153 } 159 154 … … 179 174 Simulator simulator = 180 175 new SimpleSimulator.Builder(DEPTH_CACHES).withCustomMessageHandlers( 181 new ChannelMessageHandlerFactory() {182 @Override183 public Class<? extends Subscribable> getSubscriberClass() {184 return MessageTypeA.class;185 }186 187 @Override188 public ChannelMessageHandler newHandler(UpdateHandler handler) {189 if (handler instanceof MessageTypeA.UpdateHandlerA) {190 return new MessageTypeA.MessageHandlerA((MessageTypeA.UpdateHandlerA) handler);191 }192 return new NoOpMessageHandler();193 }194 }).withNonDepthUpdates(msgAcache).176 new ChannelMessageHandlerFactory() { 177 @Override 178 public Class<? extends Subscribable> getSubscriberClass() { 179 return MessageTypeA.class; 180 } 181 182 @Override 183 public ChannelMessageHandler newHandler(UpdateHandler handler) { 184 if (handler instanceof MessageTypeA.UpdateHandlerA) { 185 return new MessageTypeA.MessageHandlerA((MessageTypeA.UpdateHandlerA) handler); 186 } 187 return new NoOpMessageHandler(); 188 } 189 }).withNonDepthUpdates(msgAcache). 195 190 build(); 196 197 191 198 192 MessageTypeAStrategy strategy = new MessageTypeAStrategy(); -
core/src/test/java/com/numericalmethod/algoquant/model/analysis/cointegration/MovingCointegrationTest.java
r1403 r1495 24 24 25 25 import com.numericalmethod.algoquant.data.historicaldata.yahoo.MultipleYahooEOD; 26 import com.numericalmethod.algoquant.execution.product.equity. Equity;26 import com.numericalmethod.algoquant.execution.product.equity.Stock; 27 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 28 28 import com.numericalmethod.suanshu.algebra.linear.vector.doubles.Vector; … … 46 46 47 47 MultipleYahooEOD feed = new MultipleYahooEOD( 48 new Equity[]{49 com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.IBM.getInstance().as( Equity.class),50 com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.ORCL.getInstance().as( Equity.class)},48 new Stock[]{ 49 com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.IBM.getInstance().as(Stock.class), 50 com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.ORCL.getInstance().as(Stock.class)}, 51 51 begin, end, 52 52 "./test-data/Yahoo", "./log/Yahoo"); … … 72 72 73 73 MultipleYahooEOD feed = new MultipleYahooEOD( 74 new Equity[]{75 com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.IBM.getInstance().as( Equity.class),76 com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.ORCL.getInstance().as( Equity.class)},74 new Stock[]{ 75 com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.IBM.getInstance().as(Stock.class), 76 com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.ORCL.getInstance().as(Stock.class)}, 77 77 begin, end, 78 78 "./test-data/Yahoo", "./log/Yahoo"); -
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/amp2008/ZeroCostByFactorsPortfolioGeneratorTest.java
r1366 r1495 34 34 import com.numericalmethod.algoquant.data.type.portfolio.weighting.RankWeighting; 35 35 import com.numericalmethod.algoquant.data.type.portfolio.weighting.ZeroCostWeighting; 36 import com.numericalmethod.algoquant.execution.product.equity.Equity;37 36 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 37 import com.numericalmethod.algoquant.execution.product.equity.Stock; 38 38 import com.numericalmethod.algoquant.model.factormodel.amp2008.ZeroCostByFactorsPortfolioGenerator.GroupGranularity; 39 39 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; … … 52 52 public static final CompanyHistoryDB COMPANY_HISTORY_DB = TestMarketData.COMPANY_HISTORY_DB; 53 53 private static final DateTime BASE_TIME = new DateTime(2002, 1, 1, 0, 0, TimeZoneUtils.HONG_KONG); 54 private static final ZeroCostWeighting< Equity> weighting = new RankWeighting<Equity>();54 private static final ZeroCostWeighting<Stock> weighting = new RankWeighting<Stock>(); 55 55 56 56 private class TrivialFactor implements Factor { 57 57 58 58 @Override 59 public double getFactorExposure( Equity equity, DateTime time,60 RandomAccessCache<MarketSnapshot> marketSnapshotCache) {59 public double getFactorExposure(Stock stock, DateTime time, 60 RandomAccessCache<MarketSnapshot> marketSnapshotCache) { 61 61 return 0; 62 62 } … … 82 82 Exchange.HKEX.getClosingTimeOnDate(BASE_TIME)); 83 83 84 Set< Equity> equities = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(marketSnapshots);85 Portfolio< Equity> portfolio = multiFactor.newPortfolio(equities);84 Set<Stock> equities = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(marketSnapshots); 85 Portfolio<Stock> portfolio = multiFactor.newPortfolio(equities); 86 86 87 87 assertTrue(PortfolioUtils.isNormalized(portfolio, 1e-6)); -
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/backtest/AnnualizedSummaryBacktesterTest.java
r1366 r1495 27 27 import com.numericalmethod.algoquant.data.historicaldata.compustat.TestMarketData; 28 28 import com.numericalmethod.algoquant.data.type.portfolio.Portfolio; 29 import com.numericalmethod.algoquant.execution.product.equity. Equity;29 import com.numericalmethod.algoquant.execution.product.equity.Stock; 30 30 import com.numericalmethod.suanshu.number.DoubleUtils; 31 31 import java.util.Collections; … … 45 45 RandomAccessCache<MarketSnapshot> marketSnapshotCache = TestMarketData.getMarketSnapshotCache(); 46 46 @SuppressWarnings("unchecked") 47 Equity equity = TestMarketData.COMPANY_HISTORY_DB.getCompanyHistory(STOCK_ID).getEquity();48 Portfolio< Equity> portfolio = new Portfolio<Equity>(Collections.singletonMap(equity, 1.));47 Stock stock = TestMarketData.COMPANY_HISTORY_DB.getCompanyHistory(STOCK_ID).getStock(); 48 Portfolio<Stock> portfolio = new Portfolio<Stock>(Collections.singletonMap(stock, 1.)); 49 49 50 50 AnnualizedSummaryBacktester backtest = new AnnualizedSummaryBacktester(marketSnapshotCache); … … 55 55 assertTrue(DoubleUtils.equal(dailyMarginalReturns.get(1), 0.050125, 1E-6)); 56 56 assertTrue(DoubleUtils.equal(dailyMarginalReturns.get(2), 0.011933, 1E-6)); 57 58 57 59 58 double totalReturn = backtest.backtest(portfolio, TestMarketData.START_TIME, TestMarketData.END_TIME).returns; -
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/backtest/IndexedPortfoliosAverageReturnsCalculatorTest.java
r1492 r1495 35 35 import com.numericalmethod.algoquant.data.type.portfolio.Portfolio; 36 36 import com.numericalmethod.algoquant.data.type.portfolio.PortfolioUtils; 37 import com.numericalmethod.algoquant.execution.product.equity. Equity;37 import com.numericalmethod.algoquant.execution.product.equity.Stock; 38 38 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 39 39 import com.numericalmethod.algoquant.model.factormodel.famafrench1992.portfolio.FactorRanking.FactorRanks; … … 49 49 public class IndexedPortfoliosAverageReturnsCalculatorTest { 50 50 51 private static final Equity FOO = new Equity("Foo", Exchange.HKEX);52 private static final Equity BAR = new Equity("Bar", Exchange.HKEX);51 private static final Stock FOO = new Stock("Foo", Exchange.HKEX); 52 private static final Stock BAR = new Stock("Bar", Exchange.HKEX); 53 53 private static final DateTime START_TIME = new DateTime(2003, 1, 1, 16, 0, TimeZoneUtils.HONG_KONG); 54 54 … … 65 65 @Test 66 66 public void test_0010() { 67 Portfolio< Equity> portfolioFoo = PortfolioUtils.newEqualWeightedPortfolio(Collections.singleton(FOO));68 Portfolio< Equity> portfolioBar = PortfolioUtils.newEqualWeightedPortfolio(Collections.singleton(BAR));67 Portfolio<Stock> portfolioFoo = PortfolioUtils.newEqualWeightedPortfolio(Collections.singleton(FOO)); 68 Portfolio<Stock> portfolioBar = PortfolioUtils.newEqualWeightedPortfolio(Collections.singleton(BAR)); 69 69 70 70 RandomAccessCache<MarketSnapshot> marketSnapshotCache = generateTestMarketSnapshotCache(); … … 73 73 FactorRanks secondIndex = new FactorRanks(2); 74 74 75 BufferCache<List<IndexedPortfolio<FactorRanks, Equity>>> portfoliosTimeSeries = new BufferCache<List<IndexedPortfolio<FactorRanks, Equity>>>();75 BufferCache<List<IndexedPortfolio<FactorRanks, Stock>>> portfoliosTimeSeries = new BufferCache<List<IndexedPortfolio<FactorRanks, Stock>>>(); 76 76 77 List<IndexedPortfolio<FactorRanks, Equity>> indexedPortfolios1 = new ArrayList<IndexedPortfolio<FactorRanks, Equity>>();78 IndexedPortfolio<FactorRanks, Equity> fooPortfolio1 = new IndexedPortfolio<FactorRanks, Equity>(firstIndex, portfolioFoo);79 IndexedPortfolio<FactorRanks, Equity> barPortfolio1 = new IndexedPortfolio<FactorRanks, Equity>(secondIndex, portfolioBar);77 List<IndexedPortfolio<FactorRanks, Stock>> indexedPortfolios1 = new ArrayList<IndexedPortfolio<FactorRanks, Stock>>(); 78 IndexedPortfolio<FactorRanks, Stock> fooPortfolio1 = new IndexedPortfolio<FactorRanks, Stock>(firstIndex, portfolioFoo); 79 IndexedPortfolio<FactorRanks, Stock> barPortfolio1 = new IndexedPortfolio<FactorRanks, Stock>(secondIndex, portfolioBar); 80 80 indexedPortfolios1.add(fooPortfolio1); 81 81 indexedPortfolios1.add(barPortfolio1); 82 82 portfoliosTimeSeries.add(START_TIME, indexedPortfolios1); 83 83 84 List<IndexedPortfolio<FactorRanks, Equity>> indexedPortfolios2 = new ArrayList<IndexedPortfolio<FactorRanks, Equity>>();85 IndexedPortfolio<FactorRanks, Equity> fooPortfolio2 = new IndexedPortfolio<FactorRanks, Equity>(secondIndex, portfolioFoo);86 IndexedPortfolio<FactorRanks, Equity> barPortfolio2 = new IndexedPortfolio<FactorRanks, Equity>(firstIndex, portfolioBar);84 List<IndexedPortfolio<FactorRanks, Stock>> indexedPortfolios2 = new ArrayList<IndexedPortfolio<FactorRanks, Stock>>(); 85 IndexedPortfolio<FactorRanks, Stock> fooPortfolio2 = new IndexedPortfolio<FactorRanks, Stock>(secondIndex, portfolioFoo); 86 IndexedPortfolio<FactorRanks, Stock> barPortfolio2 = new IndexedPortfolio<FactorRanks, Stock>(firstIndex, portfolioBar); 87 87 indexedPortfolios2.add(fooPortfolio2); 88 88 indexedPortfolios2.add(barPortfolio2); … … 95 95 List<TimedEntry<PortfoliosSnapshot>> portfolioSnapshots = portfolioSnapshotsCalculator.computePortfolioStates(portfoliosTimeSeries, endDate); 96 96 97 SequentialCache<Map<IndexedPortfolio<FactorRanks, Equity>, Double>> avgReturnsCache =97 SequentialCache<Map<IndexedPortfolio<FactorRanks, Stock>, Double>> avgReturnsCache = 98 98 IndexedPortfoliosAverageReturnsCalculator.computeAverageReturnsTimeSeries( 99 99 portfoliosTimeSeries, portfolioSnapshots, endDate); 100 100 101 Iterator<TimedEntry<Map<IndexedPortfolio<FactorRanks, Equity>, Double>>> it = avgReturnsCache.iterator();101 Iterator<TimedEntry<Map<IndexedPortfolio<FactorRanks, Stock>, Double>>> it = avgReturnsCache.iterator(); 102 102 assertTrue(it.hasNext()); 103 103 104 TimedEntry<Map<IndexedPortfolio<FactorRanks, Equity>, Double>> entry1 = it.next();104 TimedEntry<Map<IndexedPortfolio<FactorRanks, Stock>, Double>> entry1 = it.next(); 105 105 assertEquals(START_TIME, entry1.getTime()); 106 Map<IndexedPortfolio<FactorRanks, Equity>, Double> avgReturns1 = entry1.getData();106 Map<IndexedPortfolio<FactorRanks, Stock>, Double> avgReturns1 = entry1.getData(); 107 107 assertEquals(0.01, avgReturns1.get(fooPortfolio1), 1e-15); 108 108 assertEquals(0., avgReturns1.get(barPortfolio1), 1e-15); 109 109 110 TimedEntry<Map<IndexedPortfolio<FactorRanks, Equity>, Double>> entry2 = it.next();110 TimedEntry<Map<IndexedPortfolio<FactorRanks, Stock>, Double>> entry2 = it.next(); 111 111 assertEquals(START_TIME.plusMonths(4), entry2.getTime()); 112 Map<IndexedPortfolio<FactorRanks, Equity>, Double> avgReturns2 = entry2.getData();112 Map<IndexedPortfolio<FactorRanks, Stock>, Double> avgReturns2 = entry2.getData(); 113 113 assertEquals(0.01, avgReturns2.get(fooPortfolio2), 1e-15); 114 114 assertEquals(0., avgReturns2.get(barPortfolio2), 1e-15); … … 133 133 profiles.add(new CompanyProfile() { 134 134 @Override 135 public Equity getEquity() {135 public Stock getStock() { 136 136 return FOO; 137 137 } … … 153 153 profiles.add(new CompanyProfile() { 154 154 @Override 155 public Equity getEquity() {155 public Stock getStock() { 156 156 return BAR; 157 157 } -
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/backtest/PortfolioSnapshotsCalculatorTest.java
r1366 r1495 30 30 import com.numericalmethod.algoquant.data.type.portfolio.IndexedPortfolio; 31 31 import com.numericalmethod.algoquant.data.type.portfolio.Portfolio; 32 import com.numericalmethod.algoquant.execution.product.equity. Equity;32 import com.numericalmethod.algoquant.execution.product.equity.Stock; 33 33 import com.numericalmethod.algoquant.model.factormodel.famafrench1992.portfolio.FactorRanking.FactorRanks; 34 34 import java.util.ArrayList; … … 51 51 marketSnapshotCache, Period.months(1)); 52 52 53 List<IndexedPortfolio<FactorRanks, Equity>> portfolioList = Collections.singletonList(new IndexedPortfolio<FactorRanks, Equity>(new FactorRanks(1), new Portfolio<Equity>()));53 List<IndexedPortfolio<FactorRanks, Stock>> portfolioList = Collections.singletonList(new IndexedPortfolio<FactorRanks, Stock>(new FactorRanks(1), new Portfolio<Stock>())); 54 54 55 BufferCache<List<IndexedPortfolio<FactorRanks, Equity>>> portfoliosTimeSeries = new BufferCache<List<IndexedPortfolio<FactorRanks, Equity>>>();55 BufferCache<List<IndexedPortfolio<FactorRanks, Stock>>> portfoliosTimeSeries = new BufferCache<List<IndexedPortfolio<FactorRanks, Stock>>>(); 56 56 portfoliosTimeSeries.add(TestMarketData.START_TIME, portfolioList); 57 57 DateTime endDate = TestMarketData.START_TIME.plusYears(2); … … 69 69 marketSnapshotCache, Period.months(1)); 70 70 71 List<IndexedPortfolio<FactorRanks, Equity>> portfolioList = new ArrayList<IndexedPortfolio<FactorRanks, Equity>>(2);71 List<IndexedPortfolio<FactorRanks, Stock>> portfolioList = new ArrayList<IndexedPortfolio<FactorRanks, Stock>>(2); 72 72 73 73 FactorRanks index1 = new FactorRanks(1); 74 74 FactorRanks index2 = new FactorRanks(2); 75 75 76 portfolioList.add(new IndexedPortfolio<FactorRanks, Equity>(index1, new Portfolio<Equity>()));77 portfolioList.add(new IndexedPortfolio<FactorRanks, Equity>(index2, new Portfolio<Equity>()));76 portfolioList.add(new IndexedPortfolio<FactorRanks, Stock>(index1, new Portfolio<Stock>())); 77 portfolioList.add(new IndexedPortfolio<FactorRanks, Stock>(index2, new Portfolio<Stock>())); 78 78 79 BufferCache<List<IndexedPortfolio<FactorRanks, Equity>>> portfoliosTimeSeries = new BufferCache<List<IndexedPortfolio<FactorRanks, Equity>>>();79 BufferCache<List<IndexedPortfolio<FactorRanks, Stock>>> portfoliosTimeSeries = new BufferCache<List<IndexedPortfolio<FactorRanks, Stock>>>(); 80 80 portfoliosTimeSeries.add(TestMarketData.START_TIME, portfolioList); 81 81 portfoliosTimeSeries.add(TestMarketData.START_TIME.plusMonths(6), portfolioList); -
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/portfolio/FactorRankingTest.java
r1366 r1495 25 25 import com.numericalmethod.algoquant.data.equity.bucketing.Bucket; 26 26 import com.numericalmethod.algoquant.data.equity.bucketing.Bucketing; 27 import com.numericalmethod.algoquant.execution.product.equity.Equity;28 27 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 29 import com.numericalmethod.algoquant.model.factormodel.EquityFactorValues; 30 import com.numericalmethod.algoquant.model.factormodel.factor.Beta; 31 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 32 import com.numericalmethod.algoquant.model.factormodel.factor.LogMarketCap; 28 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 import com.numericalmethod.algoquant.model.factormodel.StockFactorValues; 30 import com.numericalmethod.algoquant.model.factormodel.factor.*; 33 31 import com.numericalmethod.algoquant.model.factormodel.famafrench1992.portfolio.FactorRanking.FactorRanks; 34 32 import static com.numericalmethod.nmutils.collection.CollectionUtils.*; … … 44 42 public class FactorRankingTest { 45 43 46 private static final Set< Equity> equities = new HashSet<Equity>();47 private static EquityFactorValues factorValues;44 private static final Set<Stock> stocks = new HashSet<Stock>(); 45 private static StockFactorValues factorValues; 48 46 private static List<Factor> factors; 49 47 50 48 @BeforeClass 51 49 public static void setUpClass() throws Exception { 52 factorValues = new EquityFactorValues();50 factorValues = new StockFactorValues(); 53 51 Factor factor1 = new LogMarketCap(); // methods on factors never get executed 54 52 Factor factor2 = new Beta(0); 55 53 factors = Arrays.asList(new Factor[]{factor1, factor2}); 56 54 57 Equity equity;58 equity = new Equity("1", Exchange.HKEX);59 factorValues.put(factor1, equity, 1.0);60 factorValues.put(factor2, equity, -99.0);61 equities.add(equity);62 63 equity = new Equity("2", Exchange.HKEX);64 factorValues.put(factor1, equity, 2.0);65 factorValues.put(factor2, equity, 99.0);66 equities.add(equity);67 68 equity = new Equity("3", Exchange.HKEX);69 factorValues.put(factor1, equity, 3.0);70 factorValues.put(factor2, equity, -99.0);71 equities.add(equity);72 73 equity = new Equity("4", Exchange.HKEX);74 factorValues.put(factor1, equity, 4.0);75 factorValues.put(factor2, equity, 99.0);76 equities.add(equity);77 78 equity = new Equity("5", Exchange.HKEX);79 factorValues.put(factor1, equity, 5.0);80 factorValues.put(factor2, equity, -99.0);81 equities.add(equity);82 83 equity = new Equity("6", Exchange.HKEX);84 factorValues.put(factor1, equity, 6.0);85 factorValues.put(factor2, equity, 99.0);86 equities.add(equity);87 88 equity = new Equity("7", Exchange.HKEX);89 factorValues.put(factor1, equity, 7.0);90 factorValues.put(factor2, equity, -99.0);91 equities.add(equity);92 93 equity = new Equity("8", Exchange.HKEX);94 factorValues.put(factor1, equity, 8.0);95 factorValues.put(factor2, equity, 99.0);96 equities.add(equity);97 98 equity = new Equity("9", Exchange.HKEX);99 factorValues.put(factor1, equity, 9.0);100 factorValues.put(factor2, equity, -99.0);101 equities.add(equity);102 103 equity = new Equity("A", Exchange.HKEX);104 factorValues.put(factor1, equity, 10.0);105 factorValues.put(factor2, equity, 99.0);106 equities.add(equity);55 Stock stock; 56 stock = new Stock("1", Exchange.HKEX); 57 factorValues.put(factor1, stock, 1.0); 58 factorValues.put(factor2, stock, -99.0); 59 stocks.add(stock); 60 61 stock = new Stock("2", Exchange.HKEX); 62 factorValues.put(factor1, stock, 2.0); 63 factorValues.put(factor2, stock, 99.0); 64 stocks.add(stock); 65 66 stock = new Stock("3", Exchange.HKEX); 67 factorValues.put(factor1, stock, 3.0); 68 factorValues.put(factor2, stock, -99.0); 69 stocks.add(stock); 70 71 stock = new Stock("4", Exchange.HKEX); 72 factorValues.put(factor1, stock, 4.0); 73 factorValues.put(factor2, stock, 99.0); 74 stocks.add(stock); 75 76 stock = new Stock("5", Exchange.HKEX); 77 factorValues.put(factor1, stock, 5.0); 78 factorValues.put(factor2, stock, -99.0); 79 stocks.add(stock); 80 81 stock = new Stock("6", Exchange.HKEX); 82 factorValues.put(factor1, stock, 6.0); 83 factorValues.put(factor2, stock, 99.0); 84 stocks.add(stock); 85 86 stock = new Stock("7", Exchange.HKEX); 87 factorValues.put(factor1, stock, 7.0); 88 factorValues.put(factor2, stock, -99.0); 89 stocks.add(stock); 90 91 stock = new Stock("8", Exchange.HKEX); 92 factorValues.put(factor1, stock, 8.0); 93 factorValues.put(factor2, stock, 99.0); 94 stocks.add(stock); 95 96 stock = new Stock("9", Exchange.HKEX); 97 factorValues.put(factor1, stock, 9.0); 98 factorValues.put(factor2, stock, -99.0); 99 stocks.add(stock); 100 101 stock = new Stock("A", Exchange.HKEX); 102 factorValues.put(factor1, stock, 10.0); 103 factorValues.put(factor2, stock, 99.0); 104 stocks.add(stock); 107 105 } 108 106 … … 113 111 factor2nBuckets.put(factors.get(1), 2); 114 112 Bucketing<FactorRanks> bucketing = new FactorRanking(factors, factor2nBuckets, factorValues); 115 Map<FactorRanks, Bucket<FactorRanks>> buckets = bucketing.sort(equities); 116 113 Map<FactorRanks, Bucket<FactorRanks>> buckets = bucketing.sort(stocks); 117 114 118 115 assertEquals(6, buckets.size()); … … 120 117 Bucket<FactorRanks> bucket; 121 118 bucket = buckets.get(new FactorRanks(1, 1));// [-â, 3], [-â, -99] 122 assertEquals(2, bucket.get EquitySet().size());119 assertEquals(2, bucket.getStocks().size()); 123 120 124 121 bucket = buckets.get(new FactorRanks(2, 1));// [4, 7], [-â, -99] 125 assertEquals(2, bucket.get EquitySet().size());122 assertEquals(2, bucket.getStocks().size()); 126 123 127 124 bucket = buckets.get(new FactorRanks(3, 1));// [7, 10], [-â, -99] 128 assertEquals(1, bucket.get EquitySet().size());125 assertEquals(1, bucket.getStocks().size()); 129 126 130 127 bucket = buckets.get(new FactorRanks(1, 2));// [-â, 3], [99, â] 131 assertEquals(1, bucket.get EquitySet().size());128 assertEquals(1, bucket.getStocks().size()); 132 129 133 130 bucket = buckets.get(new FactorRanks(2, 2));// [-â, 3], [99, â] 134 assertEquals(2, bucket.get EquitySet().size());131 assertEquals(2, bucket.getStocks().size()); 135 132 136 133 bucket = buckets.get(new FactorRanks(3, 2));// [-â, 3], [99, â] 137 assertEquals(2, bucket.get EquitySet().size());134 assertEquals(2, bucket.getStocks().size()); 138 135 } 139 136 … … 144 141 factor2nBuckets.put(factors.get(1), 1); 145 142 Bucketing<FactorRanks> bucketing = new FactorRanking(factors, factor2nBuckets, factorValues); 146 Map<FactorRanks, Bucket<FactorRanks>> buckets = bucketing.sort(equities); 147 143 Map<FactorRanks, Bucket<FactorRanks>> buckets = bucketing.sort(stocks); 148 144 149 145 assertEquals(3, buckets.size()); … … 151 147 Bucket<FactorRanks> bucket; 152 148 bucket = buckets.get(new FactorRanks(1, 1)); 153 assertEquals(3, bucket.get EquitySet().size());149 assertEquals(3, bucket.getStocks().size()); 154 150 155 151 bucket = buckets.get(new FactorRanks(2, 1)); 156 assertEquals(4, bucket.get EquitySet().size());152 assertEquals(4, bucket.getStocks().size()); 157 153 158 154 bucket = buckets.get(new FactorRanks(3, 1)); 159 assertEquals(3, bucket.get EquitySet().size());155 assertEquals(3, bucket.getStocks().size()); 160 156 } 161 157 … … 166 162 factor2nBuckets.put(factors.get(1), 2); 167 163 Bucketing<FactorRanks> bucketing = new FactorRanking(factors, factor2nBuckets, factorValues); 168 Map<FactorRanks, Bucket<FactorRanks>> buckets = bucketing.sort( equities);164 Map<FactorRanks, Bucket<FactorRanks>> buckets = bucketing.sort(stocks); 169 165 170 166 Set<FactorRanks> keys = buckets.keySet(); … … 187 183 factor2nBuckets.put(factors.get(1), 1); 188 184 Bucketing<FactorRanks> bucketing = new FactorRanking(factors, factor2nBuckets, factorValues); 189 Map<FactorRanks, Bucket<FactorRanks>> buckets = bucketing.sort( equities);185 Map<FactorRanks, Bucket<FactorRanks>> buckets = bucketing.sort(stocks); 190 186 191 187 Set<FactorRanks> keys = buckets.keySet(); … … 205 201 factor2nBuckets.put(factors.get(1), 1); 206 202 Bucketing<FactorRanks> bucketing = new FactorRanking(factors, factor2nBuckets, factorValues); 207 Map<FactorRanks, Bucket<FactorRanks>> buckets = bucketing.sort( equities);203 Map<FactorRanks, Bucket<FactorRanks>> buckets = bucketing.sort(stocks); 208 204 209 205 Set<FactorRanks> keys = buckets.keySet(); … … 221 217 factor2nBuckets.put(factors.get(1), 1); 222 218 Bucketing<FactorRanks> bucketing = new FactorRanking(factors, factor2nBuckets, factorValues); 223 Map<FactorRanks, Bucket<FactorRanks>> buckets = bucketing.sort( equities);219 Map<FactorRanks, Bucket<FactorRanks>> buckets = bucketing.sort(stocks); 224 220 225 221 Set<FactorRanks> keys = buckets.keySet(); … … 230 226 assertEquals(expKeys, keys); 231 227 232 assertEquals(10, buckets.get(new FactorRanks(1, 1)).get EquitySet().size());228 assertEquals(10, buckets.get(new FactorRanks(1, 1)).getStocks().size()); 233 229 } 234 230 } -
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/portfolio/PortfolioSeriesGeneratorTest.java
r1366 r1495 30 30 import com.numericalmethod.algoquant.data.structure.TimedEntry; 31 31 import com.numericalmethod.algoquant.data.type.portfolio.IndexedPortfolio; 32 import com.numericalmethod.algoquant.execution.product.equity. Equity;32 import com.numericalmethod.algoquant.execution.product.equity.Stock; 33 33 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 34 34 import com.numericalmethod.algoquant.model.factormodel.famafrench1992.portfolio.FactorRanking.FactorRanks; 35 import java.util.ArrayList; 36 import java.util.Collections; 37 import java.util.List; 38 import java.util.Set; 35 import java.util.*; 39 36 import org.joda.time.Period; 40 37 import static org.junit.Assert.*; … … 58 55 Collections.singletonList(nBuckets)); 59 56 60 Set< Equity> equities = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(marketSnapshots);61 SequentialCache<List<IndexedPortfolio<FactorRanks, Equity>>> portfoliosTimeSeries = portfolioGenerator.generatePortfolios(57 Set<Stock> equities = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(marketSnapshots); 58 SequentialCache<List<IndexedPortfolio<FactorRanks, Stock>>> portfoliosTimeSeries = portfolioGenerator.generatePortfolios( 62 59 equities, TestMarketData.START_TIME, 63 60 TestMarketData.START_TIME.plus(STEP_SIZE), STEP_SIZE); 64 for (TimedEntry<List<IndexedPortfolio<FactorRanks, Equity>>> timedPortfolios : portfoliosTimeSeries) {61 for (TimedEntry<List<IndexedPortfolio<FactorRanks, Stock>>> timedPortfolios : portfoliosTimeSeries) { 65 62 assertEquals(equities.size(), numberOfEquitiesInPortfolios(timedPortfolios.getData())); 66 63 assertTrue(preservesOrdering(timedPortfolios, factor, marketSnapshots)); … … 68 65 } 69 66 70 private int numberOfEquitiesInPortfolios(List<IndexedPortfolio<FactorRanks, Equity>> portfolios) {67 private int numberOfEquitiesInPortfolios(List<IndexedPortfolio<FactorRanks, Stock>> portfolios) { 71 68 int number = 0; 72 for (IndexedPortfolio<FactorRanks, Equity> portfolio : portfolios) {69 for (IndexedPortfolio<FactorRanks, Stock> portfolio : portfolios) { 73 70 number += portfolio.getPortfolio().getWeights().size(); 74 71 } … … 77 74 78 75 private boolean preservesOrdering( 79 TimedEntry<List<IndexedPortfolio<FactorRanks, Equity>>> timedPortfolios,76 TimedEntry<List<IndexedPortfolio<FactorRanks, Stock>>> timedPortfolios, 80 77 Factor factor, 81 78 RandomAccessCache<MarketSnapshot> marketSnapshotCache) { 82 List<IndexedPortfolio<FactorRanks, Equity>> portfolios = timedPortfolios.getData();79 List<IndexedPortfolio<FactorRanks, Stock>> portfolios = timedPortfolios.getData(); 83 80 List<Double> mins = new ArrayList<Double>(portfolios.size()); 84 81 List<Double> maxs = new ArrayList<Double>(portfolios.size()); 85 82 86 for (IndexedPortfolio<FactorRanks, Equity> portfolio : portfolios) {83 for (IndexedPortfolio<FactorRanks, Stock> portfolio : portfolios) { 87 84 double min = Double.POSITIVE_INFINITY; 88 85 double max = Double.NEGATIVE_INFINITY; 89 for ( Equity equity: portfolio.getPortfolio().getWeights().keySet()) {90 double factorValue = factor.getFactorExposure( equity, timedPortfolios.getTime(), marketSnapshotCache);86 for (Stock stock : portfolio.getPortfolio().getWeights().keySet()) { 87 double factorValue = factor.getFactorExposure(stock, timedPortfolios.getTime(), marketSnapshotCache); 91 88 min = Math.min(min, factorValue); 92 89 max = Math.max(max, factorValue); -
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/portfolio/RandomFactor.java
r1366 r1495 26 26 import com.numericalmethod.algoquant.data.equity.measure.CompanyMeasure; 27 27 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 28 import com.numericalmethod.algoquant.execution.product.equity. Equity;28 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 29 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 30 30 import java.util.Collections; … … 38 38 39 39 @Override 40 public double getFactorExposure( Equity equity, DateTime time,41 RandomAccessCache<MarketSnapshot> marketSnapshotCache) {42 return equity.getSymbol().hashCode() % (Math.pow(time.getYear(), 2) * Math.pow(time.getMonthOfYear(), 3));40 public double getFactorExposure(Stock stock, DateTime time, 41 RandomAccessCache<MarketSnapshot> marketSnapshotCache) { 42 return stock.getSymbol().hashCode() % (Math.pow(time.getYear(), 2) * Math.pow(time.getMonthOfYear(), 3)); 43 43 } 44 44 -
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/FamaMacBethRegressionTest.java
r1366 r1495 30 30 import com.numericalmethod.algoquant.data.historicaldata.compustat.TestMarketData; 31 31 import com.numericalmethod.algoquant.data.structure.TimedEntry; 32 import com.numericalmethod.algoquant.execution.product.equity. Equity;32 import com.numericalmethod.algoquant.execution.product.equity.Stock; 33 33 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 34 34 import com.numericalmethod.algoquant.model.factormodel.factor.Intercept; … … 54 54 55 55 @Override 56 public double getFactorExposure( Equityequity, DateTime time,57 RandomAccessCache<MarketSnapshot> marketSnapshotCache) {56 public double getFactorExposure(Stock equity, DateTime time, 57 RandomAccessCache<MarketSnapshot> marketSnapshotCache) { 58 58 try { 59 59 return getReturnForNextPeriod(marketSnapshotCache, equity, time, time.plus(period)); … … 79 79 80 80 FamaMacBethRegression regression = new FamaMacBethRegression(marketSnapshots); 81 Set< Equity> equities = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(marketSnapshots);81 Set<Stock> stocks = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(marketSnapshots); 82 82 83 83 Factor intercept = new Intercept(); … … 86 86 87 87 FamaMacBethRegressionResults results = regression.run( 88 equities,88 stocks, 89 89 factors, 90 90 TestMarketData.START_TIME, … … 103 103 double cheatingPremium = cheatingCoefficients.get(i); 104 104 assertEquals("cheating factor completely explains the return", 1., cheatingPremium, 1e-10); 105 for ( Equity equity : equities) {106 double cheatingExposure = returnFactor.getFactorExposure( equity, time, marketSnapshots);105 for (Stock stock : stocks) { 106 double cheatingExposure = returnFactor.getFactorExposure(stock, time, marketSnapshots); 107 107 double cheatingContribution = cheatingPremium * cheatingExposure; 108 108 double returnFromRegression = cheatingContribution + interceptContribution; 109 double actualReturn = getReturnForNextPeriod(marketSnapshots, equity, time, time.plus(Period.months(1)));109 double actualReturn = getReturnForNextPeriod(marketSnapshots, stock, time, time.plus(Period.months(1))); 110 110 assertEquals(actualReturn, returnFromRegression, 1e-15); 111 111 } … … 115 115 116 116 private static double getReturnForNextPeriod(RandomAccessCache<MarketSnapshot> cache, 117 Equity equity, DateTime startTime, DateTime endTime) {118 double currPrice = cache.get(startTime).getData().getProfile( equity).getPrice();119 double nextPrice = cache.get(endTime).getData().getProfile( equity).getPrice();117 Stock stock, DateTime startTime, DateTime endTime) { 118 double currPrice = cache.get(startTime).getData().getProfile(stock).getPrice(); 119 double nextPrice = cache.get(endTime).getData().getProfile(stock).getPrice(); 120 120 return ReturnCalculators.SIMPLE.computeReturn(currPrice, nextPrice); 121 121 } -
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/capm/CAPMPerPortfolioTest.java
r1366 r1495 30 30 import com.numericalmethod.algoquant.data.structure.TimedEntry; 31 31 import com.numericalmethod.algoquant.data.type.portfolio.IndexedPortfolio; 32 import com.numericalmethod.algoquant.execution.product.equity. Equity;32 import com.numericalmethod.algoquant.execution.product.equity.Stock; 33 33 import com.numericalmethod.algoquant.model.factormodel.capm.CAPM; 34 34 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; … … 38 38 import com.numericalmethod.algoquant.model.factormodel.famafrench1992.portfolio.PortfolioSeriesGenerator; 39 39 import com.numericalmethod.algoquant.model.factormodel.famafrench1992.portfolio.RandomFactor; 40 import java.util.ArrayList; 41 import java.util.Collections; 42 import java.util.List; 43 import java.util.Map; 44 import java.util.Set; 40 import java.util.*; 45 41 import org.joda.time.DateTime; 46 42 import org.joda.time.Period; … … 64 60 Collections.singletonList(dimension)); 65 61 66 Set< Equity> equities = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(marketSnapshotCache);62 Set<Stock> stocks = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(marketSnapshotCache); 67 63 68 SequentialCache<List<IndexedPortfolio<FactorRanks, Equity>>> portfoliosTimeSeries =64 SequentialCache<List<IndexedPortfolio<FactorRanks, Stock>>> portfoliosTimeSeries = 69 65 portfolioGenerator.generatePortfolios( 70 equities,71 TestMarketData.START_TIME,72 TestMarketData.END_TIME,73 Period.months(12));66 stocks, 67 TestMarketData.START_TIME, 68 TestMarketData.END_TIME, 69 Period.months(12)); 74 70 75 71 PortfolioSnapshotsCalculator portfolioSnapshotsCalculator = new PortfolioSnapshotsCalculator( … … 90 86 91 87 // Compare CAPM beta from monthly snapshot with fresh beta 92 for ( Equity equity : equities) {88 for (Stock stock : stocks) { 93 89 for (TimedEntry<MarketSnapshot> timedSnapshot : monthlySnapshotsFromPortfolioStates) { 94 double betaFromSnapshot = timedSnapshot.getData().getProfile( equity).getMeasureValue(new CAPMPerPortfolio.Beta());95 FactorRanks index = findPortfolioIndicesOf EquityAtTime(equity, portfoliosStates, timedSnapshot.getTime());90 double betaFromSnapshot = timedSnapshot.getData().getProfile(stock).getMeasureValue(new CAPMPerPortfolio.Beta()); 91 FactorRanks index = findPortfolioIndicesOfStockAtTime(stock, portfoliosStates, timedSnapshot.getTime()); 96 92 double freshBeta = indexedCAPM.get(index).beta(); 97 93 assertEquals(freshBeta, betaFromSnapshot, 1e-15); … … 100 96 } 101 97 102 private FactorRanks findPortfolioIndicesOf EquityAtTime(103 Equityproduct,98 private FactorRanks findPortfolioIndicesOfStockAtTime( 99 Stock product, 104 100 List<TimedEntry<PortfoliosSnapshot>> portfoliosStates, 105 101 DateTime time) { 106 102 for (TimedEntry<PortfoliosSnapshot> portfolioState : portfoliosStates) { 107 103 if (portfolioState.getTime().equals(time)) { 108 for (IndexedPortfolio<FactorRanks, Equity> portfolio : portfolioState.getData().getPortfolios()) {109 for ( Equity equity: portfolio.getPortfolio().getProducts()) {110 if ( equity.getSymbol().equals(product.getSymbol())) {104 for (IndexedPortfolio<FactorRanks, Stock> portfolio : portfolioState.getData().getPortfolios()) { 105 for (Stock stock : portfolio.getPortfolio().getProducts()) { 106 if (stock.getSymbol().equals(product.getSymbol())) { 111 107 return portfolio.getIndex(); 112 108 } -
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/panel/FactorPanelRegressionTest.java
r1477 r1495 23 23 package com.numericalmethod.algoquant.model.factormodel.regression.famamacbeth.panel; 24 24 25 import com.numericalmethod.algoquant.data.cache.BufferCache; 26 import com.numericalmethod.algoquant.data.cache.RandomAccessCache; 27 import com.numericalmethod.algoquant.data.cache.SequentialCache; 25 import com.numericalmethod.algoquant.data.cache.*; 28 26 import com.numericalmethod.algoquant.data.calendar.TimeZoneUtils; 29 27 import com.numericalmethod.algoquant.data.equity.measure.CompanyMeasure; 30 28 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 31 29 import com.numericalmethod.algoquant.data.historicaldata.compustat.TestMarketData; 32 import com.numericalmethod.algoquant.execution.product.equity.Equity;33 30 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 34 import com.numericalmethod.algoquant. model.factormodel.EquityFactorValues;31 import com.numericalmethod.algoquant.execution.product.equity.Stock; 35 32 import com.numericalmethod.algoquant.model.factormodel.FactorValueLookup; 33 import com.numericalmethod.algoquant.model.factormodel.StockFactorValues; 36 34 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 37 35 import com.numericalmethod.nmutils.collection.CollectionUtils; … … 49 47 50 48 private List<Factor> factors = new ArrayList<Factor>(); 51 private List< Equity> equities = new ArrayList<Equity>();49 private List<Stock> stocks = new ArrayList<Stock>(); 52 50 private Map<DateTime, FactorValueLookup> lookups; 53 51 private List<DateTime> times = new ArrayList<DateTime>(); 54 private SequentialCache<Map< Equity, Double>> returnCache;52 private SequentialCache<Map<Stock, Double>> returnCache; 55 53 56 54 public FactorPanelRegressionTest() { … … 58 56 factors.add(new Factor() { 59 57 @Override 60 public double getFactorExposure( Equity equity, DateTime time,61 RandomAccessCache<MarketSnapshot> marketSnapshotCache) {62 return time.getDayOfMonth() + (int) equity.getSymbol().charAt(0);58 public double getFactorExposure(Stock stock, DateTime time, 59 RandomAccessCache<MarketSnapshot> marketSnapshotCache) { 60 return time.getDayOfMonth() + (int) stock.getSymbol().charAt(0); 63 61 } 64 62 … … 76 74 factors.add(new Factor() { 77 75 @Override 78 public double getFactorExposure( Equity equity, DateTime time,79 RandomAccessCache<MarketSnapshot> marketSnapshotCache) {80 return time.getMonthOfYear() + (int) equity.getSymbol().charAt(0);76 public double getFactorExposure(Stock stock, DateTime time, 77 RandomAccessCache<MarketSnapshot> marketSnapshotCache) { 78 return time.getMonthOfYear() + (int) stock.getSymbol().charAt(0); 81 79 } 82 80 … … 92 90 }); 93 91 94 equities.add(new Equity("A", Exchange.HKEX));95 equities.add(new Equity("B", Exchange.HKEX));92 stocks.add(new Stock("A", Exchange.HKEX)); 93 stocks.add(new Stock("B", Exchange.HKEX)); 96 94 97 95 times.add(JodaTimeUtils.getDate(2001, 2, 1, TimeZoneUtils.HONG_KONG)); … … 127 125 for (DateTime time : times) { 128 126 129 EquityFactorValues factorValues = new EquityFactorValues();130 for ( Equity equity : equities) {127 StockFactorValues factorValues = new StockFactorValues(); 128 for (Stock stock : stocks) { 131 129 for (Factor factor : factors) { 132 double factorValue = factor.getFactorExposure( equity, time, TestMarketData.getMarketSnapshotCache());133 factorValues.put(factor, equity, factorValue);130 double factorValue = factor.getFactorExposure(stock, time, TestMarketData.getMarketSnapshotCache()); 131 factorValues.put(factor, stock, factorValue); 134 132 } 135 133 } … … 141 139 } 142 140 143 private SequentialCache<Map< Equity, Double>> getReturnCache() {141 private SequentialCache<Map<Stock, Double>> getReturnCache() { 144 142 145 BufferCache<Map< Equity, Double>> returnBufferCache = new BufferCache<Map<Equity, Double>>();143 BufferCache<Map<Stock, Double>> returnBufferCache = new BufferCache<Map<Stock, Double>>(); 146 144 147 Map< Equity, Double> map1 = new HashMap<Equity, Double>();148 map1.put( equities.get(0), 1.0);149 map1.put( equities.get(1), 2.0);145 Map<Stock, Double> map1 = new HashMap<Stock, Double>(); 146 map1.put(stocks.get(0), 1.0); 147 map1.put(stocks.get(1), 2.0); 150 148 returnBufferCache.add(times.get(0), map1); 151 149 152 Map< Equity, Double> map2 = new HashMap<Equity, Double>();153 map2.put( equities.get(0), 3.0);154 map2.put( equities.get(1), 4.0);150 Map<Stock, Double> map2 = new HashMap<Stock, Double>(); 151 map2.put(stocks.get(0), 3.0); 152 map2.put(stocks.get(1), 4.0); 155 153 returnBufferCache.add(times.get(1), map2); 156 154 -
core/src/test/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/panel/FamaMacBethPanelRegressionTest.java
r1366 r1495 28 28 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshotUtils; 29 29 import com.numericalmethod.algoquant.data.historicaldata.compustat.TestMarketData; 30 import com.numericalmethod.algoquant.execution.product.equity. Equity;30 import com.numericalmethod.algoquant.execution.product.equity.Stock; 31 31 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 32 32 import com.numericalmethod.algoquant.model.factormodel.factor.Intercept; … … 51 51 52 52 @Override 53 public double getFactorExposure( Equity equity, DateTime time,54 RandomAccessCache<MarketSnapshot> marketSnapshotCache) {53 public double getFactorExposure(Stock stock, DateTime time, 54 RandomAccessCache<MarketSnapshot> marketSnapshotCache) { 55 55 try { 56 return getReturnForNextPeriod(marketSnapshotCache, equity, time, time.plus(period));56 return getReturnForNextPeriod(marketSnapshotCache, stock, time, time.plus(period)); 57 57 } catch (Exception ex) { 58 58 throw new RuntimeException(ex); … … 76 76 77 77 FamaMacBethPanelRegression regression = new FamaMacBethPanelRegression(marketSnapshots); 78 Set< Equity> equities = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(marketSnapshots);78 Set<Stock> equities = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(marketSnapshots); 79 79 80 80 Factor intercept = new Intercept(); … … 95 95 96 96 private static double getReturnForNextPeriod(RandomAccessCache<MarketSnapshot> cache, 97 Equity equity, DateTime startTime, DateTime endTime) {98 double currPrice = cache.get(startTime).getData().getProfile( equity).getPrice();99 double nextPrice = cache.get(endTime).getData().getProfile( equity).getPrice();97 Stock stock, DateTime startTime, DateTime endTime) { 98 double currPrice = cache.get(startTime).getData().getProfile(stock).getPrice(); 99 double nextPrice = cache.get(endTime).getData().getProfile(stock).getPrice(); 100 100 return ReturnCalculators.SIMPLE.computeReturn(currPrice, nextPrice); 101 101 } -
core/src/test/java/com/numericalmethod/algoquant/model/volarb/MeanReversionStrategyTest.java
r1432 r1495 32 32 import com.numericalmethod.algoquant.execution.performance.measure.ExchangeRateTable; 33 33 import com.numericalmethod.algoquant.execution.performance.measure.SimpleExchangeRateTable; 34 import com.numericalmethod.algoquant.execution.product.Basket; 35 import com.numericalmethod.algoquant.execution.product.BasketUtils; 36 import com.numericalmethod.algoquant.execution.product.Currencies; 37 import com.numericalmethod.algoquant.execution.product.Product; 38 import com.numericalmethod.algoquant.execution.product.equity.Equity; 34 import com.numericalmethod.algoquant.execution.product.*; 35 import com.numericalmethod.algoquant.execution.product.equity.Stock; 39 36 import com.numericalmethod.algoquant.execution.product.equity.usa.nyse.NYSEProduct; 40 import com.numericalmethod.algoquant.execution.simulator.DepthCaches; 41 import com.numericalmethod.algoquant.execution.simulator.SimpleSimulator; 42 import com.numericalmethod.algoquant.execution.simulator.Simulator; 37 import com.numericalmethod.algoquant.execution.simulator.*; 43 38 import com.numericalmethod.suanshu.misc.datastructure.time.JodaTimeUtils; 44 39 import java.util.*; … … 58 53 59 54 Product productXOM = new NYSEProduct("XOM"); 60 Equity equityProductXOM = productXOM.as(Equity.class);55 Stock stockProductXOM = productXOM.as(Stock.class); 61 56 62 57 Product productGOOG = new NYSEProduct("GOOG"); 63 Equity equityProductGOOG = productGOOG.as(Equity.class);58 Stock stockProductGOOG = productGOOG.as(Stock.class); 64 59 65 60 // simulation period … … 70 65 71 66 YahooEOD yahooEODXOM = new YahooEOD( 72 equityProductXOM,67 stockProductXOM, 73 68 "./test-data/Yahoo"); 74 69 75 70 YahooEOD yahooEODGOOG = new YahooEOD( 76 equityProductGOOG,71 stockProductGOOG, 77 72 "./test-data/Yahoo"); 78 73 … … 80 75 DepthCaches depthCaches = new DepthCaches(); 81 76 depthCaches.addCache(productXOM, 82 DepthCacheUtils.from EquityEODCache(productXOM, yahooEODXOM.getCache(begin, end)));77 DepthCacheUtils.fromStockEODCache(productXOM, yahooEODXOM.getCache(begin, end))); 83 78 depthCaches.addCache(productGOOG, 84 DepthCacheUtils.from EquityEODCache(productGOOG, yahooEODGOOG.getCache(begin, end)));79 DepthCacheUtils.fromStockEODCache(productGOOG, yahooEODGOOG.getCache(begin, end))); 85 80 86 81 // create the strategy … … 91 86 1e6, // scale 92 87 1 // lot size 93 );88 ); 94 89 95 90 Simulator simulator = new SimpleSimulator.Builder(depthCaches).useExchangeRates(rates).withSynchronizedDepthUpdates().build(); -
demo/src/main/java/com/numericalmethod/algoquant/execution/simulation/batch/sensitivity/demo/DemoSensitivityAnalyzer.java
r1464 r1495 27 27 import com.numericalmethod.algoquant.execution.performance.measure.*; 28 28 import com.numericalmethod.algoquant.execution.product.Product; 29 import com.numericalmethod.algoquant.execution.product.equity. Equity;29 import com.numericalmethod.algoquant.execution.product.equity.Stock; 30 30 import com.numericalmethod.algoquant.execution.product.equity.hkex.HSI; 31 31 import com.numericalmethod.algoquant.execution.simulation.batch.BatchSimulation.SimulationException; … … 62 62 // Simulation parameters 63 63 private static final Product PRODUCT = HSI.getInstance(); 64 private static final Equity EQUITY = PRODUCT.as(Equity.class);65 private static final DateTime BEGIN = JodaTimeUtils.getDate(2008, 1, 1, EQUITY.getExchange().timeZone);64 private static final Stock STOCK = PRODUCT.as(Stock.class); 65 private static final DateTime BEGIN = JodaTimeUtils.getDate(2008, 1, 1, STOCK.getExchange().timeZone); 66 66 private static final DateTime END = BEGIN.plusYears(1); 67 67 private static final StrategyFactory<Strategy, Vector> STRATEGY_FACTORY = 68 68 new StrategyFactory<Strategy, Vector>() { 69 @Override70 public Strategy newStrategy(Vector lags) {71 ProductParams param = new ProductParams(PRODUCT, 1);72 return new SMA2Crossover(param, (int) lags.get(1), (int) lags.get(2));73 }74 };69 @Override 70 public Strategy newStrategy(Vector lags) { 71 ProductParams param = new ProductParams(PRODUCT, 1); 72 return new SMA2Crossover(param, (int) lags.get(1), (int) lags.get(2)); 73 } 74 }; 75 75 76 76 public static void main(String[] args) throws SimulationException { -
demo/src/main/java/com/numericalmethod/algoquant/execution/strategy/demo/DemoTimer.java
r1438 r1495 30 30 import com.numericalmethod.algoquant.execution.component.chart.plotter.SimpleStrategyPlotter; 31 31 import com.numericalmethod.algoquant.execution.component.tradeblotter.TradeBlotter; 32 import com.numericalmethod.algoquant.execution.performance.measure.ExchangeRateTable; 33 import com.numericalmethod.algoquant.execution.performance.measure.ProfitLoss; 34 import com.numericalmethod.algoquant.execution.performance.measure.SimpleExchangeRateTable; 32 import com.numericalmethod.algoquant.execution.performance.measure.*; 35 33 import com.numericalmethod.algoquant.execution.performance.measure.ir.InformationRatioByPeriod; 36 34 import com.numericalmethod.algoquant.execution.performance.measure.omega.OmegaByPeriod; 37 35 import com.numericalmethod.algoquant.execution.performance.measure.omega.OmegaFromSummation; 38 36 import com.numericalmethod.algoquant.execution.product.Product; 39 import com.numericalmethod.algoquant.execution.product.equity. Equity;37 import com.numericalmethod.algoquant.execution.product.equity.Stock; 40 38 import com.numericalmethod.algoquant.execution.product.equity.hkex.HSI; 41 import com.numericalmethod.algoquant.execution.simulator.DepthCaches; 42 import com.numericalmethod.algoquant.execution.simulator.SimpleSimulator; 43 import com.numericalmethod.algoquant.execution.simulator.Simulator; 39 import com.numericalmethod.algoquant.execution.simulator.*; 44 40 import com.numericalmethod.algoquant.execution.simulator.subscription.Subscribable; 45 41 import com.numericalmethod.algoquant.execution.simulator.subscription.timer.SimulationTimer; … … 49 45 import static com.numericalmethod.nmutils.NMUtils.getClassLogger; 50 46 import com.numericalmethod.suanshu.misc.datastructure.time.JodaTimeUtils; 51 import java.util.Collection; 52 import java.util.Collections; 53 import java.util.List; 54 import org.joda.time.DateTime; 55 import org.joda.time.Days; 56 import org.joda.time.MonthDay; 57 import org.joda.time.Period; 47 import java.util.*; 48 import org.joda.time.*; 58 49 import org.slf4j.Logger; 59 50 … … 69 60 private static final Logger LOGGER = getClassLogger(); 70 61 private static final Product PRODUCT = HSI.getInstance(); 71 private static final Equity EQUITY = PRODUCT.as(Equity.class);62 private static final Stock STOCK = PRODUCT.as(Stock.class); 72 63 private static final ProductParams PARAMS = new ProductParams(PRODUCT, 1.0); 73 64 private static final DateTime BEGIN = 74 JodaTimeUtils.getDate(2000, 1, 1, EQUITY.getExchange().timeZone);65 JodaTimeUtils.getDate(2000, 1, 1, STOCK.getExchange().timeZone); 75 66 private static final DateTime END = 76 JodaTimeUtils.getDate(2012, 2, 1, EQUITY.getExchange().timeZone);67 JodaTimeUtils.getDate(2012, 2, 1, STOCK.getExchange().timeZone); 77 68 private static final MonthDay BUY_DATE = new MonthDay(12, 29); 78 69 private static final MonthDay SELL_DATE = new MonthDay(1, 6); -
demo/src/main/java/com/numericalmethod/algoquant/execution/strategy/demo/DemoTutorialStrategy.java
r1438 r1495 31 31 import com.numericalmethod.algoquant.execution.component.chart.plotter.SimpleStrategyPlotter; 32 32 import com.numericalmethod.algoquant.execution.component.tradeblotter.TradeBlotter; 33 import com.numericalmethod.algoquant.execution.performance.measure.ExchangeRateTable; 34 import com.numericalmethod.algoquant.execution.performance.measure.ProfitLoss; 35 import com.numericalmethod.algoquant.execution.performance.measure.SimpleExchangeRateTable; 33 import com.numericalmethod.algoquant.execution.performance.measure.*; 36 34 import com.numericalmethod.algoquant.execution.performance.measure.ir.InformationRatioByPeriod; 37 35 import com.numericalmethod.algoquant.execution.performance.measure.omega.OmegaByPeriod; … … 39 37 import com.numericalmethod.algoquant.execution.product.Currencies; 40 38 import com.numericalmethod.algoquant.execution.product.Product; 41 import com.numericalmethod.algoquant.execution.product.equity. Equity;39 import com.numericalmethod.algoquant.execution.product.equity.Stock; 42 40 import com.numericalmethod.algoquant.execution.product.equity.hkex.HSI; 43 import com.numericalmethod.algoquant.execution.simulator.DepthCaches; 44 import com.numericalmethod.algoquant.execution.simulator.SimpleSimulator; 45 import com.numericalmethod.algoquant.execution.simulator.Simulator; 41 import com.numericalmethod.algoquant.execution.simulator.*; 46 42 import com.numericalmethod.algoquant.execution.strategy.ProductParams; 47 43 import com.numericalmethod.algoquant.execution.strategy.Strategy; … … 68 64 public static void main(String[] args) { 69 65 Product product = HSI.getInstance(); 70 Equity equity = product.as(Equity.class);66 Stock stock = product.as(Stock.class); 71 67 ProductParams params = new ProductParams(product, 1.0); 72 68 73 DateTime begin = JodaTimeUtils.getDate(2000, 1, 1, equity.getExchange().timeZone);74 DateTime end = JodaTimeUtils.getDate(2012, 1, 1, equity.getExchange().timeZone);69 DateTime begin = JodaTimeUtils.getDate(2000, 1, 1, stock.getExchange().timeZone); 70 DateTime end = JodaTimeUtils.getDate(2012, 1, 1, stock.getExchange().timeZone); 75 71 76 72 SequentialCache<Depth> dailyData = DataSources.YAHOO.forProduct(product).getCache(begin, end); -
demo/src/main/java/com/numericalmethod/algoquant/model/corvalan2005/demo/DemoCorvalan2005.java
r1475 r1495 115 115 public static void main(String[] args) throws Exception { 116 116 /* list the products to be traded */ 117 List<Product> products = ProductUtils.new EquityProductList(117 List<Product> products = ProductUtils.newStockProductList( 118 118 new String[]{ 119 119 "ORCL", "GOOG", "AMZN", "IBM", "MSFT"}, -
demo/src/main/java/com/numericalmethod/algoquant/model/factormodel/amp2008/demo/AMP2008DemoUtils.java
r1492 r1495 28 28 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshotUtils; 29 29 import com.numericalmethod.algoquant.data.historicaldata.compustat.CompanyHistoryDB; 30 import com.numericalmethod.algoquant.execution.product.equity. Equity;30 import com.numericalmethod.algoquant.execution.product.equity.Stock; 31 31 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 32 32 import java.util.ArrayList; … … 52 52 } 53 53 54 public static Set< Equity> getEquitiesForPortfolios(54 public static Set<Stock> getEquitiesForPortfolios( 55 55 RandomAccessCache<MarketSnapshot> marketSnapshots, 56 56 DateTime factorFirstRequiredDate, 57 57 DateTime currentTime, 58 58 DateTime endTime) { 59 Set< Equity> allEquities = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(marketSnapshots);60 Set< Equity> liquidEquities = new LiquidityFilter(59 Set<Stock> allEquities = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(marketSnapshots); 60 Set<Stock> liquidEquities = new LiquidityFilter( 61 61 currentTime.minusMonths(LIQUIDITY_FIRST_DATE_OFFSET), 62 62 currentTime, MIN_MCAP, MIN_PRICE).getFilteredEquities(marketSnapshots, allEquities); -
demo/src/main/java/com/numericalmethod/algoquant/model/factormodel/amp2008/demo/DemoMultiFactor.java
r1492 r1495 39 39 import com.numericalmethod.algoquant.data.type.portfolio.weighting.TopBottomQuantilesEqualWeighting; 40 40 import com.numericalmethod.algoquant.data.type.portfolio.weighting.ZeroCostWeighting; 41 import com.numericalmethod.algoquant.execution.product.equity. Equity;41 import com.numericalmethod.algoquant.execution.product.equity.Stock; 42 42 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 43 43 import com.numericalmethod.algoquant.model.factormodel.amp2008.*; … … 95 95 Collections.synchronizedList(new ArrayList<TimedEntry<CombinedLongShortResult>>()); 96 96 97 final ZeroCostWeighting< Equity> weighting = new TopBottomQuantilesEqualWeighting<Equity>(5);97 final ZeroCostWeighting<Stock> weighting = new TopBottomQuantilesEqualWeighting<Stock>(5); 98 98 99 99 List<DateTime> dates = getDatesForPortfolioFormation(BASE_DATE, PORTFOLIO_LIFETIME_IN_MONTHS, STEP_SIZE_IN_MONTHS, SIMULATION_END_DATE); … … 121 121 DateTime endTime = currentTime.plusMonths(PORTFOLIO_LIFETIME_IN_MONTHS); 122 122 123 Set< Equity> equitiesForPortfolios = getEquitiesForPortfolios(123 Set<Stock> equitiesForPortfolios = getEquitiesForPortfolios( 124 124 marketSnapshotCache, factorFirstRequiredDate, currentTime, endTime); 125 125 … … 127 127 equitiesForPortfolios.size())); 128 128 129 Portfolio< Equity> portfolio = generatorBuilder.forFactor(factor, exchange.getClosingTimeOnDate(currentTime)).129 Portfolio<Stock> portfolio = generatorBuilder.forFactor(factor, exchange.getClosingTimeOnDate(currentTime)). 130 130 newPortfolio(equitiesForPortfolios); 131 131 -
demo/src/main/java/com/numericalmethod/algoquant/model/factormodel/amp2008/demo/DemoMultiFactorTiming.java
r1492 r1495 39 39 import com.numericalmethod.algoquant.data.type.portfolio.weighting.RankWeighting; 40 40 import com.numericalmethod.algoquant.data.type.portfolio.weighting.ZeroCostWeighting; 41 import com.numericalmethod.algoquant.execution.product.equity. Equity;41 import com.numericalmethod.algoquant.execution.product.equity.Stock; 42 42 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 43 43 import com.numericalmethod.algoquant.model.factormodel.amp2008.CombinedLongShortResult; … … 93 93 final SequentialCache<Double> rates = new HKIBOR(HKMA_RATES_FILE_PATH).getRatesForMaturity(HKIBOR.Maturity.TWELVE_MONTH); 94 94 95 final ZeroCostWeighting< Equity> weighting = new RankWeighting<Equity>();95 final ZeroCostWeighting<Stock> weighting = new RankWeighting<Stock>(); 96 96 97 97 Set<CompanyMeasure> requiredMeasures = FactorUtils.getRequiredMeasures(factors); … … 133 133 DateTime endTime = currentTime.plusMonths(portfolioLifeTimeFinal); 134 134 135 Set< Equity> equitiesForPortfolios = getEquitiesForPortfolios(135 Set<Stock> equitiesForPortfolios = getEquitiesForPortfolios( 136 136 marketSnapshotCache, factorFirstRequiredDate, currentTime, endTime); 137 137 LOGGER.info(String.format("number of companies available for analysis: %d", … … 141 141 DateTime endDate = exchange.getClosingTimeOnDate(endTime); 142 142 143 Portfolio< Equity> bmPortfolio = generatorBuilder.forFactor(bmFactor, beginDate).143 Portfolio<Stock> bmPortfolio = generatorBuilder.forFactor(bmFactor, beginDate). 144 144 newPortfolio(equitiesForPortfolios); 145 145 146 Portfolio< Equity> momentumPortfolio = generatorBuilder.forFactor(momentumFactor, beginDate).146 Portfolio<Stock> momentumPortfolio = generatorBuilder.forFactor(momentumFactor, beginDate). 147 147 newPortfolio(equitiesForPortfolios); 148 148 149 149 @SuppressWarnings("unchecked") 150 Portfolio< Equity> combinedPortfolio = combine(bmPortfolio, momentumPortfolio);150 Portfolio<Stock> combinedPortfolio = combine(bmPortfolio, momentumPortfolio); 151 151 152 152 System.out.println(currentTime + ": " + combinedPortfolio); -
demo/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/demo/DemoFamaFrench1992.java
r1492 r1495 24 24 25 25 import com.numericalmethod.algoquant.annotation.Demo; 26 import com.numericalmethod.algoquant.data.cache.BufferCache; 27 import com.numericalmethod.algoquant.data.cache.RandomAccessCache; 28 import com.numericalmethod.algoquant.data.cache.SequentialCache; 26 import com.numericalmethod.algoquant.data.cache.*; 29 27 import com.numericalmethod.algoquant.data.calendar.TimeZoneUtils; 30 28 import com.numericalmethod.algoquant.data.equity.CompanyHistory; 29 import com.numericalmethod.algoquant.data.equity.filter.companyhistories.CommonHistoryFilter; 31 30 import com.numericalmethod.algoquant.data.equity.measure.CompanyMeasure; 32 import com.numericalmethod.algoquant.data.equity.filter.companyhistories.CommonHistoryFilter;33 31 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 34 32 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshotUtils; … … 37 35 import com.numericalmethod.algoquant.data.structure.TimedEntry; 38 36 import com.numericalmethod.algoquant.data.type.portfolio.IndexedPortfolio; 39 import com.numericalmethod.algoquant.execution.product.equity.Equity; 40 import com.numericalmethod.algoquant.model.factormodel.factor.Beta; 41 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 42 import com.numericalmethod.algoquant.model.factormodel.factor.FactorUtils; 37 import com.numericalmethod.algoquant.execution.product.equity.Stock; 38 import com.numericalmethod.algoquant.model.factormodel.factor.*; 43 39 import static com.numericalmethod.algoquant.model.factormodel.factor.FactorUtils.getEarliestBusinessDateBefore; 44 import com.numericalmethod.algoquant.model.factormodel.factor.Intercept; 45 import com.numericalmethod.algoquant.model.factormodel.factor.LogMarketCap; 46 import com.numericalmethod.algoquant.model.factormodel.famafrench1992.backtest.IndexedPortfoliosAverageReturnsCalculator; 47 import com.numericalmethod.algoquant.model.factormodel.famafrench1992.backtest.PortfolioSnapshotsCalculator; 48 import com.numericalmethod.algoquant.model.factormodel.famafrench1992.backtest.PortfoliosSnapshot; 40 import com.numericalmethod.algoquant.model.factormodel.famafrench1992.backtest.*; 49 41 import com.numericalmethod.algoquant.model.factormodel.famafrench1992.portfolio.FactorRanking.FactorRanks; 50 42 import com.numericalmethod.algoquant.model.factormodel.famafrench1992.portfolio.PortfolioSeriesGenerator; 51 import com.numericalmethod.algoquant.model.factormodel.regression.famamacbeth.FamaMacBethRegression; 52 import com.numericalmethod.algoquant.model.factormodel.regression.famamacbeth.FamaMacBethRegressionResults; 53 import com.numericalmethod.algoquant.model.factormodel.regression.famamacbeth.RegressionCoefficientsCsvWriter; 43 import com.numericalmethod.algoquant.model.factormodel.regression.famamacbeth.*; 54 44 import com.numericalmethod.algoquant.model.factormodel.regression.famamacbeth.capm.CAPMPerPortfolio; 55 45 import static com.numericalmethod.nmutils.NMUtils.*; 56 46 import java.io.IOException; 57 47 import java.text.ParseException; 58 import java.util.Arrays; 59 import java.util.List; 60 import java.util.Map; 61 import java.util.Set; 48 import java.util.*; 62 49 import java.util.zip.ZipException; 63 50 import org.joda.time.DateTime; … … 87 74 private static final DateTime START_TIME = new DateTime(2003, 1, 1, 16, 0, TimeZoneUtils.HONG_KONG); 88 75 private static final DateTime END_TIME = new DateTime(2011, 1, 1, 16, 0, TimeZoneUtils.HONG_KONG).plusWeeks(2); // TODO: due to Jan 1 holiday? hack again! 89 / * Every STEP_SIZE we form a new portfolio. */76 // Every STEP_SIZE we form a new portfolio. 90 77 private static final Period PORTFOLIO_LIFETIME = Period.months(12); 91 78 private static final String CROSSSECTION_OUTPUT_FILENAME = "./log/FamaCrossSectionalRegressionCoefficients.csv.zip"; 92 79 93 80 public static void main(String[] args) throws ZipException, IOException, ParseException { 94 95 81 List<Factor> preRankingFactors = Arrays.asList( 96 82 new LogMarketCap(), … … 107 93 List<CompanyHistory> histories = FamaFrench1992DemoUtils.COMPANY_HISTORY_DB.getAllCompanyHistories(); 108 94 109 histories = new CommonHistoryFilter( 110 requiredMeasures, 111 earliestRequiredDate, 112 END_TIME).filter(histories); 95 histories = new CommonHistoryFilter(requiredMeasures, earliestRequiredDate, END_TIME).filter(histories); 113 96 114 97 RandomAccessCache<MarketSnapshot> fullPeriodDailyCache = MarketSnapshotUtils.newCache(histories, marketSeries, rates); 115 Set< Equity> equities = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(fullPeriodDailyCache);98 Set<Stock> equities = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(fullPeriodDailyCache); 116 99 117 100 LOGGER.info(String.format("number of companies available for analysis: %d", equities.size())); … … 123 106 preRankingFactors, 124 107 nBucketsPerFactor // no. of buckets for each factors 125 );108 ); 126 109 127 SequentialCache<List<IndexedPortfolio<FactorRanks, Equity>>> portfoliosTimeSeries =110 SequentialCache<List<IndexedPortfolio<FactorRanks, Stock>>> portfoliosTimeSeries = 128 111 portfolioGenerator.generatePortfolios( 129 equities, earliestRequiredDate, END_TIME, PORTFOLIO_LIFETIME);112 equities, earliestRequiredDate, END_TIME, PORTFOLIO_LIFETIME); 130 113 131 114 // Calculate and write to file the portfolio's returns … … 136 119 portfolioSnapshotsCalculator.computePortfolioStates(portfoliosTimeSeries, END_TIME); // compute portfolios' returns 137 120 138 SequentialCache<Map<IndexedPortfolio<FactorRanks, Equity>, Double>> averageReturnsCache =121 SequentialCache<Map<IndexedPortfolio<FactorRanks, Stock>, Double>> averageReturnsCache = 139 122 IndexedPortfoliosAverageReturnsCalculator.computeAverageReturnsTimeSeries(portfoliosTimeSeries, fullPeriodPortfoliosSnapshots, END_TIME); 140 123 -
demo/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/demo/DemoPartitioningByFactors.java
r1492 r1495 36 36 import com.numericalmethod.algoquant.data.structure.TimedEntry; 37 37 import com.numericalmethod.algoquant.data.type.portfolio.IndexedPortfolio; 38 import com.numericalmethod.algoquant.execution.product.equity. Equity;38 import com.numericalmethod.algoquant.execution.product.equity.Stock; 39 39 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 40 40 import com.numericalmethod.algoquant.model.factormodel.factor.FactorUtils; … … 93 93 94 94 RandomAccessCache<MarketSnapshot> fullPeriodDailyCache = newCache(histories, market, rates); 95 Set< Equity> equities = getEquitiesFromFirstSnapshot(fullPeriodDailyCache);95 Set<Stock> equities = getEquitiesFromFirstSnapshot(fullPeriodDailyCache); 96 96 97 97 LOGGER.info(String.format("number of companies available for analysis: %d", equities.size())); … … 104 104 nBucketsPerFactor); 105 105 106 SequentialCache<List<IndexedPortfolio<FactorRanks, Equity>>> portfoliosTimeSeries =106 SequentialCache<List<IndexedPortfolio<FactorRanks, Stock>>> portfoliosTimeSeries = 107 107 portfolioGenerator.generatePortfolios( 108 108 equities, START_TIME, END_TIME, STEP_SIZE); … … 115 115 portfolioSnapshotsCalculator.computePortfolioStates(portfoliosTimeSeries, END_TIME); 116 116 117 SequentialCache<Map<IndexedPortfolio<FactorRanks, Equity>, Double>> averageReturnsCache =117 SequentialCache<Map<IndexedPortfolio<FactorRanks, Stock>, Double>> averageReturnsCache = 118 118 IndexedPortfoliosAverageReturnsCalculator.computeAverageReturnsTimeSeries(portfoliosTimeSeries, fullPeriodPortfoliosSnapshots, END_TIME); 119 119 -
demo/src/main/java/com/numericalmethod/algoquant/model/factormodel/famafrench1992/demo/FamaFrench1992DemoUtils.java
r1366 r1495 26 26 import com.numericalmethod.algoquant.data.historicaldata.compustat.CompanyHistoryDB; 27 27 import com.numericalmethod.algoquant.data.type.portfolio.IndexedPortfolio; 28 import com.numericalmethod.algoquant.execution.product.equity. Equity;28 import com.numericalmethod.algoquant.execution.product.equity.Stock; 29 29 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 30 30 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; … … 51 51 52 52 public static void writePortfolioReturnsToFile( 53 SequentialCache<Map<IndexedPortfolio<FactorRanks, Equity>, Double>> returnsTimeSeries,53 SequentialCache<Map<IndexedPortfolio<FactorRanks, Stock>, Double>> returnsTimeSeries, 54 54 List<Factor> preRankingFactors, 55 55 List<Integer> factorDimensions) -
demo/src/main/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/demo/DemoFamaMacBethRegression.java
r1492 r1495 30 30 import com.numericalmethod.algoquant.data.calendar.TimeZoneUtils; 31 31 import com.numericalmethod.algoquant.data.equity.CompanyHistory; 32 import com.numericalmethod.algoquant.data.equity.filter.companyhistories.CommonHistoryFilter; 32 33 import com.numericalmethod.algoquant.data.equity.measure.CompanyMeasure; 33 import com.numericalmethod.algoquant.data.equity.filter.companyhistories.CommonHistoryFilter;34 34 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 35 35 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshotUtils; … … 37 37 import com.numericalmethod.algoquant.data.historicaldata.hkma.HKIBOR; 38 38 import com.numericalmethod.algoquant.data.historicaldata.yahoo.YahooEOD; 39 import com.numericalmethod.algoquant.data.type. EquityEOD;39 import com.numericalmethod.algoquant.data.type.StockEOD; 40 40 import com.numericalmethod.algoquant.execution.product.Product; 41 import com.numericalmethod.algoquant.execution.product.equity.Equity;42 41 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 42 import com.numericalmethod.algoquant.execution.product.equity.Stock; 43 43 import com.numericalmethod.algoquant.execution.product.equity.hkex.HSI; 44 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 45 import com.numericalmethod.algoquant.model.factormodel.factor.FactorUtils; 46 import com.numericalmethod.algoquant.model.factormodel.factor.Intercept; 47 import com.numericalmethod.algoquant.model.factormodel.factor.LogMarketCap; 48 import com.numericalmethod.algoquant.model.factormodel.regression.famamacbeth.FamaMacBethRegression; 49 import com.numericalmethod.algoquant.model.factormodel.regression.famamacbeth.FamaMacBethRegressionResults; 50 import com.numericalmethod.algoquant.model.factormodel.regression.famamacbeth.RegressionCoefficientsCsvWriter; 44 import com.numericalmethod.algoquant.model.factormodel.factor.*; 45 import com.numericalmethod.algoquant.model.factormodel.regression.famamacbeth.*; 51 46 import static com.numericalmethod.nmutils.NMUtils.getClassLogger; 52 47 import com.numericalmethod.suanshu.misc.datastructure.time.JodaTimeUtils; 53 48 import java.io.IOException; 54 49 import java.text.ParseException; 55 import java.util.Arrays; 56 import java.util.List; 57 import java.util.Set; 50 import java.util.*; 58 51 import java.util.zip.ZipException; 59 52 import org.joda.time.DateTime; … … 134 127 135 128 RandomAccessCache<MarketSnapshot> marketSnapshots = MarketSnapshotUtils.newCache(histories, market, rates); 136 Set< Equity> equities = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(marketSnapshots);129 Set<Stock> equities = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(marketSnapshots); 137 130 138 131 LOGGER.info(String.format("number of companies available for analysis: %d", equities.size())); … … 147 140 private SequentialCache<Double> getHSIData(DateTime startDate, DateTime endDate) { 148 141 Product HSIProduct = HSI.getInstance(); 149 Equity equityProduct = HSIProduct.as(Equity.class);142 Stock stockProduct = HSIProduct.as(Stock.class); 150 143 151 YahooEOD eod = new YahooEOD( equityProduct, "./log/HSI", "./log/HSI");144 YahooEOD eod = new YahooEOD(stockProduct, "./log/HSI", "./log/HSI"); 152 145 153 DoubleEntryTransformer< EquityEOD> transformer = DoubleEntryTransformers.EQUITYEOD;146 DoubleEntryTransformer<StockEOD> transformer = DoubleEntryTransformers.STOCK_EOD; 154 147 155 148 return transformer.doProcess(eod.getCache(startDate.minusWeeks(1), endDate)); // TODO: remove this hack by fixing getCache() -
demo/src/main/java/com/numericalmethod/algoquant/model/factormodel/regression/famamacbeth/panel/demo/DemoFamaMacBethPanelRegression.java
r1492 r1495 30 30 import com.numericalmethod.algoquant.data.calendar.TimeZoneUtils; 31 31 import com.numericalmethod.algoquant.data.equity.CompanyHistory; 32 import com.numericalmethod.algoquant.data.equity.filter.companyhistories.*; 32 33 import com.numericalmethod.algoquant.data.equity.measure.CompanyMeasure; 34 import static com.numericalmethod.algoquant.data.equity.measure.CompanyMeasureCalculatorUtils.Mean; 33 35 import com.numericalmethod.algoquant.data.equity.measure.MarketCap; 34 import static com.numericalmethod.algoquant.data.equity.measure.CompanyMeasureCalculatorUtils.Mean;35 import com.numericalmethod.algoquant.data.equity.filter.companyhistories.CompanyMeasureFilter;36 import com.numericalmethod.algoquant.data.equity.filter.companyhistories.CommonHistoryFilter;37 import com.numericalmethod.algoquant.data.equity.filter.companyhistories.CompanyHistoriesFilter;38 import com.numericalmethod.algoquant.data.equity.filter.companyhistories.CompositeFilter;39 36 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshot; 40 37 import com.numericalmethod.algoquant.data.equity.snapshot.MarketSnapshotUtils; … … 42 39 import com.numericalmethod.algoquant.data.historicaldata.hkma.HKIBOR; 43 40 import com.numericalmethod.algoquant.data.historicaldata.yahoo.YahooEOD; 44 import com.numericalmethod.algoquant.data.type.EquityEOD; 45 import com.numericalmethod.algoquant.execution.product.equity.Equity; 41 import com.numericalmethod.algoquant.data.type.StockEOD; 46 42 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 43 import com.numericalmethod.algoquant.execution.product.equity.Stock; 47 44 import com.numericalmethod.algoquant.execution.product.equity.hkex.HSI; 48 import com.numericalmethod.algoquant.model.factormodel.factor.Factor; 49 import com.numericalmethod.algoquant.model.factormodel.factor.FactorUtils; 50 import com.numericalmethod.algoquant.model.factormodel.factor.Intercept; 51 import com.numericalmethod.algoquant.model.factormodel.factor.LogMarketCap; 45 import com.numericalmethod.algoquant.model.factormodel.factor.*; 52 46 import com.numericalmethod.algoquant.model.factormodel.regression.famamacbeth.panel.FamaMacBethPanelRegression; 53 47 import com.numericalmethod.algoquant.model.factormodel.regression.famamacbeth.panel.FamaMacBethPanelRegressionResults; … … 58 52 import java.net.MalformedURLException; 59 53 import java.text.ParseException; 60 import java.util.ArrayList; 61 import java.util.Arrays; 62 import java.util.List; 63 import java.util.Set; 54 import java.util.*; 64 55 import java.util.zip.ZipException; 65 56 import org.joda.time.DateTime; … … 134 125 stockIDs); 135 126 136 Set< Equity> equities = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(marketSnapshots);127 Set<Stock> equities = MarketSnapshotUtils.getEquitiesFromFirstSnapshot(marketSnapshots); 137 128 138 129 LOGGER.info(String.format("number of companies available for analysis: %d", equities.size())); … … 178 169 179 170 private SequentialCache<Double> getHSIData(DateTime startDate, DateTime endDate) { 180 Equity equityProduct = HSI.getInstance().as(Equity.class);171 Stock stockProduct = HSI.getInstance().as(Stock.class); 181 172 182 173 String dataFolder = "./log/HSI"; 183 YahooEOD eod = new YahooEOD( equityProduct, dataFolder, dataFolder);174 YahooEOD eod = new YahooEOD(stockProduct, dataFolder, dataFolder); 184 175 185 DoubleEntryTransformer< EquityEOD> transformer = DoubleEntryTransformers.EQUITYEOD;176 DoubleEntryTransformer<StockEOD> transformer = DoubleEntryTransformers.STOCK_EOD; 186 177 187 178 return transformer.doProcess(eod.getCache(startDate.minusWeeks(1), endDate)); // TODO: remove this hack by fixing getCache() -
demo/src/main/java/com/numericalmethod/algoquant/model/infantino2010/demo/Demo010.java
r1438 r1495 76 76 77 77 public static void main(String[] args) { 78 List<Product> products = ProductUtils.new EquityProductList(78 List<Product> products = ProductUtils.newStockProductList( 79 79 new String[]{ 80 80 "AAPL", "GOOG", "AMZN", "IBM", "HPQ", "MSFT", "CSCO", "ORCL", "INTC", "YHOO"}, -
demo/src/main/java/com/numericalmethod/algoquant/model/kst1995/demo/Demo020.java
r1438 r1495 27 27 import com.numericalmethod.algoquant.data.historicaldata.yahoo.YahooEOD; 28 28 import com.numericalmethod.algoquant.data.structure.TimedEntry; 29 import com.numericalmethod.algoquant.data.type. EquityEOD;29 import com.numericalmethod.algoquant.data.type.StockEOD; 30 30 import com.numericalmethod.algoquant.execution.product.Product; 31 import com.numericalmethod.algoquant.execution.product.equity.Equity;32 31 import com.numericalmethod.algoquant.execution.product.equity.Exchange; 32 import com.numericalmethod.algoquant.execution.product.equity.Stock; 33 33 import com.numericalmethod.algoquant.execution.product.equity.hkex.HSI; 34 import com.numericalmethod.algoquant.model.kst1995.GMA12; 35 import com.numericalmethod.algoquant.model.kst1995.KnightSatchellTran1995; 36 import com.numericalmethod.algoquant.model.kst1995.KnightSatchellTran1995MLE; 34 import com.numericalmethod.algoquant.model.kst1995.*; 37 35 import com.numericalmethod.algoquant.model.returns.ReturnCalculators; 38 36 import static com.numericalmethod.nmutils.NMUtils.*; … … 62 60 // setup data source 63 61 Product product = HSI.getInstance(); 64 Equity equity = product.as(Equity.class);62 Stock stock = product.as(Stock.class); 65 63 String dataFolder = "./log/Yahoo"; 66 YahooEOD yahoo = new YahooEOD( equity, dataFolder, dataFolder);64 YahooEOD yahoo = new YahooEOD(stock, dataFolder, dataFolder); 67 65 68 66 List<Double> px = new ArrayList<Double>(); 69 SequentialCache< EquityEOD> cache = yahoo.getCache(begin, end);70 for (TimedEntry< EquityEOD> entry : cache) {67 SequentialCache<StockEOD> cache = yahoo.getCache(begin, end); 68 for (TimedEntry<StockEOD> entry : cache) { 71 69 px.add(entry.getData().getAdjClose()); 72 70 } -
demo/src/main/java/com/numericalmethod/algoquant/model/lai2010/demo/DemoLai2010Signal.java
r1438 r1495 61 61 62 62 /* list the products to be traded */ 63 List<Product> products = ProductUtils.new EquityProductList(63 List<Product> products = ProductUtils.newStockProductList( 64 64 new String[]{ 65 65 "ORCL", "GOOG", "AMZN", "IBM", "MSFT"}, -
demo/src/main/java/com/numericalmethod/algoquant/model/lai2010/demo/DemoPeriodicRebalancing.java
r1444 r1495 69 69 public static void main(String[] args) { 70 70 /* list the products to be traded */ 71 List<Product> products = ProductUtils.new EquityProductList(71 List<Product> products = ProductUtils.newStockProductList( 72 72 new String[]{ 73 73 "ORCL", "GOOG", "AMZN", "IBM", "MSFT"}, -
demo/src/main/java/com/numericalmethod/algoquant/model/portfoliooptimization/markowitz/signal/demo/DemoMarkowitz.java
r1438 r1495 55 55 public static void main(String[] args) { 56 56 /* list the products to be traded */ 57 List<Product> products = ProductUtils.new EquityProductList(57 List<Product> products = ProductUtils.newStockProductList( 58 58 new String[]{ 59 59 "0019.HK", -
demo/src/main/java/com/numericalmethod/algoquant/model/signal/crossover/demo/DemoBatchParamSimulation.java
r1467 r1495 31 31 import com.numericalmethod.algoquant.execution.performance.report.PerformanceReport; 32 32 import com.numericalmethod.algoquant.execution.product.Product; 33 import com.numericalmethod.algoquant.execution.product.equity. Equity;33 import com.numericalmethod.algoquant.execution.product.equity.Stock; 34 34 import com.numericalmethod.algoquant.execution.simulation.batch.BatchParameterizedSimulation; 35 35 import com.numericalmethod.algoquant.execution.simulation.batch.BatchSimulation.SimulationException; … … 114 114 115 115 private DepthCaches getDepthCaches() { 116 DateTimeZone tz = product.as( Equity.class).getExchange().timeZone;116 DateTimeZone tz = product.as(Stock.class).getExchange().timeZone; 117 117 DateTime begin = JodaTimeUtils.getDate(2008, 1, 1, tz); 118 118 DateTime end = JodaTimeUtils.getDate(2010, 12, 31, tz); -
demo/src/main/java/com/numericalmethod/algoquant/model/signal/crossover/demo/DemoSMA2CrossoverDynamic_010.java
r1465 r1495 37 37 import com.numericalmethod.algoquant.execution.product.Currencies; 38 38 import com.numericalmethod.algoquant.execution.product.Product; 39 import com.numericalmethod.algoquant.execution.product.equity. Equity;39 import com.numericalmethod.algoquant.execution.product.equity.Stock; 40 40 import com.numericalmethod.algoquant.execution.simulator.DepthCaches; 41 41 import com.numericalmethod.algoquant.execution.simulator.SimpleSimulator; … … 73 73 74 74 // setup data source 75 DateTimeZone tz = product.as( Equity.class).getExchange().timeZone;75 DateTimeZone tz = product.as(Stock.class).getExchange().timeZone; 76 76 DateTime begin = JodaTimeUtils.getDate(1990, 1, 1, tz); 77 77 DateTime end = JodaTimeUtils.getDate(2012, 2, 2, tz); -
demo/src/main/java/com/numericalmethod/algoquant/model/signal/crossover/demo/DemoSMA2_010.java
r1465 r1495 36 36 import com.numericalmethod.algoquant.execution.product.Currencies; 37 37 import com.numericalmethod.algoquant.execution.product.Product; 38 import com.numericalmethod.algoquant.execution.product.equity. Equity;38 import com.numericalmethod.algoquant.execution.product.equity.Stock; 39 39 import com.numericalmethod.algoquant.execution.product.equity.hkex.HSI; 40 40 import com.numericalmethod.algoquant.execution.simulator.*; … … 66 66 public void run(Product product) { 67 67 // setup data source 68 DateTimeZone tz = product.as( Equity.class).getExchange().timeZone;68 DateTimeZone tz = product.as(Stock.class).getExchange().timeZone; 69 69 DateTime begin = JodaTimeUtils.getDate(2008, 1, 1, tz); 70 70 DateTime end = JodaTimeUtils.getDate(2009, 2, 2, tz); -
demo/src/main/java/com/numericalmethod/algoquant/model/signal/crossover/demo/DemoSMA2_011.java
r1438 r1495 39 39 import com.numericalmethod.algoquant.execution.product.Currencies; 40 40 import com.numericalmethod.algoquant.execution.product.Product; 41 import com.numericalmethod.algoquant.execution.product.equity. Equity;41 import com.numericalmethod.algoquant.execution.product.equity.Stock; 42 42 import com.numericalmethod.algoquant.execution.product.equity.hkex.HSI; 43 43 import com.numericalmethod.algoquant.execution.simulator.DepthCaches; … … 71 71 public void run(Product product) { 72 72 // setup data source 73 DateTimeZone tz = product.as( Equity.class).getExchange().timeZone;73 DateTimeZone tz = product.as(Stock.class).getExchange().timeZone; 74 74 DateTime begin = JodaTimeUtils.getDate(1990, 1, 1, tz); 75 75 DateTime end = JodaTimeUtils.getDate(2012, 8, 31, tz); -
demo/src/main/java/com/numericalmethod/algoquant/model/signal/demo/DemoPairsTrading.java
r1438 r1495 33 33 import static com.numericalmethod.algoquant.execution.order.OrderUtils.newMarketOrder; 34 34 import com.numericalmethod.algoquant.execution.performance.SimplePerformanceAnalyzer; 35 import com.numericalmethod.algoquant.execution.performance.measure.PerformanceMeasure; 36 import com.numericalmethod.algoquant.execution.performance.measure.ProfitLoss; 37 import com.numericalmethod.algoquant.execution.performance.measure.SimpleExchangeRateTable; 35 import com.numericalmethod.algoquant.execution.performance.measure.*; 38 36 import com.numericalmethod.algoquant.execution.performance.report.PerformanceReport; 39 37 import com.numericalmethod.algoquant.execution.product.Product; 40 import com.numericalmethod.algoquant.execution.product.equity.Equity; 41 import com.numericalmethod.algoquant.execution.simulator.DepthCaches; 42 import com.numericalmethod.algoquant.execution.simulator.SimpleSimulator; 43 import com.numericalmethod.algoquant.execution.simulator.Simulator; 44 import com.numericalmethod.algoquant.execution.strategy.BrokerageService; 45 import com.numericalmethod.algoquant.execution.strategy.SignalPlottable; 46 import com.numericalmethod.algoquant.execution.strategy.Strategy; 38 import com.numericalmethod.algoquant.execution.product.equity.Stock; 39 import com.numericalmethod.algoquant.execution.simulator.*; 40 import com.numericalmethod.algoquant.execution.strategy.*; 47 41 import com.numericalmethod.algoquant.execution.strategy.handler.DepthHandler; 48 42 import com.numericalmethod.algoquant.model.signal.PlainDoubleSignal; … … 53 47 import com.numericalmethod.suanshu.number.DoubleUtils; 54 48 import static java.lang.Math.abs; 55 import java.util.ArrayList; 56 import java.util.Arrays; 57 import java.util.Collection; 58 import java.util.List; 59 import java.util.Map; 49 import java.util.*; 60 50 import org.joda.time.DateTime; 61 51 import org.slf4j.Logger; … … 89 79 @Override 90 80 public void onDepthUpdate(DateTime now, Depth depth, MarketCondition mc, TradeBlotter blotter, 91 BrokerageService broker) {81 BrokerageService broker) { 92 82 93 83 if (!isReady) { … … 131 121 // select product 1 132 122 final Product product1 = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.GOOG.getInstance(); 133 Equity equityProperty1 = product1.as(Equity.class);123 Stock stockProperty1 = product1.as(Stock.class); 134 124 135 125 // select product 2 136 126 final Product product2 = com.numericalmethod.algoquant.execution.product.equity.usa.nasdaq.MSFT.getInstance(); 137 Equity equityProperty2 = product2.as(Equity.class);127 Stock stockProperty2 = product2.as(Stock.class); 138 128 139 129 // simulation time 140 DateTime begin = JodaTimeUtils.getDate(2010, 1, 1, equityProperty1.getExchange().timeZone);130 DateTime begin = JodaTimeUtils.getDate(2010, 1, 1, stockProperty1.getExchange().timeZone); 141 131 DateTime end = begin.plusYears(1); 142 132 143 133 // construct depth source mapping 144 YahooEOD yahoo1 = new YahooEOD( equityProperty1);145 YahooEOD yahoo2 = new YahooEOD( equityProperty2);134 YahooEOD yahoo1 = new YahooEOD(stockProperty1); 135 YahooEOD yahoo2 = new YahooEOD(stockProperty2); 146 136 DepthCaches depthCaches = new DepthCaches(); 147 depthCaches.addCache(product1, DepthCacheUtils.from EquityEODCache(product1, yahoo1.getCache(begin, end)));148 depthCaches.addCache(product2, DepthCacheUtils.from EquityEODCache(product2, yahoo2.getCache(begin, end)));137 depthCaches.addCache(product1, DepthCacheUtils.fromStockEODCache(product1, yahoo1.getCache(begin, end))); 138 depthCaches.addCache(product2, DepthCacheUtils.fromStockEODCache(product2, yahoo2.getCache(begin, end))); 149 139 150 140 // create strategy -
demo/src/main/java/com/numericalmethod/algoquant/model/signal/volume/demo/DemoADL.java
r1438 r1495 27 27 import com.numericalmethod.algoquant.data.historicaldata.DepthCacheUtils; 28 28 import com.numericalmethod.algoquant.data.historicaldata.yahoo.YahooEOD; 29 import com.numericalmethod.algoquant.data.type.EquityEOD;30 29 import com.numericalmethod.algoquant.data.type.MarketCondition; 30 import com.numericalmethod.algoquant.data.type.StockEOD; 31 31 import com.numericalmethod.algoquant.execution.component.chart.plotter.SimpleStrategyPlotter; 32 32 import com.numericalmethod.algoquant.execution.component.tradeblotter.TradeBlotter; … … 34 34 import static com.numericalmethod.algoquant.execution.order.OrderUtils.newMarketOrder; 35 35 import com.numericalmethod.algoquant.execution.performance.SimplePerformanceAnalyzer; 36 import com.numericalmethod.algoquant.execution.performance.measure.ExchangeRateTable; 37 import com.numericalmethod.algoquant.execution.performance.measure.PerformanceMeasure; 38 import com.numericalmethod.algoquant.execution.performance.measure.ProfitLoss; 39 import com.numericalmethod.algoquant.execution.performance.measure.SimpleExchangeRateTable; 36 import com.numericalmethod.algoquant.execution.performance.measure.*; 40 37 import com.numericalmethod.algoquant.execution.performance.measure.ir.InformationRatioByTrade; 41 38 import com.numericalmethod.algoquant.execution.performance.measure.omega.OmegaByTrade; … … 43 40 import com.numericalmethod.algoquant.execution.product.Currencies; 44 41 import com.numericalmethod.algoquant.execution.product.Product; 45 import com.numericalmethod.algoquant.execution.product.equity. Equity;42 import com.numericalmethod.algoquant.execution.product.equity.Stock; 46 43 import com.numericalmethod.algoquant.execution.product.equity.usa.nyse.NYSEProduct; 47 import com.numericalmethod.algoquant.execution.simulator.DepthCaches; 48 import com.numericalmethod.algoquant.execution.simulator.SimpleSimulator; 49 import com.numericalmethod.algoquant.execution.simulator.Simulator; 44 import com.numericalmethod.algoquant.execution.simulator.*; 50 45 import com.numericalmethod.algoquant.execution.simulator.subscription.Subscribable; 51 import com.numericalmethod.algoquant.execution.strategy.BrokerageService; 52 import com.numericalmethod.algoquant.execution.strategy.ProductParams; 53 import com.numericalmethod.algoquant.execution.strategy.SignalPlottable; 54 import com.numericalmethod.algoquant.execution.strategy.Strategy; 55 import com.numericalmethod.algoquant.execution.strategy.handler.EquityEODHandler; 46 import com.numericalmethod.algoquant.execution.strategy.*; 47 import com.numericalmethod.algoquant.execution.strategy.handler.StockEODHandler; 56 48 import com.numericalmethod.algoquant.model.signal.movingaverage.MovingAverage; 57 49 import com.numericalmethod.algoquant.model.signal.volume.AccumulationDistributionLine; … … 79 71 private static final Logger LOGGER = getClassLogger(); 80 72 81 public static class SimpleADLStrategy implements Strategy, SignalPlottable, EquityEODHandler {73 public static class SimpleADLStrategy implements Strategy, SignalPlottable, StockEODHandler { 82 74 83 75 private final MovingAverage marginalPriceMA; … … 94 86 95 87 @Override 96 public void onEODUpdate(DateTime now, EquityEOD eod, MarketCondition mc,97 TradeBlotter blotter,98 BrokerageService broker) {88 public void onEODUpdate(DateTime now, StockEOD eod, MarketCondition mc, 89 TradeBlotter blotter, 90 BrokerageService broker) { 99 91 double price = eod.getClose(); 100 92 if (previousPrice != null) { … … 119 111 120 112 return (DoubleUtils.compare(qty, 0., 1e-5) == 0) 121 ? Collections.<Order>emptyList()122 : Collections.<Order>singletonList(newMarketOrder(params.product, qty));113 ? Collections.<Order>emptyList() 114 : Collections.<Order>singletonList(newMarketOrder(params.product, qty)); 123 115 } 124 116 … … 143 135 String dataFolder = "./log/Yahoo"; 144 136 Product product = new NYSEProduct("JWN"); 145 Equity equityProduct = product.as(Equity.class);146 DateTime begin = JodaTimeUtils.getDate(2010, 2, 1, equityProduct.getExchange().timeZone);147 DateTime end = JodaTimeUtils.getDate(2010, 12, 22, equityProduct.getExchange().timeZone);148 YahooEOD yahoo = new YahooEOD( equityProduct, dataFolder, dataFolder);137 Stock stockProduct = product.as(Stock.class); 138 DateTime begin = JodaTimeUtils.getDate(2010, 2, 1, stockProduct.getExchange().timeZone); 139 DateTime end = JodaTimeUtils.getDate(2010, 12, 22, stockProduct.getExchange().timeZone); 140 YahooEOD yahoo = new YahooEOD(stockProduct, dataFolder, dataFolder); 149 141 150 142 int lag = 10; … … 154 146 LOGGER.info(strategy.toString()); 155 147 156 SequentialCache< EquityEOD> equityEODCache = yahoo.getCache(begin, end);148 SequentialCache<StockEOD> stockEODCache = yahoo.getCache(begin, end); 157 149 158 150 // create source of market depth 159 151 DepthCaches depthCaches = DepthCaches.newInstanceWithSingleCache( 160 product, DepthCacheUtils.from EquityEODCache(product, equityEODCache));152 product, DepthCacheUtils.fromStockEODCache(product, stockEODCache)); 161 153 162 154 Collection<SequentialCache<? extends Subscribable>> subscribables = 163 155 new ArrayList<SequentialCache<? extends Subscribable>>(); 164 subscribables.add( equityEODCache);156 subscribables.add(stockEODCache); 165 157 166 158 // run simulation -
demo/src/main/java/com/numericalmethod/algoquant/model/signal/volume/demo/DemoCMF.java
r1438 r1495 27 27 import com.numericalmethod.algoquant.data.historicaldata.DepthCacheUtils; 28 28 import com.numericalmethod.algoquant.data.historicaldata.yahoo.YahooEOD; 29 import com.numericalmethod.algoquant.data.type.EquityEOD;30 29 import com.numericalmethod.algoquant.data.type.MarketCondition; 30 import com.numericalmethod.algoquant.data.type.StockEOD; 31 31 import com.numericalmethod.algoquant.execution.component.chart.plotter.SimpleStrategyPlotter; 32 32 import com.numericalmethod.algoquant.execution.component.tradeblotter.TradeBlotter; … … 34 34 import static com.numericalmethod.algoquant.execution.order.OrderUtils.newMarketOrder; 35 35 import com.numericalmethod.algoquant.execution.performance.SimplePerformanceAnalyzer; 36 import com.numericalmethod.algoquant.execution.performance.measure.ExchangeRateTable; 37 import com.numericalmethod.algoquant.execution.performance.measure.PerformanceMeasure; 38 import com.numericalmethod.algoquant.execution.performance.measure.ProfitLoss; 39 import com.numericalmethod.algoquant.execution.performance.measure.SimpleExchangeRateTable; 36 import com.numericalmethod.algoquant.execution.performance.measure.*; 40 37 import com.numericalmethod.algoquant.execution.performance.measure.ir.InformationRatioByTrade; 41 38 import com.numericalmethod.algoquant.execution.performance.measure.omega.OmegaByTrade; … … 43 40 import com.numericalmethod.algoquant.execution.product.Currencies; 44 41 import com.numericalmethod.algoquant.execution.product.Product; 45 import com.numericalmethod.algoquant.execution.product.equity. Equity;42 import com.numericalmethod.algoquant.execution.product.equity.Stock; 46 43 import com.numericalmethod.algoquant.execution.product.equity.usa.nyse.NYSEProduct; 47 import com.numericalmethod.algoquant.execution.simulator.DepthCaches; 48 import com.numericalmethod.algoquant.execution.simulator.SimpleSimulator; 49 import com.numericalmethod.algoquant.execution.simulator.Simulator; 44 import com.numericalmethod.algoquant.execution.simulator.*; 50 45 import com.numericalmethod.algoquant.execution.simulator.subscription.Subscribable; 51 import com.numericalmethod.algoquant.execution.strategy.BrokerageService; 52 import com.numericalmethod.algoquant.execution.strategy.ProductParams; 53 import com.numericalmethod.algoquant.execution.strategy.SignalPlottable; 54 import com.numericalmethod.algoquant.execution.strategy.Strategy; 55 import com.numericalmethod.algoquant.execution.strategy.handler.EquityEODHandler; 46 import com.numericalmethod.algoquant.execution.strategy.*; 47 import com.numericalmethod.algoquant.execution.strategy.handler.StockEODHandler; 56 48 import com.numericalmethod.algoquant.model.signal.movingaverage.MovingAverage; 57 49 import com.numericalmethod.algoquant.model.signal.volume.ChaikinMoneyFlow; … … 77 69 public class DemoCMF { 78 70 79 public static class SimpleADLStrategy implements Strategy, SignalPlottable, EquityEODHandler {71 public static class SimpleADLStrategy implements Strategy, SignalPlottable, StockEODHandler { 80 72 81 73 private final MovingAverage marginalPriceMA; … … 93 85 public void onEODUpdate( 94 86 DateTime now, 95 EquityEOD eod,87 StockEOD eod, 96 88 MarketCondition mc, 97 89 TradeBlotter blotter, … … 117 109 118 110 return (DoubleUtils.compare(qty, 0., 1e-5) == 0) 119 ? Collections.<Order>emptyList()120 : Collections.<Order>singletonList(newMarketOrder(params.product, qty));111 ? Collections.<Order>emptyList() 112 : Collections.<Order>singletonList(newMarketOrder(params.product, qty)); 121 113 } 122 114 … … 133 125 } 134 126 } 127 135 128 private static final Logger LOGGER = getClassLogger(); 136 129 … … 139 132 String dataFolder = "./log/Yahoo"; 140 133 Product product = new NYSEProduct("FCX"); 141 Equity equityProduct = product.as(Equity.class);142 DateTimeZone tz = equityProduct.getExchange().timeZone;134 Stock stockProduct = product.as(Stock.class); 135 DateTimeZone tz = stockProduct.getExchange().timeZone; 143 136 DateTime begin = JodaTimeUtils.getDate(2010, 2, 1, tz); 144 137 DateTime end = JodaTimeUtils.getDate(2010, 12, 22, tz); 145 YahooEOD yahoo = new YahooEOD( equityProduct, dataFolder, dataFolder);138 YahooEOD yahoo = new YahooEOD(stockProduct, dataFolder, dataFolder); 146 139 147 140 int lag = 20; … … 151 144 LOGGER.info(strategy.toString()); 152 145 153 SequentialCache< EquityEOD> equityEODCache = yahoo.getCache(begin, end);146 SequentialCache<StockEOD> stockEODCache = yahoo.getCache(begin, end); 154 147 155 148 // create source of market depth 156 149 DepthCaches depthCaches = DepthCaches.newInstanceWithSingleCache( 157 product, DepthCacheUtils.from EquityEODCache(product, equityEODCache));150 product, DepthCacheUtils.fromStockEODCache(product, stockEODCache)); 158 151 159 152 Collection<SequentialCache<? extends Subscribable>> subscribables = 160 153 new ArrayList<SequentialCache<? extends Subscribable>>(); 161 subscribables.add( equityEODCache);154 subscribables.add(stockEODCache); 162 155 163 156 // run simulation
Note: See TracChangeset
for help on using the changeset viewer.
