Как начать моделирование Монте-Карло для финансовых данных в Perl?

Мне нужно создать симулятор Монте-Карло для некоторых финансовых транзакций. Входные данные будут:

  • средний процент транзакций, которые заканчиваются прибылью
  • средняя прибыль на сделку
  • количество транзакций за период времени

Я просмотрел Math::Random::MT: :Auto модуль Perl, но я не знаю, как сформулировать входные данные для симулятора.

Может ли кто-нибудь дать несколько советов о том, как начать работу, учитывая исходные данные, с которыми я работаю?


person Dave    schedule 29.09.2010    source источник
comment
Чего вы хотите достичь? Я понимаю, какой метод вы выбрали (MC), но почему?   -  person Alex Feinman    schedule 29.09.2010
comment
Эти входные данные выглядят как выходные данные симуляции Монте-Карло. Обычно входные данные определяют распределение вероятностей событий, которые вы пытаетесь смоделировать.   -  person mob    schedule 29.09.2010
comment
Я хочу построить кривую капитала на основе этих входных данных. Пользователь может настроить входные данные и создать другую кривую капитала для сравнения.   -  person Dave    schedule 29.09.2010


Ответы (1)


Я бы предположил, что будет модель, определяющая прибыльность сделок, и что будет вероятностная составляющая прибыльности данной сделки.

Затем вам нужно извлечь реализации из соответствующего распределения для этого вероятностного компонента и рассчитать прибыльность для всех введенных транзакций. Очевидно, нужно также подумать о том, какие сделки будут заключаться: зачем заключать сделку, которая не является ex ante прибыльной по какому-то критерию? Но я недостаточно знаю, чтобы комментировать это.

Будьте осторожны, чтобы не использовать встроенный генератор случайных чисел: в Windows это даст вам только 32768 возможных значений.

Вот глупый пример:

#!/usr/bin/perl

use strict; use warnings;
use List::Util qw( sum );

my @projects = map { mk_project() } 1 .. 1_000;

for my $i (1 .. 10) {
    my $r = rand;
    my @profits = map { $_->($r) } @projects;
    my $avg_profits = sum( @profits ) / @profits;
    my $n_profitable = grep { $_ >= 0 } @profits;
    print "Profits: $avg_profits\tProfitable: $n_profitable\n";
}

sub mk_project {
    my $m = rand;
    return sub {
        my ($r) = @_;
        return 10*($r - $m);
    }
}
person Sinan Ünür    schedule 29.09.2010