diff --git a/src/LaravelBitunixApi.php b/src/LaravelBitunixApi.php index 3da03b4..266fe56 100644 --- a/src/LaravelBitunixApi.php +++ b/src/LaravelBitunixApi.php @@ -3,10 +3,13 @@ namespace Msr\LaravelBitunixApi; use GuzzleHttp\Client; +use GuzzleHttp\Exception\GuzzleException; use Msr\LaravelBitunixApi\Requests\ChangeLeverageRequestContract; use Msr\LaravelBitunixApi\Requests\ChangeMarginModeRequestContract; use Msr\LaravelBitunixApi\Requests\FlashClosePositionRequestContract; use Msr\LaravelBitunixApi\Requests\FutureKLineRequestContract; +use Msr\LaravelBitunixApi\Requests\GetHistoryPositionsRequestContract; +use Msr\LaravelBitunixApi\Requests\GetHistoryTradesRequestContract; use Msr\LaravelBitunixApi\Requests\GetPendingPositionsRequestContract; use Msr\LaravelBitunixApi\Requests\GetSingleAccountRequestContract; use Msr\LaravelBitunixApi\Requests\GetTradingPairsRequestContract; @@ -16,14 +19,19 @@ use Msr\LaravelBitunixApi\Requests\PlacePositionTpSlOrderRequestContract; use Msr\LaravelBitunixApi\Requests\PlaceTpSlOrderRequestContract; use Psr\Http\Message\ResponseInterface; -class LaravelBitunixApi implements ChangeLeverageRequestContract, ChangeMarginModeRequestContract, FlashClosePositionRequestContract, FutureKLineRequestContract, GetPendingPositionsRequestContract, GetSingleAccountRequestContract, GetTradingPairsRequestContract, PlaceOrderRequestContract, PlacePositionTpSlOrderRequestContract, PlaceTpSlOrderRequestContract +class LaravelBitunixApi implements ChangeLeverageRequestContract, ChangeMarginModeRequestContract, + FlashClosePositionRequestContract, FutureKLineRequestContract, + GetPendingPositionsRequestContract, GetSingleAccountRequestContract, + GetTradingPairsRequestContract, PlaceOrderRequestContract, + PlacePositionTpSlOrderRequestContract, PlaceTpSlOrderRequestContract, + GetHistoryPositionsRequestContract, GetHistoryTradesRequestContract { private Client $publicFutureClient; public function __construct() { $this->publicFutureClient = new Client([ - 'base_uri' => config('bitunix-api.future_base_uri').'/api/v1/futures/market/', + 'base_uri' => config('bitunix-api.future_base_uri') . '/api/v1/futures/market/', ]); } @@ -33,13 +41,19 @@ class LaravelBitunixApi implements ChangeLeverageRequestContract, ChangeMarginMo $headers = Header::generateHeaders($queryParams, $bodyString); return new Client([ - 'base_uri' => config('bitunix-api.future_base_uri').'/api/v1/futures/', + 'base_uri' => config('bitunix-api.future_base_uri') . '/api/v1/futures/', 'headers' => $headers, ]); } - public function getFutureKline(string $symbol, string $interval, int $limit = 100, ?int $startTime = null, ?int $endTime = null, string $type = 'LAST_PRICE'): ResponseInterface - { + public function getFutureKline( + string $symbol, + string $interval, + int $limit = 100, + ?int $startTime = null, + ?int $endTime = null, + string $type = 'LAST_PRICE' + ): ResponseInterface { $response = $this->publicFutureClient->get('kline', [ 'query' => [ 'symbol' => $symbol, @@ -188,6 +202,48 @@ class LaravelBitunixApi implements ChangeLeverageRequestContract, ChangeMarginMo return $response; } + public function getHistoryTrades( + ?string $symbol = null, + ?string $orderId = null, + ?string $positionId = null, + ?int $startTime = null, + ?int $endTime = null, + int $skip = 0, + int $limit = 100 + ): ResponseInterface { + $queryParams = [ + 'skip' => $skip, + 'limit' => $limit, + ]; + + if ($symbol !== null) { + $queryParams['symbol'] = $symbol; + } + + if ($orderId !== null) { + $queryParams['orderId'] = $orderId; + } + + if ($positionId !== null) { + $queryParams['positionId'] = $positionId; + } + + if ($startTime !== null) { + $queryParams['startTime'] = $startTime; + } + + if ($endTime !== null) { + $queryParams['endTime'] = $endTime; + } + + $response = $this->getPrivateFutureClient($queryParams, [])->get('trade/get_history_trades', [ + 'query' => $queryParams, + ]); + + return $response; + } + + public function getPendingPositions(?string $symbol = null, ?string $positionId = null): ResponseInterface { $queryParams = []; @@ -207,6 +263,38 @@ class LaravelBitunixApi implements ChangeLeverageRequestContract, ChangeMarginMo return $response; } + /** + * @throws GuzzleException + */ + public function getHistoryPositions( + ?string $symbol = null, + ?int $startTime = null, + ?int $endTime = null, + int $skip = 0, + int $limit = 100 + ): ResponseInterface { + $queryParams = [ + 'skip' => $skip, + 'limit' => $limit, + ]; + + if ($symbol !== null) { + $queryParams['symbol'] = $symbol; + } + + if ($startTime !== null) { + $queryParams['startTime'] = $startTime; + } + + if ($endTime !== null) { + $queryParams['endTime'] = $endTime; + } + + return $this->getPrivateFutureClient($queryParams, [])->get('position/get_history_positions', [ + 'query' => $queryParams, + ]); + } + public function getSingleAccount(string $marginCoin): ResponseInterface { $queryParams = [ diff --git a/src/LaravelBitunixApiServiceProvider.php b/src/LaravelBitunixApiServiceProvider.php index 9e9aa0b..e72b2b4 100644 --- a/src/LaravelBitunixApiServiceProvider.php +++ b/src/LaravelBitunixApiServiceProvider.php @@ -8,6 +8,8 @@ use Msr\LaravelBitunixApi\Requests\ChangeLeverageRequestContract; use Msr\LaravelBitunixApi\Requests\ChangeMarginModeRequestContract; use Msr\LaravelBitunixApi\Requests\FlashClosePositionRequestContract; use Msr\LaravelBitunixApi\Requests\FutureKLineRequestContract; +use Msr\LaravelBitunixApi\Requests\GetHistoryPositionsRequestContract; +use Msr\LaravelBitunixApi\Requests\GetHistoryTradesRequestContract; use Msr\LaravelBitunixApi\Requests\GetPendingPositionsRequestContract; use Msr\LaravelBitunixApi\Requests\GetSingleAccountRequestContract; use Msr\LaravelBitunixApi\Requests\GetTradingPairsRequestContract; @@ -50,6 +52,8 @@ class LaravelBitunixApiServiceProvider extends PackageServiceProvider $this->app->bind(PlaceTpSlOrderRequestContract::class, LaravelBitunixApi::class); $this->app->bind(PlacePositionTpSlOrderRequestContract::class, LaravelBitunixApi::class); $this->app->bind(GetTradingPairsRequestContract::class, LaravelBitunixApi::class); + $this->app->bind(GetHistoryTradesRequestContract::class, LaravelBitunixApi::class); + $this->app->bind(GetHistoryPositionsRequestContract::class, LaravelBitunixApi::class); $this->app->bind(RateLimiterContract::class, function ($app) { return new CacheRateLimiter( diff --git a/src/Requests/GetHistoryPositionsRequestContract.php b/src/Requests/GetHistoryPositionsRequestContract.php new file mode 100644 index 0000000..11eba39 --- /dev/null +++ b/src/Requests/GetHistoryPositionsRequestContract.php @@ -0,0 +1,16 @@ +