backtest

package
v0.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 26, 2026 License: MIT Imports: 5 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AnalysisResult added in v0.0.3

type AnalysisResult map[string]interface{}

AnalysisResult represents the collected results from all analyzers.

type Analyzer added in v0.0.3

type Analyzer interface {
	Name() string
	Analyze(trades []metrics.Trade, equityCurve []metrics.EquityPoint) interface{}
}

Analyzer is an interface for analyzing backtest results.

type AnalyzerRegistry added in v0.0.3

type AnalyzerRegistry struct {
	// contains filtered or unexported fields
}

AnalyzerRegistry maintains a list of available analyzers.

func NewAnalyzerRegistry added in v0.0.3

func NewAnalyzerRegistry() *AnalyzerRegistry

NewAnalyzerRegistry returns a new AnalyzerRegistry.

func (*AnalyzerRegistry) Add added in v0.0.3

func (ar *AnalyzerRegistry) Add(analyzer Analyzer)

Add adds an analyzer to the registry.

func (*AnalyzerRegistry) Run added in v0.0.3

func (ar *AnalyzerRegistry) Run(trades []metrics.Trade, equityCurve []metrics.EquityPoint) AnalysisResult

Run executes all registered analyzers and returns the combined results.

type AverageTradeDurationAnalyzer added in v0.0.3

type AverageTradeDurationAnalyzer struct{}

func (*AverageTradeDurationAnalyzer) Analyze added in v0.0.3

func (atda *AverageTradeDurationAnalyzer) Analyze(trades []metrics.Trade, equityCurve []metrics.EquityPoint) interface{}

func (*AverageTradeDurationAnalyzer) Name added in v0.0.3

func (atda *AverageTradeDurationAnalyzer) Name() string

type BacktestConfig

type BacktestConfig struct {
	InitialCapital decimal.Decimal
	PositionSize   decimal.Decimal
	RiskPerTrade   decimal.Decimal
	Commission     decimal.Decimal
	Slippage       decimal.Decimal
	AllowShort     bool
	AllowLong      bool
}

type BacktestResult

type BacktestResult struct {
	TotalTrades          int
	WinningTrades        int
	LosingTrades         int
	WinRate              decimal.Decimal
	TotalProfit          decimal.Decimal
	TotalLoss            decimal.Decimal
	NetProfit            decimal.Decimal
	GrossProfit          decimal.Decimal
	GrossLoss            decimal.Decimal
	ProfitFactor         decimal.Decimal
	AverageWin           decimal.Decimal
	AverageLoss          decimal.Decimal
	AverageTrade         decimal.Decimal
	MaxConsecutiveWins   int
	MaxConsecutiveLosses int
	MaxDrawdown          decimal.Decimal
	MaxDrawdownPercent   decimal.Decimal
	RecoveryFactor       decimal.Decimal
	RiskRewardRatio      decimal.Decimal
	CalmarRatio          decimal.Decimal
	SortinoRatio         decimal.Decimal
	SharpeRatio          decimal.Decimal
	CAGR                 decimal.Decimal
	FinalEquity          decimal.Decimal
	InitialCapital       decimal.Decimal
	Trades               []Trade
	Analysis             AnalysisResult
}

type Backtester

type Backtester struct {
	// contains filtered or unexported fields
}

func NewBacktester

func NewBacktester(s *series.TimeSeries, strategy trading.Strategy) *Backtester

func (*Backtester) AddAnalyzer added in v0.0.3

func (b *Backtester) AddAnalyzer(a Analyzer)

AddAnalyzer adds an analyzer to the backtester.

func (*Backtester) Run

func (b *Backtester) Run(config BacktestConfig) BacktestResult

type DrawdownAnalyzer added in v0.0.3

type DrawdownAnalyzer struct{}

DrawdownAnalyzer analyzes drawdown performance.

func (*DrawdownAnalyzer) Analyze added in v0.0.3

func (a *DrawdownAnalyzer) Analyze(trades []metrics.Trade, equityCurve []metrics.EquityPoint) interface{}

func (*DrawdownAnalyzer) Name added in v0.0.3

func (a *DrawdownAnalyzer) Name() string

type DrawdownStats added in v0.0.3

type DrawdownStats struct {
	MaxDrawdown    decimal.Decimal
	MaxDrawdownPct decimal.Decimal
}

DrawdownStats represents drawdown statistics.

type EquityCurveAnalyzer added in v0.0.3

type EquityCurveAnalyzer struct{}

EquityCurveAnalyzer simply returns the equity curve data points.

func (*EquityCurveAnalyzer) Analyze added in v0.0.3

func (a *EquityCurveAnalyzer) Analyze(trades []metrics.Trade, equityCurve []metrics.EquityPoint) interface{}

func (*EquityCurveAnalyzer) Name added in v0.0.3

func (a *EquityCurveAnalyzer) Name() string

type ExpectancyAnalyzer added in v0.0.3

type ExpectancyAnalyzer struct{}

func (*ExpectancyAnalyzer) Analyze added in v0.0.3

func (ea *ExpectancyAnalyzer) Analyze(trades []metrics.Trade, equityCurve []metrics.EquityPoint) interface{}

func (*ExpectancyAnalyzer) Name added in v0.0.3

func (ea *ExpectancyAnalyzer) Name() string

type ExpectancyPerTradeAnalyzer added in v0.0.3

type ExpectancyPerTradeAnalyzer struct{}

func (*ExpectancyPerTradeAnalyzer) Analyze added in v0.0.3

func (ept *ExpectancyPerTradeAnalyzer) Analyze(trades []metrics.Trade, equityCurve []metrics.EquityPoint) interface{}

func (*ExpectancyPerTradeAnalyzer) Name added in v0.0.3

func (ept *ExpectancyPerTradeAnalyzer) Name() string

type MaxConsecutiveAnalyzer added in v0.0.3

type MaxConsecutiveAnalyzer struct{}

func (*MaxConsecutiveAnalyzer) Analyze added in v0.0.3

func (mca *MaxConsecutiveAnalyzer) Analyze(trades []metrics.Trade, equityCurve []metrics.EquityPoint) interface{}

func (*MaxConsecutiveAnalyzer) Name added in v0.0.3

func (mca *MaxConsecutiveAnalyzer) Name() string

type MultiAssetBacktester added in v0.0.3

type MultiAssetBacktester struct {
	// contains filtered or unexported fields
}

MultiAssetBacktester runs backtests across multiple assets simultaneously

func NewMultiAssetBacktester added in v0.0.3

func NewMultiAssetBacktester(strategy trading.Strategy) *MultiAssetBacktester

func (*MultiAssetBacktester) AddAsset added in v0.0.3

func (m *MultiAssetBacktester) AddAsset(symbol string, s *series.TimeSeries)

func (*MultiAssetBacktester) Run added in v0.0.3

Run performs a backtest across all assets. This is a simplified version where each asset is tested independently for now. A true portfolio backtester would handle rebalancing and correlation.

type PortfolioResult added in v0.0.3

type PortfolioResult struct {
	AssetResults map[string]BacktestResult
	TotalEquity  decimal.Decimal
}

PortfolioResult combines results from multiple assets

type PortfolioSimulator added in v0.0.3

type PortfolioSimulator struct {
	InitialCapital decimal.Decimal
	Fees           decimal.Decimal
	Slippage       decimal.Decimal
}

PortfolioSimulator simulates a portfolio based on signals

func NewPortfolioSimulator added in v0.0.3

func NewPortfolioSimulator(initialCapital, fees, slippage float64) *PortfolioSimulator

NewPortfolioSimulator returns a new PortfolioSimulator

func (*PortfolioSimulator) SimulateLongOnly added in v0.0.3

func (ps *PortfolioSimulator) SimulateLongOnly(s *series.TimeSeries, signals []int) BacktestResult

SimulateLongOnly simulates a long-only portfolio based on buy/sell signals

type Position

type Position struct {
	EntryTime  int
	EntryPrice decimal.Decimal
	Direction  string
	Quantity   decimal.Decimal
	StopLoss   decimal.Decimal
	TakeProfit decimal.Decimal
}

type ProfitFactorAnalyzer added in v0.0.3

type ProfitFactorAnalyzer struct{}

func (*ProfitFactorAnalyzer) Analyze added in v0.0.3

func (pfa *ProfitFactorAnalyzer) Analyze(trades []metrics.Trade, equityCurve []metrics.EquityPoint) interface{}

func (*ProfitFactorAnalyzer) Name added in v0.0.3

func (pfa *ProfitFactorAnalyzer) Name() string

type RExpectancyAnalyzer added in v0.0.3

type RExpectancyAnalyzer struct{}

func (*RExpectancyAnalyzer) Analyze added in v0.0.3

func (rea *RExpectancyAnalyzer) Analyze(trades []metrics.Trade, equityCurve []metrics.EquityPoint) interface{}

func (*RExpectancyAnalyzer) Name added in v0.0.3

func (rea *RExpectancyAnalyzer) Name() string

type SharpeRatioAnalyzer added in v0.0.3

type SharpeRatioAnalyzer struct {
	RiskFreeRate decimal.Decimal
}

SharpeRatioAnalyzer calculates the Sharpe Ratio.

func (*SharpeRatioAnalyzer) Analyze added in v0.0.3

func (a *SharpeRatioAnalyzer) Analyze(trades []metrics.Trade, equityCurve []metrics.EquityPoint) interface{}

func (*SharpeRatioAnalyzer) Name added in v0.0.3

func (a *SharpeRatioAnalyzer) Name() string

type SystemQualityNumberAnalyzer added in v0.0.3

type SystemQualityNumberAnalyzer struct{}

func (*SystemQualityNumberAnalyzer) Analyze added in v0.0.3

func (sqna *SystemQualityNumberAnalyzer) Analyze(trades []metrics.Trade, equityCurve []metrics.EquityPoint) interface{}

func (*SystemQualityNumberAnalyzer) Name added in v0.0.3

func (sqna *SystemQualityNumberAnalyzer) Name() string

type Trade

type Trade struct {
	EntryTime     int
	EntryPrice    decimal.Decimal
	ExitTime      int
	ExitPrice     decimal.Decimal
	Direction     string
	Quantity      decimal.Decimal
	Profit        decimal.Decimal
	ProfitPercent decimal.Decimal
	Duration      int
}

type TradeStats added in v0.0.3

type TradeStats struct {
	TotalTrades    int
	WinningTrades  int
	LosingTrades   int
	WinRate        decimal.Decimal
	ProfitFactor   decimal.Decimal
	Expectancy     decimal.Decimal
	AverageWin     decimal.Decimal
	AverageLoss    decimal.Decimal
	TotalNetProfit decimal.Decimal
}

TradeStats represents basic trade statistics.

type TradeStatsAnalyzer added in v0.0.3

type TradeStatsAnalyzer struct{}

TradeStatsAnalyzer analyzes trade-level performance.

func (*TradeStatsAnalyzer) Analyze added in v0.0.3

func (a *TradeStatsAnalyzer) Analyze(trades []metrics.Trade, equityCurve []metrics.EquityPoint) interface{}

func (*TradeStatsAnalyzer) Name added in v0.0.3

func (a *TradeStatsAnalyzer) Name() string

type WinLossRatioAnalyzer added in v0.0.3

type WinLossRatioAnalyzer struct{}

func (*WinLossRatioAnalyzer) Analyze added in v0.0.3

func (wlra *WinLossRatioAnalyzer) Analyze(trades []metrics.Trade, equityCurve []metrics.EquityPoint) interface{}

func (*WinLossRatioAnalyzer) Name added in v0.0.3

func (wlra *WinLossRatioAnalyzer) Name() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL