Beispiel #1
0
function getSMA($company, $from = "1900-01-01 00:00:00", $to = null, $dataorg = "json", $samplePeriod = 15, $enSignals = false, $enJsonEncode = "false", $host, $db, $user, $pass)
{
    $dbreturn = getSMA_sub_real($company, $from, $to, $dataorg, $samplePeriod, $enSignals, $host, $db, $user, $pass);
    if ($dataorg == "json") {
        $sma = codesword_sma($dbreturn, $samplePeriod);
    } elseif ($dataorg == "highchart") {
        $sma = codesword_sma($dbreturn, $samplePeriod);
    } elseif ($dataorg == "array") {
        //TODO: create code for organizing an array data output
    } else {
        //json
        $sma = codesword_sma($dbreturn, $samplePeriod);
    }
    if ($enSignals) {
        $buysellSignals = codesword_smaBuySellSignal($dbreturn, $sma);
    } else {
        $buysellSignals = 0;
    }
    if ($enJsonEncode) {
        $allData = [];
        $allData[0] = $sma;
        $allData[1] = $buysellSignals;
        echo json_encode($allData);
    } else {
        return $sma;
    }
}
function codesword_stochastic($real, $periodLookback = 14, $periodSmoothing = 3)
{
    //echo json_encode($real) . "<Br><Br>";
    $nHighestLowest = [];
    $ctr = 0;
    // Get the highest highs for the past $periodLookback days (nHighestLowest[i][1])
    // Get the lowest lows for the past $periodLookback days (nHighestLowest[i][2])
    for ($i = $periodLookback - 1; $i < count($real); $i++) {
        $currentTimestamp = $real[$i][0];
        $currentHighest = $real[$i][1];
        $currentLowest = $real[$i][2];
        for ($j = 0; $j < $periodLookback; $j++) {
            $index = $i - $j;
            // Get Highest High for the period
            if ($real[$index][1] > $currentHighest) {
                $currentHighest = $real[$index][1];
            }
            // Get Lowest Low for the period
            if ($real[$index][2] < $currentLowest) {
                $currentLowest = $real[$index][2];
            }
        }
        $nHighestLowest[$ctr][0] = $currentTimestamp;
        $nHighestLowest[$ctr][1] = $currentHighest;
        $nHighestLowest[$ctr][2] = $currentLowest;
        $ctr += 1;
    }
    //echo json_encode($nHighestLowest) . "<Br><Br>";
    // Get %K = [(nClose - nLowestLow) / (nHighestHigh - nLowestLow)] * 100
    $percentK = [];
    // Default offset is zero
    $kOffset = 0;
    for ($i = 0; $i < count($nHighestLowest); $i++) {
        if ($i == 0) {
            for ($j = 0; $j < $periodLookback; $j++) {
                if ($real[$j][0] == $nHighestLowest[0][0]) {
                    $kOffset = $j;
                    debug_print("start of comparison: {$kOffset} <Br>");
                    break;
                }
            }
        }
        $percentK[$i][0] = $nHighestLowest[$i][0];
        $percentK[$i][1] = ($real[$i + $kOffset][3] - $nHighestLowest[$i][2]) / ($nHighestLowest[$i][1] - $nHighestLowest[$i][2]) * 100;
    }
    //echo json_encode($percentK);
    // Get %D = Simple Moving Average of %K for $periodSmoothing days
    $percentD = codesword_sma($percentK, $periodSmoothing);
    //echo json_encode($percentD);
    // Organize data for returning [timestamp, %k, %d]
    $stochastic = [];
    $dOffset = $periodSmoothing - 1;
    $realOffset = $kOffset + $dOffset;
    for ($i = 0; $i < count($percentD); $i++) {
        $stochastic[$i][0] = $percentD[$i][0];
        //Timestamp
        $stochastic[$i][1] = $percentK[$i + $dOffset][1];
        //%K
        $stochastic[$i][2] = $percentD[$i][1];
        //%D
    }
    //echo json_encode($stochastic);
    return $stochastic;
}
function getSMAentryATRstop($company, $from = "1900-01-01 00:00:00", $to = null, $dataorg = "json", $samplePeriod = 15, $enSignals = false, $enJsonEncode = "false", $enProfitComputation = true, $host, $db, $user, $pass)
{
    // TODO: Get OHLC data
    $intervalPeriod = $samplePeriod * 1.5;
    //from date has to be adjusted for the bollinger bands
    $date = date_create($from);
    date_add($date, date_interval_create_from_date_string("-{$intervalPeriod} days"));
    $fromAdjusted = date_format($date, "Y-m-d");
    $dataOhlc = [];
    //OHLC data format [timestamp,open,high,low,close,volume]
    if ($dataorg == "highchart") {
        $dataOhlc = getOHLC($company, $fromAdjusted, $to, "array2", $host, $db, $user, $pass);
    } else {
        $dataOhlc = getOHLC($company, $fromAdjusted, $to, "array", $host, $db, $user, $pass);
    }
    //Return if $dataOhlc is null
    if ($dataOhlc == [] || $dataOhlc == 0) {
        return 0;
    }
    //Tailor data for the SMA input
    //Input for SMA functions should be [timestamp,close]
    $ctr = 0;
    $dataOhlcForSMA = [];
    foreach ((array) $dataOhlc as $ohlc) {
        $dataOhlcForSMA[$ctr][0] = $ohlc[0];
        //timestamp
        $dataOhlcForSMA[$ctr++][1] = $ohlc[4];
        //close
    }
    //Get SMA Signal
    $sma = codesword_sma($dataOhlcForSMA, $samplePeriod);
    //Get SMA Buy Signals
    $smaBuy = [];
    $ctrBuy = 0;
    $buysellSignals = codesword_smaBuySellSignal($dataOhlcForSMA, $sma);
    foreach ($buysellSignals as $signal) {
        if ($signal[1] == "buy") {
            $smaBuy[$ctrBuy++] = $signal;
        }
    }
    // echo json_encode($smaBuy);
    //Tailor data for the ATR input
    $ctr = 0;
    $dataOhlcForATR = [];
    foreach ((array) $dataOhlc as $ohlc) {
        $dataOhlcForATR[$ctr][0] = $ohlc[0];
        //timestamp
        $dataOhlcForATR[$ctr][1] = $ohlc[2];
        //high
        $dataOhlcForATR[$ctr][2] = $ohlc[3];
        //low
        $dataOhlcForATR[$ctr][3] = $ohlc[4];
        //close
        $ctr = $ctr + 1;
    }
    // echo json_encode($dataOhlcForATR);
    // Compute the ATR
    $atr = codesword_atr($dataOhlcForATR);
    // echo json_encode($atr);
    // TODO: Get ATR Stop/Sell Signals
    //		the stop signal is based on the entry price that we'll get from
    //		the SMA Buy Signal
    // Inputs:
    //		1. Data OHLC for ATR 	(ts,open,high,low,close)
    //		2. SMA Buy Signals 		(ts, buy)
    //		3. ATR Values 			(ts, atr)
    $smaEntryAtrStopSignals = codesword_smaEntryATRstopTradeDetector($company, $dataOhlc, $smaBuy, $atr, 2, 4, $enProfitComputation);
}