php 汇率接口,PHP 对交易对汇率 转换
业务需求 nuls_bx 交易对牟定盘口做市
但是要求牟定 bx_usdt 主流交易对, 真实晕 写了个递归 经过测试可用 转换路径如下
nuls_btc btc_usdt bx_eth eth_usdt 经过 四个交易对 转换成目标交易对 汇率<?php
// 都需要对标 bx_usdt
$symbol = 'nuls_coin';
$benchmarkSymbolList = ['nuls_btc' , 'btc_usdt', 'coin_usdt'];
$benchmarkData = [
'nuls_btc' => [
'0.00015635',
'0.00015832',
],
// 'coin_btc' => [
// '0.00000278', // 买
// '0.00002329', // 卖
// ],
'btc_usdt' => [
'3995.00',
'3998.01',
],
'coin_usdt' => [
'0.0924',
'0.1926',
]
];
// $symbol = 'eos_bx';
// $benchmarkSymbolList = ['eos_usdt', 'bx_usdt'];
// $benchmarkData = [
// 'eos_usdt' => [
// 3.6627,
// 3.6549
// ],
// 'bx_usdt' =>[
// 0.1022,
// 0.1011
// ]
// ];
/**
* @des 交易对检测函数
* @param $symbol
* @param $checkSymbolList
* @return bool
* ------------------------------------------------------------
*/
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;
}
/**
* @des 调用递归
* @param $symbol
* @param $benchmarkSymbolList
* @param $benchmarkData
* @return array
* ------------------------------------------------------------
*/
function integrateRateToBenchMarkPrice($symbol, $benchmarkSymbolList, $benchmarkData)
{
// 选择对标方向
list($coinFrom, $coinTo) = explode('_', $symbol);
// 效验交易对是否正确
if (!checkSymbolList($symbol, $benchmarkSymbolList)) return [];
return rateSymbolConversion($coinFrom, $coinTo, $benchmarkSymbolList, $benchmarkData);
}
/**
* @des 多交易对汇率转换 递归
* @param $coinFrom
* @param $coinTo
* @param $benchmarkSymbolList
* @param $benchmarkData
* @param array $params
* @return array
* ------------------------------------------------------------
*/
function rateSymbolConversion($coinFrom, $coinTo, $benchmarkSymbolList, $benchmarkData, $params = [])
{
// 容错 异常跳出递归
if (!$benchmarkSymbolList) return $params;
// 转换后数据 nuls_usdt
$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);localhost:Desktop admin$ php test.php
# 执行顺序
nuls_btc => null nuls
btc_usdt => from btc
bz_usdt => to usdt
askBenchmark =>0.6324884000 0.1926 bidBenchmark => 0.6250888635 0.0924
array (
0 => '3.2455288862',
1 => '6.8451125541',
2 => 'coin',
)
php 汇率接口,PHP 对交易对汇率 转换相关推荐
- php环境下,两种汇率接口,已经测试通过
方法一:中国银行版本,简单粗暴 //中国银行汇率接口,简单粗暴 //参数pjname:1316美元1326欧元1314英镑 public function getExchangeRate() {$da ...
- 外汇汇率接口 java_基于java的货币汇率接口调用代码实例
基于java的货币汇率接口调用代码实例 基于JAVA 的货币汇率接口调用代码实例 代码描述:基于JAVA 的货币汇率接口调用代码实例 代码平台:聚合数据 import java.io.Buffered ...
- 基于php汇率接口调用实例,基于C#的汇率接口调用代码实例
基于C#的汇率接口调用代码实例 代码描述:基于C#的汇率接口调用代码实例 代码平台:聚合数据 using System; using System.Collections.Generic; using ...
- html汇率转换器,PHP_利用yahoo汇率接口实现实时汇率转换示例 汇率转换器,代码如下:
复制代码 代码如 - phpStudy...
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器 代码如下: function getExchangeRate($from_Currency,$to_Currency) { $amount = ...
- php 外汇实时更新接口,利用yahoo汇率接口实现实时汇率转换示例
代码如下:function getExchangeRate($from_Currency,$to_Currency) { $amount = urlencode($amount); $from_Cur ...
- 通达信交易系统接口实现自动交易策略的方法分享
在通达信交易系统接口中,有着比较独特的交易系统,在这个交易系统中,也有各种各样的自动交易策略,可以通过交易接口来实现预先设定好的策略来进行自动交易,从而提高交易者的投资效率. 下面向大家介绍其中几种自 ...
- 分享量化交易接口之网格交易的选股策略
分享量化交易接口之网格交易的选股策略: 1.低估值:PE<50 2.小市值:分行业按市值排列选市值小的30只 3.高波动:分行业在市值最小的30只中选出过去一年波动率最大的5只股票 4.更新持仓 ...
- 股票交易接口api自动交易-Java继承
股票交易接口api自动交易-Java继承 : 如果父类中的方法不确定如何进行{方法体}的实现,那么这就是一个抽象方法,abstract关键字修饰,不能直接new抽象类对象,必须子类继承我们的抽象对象, ...
- 通达信交易接口:让交易更高效
通达信是国内著名的股票交易软件,其交易接口可以让开发者通过编程的方式进行自动化交易.本文将介绍通达信交易接口的部分API参数和代码示例,并分享一个基于通达信交易接口实现的量化策略代码. 登录参数 登录 ...
- 支付宝接口 - 即时到账交易接口 对接 整理 1
支付宝官方开放平台接口说明: https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.Gp6DiG&treeId=62&a ...
最新文章
- 将一张100元的钞票换成1元、5元和10元的钞票,每种钞票至少一张,编写程序输出所有的换法,循环次数需要尽可能地少。
- 最好的浏览器排行榜_PG是最好的数据库;TiDB 4.0前瞻;SequoiaDB高可用原理;20c DG新特性... 数据库周刊第18期...
- 2015-12-18 学习心得
- oracle撤销管理的方法,Oracle9i中利用自动撤销管理的优点
- win10 安装selenium和使用
- Unity中的值传递与引用传递
- Java Object类的各个方法
- jqgrid本地数据例子_办公系统私有云公有云和本地化部署,你选哪个?
- 眼液蛋白水平或许可预测阿尔茨海默症
- C++仿Java反射机中字符串创建类的思想,初步实现
- C#LeetCode刷题之#766-托普利茨矩阵(Toeplitz Matrix)
- Python线程同步机制
- OpenCV:概述、结构和内容
- eclipse如何开发python
- ELK详解(十五)——ELK+Redis配置实战
- HiJson,一个json格式化查看工具
- Go | 限流器实现
- 数字图像信号-灰度内插
- 【数据结构】字符串 模式匹配算法的理解与实现 Brute Force算法(BF算法)与KMP算法 (C与C++分别实现)
- Java 最全的英文单词单数复数形式转换
热门文章
- 时间序列学习(5):ARMA模型定阶(AIC、BIC准则、Ljung-Box检验)
- 微信云控的大触来一下
- TVS管选型详细流程
- 小狼毫 Rime 输入法任务导向式常用参数修改指南
- 2019年华为JAVA面试题系列
- python 无法定位程序输入点_系统提示无法定位程序输入点于动态链接库的解决方案【图文】-太平洋电脑网PConline-太平洋电脑网...
- 浏览器获取京东cookie教程
- mysql 备份数据库
- 【历史上的今天】1 月 5 日:正则表达式的发明人出生;英特尔发布酷睿系列;Microsoft Bob 诞生
- PPL文档——Excel制作的甘特图加上动态今日线