Sorry, an error occurred while loading the content.
Browse Groups

• ## Modeling FIFO financial transactions in Perl

(3)
• NextPrevious
• How do I easily model first-in-first-out (FIFO) financial transactions in Perl? Example: % I buy 100 shares of XYZ for \$8/share on Day 1, another 100 shares
Message 1 of 3 , Mar 10, 2010
View Source
How do I easily model first-in-first-out (FIFO) financial transactions
in Perl? Example:

% I buy 100 shares of XYZ for \$8/share on Day 1, another 100 shares
for \$9/share on Day 2, and another 100 shares for \$10/share on Day 3.

% On Day 4, I sell 150 shares for \$11/share. I calculate my profit
assuming FIFO: I sold the 100 shares I bought on Day 1 (profit:
\$3/share times 100 shares or \$300), and I sold 50 of the shares I
bought on Day 2 (profit: \$2/share times 50 shares or \$100), for a
total profit of \$400.

I can think of some ugly ways to model this in Perl, but no good/clean
ways. Any thoughts?

I realize there are other ways to calculate profit (eg, sell price vs
average price), but the problem I'm solving requires FIFO
calculations.

--
We're just a Bunch Of Regular Guys, a collective group that's trying
to understand and assimilate technology. We feel that resistance to
new ideas and technology is unwise and ultimately futile.
• ... It is possible that I don t fully understand the problem, but I would think that a FIFO would be trivial to implement in Perl. Consider the following: my
Message 1 of 3 , Mar 10, 2010
View Source
On Wed, 2010-03-10 at 10:36 -0700, Kelly Jones wrote:
> How do I easily model first-in-first-out (FIFO) financial transactions
> in Perl?

It is possible that I don't fully understand the problem, but I would
think that a FIFO would be trivial to implement in Perl.

Consider the following:

my @transactions=();

unshift @transactions,{ stock=>'stock a', price => 1.99 };
unshift @transactions,{ stock=>'stock b', price => 3.99 };

my \$first = pop @transactions;
my \$second = pop @transactions;

Unless I'm missing something here that should emulate the behavior of a
FIFO.

Another method to consider which is more complex is to time stamp the
individual transactions and while storing them in an array you sort on
the time stamp.

push @transactions, { stock=>'stock a', timestamp=> time , price =>
100 };

------- wait a while ---------

push @transactions, { stock=> 'stock a', timestamp => time , price =>
101 };

@transactions = sort { \$a->{timestamp} <=> \$b->{timestamp} },
@transactions;

my \$first = shift @transactions;

Doing that would populate \$first with the earliest time stamped
transaction.

--
Peter L. Berghold, Australian Cattle Dog Owner, Agility Fan, Foodie,
Salty Old Dog and Old School Unix Hacker.
Skype: cowdawg
"Those who fail to learn from history are condemned to repeat it"
• ... Peter @transactions = sort { \$a- {timestamp} \$b- {timestamp} }, Peter @transactions; That comma doesn t go there. It s either: sort EXPRESSION, LIST
Message 1 of 3 , Mar 10, 2010
View Source
>>>>> "Peter" == Peter L Berghold <peter@...> writes:

Peter> @transactions = sort { \$a->{timestamp} <=> \$b->{timestamp} },
Peter> @transactions;

That comma doesn't go there.

It's either:

sort EXPRESSION, LIST

or

sort { STATEMENTS } LIST

Note the absence of comma in the latter.
--
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn@...> <URL:http://www.stonehenge.com/merlyn/>
Smalltalk/Perl/Unix consulting, Technical writing, Comedy, etc. etc.
See http://methodsandmessages.vox.com/ for Smalltalk and Seaside discussion
Your message has been successfully submitted and would be delivered to recipients shortly.
• Changes have not been saved
Press OK to abandon changes or Cancel to continue editing
• Your browser is not supported
Kindly note that Groups does not support 7.0 or earlier versions of Internet Explorer. We recommend upgrading to the latest Internet Explorer, Google Chrome, or Firefox. If you are using IE 9 or later, make sure you turn off Compatibility View.