股市API 配资php二次开发

2019-09-01 23:33:49 admin 0

最近在做股票分析系统,数据获取源头成了一大问题,经过仔细的研究发现了很多获取办法,这里整理一下,方便后来者使用。

获取股票数据的源头主要有:数据超市、雅虎、新浪、Google、和讯、搜狐、ChinaStockWebService、东方财富客户端、证券之星、网易财经。

根据最近频繁出现的数据超市,可以无限制获取相关数据,而不再需要使用爬虫等方式获取,这样不仅节省了极大资源,也有利于遍历数据。

列出来相关网站清单,开发者可自行到这些网站查询调用方法。

聚合数据 https://www.juhe.cn/

百度API数据 http://apistore.baidu.com/

发源地 http://www.finndy.com/

笔者这里推荐使用聚合数据,其次配合百度API使用即可。

缺点:某些美国节假日数据会短缺;调用次数不能超过每分钟200次,否则会被警告并封锁IP地址;自定义列获取方法只能获取美股数据。

优点:数据最标准化,可以获取其他国家市场数据;返回数据类型可自定义组合。

返回结果:CSV格式的文件,返回列依次是“日期、开盘价、最高价、最低价、收盘价、成交量、复权价”。

其股票代码需要在末尾标记所属市场,如上证指数股票代码为600000.ss、深圳成指为399001.sz。

返回结果:CSV格式的文件,最后一个交易日的数据,列根据设定的自定义列返回。

例如:http://finance.yahoo.com/d/quotes.csv?s=TWTR&f=nt1,返回TWTR股票的名称和最后交易时间。

可封装APP     演示地址  http://117.48.206.60:9902

程序源码   供大家学习使用  

class Agent extends Admin{

    //模拟盘统计

    public function index(){

        cookie('__forward__', $_SERVER['REQUEST_URI']);

        // 获取查询条件

        $map = $this->getMap();

        $order = $this->getOrder();

        $data_list = Db::name('member')

            ->where($map)

            ->where('agent_id <>0')

            ->order($order)

            ->paginate()

            ->each(function($item, $key){

                $info = get_agents_info($item['agent_far']);

                $item['agent_far_name'] = $info['mobile'] ?  $info['mobile'] : config('web_site_title');

                $count = Db::name('agents_back_money')->where(['mid'=>$item['id']])->sum('affect');

                $item['count_profit'] = round($count,2);

                $item['agent_back_rate'] = get_plus_rate($item['id']).'%';

                return $item;

            });

1、投资策略匹配资金倍数灵活可选 

按天配资

按周配资

按月配资

免息配资


响应式网站定制

2、T+1/d交易、线上入金、实时开户实盘交易

3、自动计算利息/收取利息、自动结算、提现申请

4、T日买入T+1日卖出,只在买入时收取买入市值的综合手续费。T+1日未卖出,每交易日自动收取下一交易日延期费,实时盈亏后台可查阅,后台可人工强平。

<?php

namespace app\market\model;

use think\Model;

use think\Db;

class SubAccountMoney extends Model{

    // 设置当前模型对应的完整数据表名称

    protected $table = '__STOCK_SUBACCOUNT_MONEY__';

    // 自动写入时间戳

    protected $autoWriteTimestamp = true;

    public function get_account_money($subaccount_id){

        $result=Db::name('stock_subaccount_money')->field(true)->where(['stock_subaccount_id'=>$subaccount_id])->find();

        if(empty($result))return null;

        return $result;

    }

    public function get_account_money_inf($subaccount_id){

        $result=Db::view('stock_subaccount_money m')

            ->view('stock_subaccount_risk r','loss_warn,loss_close,renewal','r.stock_subaccount_id=m.stock_subaccount_id','left')

            ->view('stock_borrow b','type,init_money,borrow_money,deposit_money,end_time,id as borrow_id,status as b_status','b.stock_subaccount_id=m.stock_subaccount_id','left')

            ->where(['m.stock_subaccount_id'=>$subaccount_id])

            ->find();

        if(isset($result['b_status'])&&$result['b_status']===2){

            $result['available_amount']=0;

        }

        $result['init_money'] = $result['init_money'] /100;

        $result['loss_warn_money'] = ($result['borrow_money']+$result['loss_warn'] * $result['deposit_money'] /100)/100;

        $result['loss_close_money'] = ($result['borrow_money']+$result['loss_close'] * $result['deposit_money']/100)/100;

        $result['end_time']=date('Y-m-d H:i:s',$result['end_time']);

        if(empty($result))return null;

        return $result;

    }

    public  function up_moneylog($sub_id,$affect_money,$type,$return_money=0,$Balance=0,$code="600000"){

        $vm=Db::name('stock_subaccount_money')->lock(true)->field(true)->where(['stock_subaccount_id'=>$sub_id])->find();

        if(empty($vm)){return false;}

        //$nowTime = time();

        switch ($type){

            case 1://购买股票扣款

                if($vm['avail']<$affect_money){return false;}

                $mmoney['avail'] = $vm['avail']-$affect_money;

                $fee=$affect_money/100;

                self::record($sub_id,$affect_money,$mmoney['avail'],1,"(-)购买股票扣款,可用减少".$fee."元");

                break;

            case 2://卖出股票回款

                $mmoney['avail'] = $vm['avail']+$affect_money;

                $mmoney['return_money'] = $vm['return_money']+$return_money;

                $mmoney['return_rate']=$mmoney['return_money']/$vm['deposit_money']*100;

                $mmoney['available_amount'] = $vm['available_amount']+$return_money;//将盈亏加到可提盈字段

                $fee=$affect_money/100;

                self::record($sub_id,$affect_money,$mmoney['avail'],2,"(+)卖出股票回款,可用增加".$fee."元");

                break;

            case 3://实盘或限价购买股票扣款

                if($vm['avail']<$affect_money){return false;}

                $mmoney['avail'] = $vm['avail']-$affect_money;

                $mmoney['freeze_amount'] = $vm['freeze_amount']+$affect_money;

                $fee=$affect_money/100;

                self::record($sub_id,$affect_money,$mmoney['avail'],3,"(-)购买股票扣款,可用减少".$fee."元");

                break;

            case 4://实盘卖出股票回款

                $mmoney['freeze_amount'] = $vm['freeze_amount']+$affect_money;

                self::record($sub_id,$affect_money,$vm['avail'],4,"(=)卖出股票回款");

                break;

            case 5://实盘或限价卖出成功解除冻结

                $mmoney['avail'] = $vm['avail']+$affect_money+$Balance;

                $mmoney['freeze_amount'] = $vm['freeze_amount']-$affect_money;

                $mmoney['return_money'] = $vm['return_money']+$return_money;

                $mmoney['return_rate']=$mmoney['return_money']/($vm['deposit_money']/100);

                $mmoney['available_amount'] = $vm['available_amount']+$return_money;//将盈亏加到可提盈字段

                $fee=round(($Balance+$affect_money)/100,2);

                self::record($sub_id,$affect_money,$mmoney['avail'],5,"(+)卖出成功解除冻结,可用增加".$fee."元");

                break;

            case 6://实盘买入成功解除冻结

                $mmoney['avail'] = $vm['avail']+$Balance;

                $mmoney['freeze_amount'] = $vm['freeze_amount']-$affect_money;

                $fee=round($Balance/100,2);

                self::record($sub_id,$affect_money,$mmoney['avail'],6,"(+)买入成功解除冻结,可用增加".$fee."元");

                break;

            case 7://在子账户保证金中扣费用

                $mmoney['deposit_money'] = $vm['deposit_money']-$affect_money;

                self::record($sub_id,$affect_money,$vm['avail'],7,"(=)扣费用,可用不变");

                break;

            case 8://购买股票撤单

                $mmoney['avail'] = $vm['avail']+$affect_money;

                $mmoney['freeze_amount'] = $vm['freeze_amount']-$affect_money;

                $fee=$affect_money/100;

                self::record($sub_id,$affect_money,$mmoney['avail'],8,"(+)撤单解除冻结,可用增加".$fee."元");

                break;

            case 9://卖出股票撤单

                $mmoney['avail']=$vm['avail'];

                $mmoney['freeze_amount'] = $vm['freeze_amount']-$affect_money;

                self::record($sub_id,$affect_money,$mmoney['avail'],9,"(=)卖出撤单解除冻结,可用不变");

                break;

            case 10://追加保证金

                $mmoney['avail']=$vm['avail']+$affect_money;

                $mmoney['stock_addmoney'] = $vm['stock_addmoney']+$affect_money;

                $fee=$affect_money/100;

                self::record($sub_id,$affect_money,$mmoney['avail'],10,"(+)用户追加保证金,可用增加".$fee."元");

                break;

            case 11://扩大配资

                $applyMoney=$return_money;

                $mmoney['avail']=$vm['avail']+$affect_money+$applyMoney;

                $mmoney['deposit_money'] = $vm['deposit_money']+$affect_money;

                $mmoney['borrow_money'] = $vm['borrow_money']+$applyMoney;

                $mmoney['stock_addfinancing']=$vm['stock_addfinancing'] + $affect_money;

                $fee=($applyMoney+$affect_money)/100;

                self::record($sub_id,$affect_money,$mmoney['avail'],11,"(+)用户扩大配资,可用增加".$fee."元");

                break;

            case 12://提取盈利

                $mmoney['avail']=$vm['avail']-$affect_money;

                $mmoney['available_amount'] = $vm['available_amount']-$affect_money;

                $mmoney['stock_drawprofit'] = $vm['stock_drawprofit']+$affect_money;

                $fee=$affect_money/100;

                self::record($sub_id,$affect_money,$mmoney['avail'],12,"(-)用户提取盈利,可用减少".$fee."元");

                break;

            case 13://股票分红

                $mmoney['avail']=$vm['avail']+$affect_money;

                $fee=$affect_money/100;

                self::record($sub_id,$affect_money,$mmoney['avail'],13,"(+)用户股票".$code."分红,可用增加".$fee."元");

                break;

            case 15://收取股票红利税

                $mmoney['avail']=$vm['avail']-$affect_money;

                $fee=$affect_money/100;

                self::record($sub_id,$affect_money,$mmoney['avail'],15,"(-)用户股票".$code."分红代扣利息税,可用减少".$fee."元");

                break;

            default:

                return false;

        }

        $ret=Db::name('stock_subaccount_money')->where(['stock_subaccount_id'=>$sub_id])->update($mmoney);

        return $ret;

    }

    public static function record($sub_id,$affect_money,$account,$type,$info){

        $record['sub_id'] = $sub_id;

        $record['affect'] = $affect_money;

        $record['account'] = $account;

        $record['type'] = $type;

        $record['info'] = $info;

        $record['create_time'] = time();

        $record['create_ip'] = get_client_ip(1);

        $res=Db::name('stock_submoney_record')->insert($record);

        return $res;

    }

    //子账户资金单位由分转为元

    public static function ftoy($res){

        if(!empty($res)) {

            $res["min_commission"] = money_convert($res["min_commission"]);

            $res["avail"] = money_convert($res["avail"]);

            $res["available_amount"] = money_convert($res["available_amount"]);

            $res["freeze_amount"] = money_convert($res["freeze_amount"]);

            $res["return_money"] = money_convert($res["return_money"]);

            //$res["return_rate"] = money_convert($res["return_rate"]);

            $res["deposit_money"] = money_convert($res["deposit_money"]);

            $res["borrow_money"] = money_convert($res["borrow_money"]);

            $res["stock_addfinancing"] = money_convert($res["stock_addfinancing"]);

            $res["stock_addmoney"] = money_convert($res["stock_addmoney"]);

            $res["stock_drawprofit"] = money_convert($res["stock_drawprofit"]);

        }

        return $res;

    }

}

响应式网站定制


响应式网站定制


响应式网站定制
响应式网站定制


响应式网站定制
响应式网站定制
响应式网站定制

数据接口使用的是 新浪和腾讯的

if (!function_exists('sina_market')) {

function sina_market($code)

{

$d = fenxi($code);

$randm = time() . mt_rand(100, 999);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://hq.sinajs.cn/rn=' . $randm . '&list=' . $d . ',' . $d . '_i');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HEADER, 0);

$output = curl_exec($ch);

curl_close($ch);

$pos = strpos($output, '=') + 2;

$output = substr($output, $pos, -3);

$t2 = explode(',', mb_convert_encoding($output, 'utf-8', 'gbk'));

$t2[32] = $t2[0];

$t2[0] = $d;

return $t2;

}

}

if (!function_exists('qq_market')) {

function qq_market($code)

{

$d = fenxi($code);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://qt.gtimg.cn/q=' . $d);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HEADER, 0);

$output = curl_exec($ch);

curl_close($ch);

$t2 = explode('~', mb_convert_encoding($output, 'utf-8', 'gbk'));

$t2[0] = substr($t2[0], 2, 8);

return $t2;

}

}

演示网址  http://117.48.206.60:9902

技术交流、支持 QQ 2446503032