#!/usr/bin/perl -w

use 5.034;

# Simulación de saldos
my $mean = 100;
my $sd = 50;
my @saldo;

use Math::Random qw(random_normal);

my $rate = 0.1/360;
my $fondo = 0;
my $coste = 15; # coste de transacción

my $n = 1500;  # cases
my $maxf = 0;

my ($hi, $lo, $obj);
my ($nhi, $nlo) = (0,0);

my $c;

while (++$c < $n){
    $fondo = 0;
    $nhi = $nlo = 0;
    $hi = int ( $mean + 2* $sd * rand() );
    $lo = int ( $hi -2 * $sd * rand() );               # tiene que ser más bajo que la media
    $lo = 0 if $lo < 0;
    $obj = ($hi+$lo)/2;
    
    @saldo = random_normal($n, $mean, $sd);
    
    for my $s (@saldo){
	if ($s > $hi){
	    $fondo += (($s-$obj)-$coste);
	    $nhi++;
	}elsif ($s < $lo){
	    $fondo -= (($obj-$s)+$coste);
	    $nlo++;
	    if ($s < 0){
		$fondo -= $coste;   # refuerzo de costes por urgencia
	    }
	}
	
	if ($fondo > 0){
	    $fondo *= (1+$rate);
	}else{
	    $fondo /= (1+$rate);
	}
    }
    
    if ($fondo > $maxf){
	$maxf = $fondo;
	say "-" x 40;
	say "Fondo = $fondo";
	say "Bandas:";
	say "Hi = $hi    count = $nhi";
	say "Lo = $lo    count = $nlo"; 
    }
}

exit 2;

