Fájl részletek

Ezen az oldalon egy konkrét fájl aktuális állapotát tudod megnézni.

Vissza a fájltérképhez Csak változott Stratégia-labor Monitor főoldal ← Előző módosult Következő módosult →
Fájl útvonala
/opt/bots/saturnus/app/test_guardrails.py
Létezik most?
IGEN
Aktuális státusz
NEW
Méret
5252
Módosítás ideje
1776882244.9656837
Korábbi baseline időpont
SHA256 rövid

Előnézet (első 120 sor)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
import copy
from pathlib import Path

sys.path.insert(0, "/opt/bots/saturnus/app")

import tick_runner


def ok(msg: str) -> None:
    print(f"OK  - {msg}")


def fail(msg: str) -> None:
    print(f"ERR - {msg}")
    raise SystemExit(2)


def assert_true(cond: bool, ok_msg: str, err_msg: str) -> None:
    if cond:
        ok(ok_msg)
    else:
        fail(err_msg)


def make_state() -> dict:
    today = tick_runner.now_utc_iso()[:10]
    return {
        "in_position": False,
        "market": {
            "pair": "SOL/USDC",
            "timeframe": "1m",
            "last": 100.0,
            "prev_last": 99.5,
        },
        "execution": {},
        "guardrail": {
            "day": today,
            "trades_today": 0,
            "blocked": False,
            "block_reason": None,
        },
        "locks": {},
        "cycle": {},
        "entry_price": 100.0,
    }

def make_buy_decision() -> dict:
    return {
        "action": "BUY",
        "rule": "BUY_STANDARD",
        "reason": "test_buy_signal",
    }


def make_sell_decision() -> dict:
    return {
        "action": "SELL",
        "rule": "SELL_STANDARD",
        "reason": "test_sell_signal",
    }


def test_kill_switch_blocks() -> None:
    state = make_state()
    decision = make_buy_decision()

    orig = tick_runner._runtime_guardrail_flags
    try:
        tick_runner._runtime_guardrail_flags = lambda: (True, 10, 2.0)
        allowed, reason = tick_runner.guardrail_allows_execution(state, decision)
        assert_true(allowed is False, "KILL_SWITCH -> tiltás", "KILL_SWITCH nem tiltott")
        assert_true(reason == "KILL_SWITCH", "KILL_SWITCH ok", f"KILL_SWITCH rossz ok: {reason}")
    finally:
        tick_runner._runtime_guardrail_flags = orig


def test_max_trades_blocks() -> None:
    state = make_state()
    state["guardrail"]["trades_today"] = 10
    decision = make_buy_decision()

    orig = tick_runner._runtime_guardrail_flags
    try:
        tick_runner._runtime_guardrail_flags = lambda: (False, 10, 2.0)
        allowed, reason = tick_runner.guardrail_allows_execution(state, decision)
        assert_true(allowed is False, "MAX_TRADES_PER_DAY -> tiltás", "MAX_TRADES_PER_DAY nem tiltott")
        assert_true(reason == "MAX_TRADES_PER_DAY", "MAX_TRADES_PER_DAY ok", f"MAX_TRADES_PER_DAY rossz ok: {reason}")
    finally:
        tick_runner._runtime_guardrail_flags = orig


def test_daily_loss_cap_blocks() -> None:
    state = make_state()
    decision = make_sell_decision()

    orig_flags = tick_runner._runtime_guardrail_flags
    orig_loss = tick_runner._estimate_open_trade_loss_pct
    try:
        tick_runner._runtime_guardrail_flags = lambda: (False, 10, 2.0)
        tick_runner._estimate_open_trade_loss_pct = lambda _state: 2.5
        allowed, reason = tick_runner.guardrail_allows_execution(state, decision)
        assert_true(allowed is False, "DAILY_LOSS_CAP_PCT -> tiltás", "DAILY_LOSS_CAP_PCT nem tiltott")
        assert_true(str(reason).startswith("DAILY_LOSS_CAP_PCT:"), "DAILY_LOSS_CAP_PCT ok", f"DAILY_LOSS_CAP_PCT rossz ok: {reason}")
    finally:
        tick_runner._runtime_guardrail_flags = orig_flags
        tick_runner._estimate_open_trade_loss_pct = orig_loss


def test_buy_lock_holds_second_buy() -> None:
    state = make_state()
    d_buy = make_buy_decision()

    orig_exec_flags = tick_runner._runtime_exec_flags
    try:
        tick_runner._runtime_exec_flags = lambda: (True, False, False)

Csak változott diff sorok

Teljes diff

[INFO] Nincs korábbi baseline tartalom ehhez a fájlhoz.