# -*- coding: utf-8 -*-
"""ConsecutiveLoss

Automatically generated by Colab.

Original file is located at
    https://colab.research.google.com/drive/1kTQfASfM_yOeZS4Dcm4ecQ7UPIgbJbjt
"""

import numpy as np
import matplotlib.pyplot as plt

# Systems data: win rates and RRR
win_rates = [0.30, 0.50, 0.65, 0.76, 0.83]
rrrs = [2.6, 1.7, 0.9, 0.6, 0.3]
num_systems = len(win_rates)
num_simulations = 100
num_trades = 500

# Initialize results storage
all_max_consecutive_losses = []

# Vectorized function to compute max consecutive losses
def max_consecutive_losses_vectorized(arr):
    padded = np.concatenate(([1], arr, [1]))
    idx = np.where(padded == 1)[0]
    gaps = idx[1:] - idx[:-1] - 1
    return np.max(gaps) if gaps.size > 0 else 0

# Run simulations for each system
for wr in win_rates:
    max_losses_per_system = []
    for _ in range(num_simulations):
        trades = np.random.choice([0, 1], size=num_trades, p=[1-wr, wr])
        max_loss = max_consecutive_losses_vectorized(trades)
        max_losses_per_system.append(max_loss)
    all_max_consecutive_losses.append(max_losses_per_system)

# Compute statistics (min, median, max) for each system
stats = []
for losses_list in all_max_consecutive_losses:
    min_val = np.min(losses_list)
    median_val = np.median(losses_list)
    max_val = np.max(losses_list)
    stats.append((min_val, median_val, max_val))

# Create figure and axis
plt.figure(figsize=(10, 6))
box_plot = plt.boxplot(all_max_consecutive_losses, patch_artist=True,
                       labels=[f'WR={wr*100:.0f}%' for wr in win_rates])

# Define custom colors for each system
colors = ['#FF9999', '#66B2FF', '#99FF99', '#FFCC99', '#D4AAFF']

# Apply colors to box plots
for patch, color in zip(box_plot['boxes'], colors):
    patch.set_facecolor(color)
    patch.set_alpha(0.8)  # Add slight transparency

# Customize median lines
for median in box_plot['medians']:
    median.set(color='black', linewidth=2)

# Customize whiskers and caps
for whisker in box_plot['whiskers']:
    whisker.set(color='gray', linestyle='-', linewidth=1.5)

for cap in box_plot['caps']:
    cap.set(color='gray', linewidth=1.5)

# Add title and labels
plt.title('Maximum Consecutive Losses in 500 Trades (100 Simulations per System)', fontsize=14)
plt.xlabel('Trading System (Win Rate)', fontsize=12)
plt.ylabel('Number of Consecutive Losses', fontsize=12)
plt.grid(axis='y', linestyle='--', alpha=0.7)

# Add legend for colors
legend_patches = [plt.Rectangle((0,0),1,1, fc=color) for color in colors]
plt.legend(legend_patches, [f'System {i+1} ({wr*100:.0f}% WR)'
            for i, wr in enumerate(win_rates)], loc='upper right')

plt.tight_layout()
plt.show()

# Print statistics
print("System Statistics (Min, Median, Max Consecutive Losses):")
for i, (wr, rrr, (min_val, median_val, max_val)) in enumerate(zip(win_rates, rrrs, stats)):
    print(f"System {i+1} (WR={wr*100:.0f}%, RRR={rrr}): "
          f"Min={min_val}, Median={median_val}, Max={max_val}")