feat: use token from strategy config in simulation page
Like the backtest page, simulation now extracts the token from the bot's strategy config instead of requiring user input. Shows token name and truncated address.
This commit is contained in:
@@ -7,7 +7,8 @@
|
|||||||
import { SignalChart, ProUpgradeBanner } from '$lib/components';
|
import { SignalChart, ProUpgradeBanner } from '$lib/components';
|
||||||
|
|
||||||
let botId = $derived($page.params.id);
|
let botId = $derived($page.params.id);
|
||||||
let token = $state('PEPE');
|
let tokenName = $state('');
|
||||||
|
let tokenAddress = $state('');
|
||||||
let intervalSeconds = $state(60);
|
let intervalSeconds = $state(60);
|
||||||
let autoExecute = $state(false);
|
let autoExecute = $state(false);
|
||||||
let isRunning = $state(false);
|
let isRunning = $state(false);
|
||||||
@@ -27,6 +28,15 @@
|
|||||||
try {
|
try {
|
||||||
const bot = await api.bots.get(botId);
|
const bot = await api.bots.get(botId);
|
||||||
setCurrentBot(bot);
|
setCurrentBot(bot);
|
||||||
|
|
||||||
|
// Extract token info from strategy config
|
||||||
|
const strategy = bot.strategy_config;
|
||||||
|
if (strategy) {
|
||||||
|
const condition = strategy.conditions?.[0];
|
||||||
|
const action = strategy.actions?.[0];
|
||||||
|
tokenName = condition?.token || action?.token || '';
|
||||||
|
tokenAddress = condition?.token_address || action?.token_address || '';
|
||||||
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
goto('/dashboard');
|
goto('/dashboard');
|
||||||
}
|
}
|
||||||
@@ -57,7 +67,7 @@
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const simulation = await api.simulate.start(botId, {
|
const simulation = await api.simulate.start(botId, {
|
||||||
token,
|
token: tokenAddress,
|
||||||
interval_seconds: intervalSeconds,
|
interval_seconds: intervalSeconds,
|
||||||
auto_execute: autoExecute
|
auto_execute: autoExecute
|
||||||
});
|
});
|
||||||
@@ -111,9 +121,14 @@
|
|||||||
|
|
||||||
<form onsubmit={(e) => { e.preventDefault(); startSimulation(); }}>
|
<form onsubmit={(e) => { e.preventDefault(); startSimulation(); }}>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<div class="field">
|
<div class="field token-info">
|
||||||
<label for="token">Token</label>
|
<label>Token</label>
|
||||||
<input type="text" id="token" bind:value={token} required disabled={isRunning} />
|
<div class="token-display">
|
||||||
|
<span class="token-name">{tokenName || 'Not configured'}</span>
|
||||||
|
{#if tokenAddress}
|
||||||
|
<span class="token-address">{tokenAddress.slice(0, 10)}...{tokenAddress.slice(-8)}</span>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label for="interval">Check Interval (seconds)</label>
|
<label for="interval">Check Interval (seconds)</label>
|
||||||
@@ -276,6 +291,27 @@
|
|||||||
gap: 0.5rem;
|
gap: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.token-display {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.25rem;
|
||||||
|
padding: 0.75rem;
|
||||||
|
background: rgba(255, 255, 255, 0.05);
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token-name {
|
||||||
|
font-weight: 600;
|
||||||
|
color: #667eea;
|
||||||
|
}
|
||||||
|
|
||||||
|
.token-address {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
color: #888;
|
||||||
|
font-family: 'Monaco', 'Menlo', monospace;
|
||||||
|
}
|
||||||
|
|
||||||
.checkbox-field {
|
.checkbox-field {
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|||||||
Reference in New Issue
Block a user