case 3: $ind[$i][] = $row->indikator_4; break; } } } $i += 1; } /*menghitung rata-rata */ $average_pegawai = mean($a); $average_barang = mean($b); $average_modal = mean($c); /*menghitung standar deviasi */ $standard_deviation_pegawai = standard_deviation_population($a); $standard_deviation_barang = standard_deviation_population($b); $standard_deviation_modal = standard_deviation_population($c); } //while $dataX = $ind; $dataY = $tot; $M = new matrix($dataX); $X = $M->ArrayData; $M = new matrix($dataY); $Y = $M->ArrayData; $Xt = $M->Transpose($X); $XtX = $M->MultiplyMatrix($Xt, $X); $XtY = $M->MultiplyMatrix($Xt, $Y); $XtXi = $M->InverseMatrix($XtX); $b = $M->MultiplyMatrix($XtXi, $XtY); $usql = "update kelompok_kegiatan set " . "koefisien_1=" . (empty($b[1][0]) ? 'null' : sprintf("%01.3f", $b[1][0])) . ",koefisien_2=" . (empty($b[2][0]) ? 'null' : sprintf("%01.3f", $b[2][0])) . ",koefisien_3=" . (empty($b[3][0]) ? 'null' : sprintf("%01.3f", $b[3][0])) . ",koefisien_4=" . (empty($b[4][0]) ? 'null' : sprintf("%01.3f", $b[4][0])) . ",konstanta=" . (empty($b[0][0]) ? 'null' : sprintf("%01.3f", $b[0][0])) . ",rata_pegawai=" . (empty($average_pegawai) ? 'null' : sprintf("%01.3f", $average_pegawai)) . ",rata_barang=" . (empty($average_barang) ? 'null' : sprintf("%01.3f", $average_barang)) . ",rata_modal=" . (empty($average_modal) ? 'null' : sprintf("%01.3f", $average_modal)) . ",std_deviasi_pegawai=" . (empty($standard_deviation_pegawai) ? 'null' : sprintf("%01.3f", $standard_deviation_pegawai)) . ",std_deviasi_barang=" . (empty($standard_deviation_barang) ? 'null' : sprintf("%01.3f", $standard_deviation_barang)) . ",std_deviasi_modal=" . (empty($standard_deviation_modal) ? 'null' : sprintf("%01.3f", $standard_deviation_modal)) . " where id=" . $_REQUEST[gid]; gcms_query($usql);
/** * Returns a stock by symbol (case-insensitively) else false if not found. */ function lookup($year, $month, $day, $symbol) { // headers for proxy servers $headers = ["Accept" => "*/*", "Connection" => "Keep-Alive", "User-Agent" => sprintf("curl/%s", curl_version()["version"])]; // open connection to Yahoo $context = stream_context_create(["http" => ["header" => implode(array_map(function ($value, $key) { return sprintf("%s: %s\r\n", $key, $value); }, $headers, array_keys($headers))), "method" => "GET"]]); //day variables $firstday = $day[0]; $dayTotal = count($day) - 1; //month variables $firstmonth = $month[0]; $monthTotal = count($month) - 1; //year variables $firstyear = $year[0]; $yearTotal = count($year) - 1; //symbol variables $symbols = count($symbol); //Loop through and download data for each symbol for ($i = 0; $i < count($symbol); $i++) { $handle = @fopen("http://ichart.yahoo.com/table.csv?s={$symbol[$i]}&a={$firstmonth}&b={$firstday}&c={$firstyear}&d={$month[$monthTotal]}&e={$day[$dayTotal]}&f={$year[$yearTotal]}&g=d&ignore=.csv", "r", false, $context); //if symbol does not exist if ($handle === false) { $notExist[] = $symbol[$i]; $symbol[$i] = NULL; continue; } // download title of CSV file and throw away $data = fgetcsv($handle); //loop through data while (($data = fgetcsv($handle)) !== FALSE) { //date $date[$i][] = $data[0]; //closing price $check[$i][] = round($data[4], 2); } //# of days $numberDays[] = count($date[$i]); } //min and max count of days $minDays = min($numberDays); $maxDays = max($numberDays); foreach ($date as $key => $value) { $checks[$date[$key]][] = $check[$key]; //if only partial data on a stock ticker, set to null if (count($date[$key]) !== $maxDays) { $notThroughout[] = $symbol[$key]; $check[$key] = NULL; $symbol[$key] = NULL; } } //update stock tickers $symbolUpdate = count(array_filter($symbol)); //call function to sum arrays with identical keys if ($check !== NULL) { $reverse = array_mesh($check[0], $check[1], $check[2], $check[3], $check[4], $check[5], $check[6], $check[7], $check[8], $check[9], $check[10], $check[11], $check[12], $check[13], $check[14], $check[15], $check[16], $check[17], $check[18], $check[19], $check[20], $check[21], $check[22], $check[23], $check[24], $check[25], $check[26], $check[27], $check[28], $check[29], $check[30], $check[31], $check[32], $check[33], $check[34], $check[35], $check[36], $check[37], $check[38], $check[39], $check[40], $check[41], $check[42], $check[43], $check[44], $check[45], $check[46], $check[47], $check[48], $check[49], $check[50]); } $dailyAverage = array_reverse($reverse); //find average price for all stock from a given day foreach ($dailyAverage as &$value) { $value = $value / $symbolUpdate; } $initial = $dailyAverage[0]; //calculate daily change for ($j = 0; $j < count($dailyAverage); $j++) { //change from intial average BDs $dailyChange[] = $dailyAverage[$j] / $initial * 100; } foreach ($dailyChange as $k => $value) { //used for st.dev calculations $difference[] = $dailyChange[$k]; //inital 12 day average if ($k <= 11) { $sumarray[] = $dailyChange[$k]; $intialTwelveDay = array_sum($sumarray) / 12; $twelveDayEm[11] = $intialTwelveDay; } //inital 20 day average if ($k <= 19) { $sumarray1[] = $dailyChange[$k]; $intialTwentyDay = array_sum($sumarray1) / 20; $twentyDayEm[19] = $intialTwentyDay; } //inital 26 day average if ($k <= 25) { $sumarray2[] = $dailyChange[$k]; $intialTwentySixDay = array_sum($sumarray2) / 26; $twentySixDayEm[25] = $intialTwentySixDay; } //12 day average if ($k > 11) { $twelveDayEm[] = $dailyChange[$k] * 2 / 13 + $twelveDayEm[$k - 1] * (1 - 2 / 13); } // 20 day average if ($k > 19) { $twentyDayEm[] = $dailyChange[$k] * 2 / 21 + $twentyDayEm[$k - 1] * (1 - 2 / 21); } //26 day average if ($k > 25) { $twentySixDayEm[] = $dailyChange[$k] * 2 / 27 + $twentySixDayEm[$k - 1] * (1 - 2 / 27); } //Bollinger Bands if ($k >= 19) { $lowerbb[$k] = $twentyDayEm[$k] - standard_deviation_population($difference) * 2; $upperbb[$k] = $twentyDayEm[$k] + standard_deviation_population($difference) * 2; $what[] = array_shift($difference); } } //Twenty Day Charts foreach ($twentyDayEm as $key => $value) { if ($key == $maxDays - 1) { $twentyDay .= "[" . $key . "," . round($value, 2) . "]"; } else { $twentyDay .= "[" . $key . "," . round($value, 2) . "],"; } } //Stock Index Chart foreach ($dailyChange as $key => $value) { if ($key == $maxDays - 1) { $stockIndex .= "[" . $key . "," . round($value, 2) . "]"; } else { $stockIndex .= "[" . $key . "," . round($value, 2) . "],"; } } //TwelveDay & Index Charts foreach ($dailyChange as $key => $value) { $key++; if ($key >= 11) { if ($key == $maxDays - 1) { $stockTwelve .= "[" . $key . "," . round($value, 2) . "," . round($twelveDayEm[$key], 2) . "]"; break; } else { $stockTwelve .= "[" . $key . "," . round($value, 2) . "," . round($twelveDayEm[$key], 2) . "],"; } } } //Bollinger Bands & Index Charts foreach ($dailyChange as $key => $value) { $key++; if ($key >= 19) { if ($key == $maxDays - 1) { $bb .= "[" . $key . "," . round($value, 2) . "," . round($lowerbb[$key], 2) . "," . round($upperbb[$key], 2) . "]"; break; } else { $bb .= "[" . $key . "," . round($value, 2) . "," . round($lowerbb[$key], 2) . "," . round($upperbb[$key], 2) . "],"; } } } //Twelve & TwentySixDay & Index Charts foreach ($dailyChange as $key => $value) { $key++; if ($key >= 25) { if ($key == $maxDays - 1) { $stockTwelveTwentySix .= "[" . $key . "," . round($value, 2) . "," . round($twelveDayEm[$key], 2) . "," . round($twentySixDayEm[$key], 2) . "]"; break; } else { $stockTwelveTwentySix .= "[" . $key . "," . round($value, 2) . "," . round($twelveDayEm[$key], 2) . "," . round($twentySixDayEm[$key], 2) . "],"; } } } if ($notExist !== NULL) { if ($notExist[0] === 0) { $notExist == NULL; } else { if (count($notExist) == 1) { $notExist = implode($notExist); } else { $notExist = implode(",", $notExist); $notExist = rtrim($notExist, ","); } } } if ($notThroughout !== NULL) { if (count($notThroughout) == 1) { $notThroughout = implode($notThroughout); } else { $notThroughout = implode(",", $notThroughout); $notThroughout = rtrim($notThroughout, ","); } } //var_dump($notThroughout); return ["bb" => $bb, "stockTwelveTwentySix" => $stockTwelveTwentySix, "stockTwelve" => $stockTwelve, "twentyDay" => $twentyDay, "stockIndex" => $stockIndex, "notExist" => $notExist, "notThroughout" => $notThroughout]; // close connection to Yahoo fclose($handle); }