Loading ...
Sorry, an error occurred while loading the content.

Modeling FIFO financial transactions in Perl

Expand Messages
  • Kelly Jones
    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 9:36 AM
    • 0 Attachment
      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.
    • Peter L. Berghold
      ... 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 2 of 3 , Mar 10 11:15 AM
      • 0 Attachment
        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"
      • merlyn@stonehenge.com
        ... Peter @transactions = sort { $a- {timestamp} $b- {timestamp} }, Peter @transactions; That comma doesn t go there. It s either: sort EXPRESSION, LIST
        Message 3 of 3 , Mar 10 11:33 AM
        • 0 Attachment
          >>>>> "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.