function startOfDayUpdate() { // Update the highlights with start of day trigger highlights::eventTrigger(highlights::EVENT_START_DAY); // Make sure no expired users get emails. user::resetAllExpiredEmailUpdates(); // Delete previously deleted watchlists watchlist::pruneDeletedWatchlistIds(); watchlist::deleteZonedTickers(BREAKOUT_TRADE); watchlist::deleteZonedTickers(BREAKDOWN_TRADE); watchlist::deleteZonedTickers(LONG_TRADE); watchlist::deleteZonedTickers(SHORT_TRADE); watchlist::deleteZonedTickers(PULLBACK_TRADE); watchlist::deleteZonedTickers(BACKDRAFT_TRADE); $deleteIds = array(); $deleteHoldingsIds = array(); $holdings = new holdings(); while ($holdings->loadNext()) { $hid = $holdings->get_variable("holdings_id"); $tid = $holdings->get_variable("holdings_ticker_id"); $action = $holdings->get_variable("holdings_last_action"); $hidden = $holdings->get_variable("holdings_abandon_hide"); $tradeType = $holdings->get_variable("holdings_tradetype"); if (IsAbandoned($action) && $hidden == 0) { $deleteHoldingsIds[] = $hid; echo "\nDELETING Holdings ID " . $hid . " because it was abandoned"; $watchlist = new watchlist(); $watchlist->set_variable("watchlist_ticker_id", $tid); $watchlist->set_variable("watchlist_tradetype", $tradeType); while ($watchlist->loadNext()) { $deleteIds[] = $watchlist->get_variable("watchlist_id"); } } else { if (($tradeType == REVERSAL_TRADE || $tradeType == SHORT_TRADE) && $hidden == 0) { $hitT3 = $holdings->get_variable("holdings_t3_marked"); if ($hitT3 == 1) { $deleteHoldingsIds[] = $hid; echo "\nDELETING Holdings ID " . $hid . " because topped reversal/shorts"; $watchlist = new watchlist(); $watchlist->set_variable("watchlist_ticker_id", $tid); $watchlist->set_variable("watchlist_tradetype", $tradeType); while ($watchlist->loadNext()) { $deleteIds[] = $watchlist->get_variable("watchlist_id"); } } } else { if (($tradeType == BACKDRAFT_TRADE || $tradeType == PULLBACK_TRADE) && $hidden == 0) { $hitT1 = $holdings->get_variable("holdings_t1_marked"); if ($hitT1 == 1) { $deleteHoldingsIds[] = $hid; echo "\nDELETING Holdings ID " . $hid . " because topped pullback/backdraft"; $watchlist = new watchlist(); $watchlist->set_variable("watchlist_ticker_id", $tid); $watchlist->set_variable("watchlist_tradetype", $tradeType); while ($watchlist->loadNext()) { $deleteIds[] = $watchlist->get_variable("watchlist_id"); } } } } } } foreach ($deleteIds as $wid) { echo "\n\n\nDELETING Watchlist ID " . $wid . " because it is abandoned or topped out reversal/shorts"; $watchlist = new watchlist(); $watchlist->set_variable('watchlist_id', $wid); $watchlist->delete(); } foreach ($deleteHoldingsIds as $hid) { echo "\n\n\nDELETING Holdings ID " . $hid . " because it is abandoned or topped out reversal/shorts"; $holdings = new holdings(); $holdings->set_variable('holdings_id', $hid); // instead of deleting, mark it as hidden if ($holdings->load()) { $tickerInfo = new ticker(); $tickerInfo->set_variable('ticker_id', $holdings->get_variable('holdings_ticker_id')); if ($tickerInfo->load()) { $holdings->set_variable('holdings_ticker_symbol', $tickerInfo->get_variable('ticker_symbol')); } $holdings->set_variable('holdings_abandon_hide', 1); $holdings->set_variable('holdings_abandon_date', date('Y-m-d H:i:s')); $holdings->update(); } // replace this //$holdings->delete(); } // delete the tickers that are no longer used. $ticker = new ticker(); $deleteIds = array(); while ($ticker->loadNext()) { $tid = $ticker->get_variable("ticker_id"); // reset the high and low $last = $ticker->get_variable("last"); $ticker->set_variable("today_high", $last); $ticker->set_variable("today_low", $last); $ticker->set_variable("last_high", $last); $ticker->set_variable("last_low", $last); $ticker->update(); $watchlist = new watchlist(); $watchlist->set_variable("watchlist_ticker_id", $tid); if (!$watchlist->load()) { $holding = new holdings(); $holding->set_variable("holdings_ticker_id", $tid); $holding->set_variable("holdings_abandon_hide", 0); if (!$holding->load()) { $deleteIds[] = $tid; } } } foreach ($deleteIds as $tid) { echo "\n\n\nDELETING TICKER ID " . $tid . " because it is no longer used"; $ticker = new ticker(); $ticker->set_variable('ticker_id', $tid); $ticker->delete(); } $tickerHist = new ticker_history(); while ($tickerHist->loadNextDistinctTicker()) { $ticker = new ticker(); $tid = $tickerHist->get_variable('history_ticker_id'); $ticker->set_variable('ticker_id', $tid); if (!$ticker->load()) { echo "\nTicker History Cleanup:: Removing " . $tid . "\n"; ticker_history::removeTickerHistory($tid); } } // try to reconcile any payments that are not currently known. // now doing this whenever a payment is received. //payment_info::reconcileAllPaymentUids(); }
private function updateWatchlist() { $ticker = new ticker(); $date = date('Y-m-d H:i:s'); $deleteIds = array(); echo "\n\nUpdating Watchlist\n"; while ($ticker->loadNext()) { $tickerId = $ticker->get_variable('ticker_id'); $tickerSymbol = $ticker->get_variable('ticker_symbol'); $last = floatval($ticker->get_variable('last')); $low = floatval($ticker->get_variable('today_low')); $high = floatval($ticker->get_variable('today_high')); $watchlist = new watchlist(); $watchlist->set_variable('watchlist_ticker_id', $tickerId); while ($watchlist->loadNext()) { $zoned = $watchlist->get_variable('watchlist_is_zoned'); $watchlistId = $watchlist->get_variable('watchlist_id'); $bottom = floatval($watchlist->get_variable('watchlist_bottom')); $top = floatval($watchlist->get_variable('watchlist_top')); $watchlistLow = floatval($watchlist->get_variable('watchlist_low')); $tradeType = $watchlist->get_variable('watchlist_tradetype'); switch ($tradeType) { case SHORT_TRADE: case BACKDRAFT_TRADE: if ($zoned == 0 && ($last >= $bottom || $high >= $bottom) && ($last <= $top || $low <= $top && $low > 0)) { echo $watchlist->markZoned($tradeType); } else { if ($zoned == 1 && $last <= floatval($watchlist->get_variable('watchlist_target1'))) { $deleteIds[] = $watchlistId; } } break; case LONG_TRADE: case PULLBACK_TRADE: if ($zoned == 0 && $last >= $bottom && ($last <= $top || $low <= $top && $low > 0)) { echo $watchlist->markZoned($tradeType); } else { if ($zoned == 1 && $last >= floatval($watchlist->get_variable('watchlist_target1'))) { $deleteIds[] = $watchlistId; } } break; case REVERSAL_TRADE: if ($zoned == 0 && ($last <= $top || $low <= $top && $low > 0)) { echo $watchlist->markZoned($tradeType); } else { if ($zoned == 1 && $last >= floatval($watchlist->get_variable('watchlist_target1'))) { $deleteIds[] = $watchlistId; } } break; case BREAKOUT_TRADE: if ($zoned == 0 && ($last >= $watchlistLow || $low >= $watchlistLow)) { echo $watchlist->markZoned($tradeType); } else { if ($zoned == 1 && $last >= floatval($watchlist->get_variable('watchlist_target1'))) { $deleteIds[] = $watchlistId; } } break; case BREAKDOWN_TRADE: $lowerThanLastAndNotZero = $last <= $watchlistLow && $last != 0; $lowerThanLowAndNotZero = $low <= $watchlistLow && $low != 0; if ($zoned == 0 && ($lowerThanLastAndNotZero || $lowerThanLowAndNotZero)) { echo $watchlist->markZoned($tradeType); } else { if ($zoned == 1 && $last <= floatval($watchlist->get_variable('watchlist_target1'))) { $deleteIds[] = $watchlistId; } } break; } } } foreach ($deleteIds as $wId) { echo "\n\n\nDELETING WATCHLIST ID " . $wId . " because it passed T1 "; $watchlist = new watchlist(); $watchlist->set_variable('watchlist_id', $wId); $watchlist->delete(); } }
function endOfDayUpdate() { // Update the highlights with end of day trigger highlights::eventTrigger(highlights::EVENT_END_DAY); // Abandon the stocks that were marked abandon during the day abandonNowStocks(); // update the close price of the ticker $ticker = new ticker(); while ($ticker->loadNext()) { $last = $ticker->get_variable('last'); $ticker->set_variable('last_close', $last); $ticker->update(); } /// update the holdings $holdings = new holdings(); while ($holdings->loadNextAll()) { $last_action = $holdings->get_variable('holdings_last_action'); if (IsAbandoned($last_action)) { continue; } $last = floatval($holdings->get_variable('last')); $low = floatval($holdings->get_variable('today_low')); $t3 = floatval($holdings->get_variable('holdings_t3')); $tId = $holdings->get_variable('ticker_id'); $symbol = $holdings->get_variable('ticker_symbol'); $stopType = $holdings->get_variable('holdings_stop_type'); $stopPrice = floatval($holdings->get_variable('holdings_stop_price')); $hId = $holdings->get_variable('holdings_id'); $initSellPriceSet = $holdings->get_variable('holdings_init_sell_price_set'); $isT1Marked = $holdings->get_variable('holdings_t1_marked'); $tradeType = $holdings->get_variable("holdings_tradetype"); echo "\n\n\nChecking " . $hId . " ticker " . $tId . " against \$" . $last; $action = NONE; switch ($tradeType) { case BREAKDOWN_TRADE: case SHORT_TRADE: $doAbandon = $last > $stopPrice; break; case BACKDRAFT_TRADE: $doAbandon = $last > $stopPrice && !$isT1Marked; break; case LONG_TRADE: case REVERSAL_TRADE: case BREAKOUT_TRADE: $doAbandon = $last < $stopPrice; break; case PULLBACK_TRADE: $doAbandon = $last < $stopPrice && !$isT1Marked; break; } if ($doAbandon) { $tweet = new tweet(); $abandonEmail = new email(email::ADDRESSES_SMS_ONLY, $tradeType, $hId); $action = ABANDON; $tweet->newTweet($tradeType, $action, $symbol, $stopPrice); $abandonEmail->newEmail($tradeType, $action, $symbol, $stopPrice); $newHolding = new holdings(); $newHolding->set_variable('holdings_id', $hId); $newHolding->set_variable('holdings_last_action', $action); $newHolding->set_variable('holdings_abandon_marked', 1); $newHolding->update(); // Add a transaction to the transaction table holdings::CreateNewTransaction($hId, $tradeType, $stopPrice, $action); } if ($action != ABANDON && $last_action == WARNING) { // reset WARNING list $t1Marked = $holdings->get_variable('holdings_t1_marked'); $t2Marked = $holdings->get_variable('holdings_t2_marked'); $t3Marked = $holdings->get_variable('holdings_t3_marked'); if ($t3Marked) { $next_action = SELL3; } else { if ($t2Marked) { $next_action = SELL2; } else { if ($t1Marked) { $next_action = SELL1; } else { $next_action = BUY; } } } $newHoldings = new holdings(); $newHoldings->set_variable('holdings_id', $hId); $newHoldings->set_variable('holdings_last_action', $next_action); echo "\nREPLACE WARNING WITH LAST ACTION\n"; echo $newHoldings->debug(); $newHoldings->update(); } } // end of day, check to see if we are out of zone /* $watchlist = new watchlist(); $watchlist->set_variable('watchlist_is_zoned', 1); $deleteIds = array(); while ($watchlist->loadNext()){ $tradeType = $watchlist->get_variable("watchlist_tradetype"); $ticker = new ticker(); $ticker->set_variable('ticker_id', $watchlist->get_variable('watchlist_ticker_id')); if ($ticker->load()){ if ($tradeType==SHORT_TRADE){ $high = floatval($ticker->get_variable('today_high')); $bottom = floatval($watchlist->get_variable('watchlist_bottom')); if ($high < $bottom){ $watchlistId = floatval($watchlist->get_variable('watchlist_id')); $deleteIds[] = $watchlistId; } }else if ($tradeType==LONG_TRADE){ $low = floatval($ticker->get_variable('today_low')); $top = floatval($watchlist->get_variable('watchlist_top')); if ($low > $top){ $watchlistId = floatval($watchlist->get_variable('watchlist_id')); $deleteIds[] = $watchlistId; } }else if ($tradeType==REVERSAL_TRADE){ $low = floatval($ticker->get_variable('today_low')); $top = floatval($watchlist->get_variable('watchlist_top')); if ($low > $top){ $watchlistId = floatval($watchlist->get_variable('watchlist_id')); $deleteIds[] = $watchlistId; } } } } foreach ($deleteIds as $wId){ echo "\n\n\nDELETING WATCHLIST ID ". $wId. " because it was higher than top all day"; $watchlist = new watchlist(); $watchlist->set_variable('watchlist_id', $wId); $watchlist->delete(); } * */ }