- 投稿日:2021-03-06T23:16:07+09:00
[PHP]1行チャットプログラム
こちらを参考に作ってみました。
[PHP]1行チャットプログラム
ロジック部分
<?php $filename = 'chat_data.dat'; //チャットのデータを格納するファイル if(isset($_POST['name']) || isset($_POST['comment'])) { $name = $_POST['name']; $comment = $_POST['comment']; date_default_timezone_set('Asia/Tokyo'); file_put_contents($filename, date("y/m/d H:i").",".$name.",".$comment."\n", FILE_APPEND); //ファイルへの書き込み(1書き込みごとに改行する) } $contents = file_get_contents($filename); //ファイルの読み込み $lines = explode("\n", $contents); //読み込んだ内容を1書き込みごとに分け、配列に入れる ?> ... <?php foreach($lines as $value) { list($date, $name, $comment) = array_pad(explode(",", $value, 3), 3, null); //$linesをさらに","ごとに分け、それぞれ$date, $name, $commentに格納 ?> <tbody> <tr> <td><?php echo $date; ?></td> <td><?php echo $name; ?></td> <td><?php echo $comment; ?></td> </tr> </tbody> <?php } ?>制作物
学んだこと
・ファイル操作
file_put_contents($filename, date("y/m/d H:i").",".$name.",".$comment."\n", FILE_APPEND); //ファイル書き込み。FILE_APPENDはファイルの最後に追記することを表す file_get_contents($filename); //ファイル読み込み・文字列を任意の文字列で分割
$lines = explode("\n", $contents);・array_pad()
list($date, $name, $comment) = array_pad(explode(",", $value, 3), 3, null);explode()によって返される配列を3に制限し、返される値が3未満の場合、3になるまでnullが追加されるそう。
最初foreachで回す部分を<?php foreach($lines as $value) { $data = explode(",", $value); ?> <table> <tr> <td><?php echo $data[0]; ?></td> <td><?php echo $data[1]; ?></td> <td><?php echo $data[2]; ?></td> </tr> </table> <?php } ?>こう書いていましたが、「Undefined offset: 1」「Undefined offset: 2」が消えず、、、
ロジック部分の該当箇所に修正したら消えました。
あと、list(変数1, 変数2,,,)の書き方初めて知った。便利そう!感想
bootstrap初めて使ったけど便利!
- 投稿日:2021-03-06T21:35:52+09:00
【使い分け】mb_substr()とpreg_match()
初めに
生のPHPを使ってAPIから値を取得する課題を進めている中で、特に学びとなったことを覚えとして投稿
※PHPでAPIの取得方法は
こちらの記事
当時のツイート※私の状況
・プログラミング学習歴:8か月(ほぼ独学)
・PHP学習歴:2か月経緯
問題内容
たくさんの猫の情報が詰まっている、とあるAPIから以下のような条件で値を取り出す問題があった
・問題
猫の品種(name)の末尾が"hair"で終わる品種(name)の内、寿命(life_span)の最大値が一番大きい猫の品種(name)を表示当初予定(mb_substr)
当初は、
猫の品種(name)の末尾が"hair"で終わる品種
と聞いた時
「mb_substr
を使って末尾だけが"hair"である猫の品種(name)に絞ればOK!」
と思いmb_substr($json_arry["name"], -4)="hair"の条件を見たす品種(name)を取得する予定でしたが、うまく狙った値が取り出せず、一度他の方法を考えることに。
修正案(preg_match)
他の方法を調べたところ、
preg_match()
を使った正規表現を見つけたので、こちらで実装することにした。
実は正規表現は書き方が複雑で少し避けがちであった関数でしたが、調べてみると
記述方法 用途 使用例 "/^~/" 冒頭にマッチ 文字列の冒頭が"~"で始まる文字列がマッチ "/~$/" 文末にマッチ 文字列の文末が"~"で終わる文字列がマッチ "/*.~/" 改行以外の任意の1文字にマッチ "* ~"や"*-~"などの文字列がマッチ "/--[abc]--/" []内の任意の1文字にマッチする a,b,cいずれかを含む文字列がマッチ。[]内は英数字でも可。 ...etc
ここで書いたのは一例です。
こんな形で用途が様々で便利だと実感しました。今回は「末尾が"hair"」なので
$
を使用しpreg_match('/hair$/', $data_first['name']);と記述。
無事狙い値を取得し、問題を解くことができました。使い分け方
更に深堀りして学習。
一見、似た処理をする
mb_substr
とpreg_match
ですが、何が違うのかというと
mb_substr
:「切り出し」た文字列の自体を取得
⇒返り値は"hair"など文字列の一部
preg_match
:指定した文字列を「含む」か否か
⇒返り値はtrueかfalseという使い分けになります。
最後に
学習始めたての方々にとってはもしかしたら
正規表現って書き方難しそうだし、できれば使いたくない…
と思うかもしれません。(かくいう、私もそんな風に思っていました…)ですが、上記のように値を取得する際に便利なオプションがあります。
今後、上のオプションを用いた正規表現を使えそうであれば是非使ってみてください!
便利さを実感すると同時にコーディングの幅が広がると思います。最後までご覧頂きありがとうございました!m(__)m
- 投稿日:2021-03-06T21:19:37+09:00
composer require で Allowed memory size が発生したときの対処方法
はじめに
composer require を行ったときに Allowed memory size が発生したので対処方法をまとめました
環境
$ sw_vers ProductName: macOS ProductVersion: 11.2.2 BuildVersion: 20D80 $ php -v PHP 7.4.9 (cli) (built: Aug 8 2020 11:29:07) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.9, Copyright (c), by Zend Technologies with Xdebug v2.9.6, Copyright (c) 2002-2020, by Derick Rethans $ php artisan -V Laravel Framework 8.31.0解決した方法
COMPOSER_MEMORY_LIMIT=-1
でメモリ制限を解除してcomposer require
を実行することで解決しました以下のように実行すると、メモリ不足となりました
$ composer require laravel/ui Using version ^3.2 for laravel/ui ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) PHP Fatal error: Allowed memory size of 1610612736 bytes exhaustedそこで、
COMPOSER_MEMORY_LIMIT=-1
の環境変数を渡して、composer require
を実行することでメモリ不足を回避しました$ COMPOSER_MEMORY_LIMIT=-1 composer require laravel/ui Using version ^3.2 for laravel/ui ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing laravel/ui (v3.2.0): Downloading (100%) Writing lock file Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi Discovered Package: facade/ignition Discovered Package: fideloper/proxy Discovered Package: fruitcake/laravel-cors Discovered Package: laravel/sail Discovered Package: laravel/tinker Discovered Package: laravel/ui Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Package manifest generated successfully. 74 packages you are using are looking for funding. Use the `composer fund` command to find out more!参考
- 投稿日:2021-03-06T20:53:07+09:00
【超初心者向け】「変数は何のために使う??」2分で理解
今回は、変数は何で使うのかという理由を書かせていただきます!
前回の記事:
変数とは何か??今回の記事を読む前に変数とは何か??を読んだ後の方が理解がしやすいと思います。
では、初めていきます!
↓
変数は何ために使うのか?
答えは、
また使いたい時に再利用ができるからです!!
例えば、
毎月の水を30本ECサイトで買っているとすると、毎月水を検索して買うのはとても面倒だと思います!
その際にその水30本をすぐに見つけられる様に欲しいものリストに入れておくといつでもすぐに見つけることが可能になります!
変数は欲しいものリストに商品を入れて置くのと一緒ということになります!
・変数という箱にデータを入れる
・欲しいものリストという箱に欲しい商品のデータを入れて置くこうすることにより、いつでもデータを使うのが簡単になります!
終わりに
今回は、変数は何のために使うかについて書かせていただきました!
読んでもらえると、とても嬉しいです!
- 投稿日:2021-03-06T20:32:26+09:00
[Laravel] CircleCIにphp-gdをインストールする
概要
CircleCIでテストを自動化している際に画像関連のテストで以下のエラーで引っかかってしまいました。
Error: Call to undefined function imagecreatetruecolor() /home/circleci/ci-demo/backend/vendor/laravel/framework/src/Illuminate/Http/Testing/FileFactory.php:75 /home/circleci/ci-demo/backend/vendor/laravel/framework/src/Illuminate/Support/helpers.php:263 /home/circleci/ci-demo/backend/vendor/laravel/framework/src/Illuminate/Http/Testing/FileFactory.php:87 /home/circleci/ci-demo/backend/vendor/laravel/framework/src/Illuminate/Http/Testing/FileFactory.php:58画像処理系のライブラリであるphp-gdがCircleCIイメージにインストールされていないために起こったエラーみたいです。
忘れないようにメモします。
環境
CircleCI 2.1
Laravel 8.12
PHP 7.3実装
circleci/config.ymlversion: 2.1 jobs: build: docker: - image: circleci/php:7.3.0-node-browsers - image: circleci/mysql:8.0.0 command: mysqld --default-authentication-plugin=mysql_native_password environment: - DB_CONNECTION: circle_testing - APP_ENV: testing - MYSQL_ALLOW_EMPTY_PASSWORD: true - MYSQL_ROOT_HOST: '%' - MYSQL_DATABASE: circle_test working_directory: ~/ci-demo steps: - checkout - run: name: Update apt-get command: sudo apt-get update //ここで追加 - run: name: Install php-gd command: | sudo apt-get -y install libpng-dev sudo docker-php-ext-install gd - run: name: Docker php extensions install command: sudo docker-php-ext-install pdo_mysql - run: name: Wait for DB command: dockerize -wait tcp://127.0.0.1:3306 -timeout 3m - restore_cache: keys: - v1-dependencies-{{ checksum "backend/composer.json" }} - v1-dependencies- - run: working_directory: backend name: Install PHP libraries command: composer install -n --prefer-dist - save_cache: paths: - ./vendor key: v1-dependencies-{{ checksum "backend/composer.json" }} - run: working_directory: backend command: composer install - run: working_directory: backend command: php artisan migrate - run: working_directory: backend name: Run PHPUnit command: ./vendor/bin/phpunitcircleci/config.yml- run: name: Install php-gd command: | sudo apt-get -y install libpng-dev sudo docker-php-ext-install gd
- 投稿日:2021-03-06T16:07:23+09:00
ポートフォリオ作成日記
ポートフォリオ作成のために必要なことを明確化する
明確な目標設定
・3ヶ月でポートフォリオを作成する
・6月までにポートフォリオを完成させる今の自分がわかっていないこと
・ポートフォリオの作り方
・GitHubの使い方
・フレームワーク
・ポートフォリオまでの道筋
・要件定義のやり方これからの大まかなスケジュール
最初の一ヶ月
・書籍を用いたPHP基本文法の学習
・Udemyを用いた基礎的な開発環境の整理
・Webサイトの模写による基本的なHTMLの確認二ヶ月目
・ポートフォリオに搭載する機能の整理
・PHPによる開発
・フレームワークの利用三ヶ月目
・ポートフォリオ完成
・デプロイ
・企業に持っていく
・(javascriptまで実装できたらなお良い)
- 投稿日:2021-03-06T11:14:32+09:00
【PHP】初心者向け アロー関数の書き方
はじめに
PHP 7.4からアロー関数が使えるようになりました?
これで、PHPをJavaScript風に書けるようになりますねー実行バージョン
$ php -v PHP 8.0.2 (cli) (built: Feb 4 2021 18:01:33) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.2, Copyright (c) Zend Technologies with Zend OPcache v8.0.2, Copyright (c), by Zend Technologiesアロー関数とは
アロー関数は 無名関数 を簡潔に書ける文法として PHP 7.4 で追加されました。
公式よりphp// 今まで $calc = function($x,$y) {return $x+$y;}; // アロー関数 $calc = fn($x,$y) => $x+$y;今まではクロージャーで関数を定義する場合、
function
とreturn
を書く必要がありましたが、アロー関数で記載することで、function
→fn
にして、return
を省略することができます。
アロー関数で書いた方がスッキリ?できない書き方
php$calc = fn($x) => {$x}; // PHP Parse error: syntax error, unexpected token "{" $calc = fn($x) => return x; // PHP Parse error: syntax error, unexpected token "return" $calc = fn($x) => { $y = 2; return $x+$y+; }; // PHP Parse error: syntax error, unexpected token "{"
return
,{
を書くと怒られます。また、複数行で記述することもできません。。
JavaScriptはできるのに。。コールバック関数として使用
php$arr = [1,2]; $res = array_map(fn($n) => $n*$n, $arr); // array(2) { // [0]=> // int(1) // [1]=> // int(4) // } $res = array_filter($arr, fn($n) => $n === 1); // array(1) { // [0]=> // int(1) // }もちろんコールバック関数でも使うことができます。
最後に
私はこの書き方を結構気に入っています!若干、JavaScriptと書き味が違うので気をつけてください。親のスコープの変数を参照できる等、少し癖があるので、公式を読んでから使うようにしてください!
- 投稿日:2021-03-06T11:14:32+09:00
【PHP】アロー関数入門
はじめに
PHP 7.4からアロー関数が使えるようになりました?
これで、PHPをJavaScript風に書けるようになりますねー実行バージョン
$ php -v PHP 8.0.2 (cli) (built: Feb 4 2021 18:01:33) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.2, Copyright (c) Zend Technologies with Zend OPcache v8.0.2, Copyright (c), by Zend Technologiesアロー関数とは
アロー関数は 無名関数 を簡潔に書ける文法として PHP 7.4 で追加されました。
公式よりphp// 今まで $calc = function($x,$y) {return $x+$y;}; // アロー関数 $calc = fn($x,$y) => $x+$y;今まではクロージャーで関数を定義する場合、
function
とreturn
を書く必要がありましたが、アロー関数で記載することで、function
→fn
にして、return
を省略することができます。
アロー関数で書いた方がスッキリ?できない書き方
php$calc = fn($x) => {$x}; // PHP Parse error: syntax error, unexpected token "{" $calc = fn($x) => return x; // PHP Parse error: syntax error, unexpected token "return" $calc = fn($x) => { $y = 2; return $x+$y+; }; // PHP Parse error: syntax error, unexpected token "{"
return
,{
を書くと怒られます。また、複数行で記述することもできません。。
JavaScriptはできるのに。。コールバック関数として使用
php$arr = [1,2]; $res = array_map(fn($n) => $n*$n, $arr); // array(2) { // [0]=> // int(1) // [1]=> // int(4) // } $res = array_filter($arr, fn($n) => $n === 1); // array(1) { // [0]=> // int(1) // }もちろんコールバック関数でも使うことができます。
最後に
私はこの書き方を結構気に入っています!若干、JavaScriptと書き味が違うので気をつけてください。親のスコープの変数を参照できる等、少し癖があるので、公式を読んでから使うようにしてください!
- 投稿日:2021-03-06T02:04:12+09:00
変数とは何か??
今回は、変数についての説明をしていきます
誰向けの記事か
・PHPの勉強を始めたばかりの方
・変数は、わかっているけど言語化できないという人向けに書きます。
変数とは何か??
変数とは、入れたいデータを入れる事ができる箱です。
例:
test.php<?php $test = 'ここのデータが$testに入る';これで変数はOKです!
上記の書き方をすると変数の中($test)に'ここのデータが$testに入る'が入ったことになります。
しかし、ここで問題があります。。。
変数にデータを入れたはいいけど代入したデータを表示できない・・・
これの解決方法は簡単です!!
test.php<?php $test = 'ここのデータが$testに入る'; print $test;これでOKです!!
これだけで変数にデータを入れてさらにデータを表示ができます!
次にオススメの記事:
終わりに
今回は、変数のことを書きました。
なぜこの記事を書こうとしたかというと、
僕がプログラミングを始めた際に、
教材に難しく書いてあり理解できなかったので、できるだけ簡単に初心者時代の自分にでも理解できる様に書きました。
最後まで読んでいただきありがとうございます。
- 投稿日:2021-03-06T00:19:41+09:00
証券のリスクとリターンを計算するアプリケーションを作ろう
ファイナンス理論では証券のリターンとリスクを手がかりにポートフォリをを構築していく。
ポートフォリオに個別証券をどれだけの割合で組み入れるかを判断するためには、以下のパラメータが必要。
- リターン(期待収益率)
- リスク(標準偏差)
- 各銘柄についての相関係数
要件
個別証券の番号やティッカーを入力すると、上記パラメータが出力されれば良いので、コンソールアプリケーションでも良いが、商品化も視野に入れてるので最初からWebアプリケーションで開発する。
使用する言語は以下を想定
- R
- PHP
- HTML
設計方針
リスクとリターンを計算するためのヒストリカルデータのサンプリング期間については様々な議論があるが、三菱信託UFJ銀行は過去 20 年間の月次のリターン実績から算定しているそうなので、これに倣うとしよう。
計算式は以下の通りリスク推計値\left(年率標準偏差\right)=\left(n年間の月次リターンの標準偏差\right)×\sqrt{12}\\\\ ただし、n=20しかし、ヒストリカルデータが20年に満たない場合があるので、この際は設定来のデータを利用しよう。
ちなみにリターンは年率リターンの平均値で計算する。
相関係数はヒストリカルデータから分散、共分散を計算できるので、追加の情報は不要。Webサーバの構築
お手軽なWebサーバーの立て方というのが公開されていたので、これにしてみよう。
ついでにSmartyというPHPテンプレートエンジンもインストールしておく。
Smartyを使いやすくするために、Smarty
クラスを継承するSmarty_PortfolioMaker
クラスを作成するsetup.php
をPHPのinclude_path
に設置しておく。setup.php<?php // Smartyライブラリを読み込みます require('Smarty.class.php'); // setup.phpはアプリケーションに必要なライブラリファイルを // 読み込むのに適した場所です。それをここで行うことができます。例: // require('guestbook/guestbook.lib.php'); class Smarty_PortfolioMaker extends Smarty { function __construct() { // クラスのコンストラクタ。 // これらは新しいインスタンスで自動的にセットされます。 parent::__construct(); $this->template_dir = 'C:/xampp/portfoliomaker/templates/'; $this->compile_dir = 'C:/xampp/portfoliomaker/templates_c/'; $this->config_dir = 'C:/xampp/portfoliomaker/configs/'; $this->cache_dir = 'C:/xampp/portfoliomaker/cache/'; $this->caching = Smarty::CACHING_LIFETIME_CURRENT; $this->assign('app_name', 'Portfolio Maker'); } }あとはRの環境を用意すれば準備OK。
PHPとRの結合
入出力の要件定義より、処理順を以下の通り設計。
- PHPで出力したHTMLより銘柄コードまたはティッカーを入力して送信
- 入力値をRに渡してヒストリカルデータを取得
- Rでヒストリカルデータを解析し、リスクとリターンを出力
- 出力されたデータをPHPで受け取り、HTMLに描画して表示
では作っていこう。
入力画面
これはHTMLを吐けばいいので簡単。
phpはdisplay関数を呼ぶだけにとどめ、マークアップはtplファイルに任せる。input.php<?php require_once('portfoliomaker/setup.php'); $smarty = new Smarty_PortfolioMaker; $smarty->display('input.tpl'); ?>input.tpl<!DOCTYPE html> <html lang=“ja”> <head> <meta charset=“UFT-8”> <title>さいきょうのポートフォリオを作ろう!</title> </head> <body> <h1>ETFのリスクとリターンを検索する</h1> <form action="portfoliomaker/quants.php" method="POST"> <input type=“text” name=ticker><br /> <button type=“submit” value=“送信“>送信</button> </form> </body> </html>Rによる統計解析
ここではphpはさておき、Rだけでスクリプトを書いてみる。
analyze_risk_and_return.Rinstall.packages("tidyverse", repos = "http://cran.us.r-project.org", dependencies=TRUE) install.packages("tidyquant", repos = "http://cran.us.r-project.org", dependencies=TRUE) install.packages("timetk", repos = "http://cran.us.r-project.org", dependencies=TRUE) install.packages("PerformanceAnalytics", repos = "http://cran.us.r-project.org", dependencies=TRUE) install.packages("GGally", repos = "http://cran.us.r-project.org", dependencies=TRUE) install.packages("ggrepel", repos = "http://cran.us.r-project.org", dependencies=TRUE) install.packages("patchwork", repos = "http://cran.us.r-project.org", dependencies=TRUE) install.packages("formattable", repos = "http://cran.us.r-project.org", dependencies=TRUE) install.packages("rjson", repos = "http://cran.us.r-project.org", dependencies=TRUE) library(tidyverse) library(tidyquant) library(timetk) library(PerformanceAnalytics) library(GGally) library(ggrepel) library(patchwork) library(formattable) library(rjson) args <- commandArgs(trailingOnly = TRUE) symbol <- args[1] rawdata <- tq_get(symbol, from = "1993-01-01") data <- rawdata %>% group_by(symbol) %>% tq_transmute(adjusted, mutate_fun = dailyReturn, col_rename = "return") %>% slice(-1) data %>% summarize(start = min(date), end = max(date), na = sum(is.na(return))) get_start_date <- function(data) { data %>% summarise(start_date = min(date)) %>% pull(start_date) %>% max() } align_start_date <- function(data) { start_date <- get_start_date(data) filter(data, date >= start_date) } add_cumret_dd <- function(data) { suppressWarnings( data %>% mutate(cum_ret = cumprod(1 + return) - 1,drawdown = Drawdowns(return)) ) } convert_to_xts <- function(data, name_col, value_col) { name_col <- enquo(name_col) value_col <- enquo(value_col) data %>% select(date, !!name_col, !!value_col) %>% pivot_wider(names_from = !!name_col, values_from = !!value_col) %>% tk_xts(-date, date) } calc_perf_metrices <- function(data) { xts_data <- convert_to_xts(data, symbol, return) map_dfr(names(xts_data), function(symbol) { ra <- xts_data[, symbol] data.frame( Symbol = symbol, Sharpe = round(as.numeric(SharpeRatio(ra, annualize = TRUE, FUN = "StdDev")), 2), Avg_Ret = as.numeric(Return.annualized(ra)), Cum_Ret = as.numeric(Return.cumulative(ra)), StdDev = as.numeric(StdDev.annualized(ra)), MaxDD = as.numeric(maxDrawdown(ra)), stringsAsFactors = FALSE ) }) %>% mutate_at(vars(Avg_Ret, Cum_Ret, StdDev, MaxDD), percent, digits = 1) %>% arrange(-Sharpe) } analysis_result <- list() analysis_result$data <- data %>% align_start_date() %>% add_cumret_dd() analysis_result$pref_table <- calc_perf_metrices(analysis_result$data) cat(toJSON(analysis_result$pref_table))まず、phpの実行ユーザ権限でパッケージをインストールする必要があるので、初回実行時だけ
install.packages()
関数でパッケージをインストールする。
インストールログはApacheのerror.logに出力されるので、これをtailで流しながらインストールすると安心である。
メインプログラムは以下の手順で処理を実行する。
- 引数からティッカーを取得する
- ティッカーのヒストリカルデータをYahoo!Financeからダウンロードする
- ヒストリカルデータからリターンを計算し、行列に追加する
- ヒストリカルデータからドローダウンを計算し、行列に追加する
- 各種指標を計算し、
toJSON()
関数でエンコードしてcat()
関数で標準出力する解析結果の表示
POSTされたティッカーをRに渡し、結果を表示する処理をphpに記述する。
こちらのサイトを参考に開発する。quants.php<?php require_once('portfoliomaker/setup.php'); $smarty = new Smarty_PortfolioMaker; if (isset($_POST['ticker'])) { $ticker = $_POST['ticker']; $enc_ticker = json_encode($ticker); if (file_exists('C:/xampp/php/pear/portfoliomaker/R/analyze_risk_and_return.R')) { $cmd = "Rscript.exe --vanilla C:/xampp/php/pear/portfoliomaker/R/analyze_risk_and_return.R $enc_ticker"; exec($cmd, $response); $res = json_decode($response[4]); $smarty->assign('ticker', $ticker); $smarty->assign('Avg_Ret', $res->Avg_Ret); $smarty->assign('StdDev', $res->StdDev); } else { print_r("Rスクリプトがないよ。"); print_r(__DIR__); } } $smarty->display('quants.tpl'); ?>今回はRに渡す値が1つしかないので、JSON形式である必要は全く無いが、後学のためにフォームからPOSTされた値を
json_encode()
関数でJSON形式にエンコードしてから、Rscript.exeの引数に渡す。
実行するスクリプトは先程作ったanalyze_risk_and_return.R
だ。
出力したい値をassign()
関数で割り当てておき、quants.tpl
でマークアップする。quants.tpl<!DOCTYPE html> <html lang = “ja”> <head> <meta charset = “UFT-8”> <title>さいきょうのポートフォリオを作ろう!</title> </head> <body> <h1>ETFのリスクとリターン</h1> <div> <p>ティッカー:{$ticker}</p> <p>リスク:{$StdDev}</p> <p>リターン:{$Avg_Ret}</p> </div> </body> </html>まとめ
これでコーディングは完了した。
あとは、input.php
にお目当てのティッカーを入力して送信すれば、quants.php
がヒストリカルデータを引っ張ってきてリスクとリターンを出力してくれる。
次回は複数の銘柄を入力し、相関係数を出力するプログラムに発展させてみよう。