def caifuziyou(stocklist): days0to100_data = bt.get_stock_data(bt.get_data(100), bt.get_data(0), *stocklist) days0to5_data = bt.get_stock_data(bt.get_data(5), bt.get_data(0), *stocklist) days0to15_data = bt.get_stock_data(bt.get_data(15), bt.get_data(0), *stocklist) days0to30_data = bt.get_stock_data(bt.get_data(30), bt.get_data(0), *stocklist) kelly_data = {} probability_rate = np.array([0.3, 0.3, 0.5, 0.8]) for i in days0to100_data: try: ''' get p ''' days0to100_data[i]["daily"] = days0to100_data[i][ 'Adj Close'].pct_change() days = 10 dt = 1.0000 / days mu = days0to100_data[i]["daily"].mean() sigma = days0to100_data[i]["daily"].std() startprice = days0to100_data[i]['Adj Close'].tolist()[-1] temp1, temp2, temp3, temp4 = 0.0, 0.0, 0.0, 0.0 bsum = 0 for j in range(1000): pricelist = bt.perdict10days(startprice, mu, dt, sigma, days=10) if bt.incornot(list(pricelist)) >= 0.03: temp1 += 1 bsum += bt.incornot(list(pricelist)) b = bsum / temp1 temp1 = float(temp1) / 1000 if bt.incornot(days0to5_data[i]['Adj Close'].tolist()) > 0.03: temp2 = 1 if bt.incornot(days0to15_data[i]['Adj Close'].tolist()) > 0.06: temp3 = 1 if bt.incornot(days0to30_data[i]['Adj Close'].tolist()) > 0.07: temp4 = 1 p = sum(probability_rate * np.array([temp1, temp2, temp3, temp4 ])) / sum(probability_rate) kelly_data[i] = [i, startprice, p, b * 9] except: pass l = [] for i in kelly_data: kelly_data[i].append( bt.kelly_caculation(kelly_data[i][-2], kelly_data[i][-1])) l.append(kelly_data[i]) l.sort(key=lambda x: x[-3], reverse=True) return l
def caifuziyou(stocklist): days0to15_data = bt.get_stock_data(bt.get_data(20), bt.get_data(0), *stocklist) days0to180_data = bt.get_stock_data(bt.get_data(180), bt.get_data(30), *stocklist) kelly_data = {} for i in days0to15_data: try: x1 = days0to15_data[i]['Adj Close'].tolist()[-1] x2 = max(days0to180_data[i]['Adj Close'].tolist()) if x2 / x1 >= 2: kelly_data[i] = x1 / x2 except: pass return kelly_data
content = pd.read_html(url) stocklist = content[0]['Symbol'].tolist() with open('/var/www/html/2.html', 'w') as file: file.write('<html> \n') file.write(' <head> \n') file.write(' <title>Stock Data</title> \n') file.write(' </head> \n') file.write(' <body> \n') for i in stocklist: file.write(' <H1> ' + i + ' </H1> \n') file.write(" <img alt='no image1' src='" + i + "10days.png'></img> \n") file.write(' </body> \n') file.write('<html> \n') while (1): data1 = bt.get_stock_data(bt.get_data(95), bt.get_data(1), *stocklist) for i in data1: data1[i]["daily"] = data1[i]['Adj Close'].pct_change() days = 10 dt = 1.0000 / days mu = data1[i]["daily"].mean() sigma = data1[i]["daily"].std() if data1[i]['Adj Close'].tolist() != []: startprice = data1[i]['Adj Close'].tolist()[-1] else: startprice = 0 - 100.00 for j in range(100): plt.plot(bt.perdict10days(startprice, mu, dt, sigma, days=10)) str1 = "/var/www/html/" + i + "10days.png" print(str1) plt.savefig(str1)
def caifuziyou(stocklist): earningdate = bt.get_next_event(*stocklist) latest_option_date = {} optiondata_call = {} optiondata_put = {} for i in earningdate: temp = yf.Ticker(i) if temp.options: for j in sorted(temp.options): if 3 < bt.get_date_delta(j, earningdate[i]) < 35: latest_option_date[i] = j break if i in latest_option_date: optiondata_call[i] = temp.option_chain( latest_option_date[i]).calls optiondata_put[i] = temp.option_chain( latest_option_date[i]).puts else: pass ''' check the stock flipping more than 2% ''' days0to100_data = bt.get_stock_data(bt.get_data(100), bt.get_data(0), *stocklist) days0to30_data = bt.get_stock_data(bt.get_data(20), bt.get_data(0), *stocklist) days30to60_data = bt.get_stock_data(bt.get_data(90), bt.get_data(0), *stocklist) days60to90_data = bt.get_stock_data(bt.get_data(180), bt.get_data(91), *stocklist) kelly_data = {} probability_rate = np.array([0.2, 0.2, 1, 0.2]) for i in latest_option_date: ''' get p ''' days0to100_data[i]["daily"] = days0to100_data[i][ 'Adj Close'].pct_change() days = 10 dt = 1.0000 / days mu = days0to100_data[i]["daily"].mean() sigma = days0to100_data[i]["daily"].std() startprice = days0to100_data[i]['Adj Close'].tolist()[-1] temp1, temp2, temp3, temp4 = 0.0, 0.0, 0.0, 0.0 for j in range(1000): pricelist = bt.perdict10days(startprice, mu, dt, sigma, days=10) if bt.incornot(list(pricelist)) > 0.02: temp1 += 1 temp1 = float(temp1) / 1000 if bt.incornot(days0to30_data[i]['Adj Close'].tolist()) > 0.03: temp2 = 1 if bt.incornot(days30to60_data[i]['Adj Close'].tolist()) > 0.1: temp3 = 1 if bt.incornot(days60to90_data[i]['Adj Close'].tolist()) > 0.1: temp4 = 1 p = sum(probability_rate * np.array([temp1, temp2, temp3, temp4])) / sum(probability_rate) if p >= 0.6: corp = "call" elif p <= 0.2: corp = "put" else: corp = "hold" if corp == "call": kelly_data[i] = [corp, i, latest_option_date[i], p] elif corp == "put" and 1 - p > 0.6: kelly_data[i] = [corp, i, latest_option_date[i], 1 - p] else: kelly_data[i] = [corp, i, -1, -1] ''' get b ''' strikelist_call = optiondata_call[i]["strike"].tolist() strikelist_put = optiondata_put[i]["strike"].tolist() target = bt.closestprice(strikelist_call, startprice) if optiondata_call[i].loc[lambda df: df['strike'] == target][[ "bid", "ask" ]].sum(axis=1).tolist() != []: option_call_price = optiondata_call[i].loc[ lambda df: df['strike'] == target][["bid", "ask"]].sum( axis=1).tolist()[0] / 2 else: option_call_price = 1000 if optiondata_put[i].loc[lambda df: df['strike'] == target][[ "bid", "ask" ]].sum(axis=1).tolist() != []: option_put_price = optiondata_put[i].loc[ lambda df: df['strike'] == target][["bid", "ask"]].sum( axis=1).tolist()[0] / 2 else: option_put_price = 1000 if option_call_price == 0 or not option_call_price: option_call_price = 1000 if option_put_price == 0 or not option_put_price: option_put_price = 1000 b_call = (startprice * 0.03 - 0) / option_call_price b_put = (startprice * 0.02 - 0) / option_put_price if kelly_data[i][0] == "call": kelly_data[i].append(b_call) kelly_data[i].append(option_call_price) kelly_data[i].append(target) if kelly_data[i][0] == "put": kelly_data[i].append(b_put) kelly_data[i].append(option_put_price) kelly_data[i].append(target) for i in kelly_data: if kelly_data[i][0] != "hold": kelly_data[i].append( bt.kelly_caculation(kelly_data[i][-4], kelly_data[i][-3])) else: kelly_data[i] = [] l = [] for i in kelly_data: if kelly_data[i] == [] or kelly_data[i][-1] == 0: continue l.append(kelly_data[i]) l.sort(key=lambda x: x[-5], reverse=True) return l
stocklist.append(i.replace("\n", "")) print stocklist if __name__ == "__main__": with open('/var/www/html/nsdq.html', 'w') as file: file.write('<html> \n') file.write(' <head> \n') file.write(' <title> NYSE Stock Data</title> \n') file.write(' </head> \n') file.write(' <body> \n') for i in stocklist: file.write(' <H1> ' + i + ' </H1> \n') file.write(" <img alt='no image1' src='" + i + ".png'></img> \n") file.write(' </body> \n') file.write('<html> \n') while (1): data1 = bt.get_stock_data(bt.get_data(365), bt.get_data(0), *stocklist) for i in stocklist: try: data1[i].plot(subplots=False, figsize=(10, 4)) str1 = "/var/www/html/" + i + ".png" plt.savefig(str1) plt.clf() plt.cla() plt.close() except: plt.clf() plt.cla() plt.close() time.sleep(86400)