How to up to date poloniex orderbook via push api (WAMP protocol)

空扰寡人 提交于 2019-12-08 11:14:47

问题


I making software for scalping on poloniex.com To do this, I need to have fresh information about order book. API DOCUMENTATION said about push api. As i understand right it work like that:

  1. Use returnOrderBook (public method API) for getting snapshot
  2. Take sequence number (seq key) from responce
  3. Subscribe to push api with sequence number from snapshot
  4. Recive fresh data and make correction on snapshot data.

    <?php
    namespace Crypto\Scalper\Cli;
    use AppConfig;
    use Monolog\Logger;
    use Monolog\Handler\StreamHandler;
    use AndreasGlaser\PPC\PPC;
    
    use Thruway\ClientSession;
    use Thruway\Peer\Client;
    use Thruway\Transport\PawlTransportProvider;
    
    use Psr\Log\NullLogger;
    
    
    
    /**
     * Class PoloniexSyncCli
     * @package Crypto\Scalper\Cli
     */
    class PoloniexSyncCli
    {
        private $log;
        private $orderbooks;
    
        /**
         * Constructor.
         */
        public function __construct()
        {
            // Logging
            $this->log = new Logger('PoloniexSyncCli');
            $this->log->pushHandler(new StreamHandler('php://stdout', Logger::DEBUG));
        }
    
        public function loop()
        {
            $this->log->info('Sync poloniex data');
            while (true) {
                $this->getOrderbooks();
                $this->subscribe();
                sleep(10);
            }
        }
    
    
        /**
         * Get orderbook snapshot
         */
        private function getOrderbooks()
        {
            $this->log->info('Getting order book snapshot (REST API)');
            $poloniex = AppConfig::get('poloniex');
            $ppc = new PPC($poloniex['apiKey'], $poloniex['secret']);
            $result = $ppc->getOrderBook('USDT_BTC', 50);
            if (array_key_exists('error', $result->decoded)) {
                $this->log->error("Error on REST API request: {$result->decoded['error']}");
                exit;
            }
    
            $this->orderbooks = $result->decoded;
            $this->log->info("Seq: {$this->orderbooks['seq']}"); // THIS IS sequence number
        }
    
    
        /**
         * Subscribe to feed for getting fresh orderbook data
         */
        private function subscribe() {
            $this->log->info('Subscribe to feed (WAMP)');
            $client = new Client("realm1");
            $client->addTransportProvider(new PawlTransportProvider("wss://api.poloniex.com"));
    
            $client->on('open', function (ClientSession $session) {
                $marketEvent = function ($args, $argsKw, $details, $publicationId) {
                    echo "Orderbook update: seq: $argsKw->seq, args count: ".count($args)."\n";
                };
    
    
                /**
                 * All problem here
                 * As i understand right i need send seq number on subscribe
                 * and start recive data from that number
                 * But i recive data with another numbers -(
                 */
                $session->subscribe('USDT_BTC', $marketEvent, ['seq' => $this->orderbooks['seq']]);
    
            });
    
            $client->on('close', function ($reason){
                $this->log->info("Соединение с Web socket было закрыто со стороны сервера, причина: $reason");
            });
    
            $client->on('error', function ($errorUri){
                $this->log->error("Произошла ошибка во время синхронизации по Web socket, причина: $errorUri");
                exit;
            });
    
    
            $client->start();
        }
    }
    

This is script log:

    ./poloniex-sync.php
    PoloniexSyncCli.INFO: Sync poloniex data
    PoloniexSyncCli.INFO: Getting order book snapshot (REST API)
    PoloniexSyncCli.INFO: Seq: 106470819
    PoloniexSyncCli.INFO: Subscribe to feed (WAMP)
    Orderbook update: seq: 106307669, args count: 2
    Orderbook update: seq: 106307670, args count: 2
    Orderbook update: seq: 106307671, args count: 1
    Orderbook update: seq: 106307672, args count: 5
    Orderbook update: seq: 106307673, args count: 2
    Orderbook update: seq: 106307674, args count: 2
    Orderbook update: seq: 106307675, args count: 1
    Orderbook update: seq: 106307676, args count: 2
    Orderbook update: seq: 106307677, args count: 1
    Orderbook update: seq: 106307678, args count: 1
    Orderbook update: seq: 106307679, args count: 2
    Orderbook update: seq: 106307680, args count: 1
    Orderbook update: seq: 106307681, args count: 2
    Orderbook update: seq: 106307682, args count: 1
    Orderbook update: seq: 106307683, args count: 1
    Orderbook update: seq: 106307684, args count: 1

As you can see sequence number in snapshot is: 106470819 But sequence number recived from push API is not correlation with snapshot sequence number: 106307669, 106307670, ...

For working with WAMP i use Thruway. I read docs and googling, but can't found solution.

P.S. Now i think that i not understand right how poloniex api work -( P.P.S sorry for my ugly English. It is not my native


回答1:


The WAMP thing seems to be completely useless right now, but you're doing it wrong anyway: first you need to subscribe to the channel (you don't use any seq numbers for subscribing, just the channel name, e.g. BTC_ETH), start receiving the updates (with the seq numbers), and only get the orderbook through the REST API then, so you can immediately start updating it with the entries you're receiving through the WAMP connection (you can discard whatever you received with seq numbers before that from the full order book download.)




回答2:


(This should likely be a comment instead of an answer, but I can't post comments yet)

Poloniex seems to have a problem with their WAMP server. Not only are most of the streamed messages about 3 hours behind, sometimes they also come completely "out of sequence", with jump of 100'000 or more between a single pair. This has been raised to Poloniex support, but no response so far.



来源:https://stackoverflow.com/questions/44608482/how-to-up-to-date-poloniex-orderbook-via-push-api-wamp-protocol

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!