遅行スパンクラス

遅行スパンクラス 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($wide400$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(30303050);
//左 右 上 下
$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($jpg4000);
//黒
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
?>