Skip to content

Instantly share code, notes, and snippets.

@mosasiru
Created January 7, 2014 18:34
Show Gist options
  • Save mosasiru/8304193 to your computer and use it in GitHub Desktop.
Save mosasiru/8304193 to your computer and use it in GitHub Desktop.
stock simple random walk
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use 5.012000;
use autodie;
use Math::Random;
use Statistics::Descriptive;
my $N = 1000;
my $M = 100;
my $T = 100;
my $win_val = 10;
my $lose_val = -5;
my $tax = 0.2;
my $trend_per = 0.5;
my $sigma = 0.1;
my @benefit;
for my $n (1..$N) {
my $benefit = 0;
for my $m (1..$M) {
my $win_per = random_normal($n, $trend_per, $sigma);
my $money = 0;
my $flag = 0;
for my $i (1..$T) {
(rand() < $win_per ) ? $money++ : $money--;
if ($money >= $win_val) {
$benefit += $money * (1 - $tax);
$flag = 1;
last;
}
if ($money <= $lose_val) {
$benefit += $money;
$flag = 1;
last;
}
}
unless ($flag) {
$benefit += ( $money > 0 ? $money * (1 - $tax) : $money );
}
}
push @benefit, $benefit;
}
my $stat = Statistics::Descriptive::Full->new();
$stat->add_data(@benefit);
say $stat->mean();
say $stat->standard_deviation();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment