Example #1
0
<?php

/**
 * Discovered exchange ticker job.
 */
if (!$exchange) {
    throw new JobException("No exchange defined");
}
$instance = \DiscoveredComponents\Exchanges::getInstance($exchange);
$rates = $instance->fetchAllRates($logger);
$logger->info("Found " . count($rates) . " rates from exchange");
foreach ($rates as $code => $rate) {
    $currency1 = $rate['currency1'];
    $currency2 = $rate['currency2'];
    if (!in_array($currency1, get_all_currencies())) {
        $logger->info("Ignoring currency '{$currency1}': not a supported currency");
        continue;
    }
    if (!in_array($currency2, get_all_currencies())) {
        $logger->info("Ignoring currency '{$currency2}': not a supported currency");
        continue;
    }
    insert_new_ticker($job, array("name" => $exchange), $currency1, $currency2, $rate);
}
Example #2
0
<?php

/**
 * Cryptocurrency average price indices (#186).
 * This is a pretty neat job; it takes all of the current ticker values,
 * and generates average price indices for all supported currency pairs,
 * by balancing volume data (for markets that provide it).
 */
$exchange = array('name' => 'average');
$q = db()->prepare("SELECT * FROM ticker_recent WHERE exchange <> ?");
$q->execute(array('average'));
$recents = $q->fetchAll();
require __DIR__ . "/_average.php";
// we can now create ticker values as necessary
foreach ($pairs as $pair) {
    if ($pair['total_volume'] > 0) {
        insert_new_ticker($job, $exchange, $pair['currency1'], $pair['currency2'], array("last_trade" => $pair['total_last_trade'] / $pair['total_volume'], "bid" => $pair['total_volume_bid'] > 0 ? $pair['total_bid'] / $pair['total_volume_bid'] : 0, "ask" => $pair['total_volume_ask'] > 0 ? $pair['total_ask'] / $pair['total_volume_ask'] : 0, "volume" => $pair['total_volume']));
    }
    if ($pair['exchanges'] > 0) {
        $q = db()->prepare("DELETE FROM average_market_count WHERE currency1=? AND currency2=?");
        $q->execute(array($pair['currency1'], $pair['currency2']));
        $q = db()->prepare("INSERT INTO average_market_count SET currency1=?, currency2=?, market_count=?");
        $q->execute(array($pair['currency1'], $pair['currency2'], $pair['exchanges']));
        crypto_log($pair['currency1'] . "/" . $pair['currency2'] . ": from " . number_format($pair['exchanges']) . " exchanges");
    }
}