Files
DOLPHIN/nautilus_dolphin/examples/acb_example.py

127 lines
3.5 KiB
Python
Raw Normal View History

"""
ACB v5 Usage Example
====================
Demonstrates how to use the Adaptive Circuit Breaker v5
on the Nautilus-Dolphin stack.
"""
import sys
from pathlib import Path
# Add parent to path
sys.path.insert(0, str(Path(__file__).parent.parent))
from nautilus_dolphin.nautilus_dolphin.nautilus.adaptive_circuit_breaker import (
AdaptiveCircuitBreaker,
ACBConfig,
ACBPositionSizer,
get_acb_cut_for_date
)
def example_1_basic_usage():
"""Example 1: Basic ACB usage."""
print("=" * 70)
print("Example 1: Basic ACB Usage")
print("=" * 70)
# Create ACB instance
acb = AdaptiveCircuitBreaker()
# Get cut for a specific date
date_str = '2026-02-06' # Feb 6 crash day
cut_info = acb.get_cut_for_date(date_str)
print(f"\nDate: {date_str}")
print(f"Cut Rate: {cut_info['cut']*100:.0f}%")
print(f"Signals Detected: {cut_info['signals']:.1f}")
print(f"Severity: {cut_info['severity']}")
print(f"Config Used: {cut_info['config_used']}")
def example_2_position_sizer():
"""Example 2: Using ACBPositionSizer."""
print("\n" + "=" * 70)
print("Example 2: ACB Position Sizer")
print("=" * 70)
# Create position sizer
sizer = ACBPositionSizer()
# Simulate position sizing for multiple days
base_sizes = [1000.0, 1500.0, 2000.0, 1200.0, 800.0]
dates = ['2026-02-01', '2026-02-02', '2026-02-03', '2026-02-04', '2026-02-05']
print(f"\n{'Date':<12} {'Base Size':<12} {'Cut':<8} {'Final Size':<12} {'Saved':<10}")
print("-" * 70)
total_base = 0
total_final = 0
for date, base in zip(dates, base_sizes):
final_size, acb_info = sizer.calculate_size(base, date)
cut_pct = acb_info['cut'] * 100
saved = base - final_size
print(f"{date:<12} ${base:>10,.2f} {cut_pct:>6.0f}% ${final_size:>10,.2f} ${saved:>8,.2f}")
total_base += base
total_final += final_size
print("-" * 70)
print(f"{'TOTAL':<12} ${total_base:>10,.2f} {'':<8} ${total_final:>10,.2f} ${total_base - total_final:>8,.2f}")
def example_3_convenience_function():
"""Example 3: Using convenience function."""
print("\n" + "=" * 70)
print("Example 3: Convenience Function")
print("=" * 70)
# Quick lookup without creating instance
dates = ['2026-01-15', '2026-02-06', '2026-02-08']
print(f"\n{'Date':<12} {'Cut':<8} {'Signals':<10} {'Protection Level':<20}")
print("-" * 70)
for date in dates:
cut_info = get_acb_cut_for_date(date)
cut = cut_info['cut']
signals = cut_info['signals']
# Determine protection level
if cut == 0:
level = "None (Normal)"
elif cut <= 0.15:
level = "Light"
elif cut <= 0.45:
level = "Moderate"
elif cut <= 0.55:
level = "High (Crash)"
else:
level = "Extreme"
print(f"{date:<12} {cut*100:>6.0f}% {signals:>8.1f} {level:<20}")
def main():
"""Run all examples."""
print("\n" + "=" * 70)
print("ACB v5 - Usage Examples")
print("=" * 70)
example_1_basic_usage()
example_2_position_sizer()
example_3_convenience_function()
print("\n" + "=" * 70)
print("Examples Complete")
print("=" * 70)
if __name__ == '__main__':
main()