App-cryp-arbit
view release on metacpan or search on metacpan
lib/App/cryp/arbit.pm view on Meta::CPAN
my @quotecurs;
my %fiatquotecurs; # key=fiat, value=1
my @quotecurs_arg = @{ $r->{args}{quote_currencies} // [] };
my %quotecur_exchanges; # key=(cryptocurrency code or ':fiat'), value={exchange1=>1, ...}
# list pairs on all exchanges
for my $e (sort keys %{ $r->{_stash}{account_exchanges} }) {
my $pair_recs = _get_exchange_pairs($r, $e);
for my $pair_rec (@$pair_recs) {
my $pair = $pair_rec->{name};
my ($basecur, $quotecur) = split m!/!, $pair;
# consider all fiat currencies as a single ":fiat" because we
# assume fiat currencies can be converted from one to the aother
# at a stable rate.
my $key;
if (_is_fiat($quotecur)) {
$key = ':fiat';
$fiatquotecurs{$quotecur} = 1;
} else {
$key = $quotecur;
}
lib/App/cryp/arbit.pm view on Meta::CPAN
my @basecurs;
my @basecurs_arg = @{ $r->{args}{base_currencies} // [] };
my %basecur_exchanges; # key=currency code, value={exchange1=>1, ...}
# list pairs on all exchanges
for my $e (sort keys %{ $r->{_stash}{account_exchanges} }) {
my $pair_recs = _get_exchange_pairs($r, $e);
for my $pair_rec (@$pair_recs) {
my $pair = $pair_rec->{name};
my ($basecur, $quotecur) = split m!/!, $pair;
next unless grep { $_ eq $quotecur } @{ $r->{_stash}{quote_currencies} };
$basecur_exchanges{$basecur}{$e} = 1;
}
}
# only consider base currencies that are traded in >1 exchanges, for
# arbitrage possibility
my @possible_basecurs = grep { keys(%{$basecur_exchanges{$_}}) > 1 }
keys %basecur_exchanges;
lib/App/cryp/arbit.pm view on Meta::CPAN
my @pairs;
if ($quote_currency0 eq ':fiat') {
push @pairs, map { "$base_currency/$_" } @{ $fiat_for{$exchange} };
} else {
push @pairs, $set;
}
PAIR:
for my $pair (@pairs) {
my ($basecur, $quotecur) = split m!/!, $pair;
next unless grep { $_ eq $pair } @{ $pairs_for{$exchange} };
my $time = time();
log_debug "Getting orderbook %s on %s ...", $pair, $exchange;
my $res = $client->get_order_book(pair => $pair);
unless ($res->[0] == 200) {
log_error "Couldn't get orderbook %s on %s: %s, skipping this pair",
$pair, $exchange, $res;
next PAIR;
}
lib/App/cryp/arbit/Strategy/merge_order_book.pm view on Meta::CPAN
my @pairs;
if ($quote_currency0 eq ':fiat') {
push @pairs, map { "$base_currency/$_" } @{ $fiat_for{$exchange} };
} else {
push @pairs, $set;
}
PAIR:
for my $pair (@pairs) {
my ($basecur, $quotecur) = split m!/!, $pair;
next unless grep { $_ eq $pair } @{ $pairs_for{$exchange} };
my $time = time();
log_debug "Getting orderbook %s on %s ...", $pair, $exchange;
my $res = $client->get_order_book(pair => $pair);
unless ($res->[0] == 200) {
log_error "Couldn't get orderbook %s on %s: %s, skipping this pair",
$pair, $exchange, $res;
next PAIR;
}
( run in 0.651 second using v1.01-cache-2.11-cpan-f52f0507bed )