Add benchmark for backtest on the test
This commit is contained in:
112
scripts/benchmark-backtest-performance.sh
Executable file
112
scripts/benchmark-backtest-performance.sh
Executable file
@@ -0,0 +1,112 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Benchmark Backtest Performance Script
|
||||
# This script runs backtest performance tests and records results in CSV
|
||||
|
||||
set -e # Exit on any error
|
||||
|
||||
echo "🚀 Running backtest performance benchmark..."
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Function to extract value from test output using regex
|
||||
extract_value() {
|
||||
local pattern="$1"
|
||||
local text="$2"
|
||||
echo "$text" | grep -o "$pattern" | head -1 | sed 's/.*: //' | sed 's/[^0-9.]*$//' | tr -d ','
|
||||
}
|
||||
|
||||
# Get current timestamp
|
||||
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
# Get git information
|
||||
COMMIT_HASH=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
||||
BRANCH_NAME=$(git branch --show-current 2>/dev/null || echo "unknown")
|
||||
ENVIRONMENT="development"
|
||||
|
||||
# Run the performance test and capture output
|
||||
echo "📊 Running performance test..."
|
||||
TEST_OUTPUT=$(dotnet test src/Managing.Workers.Tests/Managing.Workers.Tests.csproj \
|
||||
--filter "ExecuteBacktest_With_Large_Dataset_Should_Show_Performance_Telemetry" \
|
||||
--verbosity minimal \
|
||||
--logger "console;verbosity=detailed" 2>&1)
|
||||
|
||||
# Check if test passed
|
||||
if echo "$TEST_OUTPUT" | grep -q "Passed.*1"; then
|
||||
echo -e "${GREEN}✅ Test passed!${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ Test failed!${NC}"
|
||||
echo "$TEST_OUTPUT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Extract performance metrics from the output
|
||||
CANDLES_COUNT=$(echo "$TEST_OUTPUT" | grep "📈 Total Candles Processed:" | sed 's/.*: //' | sed 's/ / /' | tr -d ',' | xargs)
|
||||
EXECUTION_TIME=$(echo "$TEST_OUTPUT" | grep "⏱️ Total Execution Time:" | sed 's/.*: //' | sed 's/s//' | sed 's/,/./g' | xargs)
|
||||
PROCESSING_RATE=$(echo "$TEST_OUTPUT" | grep "🚀 Processing Rate:" | sed 's/.*: //' | sed 's/ candles\/sec//' | sed 's/,/./g' | xargs)
|
||||
|
||||
# Extract memory metrics
|
||||
MEMORY_LINE=$(echo "$TEST_OUTPUT" | grep "💾 Memory Usage:")
|
||||
MEMORY_START=$(echo "$MEMORY_LINE" | sed 's/.*Start=//' | sed 's/MB.*//' | xargs)
|
||||
MEMORY_END=$(echo "$MEMORY_LINE" | sed 's/.*End=//' | sed 's/MB.*//' | xargs)
|
||||
MEMORY_PEAK=$(echo "$MEMORY_LINE" | sed 's/.*Peak=//' | sed 's/MB.*//' | xargs)
|
||||
|
||||
# Extract signal update metrics
|
||||
SIGNAL_LINE=$(echo "$TEST_OUTPUT" | grep "• Signal Updates:")
|
||||
SIGNAL_UPDATES=$(echo "$SIGNAL_LINE" | sed 's/.*Signal Updates: //' | sed 's/ms.*//' | xargs)
|
||||
SIGNAL_SKIPPED=$(echo "$SIGNAL_LINE" | grep -o "[0-9,]* skipped" | sed 's/ skipped//' | tr -d ',' | xargs)
|
||||
SIGNAL_EFFICIENCY=$(echo "$SIGNAL_LINE" | grep -o "[0-9.]*% efficiency" | sed 's/% efficiency//' | xargs)
|
||||
|
||||
# Extract backtest steps
|
||||
BACKTEST_LINE=$(echo "$TEST_OUTPUT" | grep "• Backtest Steps:")
|
||||
BACKTEST_STEPS=$(echo "$BACKTEST_LINE" | sed 's/.*Backtest Steps: //' | sed 's/ms.*//' | xargs)
|
||||
|
||||
# Extract timing metrics
|
||||
AVG_SIGNAL_UPDATE=$(echo "$TEST_OUTPUT" | grep "• Average Signal Update:" | sed 's/.*Average Signal Update: //' | sed 's/ms.*//' | xargs)
|
||||
AVG_BACKTEST_STEP=$(echo "$TEST_OUTPUT" | grep "• Average Backtest Step:" | sed 's/.*Average Backtest Step: //' | sed 's/ms.*//' | xargs)
|
||||
|
||||
# Extract trading results
|
||||
FINAL_PNL=$(echo "$TEST_OUTPUT" | grep "• Final PnL:" | sed 's/.*Final PnL: //' | xargs)
|
||||
WIN_RATE=$(echo "$TEST_OUTPUT" | grep "• Win Rate:" | sed 's/.*Win Rate: //' | sed 's/%//' | xargs)
|
||||
GROWTH_PERCENTAGE=$(echo "$TEST_OUTPUT" | grep "• Growth:" | sed 's/.*Growth: //' | sed 's/%//' | xargs)
|
||||
SCORE=$(echo "$TEST_OUTPUT" | grep "• Score:" | sed 's/.*Score: //' | xargs)
|
||||
|
||||
# Set defaults for missing values
|
||||
CANDLES_COUNT=${CANDLES_COUNT:-0}
|
||||
EXECUTION_TIME=${EXECUTION_TIME:-0}
|
||||
PROCESSING_RATE=${PROCESSING_RATE:-0}
|
||||
MEMORY_START=${MEMORY_START:-0}
|
||||
MEMORY_END=${MEMORY_END:-0}
|
||||
MEMORY_PEAK=${MEMORY_PEAK:-0}
|
||||
SIGNAL_UPDATES=${SIGNAL_UPDATES:-0}
|
||||
SIGNAL_SKIPPED=${SIGNAL_SKIPPED:-0}
|
||||
SIGNAL_EFFICIENCY=${SIGNAL_EFFICIENCY:-0}
|
||||
BACKTEST_STEPS=${BACKTEST_STEPS:-0}
|
||||
AVG_SIGNAL_UPDATE=${AVG_SIGNAL_UPDATE:-0}
|
||||
AVG_BACKTEST_STEP=${AVG_BACKTEST_STEP:-0}
|
||||
FINAL_PNL=${FINAL_PNL:-0}
|
||||
WIN_RATE=${WIN_RATE:-0}
|
||||
GROWTH_PERCENTAGE=${GROWTH_PERCENTAGE:-0}
|
||||
SCORE=${SCORE:-0}
|
||||
|
||||
# Create CSV row
|
||||
CSV_ROW="$TIMESTAMP,ExecuteBacktest_With_Large_Dataset_Should_Show_Performance_Telemetry,$CANDLES_COUNT,$EXECUTION_TIME,$PROCESSING_RATE,$MEMORY_START,$MEMORY_END,$MEMORY_PEAK,$SIGNAL_UPDATES,$SIGNAL_SKIPPED,$SIGNAL_EFFICIENCY,$BACKTEST_STEPS,$AVG_SIGNAL_UPDATE,$AVG_BACKTEST_STEP,$FINAL_PNL,$WIN_RATE,$GROWTH_PERCENTAGE,$SCORE,$COMMIT_HASH,$BRANCH_NAME,$ENVIRONMENT"
|
||||
|
||||
# Append to CSV file
|
||||
echo "$CSV_ROW" >> "src/Managing.Workers.Tests/performance-benchmarks.csv"
|
||||
|
||||
# Display results
|
||||
echo -e "${BLUE}📊 Benchmark Results:${NC}"
|
||||
echo " • Processing Rate: $PROCESSING_RATE candles/sec"
|
||||
echo " • Execution Time: $EXECUTION_TIME seconds"
|
||||
echo " • Memory Peak: $MEMORY_PEAK MB"
|
||||
echo " • Signal Efficiency: $SIGNAL_EFFICIENCY%"
|
||||
echo " • Candles Processed: $CANDLES_COUNT"
|
||||
echo " • Score: $SCORE"
|
||||
|
||||
echo -e "${GREEN}✅ Benchmark data recorded successfully!${NC}"
|
||||
Reference in New Issue
Block a user