diff --git a/.env b/.env index f4689022..212ebbcd 100644 --- a/.env +++ b/.env @@ -31,7 +31,7 @@ TS_PUBLIC_TYPESENSE_API_URL=https://typesense2.tradingstrategy.ai TS_PUBLIC_TYPESENSE_API_KEY=npdPPJNELDhdr7v6IS9rQUpFG2VvdyAL TS_PUBLIC_DISCORD_URL=https://discord.gg/5M88m9nM8H TS_PUBLIC_WALLET_CONNECT_PROJECT_ID=9ee7efad98897eb60ba023db6aa72355 -TS_PUBLIC_STRATEGIES='[{"id":"enzyme-polygon-matic-eth-usdc","name":"ETH-MATIC-USDC momentum","url":"https://enzyme-polygon-matic-eth-usdc.tradingstrategy.ai","frontpage":true},{"id":"enzyme-arbitrum-eth-btc-rsi","name":"ETH-BTC price surge (Arbitrum)","url":"https://enzyme-arbitrum-eth-btc-rsi.tradingstrategy.ai/","frontpage":true},{"id":"enzyme-polygon-eth-rolling-ratio","name":"ETH/BTC rolling ratio","url":"https://enzyme-polygon-eth-rolling-ratio.tradingstrategy.ai/","frontpage":true},{"id":"enzyme-polygon-eth-btc-rsi","name":"ETH-BTC price surge","url":"https://enzyme-polygon-eth-btc-rsi.tradingstrategy.ai/","frontpage":true,"hiddenPositions":[4]},{"id":"enzyme-ethereum-btc-eth-stoch-rsi","name":"Stochastic ETH/BTC long","url":"https://enzyme-ethereum-btc-eth-stoch-rsi.tradingstrategy.ai","frontpage":true},{"id":"enzyme-polygon-eth-btc-usdc","name":"ETH-BTC-USDC momentum","url":"https://enzyme-polygon-eth-btc-usdc.tradingstrategy.ai","new_version_id":"enzyme-polygon-eth-btc-rsi","frontpage":true},{"id":"enzyme-polygon-matic-usdc","name":"MATIC breakout","url":"https://enzyme-polygon-matic-usdc.tradingstrategy.ai"},{"id":"enzyme-polygon-eth-breakout","name":"ETH breakout","url":"https://enzyme-polygon-eth-breakout.tradingstrategy.ai"},{"id":"enzyme-polygon-eth-usdc","name":"ETH Breakout bounce","url":"https://enzyme-polygon-eth-usdc.tradingstrategy.ai"},{"id":"enzyme-polygon-eth-usdc-sls","name":"ETH Balance snap","url":"https://enzyme-polygon-eth-usdc-sls.tradingstrategy.ai"},{"id":"polygon-eth-spot-short","name":"ETH mean reversion bounce","url":"https://polygon-eth-spot-short.tradingstrategy.ai"},{"id":"arbitrum-btc-breakout","name":"BTC Barrier Breach","url":"https://arbitrum-btc-breakout.tradingstrategy.ai"}]' +TS_PUBLIC_STRATEGIES='[{"id":"enzyme-polygon-matic-eth-usdc","name":"ETH-MATIC-USDC momentum","url":"https://enzyme-polygon-matic-eth-usdc.tradingstrategy.ai","frontpage":true},{"id":"enzyme-arbitrum-eth-btc-rsi","name":"ETH-BTC long swing","url":"https://enzyme-arbitrum-eth-btc-rsi.tradingstrategy.ai/","frontpage":true},{"id":"enzyme-polygon-eth-rolling-ratio","name":"ETH/BTC rolling ratio","url":"https://enzyme-polygon-eth-rolling-ratio.tradingstrategy.ai/","frontpage":true},{"id":"enzyme-ethereum-btc-eth-stoch-rsi","name":"Stochastic ETH-BTC","url":"https://enzyme-ethereum-btc-eth-stoch-rsi.tradingstrategy.ai","frontpage":true},{"id":"enzyme-polygon-matic-usdc","name":"MATIC Level crush","url":"https://enzyme-polygon-matic-usdc.tradingstrategy.ai"},{"id":"enzyme-polygon-eth-breakout","name":"ETH breakout","url":"https://enzyme-polygon-eth-breakout.tradingstrategy.ai"},{"id":"enzyme-polygon-eth-usdc","name":"ETH Breakout bounce","url":"https://enzyme-polygon-eth-usdc.tradingstrategy.ai"},{"id":"enzyme-polygon-eth-usdc-sls","name":"ETH Balance snap","url":"https://enzyme-polygon-eth-usdc-sls.tradingstrategy.ai"},{"id":"polygon-eth-spot-short","name":"ETH Mean Flip","url":"https://polygon-eth-spot-short.tradingstrategy.ai"},{"id":"arbitrum-btc-breakout","name":"BTC Barrier Breach","url":"https://arbitrum-btc-breakout.tradingstrategy.ai"},{"id":"ethereum-memecoin-swing","name":"ETH Memecoin Social Trend Spotter","url":"https://ethereum-memecoin-swing.tradingstrategy.ai"},{"id":"ethereum-memecoin-vol-basket","name":"Memecoin volatility index","url":"https://ethereum-memecoin-vol-basket.tradingstrategy.ai"},{"id":"enzyme-polygon-eth-btc-rsi","name":"ETH-BTC price surge","url":"https://enzyme-polygon-eth-btc-rsi.tradingstrategy.ai/","newVersionId":"enzyme-arbitrum-eth-btc-rsi","hiddenPositions":[4],"frontpage":true},{"id":"enzyme-polygon-eth-btc-usdc","name":"ETH-BTC-USDC momentum","url":"https://enzyme-polygon-eth-btc-usdc.tradingstrategy.ai","newVersionId":"enzyme-polygon-eth-btc-rsi","frontpage":true}]' TS_PUBLIC_GEO_BLOCK='{"strategies:view":["CU","IR","KP","RU","SY"],"strategies:deposit":["CU","IR","KP","RU","SY","US","UK"]}' # Uncomment to test chain maintenance error # TS_PUBLIC_CHAINS_UNDER_MAINTENANCE='{ "binance": "BNB Chain" }' diff --git a/src/lib/chart/PerformanceChart.svelte b/src/lib/chart/PerformanceChart.svelte index 594a7423..861ac191 100644 --- a/src/lib/chart/PerformanceChart.svelte +++ b/src/lib/chart/PerformanceChart.svelte @@ -15,51 +15,57 @@ Display a peformance line chart for a given (static) dataset. ``` -->
diff --git a/src/lib/trade-executor/schemas/configuration.ts b/src/lib/trade-executor/schemas/configuration.ts index cb8111f5..aa587ecb 100644 --- a/src/lib/trade-executor/schemas/configuration.ts +++ b/src/lib/trade-executor/schemas/configuration.ts @@ -6,7 +6,7 @@ export const strategyConfigurationSchema = z.object({ id: z.string(), name: z.string(), url: z.string().url(), - new_version_id: z.string().optional(), + newVersionId: z.string().optional(), hiddenPositions: primaryKey.array().default([]), frontpage: z.boolean().default(false), microsite: z.boolean().default(false), diff --git a/src/lib/wallet/MyDeposits.svelte b/src/lib/wallet/MyDeposits.svelte index ed212734..f84f155e 100644 --- a/src/lib/wallet/MyDeposits.svelte +++ b/src/lib/wallet/MyDeposits.svelte @@ -39,7 +39,7 @@ contracts.fund_value_calculator ].every(Boolean); - const isOutdated = Boolean(strategy.new_version_id); + const isOutdated = Boolean(strategy.newVersionId); $: connected = $wallet.isConnected; $: wrongNetwork = connected && $wallet.chain?.id !== chain.id; diff --git a/src/routes/strategies/StrategyTile.svelte b/src/routes/strategies/StrategyTile.svelte index e69a9f95..edb4ac79 100644 --- a/src/routes/strategies/StrategyTile.svelte +++ b/src/routes/strategies/StrategyTile.svelte @@ -78,7 +78,7 @@ live {/if} - {#if isNew && !strategy.new_version_id} + {#if isNew && !strategy.newVersionId} new {/if} @@ -88,12 +88,12 @@ {/each} {/if} - {#if !simplified && strategy.new_version_id} + {#if !simplified && strategy.newVersionId} Outdated This is an outdated strategy. An updated version is available - here. + here. {/if} diff --git a/src/routes/strategies/[strategy]/+layout.svelte b/src/routes/strategies/[strategy]/+layout.svelte index eeaf6984..b03bd9ab 100644 --- a/src/routes/strategies/[strategy]/+layout.svelte +++ b/src/routes/strategies/[strategy]/+layout.svelte @@ -20,7 +20,7 @@ $: isPrivate = !strategy.tags.includes('live'); $: isOverviewPage = $page.url.pathname.endsWith(strategy.id); $: hasError = shouldDisplayError(strategy, admin); - $: isOutdated = Boolean(strategy.new_version_id); + $: isOutdated = Boolean(strategy.newVersionId); $: displayWarning = isOverviewPage && (hasError || isOutdated); $: breadcrumbs = { @@ -73,9 +73,9 @@ You are viewing an outdated version of this strategy. An updated version is available - here. To maximize future - returns, participants should consider tranfering deposits to the latest version (though there is no - guarantee of better performance). + here. To maximize future returns, + participants should consider tranfering deposits to the latest version (though there is no guarantee of + better performance). diff --git a/src/routes/strategies/[strategy]/+page.svelte b/src/routes/strategies/[strategy]/+page.svelte index ad4b3f82..128ddc1d 100644 --- a/src/routes/strategies/[strategy]/+page.svelte +++ b/src/routes/strategies/[strategy]/+page.svelte @@ -1,24 +1,8 @@ @@ -168,41 +19,7 @@
- -
- -
- {#if periodPerformance[strategy.id] !== undefined} - - {performanceLabel} - {/if} -
- - (periodPerformance[strategy.id] = getPeriodPerformance(e.detail, spanDays))} - /> - -
- {#each benchmarkTokens as { symbol, color }} - - {/each} -
-
-
- +
@@ -227,72 +44,5 @@ grid-column: 1 / -1; } } - - .chart { - :global([data-css-props]) { - --chart-aspect-ratio: 3.25; - - @media (--viewport-sm-down) { - --chart-aspect-ratio: 2.25; - } - - @media (--viewport-xs) { - --chart-aspect-ratio: 1.75; - } - } - - :global(.stx_xaxis) { - color: transparent; - } - - :global(.stx_xaxis_dark) { - color: var(--c-text-extra-light); - } - } - - .period-performance { - :global([data-css-props]) { - --up-down-font: var(--f-ui-lg-medium); - --up-down-letter-spacing: var(--ls-ui-lg); - - @media (--viewport-md-down) { - --up-down-font: var(--f-ui-md-medium); - --up-down-letter-spacing: var(--ls-ui-md); - } - } - - display: flex; - gap: 1em; - align-items: center; - font: var(--f-ui-sm-medium); - letter-spacing: var(--ls-ui-sm); - color: var(--c-text-extra-light); - } - - .benchmark-tokens { - margin-top: 0.75rem; - margin-bottom: -0.25rem; - display: flex; - gap: 1rem; - justify-content: center; - - label { - display: flex; - gap: 0.25rem; - align-items: center; - font: var(--f-ui-sm-medium); - letter-spacing: var(--ls-ui-sm); - } - - input[type='checkbox'] { - color: inherit; - accent-color: currentColor; - } - - .performance { - font: var(--f-ui-sm-roman); - min-width: 4ch; - } - } } diff --git a/src/routes/strategies/[strategy]/StrategyPerformanceChart.svelte b/src/routes/strategies/[strategy]/StrategyPerformanceChart.svelte new file mode 100644 index 00000000..d587e109 --- /dev/null +++ b/src/routes/strategies/[strategy]/StrategyPerformanceChart.svelte @@ -0,0 +1,242 @@ + + +
+ +
+ {#if periodPerformance[strategy.id] !== undefined} + + {performanceLabel} + {/if} +
+ + (periodPerformance[strategy.id] = value)} + /> + +
+ {#each benchmarkTokens as { symbol, color }} + + {/each} +
+
+
+ +