$ErrorActionPreference = "Stop" $OutputEncoding = [System.Text.Encoding]::UTF8 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 $env:PYTHONUTF8 = "1" $env:PYTHONIOENCODING = "utf-8" $PROJECT = Split-Path -Parent $PSScriptRoot $LOG = "$PROJECT\logs\watchdog.log" . "$PROJECT\scripts\stockbot_env.ps1" $PYTHON = Resolve-StockBotPython -Project $PROJECT $utf8 = New-Object System.Text.UTF8Encoding $false Set-Location $PROJECT function Write-WatchdogLog { param([string]$Message) $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" [System.IO.File]::AppendAllText($LOG, "[$timestamp] $Message`n", $utf8) } $holidayResult = & $PYTHON scripts\_is_trading_day.py 2>&1 if ($LASTEXITCODE -ne 0) { Write-WatchdogLog "market closed - skipped ($holidayResult)" exit 0 } $now = Get-Date $start = Get-Date -Hour 9 -Minute 0 -Second 0 $end = Get-Date -Hour 15 -Minute 10 -Second 59 if ($now -lt $start -or $now -gt $end) { Write-WatchdogLog "outside watchdog window - skipped" exit 0 } Write-WatchdogLog "watchdog started" & $PYTHON scripts\_watchdog.py 2>&1 | ForEach-Object { [System.IO.File]::AppendAllText($LOG, "$_`n", $utf8) } Write-WatchdogLog "watchdog finished"