From 565a8616700a889617dd0631eaab507b8edbd37a Mon Sep 17 00:00:00 2001 From: Peter Dekkers Date: Sun, 24 Dec 2023 09:47:47 +0100 Subject: [PATCH] Make samples runnable as tests part 3 --- .../org/roboquant/samples/AlpacaSamples.kt | 10 ++++-- .../org/roboquant/samples/AvroSamples.kt | 5 +++ .../org/roboquant/samples/BinanceSamples.kt | 7 +++-- .../org/roboquant/samples/IBKRSamples.kt | 2 -- .../samples/{main.kt => PolygonSamples.kt} | 31 ++++++++++--------- .../org/roboquant/samples/ServerSamples.kt | 2 ++ .../org/roboquant/samples/SSRSamples.kt | 2 ++ .../kotlin/org/roboquant/samples/TaSamples.kt | 6 ++++ .../org/roboquant/samples/RoboquantSamples.kt | 9 ++++-- 9 files changed, 51 insertions(+), 23 deletions(-) rename roboquant-polygon/src/test/kotlin/org/roboquant/samples/{main.kt => PolygonSamples.kt} (61%) diff --git a/roboquant-alpaca/src/test/kotlin/org/roboquant/samples/AlpacaSamples.kt b/roboquant-alpaca/src/test/kotlin/org/roboquant/samples/AlpacaSamples.kt index 7ea8da575..c3140c5bc 100644 --- a/roboquant-alpaca/src/test/kotlin/org/roboquant/samples/AlpacaSamples.kt +++ b/roboquant-alpaca/src/test/kotlin/org/roboquant/samples/AlpacaSamples.kt @@ -14,8 +14,6 @@ * limitations under the License. */ -@file:Suppress("KotlinConstantConditions") - package org.roboquant.samples import org.roboquant.Roboquant @@ -33,6 +31,7 @@ import org.roboquant.metrics.ProgressMetric import org.roboquant.orders.MarketOrder import org.roboquant.strategies.EMAStrategy import java.time.Instant +import kotlin.test.Ignore import kotlin.test.Test internal class AlpacaSamples { @@ -55,12 +54,14 @@ internal class AlpacaSamples { ) @Test + @Ignore internal fun alpacaBroker() { val broker = AlpacaBroker() println(broker.account.fullSummary()) } @Test + @Ignore internal fun alpacaPaperTradeStocks() { val broker = AlpacaBroker() val account = broker.account @@ -85,6 +86,7 @@ internal class AlpacaSamples { @Test + @Ignore internal fun alpacaTradeCrypto() { val feed = AlpacaLiveFeed() val symbols = feed.availableCrypto.random(10).symbols @@ -102,6 +104,7 @@ internal class AlpacaSamples { @Test + @Ignore internal fun alpacaTradeStocks() { val feed = AlpacaLiveFeed() @@ -117,6 +120,7 @@ internal class AlpacaSamples { @Test + @Ignore internal fun alpacaLiveFeed() { val feed = AlpacaLiveFeed() feed.heartbeatInterval = 10_000 @@ -130,6 +134,7 @@ internal class AlpacaSamples { @Test + @Ignore internal fun alpacaHistoricFeed2() { val symbols = arrayOf( "AAPL", @@ -162,6 +167,7 @@ internal class AlpacaSamples { } @Test + @Ignore internal fun singleOrder() { val broker = AlpacaBroker { extendedHours = true diff --git a/roboquant-avro/src/test/kotlin/org/roboquant/samples/AvroSamples.kt b/roboquant-avro/src/test/kotlin/org/roboquant/samples/AvroSamples.kt index df5fc3474..9ac90c67e 100644 --- a/roboquant-avro/src/test/kotlin/org/roboquant/samples/AvroSamples.kt +++ b/roboquant-avro/src/test/kotlin/org/roboquant/samples/AvroSamples.kt @@ -51,6 +51,7 @@ import java.time.format.DateTimeFormatter import kotlin.io.path.Path import kotlin.io.path.div import kotlin.system.measureTimeMillis +import kotlin.test.Ignore import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue @@ -58,6 +59,7 @@ import kotlin.test.assertTrue internal class AvroSamples { @Test + @Ignore internal fun multiCurrency() { val feed = CSVFeed("data/US") { priceParser = PriceBarParser(priceAdjust = true) @@ -87,6 +89,7 @@ internal class AvroSamples { } @Test + @Ignore internal fun multiRun() { val feed = AvroFeed.sp500() val logger = LastEntryLogger() @@ -103,6 +106,7 @@ internal class AvroSamples { } @Test + @Ignore internal fun walkForwardParallel() = runBlocking { val feed = AvroFeed.sp500() val logger = LastEntryLogger() @@ -123,6 +127,7 @@ internal class AvroSamples { @Test + @Ignore internal fun testingStrategies() { val strategy = EMAStrategy() val roboquant = Roboquant(strategy) diff --git a/roboquant-binance/src/test/kotlin/org/roboquant/samples/BinanceSamples.kt b/roboquant-binance/src/test/kotlin/org/roboquant/samples/BinanceSamples.kt index e54c35ec7..5de2fb115 100644 --- a/roboquant-binance/src/test/kotlin/org/roboquant/samples/BinanceSamples.kt +++ b/roboquant-binance/src/test/kotlin/org/roboquant/samples/BinanceSamples.kt @@ -14,8 +14,6 @@ * limitations under the License. */ -@file:Suppress("KotlinConstantConditions") - package org.roboquant.samples @@ -32,12 +30,14 @@ import org.roboquant.metrics.ProgressMetric import org.roboquant.metrics.ScorecardMetric import org.roboquant.policies.FlexPolicy import org.roboquant.strategies.EMAStrategy +import kotlin.test.Ignore import kotlin.test.Test internal class BinanceSamples { @Test + @Ignore fun binanceLiveFeed() { val feed = BinanceLiveFeed() feed.subscribePriceBar("BTCBUSD", "ETHBUSD", interval = Interval.ONE_MINUTE) @@ -49,6 +49,7 @@ internal class BinanceSamples { } @Test + @Ignore fun binanceForwardTest() { val feed = BinanceLiveFeed() @@ -66,6 +67,7 @@ internal class BinanceSamples { } @Test + @Ignore fun binanceTestBack() { val strategy = EMAStrategy() val initialDeposit = Amount("BUSD", 100_000).toWallet() @@ -80,6 +82,7 @@ internal class BinanceSamples { } @Test + @Ignore fun multiplier() { val feed = BinanceLiveFeed() diff --git a/roboquant-ibkr/src/test/kotlin/org/roboquant/samples/IBKRSamples.kt b/roboquant-ibkr/src/test/kotlin/org/roboquant/samples/IBKRSamples.kt index 33b37be3a..38732a98e 100644 --- a/roboquant-ibkr/src/test/kotlin/org/roboquant/samples/IBKRSamples.kt +++ b/roboquant-ibkr/src/test/kotlin/org/roboquant/samples/IBKRSamples.kt @@ -14,8 +14,6 @@ * limitations under the License. */ -@file:Suppress("KotlinConstantConditions") - package org.roboquant.samples import org.roboquant.Roboquant diff --git a/roboquant-polygon/src/test/kotlin/org/roboquant/samples/main.kt b/roboquant-polygon/src/test/kotlin/org/roboquant/samples/PolygonSamples.kt similarity index 61% rename from roboquant-polygon/src/test/kotlin/org/roboquant/samples/main.kt rename to roboquant-polygon/src/test/kotlin/org/roboquant/samples/PolygonSamples.kt index a5de986a5..f3e2d7a2c 100644 --- a/roboquant-polygon/src/test/kotlin/org/roboquant/samples/main.kt +++ b/roboquant-polygon/src/test/kotlin/org/roboquant/samples/PolygonSamples.kt @@ -22,22 +22,25 @@ import org.roboquant.common.minutes import org.roboquant.feeds.PriceAction import org.roboquant.feeds.filter import org.roboquant.polygon.PolygonLiveFeed +import kotlin.test.Ignore +import kotlin.test.Test +internal class PolygonSamples { -private fun testLiveFeed() = runBlocking { - val feed = PolygonLiveFeed { - this.delayed = true + @Test + @Ignore + internal fun testLiveFeed() = runBlocking { + System.setProperty(org.slf4j.simple.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "TRACE") + val feed = PolygonLiveFeed { + this.delayed = true + } + feed.subscribe("IBM", "AAPL") + val actions = feed.filter(timeframe = Timeframe.next(5.minutes)) { + println(it) + true + } + assert(actions.isNotEmpty()) + feed.disconnect() } - feed.subscribe("IBM", "AAPL") - val actions = feed.filter(timeframe = Timeframe.next(5.minutes)) { - println(it) - true - } - assert(actions.isNotEmpty()) - feed.disconnect() -} -fun main() { - System.setProperty(org.slf4j.simple.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "TRACE") - testLiveFeed() } diff --git a/roboquant-server/src/test/kotlin/org/roboquant/samples/ServerSamples.kt b/roboquant-server/src/test/kotlin/org/roboquant/samples/ServerSamples.kt index 0b4952bfe..b58d99a64 100644 --- a/roboquant-server/src/test/kotlin/org/roboquant/samples/ServerSamples.kt +++ b/roboquant-server/src/test/kotlin/org/roboquant/samples/ServerSamples.kt @@ -25,6 +25,7 @@ import org.roboquant.metrics.PriceMetric import org.roboquant.server.WebServer import org.roboquant.strategies.EMAStrategy import kotlin.system.exitProcess +import kotlin.test.Ignore import kotlin.test.Test @@ -37,6 +38,7 @@ internal class ServerSamples { * You can run this sample to start a server with three runs */ @Test + @Ignore internal fun run() { val server = WebServer() diff --git a/roboquant-ssr/src/test/kotlin/org/roboquant/samples/SSRSamples.kt b/roboquant-ssr/src/test/kotlin/org/roboquant/samples/SSRSamples.kt index 8c379bcec..a72c9316a 100644 --- a/roboquant-ssr/src/test/kotlin/org/roboquant/samples/SSRSamples.kt +++ b/roboquant-ssr/src/test/kotlin/org/roboquant/samples/SSRSamples.kt @@ -6,6 +6,7 @@ import org.roboquant.charts.PriceBarChart import org.roboquant.charts.transcodeSVG2PNG import org.roboquant.feeds.random.RandomWalkFeed import java.io.File +import kotlin.test.Ignore import kotlin.test.Test /* @@ -30,6 +31,7 @@ class SSRSamples { * The output is saved in /tmp/ */ @Test + @Ignore internal fun run() { val feed = RandomWalkFeed.lastYears(2, nAssets = 5) val chart = CorrelationChart(feed, feed.assets) diff --git a/roboquant-ta/src/test/kotlin/org/roboquant/samples/TaSamples.kt b/roboquant-ta/src/test/kotlin/org/roboquant/samples/TaSamples.kt index 9cd45f52a..52901c242 100644 --- a/roboquant-ta/src/test/kotlin/org/roboquant/samples/TaSamples.kt +++ b/roboquant-ta/src/test/kotlin/org/roboquant/samples/TaSamples.kt @@ -36,11 +36,13 @@ import org.roboquant.ta.* import org.ta4j.core.indicators.bollinger.BollingerBandFacade import org.ta4j.core.indicators.helpers.ClosePriceIndicator import org.ta4j.core.rules.CrossedUpIndicatorRule +import kotlin.test.Ignore import kotlin.test.Test internal class TaSamples { @Test + @Ignore internal fun macd() { val strategy = TaLibSignalStrategy { asset, prices -> val (_, _, diff) = macd(prices, 12, 26, 9) @@ -60,6 +62,7 @@ internal class TaSamples { } @Test + @Ignore internal fun ta4j() { // How big a look-back period should we use val period = 20 @@ -85,6 +88,7 @@ internal class TaSamples { } @Test + @Ignore internal fun customPolicy() { /** @@ -136,6 +140,7 @@ internal class TaSamples { } @Test + @Ignore internal fun atrPolicy() { val strategy = EMAStrategy.PERIODS_5_15 val policy = AtrPolicy(10, 6.0, 3.0, null) { @@ -152,6 +157,7 @@ internal class TaSamples { @Suppress("CyclomaticComplexMethod") @Test + @Ignore internal fun tenkan() { /** diff --git a/roboquant/src/test/kotlin/org/roboquant/samples/RoboquantSamples.kt b/roboquant/src/test/kotlin/org/roboquant/samples/RoboquantSamples.kt index 4ebd9ea0d..2670aecdb 100644 --- a/roboquant/src/test/kotlin/org/roboquant/samples/RoboquantSamples.kt +++ b/roboquant/src/test/kotlin/org/roboquant/samples/RoboquantSamples.kt @@ -14,8 +14,6 @@ * limitations under the License. */ -@file:Suppress("KotlinConstantConditions") - package org.roboquant.samples import kotlinx.coroutines.* @@ -41,11 +39,13 @@ import org.roboquant.strategies.EMAStrategy import java.time.Instant import java.time.LocalDateTime import java.time.format.DateTimeFormatter +import kotlin.test.Ignore import kotlin.test.Test internal class RoboquantSamples { @Test + @Ignore internal fun multiCurrency() { val feed = CSVFeed("data/US") { priceParser = PriceBarParser(priceAdjust = true) @@ -75,6 +75,7 @@ internal class RoboquantSamples { } @Test + @Ignore internal fun testingStrategies() { val strategy = EMAStrategy() val roboquant = Roboquant(strategy) @@ -98,6 +99,7 @@ internal class RoboquantSamples { } @Test + @Ignore internal fun cfd() { val dtf = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss") @@ -107,7 +109,7 @@ internal class RoboquantSamples { return asset.exchange.getInstant(dt) } - val feed = CSVFeed("/tmp/DE40CASH.csv") { + val feed = CSVFeed("tmp/DE40CASH.csv") { template = Asset("TEMPLATE", AssetType.CFD, Currency.EUR, Exchange.DEX) separator = '\t' timeParser = TimeParser { a, b -> parse(a, b) } @@ -140,6 +142,7 @@ internal class RoboquantSamples { } @Test + @Ignore internal fun largeTest() { class MyLiveFeed : LiveFeed() {