The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Finance::Instrument::FuturesContract;

use strict;
use 5.008_001;
our $VERSION = '0.01';

use Moose;
use methods;
use DateTime::Format::Strptime;

extends 'Finance::Instrument';

has futures => (is => "rw", isa => "Finance::Instrument::Futures",
                handles => [qw(name exchange tick_size multiplier time_zone currency session
                               override_since attr)]);

has expiry_year  => (is => "rw", isa => "Int");
has expiry_month => (is => "rw", isa => "Int");

has last_trading_day => (is => "rw", isa => 'DateTime');

has first_trading_day => (is => "rw", isa => "DateTime");


method BUILDARGS {
    my %args = @_;
    my $strp = DateTime::Format::Strptime->new(
        pattern     => '%F',
        time_zone   => $args{futures}->time_zone);
    for (qw(last_trading_day first_trading_day)) {
        if ($args{$_}) {
            $args{$_} = $strp->parse_datetime($args{$_})
                unless ref $args{$_};
        }
    }
    return \%args;
}

method expiry { sprintf("%04d%02d", $self->expiry_year, $self->expiry_month) }

method code { $self->futures->code.'_'.$self->expiry }

method previous_contract {
    $self->futures->previous_contract($self->expiry_year, $self->expiry_month);
}



1;
__END__

=encoding utf-8

=for stopwords

=head1 NAME

Finance::Instrument -

=head1 SYNOPSIS

  use Finance::Instrument;

=head1 DESCRIPTION

Finance::Instrument is

=head1 AUTHOR

Chia-liang Kao E<lt>clkao@clkao.orgE<gt>

=head1 LICENSE

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=head1 SEE ALSO

=cut