コード例 #1
0
function make_min_orders($Adapters)
{
    foreach ($Adapters as $Adapter) {
        echo "*** " . get_class($Adapter) . " ***\n";
        //_____get the markets to loop over:
        $market_summaries = $Adapter->get_market_summaries();
        $num_markets = sizeof($market_summaries);
        /*//_____get open orders, sort them by creation date and remove the oldest orders:
        			$open_orders = $Adapter->get_open_orders();
        			usort($open_orders, function($a, $b) {
        				return $b['timestamp_created'] - $a['timestamp_created'];
        			});
        
        			//_____remove oldest orders for each valid market...
        			$x = 0;
        			while( $x++ < $num_markets )
        				if( sizeof( $open_orders ) > 0 )
        					if( get_class( $Adapter ) == "PoloniexAdapter" )
        						$output = $Adapter->cancel( $order['id'], array( "market" => $order['market'] ) );
        					else
        						$output = $Adapter->cancel( $order['id'] );*/
        $bal = [];
        shuffle($market_summaries);
        foreach ($market_summaries as $market_summary) {
            if ($market_summary['frozen']) {
                continue;
            }
            //_____get currencies/balances:
            $market = $market_summary['market'];
            $curs_bq = explode("-", $market);
            $base_cur = $curs_bq[0];
            $quote_cur = $curs_bq[1];
            $base_bal_arr = $Adapter->get_balance($base_cur, array('type' => 'exchange'));
            $base_bal = isset($bal[$base_cur]) ? $bal[$base_cur] : $base_bal_arr['available'];
            $quote_bal_arr = $Adapter->get_balance($quote_cur, array('type' => 'exchange'));
            $quote_bal = isset($bal[$quote_cur]) ? $bal[$quote_cur] : $quote_bal_arr['available'];
            echo " -> " . get_class($Adapter) . " \n";
            echo " -> base currency ({$base_cur}) \n";
            echo " -> base currency balance ({$base_bal}) \n";
            echo " -> quote currency ({$quote_cur}) \n";
            echo " -> quote currency balance ({$quote_bal}) \n";
            //_____calculate some variables that are rather trivial:
            $precision = $market_summary['price_precision'] + 2;
            //_____significant digits - example 1: "1.12" has 2 as PP. example 2: "1.23532" has 5 as PP.
            $epsilon = 1 / pow(10, $precision);
            //_____smallest unit of base currency that exchange recognizes: if PP is 3, then it is 0.001.
            $buy_price = $market_summary['bid'];
            //_____buy at same price as highest bid.
            $sell_price = $market_summary['ask'];
            //_____sell at same price as lowest ask.
            $spread = $sell_price - $buy_price;
            //_____difference between highest bid and lowest ask.
            echo " -> precision {$precision} \n";
            echo " -> epsilon {$epsilon} \n";
            echo " -> buy price: {$buy_price} \n";
            echo " -> sell price: {$sell_price} \n";
            echo " -> spread: {$spread} \n";
            $buy_price = number_format($market_summary['bid'], $precision, '.', '');
            $sell_price = number_format($market_summary['ask'], $precision, '.', '');
            echo " -> final formatted buy price: {$buy_price} \n";
            echo " -> final formatted sell price: {$sell_price} \n";
            if (floatval($buy_price) > 0) {
                //some currencies have big sell wall at 0.00000001...
                $order_size = Utilities::get_min_order_size($market_summary['minimum_order_size_base'], $market_summary['minimum_order_size_quote'], $epsilon, $buy_price, $precision);
                echo " -> buying {$order_size} in {$market} for {$buy_price} costing " . $order_size * $buy_price . " with quote balance of {$quote_bal} \n";
                if (floatval($order_size * $buy_price) > floatval($quote_bal)) {
                    echo "\n\n -> quote balance of {$quote_bal} is too low for min buy order size of {$order_size} at buy price of {$buy_price} \n\n";
                } else {
                    $buy = $Adapter->buy($market_summary['market'], $order_size, $buy_price, 'limit', array('market_id' => $market_summary['market_id']));
                    if (isset($buy['message']) && $buy['message'] != 'MARKET_OFFLINE') {
                        print_r($buy);
                        die('test');
                    } else {
                        $bal[$quote_cur] = $quote_bal - $order_size * $buy_price;
                    }
                }
            }
            if (floatval($sell_price) > floatval($buy_price)) {
                //just in case...
                $order_size = Utilities::get_min_order_size($market_summary['minimum_order_size_base'], $market_summary['minimum_order_size_quote'], $epsilon, $buy_price, $precision);
                echo " -> selling {$order_size} in {$market} for {$sell_price} earning " . $order_size * $sell_price . " with base balance of {$base_bal}\n";
                if (floatval($order_size) > floatval($base_bal)) {
                    echo "\n\n -> base balance of {$base_bal} is too low for min sell order size of {$order_size} at sell price of {$sell_price} \n\n";
                } else {
                    $sell = $Adapter->sell($market_summary['market'], $order_size, $sell_price, 'limit', array('market_id' => $market_summary['market_id']));
                    if (isset($sell['message']) && $sell['message'] != 'MARKET_OFFLINE') {
                        print_r($sell);
                        die('test');
                    } else {
                        $bal[$base_cur] = $base_bal - $order_size;
                    }
                }
            }
            echo "\n";
        }
    }
}
コード例 #2
0
function make_max_orders($Adapters)
{
    foreach ($Adapters as $Adapter) {
        echo "*** " . get_class($Adapter) . " ***\n";
        //_____get the markets to loop over:
        $market_summaries = $Adapter->get_market_summaries();
        $num_markets = sizeof($market_summaries);
        $Adapter->cancel_all();
        $bal = [];
        shuffle($market_summaries);
        foreach ($market_summaries as $market_summary) {
            if ($market_summary['frozen']) {
                continue;
            }
            //_____get currencies/balances:
            $market = $market_summary['market'];
            $curs_bq = explode("-", $market);
            $base_cur = $curs_bq[0];
            $quote_cur = $curs_bq[1];
            if ($base_cur == "BTC") {
                continue;
            }
            //if( ! isset( $base_bal ) ) {
            $base_bal_arr = $Adapter->get_balance($base_cur, array('type' => 'exchange'));
            if (isset($base_bal_arr['ERROR'])) {
                continue;
            }
            $base_bal = isset($bal[$base_cur]) ? $bal[$base_cur] : $base_bal_arr['available'];
            //}
            if (!isset($quote_bal)) {
                $quote_bal_arr = $Adapter->get_balance($quote_cur, array('type' => 'exchange'));
                if (isset($quote_bal_arr['ERROR'])) {
                    continue;
                }
                $quote_bal = isset($bal[$quote_cur]) ? $bal[$quote_cur] : $quote_bal_arr['available'];
            }
            echo " -> " . get_class($Adapter) . " \n";
            echo " -> base currency ({$base_cur}) \n";
            echo " -> base currency balance ({$base_bal}) \n";
            echo " -> quote currency ({$quote_cur}) \n";
            echo " -> quote currency balance ({$quote_bal}) \n";
            //_____calculate some variables that are rather trivial:
            $precision = $market_summary['price_precision'] + 2;
            //_____significant digits - example 1: "1.12" has 2 as PP. example 2: "1.23532" has 5 as PP.
            $epsilon = 1 / pow(10, $precision);
            //_____smallest unit of base currency that exchange recognizes: if PP is 3, then it is 0.001.
            $buy_price = number_format($market_summary['bid'], $precision, '.', '');
            //_____buy at same price as highest bid.
            $sell_price = number_format($market_summary['bid'], $precision, '.', '');
            //_____sell at same price as lowest ask.
            $spread = $sell_price - $buy_price;
            //_____difference between highest bid and lowest ask.
            echo " -> precision {$precision} \n";
            echo " -> epsilon {$epsilon} \n";
            echo " -> buy price: {$buy_price} \n";
            echo " -> sell price: {$sell_price} \n";
            echo " -> spread: {$spread} \n";
            echo " -> final formatted buy price: {$buy_price} \n";
            echo " -> final formatted sell price: {$sell_price} \n";
            /*if( floatval($buy_price) > 0 ) { //some currencies have big sell wall at 0.00000001...
            			$order_size = Utilities::get_min_order_size( null, $quote_bal / $num_markets, $epsilon, $buy_price, $precision);
            			echo " -> buying $order_size in $market for $buy_price costing " . $order_size * $buy_price . " with quote balance of $quote_bal \n";
            			if( floatval($order_size * $buy_price) > floatval($quote_bal) )
            				echo "\n\n -> quote balance of $quote_bal is too low for min buy order size of $order_size at buy price of $buy_price \n\n";
            			else {
            				$buy = $Adapter->buy( $market_summary['market'], $order_size, $buy_price, 'limit', array( 'market_id' => $market_summary['market_id'] ) );
            				if( isset( $buy['message'] ) && $buy['message'] != 'MARKET_OFFLINE' ) {
            					print_r( $buy );
            					//die('test');
            				} else {
            					$bal[ $quote_cur ] = $quote_bal - $order_size * $buy_price;
            				}
            			}
            		}*/
            //if( floatval($sell_price) > floatval($buy_price) ) { //just in case...
            $order_size = $base_bal;
            $min_order_size = Utilities::get_min_order_size($market_summary['minimum_order_size_base'], $market_summary['minimum_order_size_quote'], $epsilon, $buy_price, $precision);
            if ($order_size > $min_order_size) {
                echo " -> selling {$order_size} in {$market} for {$sell_price} earning " . $order_size * $sell_price . " with base balance of {$base_bal}\n";
                if (floatval($order_size) > floatval($base_bal)) {
                    echo "\n\n -> base balance of {$base_bal} is too low for min sell order size of {$order_size} at sell price of {$sell_price} \n\n";
                } else {
                    $sell = $Adapter->sell($market_summary['market'], $order_size, $sell_price, 'limit', array('market_id' => $market_summary['market_id']));
                    if (isset($sell['message']) && $sell['message'] != 'MARKET_OFFLINE') {
                        print_r($sell);
                        //die('test');
                    } else {
                        $bal[$base_cur] = $base_bal - $order_size;
                    }
                }
            }
            //}
            echo "\n";
        }
    }
}
コード例 #3
0
function poloniex_light_show($Adapter, $market)
{
    echo "*** " . get_class($Adapter) . " Light Show ***\n";
    //_____get the markets to loop over:
    $market_summary = $Adapter->get_market_summary($market);
    //_____get currencies/balances:
    $market = $market_summary['market'];
    $curs_bq = explode("-", $market);
    $base_cur = $curs_bq[0];
    $quote_cur = $curs_bq[1];
    $base_bal_arr = $Adapter->get_balance($base_cur, array('type' => 'exchange'));
    $base_bal = isset($bal[$base_cur]) ? $bal[$base_cur] : $base_bal_arr['available'];
    $quote_bal_arr = $Adapter->get_balance($quote_cur, array('type' => 'exchange'));
    $quote_bal = isset($bal[$quote_cur]) ? $bal[$quote_cur] : $quote_bal_arr['available'];
    echo " -> " . get_class($Adapter) . " \n";
    echo " -> base currency ({$base_cur}) \n";
    echo " -> base currency balance ({$base_bal}) \n";
    echo " -> quote currency ({$quote_cur}) \n";
    echo " -> quote currency balance ({$quote_bal}) \n";
    //_____calculate some variables that are rather trivial:
    $precision = $market_summary['price_precision'] + 2;
    //_____significant digits - example 1: "1.12" has 2 as PP. example 2: "1.23532" has 5 as PP.
    $epsilon = 1 / pow(10, $precision);
    //_____smallest unit of base currency that exchange recognizes: if PP is 3, then it is 0.001.
    $buy_price = $market_summary['bid'];
    //_____buy at same price as highest bid.
    $sell_price = $market_summary['ask'];
    //_____sell at same price as lowest ask.
    $spread = $sell_price - $buy_price;
    //_____difference between highest bid and lowest ask.
    echo " -> precision {$precision} \n";
    echo " -> epsilon {$epsilon} \n";
    echo " -> buy price: {$buy_price} \n";
    echo " -> sell price: {$sell_price} \n";
    echo " -> spread: {$spread} \n";
    $buy_price = number_format($market_summary['bid'], $precision, '.', '');
    $sell_price = number_format($market_summary['ask'], $precision, '.', '');
    echo " -> final formatted buy price: {$buy_price} \n";
    echo " -> final formatted sell price: {$sell_price} \n";
    $buy = array('message' => null);
    $sell = array('message' => null);
    //_____make 10 new visible orders:
    while ($sell_price - $buy_price > 1.0E-8) {
        if (rand() % 88 < 3) {
            continue;
        }
        $buy_size = Utilities::get_min_order_size($market_summary['minimum_order_size_base'], $market_summary['minimum_order_size_quote'], $epsilon, $buy_price, $precision);
        $sell_size = Utilities::get_min_order_size($market_summary['minimum_order_size_base'], $market_summary['minimum_order_size_quote'], $epsilon, $sell_price, $precision);
        $buy_price = number_format($buy_price, $precision, '.', '');
        $sell_price = number_format($sell_price, $precision, '.', '');
        if ($buy_price < $sell_price) {
            if (!isset($buy['error'])) {
                echo " -> buying {$buy_size} of ETH for {$buy_price} costing " . $buy_size * $buy_price . " \n";
                $buy = $Adapter->buy($market_summary['market'], $buy_size, $buy_price, 'limit', array('market_id' => $market_summary['market_id']));
                echo "buy:\n";
                print_r($buy);
            }
            if (!isset($sell['error'])) {
                echo " -> selling {$sell_size} of ETH for {$sell_price} earning " . $sell_size * $sell_price . " \n";
                $sell = $Adapter->sell($market_summary['market'], $sell_size, $sell_price, 'limit', array('market_id' => $market_summary['market_id']));
                echo "\nsell:\n";
                print_r($sell);
            }
            if (isset($buy['error']) && isset($sell['error'])) {
                if (rand() % 88 < 2) {
                    $eth_open_orders = $Adapter->get_open_orders("ETH-BTC");
                    usort($eth_open_orders, function ($a, $b) {
                        return $b['timestamp_created'] - $a['timestamp_created'];
                    });
                    //delete the last 44 or so orders every 44 or so buy/sell fails
                    foreach ($eth_open_orders as $eth_open_order) {
                        print_r($eth_open_order);
                        if (rand() % 88 < 2) {
                            continue;
                        }
                        print_r($Adapter->cancel($eth_open_order['id'], array('market' => $eth_open_order['market'])));
                    }
                }
                return;
            }
        }
        $buy_price = $buy_price + $epsilon;
        $sell_price = $sell_price - $epsilon;
    }
    echo "\n";
}