Stc opti (#15)

* Optimize STC

* Optimize STC

* Add SuperTrendCrossEma
This commit is contained in:
Oda
2025-03-01 02:59:19 +07:00
committed by GitHub
parent c715da8a17
commit e16f0a2e5d
13 changed files with 485 additions and 51 deletions

View File

@@ -1,12 +1,15 @@
import { TradeChart, CardPositionItem } from '..'
import { IBotRowDetails } from '../../../global/type'
import { CardPosition } from '../../mollecules'
import { CardPosition, CardText } from '../../mollecules'
const BacktestRowDetails: React.FC<IBotRowDetails> = ({
candles,
positions,
walletBalances,
strategiesValues,
signals,
optimizedMoneyManagement,
statistics
}) => {
return (
<>
@@ -27,17 +30,42 @@ const BacktestRowDetails: React.FC<IBotRowDetails> = ({
})}
></CardPosition>
<CardPositionItem positions={positions}></CardPositionItem>
<CardText
title="Optimized Money Management"
content={
"SL: " +optimizedMoneyManagement.stopLoss.toFixed(2) + "% TP: " + optimizedMoneyManagement.takeProfit.toFixed(2) + "%"
}
></CardText>
<CardText
title="Max Drowdown"
content={
statistics.maxDrawdown?.toFixed(4).toString() +
'$'
}
></CardText>
<CardText
title="Sharpe Ratio"
content={
(statistics.sharpeRatio
? statistics.sharpeRatio * 100
: 0
)
.toFixed(4)
.toString() + '%'
}
></CardText>
</div>
<div>
<figure>
<TradeChart
width={1400}
height={1400}
height={1100}
candles={candles}
positions={positions}
walletBalances={walletBalances}
strategiesValues={strategiesValues}
signals={[]}
signals={signals}
></TradeChart>
</figure>
</div>

View File

@@ -248,12 +248,16 @@ const BacktestTable: React.FC<IBacktestCards> = ({ list, isFetching }) => {
positions={row.original.positions}
walletBalances={row.original.walletBalances}
strategiesValues={row.original.strategiesValues}
signals={row.original.signals}
optimizedMoneyManagement={row.original.optimizedMoneyManagement}
statistics={row.original.statistics}
></BacktestRowDetails>
</>
),
[]
)
return (
<div
className="flex flex-wrap"
@@ -261,13 +265,14 @@ const BacktestTable: React.FC<IBacktestCards> = ({ list, isFetching }) => {
>
{isFetching ? (
<progress className="progress progress-primary w-56"></progress>
) : (
) : (<>
<Table
columns={columns}
data={rows}
renderRowSubCompontent={renderRowSubComponent}
showPagination={true}
/>
</>
)}
</div>
)

View File

@@ -92,6 +92,8 @@ const TradeChart = ({
bottomLineColor: theme.secondary,
topLineColor: theme.primary,
lineWidth: 1,
priceLineVisible: true,
crosshairMarkerVisible: true,
} as BaselineSeriesOptions
function buildMarker(
@@ -406,6 +408,7 @@ const TradeChart = ({
stcSeries.setData(stcData)
stcSeries.applyOptions({
...baselineOptions,
priceLineVisible: true,
priceFormat: {
minMove: 1,
precision: 1,

View File

@@ -2233,6 +2233,8 @@ export enum StrategyType {
StochRsiTrend = "StochRsiTrend",
Stc = "Stc",
StDev = "StDev",
LaggingStc = "LaggingStc",
SuperTrendCrossEma = "SuperTrendCrossEma",
}
export enum SignalType {

View File

@@ -13,6 +13,7 @@ import type {
IFlow,
KeyValuePairOfDateTimeAndDecimal,
MoneyManagement,
PerformanceMetrics,
Position,
RiskLevel,
Scenario,
@@ -147,6 +148,9 @@ export type IBotRowDetails = {
positions: Position[]
walletBalances?: KeyValuePairOfDateTimeAndDecimal[] | null
strategiesValues?: { [key in keyof typeof StrategyType]?: StrategiesResultBase; } | null;
signals: Signal[]
optimizedMoneyManagement: MoneyManagement
statistics: PerformanceMetrics
}
export type IBacktestFormInput = {

View File

@@ -227,7 +227,7 @@ const StrategyList: React.FC = () => {
</>
) : null}
{strategyType == StrategyType.Stc ? (
{strategyType == StrategyType.Stc || strategyType == StrategyType.LaggingStc ? (
<>
<div className="form-control">
<div className="input-group">
@@ -278,6 +278,7 @@ const StrategyList: React.FC = () => {
) : null}
{strategyType == StrategyType.SuperTrend ||
strategyType == StrategyType.SuperTrendCrossEma ||
strategyType == StrategyType.ChandelierExit ? (
<>
<div className="form-control">