summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/backtest_moc.py54
-rwxr-xr-xscripts/stock_screener.py4
2 files changed, 29 insertions, 29 deletions
diff --git a/scripts/backtest_moc.py b/scripts/backtest_moc.py
index 92b426b..9307668 100755
--- a/scripts/backtest_moc.py
+++ b/scripts/backtest_moc.py
@@ -4,11 +4,11 @@
Usage: python scripts/backtest_moc.py
"""
-import sys
import random
-from pathlib import Path
+import sys
+from datetime import UTC, datetime, timedelta
from decimal import Decimal
-from datetime import datetime, timedelta, timezone
+from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT / "services" / "strategy-engine" / "src"))
@@ -16,10 +16,11 @@ sys.path.insert(0, str(ROOT / "services" / "strategy-engine"))
sys.path.insert(0, str(ROOT / "services" / "backtester" / "src"))
sys.path.insert(0, str(ROOT / "shared" / "src"))
-from shared.models import Candle # noqa: E402
from backtester.engine import BacktestEngine # noqa: E402
from strategies.moc_strategy import MocStrategy # noqa: E402
+from shared.models import Candle # noqa: E402
+
def generate_stock_candles(
symbol: str = "AAPL",
@@ -38,7 +39,7 @@ def generate_stock_candles(
"""
candles = []
price = base_price
- start_date = datetime(2025, 1, 2, tzinfo=timezone.utc) # Start on a Thursday
+ start_date = datetime(2025, 1, 2, tzinfo=UTC) # Start on a Thursday
trading_day = 0
current_date = start_date
@@ -136,27 +137,26 @@ def main():
]
# Parameter grid
- param_sets = []
- for rsi_min in [25, 30, 35]:
- for rsi_max in [55, 60, 65]:
- for sl in [1.5, 2.0, 3.0]:
- for ema in [10, 20]:
- param_sets.append(
- {
- "quantity_pct": 0.2,
- "stop_loss_pct": sl,
- "rsi_min": rsi_min,
- "rsi_max": rsi_max,
- "ema_period": ema,
- "volume_avg_period": 20,
- "min_volume_ratio": 0.8,
- "buy_start_utc": 19,
- "buy_end_utc": 21,
- "sell_start_utc": 14,
- "sell_end_utc": 15,
- "max_positions": 5,
- }
- )
+ param_sets = [
+ {
+ "quantity_pct": 0.2,
+ "stop_loss_pct": sl,
+ "rsi_min": rsi_min,
+ "rsi_max": rsi_max,
+ "ema_period": ema,
+ "volume_avg_period": 20,
+ "min_volume_ratio": 0.8,
+ "buy_start_utc": 19,
+ "buy_end_utc": 21,
+ "sell_start_utc": 14,
+ "sell_end_utc": 15,
+ "max_positions": 5,
+ }
+ for rsi_min in [25, 30, 35]
+ for rsi_max in [55, 60, 65]
+ for sl in [1.5, 2.0, 3.0]
+ for ema in [10, 20]
+ ]
print(f"\nParameter combinations: {len(param_sets)}")
print(f"Stocks: {[s[0] for s in stocks]}")
@@ -234,7 +234,7 @@ def main():
print("\n" + "=" * 60)
print("WORST 3 PARAMETER SETS")
print("=" * 60)
- for _rank, (params, profit, trades, sharpe, _) in enumerate(param_results[-3:], 1):
+ for _rank, (params, profit, _trades, sharpe, _) in enumerate(param_results[-3:], 1):
print(
f" RSI({params['rsi_min']}-{params['rsi_max']}),"
f" SL={params['stop_loss_pct']}%, EMA={params['ema_period']}"
diff --git a/scripts/stock_screener.py b/scripts/stock_screener.py
index 7a5c0ba..7552aa3 100755
--- a/scripts/stock_screener.py
+++ b/scripts/stock_screener.py
@@ -16,7 +16,7 @@ import asyncio
import json
import os
import sys
-from datetime import datetime, timezone
+from datetime import UTC, datetime
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
@@ -195,7 +195,7 @@ async def main_async(top_n: int = 5, universe: list[str] | None = None):
print("=" * 60)
print("Daily Stock Screener — MOC Strategy")
- print(f"Date: {datetime.now(timezone.utc).strftime('%Y-%m-%d %H:%M UTC')}")
+ print(f"Date: {datetime.now(UTC).strftime('%Y-%m-%d %H:%M UTC')}")
print(f"Universe: {len(symbols)} stocks")
print("=" * 60)