예제 #1
0
 /**
  * Returns the data model based on the primary key given in the GET variable.
  * If the data model is not found, an HTTP exception will be raised.
  * @param integer $id the ID of the model to be loaded
  * @return PortfolioReturns the loaded model
  * @throws CHttpException
  */
 public function loadModel($id)
 {
     $model = PortfolioReturns::model()->findByPk($id);
     if ($model === null) {
         throw new CHttpException(404, 'The requested page does not exist.');
     }
     return $model;
 }
예제 #2
0
                //$rawData[$i]['chart'] = 1;
                // $rawData[$i]['amount'] = 0;
                // $amount_portfolio[$i] = 0;
                // $amount_traded[$i] = 0;
                // $amount_nominal[$i] = 0;
                // $porfolio_amount[$i] = 0;
                if ($i > 0) {
                    $div = $rawData[$i - 1]['top'] + $rawData[$i]['pnl'];
                    if ($div > 0) {
                        $rawData[$i]['return'] = $rawData[$i]['top'] / $div;
                    } else {
                        $rawData[$i]['return'] = 1;
                    }
                }
                //checking if the return for current instrument is not exist and inserting the calculated return.//
                $existing_return = PortfolioReturns::model()->findByAttributes(['portfolio_id' => $portfolio_id, 'trade_date' => $rawData[$i]['trade_date'], 'is_prtfolio_or_group' => 1]);
                if (count($existing_return) == 0) {
                    $return = new PortfolioReturns();
                    $return->portfolio_id = $portfolio_id;
                    $return->is_prtfolio_or_group = 1;
                    $return->trade_date = $rawData[$i]['trade_date'];
                    $return->return = $rawData[$i]['return'];
                    $return->save();
                } else {
                    $existing_return->return = $rawData[$i]['return'];
                    $existing_return->save();
                }
                $i++;
            }
            ?>
<div class="row-fluid"></div>
예제 #3
0
 public function actionPortfolioReturns()
 {
     $this->layout = 'column1';
     $portfolio_id = '';
     $dt = '';
     $where = ' 1 = 1 ';
     if (isset($_REQUEST['portfolio']) && !($_REQUEST['portfolio'] == '')) {
         $portfolio_id = $_REQUEST['portfolio'];
     }
     if (isset($_REQUEST['dt']) && !($_REQUEST['dt'] == '')) {
         $dt = $_REQUEST['dt'];
         $where .= " and p.trade_date >='{$dt}' ";
     }
     //if(isset($_REQUEST['portfolio']) && !($_REQUEST['portfolio'] == '')){$portfolio_id = $_REQUEST['portfolio'];}
     //if(isset($_REQUEST['dt']) && !($_REQUEST['dt'] == '')){$dt = $_REQUEST['dt'];}
     ///////////////////////////////////////////////////////////////////////////////////
     if ($portfolio_id > 0) {
         ini_set('max_execution_time', 50000);
         //Trades
         $inst_sql = "select * from ledger l\n                     inner join instruments i on l.instrument_id = i.id\n                     where l.is_current = 1 and i.is_current = 1 and l.portfolio_id = {$portfolio_id}  order by trade_date asc";
         $trades = Yii::app()->db->createCommand($inst_sql)->queryAll(true);
         if (count($trades) > 0) {
             foreach ($trades as $trd) {
                 $ins_ids[] = $trd['instrument_id'];
             }
             $insids = implode("','", $ins_ids);
             $portfolio_return_sql = "select p.trade_date,\n                                sum((select sum(if(trade_date=p.trade_date, nominal*price, 0)) from ledger where instrument_id = p.instrument_id)) pnl,\n                                sum(p.price * (select sum(if(trade_date<=p.trade_date, nominal, 0)) from ledger where instrument_id = p.instrument_id)) top\n                                from prices p\n                                where p.is_current = 1 and instrument_id in ('{$insids}') and " . $where . " group by  p.trade_date\n                                order by p.trade_date asc";
             $portfolio_returns = Yii::app()->db->createCommand($portfolio_return_sql)->queryAll(true);
             if (count($portfolio_returns) > 0) {
                 $i = 0;
                 foreach ($portfolio_returns as $price) {
                     $rawData[$i]['id'] = $i;
                     $rawData[$i]['trade_date'] = $price['trade_date'];
                     $rawData[$i]['top'] = $price['top'];
                     $rawData[$i]['pnl'] = $price['pnl'];
                     $rawData[$i]['return'] = 1;
                     if ($i > 0) {
                         $div = $rawData[$i - 1]['top'] + $rawData[$i]['pnl'];
                         if ($div > 0) {
                             $rawData[$i]['return'] = $rawData[$i]['top'] / $div;
                         } else {
                             $rawData[$i]['return'] = 1;
                         }
                     }
                     //checking if the return for current instrument is not exist and inserting the calculated return.//
                     $existing_return = PortfolioReturns::model()->findByAttributes(['portfolio_id' => $portfolio_id, 'trade_date' => $rawData[$i]['trade_date'], 'is_prtfolio_or_group' => 1]);
                     if (count($existing_return) == 0) {
                         $return = new PortfolioReturns();
                         $return->portfolio_id = $portfolio_id;
                         $return->is_prtfolio_or_group = 1;
                         $return->trade_date = $rawData[$i]['trade_date'];
                         $return->return = $rawData[$i]['return'];
                         $return->save();
                     } else {
                         $existing_return->return = $rawData[$i]['return'];
                         $existing_return->save();
                     }
                     $i++;
                 }
             } else {
                 ///portfolio return is empty////
             }
         } else {
             ///treades are not found//
         }
     }
     $this->redirect('portfolioReturns/admin');
     ///////////////////////////////////////////////////////////////////////////////////
     //	$this->render('portfolio_returns', ['portfolio' => $portfolio, 'dt' => $dt]);
 }