Last active
April 22, 2016 18:03
-
-
Save pedramamini/932f78da2f7557cf3797dc39c1b72ecc to your computer and use it in GitHub Desktop.
Stock Market Games... these are from 2008.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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