function getEMA($company, $from = "1900-01-01 00:00:00", $to = null, $dataorg = "json", $samplePeriod = 15, $enSignals = false, $enJsonEncode = "false", $host, $db, $user, $pass) { $dbreturn = getEMA_sub_real($company, $from, $to, $dataorg, $samplePeriod, $enSignals, $host, $db, $user, $pass); if ($dataorg == "json") { $ema = codesword_ema($dbreturn, $samplePeriod); } elseif ($dataorg == "highchart") { $ema = codesword_ema($dbreturn, $samplePeriod); } elseif ($dataorg == "array") { //TODO: create code for organizing an array data output } else { //json $ema = codesword_ema($dbreturn, $samplePeriod); } if ($enSignals) { $buysellSignals = codesword_emaBuySellSignal($dbreturn, $ema); } else { $buysellSignals = 0; } if ($enJsonEncode) { $allData = []; $allData[0] = $ema; $allData[1] = $buysellSignals; echo json_encode($allData); } else { return $ema; } }
function codesword_rsi($real, $period = 14) { //echo json_encode($real) . "<Br><Br>"; // Calculate change in closing prices $priceChange = []; for ($i = 0; $i < count($real) - 1; $i++) { // Get timestamp $priceChange[$i][0] = $real[$i + 1][0]; // Get price change $priceChange[$i][1] = $real[$i + 1][1] - $real[$i][1]; } // Segregate Gains and Losses $listGains = []; $listLosses = []; $ctrDays = 0; foreach ($priceChange as $tradeDay) { $listGains[$ctrDays][0] = $tradeDay[0]; $listLosses[$ctrDays][0] = $tradeDay[0]; if ($tradeDay[1] > 0) { $listGains[$ctrDays][1] = $tradeDay[1]; $listLosses[$ctrDays][1] = 0; } else { $listGains[$ctrDays][1] = 0; $listLosses[$ctrDays][1] = abs($tradeDay[1]); } $ctrDays += 1; } // Calculate Average Gain 14 day default period EMA $ema_gains = codesword_ema($listGains, $period); // Calculate Average Loss 14 day default period EMA $ema_losses = codesword_ema($listLosses, $period); $rsi = []; for ($i = 0; $i < count($ema_gains); $i++) { // Get timestamp $rsi[$i][0] = $ema_gains[$i][0]; // Calculate RS = Ave Gain / Ave Loss $rs = $ema_gains[$i][1] / $ema_losses[$i][1]; // RSI = 100 - (100 / (1 + RS)) $rsi[$i][1] = 100 - 100 / (1 + $rs); // echo "date: ".$rsi[$i][0].", ave gain: ".$ema_gains[$i][1].", ave loss: ". // $ema_losses[$i][1].", rs: $rs, rsi: ".$rsi[$i][1]."<Br>"; } return $rsi; }
function codesword_macd($real, $fastPeriod = 12, $slowPeriod = 26) { $fastEma = codesword_ema($real, $fastPeriod); $slowEma = codesword_ema($real, $slowPeriod); $ctrFastOffset = 0; $macd = []; for ($i = 0; $i < count($slowEma); $i++) { if ($i == 0) { for ($j = 0; $j < $slowPeriod; $j++) { if ($fastEma[$j][0] == $slowEma[0][0]) { $ctrFastOffset = $j; debug_print("start of comparison: {$ctrFastOffset} <Br>"); break; } } } $macd[$i][0] = $slowEma[$i][0]; $macd[$i][1] = $fastEma[$i + $ctrFastOffset][1] - $slowEma[$i][1]; } // The signal is a 9-day EMA $signal = codesword_ema($macd, 9); $ctrMacdOffset = 0; $histogram = []; $macdFull = []; for ($i = 0; $i < count($signal); $i++) { if ($i == 0) { for ($j = 0; $j < $slowPeriod; $j++) { if ($macd[$j][0] == $signal[0][0]) { $ctrMacdOffset = $j; debug_print("start of comparison: {$ctrMacdOffset} <Br>"); break; } } } $histogram[$i][0] = $signal[$i][0]; $histogram[$i][1] = $macd[$i + $ctrMacdOffset][1] - $signal[$i][1]; $macdFull[$i][0] = $signal[$i][0]; $macdFull[$i][1] = $macd[$i + $ctrMacdOffset][1]; $macdFull[$i][2] = $signal[$i][1]; $macdFull[$i][3] = $macd[$i + $ctrMacdOffset][1] - $signal[$i][1]; } return $macdFull; }