<?php
$symbol = 'nuls_coin'; $benchmarkSymbolList = ['nuls_btc' , 'btc_usdt', 'coin_usdt'];
$benchmarkData = [
'nuls_btc' => [ '0.00015635', '0.00015832', ],
'btc_usdt' => [ '3995.00', '3998.01', ], 'coin_usdt' => [ '0.0924', '0.1926', ] ];
function checkSymbolList($symbol, $checkSymbolList) { list($coinFrom, $coinTo) = explode('_', $symbol);
$coinList = []; foreach ($checkSymbolList as $checkSymbol) {
list($cFrom, $cTo) = explode('_', $checkSymbol);
$coinList[$cFrom] = isset($coinList[$cFrom]) ? $coinList[$cFrom] + 1 : 1; $coinList[$cTo] = isset($coinList[$cTo]) ? $coinList[$cTo] + 1 : 1; }
if (empty($coinList[$coinFrom]) || $coinList[$coinFrom] != 1 || empty($coinList[$coinTo]) || $coinList[$coinTo] != 1) { return false; }
unset($coinList[$coinFrom], $coinList[$coinTo]);
if (max($coinList) != 2 || min($coinList) != 2) { return false; }
return true; }
function integrateRateToBenchMarkPrice($symbol, $benchmarkSymbolList, $benchmarkData) { list($coinFrom, $coinTo) = explode('_', $symbol);
if (!checkSymbolList($symbol, $benchmarkSymbolList)) return [];
return rateSymbolConversion($coinFrom, $coinTo, $benchmarkSymbolList, $benchmarkData); }
function rateSymbolConversion($coinFrom, $coinTo, $benchmarkSymbolList, $benchmarkData, $params = []) { if (!$benchmarkSymbolList) return $params;
$askConversion = $params[0] ?? 0; $bidConversion = $params[1] ?? 0; $conversionCoin = $params[2] ?? '';
foreach ($benchmarkSymbolList as $k => $benchmarkSymbol) {
list($from, $to) = explode('_', $benchmarkSymbol);
list($bidBenchmark, $askBenchmark) = $benchmarkData[$benchmarkSymbol]; if ($conversionCoin == $from) { unset($benchmarkSymbolList[$k]); $askNewBenchmark = bcmul($askConversion, $askBenchmark, 10); $bidNewBenchmark = bcmul($bidConversion, $bidBenchmark, 10);
echo $benchmarkSymbol ,' => from ', $conversionCoin,PHP_EOL;
return rateSymbolConversion($coinFrom, $coinTo, $benchmarkSymbolList, $benchmarkData, [$bidNewBenchmark, $askNewBenchmark, $to]); } else if ($conversionCoin == $to) {
unset($benchmarkSymbolList[$k]);
echo $benchmarkSymbol ,' => to ', $conversionCoin, PHP_EOL;
echo 'askBenchmark =>',$askConversion,' ', $askBenchmark, ' bidBenchmark => ', $bidConversion,' ', $bidBenchmark, PHP_EOL;
$askNewBenchmark = bcdiv($askConversion, $bidBenchmark, 10); $bidNewBenchmark = bcdiv($bidConversion, $askBenchmark, 10); return rateSymbolConversion($coinFrom, $coinTo, $benchmarkSymbolList, $benchmarkData, [$bidNewBenchmark, $askNewBenchmark, $from]); }
if ($coinFrom == $from) {
if (!$params) { unset($benchmarkSymbolList[$k]);
echo $benchmarkSymbol ,' => null ', $coinFrom, PHP_EOL;
return rateSymbolConversion($coinFrom, $coinTo, $benchmarkSymbolList, $benchmarkData, [$bidBenchmark, $askBenchmark, $to]); }
} }
return $params; }
$data = integrateRateToBenchMarkPrice($symbol, $benchmarkSymbolList, $benchmarkData); var_export($data);
|