Kline.php 3.3 KB
<?php

namespace trader\struct;

class Kline
{
    public $time; //k线开始时间
    public $open;
    public $high;
    public $low;
    public $close;
    public $vol;
    public $volQuote;
    public $uts; //k线更新时间
    public bool $isFinal;

    public function __construct($time, $open, $high, $low, $close, $vol, $volQuote, $uts, bool $isFinal)
    {
        $this->time = $time;
        $this->open = $open;
        $this->high = $high;
        $this->low = $low;
        $this->close = $close;
        $this->vol = $vol;
        $this->volQuote = $volQuote;
        $this->uts = $uts;
        $this->isFinal = $isFinal;
    }
    public function toArray()
    {
        return [
            'time' => $this->time,
            'open' => $this->open,
            'high' => $this->high,
            'low' => $this->low,
            'close' => $this->close,
            'vol' => $this->vol,
            'volQuote' => $this->volQuote,
            'uts' => $this->uts,
            'isFinal' => $this->isFinal,
        ];
    }
    public static function transferOkx($data)
    {
        $time = $data[0];
        $open = $data[1];
        $high = $data[2];
        $low = $data[3];
        $close = $data[4];
        if (count($data) > 6) {
            $vol = $data[6];
            $volQuote = $data[7];
        } else {
            $vol = 0;
            $volQuote = 0;
        }
        $isFinal = $data[8] == "1";
        return new Kline($time, $open, $high, $low, $close, $vol, $volQuote, $time, $isFinal);
    }
    public static function transferBinance($data)
    {
        $kline = $data['k'];
        $time = $kline['t'];
        $open = $kline['o'];
        $high = $kline['h'];
        $low = $kline['l'];
        $close = $kline['c'];
        $vol = $kline['v'];
        $volQuote = $kline['q'];
        $uts = $data['E'];
        $isFinal = $kline['x'];
        return new Kline($time, $open, $high, $low, $close, $vol, $volQuote, $uts, $isFinal);
    }
    public static function transferBinanceRest($data)
    {
        $time = $data[0];
        $open = $data[1];
        $high = $data[2];
        $low = $data[3];
        $close = $data[4];
        $vol = $data[5];
        $volQuote = $data[7];
        $uts = $data[0];
        $isFinal = true;
        return new Kline($time, $open, $high, $low, $close, $vol, $volQuote, $uts, $isFinal);
    }
    public static function transferBybit($data)
    {
        $kline = $data['data'][0];
        $time = $kline['start'];
        $open = $kline['open'];
        $high = $kline['high'];
        $low = $kline['low'];
        $close = $kline['close'];
        $vol = $kline['volume'];
        $volQuote = $kline['turnover'];
        $uts = $kline['timestamp'];
        $isFinal = $kline['confirm'];
        return new Kline($time, $open, $high, $low, $close, $vol, $volQuote, $uts, $isFinal);
    }
    public static function transferBitget($data)
    {
        $kline = $data['data'][0];
        $time = (int)($kline[0]);
        $open = (float)$kline[1];
        $high = (float)$kline[2];
        $low = (float)$kline[3];
        $close = (float)$kline[4];
        $vol = (float)$kline[5];
        $volQuote = (float)$kline[6];
        $uts = $data['ts'];
        $isFinal = $data['action'] == "snapshot";
        return new Kline($time, $open, $high, $low, $close, $vol, $volQuote, $uts, $isFinal);
    }
}