Repository navigation
Model CSI300SimulationDemo
All model results · Pinned source · Javadoc
Using this example. Configures CSI 300 constituents and local adjusted-price files for a portfolio simulation. The constituent CSV and price directory are independent inputs and must cover compatible dates. Paths in main are examples to adapt to your own dataset.
Model and publication. Related theory and the scope of this example are distinguished below.
Implementation in this tutorial. Reuses rolling portfolio optimization with configured CSI 300 constituents and adjusted prices. A constituent list needs time-consistent membership, and a price history needs coverage for calibration as well as trading. These dataset choices are separate from the underlying optimization theory.
| Item | Value |
|---|---|
| Status | timeout |
| Run | 39114006111 |
| UTC publication | 2026-10-18 09:11 UTC |
| Source commit | 0097e73c040bdaaddac570e2fe694d9836b676ee |
| Data mode | original main defaults |
| Exit code | -15 |
| Elapsed seconds | 180.01 |
| Time limit seconds | 180 |
| Maximum Java heap | 1200m |
The original main exceeded the configured execution limit; partial outputs are not a completed result.
Follow the repository setup for JDK 8, Maven credentials and an external NM license. From the repository root:
mvn -U -Dmaven.test.skip=true clean package
mvn exec:java -Dexec.mainClass=tech.nmfin.algoquant.demo.model.portfoliooptimization.csi300.CSI300SimulationDemoThe automated run uses scripts/ModelDemoRunner.java to initialize the external license before the unchanged main, save JFreeChart windows as PNGs, and exit after main returns. It uses an isolated working directory with the repository datasets/configuration linked in. Running directly may leave desktop windows open.
This is an incomplete or blocked run. Output below is diagnostic or partial, not a verified strategy result.
09:07:58,503 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
09:07:58,503 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
09:07:58,503 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [jar:file:/home/runner/work/algoquant-examples/algoquant-examples/target/lib/algoquant-dist-3.3.0-SNAPSHOT.jar!/logback.xml]
09:07:58,517 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@725bef66 - URL [jar:file:/home/runner/work/algoquant-examples/algoquant-examples/target/lib/algoquant-dist-3.3.0-SNAPSHOT.jar!/logback.xml] is not of type file
09:07:58,543 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
09:07:58,543 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
09:07:58,549 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
09:07:58,553 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
09:07:58,576 |-INFO in ch.qos.logback.core.joran.action.TimestampAction - Using current interpretation time, i.e. now, as time reference.
09:07:58,577 |-INFO in ch.qos.logback.core.joran.action.TimestampAction - Adding property to the context with key="bySecond" and value="2026.10.18,09.07.58" to the LOCAL scope
09:07:58,577 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
09:07:58,579 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [FILE1]
09:07:58,584 |-INFO in ch.qos.logback.core.rolling.FixedWindowRollingPolicy@2aaf7cc2 - Will use zip compression
09:07:58,584 |-WARN in ch.qos.logback.core.rolling.FixedWindowRollingPolicy@2aaf7cc2 - Large window sizes are not allowed.
09:07:58,584 |-WARN in ch.qos.logback.core.rolling.FixedWindowRollingPolicy@2aaf7cc2 - MaxIndex reduced to 21
09:07:58,586 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
09:07:58,587 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE1] - Active log file name: log/algoquant.2026.10.18,09.07.58.log
09:07:58,587 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE1] - File property is set to [log/algoquant.2026.10.18,09.07.58.log]
09:07:58,588 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
09:07:58,588 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
09:07:58,588 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [FILE1] to Logger[ROOT]
09:07:58,588 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
09:07:58,589 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@6e3c1e69 - Registering current configuration as safe fallback point
09:07:58.637 [main] INFO t.n.a.d.h.c.ChinaIndexConstituentsHistoryReader,100 - reading constituents from ./test-data/china/constituent_index_300.csv...
09:07:59.276 [main] INFO t.n.a.d.m.p.c.CSI300SimulationDemo,451 - simulating buy-and-hold for interval [2010-01-01T00:00,2017-01-01T00:00)...
09:07:59.277 [main] INFO t.n.a.m.p.s.OptimizationAlgorithmComparisonSimulation,12 - Running algorithm 'buy-and-hold' (window=P7D, rebalance=P7Y)...
09:07:59.290 [main] INFO t.n.algoquant.util.config.AQConfig,194 - looking up configuration file: config.default.xml
09:07:59.290 [main] INFO t.n.algoquant.util.config.AQConfig,194 - looking up configuration file: config/config.default.xml
09:07:59.291 [main] INFO t.n.algoquant.util.config.AQConfig,209 - loading config file: file:/home/runner/work/algoquant-examples/algoquant-examples/target/model-results/CSI300SimulationDemo/work/config/config.default.xml
... excerpt shortened; complete stdout is in the release archive ...
09:08:01.076 [main] WARN t.n.a.d.h.c.z.s.c.CSI300DataProvider,10 - failed to load data for 000866.SZ @ SZ
09:08:01.076 [main] WARN t.n.a.m.p.s.OptimizationAlgorithmComparisonSimulation,298 - failed to load cache for 000866.SZ @ SZ, ignored
09:08:01.113 [main] WARN t.n.a.d.h.c.z.s.c.CSI300DataProvider,10 - failed to load data for 000817.SZ @ SZ
09:08:01.113 [main] WARN t.n.a.m.p.s.OptimizationAlgorithmComparisonSimulation,298 - failed to load cache for 000817.SZ @ SZ, ignored
09:08:01.332 [main] WARN t.n.a.d.h.c.z.s.c.CSI300DataProvider,10 - failed to load data for 000406.SZ @ SZ
09:08:01.332 [main] WARN t.n.a.m.p.s.OptimizationAlgorithmComparisonSimulation,298 - failed to load cache for 000406.SZ @ SZ, ignored
09:08:01.482 [main] WARN t.n.a.d.h.c.z.s.c.CSI300DataProvider,10 - failed to load data for 600002.SH @ SS
09:08:01.482 [main] WARN t.n.a.m.p.s.OptimizationAlgorithmComparisonSimulation,298 - failed to load cache for 600002.SH @ SS, ignored
09:08:01.505 [main] WARN t.n.a.d.h.c.z.s.c.CSI300DataProvider,10 - failed to load data for 000956.SZ @ SZ
09:08:01.505 [main] WARN t.n.a.m.p.s.OptimizationAlgorithmComparisonSimulation,298 - failed to load cache for 000956.SZ @ SZ, ignored
09:08:01.521 [main] WARN t.n.a.d.h.c.z.s.c.CSI300DataProvider,10 - failed to load data for 000763.SZ @ SZ
09:08:01.521 [main] WARN t.n.a.m.p.s.OptimizationAlgorithmComparisonSimulation,298 - failed to load cache for 000763.SZ @ SZ, ignored
09:08:01.907 [main] WARN t.n.a.d.h.c.z.s.c.CSI300DataProvider,10 - failed to load data for T00018.SH @ SS
09:08:01.907 [main] WARN t.n.a.m.p.s.OptimizationAlgorithmComparisonSimulation,298 - failed to load cache for T00018.SH @ SS, ignored
09:08:02.209 [main] WARN t.n.a.d.h.c.z.s.c.CSI300DataProvider,10 - failed to load data for 000618.SZ @ SZ
09:08:02.209 [main] WARN t.n.a.m.p.s.OptimizationAlgorithmComparisonSimulation,298 - failed to load cache for 000618.SZ @ SZ, ignored
09:08:03.399 [main] INFO t.n.a.d.h.yahoo.YahooEODCacheFactory,196 - reading Yahoo! data for ^IRX from the Internet from 2009-12-01T00:00 to 2017-01-01T16:00
09:08:03.613 [main] INFO t.n.a.d.h.yahoo.YahooEODCacheFactory,196 - reading Yahoo! data for ^GSPC from the Internet from 2009-11-25T00:00 to 2017-01-15T16:00
09:08:04.070 [main] INFO t.n.a.m.s.r.RebalancePortfolio,173 - Calculating weights for rebalancing point at 2010-01-01T00:00
09:08:04.755 [main] INFO t.n.a.m.s.r.RebalancePortfolioTechnical,153 - dropped products with no data (1): [000300.SS @ SS]
09:08:04.775 [main] WARN t.n.a.m.s.r.RebalancePortfolio,194 - failed to compute new positions: 'beginRow' must be in range [1 0]: 1
java.lang.IllegalArgumentException: 'beginRow' must be in range [1 0]: 1
at dev.nm.misc.ArgumentAssertion.assertRange(meb:207)
at dev.nm.algebra.linear.matrix.doubles.matrixtype.dense.DenseMatrix.getColumn(cf:310)
at dev.nm.algebra.linear.matrix.doubles.matrixtype.dense.DenseMatrix.getColumn(cf:446)
at tech.nmfin.algoquant.model.portfoliooptimization.IndexAwareOptimizer.getOptimalWeights(qb:71)
at tech.nmfin.algoquant.model.strategy.rebalance.RebalancePortfolioTechnical.getPositions(r:19)
at tech.nmfin.algoquant.model.strategy.rebalance.RebalancePortfolio.s(z:196)
at tech.nmfin.algoquant.model.strategy.rebalance.RebalancePortfolio.onEvent(z:11)
at tech.nmfin.algoquant.execution.component.simulator.message.handler.ChannelMessageHandlerFactories$1$1.handle(hmb:200)
at tech.nmfin.algoquant.execution.component.simulator.message.dispatcher.SimpleChannelMessageDispatcher.dispatch(pfb:187)
at tech.nmfin.algoquant.execution.component.simulator.StrategyComponent.dispatch(ybb:150)
at dev.nm.nmutils.circuit.controller.SingleThreadedController.run(uwb:137)
at tech.nmfin.algoquant.execution.component.simulator.SimpleSimulator.run(ujb:132)
at tech.nmfin.algoquant.execution.simulation.template.SimTemplateUtils.run(kq:48)
at tech.nmfin.algoquant.model.portfoliooptimization.simulation.PortfolioOptimizationSimulation.run(ym:767)
at tech.nmfin.algoquant.model.portfoliooptimization.simulation.OptimizationAlgorithmComparisonSimulation.s(ne:437)
at tech.nmfin.algoquant.model.portfoliooptimization.simulation.OptimizationAlgorithmComparisonSimulation.s(ne:163)
at java.util.LinkedHashMap$LinkedEntrySet.forEach(LinkedHashMap.java:671)
at tech.nmfin.algoquant.model.portfoliooptimization.simulation.OptimizationAlgorithmComparisonSimulation.run(ne:193)
at tech.nmfin.algoquant.demo.model.portfoliooptimization.csi300.CSI300SimulationDemo.simulateAlgorithm(CSI300SimulationDemo.java:454)
at tech.nmfin.algoquant.demo.model.portfoliooptimization.csi300.CSI300SimulationDemo.simulateBaseline(CSI300SimulationDemo.java:138)
at tech.nmfin.algoquant.demo.model.portfoliooptimization.csi300.CSI300SimulationDemo.run(CSI300SimulationDemo.java:111)
at tech.nmfin.algoquant.demo.model.portfoliooptimization.csi300.CSI300SimulationDemo.main(CSI300SimulationDemo.java:86)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at ModelDemoRunner.main(ModelDemoRunner.java:35)
09:08:25.342 [main] INFO t.n.a.m.s.r.RebalancePortfolio,173 - Calculating weights for rebalancing point at 2017-01-01T00:00
09:08:25.868 [main] INFO t.n.a.m.s.r.RebalancePortfolioTechnical,153 - dropped products with no data (1): [000300.SS @ SS]
09:08:25.871 [main] WARN t.n.a.m.s.r.RebalancePortfolio,194 - failed to compute new positions: 'beginRow' must be in range [1 0]: 1
java.lang.IllegalArgumentException: 'beginRow' must be in range [1 0]: 1
at dev.nm.misc.ArgumentAssertion.assertRange(meb:207)
at dev.nm.algebra.linear.matrix.doubles.matrixtype.dense.DenseMatrix.getColumn(cf:310)
at dev.nm.algebra.linear.matrix.doubles.matrixtype.dense.DenseMatrix.getColumn(cf:446)
at tech.nmfin.algoquant.model.portfoliooptimization.IndexAwareOptimizer.getOptimalWeights(qb:71)
at tech.nmfin.algoquant.model.strategy.rebalance.RebalancePortfolioTechnical.getPositions(r:19)
at tech.nmfin.algoquant.model.strategy.rebalance.RebalancePortfolio.s(z:196)
at tech.nmfin.algoquant.model.strategy.rebalance.RebalancePortfolio.onEvent(z:11)
at tech.nmfin.algoquant.execution.component.simulator.message.handler.ChannelMessageHandlerFactories$1$1.handle(hmb:200)
at tech.nmfin.algoquant.execution.component.simulator.message.dispatcher.SimpleChannelMessageDispatcher.dispatch(pfb:187)
at tech.nmfin.algoquant.execution.component.simulator.StrategyComponent.dispatch(ybb:150)
at dev.nm.nmutils.circuit.controller.SingleThreadedController.run(uwb:137)
at tech.nmfin.algoquant.execution.component.simulator.SimpleSimulator.run(ujb:132)
at tech.nmfin.algoquant.execution.simulation.template.SimTemplateUtils.run(kq:48)
at tech.nmfin.algoquant.model.portfoliooptimization.simulation.PortfolioOptimizationSimulation.run(ym:767)
at tech.nmfin.algoquant.model.portfoliooptimization.simulation.OptimizationAlgorithmComparisonSimulation.s(ne:437)
at tech.nmfin.algoquant.model.portfoliooptimization.simulation.OptimizationAlgorithmComparisonSimulation.s(ne:163)
at java.util.LinkedHashMap$LinkedEntrySet.forEach(LinkedHashMap.java:671)
at tech.nmfin.algoquant.model.portfoliooptimization.simulation.OptimizationAlgorithmComparisonSimulation.run(ne:193)
at tech.nmfin.algoquant.demo.model.portfoliooptimization.csi300.CSI300SimulationDemo.simulateAlgorithm(CSI300SimulationDemo.java:454)
at tech.nmfin.algoquant.demo.model.portfoliooptimization.csi300.CSI300SimulationDemo.simulateBaseline(CSI300SimulationDemo.java:138)
at tech.nmfin.algoquant.demo.model.portfoliooptimization.csi300.CSI300SimulationDemo.run(CSI300SimulationDemo.java:111)
at tech.nmfin.algoquant.demo.model.portfoliooptimization.csi300.CSI300SimulationDemo.main(CSI300SimulationDemo.java:86)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at ModelDemoRunner.main(ModelDemoRunner.java:35)
Download CSI300SimulationDemo.zip contains stdout, stderr, the execution record, checksums and any exported CSV/chart files.
Use the first relevant exception and the source configuration to resolve the prerequisite or code issue, then rerun. A missing dataset requires the correct original schema and period; substituting synthetic values would be a different experiment. A timeout establishes only that this bounded attempt did not finish.
For model assumptions, original publications and adaptation limits, use the literature guide.