Fix spot bot

This commit is contained in:
2025-12-04 21:21:48 +07:00
parent a07d7ede18
commit b44e1f66a7
13 changed files with 117 additions and 47 deletions

View File

@@ -25,6 +25,7 @@ import {
Ticker,
Timeframe,
TradingBotConfigRequest,
TradingType,
UpdateBotConfigRequest,
} from '../../../generated/ManagingApi'
import type {IUnifiedTradingConfigInput, UnifiedTradingModalProps} from '../../../global/type'
@@ -83,6 +84,7 @@ const UnifiedTradingModal: React.FC<UnifiedTradingModalProps> = ({
flipOnlyWhenInProfit: true,
balance: 10000,
closeEarlyWhenProfitable: false,
tradingType: TradingType.BacktestSpot,
useSynthApi: false,
useForPositionSizing: true,
useForSignalFiltering: true,
@@ -217,7 +219,8 @@ const UnifiedTradingModal: React.FC<UnifiedTradingModalProps> = ({
setValue('useForPositionSizing', backtest.config.useForPositionSizing ?? true);
setValue('useForSignalFiltering', backtest.config.useForSignalFiltering ?? true);
setValue('useForDynamicStopLoss', backtest.config.useForDynamicStopLoss ?? true);
setValue('tradingType', (backtest.config as any).tradingType || TradingType.BacktestSpot);
// Use backtest's money management as custom
if (backtest.config.moneyManagement) {
setShowCustomMoneyManagement(true);
@@ -259,7 +262,8 @@ const UnifiedTradingModal: React.FC<UnifiedTradingModalProps> = ({
setValue('useForPositionSizing', backtest.config.useForPositionSizing ?? true);
setValue('useForSignalFiltering', backtest.config.useForSignalFiltering ?? true);
setValue('useForDynamicStopLoss', backtest.config.useForDynamicStopLoss ?? true);
setValue('tradingType', (backtest.config as any).tradingType || TradingType.BacktestSpot);
// Set tickers for backtest (array)
if (backtest.config.ticker) {
setValue('tickers', [backtest.config.ticker]);
@@ -318,7 +322,8 @@ const UnifiedTradingModal: React.FC<UnifiedTradingModalProps> = ({
setValue('useForPositionSizing', config.useForPositionSizing ?? true);
setValue('useForSignalFiltering', config.useForSignalFiltering ?? true);
setValue('useForDynamicStopLoss', config.useForDynamicStopLoss ?? true);
setValue('tradingType', (config as any).tradingType || TradingType.BacktestSpot);
// Handle money management - if it exists, treat as custom for update mode
if (config.moneyManagement) {
setShowCustomMoneyManagement(true);
@@ -664,6 +669,7 @@ const UnifiedTradingModal: React.FC<UnifiedTradingModalProps> = ({
useForPositionSizing: form.useForPositionSizing ?? true,
useForSignalFiltering: form.useForSignalFiltering ?? true,
useForDynamicStopLoss: form.useForDynamicStopLoss ?? true,
tradingType: form.tradingType || TradingType.BacktestSpot,
moneyManagementName: showCustomMoneyManagement ? undefined : selectedMoneyManagement,
moneyManagement: moneyManagement,
};
@@ -889,6 +895,18 @@ const UnifiedTradingModal: React.FC<UnifiedTradingModalProps> = ({
))}
</select>
</FormInput>
{(mode === 'createBot' || mode === 'updateBot') && (
<FormInput label="Trading Type" htmlFor="tradingType">
<select
className="select select-bordered w-full"
{...register('tradingType', { required: true })}
>
<option value={TradingType.BacktestSpot}>Spot</option>
<option value={TradingType.BacktestFutures}>Futures</option>
</select>
</FormInput>
)}
</div>
{/* Money Management */}

View File

@@ -5298,10 +5298,10 @@ export interface BundleBacktestUniversalConfig {
isForWatchingOnly: boolean;
botTradingBalance: number;
botName: string;
tradingType: TradingType;
flipPosition: boolean;
cooldownPeriod?: number | null;
maxLossStreak?: number;
tradingType?: TradingType;
scenario?: ScenarioRequest | null;
scenarioName?: string | null;
maxPositionTimeHours?: number | null;

View File

@@ -803,6 +803,7 @@ export interface BundleBacktestUniversalConfig {
isForWatchingOnly: boolean;
botTradingBalance: number;
botName: string;
tradingType: TradingType;
flipPosition: boolean;
cooldownPeriod?: number | null;
maxLossStreak?: number;

View File

@@ -15,7 +15,8 @@ import type {
Timeframe,
TradeDirection,
TradingBotResponse,
TradingExchanges
TradingExchanges,
TradingType
} from '../generated/ManagingApi'
import {FC, ReactNode} from 'react'
@@ -71,6 +72,7 @@ export type IBacktestsFormInput = {
maxPositionTimeHours?: number | null
flipOnlyWhenInProfit?: boolean
closeEarlyWhenProfitable?: boolean
tradingType?: TradingType
// Synth API fields
useSynthApi?: boolean
useForPositionSizing?: boolean