NAME
Finance::Contract - represents a contract object for a single bet
VERSION
version 0.001
SYNOPSIS
use feature qw(say);
use Finance::Contract;
# Create a simple contract
my $contract = Finance::Contract->new(
contract_type => 'CALLE',
duration => '5t',
);
DESCRIPTION
This is a generic abstraction for financial stock market contracts.
Construction
Finance::Contract->new({
underlying => 'frxUSDJPY',
contract_type => 'CALL',
date_start => $now,
duration => '5t',
currency => 'USD',
payout => 100,
barrier => 100,
});
Dates
All date-related parameters:
are Date::Utility instances. You can provide them as epoch values or Date::Utility objects.
ATTRIBUTES
These are the parameters we expect to be passed when constructing a new contract.
bet_type
The type of this contract as an upper-case string.
Current types include:
CALL
PUT
CALLE
EXPIRYRANGE
EXPIRYMISS
DIGITMATCH
DIGITOVER
currency
The currency of the payout for this contract, e.g. USD
.
date_expiry
When the contract expires.
date_pricing
The date at which we're pricing the contract. Provide undef
to indicate "now".
date_start
For American contracts, defines when the contract starts.
For Europeans, this is used to determine the barrier when the requested barrier is relative.
duration
The requested contract duration, specified as a string indicating value with units. The unit is provided as a single character suffix:
t - ticks
s - seconds
m - minutes
h - hours
d - days
Examples would be 5t
for 5 ticks, 3h
for 3 hours.
is_forward_starting
True if this contract is considered as forward-starting at "date_pricing".
payout
Payout amount value, see "currency". Optional - only applies to binaries.
prediction
Prediction (for tick trades) is what client predicted would happen.
starts_as_forward_starting
This attribute tells us if this contract was initially bought as a forward starting contract. This should not be mistaken for "is_forward_starting" attribute as that could change over time.
supplied_barrier_type
One of:
relative
- this is of the formS10P
orS-4P
, which would be 10 pips above the spot or 4 pips below the spot.absolute
- this is a number that can be compared directly with the spot, e.g.103.45
.difference
- a numerical difference from the spot, can be negative, e.g.-0.035
.
supplied_high_barrier
For a 2-barrier contract, this is the high barrier string. The meaning of these barrier values is controlled by "supplied_barrier_type".
supplied_low_barrier
For a 2-barrier contract, this is the low barrier string.
supplied_barrier
For a single-barrier contract, this is the barrier string.
tick_count
Number of ticks in this trade.
tick_expiry
A boolean that indicates if a contract expires after a pre-specified number of ticks.
underlying_symbol
The underlying asset, as a string (for example, frxUSDJPY
).
ATTRIBUTES - From contract_types.yml
id
A unique numeric ID.
pricing_code
Used to determine the pricing engine that should be used for this contract. Examples include 'PUT' or 'CALL'.
display_name
This is a human-readable name for the contract type, brief description of what it does.
sentiment
Indicates whether we are speculating on market rise or fall.
other_side_code
Opposite type for this contract - PUT for CALL, etc.
payout_type
Either binary
or non-binary
.
payouttime
Indicates when the contract pays out. Can be end
or hit
.
ATTRIBUTES - From contract_categories.yml
allow_forward_starting
True if we allow forward starting for this contract type.
barrier_at_start
Boolean which will false if we don't know what the barrier is at the start of the contract (Asian contracts).
category_code
The code for this category.
is_path_dependent
True if this is a path-dependent contract.
supported_expiries
Which expiry durations we allow for this category. Values can be:
intraday
daily
tick
two_barriers
True if the contract has two barriers.
METHODS
barrier_category
Type of barriers we have for this contract, depends on the contract type.
Possible values are:
american
- barrier for American-style contractasian
- Asian-style contracteuro_atm
- at-the-money European contracteuro_non_atm
- non-at-the-money European contractnon_financial
- digits
effective_start
For backpricing, this is "date_start".
For a forward-starting contract, this is "date_start".
For all other states - i.e. active, non-expired contracts - this is "date_pricing".
fixed_expiry
A Boolean to determine if this bet has fixed or flexible expiries.
get_time_to_expiry
Returns a TimeInterval to expiry of the bet. For a forward start bet, it will NOT return the bet lifetime, but the time till the bet expires.
If you want to get the contract life time, use:
$contract->get_time_to_expiry({from => $contract->date_start})
is_atm_bet
Is this contract meant to be ATM or non ATM at start? The status will not change throughout the lifetime of the contract due to differences in offerings for ATM and non ATM contracts.
shortcode
This is a compact string representation of a Finance::Contract object. It includes all data needed to reconstruct a contract, with the exception of "currency".
timeinyears
Contract duration in years.
timeindays
Contract duration in days.
ticks_to_expiry
Number of ticks until expiry of this contract. Defaults to one more than tick_count, TODO JB - this is overridden in the digit/Asian contracts, any idea why?