Skip to content

Instantly share code, notes, and snippets.

@pedramamini
Last active April 22, 2016 18:03
Show Gist options
  • Save pedramamini/932f78da2f7557cf3797dc39c1b72ecc to your computer and use it in GitHub Desktop.
Save pedramamini/932f78da2f7557cf3797dc39c1b72ecc to your computer and use it in GitHub Desktop.
Stock Market Games... these are from 2008.
import sys
import thax
import datetime
y = thax.misc.finance.yahoo()
my_adds = ["ALU", "AMZN", "CMG", "COMS", "DCA", "PLA", "PZZA", "RICK", "UA", "VMW"]
sp_500 = ["BBT", "BDX", "BBBY", "BMS", "BBY", "BIG", "BIIB", "BJS", "BDK", "HRB", "BMC", "BA", "BXP", "BSX", "BMY", "BRCM", "BF.B", "BNI", "CHRW", "CA", "COG", "CAM", "CPB", "COF", "CAH", "CCL", "CAT", "CBG", "CBS", "CELG", "CNP", "CTX", "CTL", "CF", "SCHW", "CHK", "CVX", "CB", "CIEN", "CI", "CINF", "CTAS", "CSCO", "CIT", "C", "CTXS", "CLX", "CME", "CMS", "COH", "KO", "CCE", "CTSH", "CL", "CMCSA", "CMA", "CSC", "CPWR", "CAG", "COP", "CNX", "ED", "STZ", "CEG", "CVG", "CBE", "GLW", "COST", "CVH", "COV", "CSX", "CMI", "CVS", "DHI", "DHR", "DRI", "DVA", "DF", "DE", "DELL", "DDR", "DVN", "DTV", "DFS", "D", "RRD", "DOV", "DOW", "DPS", "DTE", "DD", "DUK", "DYN", "ETFC", "EMN", "EK", "ETN", "EBAY", "ECL", "EIX", "EP", "ERTS", "EQ", "EMC", "EMR", "ESV", "ETR", "EOG", "EFX", "EQR", "EL", "EXC", "EXPE", "EXPD", "ESRX", "XOM", "FDO", "FAST", "FII", "FDX", "FIS", "FITB", "FHN", "FE", "FISV", "FLS", "FLR", "F", "FRX", "FO", "FPL", "BEN", "FCX", "FTR", "GME", "GCI", "GPS", "GD", "GE", "GIS", "GM", "GGP", "GPC", "GNW", "GENZ", "GILD", "GS", "GR", "GT", "GOOG", "GWW", "HAL", "HOG", "HAR", "HRS", "HIG", "HAS", "HCP", "HNZ", "HPC", "HES", "HPQ", "HD", "HON", "HSP", "HST", "HCBK", "HUM", "HBAN", "ITW", "RX", "IR", "TEG", "INTC", "ICE", "IBM", "IFF", "IGT", "IP", "IPG", "INTU", "ISRG", "IVZ", "ITT", "JBL", "JEC", "JNS", "JDSU", "JNJ", "JCI", "JNY", "JPM", "JNPR", "KBH", "K", "KEY", "KMB", "KIM", "KG", "KLAC", "KSS", "KFT", "KR", "LLL", "LH", "LM", "LEG", "LEN", "LUK", "LXK", "LLY", "LTD", "LNC", "LLTC", "LIZ", "LMT", "L", "LO", "LOW", "LSI", "MTB", "M", "MTW", "MRO", "MAR", "MMC", "MI", "MAS", "MEE", "MA", "MAT", "MBI", "MKC", "MCD", "MHP", "MCK", "MWV", "MHS", "MDT", "WFR", "MRK", "MDP", "MER", "MET", "MCHP", "MU", "MSFT", "MIL", "MOLX", "TAP", "MON", "MNST", "MCO", "MS", "MOT", "MUR", "MYL", "NBR", "NDAQ", "NCC", "NOV", "NSM", "NTAP", "NYT", "NWL", "NEM", "NWS.A", "GAS", "NKE", "NI", "NE", "NBL", "JWN", "NSC", "NTRS", "NOC", "NOVL", "NVLS", "NUE", "NVDA", "NYX", "OXY", "ODP", "OMC", "ORCL", "PCAR", "PTV", "PLL", "PH", "PDCO", "PAYX", "BTU", "JCP", "POM", "PBG", "PEP", "PKI", "PFE", "PCG", "PM", "PNW", "PXD", "PBI", "PCL", "PNC", "RL", "PPG", "PPL", "PX", "PCP", "PFG", "PG", "PGN", "PGR", "PLD", "PRU", "PEG", "PSA", "PHM", "QLGC", "QCOM", "DGX", "STR", "Q", "RSH", "RRC", "RTN", "RF", "RAI", "RHI", "ROK", "COL", "ROH", "RDC", "R", "SWY", "CRM", "SNDK", "SLE", "SGP", "SLB", "SNI", "SEE", "SHLD", "SRE", "SHW", "SIAL", "SPG", "SLM", "SII", "SJM", "SNA", "SO", "LUV", "SWN", "SOV", "SE", "S", "STJ", "SWK", "SPLS", "SBUX", "HOT", "STT", "SYK", "JAVA", "SUN", "STI", "SVU", "SYMC", "SYY", "TROW", "TGT", "TE", "TLAB", "THC", "TDC", "TER", "TSO", "TXN", "TXT", "HSY", "TRV", "TMO", "TIF", "TWX", "TIE", "TJX", "TMK", "TSS", "RIG", "TEL", "TYC", "TSN", "USB", "UNP", "UIS", "UNH", "UPS", "X", "UTX", "UNM", "UST", "VFC", "VLO", "VAR", "VRSN", "VZ", "VIA.B", "VNO", "VMC", "WB", "WMT", "WAG", "DIS", "WPO", "WMI", "WAT", "WPI", "WFT", "WLP", "WFC", "WU", "WY", "WHR", "WFMI", "WMB", "WIN", "WEC", "WYE", "WYN", "XEL", "XRX", "XLNX", "XL", "XTO", "YHOO", "YUM", "ZMH", "ZION"]
sixty_days_ago = (datetime.datetime.now() - datetime.timedelta(days=60)).date()
failed = []
print "ticker,current price,30 day low,distance,date,year low,distance,date"
for ticker in my_adds + sp_500:
sys.stderr.write(">>> analyzing %s \r" % ticker)
# ignore stocks which have split in the past 2 months.
for s in y.find_splits(ticker):
if s[0] > sixty_days_ago:
continue
try:
price = y.price()
date, low = y.search(days=30, stat="low", comp=min)
year_low = y.year_low()
year_low_date = y.day_of("year_low")
except:
failed.append(ticker)
continue
dist = (price - low) / price * 100
year_dist = (price - year_low) / price * 100
if dist > 10:
continue
print "%s,%.02f,%.02f,%.02f%%,%s,%.02f,%.02f%%,%s" % (ticker, price, low, dist, date, year_low, year_dist, year_low_date)
sys.stderr.write("Failed: %s" % str(failed))
import sys
import thax
import datetime
y = thax.misc.finance.yahoo()
my_adds = ["ALU", "AMZN", "CMG", "COMS", "CONN", "DCA", "PLA", "PZZA", "RICK", "UA", "VMW"]
sp_500 = ["BBT", "BDX", "BBBY", "BMS", "BBY", "BIG", "BIIB", "BJS", "BDK", "HRB", "BMC", "BA", "BXP", "BSX", "BMY", "BRCM", "BF.B", "BNI", "CHRW", "CA", "COG", "CAM", "CPB", "COF", "CAH", "CCL", "CAT", "CBG", "CBS", "CELG", "CNP", "CTX", "CTL", "CF", "SCHW", "CHK", "CVX", "CB", "CIEN", "CI", "CINF", "CTAS", "CSCO", "CIT", "C", "CTXS", "CLX", "CME", "CMS", "COH", "KO", "CCE", "CTSH", "CL", "CMCSA", "CMA", "CSC", "CPWR", "CAG", "COP", "CNX", "ED", "STZ", "CEG", "CVG", "CBE", "GLW", "COST", "CVH", "COV", "CSX", "CMI", "CVS", "DHI", "DHR", "DRI", "DVA", "DF", "DE", "DELL", "DDR", "DVN", "DTV", "DFS", "D", "RRD", "DOV", "DOW", "DPS", "DTE", "DD", "DUK", "DYN", "ETFC", "EMN", "EK", "ETN", "EBAY", "ECL", "EIX", "EP", "ERTS", "EQ", "EMC", "EMR", "ESV", "ETR", "EOG", "EFX", "EQR", "EL", "EXC", "EXPE", "EXPD", "ESRX", "XOM", "FDO", "FAST", "FII", "FDX", "FIS", "FITB", "FHN", "FE", "FISV", "FLS", "FLR", "F", "FRX", "FO", "FPL", "BEN", "FCX", "FTR", "GME", "GCI", "GPS", "GD", "GE", "GIS", "GM", "GGP", "GPC", "GNW", "GENZ", "GILD", "GS", "GR", "GT", "GOOG", "GWW", "HAL", "HOG", "HAR", "HRS", "HIG", "HAS", "HCP", "HNZ", "HPC", "HES", "HPQ", "HD", "HON", "HSP", "HST", "HCBK", "HUM", "HBAN", "ITW", "RX", "IR", "TEG", "INTC", "ICE", "IBM", "IFF", "IGT", "IP", "IPG", "INTU", "ISRG", "IVZ", "ITT", "JBL", "JEC", "JNS", "JDSU", "JNJ", "JCI", "JNY", "JPM", "JNPR", "KBH", "K", "KEY", "KMB", "KIM", "KG", "KLAC", "KSS", "KFT", "KR", "LLL", "LH", "LM", "LEG", "LEN", "LUK", "LXK", "LLY", "LTD", "LNC", "LLTC", "LIZ", "LMT", "L", "LO", "LOW", "LSI", "MTB", "M", "MTW", "MRO", "MAR", "MMC", "MI", "MAS", "MEE", "MA", "MAT", "MBI", "MKC", "MCD", "MHP", "MCK", "MWV", "MHS", "MDT", "WFR", "MRK", "MDP", "MER", "MET", "MCHP", "MU", "MSFT", "MIL", "MOLX", "TAP", "MON", "MNST", "MCO", "MS", "MOT", "MUR", "MYL", "NBR", "NDAQ", "NCC", "NOV", "NSM", "NTAP", "NYT", "NWL", "NEM", "NWS.A", "GAS", "NKE", "NI", "NE", "NBL", "JWN", "NSC", "NTRS", "NOC", "NOVL", "NVLS", "NUE", "NVDA", "NYX", "OXY", "ODP", "OMC", "ORCL", "PCAR", "PTV", "PLL", "PH", "PDCO", "PAYX", "BTU", "JCP", "POM", "PBG", "PEP", "PKI", "PFE", "PCG", "PM", "PNW", "PXD", "PBI", "PCL", "PNC", "RL", "PPG", "PPL", "PX", "PCP", "PFG", "PG", "PGN", "PGR", "PLD", "PRU", "PEG", "PSA", "PHM", "QLGC", "QCOM", "DGX", "STR", "Q", "RSH", "RRC", "RTN", "RF", "RAI", "RHI", "ROK", "COL", "ROH", "RDC", "R", "SWY", "CRM", "SNDK", "SLE", "SGP", "SLB", "SNI", "SEE", "SHLD", "SRE", "SHW", "SIAL", "SPG", "SLM", "SII", "SJM", "SNA", "SO", "LUV", "SWN", "SOV", "SE", "S", "STJ", "SWK", "SPLS", "SBUX", "HOT", "STT", "SYK", "JAVA", "SUN", "STI", "SVU", "SYMC", "SYY", "TROW", "TGT", "TE", "TLAB", "THC", "TDC", "TER", "TSO", "TXN", "TXT", "HSY", "TRV", "TMO", "TIF", "TWX", "TIE", "TJX", "TMK", "TSS", "RIG", "TEL", "TYC", "TSN", "USB", "UNP", "UIS", "UNH", "UPS", "X", "UTX", "UNM", "UST", "VFC", "VLO", "VAR", "VRSN", "VZ", "VIA.B", "VNO", "VMC", "WB", "WMT", "WAG", "DIS", "WPO", "WMI", "WAT", "WPI", "WFT", "WLP", "WFC", "WU", "WY", "WHR", "WFMI", "WMB", "WIN", "WEC", "WYE", "WYN", "XEL", "XRX", "XLNX", "XL", "XTO", "YHOO", "YUM", "ZMH", "ZION"]
sixty_days_ago = (datetime.datetime.now() - datetime.timedelta(days=60)).date()
failed = []
# ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Clos']
for ticker in my_adds + sp_500:
sys.stderr.write(">>> analyzing %s \r" % ticker)
# ignore stocks which have split in the past 2 months.
for s in y.find_splits(ticker):
if s[0] > sixty_days_ago:
continue
try:
days = y.historical(days=30)
except:
failed.append(ticker)
continue
spreads = []
for day in days:
spreads.append((day[2] - day[3]) / ((day[2] + day[3]) / 2) * 100)
avg_30_spread = sum(spreads) / len(spreads)
# if the average daily spread over the past 30 days is less than 15%, ignore this ticker.
if avg_30_spread < 15:
continue
# now determine where the opening price generally falls in the range.
spreads = []
for day in days:
spreads.append(abs(day[1] - day[3]) / day[3] * 100)
avg_open_dist_from_low = sum(spreads) / len(spreads)
print "%s,%.02f,%.02f%s" % (ticker, avg_30_spread, avg_open_dist_from_low, " " * 25)
sys.stderr.write("Failed: %s" % str(failed))
'''
some stocks returned by google have already been delisted and actually are already on a difference exchange. verify by
comparing in analysis script.
'''
import sys
import thax
import datetime
fields = ["QuoteLast", "EPS", "QuotePercChange", "High52Week", "Low52Week", "Price52WeekPercChange", "Price50DayAverage", "Price150DayAverage", "Price200DayAverage", "Price13WeekPercChange", "Price26WeekPercChange", "MarketCap", "PE", "ForwardPE1Year", "DividendRecentQuarter", "DividendNextQuarter", "DPSRecentYear", "IAD", "DividendPerShare", "DividendYield", "Dividend", "BookValuePerShareYear", "CashPerShareYear", "CurrentRatioYear", "LTDebtToAssetsYear", "LTDebtToAssetsQuarter", "TotalDebtToAssetsYear", "TotalDebtToAssetsQuarter", "LTDebtToEquityYear", "LTDebtToEquityQuarter", "TotalDebtToEquityYear", "TotalDebtToEquityQuarter", "AINTCOV", "ReturnOnInvestmentTTM", "ReturnOnInvestment5Years", "ReturnOnInvestmentYear", "ReturnOnAssetsTTM", "ReturnOnAssets5Years", "ReturnOnAssetsYear", "ReturnOnEquityTTM", "ReturnOnEquity5Years", "ReturnOnEquityYear", "Beta", "Float", "InstitutionalPercentHeld", "Volume", "AverageVolume", "GrossMargin", "EBITDMargin", "OperatingMargin", "NetProfitMarginPercent", "NetIncomeGrowthRate5Years", "RevenueGrowthRate5Years", "RevenueGrowthRate10Years", "EPSGrowthRate5Years", "EPSGrowthRate10Years"]
y = thax.misc.finance.yahoo()
g = thax.misc.finance.google()
g.add_criteria("Volume")
g.add_criteria("AverageVolume", 20000)
g.add_criteria("QuotePercChange")
g.add_criteria("Price50DayAverage")
g.add_criteria("Low52Week", .01)
g.add_criteria("QuoteLast", .01, 2)
g.add_criteria("NetProfitMarginPercent")
#g.sectors=["Technology"]
print g
g.search()
print "analyzing %d results" % len(g.results)
picks = []
for ticker, data in g.results.iteritems():
try:
percent_from_year_low = (data["QuoteLast"] - data["Low52Week"]) / data["Low52Week"] * 100
if percent_from_year_low > 10:
continue
y.symbol = ticker
avg_30_spread = y.average(days=30, stat="spread")
if avg_30_spread < 15:
continue
# ignore any stocks which have had a split in the past year.
#if y.find_split(days=365):
# continue
# ensure the 52 week low is at least 2 weeks away.
two_weeks = datetime.datetime.now() - datetime.timedelta(days=14)
year_low = y.day_of("year_low")
if year_low > two_weeks.date():
continue
week_high = y.search(days=7, stat="high")[1]
week_low = y.search(days=7, stat="low", comp=min)[1]
dist_week_high = (week_high - data["QuoteLast"]) / data["QuoteLast"] * 100
dist_week_low = (week_low - data["QuoteLast"]) / data["QuoteLast"] * 100
spread = dist_week_high - dist_week_low
picks.append((ticker, spread))
print ticker
print "\tlast price: ",data["QuoteLast"]
print "\tavg. 30 day spread: ",avg_30_spread
print "\tyear low: ",data["Low52Week"],year_low
print "\t% of year low: ",percent_from_year_low
print "\t% net profit margin: ",data["NetProfitMarginPercent"]
print "\t7 day high: ",week_high,dist_week_high
print "\t7 day low: ",week_low,dist_week_low
except:
print "****** ERROR processing %s, ignoring." % y.symbol
def compare (a, b):
return cmp(a[1], b[1])
picks.sort(cmp=compare)
picks.reverse()
print "\ntop 5 algorithmic picks:"
for ticker, spread in picks[:5]:
print "%s has a spread of %.02f%%" % (ticker, spread)
import sys
import thax
import datetime
y = thax.misc.finance.yahoo()
my_adds = ["ALU", "AMZN", "CMG", "COMS", "DCA", "PLA", "PZZA", "RICK", "UA", "VMW"]
sp_500 = ["BBT", "BDX", "BBBY", "BMS", "BBY", "BIG", "BIIB", "BJS", "BDK", "HRB", "BMC", "BA", "BXP", "BSX", "BMY", "BRCM", "BF.B", "BNI", "CHRW", "CA", "COG", "CAM", "CPB", "COF", "CAH", "CCL", "CAT", "CBG", "CBS", "CELG", "CNP", "CTX", "CTL", "CF", "SCHW", "CHK", "CVX", "CB", "CIEN", "CI", "CINF", "CTAS", "CSCO", "CIT", "C", "CTXS", "CLX", "CME", "CMS", "COH", "KO", "CCE", "CTSH", "CL", "CMCSA", "CMA", "CSC", "CPWR", "CAG", "COP", "CNX", "ED", "STZ", "CEG", "CVG", "CBE", "GLW", "COST", "CVH", "COV", "CSX", "CMI", "CVS", "DHI", "DHR", "DRI", "DVA", "DF", "DE", "DELL", "DDR", "DVN", "DTV", "DFS", "D", "RRD", "DOV", "DOW", "DPS", "DTE", "DD", "DUK", "DYN", "ETFC", "EMN", "EK", "ETN", "EBAY", "ECL", "EIX", "EP", "ERTS", "EQ", "EMC", "EMR", "ESV", "ETR", "EOG", "EFX", "EQR", "EL", "EXC", "EXPE", "EXPD", "ESRX", "XOM", "FDO", "FAST", "FII", "FDX", "FIS", "FITB", "FHN", "FE", "FISV", "FLS", "FLR", "F", "FRX", "FO", "FPL", "BEN", "FCX", "FTR", "GME", "GCI", "GPS", "GD", "GE", "GIS", "GM", "GGP", "GPC", "GNW", "GENZ", "GILD", "GS", "GR", "GT", "GOOG", "GWW", "HAL", "HOG", "HAR", "HRS", "HIG", "HAS", "HCP", "HNZ", "HPC", "HES", "HPQ", "HD", "HON", "HSP", "HST", "HCBK", "HUM", "HBAN", "ITW", "RX", "IR", "TEG", "INTC", "ICE", "IBM", "IFF", "IGT", "IP", "IPG", "INTU", "ISRG", "IVZ", "ITT", "JBL", "JEC", "JNS", "JDSU", "JNJ", "JCI", "JNY", "JPM", "JNPR", "KBH", "K", "KEY", "KMB", "KIM", "KG", "KLAC", "KSS", "KFT", "KR", "LLL", "LH", "LM", "LEG", "LEN", "LUK", "LXK", "LLY", "LTD", "LNC", "LLTC", "LIZ", "LMT", "L", "LO", "LOW", "LSI", "MTB", "M", "MTW", "MRO", "MAR", "MMC", "MI", "MAS", "MEE", "MA", "MAT", "MBI", "MKC", "MCD", "MHP", "MCK", "MWV", "MHS", "MDT", "WFR", "MRK", "MDP", "MER", "MET", "MCHP", "MU", "MSFT", "MIL", "MOLX", "TAP", "MON", "MNST", "MCO", "MS", "MOT", "MUR", "MYL", "NBR", "NDAQ", "NCC", "NOV", "NSM", "NTAP", "NYT", "NWL", "NEM", "NWS.A", "GAS", "NKE", "NI", "NE", "NBL", "JWN", "NSC", "NTRS", "NOC", "NOVL", "NVLS", "NUE", "NVDA", "NYX", "OXY", "ODP", "OMC", "ORCL", "PCAR", "PTV", "PLL", "PH", "PDCO", "PAYX", "BTU", "JCP", "POM", "PBG", "PEP", "PKI", "PFE", "PCG", "PM", "PNW", "PXD", "PBI", "PCL", "PNC", "RL", "PPG", "PPL", "PX", "PCP", "PFG", "PG", "PGN", "PGR", "PLD", "PRU", "PEG", "PSA", "PHM", "QLGC", "QCOM", "DGX", "STR", "Q", "RSH", "RRC", "RTN", "RF", "RAI", "RHI", "ROK", "COL", "ROH", "RDC", "R", "SWY", "CRM", "SNDK", "SLE", "SGP", "SLB", "SNI", "SEE", "SHLD", "SRE", "SHW", "SIAL", "SPG", "SLM", "SII", "SJM", "SNA", "SO", "LUV", "SWN", "SOV", "SE", "S", "STJ", "SWK", "SPLS", "SBUX", "HOT", "STT", "SYK", "JAVA", "SUN", "STI", "SVU", "SYMC", "SYY", "TROW", "TGT", "TE", "TLAB", "THC", "TDC", "TER", "TSO", "TXN", "TXT", "HSY", "TRV", "TMO", "TIF", "TWX", "TIE", "TJX", "TMK", "TSS", "RIG", "TEL", "TYC", "TSN", "USB", "UNP", "UIS", "UNH", "UPS", "X", "UTX", "UNM", "UST", "VFC", "VLO", "VAR", "VRSN", "VZ", "VIA.B", "VNO", "VMC", "WB", "WMT", "WAG", "DIS", "WPO", "WMI", "WAT", "WPI", "WFT", "WLP", "WFC", "WU", "WY", "WHR", "WFMI", "WMB", "WIN", "WEC", "WYE", "WYN", "XEL", "XRX", "XLNX", "XL", "XTO", "YHOO", "YUM", "ZMH", "ZION"]
results = []
for ticker in my_adds + sp_500:
sys.stderr.write(">>> analyzing %s \r" % ticker)
sr = y.short_ratio(ticker)
if sr:
results.append((ticker, sr))
# clear the line.
sys.stderr.write(" " * 80 + "\r")
def compare (a, b):
return cmp(a[1], b[1])
results.sort(cmp=compare)
results.reverse()
print "showing 25 of %d results" % len(results)
for ticker, sr in results[:25]:
print "%s: %.02f" % (ticker, sr)
import sys
import thax
import datetime
y = thax.misc.finance.yahoo()
g = thax.misc.finance.google()
g.add_criteria("Low52Week", .01)
g.add_criteria("QuoteLast", .01, 2)
g.add_criteria("AverageVolume", 20000)
print g
g.search()
print "analyzing %d results" % len(g.results)
results = []
for ticker, data in g.results.iteritems():
sys.stderr.write(">>> analyzing %s \r" % ticker)
sr = y.short_ratio(ticker)
if sr:
results.append((ticker, sr))
# clear the line.
sys.stderr.write(" " * 80 + "\r")
def compare (a, b):
return cmp(a[1], b[1])
results.sort(cmp=compare)
results.reverse()
print "showing the 8-12 range of %d total results" % len(results)
for ticker, sr in results:
if 8.0 <= sr <= 12.0:
try:
price = y.price(ticker)
avg_7 = (y.average(days=7, stat="high") + y.average(days=7, stat="low")) / 2
except:
continue
print "%s: %.02f" % (ticker, sr)
if price > avg_7:
increase = (price - avg_7) / price
if increase > 15:
print "\t increase of %.02f past week" % increase
import sys
import thax
import datetime
y = thax.misc.finance.yahoo()
my_adds = ["ALU", "AMZN", "CMG", "COMS", "DCA", "PLA", "PZZA", "RICK", "UA", "VMW"]
sp_500 = ["BBT", "BDX", "BBBY", "BMS", "BBY", "BIG", "BIIB", "BJS", "BDK", "HRB", "BMC", "BA", "BXP", "BSX", "BMY", "BRCM", "BF.B", "BNI", "CHRW", "CA", "COG", "CAM", "CPB", "COF", "CAH", "CCL", "CAT", "CBG", "CBS", "CELG", "CNP", "CTX", "CTL", "CF", "SCHW", "CHK", "CVX", "CB", "CIEN", "CI", "CINF", "CTAS", "CSCO", "CIT", "C", "CTXS", "CLX", "CME", "CMS", "COH", "KO", "CCE", "CTSH", "CL", "CMCSA", "CMA", "CSC", "CPWR", "CAG", "COP", "CNX", "ED", "STZ", "CEG", "CVG", "CBE", "GLW", "COST", "CVH", "COV", "CSX", "CMI", "CVS", "DHI", "DHR", "DRI", "DVA", "DF", "DE", "DELL", "DDR", "DVN", "DTV", "DFS", "D", "RRD", "DOV", "DOW", "DPS", "DTE", "DD", "DUK", "DYN", "ETFC", "EMN", "EK", "ETN", "EBAY", "ECL", "EIX", "EP", "ERTS", "EQ", "EMC", "EMR", "ESV", "ETR", "EOG", "EFX", "EQR", "EL", "EXC", "EXPE", "EXPD", "ESRX", "XOM", "FDO", "FAST", "FII", "FDX", "FIS", "FITB", "FHN", "FE", "FISV", "FLS", "FLR", "F", "FRX", "FO", "FPL", "BEN", "FCX", "FTR", "GME", "GCI", "GPS", "GD", "GE", "GIS", "GM", "GGP", "GPC", "GNW", "GENZ", "GILD", "GS", "GR", "GT", "GOOG", "GWW", "HAL", "HOG", "HAR", "HRS", "HIG", "HAS", "HCP", "HNZ", "HPC", "HES", "HPQ", "HD", "HON", "HSP", "HST", "HCBK", "HUM", "HBAN", "ITW", "RX", "IR", "TEG", "INTC", "ICE", "IBM", "IFF", "IGT", "IP", "IPG", "INTU", "ISRG", "IVZ", "ITT", "JBL", "JEC", "JNS", "JDSU", "JNJ", "JCI", "JNY", "JPM", "JNPR", "KBH", "K", "KEY", "KMB", "KIM", "KG", "KLAC", "KSS", "KFT", "KR", "LLL", "LH", "LM", "LEG", "LEN", "LUK", "LXK", "LLY", "LTD", "LNC", "LLTC", "LIZ", "LMT", "L", "LO", "LOW", "LSI", "MTB", "M", "MTW", "MRO", "MAR", "MMC", "MI", "MAS", "MEE", "MA", "MAT", "MBI", "MKC", "MCD", "MHP", "MCK", "MWV", "MHS", "MDT", "WFR", "MRK", "MDP", "MER", "MET", "MCHP", "MU", "MSFT", "MIL", "MOLX", "TAP", "MON", "MNST", "MCO", "MS", "MOT", "MUR", "MYL", "NBR", "NDAQ", "NCC", "NOV", "NSM", "NTAP", "NYT", "NWL", "NEM", "NWS.A", "GAS", "NKE", "NI", "NE", "NBL", "JWN", "NSC", "NTRS", "NOC", "NOVL", "NVLS", "NUE", "NVDA", "NYX", "OXY", "ODP", "OMC", "ORCL", "PCAR", "PTV", "PLL", "PH", "PDCO", "PAYX", "BTU", "JCP", "POM", "PBG", "PEP", "PKI", "PFE", "PCG", "PM", "PNW", "PXD", "PBI", "PCL", "PNC", "RL", "PPG", "PPL", "PX", "PCP", "PFG", "PG", "PGN", "PGR", "PLD", "PRU", "PEG", "PSA", "PHM", "QLGC", "QCOM", "DGX", "STR", "Q", "RSH", "RRC", "RTN", "RF", "RAI", "RHI", "ROK", "COL", "ROH", "RDC", "R", "SWY", "CRM", "SNDK", "SLE", "SGP", "SLB", "SNI", "SEE", "SHLD", "SRE", "SHW", "SIAL", "SPG", "SLM", "SII", "SJM", "SNA", "SO", "LUV", "SWN", "SOV", "SE", "S", "STJ", "SWK", "SPLS", "SBUX", "HOT", "STT", "SYK", "JAVA", "SUN", "STI", "SVU", "SYMC", "SYY", "TROW", "TGT", "TE", "TLAB", "THC", "TDC", "TER", "TSO", "TXN", "TXT", "HSY", "TRV", "TMO", "TIF", "TWX", "TIE", "TJX", "TMK", "TSS", "RIG", "TEL", "TYC", "TSN", "USB", "UNP", "UIS", "UNH", "UPS", "X", "UTX", "UNM", "UST", "VFC", "VLO", "VAR", "VRSN", "VZ", "VIA.B", "VNO", "VMC", "WB", "WMT", "WAG", "DIS", "WPO", "WMI", "WAT", "WPI", "WFT", "WLP", "WFC", "WU", "WY", "WHR", "WFMI", "WMB", "WIN", "WEC", "WYE", "WYN", "XEL", "XRX", "XLNX", "XL", "XTO", "YHOO", "YUM", "ZMH", "ZION"]
sixty_days_ago = (datetime.datetime.now() - datetime.timedelta(days=60)).date()
failed = []
results = []
done = float(0)
total = float(len(my_adds) + len(sp_500))
# ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Clos']
for ticker in my_adds + sp_500:
done += 1
sys.stderr.write(">>> analyzing %s [%.02f%%] \r" % (ticker, done / total * 100))
# ignore stocks which have split in the past 2 months.
for s in y.find_splits(ticker):
if s[0] > sixty_days_ago:
continue
try:
avg = y.average(days=30)
cur = y.price()
except:
failed.append(ticker)
continue
if cur > avg:
continue
# % above 30 day average.
try:
distance = (avg - cur) / cur * 100
except:
failed.append(ticker)
continue
if distance < 10:
continue
results.append((ticker, avg, cur, distance))
def d_cmp (a, b):
return cmp(a[3], b[3])
results.sort(cmp=d_cmp)
for r in results:
print "%5s, 30-day avg: %.02f, cur: %.02f, distance: %.02f%%%s" % (r[0], r[1], r[2], r[3], " " * 25)
sys.stderr.write("Failed: %s" % str(failed))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment