Files
Stock-trading-programming/scripts/run_training_pipeline.ps1
T
2026-06-15 18:52:42 +09:00

80 lines
2.7 KiB
PowerShell

$ErrorActionPreference = "Stop"
chcp 65001 | Out-Null
$OutputEncoding = [System.Text.Encoding]::UTF8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$env:PYTHONUTF8 = "1"
$env:PYTHONIOENCODING = "utf-8"
$Root = Split-Path -Parent (Split-Path -Parent $MyInvocation.MyCommand.Path)
Set-Location $Root
. "$Root\scripts\stockbot_env.ps1"
$Python = Resolve-StockBotPython -Project $Root
$LogDir = Join-Path $Root "logs"
New-Item -ItemType Directory -Force -Path $LogDir | Out-Null
$LogPath = Join-Path $LogDir "training.log"
function Write-Log {
param([string]$Message)
$Line = "[{0}] {1}" -f (Get-Date -Format "yyyy-MM-dd HH:mm:ss"), $Message
Add-Content -Path $LogPath -Value $Line -Encoding UTF8
Write-Host $Line
}
function Invoke-PythonStep {
param(
[string]$Name,
[string[]]$StepArgs,
[bool]$Required = $true
)
Write-Log $Name
$PreviousErrorActionPreference = $ErrorActionPreference
$ErrorActionPreference = "Continue"
$Output = & $Python @StepArgs 2>&1
$ErrorActionPreference = $PreviousErrorActionPreference
$Code = $LASTEXITCODE
foreach ($Line in $Output) {
Add-Content -Path $LogPath -Value $Line -Encoding UTF8
}
if ($Code -ne 0) {
$Message = "$Name failed with exit code $Code"
if ($Required) {
throw $Message
}
Write-Log "warning: $Message"
}
}
try {
Write-Log "training pipeline started"
Write-Log "python resolved: $Python"
$HolidayCheck = & $Python scripts\_is_trading_day.py 2>&1
if ($LASTEXITCODE -ne 0) {
Write-Log "market closed - skipped ($HolidayCheck)"
exit 0
}
Write-Log "trading day check passed ($HolidayCheck)"
Invoke-PythonStep -Name "collecting daily market features" -StepArgs @("scripts\collect_daily_features.py") -Required $false
Invoke-PythonStep -Name "collecting KIS minute data" -StepArgs @("scripts\collect_minute_data.py", "--top", "30", "--real-quotes") -Required $false
Invoke-PythonStep -Name "exporting bot training dataset" -StepArgs @("scripts\export_training_dataset.py", "data\training_dataset.csv") -Required $true
Invoke-PythonStep -Name "building external training dataset" -StepArgs @("scripts\build_external_training_dataset.py", "--out", "data\external_training_dataset.csv", "--all-minutes") -Required $true
Invoke-PythonStep -Name "training model" -StepArgs @("scripts\train_ai_model.py") -Required $true
Write-Log "training pipeline finished"
}
catch {
Write-Log "training pipeline failed: $($_.Exception.Message)"
if ($_.ScriptStackTrace) {
Add-Content -Path $LogPath -Value $_.ScriptStackTrace -Encoding UTF8
}
throw
}