function getStochasticOscillator($company, $from = "1900-01-01 00:00:00", $to = null, $dataorg = "json", $host, $db, $user, $pass) { // Create connection $con = mysqli_connect($host, $user, $pass, $db); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); return; } $studyPeriod = 14; $smoothingPeriod = 3; $offsetPeriod = $studyPeriod + $smoothingPeriod; if ($dataorg == "highchart") { //Added 8 hours to timestamp because of the Philippine Timezone WRT GMT (+8:00) $sql = "SELECT (UNIX_TIMESTAMP(DATE_ADD(timestamp, INTERVAL 8 HOUR)) * 1000) as timestamp, \n\t\t\t\t\thigh, low, close\n\t\t\t\t\tFROM {$company} \n\t\t\t\t\tWHERE timestamp >= DATE_ADD('" . $from . "', INTERVAL -{$offsetPeriod} DAY) \n\t\t\t\t\tAND timestamp <= '" . $to . "' ORDER BY timestamp ASC"; } else { $sql = "SELECT DATE_FORMAT(timestamp, '%Y-%m-%d') as timestamp, high, low, close \n\t\t\t\t\tFROM {$company} \n\t\t\t\t\tWHERE timestamp >= DATE_ADD('" . $from . "', INTERVAL -{$offsetPeriod} DAY) \n\t\t\t\t\tAND timestamp <= '" . $to . "' ORDER BY timestamp ASC"; } $result = mysqli_query($con, $sql); $dbreturn = ""; $ctr = 0; $temp; $returnStochastic; while ($row = mysqli_fetch_array($result)) { if ($dataorg == "json") { $dbreturn[$ctr][0] = $row['timestamp']; $dbreturn[$ctr][1] = floatval($row['high']); $dbreturn[$ctr][2] = floatval($row['low']); $dbreturn[$ctr][3] = floatval($row['close']); } elseif ($dataorg == "highchart") { $dbreturn[$ctr][0] = doubleval($row['timestamp']); $dbreturn[$ctr][1] = floatval($row['high']); $dbreturn[$ctr][2] = floatval($row['low']); $dbreturn[$ctr][3] = floatval($row['close']); } elseif ($dataorg == "array") { //TODO: create code for organizing an array data output } else { $dbreturn[$ctr][0] = $row['timestamp']; $dbreturn[$ctr][1] = floatval($row['high']); $dbreturn[$ctr][2] = floatval($row['low']); $dbreturn[$ctr][3] = floatval($row['close']); } $ctr = $ctr + 1; } if ($dataorg == "json") { $returnStochastic = codesword_stochastic($dbreturn, $studyPeriod, $smoothingPeriod); } elseif ($dataorg == "highchart") { $returnStochastic = codesword_stochastic($dbreturn, $studyPeriod, $smoothingPeriod); } elseif ($dataorg == "array") { //TODO: create code for organizing an array data output } else { //json $returnStochastic = codesword_stochastic($dbreturn, $studyPeriod, $smoothingPeriod); } echo json_encode($returnStochastic); mysqli_close($con); }
function getStoMACD($company, $from = "1900-01-01 00:00:00", $to = null, $dataorg = "json", $ensig = false, $host, $db, $user, $pass) { $thlc = []; //[timestamp,high,low,close] $stoch = []; //[timestamp,%K,%D] $stochSignals = []; //[timestamp,signal,desc] $stochSmaSignals = []; //[timestamp,signal,desc] $isCloseHigherThanSMA = []; //[timestamp,boolean] $dataOhlc = []; //OHLC data format [timestamp,open,high,low,close,volume] if ($dataorg == "highchart") { $dataOhlc = getOHLC($company, $from, $to, "array2", $host, $db, $user, $pass); } else { $dataOhlc = getOHLC($company, $from, $to, "array", $host, $db, $user, $pass); } //echo json_encode($dataOhlc); //Return if $dataOhlc is null if ($dataOhlc == [] || $dataOhlc == 0) { return 0; } //Input for stochastic convestion should be [timestamp,high,low,close] $ctr = 0; foreach ((array) $dataOhlc as $ohlc) { $thlc[$ctr][0] = $ohlc[0]; //timestamp $thlc[$ctr][1] = $ohlc[2]; //high $thlc[$ctr][2] = $ohlc[3]; //low $thlc[$ctr++][3] = $ohlc[4]; //close } //echo json_encode($thlc); //generate stochastic values $stoch = codesword_stochastic($thlc); //echo json_encode($stoch); //find out if the close/current price > sma $isCloseHigherThanSMA = codesword_isHigherThanSMA($thlc); //echo json_encode($isCloseHigherThanSMA); //generate trade signals from stochastic values $stochSignals = codesword_stochTradeDetector($stoch); //do some more filtering $stochSmaSignals = codesword_stochSmaTradeDetector($stochSignals, $isCloseHigherThanSMA); if (strcasecmp($ensig, "latest") == 0) { //return only the latest signal // [timestamp,trade signal,... other info...] if (count($stochSmaSignals) > 0) { $lastSignal = $stochSmaSignals[count($stochSmaSignals) - 1]; //echo json_encode($lastSignal); return $lastSignal; } else { return 0; } } elseif ($ensig) { //echo json_encode($stochSignals); $allData[0] = $stoch; $allData[1] = $stochSmaSignals; echo json_encode($allData); } else { echo json_encode($stoch); } }