Пример #1
0
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
Пример #2
0
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
Пример #3
0
 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)
Пример #4
0
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
Пример #5
0
        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)