Files
li 1b24994e74 feat: 后端全量更新 - 含所有本次需求
- Contract.php: 返回合约账户余额(balance_contract)
- My.php: 地址管理增加BTC/ETH
- AppContract.php: 一键平仓(closeall)
- AppProxy.php: 代理专属注册链接 + 分级权限(L1/L2)
- site.php: 手续费减半(0.018→0.009)
- agent_permission_setup.sql: 代理权限SQL
- crypto_news_crawler.py: 新闻自动采集脚本
2026-03-30 20:16:32 +08:00

844 lines
36 KiB
PHP
Executable File

<?php
namespace app\api\controller;
use app\common\controller\Api;
use fast\Random;
use think\Db;
use think\Config;
use function fast\e;
/**
* 币币交易
*/
class TaskTrade extends Api
{
protected $noNeedLogin = ['*'];
protected $noNeedRight = ['*'];
public function millisecondWay(){
list($s1, $s2) = explode(' ', microtime());
return (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) * 1000);
}
public function get_redis()
{
$redis = getRedis();
$time_str = strtotime(date("Y-m-d H:i"));
$key = 'aeusdt-'.$time_str;
$test1 = $redis->get($key);
$key2 = 'aeusdt-'.($time_str-60);
$test2 = $redis->get($key2);
$key3 = 'aeusdt-'.($time_str-120);
$test3 = $redis->get($key3);
$key4 = 'aeusdt-'.($time_str-240);
$test4 = $redis->get($key4);
var_dump($test1,$test2,$test3,$test4);
}
/**
* 获取最新K线
*/
public function get_kline($id)
{
$release = Db::name("app_curr_release")->where("id",$id)->find();
if($release['status'] == 1 || $release['status'] == 0){
echo "未上架";exit;
}
$rate = Db::name("app_rate")->where("symbol",$release['symbol'])->find();
$hour = date('H');
$minute = date('i');$buy_price=0;$sell_price=0;
$pricearr = [];
$tradejson = json_decode($release['tradectrl_json'],true);
$trademulte_json = json_decode($release['trademulte_json'],true);
if($tradejson) {
foreach ($tradejson as $kk => $vv) {
$time1 = explode('-', $kk);
$time2 = explode(':', $time1[0]);
$time3 = explode(':', $time1[1]);
$pricearrs = explode('-', $vv);
if ($hour >= $time2[0] && $hour <= $time3[0]) {
if (($hour == $time3[0] && $minute > $time3[1]) || ($hour == $time2[0] && $minute < $time2[1])) continue;
$pricearr = $pricearrs;
break;
}
}
}
if($trademulte_json && empty($pricearr)){
foreach ($trademulte_json as $kk => $vv) {
$time1 = explode('-', $kk);
$time2 = explode(':', $time1[0]);
$time3 = explode(':', $time1[1]);
// $pricearrs = explode('-', $vv);
if ($hour >= $time2[0] && $hour <= $time3[0]) {
if (($hour == $time3[0] && $minute > $time3[1]) || ($hour == $time2[0] && $minute < $time2[1])) continue;
$datass = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=1min&size=1&symbol='.$release['symbol'],'get'),true);
if(!$datass || !isset($datass['data']) || empty($datass['data']))
{
var_dump($datass);exit;
}
$rate['close'] = $datass['data'][0]['close'] * $vv;
$buy_price = $datass['data'][0]['low'] * $vv;
$sell_price = $datass['data'][0]['high'] * $vv;
$new_price = $rate['close'];
// var_dump($vv,'-----');
break;
}
}
}
$new_price = $rate['close'];
if($pricearr){
$price = (float)$this->randomFloat($pricearr[0], $pricearr[1], 4);
if ($price > 0) {
$new_price = $price;
}
$buy_price = $pricearr[0];
$sell_price = $pricearr[1];
}
// var_dump($new_price,$sell_price,$buy_price);exit;
if($release['is_tk'] == 0 || $buy_price==0 || $sell_price==0){
//未调控价格
//1分钟
$data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=1min&size=2&symbol='.$release['symbol'],'get'),true);
if(!$data || !isset($data['data']) || empty($data['data']))
{
var_dump($data);exit;
}else {
$data1 = $data['data'];
unset($data1[0]);//去掉最新一条
$datas = array_column($data1, 'id');
array_multisort($datas, SORT_ASC, $data1);
$last_kline = Db::name("bb_k_1min")->where("symbol",$release['symbol'])->order("ts desc")->find();
$insert = [];
foreach ($data1 as $key => $value) {
if(empty($last_kline) || $last_kline['ts'] < $value['id']){
$insert[] = [
'symbol' => $release['symbol'],
'ts' => $value['id'],
'open' => $value['open'],
'close' => $value['close'],
'low' => $value['low'],
'high' => $value['high'],
'vol' => $value['vol'],
'count' => $value['count'],
];
}
}
if(!empty($insert))
{
Db::name('bb_k_1min')->insertAll($insert);
echo "1min";
}
}
//5分钟
$data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=5min&size=2&symbol='.$release['symbol'],'get'),true);
if(!$data || !isset($data['data']) || empty($data['data']))
{
var_dump($data);exit;
}else {
$data1 = $data['data'];
unset($data1[0]);//去掉最新一条
$datas = array_column($data1, 'id');
array_multisort($datas, SORT_ASC, $data1);
$last_kline = Db::name("bb_k_5min")->where("symbol",$release['symbol'])->order("ts desc")->find();
$insert = [];
foreach ($data1 as $key => $value) {
if((empty($last_kline) || $last_kline['ts'] < $value['id']) && $value['id']<=time()){
$insert[] = [
'symbol' => $release['symbol'],
'ts' => $value['id'],
'open' => $value['open'],
'close' => $value['close'],
'low' => $value['low'],
'high' => $value['high'],
'vol' => $value['vol'],
'count' => $value['count'],
];
}
}
if(!empty($insert))
{
Db::name('bb_k_5min')->insertAll($insert);
echo "5min";
}
}
//15分钟
$data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=15min&size=2&symbol='.$release['symbol'],'get'),true);
if(!$data || !isset($data['data']) || empty($data['data']))
{
var_dump($data);exit;
}else {
$data1 = $data['data'];
unset($data1[0]);//去掉最新一条
$datas = array_column($data1, 'id');
array_multisort($datas, SORT_ASC, $data1);
$last_kline = Db::name("bb_k_15min")->where("symbol",$release['symbol'])->order("ts desc")->find();
$insert = [];
foreach ($data1 as $key => $value) {
if((empty($last_kline) || $last_kline['ts'] < $value['id']) && $value['id']<=time()){
$insert[] = [
'symbol' => $release['symbol'],
'ts' => $value['id'],
'open' => $value['open'],
'close' => $value['close'],
'low' => $value['low'],
'high' => $value['high'],
'vol' => $value['vol'],
'count' => $value['count'],
];
}
}
if(!empty($insert))
{
Db::name('bb_k_15min')->insertAll($insert);
echo "15min";
}
}
//30分钟
$data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=30min&size=2&symbol='.$release['symbol'],'get'),true);
if(!$data || !isset($data['data']) || empty($data['data']))
{
var_dump($data);exit;
}else {
$data1 = $data['data'];
unset($data1[0]);//去掉最新一条
$datas = array_column($data1, 'id');
array_multisort($datas, SORT_ASC, $data1);
$last_kline = Db::name("bb_k_30min")->where("symbol",$release['symbol'])->order("ts desc")->find();
$insert = [];
foreach ($data1 as $key => $value) {
if((empty($last_kline) || $last_kline['ts'] < $value['id']) && $value['id']<=time()){
$insert[] = [
'symbol' => $release['symbol'],
'ts' => $value['id'],
'open' => $value['open'],
'close' => $value['close'],
'low' => $value['low'],
'high' => $value['high'],
'vol' => $value['vol'],
'count' => $value['count'],
];
}
}
if(!empty($insert))
{
Db::name('bb_k_30min')->insertAll($insert);
echo "30min";
}
}
//60分钟
$data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=60min&size=2&symbol='.$release['symbol'],'get'),true);
if(!$data || !isset($data['data']) || empty($data['data']))
{
var_dump($data);exit;
}else {
$data1 = $data['data'];
unset($data1[0]);//去掉最新一条
$datas = array_column($data1, 'id');
array_multisort($datas, SORT_ASC, $data1);
$last_kline = Db::name("bb_k_1h")->where("symbol",$release['symbol'])->order("ts desc")->find();
$insert = [];
foreach ($data1 as $key => $value) {
if((empty($last_kline) || $last_kline['ts'] < $value['id']) && $value['id']<=time()){
$insert[] = [
'symbol' => $release['symbol'],
'ts' => $value['id'],
'open' => $value['open'],
'close' => $value['close'],
'low' => $value['low'],
'high' => $value['high'],
'vol' => $value['vol'],
'count' => $value['count'],
];
}
}
if(!empty($insert))
{
Db::name('bb_k_1h')->insertAll($insert);
echo "1h";
}
}
//24小时
$data = json_decode(http_curl('https://api.huobi.pro/market/history/kline?period=1day&size=1&symbol='.$release['symbol'],'get'),true);
if(!$data || !isset($data['data']) || empty($data['data']))
{
var_dump($data);exit;
}else {
$data1 = $data['data'];
$first = $data1[0];
$rate_update = [
'open' => $first['open'],
'close' => $first['close'],
'low' => $first['low'],
'high' => $first['high'],
'usdt' => $first['close'],
'rmb' => $first['close']*6.4,
];
$rate_update['increase'] = sprintf('%.4f',($rate_update['close']-$rate_update['open'])/$rate_update['open']);
Db::name("app_rate")->where("symbol",$release['symbol'])->update($rate_update);
Db::name("app_currency")->where("suffix",$release['symbol'])->update(['exchange'=>$rate_update['close']]);
// unset($data1[0]);//去掉最新一条
$datas = array_column($data1, 'id');
array_multisort($datas, SORT_ASC, $data1);
$last_kline = Db::name("bb_k_24h")->where("symbol",$release['symbol'])->order("ts desc")->find();
$insert = [];
foreach ($data1 as $key => $value) {
if(empty($last_kline)){
$insert[] = [
'symbol' => $release['symbol'],
'ts' => $value['id'],
'open' => $rate['close'],
'close' => $rate['close'],
'low' => $rate['close'],
'high' => $rate['close'],
'vol' => 0,
'count' => 0,
];
}elseif($last_kline['ts'] < $value['id']){
$insert[] = [
'symbol' => $release['symbol'],
'ts' => $value['id'],
'open' => $value['open'],
'close' => $value['close'],
'low' => $value['low'],
'high' => $value['high'],
'vol' => $value['vol'],
'count' => $value['count'],
];
}
}
if(!empty($insert))
{
Db::name('bb_k_24h')->insertAll($insert);
echo "24h";
}
}
}else{
$redis = getRedis();
$time_str = strtotime(date("Y-m-d H:i"));
$key = $rate['symbol'].'-'.$time_str;
$now_price = $redis->get($key);
$key2 = $rate['symbol'].'-'.($time_str-60);
$befor_price = $redis->get($key2);
// var_dump($redis->get("nearusdt"));exit;
//1分钟
$last_kline = Db::name("bb_k_1min")->where("symbol",$release['symbol'])->order("ts desc")->find();
$last_time = $time_str-0;
if(empty($last_kline)){
if($rate['open']>$rate['close']){
$low = $rate['close'];
$high = $rate['open'];
}else{
$low = $rate['open'];
$high = $rate['close'];
}
$insert = [
'symbol' => $release['symbol'],
'ts' => $last_time,
'open' => $rate['open'],
'close' => $rate['close'],
'low' => $low,
'high' => $high,
'vol' => 0,
'count' => 0,
];
Db::name("bb_k_1min")->insert($insert);
}else{
if($last_time>$last_kline['ts']){
if($befor_price){
if($last_kline['vol']){
$vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000);
}else{
$vol = rand(100, 999);
}
$insert = [
'symbol' => $release['symbol'],
'ts' => $last_time,
'open' => $last_kline['close'],
'close' => $befor_price,
'low' => $buy_price,
'high' => $sell_price,
'vol' => $vol,
'count' => rand(1, 10),
];
}else{
$close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000);
$insert = [
'symbol' => $release['symbol'],
'ts' => $last_time,
'open' => $last_kline['close'],
'close' => $new_price,
'low' => $buy_price,
'high' => $sell_price,
'vol' => rand(100, 999),
'count' => rand(1, 10),
];
}
$insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low'];
$insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high'];
Db::name("bb_k_1min")->insert($insert);
echo "1min";
}
}
//5fen
$last_kline = Db::name("bb_k_5min")->where("symbol",$release['symbol'])->order("ts desc")->find();
$k5 = $last_kline;
$kline_time = $last_kline['ts']+300;
$last_time = $time_str-0;
if(empty($last_kline)){
$ts = $last_time-($last_time%300);
if($rate['open']>$rate['close']){
$low = $rate['close'];
$high = $rate['open'];
}else{
$low = $rate['open'];
$high = $rate['close'];
}
$insert = [
'symbol' => $release['symbol'],
'ts' => $ts,
'open' => $rate['open'],
'close' => $rate['close'],
'low' => $low,
'high' => $high,
'vol' => 0,
'count' => 0,
];
Db::name("bb_k_5min")->insert($insert);
}elseif($last_time>=$kline_time){
if($befor_price){
if($last_kline['vol']){
$vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000);
}else{
$vol = rand(100, 999);
}
$insert = [
'symbol' => $release['symbol'],
'ts' => $kline_time,
'open' => $last_kline['close'],
'close' => $befor_price,
'low' => $buy_price,
'high' => $sell_price,
'vol' => $vol,
'count' => rand(10, 20),
];
}else{
$close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000);
$insert = [
'symbol' => $release['symbol'],
'ts' => $kline_time,
'open' => $last_kline['close'],
'close' => $new_price,
'low' => $buy_price,
'high' => $sell_price,
'vol' => rand(500, 3000),
'count' => rand(10, 20),
];
}
$insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low'];
$insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high'];
Db::name("bb_k_5min")->insert($insert);
echo "5min";
}
//15
$last_kline = Db::name("bb_k_15min")->where("symbol",$release['symbol'])->order("ts desc")->find();
$k15 = $last_kline;
$kline_time = $last_kline['ts']+900;
$last_time = $time_str-0;
if(empty($last_kline)){
$ts = $last_time-($last_time%900);
if($rate['open']>$rate['close']){
$low = $rate['close'];
$high = $rate['open'];
}else{
$low = $rate['open'];
$high = $rate['close'];
}
$insert = [
'symbol' => $release['symbol'],
'ts' => $ts,
'open' => $rate['open'],
'close' => $rate['close'],
'low' => $low,
'high' => $high,
'vol' => 0,
'count' => 0,
];
Db::name("bb_k_15min")->insert($insert);
}elseif($last_time>=$kline_time){
if($befor_price){
if($last_kline['vol']){
$vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000);
}else{
$vol = rand(100, 999);
}
$insert = [
'symbol' => $release['symbol'],
'ts' => $kline_time,
'open' => $last_kline['close'],
'close' => $befor_price,
'low' => $buy_price,
'high' => $sell_price,
'vol' => $vol,
'count' => rand(20, 50),
];
}else{
$close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000);
$insert = [
'symbol' => $release['symbol'],
'ts' => $kline_time,
'open' => $last_kline['close'],
'close' => $new_price,
'low' => $buy_price,
'high' => $sell_price,
'vol' => rand(3000, 8000),
'count' => rand(20, 50),
];
}
$insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low'];
$insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high'];
Db::name("bb_k_15min")->insert($insert);
echo "15min";
}
//30
$last_kline = Db::name("bb_k_30min")->where("symbol",$release['symbol'])->order("ts desc")->find();
$k30 = $last_kline;
$kline_time = $last_kline['ts']+1800;
$last_time = $time_str-0;
if(empty($last_kline)){
$ts = $last_time-($last_time%1800);
if($rate['open']>$rate['close']){
$low = $rate['close'];
$high = $rate['open'];
}else{
$low = $rate['open'];
$high = $rate['close'];
}
$insert = [
'symbol' => $release['symbol'],
'ts' => $ts,
'open' => $rate['open'],
'close' => $rate['close'],
'low' => $low,
'high' => $high,
'vol' => 0,
'count' => 0,
];
Db::name("bb_k_30min")->insert($insert);
}elseif($last_time>=$kline_time){
if($befor_price){
if($last_kline['vol']){
$vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000);
}else{
$vol = rand(100, 999);
}
$insert = [
'symbol' => $release['symbol'],
'ts' => $kline_time,
'open' => $last_kline['close'],
'close' => $befor_price,
'low' => $buy_price,
'high' => $sell_price,
'vol' => $vol,
'count' => rand(50, 100),
];
}else{
$close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000);
$insert = [
'symbol' => $release['symbol'],
'ts' => $kline_time,
'open' => $last_kline['close'],
'close' => $new_price,
'low' => $buy_price,
'high' => $sell_price,
'vol' => rand(8000, 20000),
'count' => rand(50, 100),
];
}
$insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low'];
$insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high'];
Db::name("bb_k_30min")->insert($insert);
echo "30min";
}
//60
$last_kline = Db::name("bb_k_1h")->where("symbol",$release['symbol'])->order("ts desc")->find();
$k60 = $last_kline;
$kline_time = $last_kline['ts']+3600;
$last_time = $time_str-0;
if(empty($last_kline)){
$ts = $last_time-($last_time%3600);
if($rate['open']>$rate['close']){
$low = $rate['close'];
$high = $rate['open'];
}else{
$low = $rate['open'];
$high = $rate['close'];
}
$insert = [
'symbol' => $release['symbol'],
'ts' => $ts,
'open' => $rate['open'],
'close' => $rate['close'],
'low' => $low,
'high' => $high,
'vol' => 0,
'count' => 0,
];
Db::name("bb_k_1h")->insert($insert);
}elseif($last_time>=$kline_time){
if($befor_price){
if($last_kline['vol']){
$vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000);
}else{
$vol = rand(100, 999);
}
$insert = [
'symbol' => $release['symbol'],
'ts' => $kline_time,
'open' => $last_kline['close'],
'close' => $befor_price,
'low' => $buy_price,
'high' => $sell_price,
'vol' => $vol,
'count' => rand(50, 100),
];
}else{
$close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000);
$insert = [
'symbol' => $release['symbol'],
'ts' => $kline_time,
'open' => $last_kline['close'],
'close' => $new_price,
'low' => $buy_price,
'high' => $sell_price,
'vol' => rand(8000, 20000),
'count' => rand(50, 100),
];
}
$insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low'];
$insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high'];
Db::name("bb_k_1h")->insert($insert);
echo "60min";
}
//1day
$last_kline = Db::name("bb_k_24h")->where("symbol",$release['symbol'])->order("ts desc")->find();
$kline_time = $last_kline['ts']+86400;
$last_time = $time_str-0;
if(empty($last_kline)){
$ts = $last_time-($last_time%86400);
if($rate['open']>$rate['close']){
$low = $rate['close'];
$high = $rate['open'];
}else{
$low = $rate['open'];
$high = $rate['close'];
}
$insert = [
'symbol' => $release['symbol'],
'ts' => $ts,
'open' => $rate['open'],
'close' => $rate['close'],
'low' => $low,
'high' => $high,
'vol' => 0,
'count' => 0,
];
Db::name("bb_k_24h")->insert($insert);
}elseif($last_time>=$kline_time){
if($befor_price){
if($last_kline['vol']){
$vol = sprintf("%.4f",$last_kline['vol']/2 + rand(1000, $last_kline['vol']*1000000)/1000000);
}else{
$vol = rand(100, 999);
}
$insert = [
'symbol' => $release['symbol'],
'ts' => $kline_time,
'open' => $last_kline['close'],
'close' => $last_kline['close'],
'low' => $last_kline['close'],
'high' => $last_kline['close'],
'vol' => $vol,
'count' => rand(1000, 2000),
];
}else{
$close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000);
$insert = [
'symbol' => $release['symbol'],
'ts' => $kline_time,
'open' => $last_kline['close'],
'close' => $last_kline['close'],
'low' => $last_kline['close'],
'high' => $last_kline['close'],
'vol' => rand(20000, 100000),
'count' => rand(1000, 2000),
];
}
$insert['low'] = $insert['low']>$insert['open']?$insert['open']:$insert['low'];
$insert['high'] = $insert['high']<$insert['open']?$insert['open']:$insert['high'];
Db::name("bb_k_24h")->insert($insert);
Db::name("app_rate")->where("symbol",$release['symbol'])->update(['open'=>$insert['close'],'close'=>$insert['close'],'low'=>$insert['close'],'high'=>$insert['close'],'increase'=>0,'amount'=>0]);
echo "24h";
}else{
//跟新今日K线
if($befor_price){
$close = $befor_price;
}else{
$close = sprintf("%.4f",rand($buy_price*10000, $sell_price*10000)/10000);
}
$update = array(
"close" => $close,
);
if($last_kline['low'] > $close){
$update['low'] = $close;
}
if($last_kline['high'] < $close){
$update['high'] = $close;
}
Db::name("bb_k_24h")->where("id",$last_kline['id'])->update($update);
}
if($now_price){
$rate_update = [
"close" => $now_price,
];
if($now_price > $rate['high']){
$rate_update['high'] = $now_price;
if($k5){
Db::name("bb_k_5min")->where("id",$k5['id'])->update(['high'=>$now_price]);
}
if($k15){
Db::name("bb_k_15min")->where("id",$k15['id'])->update(['high'=>$now_price]);
}
if($k30){
Db::name("bb_k_30min")->where("id",$k30['id'])->update(['high'=>$now_price]);
}
if($k60){
Db::name("bb_k_1h")->where("id",$k60['id'])->update(['high'=>$now_price]);
}
}
if($now_price < $rate['low']){
$rate_update['low'] = $now_price;
if($k5){
Db::name("bb_k_5min")->where("id",$k5['id'])->update(['low'=>$now_price]);
}
if($k15){
Db::name("bb_k_15min")->where("id",$k15['id'])->update(['low'=>$now_price]);
}
if($k30){
Db::name("bb_k_30min")->where("id",$k30['id'])->update(['low'=>$now_price]);
}
if($k60){
Db::name("bb_k_1h")->where("id",$k60['id'])->update(['low'=>$now_price]);
}
}
$rate_update['increase'] = sprintf('%.4f',($rate_update['close']-$rate['open'])/$rate['open']);
$rate_update['amount'] = $rate['amount']+rand(10,100);
Db::name("app_rate")->where("symbol",$release['symbol'])->update($rate_update);
Db::name("app_currency")->where("suffix",$release['symbol'])->update(['exchange'=>$rate_update['close']]);
echo "更新最新价:".$rate_update['close'];
}else{
$now_price = $new_price;
$rate_update = [
"close" => $now_price,
];
if($now_price > $rate['high']){
$rate_update['high'] = $now_price;
if($k30){
Db::name("bb_k_30min")->where("id",$k30['id'])->update(['high'=>$now_price]);
}
if($k60){
Db::name("bb_k_1h")->where("id",$k60['id'])->update(['high'=>$now_price]);
}
}
if($now_price < $rate['low']){
$rate_update['low'] = $now_price;
if($k30){
Db::name("bb_k_30min")->where("id",$k30['id'])->update(['low'=>$now_price]);
}
if($k60){
Db::name("bb_k_1h")->where("id",$k60['id'])->update(['low'=>$now_price]);
}
}
$rate_update['increase'] = sprintf('%.4f',($rate_update['close']-$rate['open'])/$rate['open']);
$rate_update['amount'] = $rate['amount']+rand(10,100);
Db::name("app_rate")->where("symbol",$release['symbol'])->update($rate_update);
Db::name("app_currency")->where("suffix",$release['symbol'])->update(['exchange'=>$rate_update['close']]);
echo "更新定义价:".$rate_update['close'];
}
}
echo "success";
}
//4位小数的随机数
public function randomFloat($min = 0, $max = 10 , $localnum = 4)
{
if($localnum == 4) {
if ($max - $min <= 0.0002) {
return 0;
}
$rand = mt_rand() / mt_getrandmax() * ($max - $min-0.0001);
$num = $min + $rand;
$number = sprintf("%.4f", $num);
if($number == $min){
$number += 0.0001;
}
}else if($localnum == 5){
if ($max - $min <= 0.00002) {
return 0;
}
$rand = mt_rand() / mt_getrandmax() * ($max - $min-0.00001);
$num = $min + $rand;
$number = sprintf("%.5f", $num);
if($number == $min){
$number += 0.00001;
}
}else if($localnum == 6){
if ($max - $min <= 0.000002) {
return 0;
}
$rand = mt_rand() / mt_getrandmax() * ($max - $min-0.000001);
$num = $min + $rand;
$number = sprintf("%.6f", $num);
if($number == $min){
$number += 0.000001;
}
}else if($localnum == 2){
if ($max - $min <= 0.02) {
return 0;
}
$rand = mt_rand() / mt_getrandmax() * ($max - $min-0.01);
$num = $min + $rand;
$number = sprintf("%.2f", $num);
if($number == $min){
$number += 0.01;
}
}else if($localnum == 3){
if ($max - $min <= 0.001) {
return 0;
}
$rand = mt_rand() / mt_getrandmax() * ($max - $min-0.001);
$num = $min + $rand;
$number = sprintf("%.3f", $num);
if($number == $min){
$number += 0.001;
}
}
return $number;
}
}