query($statement);
$erDate=NULL;
if (!$selection) {
echo $statement.”\n”;
trigger_error(‘Wrong SQL: ‘ . $statement . ‘ Error: ‘ . $conn->error, E_USER_ERROR);
}
else
{
if ( $selection->num_rows)
{
$row = $selection->fetch_assoc();
$erDate = $row[‘erdate’];
$selection->free();
}
else
return NULL;
}
return $erDate;
}
function getLatestERChange($conn, $ticker)
{
$statement =”select erChange from erstks where tick=’$ticker’ order by erDate desc limit 1″;
$selection=$conn->query($statement);
$erDate=NULL;
if (!$selection) {
// echo $statement.”\n”;
trigger_error(‘Wrong SQL: ‘ . $statement . ‘ Error: ‘ . $conn->error, E_USER_ERROR);
}
else
{
if ( $selection->num_rows)
{
$row = $selection->fetch_assoc();
$erChange = $row[‘erChange’];
$selection->free();
}
}
return $erChange;
}
function predictER($conn, $ticker,$erDate,$cutoff_date)
{
$today = date(“Y-m-d”);
$weekday = date(‘w’);
if ($erDate== $today.” 06:30:00″)
{
$preERDate = getLastClosedTradingdate($erDate);
$searchDate = date(“Y-m-d”, strtotime($preERDate));
}
else
if (in_array($today, $GLOBALS[‘marketHoliday’]) OR $weekday ==0 OR date(‘w’) ==6 )
{
$searchDate=getLastClosedTradingdate($today);
}
else
$searchDate= $today;
if (0 == getLastQuoteFromDB($conn,$ticker,$prePrice))
{
echo “$ticker, $searchDate, price = $prePrice”;
if (0==getHistPriceFromDB($conn,$ticker, $searchDate, $prePrice) AND 0==getHistPriceFromG($ticker, ‘NYSE’, $searchDate, $prePrice) ) //getHistPriceFromG($ticker, ‘NASDAQ’, $searchDate, $prePrice)
{
echo “Can’t get current price “;
return;
}
}
if ($erDate>= $today.” 06:30:00″)
{
$statement=”update erstks AS t1 set preERrun=(SELECT ($prePrice-t2.close)*100/t2.close FROM tastk AS t2 WHERE ((DATEDIFF(‘$today’, t2.date) = 8 and weekday(‘$today’)>0) OR (DATEDIFF(‘$today’, t2.date) = 10 and weekday(‘$today’)=0)) and t2.tick=t1.tick) where tick=’$ticker’ and erDate >= ‘$today’ “;
// echo $statement;
$ret=$conn->query($statement);
echo ” $conn->affected_rows “;
}
//, s.indexMember,stddev(erChange) as sd
if (NULL == $prePrice )
$statement= “SELECT tick,max(erDate) as erDate,industry, avg(preERrun),avg(postERrun),s.cScore as competitive,s.lscore as value, s.trend as TA, s.FA, s.MFI,s.price as lastPrice,erMove as erRange,round(s.price*(100+avg(erChange)+1.28*stddev(erChange))/100,2) as UpTarget, round(s.price*(100+avg(erChange)-1.28*stddev(erChange))/100,2) as DownTarget,round(s.price*(100+median(erChange))/100,2) as expectERClose,round(s.price*(100+max(HighChg))/100,2) as UpLimit, round(s.price*(100+min(lowChg))/100,2) as DownLimit,
round(s.price*(100+avg(OpenChg))/100,2) as expectEROpen,round(s.price*(100+avg(HighChg))/100,2) as expectERHigh,round(s.price*(100+avg(LowChg))/100,2) as expectERLow, s.indexMember,stddev(erChange) as sd from sstk as s inner join erstks as e using (tick) WHERE FIND_IN_SET(tick,’$ticker’) and erDate>’$cutoff_date’ and erDate<='$erDate' ";
else
$statement= "SELECT tick,max(erDate) as erDate,industry, avg(preERrun) as avgPreER,avg(postERrun) as avgPostER,s.cScore as competitive,s.lscore as value, s.trend as TA, s.FA,s.MFI,$prePrice as lastPrice,erMove as erRange,round($prePrice*(100+avg(erChange)+1.28*stddev(erChange))/100,2) as UpTarget, round($prePrice*(100+avg(erChange)-1.28*stddev(erChange))/100,2) as DownTarget, round($prePrice*(100+avg(erChange))/100,2) as expectERClose, round($prePrice*(100+max(HighChg))/100,2) as UpLimit, round($prePrice*(100+min(lowChg))/100,2) as DownLimit,
round($prePrice*(100+avg(OpenChg))/100,2) as expectEROpen,round($prePrice*(100+avg(HighChg))/100,2) as expectERHigh,round($prePrice*(100+avg(LowChg))/100,2) as expectERLow,s.indexMember,stddev(erChange) as sd from sstk as s inner join erstks as e using (tick) WHERE tick='$ticker' and erDate>‘$cutoff_date’ and erDate<='$erDate' ";
$selection=$conn->query($statement);
// $erDate=NULL;
if (!$selection) {
trigger_error(‘Wrong SQL: ‘ . $statement . ‘ Error: ‘ . $conn->error, E_USER_ERROR);
}
else
{
if ( $selection->num_rows)
{
$row = $selection->fetch_assoc();
$openPrice = $row[‘expectEROpen’];
$closePrice = $row[‘expectERClose’];
$highPrice = $row[‘expectERHigh’];
$lowPrice = $row[‘expectERLow’];
$UpTarget=$row[‘UpTarget’];
$DownTarget=$row[‘DownTarget’];
$UpLimit=$row[‘UpLimit’];
$DownLimit=$row[‘DownLimit’];
$selection->free();
$table = $ticker.” ER estimates”;
if (NULL == $prePrice )
$prePrice = $row[‘lastPrice’];
$url = basename(__FILE__);
$url = $url.”?tickName=$ticker”;
// $statement= “SELECT tick, (erDate) as erDate,industry, (preERrun) , (postERrun),s.indexMember from sstk as s inner join erstks as e using (tick) WHERE tick=’$ticker’ and erDate>’$cutoff_date’ and erDate<='$erDate' ";
queryDB($url,$statement, $table);
echo "
“;
echo “
“;
}
else
echo “nothing selected \n”;
}
}
function checkERResult($conn, $ticker,$erDate, $cutoff_date)
{
$preERDate = getLastClosedTradingdate($erDate);
$searchDate = date(“Y-m-d”, strtotime($preERDate));
if (0 == getHistPriceFromDB($conn,$ticker, $searchDate, $prePrice))
{
echo “$ticker, $searchDate, price = $prePrice”;
if (0==getHistPriceFromG($ticker, ‘NASDAQ’, $searchDate, $prePrice) AND 0==getHistPriceFromG($ticker, ‘NYSE’, $searchDate, $prePrice) );
return;
// getHistPriceFromG($ticker,’NYSE’, $searchDate, $prePrice);
}
$today = date(“Y-m-d”);
if ($erDate<$today)
$erChange = getLatestERChange($conn, $ticker);
else
{
$tag ='l1';
$curPrice =getYahooDataByTag($ticker,$tag);
$erChange = $curPrice*100/$prePrice -100;
}
$statement= "SELECT tick,max(erDate) as erDate,$prePrice as preERPrice,erMove as erRange,round($prePrice*(100+max(HighChg))/100,2) as UpLimit, round($prePrice*(100+min(lowChg))/100,2) as DownLimit,round($prePrice*(100+avg(OpenChg))/100,2) as expectEROpen,round($prePrice*(100+avg(HighChg))/100,2) as expectERHigh,round($prePrice*(100+avg(LowChg))/100,2) as expectERLow,round($prePrice*(100+avg(erChange))/100,2) as expectERClose,round($prePrice*(100+($erChange))/100,2) as ERClose, round($prePrice*(100+avg(erChange)+1.28*stddev(erChange))/100,2) as UpTarget, round($prePrice*(100+avg(erChange)-1.28*stddev(erChange))/100,2) as DownTarget, stddev(erChange) as sd from sstk as s inner join erstks as e using (tick) WHERE FIND_IN_SET(tick,'$ticker') and erDate>‘$cutoff_date’ and erDate<='$erDate' ";
$table = $ticker."Latest ER Result: ";
$selection=$conn->query($statement);
// $erDate=NULL;
if (!$selection) {
trigger_error(‘Wrong SQL: ‘ . $statement . ‘ Error: ‘ . $conn->error, E_USER_ERROR);
}
else
{
if ( $selection->num_rows)
{
$row = $selection->fetch_assoc();
$openPrice = $row[‘expectEROpen’];
$closePrice = $row[‘expectERClose’];
$ERClose =$row[‘ERClose’];
$UpTarget=$row[‘UpTarget’];
$DownTarget=$row[‘DownTarget’];
$UpLimit=$row[‘UpLimit’];
$DownLimit=$row[‘DownLimit’];
$selection->free();
$table = $ticker.” ER estimates”;
$url = basename(__FILE__);
$url = $url.”?tickName=$ticker”;
$table = $ticker.”Latest ER Result: “;
queryDB($url,$statement, $table);
/*
echo ” Expected Up side Target: $UpTarget, Expected Down Side Target: $DownTarget
“;
echo ” Expected After ER Open Price $openPrice, Close Price $closePrice
“;
echo ” Expected Extreme Case range: from $DownLimit to $UpLimit
“;
*/
echo ”
$ticker ER result as follow:
“;
if ($ERClose>$DownLimit && $ERClose<$UpLimit)
Echo "ER Close price $ERClose is within predicted extreme Range: ($DownLimit, $UpLimit )
“;
else
Echo “ER Close price $ERClose is out of predicted extreme Range: ($DownLimit, $UpLimit )
“;
$predError = abs(round(($ERClose-$DownTarget)*100/$DownTarget,2));
if ($predError <1.5)
Echo "ER Close price $ERClose is within $predError% of predicted DownTarget Price: ($DownTarget )
“;
else
{
$predError = abs(round(($ERClose-$UpTarget)*100/$UpTarget,2));
if ($predError <1.5)
Echo "ER Close price $ERClose is within $predError% of predicted UpTarget Price: ($UpTarget )
“;
else
if ($ERClose > $DownTarget and $ERClose<$UpTarget)
Echo "ER Close price $ERClose is within predicted Target Range: ($DownTarget, $UpTarget )
“;
else
{
Echo “ER Close price $ERClose is out of predicted Target Range: ($DownTarget, $UpTarget )
“;
}
}
$predError = round(($ERClose-$closePrice)*100/$closePrice,2);
if ($predError <2.5 and $predError >-2.5)
Echo “ER Close price $ERClose is within $predError% of predicted Close Price: ($closePrice )
“;
else
Echo “ER Close price $ERClose had an error of $predError% to predicted price ($closePrice )
“;
}
}
return $erDate;
}
//$ticker =”AAPL,GOOGL, TSLA, FSLR, VLP”;
function updQueryCnt($conn, $ticker, $today)
{
$updated = $inserted =0;
$statement = “select totQuery,lastIP from lifan.sstkquery where tick=’$ticker’ and date=’$today'”;
$selection=$conn->query($statement);
if (!$selection) {
trigger_error(‘Wrong SQL: ‘ . $statement . ‘ Error: ‘ . $conn->error, E_USER_ERROR);
}
else
{
$fromIP = get_the_user_ip() ;
if ( $selection->num_rows)
{
$row = $selection->fetch_assoc();
$lastIP=$row[‘lastIP’];
$selection->free();
if ($lastIP != $fromIP)
{
$statement = “update lifan.sstkquery set totQuery=totQuery+1,lastIP=’$fromIP’ where tick=’$ticker’ and date=’$today'”;
$result =$conn->query($statement);
if (!$result)
{
trigger_error(‘Wrong SQL: ‘ . $statement . ‘ Error: ‘ . $conn->error, E_USER_ERROR);
}
else
$updated +=$conn->affected_rows;
}
}
else
{
$statement = “Insert into lifan.sstkquery (`tick`,`date`,`totQuery`,`lastIP`) VALUES (‘$ticker’,’$today’,1,’$fromIP’) “;
$result =$conn->query($statement);
if (!$result)
{
echo “Warning: failed to insert updQ(), $conn->error, E_USER_ERROR”;
}
else
$inserted += $conn->affected_rows;
}
$conn->commit();
}
// echo “inserted $inserted; updated $updated “;
}
if ($orderby)
{
if ($orderby == ‘ERDate’ OR $orderby == ‘acqOPrice’)
$orderby = $orderby.” desc”;
else
{
$myrand = rand ();
if ($myrand % 2 ==1)
$orderby = $orderby.” desc”;
}
}
else
$orderby = ” erdate desc, (erstks.cScore+erstks.lscore) DESC, erstks.tick “;
//echo $ticker;
$ticker = preg_replace(“/[\s,]+/”,”,”,$ticker);
echo “[“.$ticker.”]\n”;
// $ticks = preg_split(“/[\s,]+/”,$ticker);
// $ticks = explode(” “,$ticker);
// $count = count($ticks);
$today = date(“Y-m-d”);
$now = date(“Y-m-d H:i”);
$hour = date(“H:i”);
echo “$today\n”;
$cutoff_date= date(‘Y-m-d’, strtotime(“- 821 days”, strtotime($today))); //Calculate only latest ER result
if (1)
{
$url = basename(__FILE__);
$url = $url.”?tickName=$ticker”;
$conn=open_db();
$erDate = getLatestERDate($conn, $ticker);
if (NULL==$erDate)
{
echo “ER Date for ticker $ticker not found\n”;
$conn->close();
return;
}
echo “[finviz ticker=$ticker]”;
$erHour = date(“H:i”,strtotime($erDate));
if ($erDate > $now OR ($erDate >$today and $erHour>=’16:30′ ) OR ($erDate >$today and $erDate<$now and $hour <"16:30"))
{
predictER($conn, $ticker,$erDate,$cutoff_date);
}
else
{
// echo "$erDate > $now $erDate>$today $erHour>’16:30′ \n\n”;
checkERResult($conn, $ticker,$erDate,$cutoff_date);
/*
$preERDate = getLastClosedTradingdate($erDate);
getHistPriceFromG($ticker, $preERDate, $curPrice);
$statement= “SELECT tick,max(erDate) as erDate,$curPrice as preERPrice,erMove as erRange,round($curPrice*(100+max(HighChg))/100,2) as UpLimit, round($curPrice*(100+min(lowChg))/100,2) as DownLimit,round($curPrice*(100+avg(erChange))/100,2) as expectERClose,round($curPrice*(100+(erChange))/100,2) as ERClose, round($curPrice*(100+avg(OpenChg))/100,2) as expectEROpen,round($curPrice*(100+avg(erChange)+1.28*stddev(erChange))/100,2) as UpTarget, round($curPrice*(100+avg(erChange)-1.28*stddev(erChange))/100,2) as DownTarget, stddev(erChange) as sd from sstk as s inner join erstks as e using (tick) WHERE FIND_IN_SET(tick,’$ticker’) and erDate>’$cutoff_date’ “;
$table = $ticker.”Latest ER Result: “;
queryDB($url,$statement, $table);
*/
}
$statement= “SELECT tick,erDate,price,marketcapM,outstandM,floatM,lscore as value, trend as TA, FA, MFI,shortRatio,shortScore,erShtScore,institution,erstks.avgVol,erstks.vol,erstks.pctChange,avgChg as estChg,erChange,preERrun,postERrun,openChg,highChg,lowChg,topOwner,pctOwned,optPain,cest-sdest,callVal,putVal FROM erstks WHERE FIND_IN_SET(erstks.tick,’$ticker’) ORDER BY “.$orderby;
$table =”ERbyTick”;
// queryDB($url,$statement, $table);
$selection=$conn->query($statement);
$num = $selection->num_rows;
if ($num <8)
echo "
NOTE: $ticker has limited ER history, thus statistic based on history data may not be as useful as other cases. Please reference this information with caution!
“;
}
if ($updateQuery)
updQueryCnt($conn, $ticker, $today);
$date8= date(‘Y-m-d’, strtotime(“-8 days”, strtotime($today)));
$statement= “SELECT tick, sum(totQuery) as totalCnt from lifan.sstkquery WHERE date>’$date8′ group by (tick) order by totalCnt desc limit 10”;
// echo $statement;
$table = “Currenty Hot Stocks: “;
// queryDB($url,$statement, $table);
$conn->close();
?>