Repository navigation
Model AccumulationDistributionLineDemo
All model results · Pinned source · Javadoc
Demonstrates an ADL/price divergence strategy driven by daily OHLCV bars. The implemented rule targets +1 unit when smoothed price changes are positive and smoothed money-flow volume is negative, and -1 unit for the reverse signs. It targets zero otherwise. This documents the actual rule, rather than assuming the more usual bullish-divergence interpretation.
Prices are synthetic by default; --live downloads Yahoo history.
Pass --charts to plot the ADL; performance measures appear in the console.
Using this example. Adapts OHLCV bars to an indicator-driven strategy and sends only the change from current position to the target. Order quantities are signed product units; this fixed-unit example does not invest all account cash. DemoSupport controls licensing, synthetic data and optional live downloads.
Model and publication. No single original research publication is claimed for this library/example policy.
Implementation in this tutorial. Accumulation/distribution aggregates volume signed by the close’s location within its high-low range. The demo combines that indicator with smoothed price changes. Its actual target rule, documented above, is an example policy and is not evidence that a divergence signal has positive expected return.
| Item | Value |
|---|---|
| Status | blocked-license |
| Run | 39114006111 |
| UTC publication | 2026-10-18 09:11 UTC |
| Source commit | 0097e73c040bdaaddac570e2fe694d9836b676ee |
| Data mode | synthetic --quick |
| Exit code | 1 |
| Elapsed seconds | 0.68 |
| Time limit seconds | 180 |
| Maximum Java heap | 1200m |
The external license was not accepted for this calculation.
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.technical.AccumulationDistributionLineDemo -Dexec.args="--quick"The 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:02,828 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
09:07:02,829 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
09:07:02,829 |-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:02,858 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@63d4e2ba - 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:02,921 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
09:07:02,922 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
09:07:02,932 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
09:07:02,943 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
09:07:03,001 |-INFO in ch.qos.logback.core.joran.action.TimestampAction - Using current interpretation time, i.e. now, as time reference.
09:07:03,002 |-INFO in ch.qos.logback.core.joran.action.TimestampAction - Adding property to the context with key="bySecond" and value="2026.10.18,09.07.03" to the LOCAL scope
09:07:03,003 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
09:07:03,007 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [FILE1]
09:07:03,014 |-INFO in ch.qos.logback.core.rolling.FixedWindowRollingPolicy@7bb11784 - Will use zip compression
09:07:03,015 |-WARN in ch.qos.logback.core.rolling.FixedWindowRollingPolicy@7bb11784 - Large window sizes are not allowed.
09:07:03,015 |-WARN in ch.qos.logback.core.rolling.FixedWindowRollingPolicy@7bb11784 - MaxIndex reduced to 21
09:07:03,019 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
09:07:03,020 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE1] - Active log file name: log/algoquant.2026.10.18,09.07.03.log
09:07:03,020 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE1] - File property is set to [log/algoquant.2026.10.18,09.07.03.log]
09:07:03,022 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
09:07:03,022 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
09:07:03,022 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [FILE1] to Logger[ROOT]
09:07:03,022 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
09:07:03,023 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@33a10788 - Registering current configuration as safe fallback point
dev.nm.misc.license.LicenseError: license has been loaded already (loaded license from: license file: /home/runner/work/algoquant-examples/algoquant-examples/license/nm.lic)
Download AccumulationDistributionLineDemo.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.