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

use strict;
use warnings;

sub call {
    my ($class, $tws, $cv, $arg) = @_;

    my $self = bless {
        cv      => $cv,
        results => [],
    }, $class;

    my $request = $tws->request(
        reqContractDetails => {
            id       => $tws->next_id,
            contract => $arg->{contract},
        },
    );

    $tws->ae_call($self, $request);
}

sub cb {
    my ($self, $response) = @_;

    if ($response->_name eq 'contractDetails') {
        push @{$self->{results}}, $response;
    }
    elsif ($response->_name eq 'contractDetailsEnd') {
        $self->{cv}->send($self->{results});
    }
}

1;

__END__

=pod

=head1 NAME

Finance::TWS::Simple::ContractDetails - request contract details

=head1 SYNOPSIS

  my $contract = $tws->struct(Contract => {
      symbol   => 'AAPL',
      secType  => 'STK',
      exchange => 'SMART',
      currency => 'USD',
  });
  my $details = $tws->call(ContractDetails => {contract => $contract});

=head1 DESCRIPTION

Search for contracts and/or obtain additional information for contracts
(like regular trading hours, exchanges).

=head1 PARAMETER

=head2 contract

L<Protocol::TWS::Simple::Struct::Contract> object.

=head1 RESULT

Arrayref of L<Protocol::TWS::Simple::Struct::ContractDetails> objects.
Can be empty (if no matching security was found).

=head1 SEE ALSO

L<http://www.interactivebrokers.com/php/apiUsersGuide/apiguide.htm#apiguide/c/contract.htm>,
L<http://www.interactivebrokers.com/php/apiUsersGuide/apiguide.htm#apiguide/c/contractdetails1.htm>,
L<Protocol::TWS::Struct::Contract>,
L<Protocol::TWS::Struct::ContractDetails>

=head1 AUTHOR

Uwe Voelker uwe@uwevoelker.de

=cut