fix: simplify logging for systemd compatibility and add ATR-based Stop Loss padding

This commit is contained in:
pie
2026-06-01 16:27:30 +01:00
parent 17ad49c22e
commit 6010f66323
2 changed files with 28 additions and 38 deletions
+10 -30
View File
@@ -1,4 +1,9 @@
import os
import sys
# Force unbuffered output for systemd/logging
os.environ['PYTHONUNBUFFERED'] = '1'
import time
import logging
import pytz
@@ -13,47 +18,22 @@ from src.strategy.touch_turn import TouchTurnStrategy
from src.execution.manager import ExecutionManager
from scripts.find_isa_candidates import find_best_isa_tickers
from scripts.backtest import backtest_ticker
import sys
# Stream redirector to capture print() statements from sub-scripts into the log file
class StreamToLogger:
def __init__(self, logger, log_level=logging.INFO):
self.logger = logger
self.log_level = log_level
self.linebuf = ''
def write(self, buf):
for line in buf.rstrip().splitlines():
self.logger.log(self.log_level, line.rstrip())
def flush(self):
pass
# Force flush handler to ensure bot logs are written to disk immediately
class FlushHandler(logging.FileHandler):
def emit(self, record):
super().emit(record)
self.flush()
# Ensure logs directory exists
os.makedirs("logs", exist_ok=True)
log_filename = datetime.now().strftime("logs/bot_%Y-%m-%d.log")
# Configure logging
file_handler = FlushHandler(log_filename, mode='a')
stream_handler = logging.StreamHandler()
# Simple, robust logging setup
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s [%(threadName)s] %(levelname)s - %(message)s',
handlers=[file_handler, stream_handler]
handlers=[
logging.FileHandler(log_filename, mode='a'),
logging.StreamHandler(sys.stdout)
]
)
logger = logging.getLogger(__name__)
# Redirect stdout and stderr
sys.stdout = StreamToLogger(logger, logging.INFO)
sys.stderr = StreamToLogger(logger, logging.ERROR)
def flush_logs():
for handler in logging.getLogger().handlers:
handler.flush()