Example #1
0
/**
 * 保存一天的持仓记录
 * 累计计算,后续改成增量计算的,多个值计算
 *
 * 汇总头部见 dateconf[calcc]
 */
function saveDayN($jgrq, &$mon, &$totalr, &$zqrs, $checked = true)
{
    global $failedinfos;
    //获取股票当天价格
    //*
    $curcc = $mon->findByIndex('zjgf', array('date' => $jgrq), 10000, 0, array());
    foreach ($curcc as $k => $v) {
        if ($v['istotal'] == 1) {
            $okyye = $v[2] + 0;
            //可用余额
            $otzxsz = $v[3];
            //市值
        }
        $mmgu[$v[12]] = $v;
    }
    // */
    foreach ($zqrs as $k => $v) {
        $ids[] = $k . "_{$jgrq}";
    }
    $curcc = $mon->findByIndex('dayklineinfo', array('_id' => array('$in' => $ids)), 10000, 0, array());
    foreach ($curcc as $k => $v) {
        if ($v['istotal'] == 1) {
            $okyye = $v[2] + 0;
            //可用余额
            $otzxsz = $v[3];
            //市值
        }
        $infos[$v['zqdm']] = $v;
    }
    $tzxsz = 0;
    $tfdyk = 0;
    foreach ($zqrs as $k => $v) {
        $v['istotal'] = 0;
        $zqnum = $v[6];
        //证券数量
        $zxsz = 0;
        $fdyk = 0;
        $zqs = $v[8];
        //最终清算额度
        if ($zqnum != 0 && $v['pdate'] != $jgrq) {
            $info = $infos[$k];
            if (!$info && $failedinfos[$k] != 1) {
                $info = Crawler_Xueqiu::getGupiaoDay($k, $jgrq);
                //not coment after all callc
                if (!$info) {
                    echo "==getInfo failed {$k} " . $v[3] . "\n";
                    //不去尝试获取已经失败的
                    $failedinfos[$k] = 1;
                }
            }
            if ($info) {
                $v[4] = $info['close'];
                $v['pdate'] = $jgrq;
            }
        }
        if ($zqnum > 0) {
            //有的持仓
            $pre3zqdm = substr($k, 0, 3);
            if ($pre3zqdm == '204' || $pre3zqdm == '131') {
                $zxsz = 0 - $v[8];
                //回购市值用清算额
            } else {
                $zxsz = round($zqnum * $v[4], 3);
            }
            //echo $pre3zqdm." preddfd $zxsz\n";
            $v['cbj'] = round(-$zqs / $zqnum, 3);
            //if($otzxsz){
            //    $v['zcbl'] = round(100*$zxsz/$otzxsz,3);
            //}
        } elseif ($zqnum < 0) {
            //融券卖出的情况
            //暂时不处理
            //$zxsz = $zqs;
        } else {
            $zxsz = 0;
            $v[6] = 0;
            //设置为0,为显示
        }
        $fdyk = $v['fdyk'] = round($zqs + $zxsz, 3);
        //浮动盈亏
        $tfdyk += $fdyk;
        $tzxsz += $zxsz;
        $ljmr = $v['ljmr'];
        $v['zxsz'] = $zxsz;
        if ($zxsz != 0) {
            $v['ykbl'] = round($fdyk * 100 / $zxsz, 3);
        } elseif ($ljmr > 0) {
            //用累计投入做分母比较靠谱
            $v['ykbl'] = round($fdyk * 100 / $ljmr, 3);
        } else {
            // $v['ykbl'] = round($fdyk*100/$ljmr,3);
        }
        //$v[8] = round($v[8],3);
        if ($v['cdate']) {
            $v['chtime'] = App::dateDifference($v['cdate'], $v['ldate']);
        }
        //可以只存有改变的,为方便全部保存
        if ($v['ldate'] == $jgrq || $zqnum != 0) {
            //存一个最新的,保持id不变,用zero,保持一致,好添加评论
            $id = $k . '_zero';
            $v['date'] = 'lastest';
            $mon->findAndModify(array('_id' => $id), array('$set' => $v));
            if ($zqnum != 0) {
                $v['date'] = $jgrq;
                $id = $k . '_' . $jgrq;
                $mon->findAndModify(array('_id' => $id), array('$set' => $v));
            }
        }
    }
    $pretid = "total_{$jgrq}";
    $tr =& $totalr;
    //$tr[8] = round($tr[8],3);
    $tr['date'] = $jgrq;
    $kyye = $tr[8];
    $tr['zxsz'] = $tzxsz;
    //参考市值
    /*
        if($otzxsz)
            $tr['zxsz'] = $otzxsz;//参考市值
        else
            $tr['zxsz'] = $tzxsz;//参考市值
        if($okyye){
            $kyye = $okyye;
        }else{
            $kyye = $tr[8];
        }
    */
    $tr['rzye'] = round($tr['rzye'], 3);
    $tr['rqye'] = round($tr['rqye'], 3);
    $tr['kyye'] = $kyye;
    $tr['zc'] = $tr['zxsz'] + $kyye;
    //资产
    $touru = $tr['yinhangzr'] + $tr['yinhangzc'];
    $tr['yinhangtr'] = $touru;
    $tr['jsyk'] = $tr['zc'] - $touru - $tr['rzye'];
    //盈亏
    $tr['ljyk'] = $tfdyk;
    $tr['ykbl'] = round($tr['jsyk'] * 100 / $touru, 3);
    //没有处理融券余额
    $tr['cw'] = round($tr['zxsz'] * 100 / ($tr['zc'] - $tr['rzye']), 3);
    $tr['_id'] = $pretid;
    $tr['istotal'] = 1;
    //$mon->save($tr);
    $info = '';
    $info .= "{$jgrq}\n清算[{$tr[8]}]   可用 [{$kyye}] okyye[{$okyye}]\n";
    $info .= "融资余额 [{$tr['rzye']}]  融券卖出量[{$tr['rqye']}]\n";
    $info .= "市值o[{$otzxsz}]   累计 [{$tzxsz}]\n";
    $info .= "盈亏计算[{$tr['jsyk']}] 累计[{$tfdyk}]\n";
    $tr['_info'] = $info;
    $mon->findAndModify(array('_id' => $pretid), array('$set' => $tr));
    $tr['date'] = 'lastest';
    unset($tr['_id']);
    $mon->findAndModify(array('_id' => 'total_lastest'), array('$set' => $tr));
    $tr['date'] = $jgrq;
    echo "\n\n======\n{$info}";
}
Example #2
0
     $sort['istotal'] = -1;
     $sort[6] = -1;
     $c = $mon->findByIndex($coll, (object) $cond, $limit, $skip, array(), (object) $sort, true);
 }
 $zqdms = array();
 while ($row = $c->getNext()) {
     if ($lastest && $include0 && !$prid) {
         $zqdm = $row[2];
         if ($zqdms[$zqdm]) {
             continue;
         }
         $zqdms[$zqdm] = 1;
     }
     //交割单处理
     if ($ccdate) {
         $row['chtime'] = App::dateDifference($row[0], $ccdate);
     }
     if ($row['istotal'] == 0 || isset($cond['istotal'])) {
         $row['_forsum'] = '_forsum';
         $rows[] = $row;
     } else {
         //userData
         $userData = $row;
         $dconf = App::getDataconf('calcc');
         $header = $dconf['theader'];
         foreach ($header as $k => $v) {
             $str .= $v . ':' . $row[$k] . ',';
         }
         $userData['date'] = $str;
         $userData[2] = '汇总';
         $userData[3] = '资产总额:';
Example #3
0
/**
 * 保存一天的持仓记录
 * 累计计算,后续改成增量计算的,多个值计算
 *
 * 汇总头部见 dateconf[calcc]
 *
 */
function saveDay($prejgrq, &$mon, &$totalr, &$zqrs, $checked = true)
{
    //获取股票当天价格
    $curcc = $mon->findByIndex('zjgf', array('date' => $prejgrq), 10000, 0, array());
    foreach ($curcc as $k => $v) {
        if ($v['istotal'] == 1) {
            $okyye = $v[2] + 0;
            //可用余额
            $otzxsz = $v[3];
            //市值
        }
        $mmgu[$v[12]] = $v;
    }
    $tzxsz = 0;
    $tfdyk = 0;
    foreach ($zqrs as $k => $v) {
        $v['istotal'] = 0;
        $zqnum = $v[6];
        //证券数量
        $zxsz = 0;
        $fdyk = 0;
        $zqs = $v[8];
        //最终清算额度
        $ov = $mmgu[$k];
        if (!$ov && $zqnum != 0) {
            echo "[{$k}] [{$v[3]}] notfind in result\n";
            //print_r($v);
        }
        //check?
        if ($ov[2] != $zqnum) {
            //库存数量不相等
            echo "[{$k}] [{$ov[0]}] [{$ov[2]}] [{$zqnum}] 证券数量 noteq in result\n";
            //not save this;
            if ($checked) {
                //   continue;
            }
        }
        if ($ov) {
            $v[4] = $ov[6];
            //当前价
            $zxsz = $v['zxsz'] = $ov[7];
            //最新市值
            $v['pdate'] = $prejgrq;
        }
        if ($zqnum > 0) {
            //有的持仓
            if ($zxsz < 1) {
                $zxsz = $zqnum * $v[4];
                echo "[{$k}] [{$ov[0]}] [{$ov[2]}] [{$zqnum}] 最新市值<1\n";
            }
            //
            $v['cbj'] = round(-$zqs / $zqnum, 3);
        } elseif ($zqnum < 0) {
            //融券卖出的情况
            //暂时不处理
            //$zxsz = $zqs;
        } else {
            $zxsz = 0;
            $v[6] = 0;
            //设置为0,为显示
        }
        $fdyk = $v['fdyk'] = round($zqs + $zxsz, 3);
        //浮动盈亏
        $tfdyk += $fdyk;
        $tzxsz += $zxsz;
        $ljmr = $v['ljmr'];
        $v['zxsz'] = $zxsz;
        if ($zxsz != 0) {
            $v['ykbl'] = round($fdyk * 100 / $zxsz, 3);
        } elseif ($ljmr > 0) {
            //用累计投入做分母比较靠谱
            $v['ykbl'] = round($fdyk * 100 / $ljmr, 3);
        } else {
            // $v['ykbl'] = round($fdyk*100/$ljmr,3);
        }
        //$v[8] = round($v[8],3);
        if ($v['cdate']) {
            $v['chtime'] = App::dateDifference($v['cdate'], $v['ldate']);
        }
        //可以只存有改变的,为方便全部保存
        $v['date'] = $prejgrq;
        $id = $v['_id'] = $k . '_' . $prejgrq;
        $mon->save($v);
    }
    $pretid = "total_{$prejgrq}";
    $tr =& $totalr;
    //$tr[8] = round($tr[8],3);
    $tr['date'] = $prejgrq;
    $tr['zqids'] = $zqids;
    if ($otzxsz) {
        $tr['zxsz'] = $otzxsz;
    } else {
        $tr['zxsz'] = $tzxsz;
    }
    //参考市值
    if ($okyye) {
        $kyye = $okyye;
    } else {
        $kyye = $tr[8];
    }
    $tr['kyye'] = $kyye;
    $tr['zc'] = $tr['zxsz'] + $kyye;
    //资产
    $touru = $tr['yinhangzr'] + $tr['yinhangzc'];
    $tr['yinhangtr'] = $touru;
    $tr['jsyk'] = $tr['zc'] - $touru;
    //盈亏
    $tr['ljyk'] = $tfdyk;
    $tr['ykbl'] = round($tr['jsyk'] * 100 / $touru, 3);
    $tr['cw'] = round($tr['zxsz'] * 100 / $tr['zc'], 3);
    $tr['_id'] = $pretid;
    $tr['istotal'] = 1;
    $mon->save($tr);
    $info .= "{$prejgrq}\n清算 [{$tr[8]}]   可用 [{$kyye}] okyye[{$okyye}]\n";
    $info .= "市值o [{$otzxsz}]   累计 [{$tzxsz}]\n";
    $info .= "盈亏计算[{$tr['jsyk']}] 累计[{$tfdyk}]\n";
    echo "\n\n======\n{$info}";
}