遅行スパンクラス
遅行スパンクラス PHP ファイル
delay_dif-cla-gra.php
63Pear Villageに戻る
<?php
class Delay_dif {//①
public function __construct ($delay) {//②
$this -> filepath = $delay['filepath'];
$this -> dist = $delay['dist'];
//初期比較期間数
$this -> limit = $delay['limit'];
//グラフの足数、上限はデ-タ数まで
$this -> disp = $delay['disp'];
$this -> y_max = $delay['y_max'];
/*
1:途中経過含め全表示
2:結果デ-タとチャ-ト
3:チャ-トのみ
*/
try{
if($delay['dist']<10
|| $delay['dist']>49){
throw new Exception(
'エラ--比較期間は 10~49
にしてください<br>'
);
}
if ($delay['limit'] < 88){
throw new Exception(
'エラ--グラフの足数は 88
以上にしてください<br>'
);
}
if ($delay['disp'] > 3){
throw new Exception(
'エラ--表示形式は 1~3
にしてください<br>
');
}
if($delay['y_max']<70
|| $delay['y_max']>99){
throw new Exception(
'エラ-- Y軸最大値は 70~99
にしてください<br>'
);
}
}catch(Exception $e) {
echo $e->getMessage();
}
}//②end
public function dif_arry() {//③
global $owa100;//最新値:$owa100[1]
global $last_l;//デ-タ数
global $newday;//最新日付
global $mi;//最小σ
global $mi_j;//最小となる遅行数
global $mi_n;//最小となる比較期間
global $mi_DA;//最小となるΔAvg
global $mi_Avg;//最小となる基本Avg
global $mi_Avg_m;
//最小となるh期間の比較平均値
global $mi_nl;//最終比較足(デ-タ数-期間)
$file =
new SplFileObject($this -> filepath);
$file->setFlags(SplFileObject::READ_CSV);
foreach ($file as $key => $line) {//④
foreach($line as $str){
$records[$key][] = $str;
}
}//④end
$last_l = count($records) - 3;
//表題+最後の0+1改行
$newday = $records[$last_l][1];
for ($k1 = 1; $k1 <= $last_l; $k1++) {
for ($j1 = 1; $j1 <6; $j1++){
$owa100[$k1][$j1] =
$records[$last_l-$k1+1][$j1];
//日付、始値、高値、安値、終値
}
}
$mi = 100;
$n1 = $this -> dist;
$n1l = $last_l - $n1;//$last_dist
for($n1 = $n1; $n1 <= $n1l; $n1++){
//①a-START
// $n1l = $n1l-1;
//基本 n = 1~h 期間の平均値 Avg を求める
$h_Avg = 0;
for ($k1 = 1; $k1 <= $n1; $k1++) {
$h_Avg = $owa100[$k1][5] + $h_Avg;
}
$Avg = $h_Avg/$n1;
for ($j1 = $n1; $j1 <= $n1l; $j1++) {
//①b-START
$Avg_m[$j1+1] = 0;
//比較期間の平均値 Avg_m*h を求める
for ($k1 = 1; $k1 <= $n1; $k1++) {
//①c-START
$Avg_m[$j1+1] =
$owa100[$k1 + $j1][5] + $Avg_m[$j1+1];
}//①c-END
$Avg_m[$j1+1] = $Avg_m[$j1+1]/$n1;
$DAvg_m[$j1+1] = $Avg_m[$j1+1] - $Avg;
}//①b-END
for ($j1 = $n1; $j1 <= $n1l; $j1++) {
//①d-START
$difs[$j1+1] = 0;
for ($k1 = 1; $k1 <= $n1; $k1++) {
//①dd-START
$dif0 =
$owa100[$k1 + $j1][5]
- $owa100[$k1][5] - $DAvg_m[$j1+1];
$difs[$j1+1] = $dif0 * $dif0
+ $difs[$j1+1];
}//①dd-END
$difs[$j1+1] =
sqrt($difs[$j1+1]/$n1);//σ
if($difs[$j1+1] < $mi){
$mi = $difs[$j1+1];
$mi_j = $j1+1;
$mi_n = $n1;
$mi_DA = $DAvg_m[$j1+1];
$mi_nl = $n1l;
$mi_Avg = $Avg;
$mi_Avg_m = $Avg_m[$j1+1];
if($this -> disp == 1){
echo "<br>σmin =".round($mi,3);
echo "<br>遅行値 =".$mi_j;
echo "<br>期間 =".$mi_n;
echo
"<br>最終比較足(デ-タ数-期間) = "
.$mi_nl;
echo "<br>基本Avg = ".round($mi_Avg,3);
echo "<br>Avg_m = ".round($mi_Avg_m,3);
echo
"<br>ΔAvg =".round($mi_DA,3)."<br>";
}
}
}//①d-END
$n1l = $n1l-1;
}//①a-END
try{
if ($last_l < 101){
throw new Exception(
'<br>エラ--デ-タ数は 100 以上必要です<br>'
);
}
if ($this -> limit > $last_l){
throw new Exception(
'エラ--グラフの足数はデ-タ数までにしてください<br>'
);
}
}catch(Exception $e) {
echo $e->getMessage();
}
return;
}//③end
public function res_dis() {//⑥
global $owa100;
global $last_l;//デ-タ数
global $newday;//最新日付
global $mi;//最小σ
global $mi_j;//最小となる遅行数
global $mi_n;//最小となる比較期間
global $mi_DA;//最小となるΔAvg
global $mi_Avg;//最小となる基本Avg
global $mi_Avg_m;
//最小となるh期間の比較平均値
global $mi_nl;//最終比較足(デ-タ数-期間)
echo
"<br>基本情報<br> デ-タ数 =".$last_l;
echo "<br> 最新日付 =".$newday;
echo "<br> 最新終値 =".$owa100[1][5];
echo
"<br> 初期比較期間 =".$this -> dist;
echo
"<br>最小となる各種デ-タ<br> σ ="
.round($mi,3);
echo "<br> 遅行値 =".$mi_j;
echo "<br> 比較期間 =".$mi_n;
echo "<br> 基本Avg = ".round($mi_Avg,3);
echo
"<br> Avg_m = ".round($mi_Avg_m,3);
echo
"<br> ΔAvg = ".round($mi_DA,3);
echo
"<br> 最終比較足(デ-タ数-期間) = "
.$mi_nl
."<br><br>";
}//⑥end
public function yosoku() {//⑧
global $owa100;//最新値:$owa100[1]
global $newday;//最新日付
global $owa_cen;
global $dsdn;
global $dsup;
global $mi;//最小σ
global $mi_j;//最小となる遅行数
global $mi_DA;//最小となるΔAvg
if($this -> disp <> 3){
echo
"<table><tr><td>遅行 "
.$mi_j.
"</td><td> -σ</td><td> 終値</td><td> +σ</td></tr>";
}
$k = 4;
for($i = $mi_j - 5; $i < $mi_j; $i++){
$owa_cen[$k] = $owa100[$i][5] - $mi_DA;
$dsdn[$k] = round(($owa_cen[$k] - $mi),3);
$dsup[$k] = round(($owa_cen[$k] + $mi),3);
if($this -> disp <> 3){
echo
"<tr><td>".$i."</td><td>".$dsdn[$k]
."</td><td> ".round($owa_cen[$k],3)
."</td><td> ".$dsup[$k]."</td></tr>";
}
$k = $k - 1;
}
for($i = 1; $i <= 5; $i++){
if($i==1){
$ino = $newday;
}else{
$ino=$i;
}
if($this -> disp <> 3){
echo
"<tr><td>".$ino.
"</td><td> </td><td> "
.$owa100[$i][5].
"</td><td> </td></tr>";
}
}
if($this -> disp <> 3){
echo "</table>";
}
}//⑧end
public function graph() {//⑨
global $owa100;//最新値:$owa100[1]
global $newday;//最新日付
global $owa_cen;
global $dsdn;
global $dsup;
global $mi;//最小σ
global $mi_j;//最小となる遅行数
global $mi_n;//最小となる比較期間
global $mi_DA;//最小となるΔAvg
global $mi_Avg;//最小となる基本Avg
global $mi_Avg_m;
//最小となるh期間の比較平均値
$maxN = $this -> limit;//デ-タ数まで
$maxN1 = $maxN + 1;
$maxN5 = $maxN + 5;
for($i3 = 0;$i3 < $maxN5; $i3++){
if(($i3%10==0) and $i3 < $maxN){
$hid[$i3] =
mb_substr($owa100[$maxN - $i3][1],5);
}else{
$hid[$i3]="";
}
$data_g[$i3] =
array($hid[$i3],"","","");
}
for($i3 = 0;$i3 < ($maxN1 - $mi_j); $i3++){
$tikou =
$owa100[$maxN1 - $i3 - $mi_j][5] + $mi_DA;
$data_g[$i3] =
array($hid[$i3],"","","",$tikou);
}
for($i3 = $maxN;$i3 < $maxN5; $i3++){
$data_g[$i3] = array(
$hid[$i3],$owa_cen[$i3 - $maxN],
$dsdn[$i3 - $maxN],$dsup[$i3 - $maxN],"");
}
for($i4 = 0;$i4 < $maxN; $i4++){
$data_l[$i4] = array($hid[$i4],
doubleval($owa100[$maxN - $i4][2]),
doubleval($owa100[$maxN - $i4][3]),
doubleval($owa100[$maxN - $i4][4]),
doubleval($owa100[$maxN - $i4][5]));
}
require_once
'davefx/phplot/phplot/phplot.php';
$jpg3 = 'img/delay-dif.png';
$wide = 600;
if($maxN > 88){
$wide = 900;
}
$plot = new PHPlot($wide, 400, $jpg3);
$plot -> SetIsInline(TRUE);
//ファイル出力できるようにする
$plot -> SetPlotType('lines');
$plot -> SetLineStyles(array(
"solid","solid","solid","solid"));
$plot ->
SetLineWidths(array("3","1","1","3"));
$plot -> SetDataValues($data_g);
$plot -> SetPlotAreaWorld(
0,$this -> y_max -10,
$maxN5, $this -> y_max);
// X軸の最小値、Y軸の最小値、X軸の最大値、Y軸の最大値
$plot -> SetDataColors(
array('black','black','black','purple'));
$plot -> SetMarginsPixels(30, 30, 30, 50);
//左 右 上 下
$plot -> SetTTFPath('fonts');
$plot -> SetDefaultTTFont("ipaexg.ttf");
#TrueTypeフォント指定
$plot -> SetFontTTF('x_label', 'ipaexg.ttf', 9);
// x軸目盛り
$plot -> SetFontTTF('y_label', 'ipaexg.ttf', 9);
// y軸目盛り
$plot -> DrawGraph();
$plot -> SetTitle(
"円 豪ドル/円 予測 ");
if($maxN > 88){
$plot -> SetTitle(
"円 豪ドル/円 予測 ");
}
$plot->SetDataValues($data_l);
$plot->SetPlotType('candlesticks2');
//$plot -> SetYTickLabelPos('plotleft');
//$plot -> SetYTickPos('plotleft');
$plot -> SetDataColors(array(
'DarkGreen', 'red', 'DarkGreen', 'red'
));
$plot->DrawGraph();
if($this -> limit <= 88){
$posi=420;
}else{
$posi=720;
}
$jpg4 =
imageCreateFromPng('img/delay-dif.png');
$text[1]=
mb_substr($newday,2).
" 初期比較期間="
.$this -> dist;//最新日付
$text[2]="σ = ".round($mi,3);
$text[3]="遅行値 =".$mi_j;
$text[4]="比較期間=".$mi_n ;
$text[5]="基本Avg =".round($mi_Avg,3);
$text[6]="Avg_m =".round($mi_Avg_m,3);
$text[7]="ΔAvg = ".round($mi_DA,3);
$font="fonts/ipaexg.ttf";
$text_color =
imagecolorallocate($jpg4, 0, 0, 0);
//黒
for ($i4=1;$i4<8;$i4++){
imageTtfText(
$jpg4,10,0,$posi,$i4*16,
$text_color,$font,$text[$i4]
);
//フォントサイズ,角度,X座標,Y座標,色、フォント,表示文字
}
Imagepng($jpg4,"img/delay-dif-t.png");
print("<br><img src = img/delay-dif-t.png>");
imagedestroy ($jpg4);
}//⑨end
}//①end
?>