Remove playground because not working anymore and make backtest properties required
This commit is contained in:
@@ -1,20 +1,22 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using Managing.Domain.Bots;
|
||||
|
||||
namespace Managing.Api.Models.Requests;
|
||||
|
||||
public class LightBacktestResponse
|
||||
{
|
||||
public string Id { get; set; } = string.Empty;
|
||||
public TradingBotConfig Config { get; set; } = new();
|
||||
public decimal FinalPnl { get; set; }
|
||||
public int WinRate { get; set; }
|
||||
public decimal GrowthPercentage { get; set; }
|
||||
public decimal HodlPercentage { get; set; }
|
||||
public DateTime StartDate { get; set; }
|
||||
public DateTime EndDate { get; set; }
|
||||
public decimal? MaxDrawdown { get; set; }
|
||||
public decimal Fees { get; set; }
|
||||
public double? SharpeRatio { get; set; }
|
||||
public double Score { get; set; }
|
||||
public string ScoreMessage { get; set; } = string.Empty;
|
||||
[Required] public string Id { get; set; } = string.Empty;
|
||||
[Required] public TradingBotConfig Config { get; set; } = new();
|
||||
[Required] public decimal FinalPnl { get; set; }
|
||||
[Required] public int WinRate { get; set; }
|
||||
[Required] public decimal GrowthPercentage { get; set; }
|
||||
[Required] public decimal HodlPercentage { get; set; }
|
||||
[Required] public DateTime StartDate { get; set; }
|
||||
[Required] public DateTime EndDate { get; set; }
|
||||
[Required] public decimal? MaxDrawdown { get; set; }
|
||||
[Required] public decimal Fees { get; set; }
|
||||
|
||||
[Required] public double? SharpeRatio { get; set; }
|
||||
[Required] public double Score { get; set; }
|
||||
[Required] public string ScoreMessage { get; set; } = string.Empty;
|
||||
}
|
||||
@@ -7,7 +7,6 @@ import useBacktestStore from '../../../app/store/backtestStore'
|
||||
import type {
|
||||
Backtest,
|
||||
MoneyManagement,
|
||||
RunBacktestRequest,
|
||||
StartBotRequest,
|
||||
TradingBotConfig,
|
||||
TradingBotConfigRequest
|
||||
@@ -151,39 +150,6 @@ const BacktestCards: React.FC<BacktestCardsProps> = ({list}) => {
|
||||
setShowBotNameModal(false)
|
||||
}
|
||||
|
||||
async function runOptimizedBacktest(backtest: Backtest) {
|
||||
const t = new Toast('Optimized backtest is running')
|
||||
const client = new BacktestClient({}, apiUrl)
|
||||
|
||||
// Calculate dates for the API call
|
||||
const startDate = backtest.candles[0].date
|
||||
const endDate = backtest.candles[backtest.candles.length - 1].date
|
||||
|
||||
// Create optimized backtest config
|
||||
const optimizedConfig: TradingBotConfig = {
|
||||
...backtest.config,
|
||||
name: `${backtest.config.ticker}-${backtest.config.scenarioName}-Optimized`,
|
||||
moneyManagement: backtest.optimizedMoneyManagement || backtest.config.moneyManagement
|
||||
}
|
||||
|
||||
const request: RunBacktestRequest = {
|
||||
config: optimizedConfig as unknown as TradingBotConfigRequest,
|
||||
startDate: startDate,
|
||||
endDate: endDate,
|
||||
save: false,
|
||||
}
|
||||
|
||||
await client
|
||||
.backtest_Run(request)
|
||||
.then((backtest: Backtest) => {
|
||||
t.update('success', `${backtest.config.ticker} Backtest Succeeded`)
|
||||
addBacktest(backtest)
|
||||
})
|
||||
.catch((err) => {
|
||||
t.update('error', 'Error :' + err)
|
||||
})
|
||||
}
|
||||
|
||||
async function deleteBacktest(id: string) {
|
||||
const t = new Toast('Deleting backtest')
|
||||
const client = new BacktestClient({}, apiUrl)
|
||||
@@ -217,7 +183,7 @@ const BacktestCards: React.FC<BacktestCardsProps> = ({list}) => {
|
||||
<div className="tooltip" data-tip="Delete backtest">
|
||||
<button
|
||||
className="btn btn-primary h-5 min-h-0 px-2 mr-5 rounded-full"
|
||||
onClick={() => deleteBacktest(backtest.id)}
|
||||
onClick={() => deleteBacktest(backtest.id ?? '')}
|
||||
>
|
||||
<TrashIcon width={15}></TrashIcon>
|
||||
</button>
|
||||
@@ -279,14 +245,6 @@ const BacktestCards: React.FC<BacktestCardsProps> = ({list}) => {
|
||||
Save money management
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button
|
||||
className="text-xs"
|
||||
onClick={() => runOptimizedBacktest(backtest)}
|
||||
>
|
||||
Run optimized money management
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
{backtest.config.ticker}
|
||||
|
||||
@@ -11,6 +11,7 @@ import {
|
||||
BacktestClient,
|
||||
BotClient,
|
||||
DataClient,
|
||||
LightBacktestResponse,
|
||||
MoneyManagement,
|
||||
MoneyManagementClient,
|
||||
RiskManagement,
|
||||
@@ -713,7 +714,7 @@ const UnifiedTradingModal: React.FC<UnifiedTradingModalProps> = ({
|
||||
const backtest = await backtestClient.backtest_Run(request);
|
||||
|
||||
t.update('success', `${ticker} Backtest Succeeded`);
|
||||
addBacktest(backtest);
|
||||
addBacktest(backtest as unknown as LightBacktestResponse);
|
||||
|
||||
|
||||
} catch (err: any) {
|
||||
|
||||
@@ -3805,19 +3805,19 @@ export interface PaginatedBacktestsResponse {
|
||||
}
|
||||
|
||||
export interface LightBacktestResponse {
|
||||
id?: string | null;
|
||||
config?: TradingBotConfig | null;
|
||||
finalPnl?: number;
|
||||
winRate?: number;
|
||||
growthPercentage?: number;
|
||||
hodlPercentage?: number;
|
||||
startDate?: Date;
|
||||
endDate?: Date;
|
||||
maxDrawdown?: number | null;
|
||||
fees?: number;
|
||||
sharpeRatio?: number | null;
|
||||
score?: number;
|
||||
scoreMessage?: string | null;
|
||||
id: string;
|
||||
config: TradingBotConfig;
|
||||
finalPnl: number;
|
||||
winRate: number;
|
||||
growthPercentage: number;
|
||||
hodlPercentage: number;
|
||||
startDate: Date;
|
||||
endDate: Date;
|
||||
maxDrawdown: number;
|
||||
fees: number;
|
||||
sharpeRatio: number;
|
||||
score: number;
|
||||
scoreMessage: string;
|
||||
}
|
||||
|
||||
export interface RunBacktestRequest {
|
||||
|
||||
@@ -611,19 +611,19 @@ export interface PaginatedBacktestsResponse {
|
||||
}
|
||||
|
||||
export interface LightBacktestResponse {
|
||||
id?: string | null;
|
||||
config?: TradingBotConfig | null;
|
||||
finalPnl?: number;
|
||||
winRate?: number;
|
||||
growthPercentage?: number;
|
||||
hodlPercentage?: number;
|
||||
startDate?: Date;
|
||||
endDate?: Date;
|
||||
maxDrawdown?: number | null;
|
||||
fees?: number;
|
||||
sharpeRatio?: number | null;
|
||||
score?: number;
|
||||
scoreMessage?: string | null;
|
||||
id: string;
|
||||
config: TradingBotConfig;
|
||||
finalPnl: number;
|
||||
winRate: number;
|
||||
growthPercentage: number;
|
||||
hodlPercentage: number;
|
||||
startDate: Date;
|
||||
endDate: Date;
|
||||
maxDrawdown: number;
|
||||
fees: number;
|
||||
sharpeRatio: number;
|
||||
score: number;
|
||||
scoreMessage: string;
|
||||
}
|
||||
|
||||
export interface RunBacktestRequest {
|
||||
|
||||
@@ -2,7 +2,6 @@ import React, {useState} from 'react'
|
||||
|
||||
import 'react-toastify/dist/ReactToastify.css'
|
||||
import {Tabs} from '../../components/mollecules'
|
||||
import BacktestPlayground from './backtestPlayground'
|
||||
import BacktestScanner from './backtestScanner'
|
||||
import BacktestUpload from './backtestUpload'
|
||||
import BacktestGenetic from './backtestGenetic'
|
||||
@@ -11,29 +10,24 @@ import type {TabsType} from '../../global/type.tsx'
|
||||
|
||||
// Tabs Array
|
||||
const tabs: TabsType = [
|
||||
{
|
||||
Component: BacktestPlayground,
|
||||
index: 1,
|
||||
label: 'Playground',
|
||||
},
|
||||
{
|
||||
Component: BacktestScanner,
|
||||
index: 2,
|
||||
index: 1,
|
||||
label: 'Scanner',
|
||||
},
|
||||
{
|
||||
Component: BacktestUpload,
|
||||
index: 3,
|
||||
index: 2,
|
||||
label: 'Upload',
|
||||
},
|
||||
{
|
||||
Component: BacktestGenetic,
|
||||
index: 4,
|
||||
index: 3,
|
||||
label: 'Genetic',
|
||||
},
|
||||
{
|
||||
Component: BacktestGeneticBundle,
|
||||
index: 5,
|
||||
index: 4,
|
||||
label: 'GeneticBundle',
|
||||
},
|
||||
]
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
import React, {useState} from 'react'
|
||||
import 'react-toastify/dist/ReactToastify.css'
|
||||
|
||||
import useBacktestStore from '../../app/store/backtestStore'
|
||||
import {BacktestCards, UnifiedTradingModal} from '../../components/organism'
|
||||
|
||||
const BacktestPlayground: React.FC = () => {
|
||||
const { backtests: backtestingResult } = useBacktestStore()
|
||||
const [showModal, setShowModal] = useState(false)
|
||||
|
||||
function openModal() {
|
||||
setShowModal(true)
|
||||
}
|
||||
|
||||
function closeModal() {
|
||||
setShowModal(false)
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="container mx-auto">
|
||||
<button className="btn" onClick={openModal}>
|
||||
Run New Backtest
|
||||
</button>
|
||||
<BacktestCards list={backtestingResult} />
|
||||
<UnifiedTradingModal
|
||||
mode="backtest"
|
||||
showModal={showModal}
|
||||
closeModal={closeModal}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default BacktestPlayground
|
||||
Reference in New Issue
Block a user