Exemplo n.º 1
0
                disMoney = shareTotal * d[1]
                if stype == BONUS_SHARE:  # 红利再投
                    shareTotal += disMoney / sT.getFundPrice(code[i], d[2])[1]
                else:  # 现金红利
                    bonusTotal += disMoney

        d0 = date

        moneyTotal = moneyTotal + float(t[2].replace(",", ""))
        diff = float(t[1]) * shareTotal - moneyTotal
        rate = diff / moneyTotal
        rateList.append(rate * 100.0)

    #print((dateList)
    dataList.append([dateList, rateList])

for i in range(len(dataList)):  #日期选择一个日期,坐标轴不能有两种不同的日期表示
    plt.plot(dataList[0][0], dataList[i][1], label=name[i])
ax = plt.gca()
ax.yaxis.set_major_locator(
    mpl.ticker.MultipleLocator(1 if sT.createCalender().dayDiff(
        STARTYEAR, STARTMONTH, STARTDAY, ENDYEAR, ENDMONTH, ENDDAY) < 365 *
                               3 else 5))
ax.yaxis.set_major_formatter(mpl.ticker.FormatStrFormatter("%.0f%%"))
ax.axhline(color='black', y=0)
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
plt.legend(loc=0, ncol=len(dataList), mode="expand", borderaxespad=0.0)
plt.gcf().autofmt_xdate()
plt.grid(True)
plt.show()
Exemplo n.º 2
0
                    bestRate = rate
                    bestRateTime = tradeDate
                    bestEarn = profit

    if ENDMONTH==12:
        year = ENDYEAR+1
        month = 1
    else:
        year = ENDYEAR
        month = ENDMONTH+1
    foundData,closePrice,actualMonth, day=sT.getClosePriceBackward(code[i],ENDYEAR, ENDMONTH, ENDDAY)
    if foundData==True:
        nCapitalTotal = nStockTotal*closePrice+ndividend
        income = nCapitalTotal-nCapitalInvest
        incomeRate = income/nCapitalInvest
        investPeriod = round(sT.createCalender().dayDiff(STARTYEAR,STARTMONTH,1,year,actualMonth,day)/365.0, 2)
        dictColumnValues[u'代码'] = code[i]
        dictColumnValues[u'名称'] = name[i]
        dictColumnValues[u'投资年数'] = investPeriod
        dictColumnValues[u'投资起始时间'] = sT.getDateString(STARTYEAR,STARTMONTH,1)
        dictColumnValues[u'卖出股份时间'] = sT.getDateString(ENDYEAR,ENDMONTH,ENDDAY)
        dictColumnValues[u'投资总成本'] = nCapitalInvest
        dictColumnValues[u'投资总市值'] = nCapitalTotal
        dictColumnValues[u'投资总收益'] = income
        dictColumnValues[u'分红'] = ndividend
        dictColumnValues[u'平均年收益'] = round(income/investPeriod,2)
        dictColumnValues[u'投资收益率'] = round(incomeRate,4)
        dictColumnValues[u'投资年化复合收益率'] = round(((incomeRate+1)**(1.0/investPeriod)-1),4)
        dictColumnValues[u'总股本'] = nStockTotal
        dictColumnValues[u'购买股本'] = nStockInvest
        dictColumnValues[u"每月最小投资额"] = nMinInvPerMonth
Exemplo n.º 3
0
 if year > LASTYEAR:
     _, closePrice, _, _ = sT.getClosePriceForward(code, date)
 else:
     _, closePrice, m2, d2 = sT.getClosePriceForward(code, year, 12, 31)
 PEList.append(0 if EPS <= 0 else closePrice / EPS)
 PEDiscList.append(0 if epsdic <= 0 else closePrice / epsdic)
 PriceList.append(closePrice * totalStock)  # 得到当年总市值
 print( sT.getDateString(year,m2,d2),",BasicPETTM=",PEList[-1],", ","discountPETTM=",PEDiscList[-1],\
                        "stockcount=",totalStock,"priceTotal=", round(PriceList[-1]/10**4,0), ",EPSTTM=",EPS,\
                        ",EPSDicountTTM=",epsdic)
 drawPE = PEList[-1]
 for dt in DATA2WATCH:
     y1, m1, d1 = sT.splitDateString(dt)
     if y1 == year:
         foundData = False
         qt = sT.createCalender().getQuarter(m1)
         if qt == 1:
             foundData, EPSTTM = sT.getStockEPSTTM(code, y1 - 1, 4)
             _, EPSdiscountTTM = sT.getStockEPSdiscountTTM(code, y1 - 1, 4)
             #totalStock = sT.getStockCountQuarter(code, y1 - 1, 4)
             totalStock = sT.getStockCount(code, y1, m1, d1)
         else:
             qt = qt - 1  #本季度报表没有出来,因此使用上季度报表
             while qt > 0 and not foundData:
                 foundData, EPSTTM = sT.getStockEPSTTM(code, y1, qt)
                 if not foundData:
                     qt = qt - 1
                     continue
                 #totalStock = sT.getStockCountQuarter(code, y1, qt)
                 totalStock = sT.getStockCount(code, y1, m1, d1)
                 _, EPSdiscountTTM = sT.getStockEPSdiscountTTM(code, y1, qt)
            rateWorst = rate
            dateRateWorst = t[0]
            lostWorst = diff
        if rateBest < rate:
            rateBest = rate
            dateRateBest = t[0]
            earnBest = diff

    # print(totalValue-investTotal)
    # print(shareTotal*sT.getFundPrice(code[i], endDate)[1]-moneyTotal)
    # print(totalValue==shareTotal*sT.getFundPrice(code[i], endDate)[1],investTotal==moneyTotal )
    # print shareTotal, totalValue/sT.getFundPrice(code[i], endDate)[1]
    rate = (totalValue -
            investTotal) / investTotal  #float(infoStr[6][:-1])/100.0
    investPeriod = round(
        sT.createCalender().dayDiff(STARTYEAR, STARTMONTH, STARTDAY, ENDYEAR,
                                    ENDMONTH, ENDDAY) / 365.0, 2)
    ratePerYear = round(((rate + 1)**(1.0 / investPeriod) - 1), 4)
    dictColumnValues[u'代码'] = code[i]
    dictColumnValues[u'名称'] = name[i]
    dictColumnValues[u'定投年数'] = investPeriod
    dictColumnValues[u'定投起始时间'] = startDate
    #dictColumnValues[u'定投结束时间'] = endDate
    dictColumnValues[u'卖出基金时间'] = endDate
    dictColumnValues[u'投资总成本'] = moneyTotal
    dictColumnValues[u'投资总市值'] = moneyTotal * (1 + rate)
    dictColumnValues[u'投资总收益'] = moneyTotal * rate
    dictColumnValues[u'分红'] = bonusTotal
    dictColumnValues[u'平均年收益'] = round(
        dictColumnValues[u'投资总收益'] / investPeriod, 2)
    dictColumnValues[u'投资收益率'] = round(rate, 4)
    dictColumnValues[u'投资年化复合收益率'] = ratePerYear
Exemplo n.º 5
0
                else:
                    lost = nStockTotal * price + ndividend - nCapitalInvest
                if lostMoneyMax > lost:  #由于计算时只计算检查日时的最大回撤,可能有比检查日回撤更大的时候,尤其是最后卖出时。
                    lostMoneyMax = lost
                    lostMoneyMaxCaption = nCapitalInvest
                    lostMoneyMaxTime = sT.getDateString(year, m, d)

    foundData, closePrice, saleMonth, actualsaleDay = sT.getClosePriceBackward(
        code[i], ENDYEAR, ENDMONTH, saleDay)
    #year = ENDYEAR
    if foundData == True:
        nCapitalTotal = nStockTotal * closePrice + ndividend
        income = nCapitalTotal - nCapitalInvest
        incomeRate = income / nCapitalInvest
        investPeriod = round(
            sT.createCalender().dayDiff(STARTYEAR, STARTMONTH, buyDay, ENDYEAR,
                                        ENDMONTH, saleDay) / 365.0, 2)
        dictColumnValues[u'代码'] = code[i]
        dictColumnValues[u'名称'] = name[i]
        dictColumnValues[u'投资时长(年)'] = investPeriod
        dictColumnValues[u'投资起始时间'] = sT.getDateString(STARTYEAR, STARTMONTH,
                                                       buyDay)
        dictColumnValues[u'卖出股份时间'] = sT.getDateString(year, saleMonth,
                                                       actualsaleDay)
        dictColumnValues[u'投资总成本'] = nCapitalInvest
        dictColumnValues[u'投资总市值'] = nCapitalTotal
        dictColumnValues[u'投资总收益'] = income
        dictColumnValues[u'分红'] = ndividend
        dictColumnValues[u'平均年收益'] = round(income / investPeriod, 2)
        dictColumnValues[u'投资收益率'] = round(incomeRate, 4)
        dictColumnValues[u'投资年化复合收益率'] = round(
            ((incomeRate + 1)**(1.0 / investPeriod) - 1), 4)
Exemplo n.º 6
0
            url = "http://fund.eastmoney.com/f10/F10DataApi.aspx?type=lsjz&code=" + code[
                i]
            url = url + "&page=1&per=20&sdate="
            url = url + dateToSearch
            url = url + "&edate="
            url = url + dateToSearch
            url = url + "&rt=0.19110643402290917"
            data = urllib.urlopen(url).read()
            bs = bs4.BeautifulSoup(data, "html.parser")
            try:
                closePrice = float(bs.find_all("td")[2].get_text())
                foundData = 1
            except Exception, e:
                print code[i], name[i], u"没有今日数据!", dateToSearch
                y, m, d = sT.splitDateString(dateToSearch)
                y, m, d = sT.createCalender().getPrevWorkday(y, m, d)
                dateToSearch = sT.getDateString(y, m, d)
    elif market[i] != "fund":
        found, closePrice, am, actualDay = sT.getClosePriceForward(code[i],
                                                                   date,
                                                                   autp=None)
        dateToSearch = sT.getDateString(y, am, actualDay)
        if found == True:
            foundData = 1
        else:
            foundData = 0
    if foundData == 1:
        print code[i], name[i], closePrice, dateToSearch

    #如果中间有既不是股票也不是基金的行,i值也会+1,就相当于在excel中插入不是股票和基金的空行
    worksheet.write(i, 0, code[i])
Exemplo n.º 7
0
for i in range(count):
    foundData = 0
    if code[i] == u'' : continue
    url = "http://fundex.eastmoney.com/FundWebServices/FundSylCalculator.aspx?fc=" + code[i]
    url = url + "&stime=" + startDate + "&etime=" + saleDate
    url = url + "&stype=" + stype + "&sgfl=" + "0" + "&shfl=" + "0" + "&sg=" + "10000" + "&lx=1"
    data = urllib.urlopen(url).read()
    time.sleep(1)
    infoStr = data.split(':')
    if infoStr[0]=='var Result={"error"':
        print data
        continue

    rateList = data.split(":")[4].split(",")[0].split('"')
    rate = float(rateList[1])/100.0
    investPeriod = round(sT.createCalender().dayDiff(STARTYEAR,STARTMONTH,1,ENDYEAR,ENDMONTH,endDay)/365.0, 2)
    ratePerYear = round(((rate + 1) ** (1.0 / investPeriod) - 1), 4)
    worksheet.write(i+1, 0, code[i])
    worksheet.write(i+1, 1, name[i])
    worksheet.write(i+1, 2, rate, style_percent)
    worksheet.write(i+1, 3, ratePerYear, style_percent)
    worksheet.write(i+1, 4, startDate)
    worksheet.write(i+1, 5, saleDate)
    print code[i], name[i], "收益:%.2f%%" % (rate * 100.0), "年化收益:%.2f%%" % (ratePerYear * 100.0)

workbook.save('.\\data\\dataResult.xls')
print "Invest result has been wrotten to dataResult.xls"