国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python幫我在投資中獲取更高收益的實現方法

2020-01-04 14:43:24
字體:
來源:轉載
供稿:網友

背景介紹

某公司的理財產品有如下特點:

  1. 公司分別有12,18,24,36個月的固定期限理財產品,期限越長利率越高
  2. 投資用戶可將債權申請轉給其他投資人,轉出時的利率你可以自行控制
  3. 你也可以通過平臺借錢,借錢金額不能超過在投金額的3倍,所謂加杠桿

有一部分用戶(行話叫牛)就靠平臺活動或高息的時候借錢加杠桿投資,需要還錢的時候通過債權轉讓平臺轉讓標還借款,通過買入和賣出時的利率差獲得額外收益。這中間比較關鍵的一點就是轉出時的利率,利率低收益就高(但太低就沒有人接手了,轉不出去還不了借款就要支付高額罰金),利率又跟當天待還的金額和已成交的金額有直接關系,那么如果能及時獲取這兩個數據就大概知道自己標多少利率能轉手成功了。

我們接下來的技術實現就主要跟獲取這兩個數據,以及如何及時的展示數據有關。

服務和工具

  1. python3.4
  2. mysql5.7
  3. redis2.8
  4. django2.0

技術實現

只是為了技術研究,沒有商用,代碼和架構以實現需求為目的,未做優化,且非專業開發,湊合看

抓取數據

翻了一遍平臺官網發現有個頁面直接展示了轉讓標的詳細信息,無需登錄,且是通過ajax方式異步加載的json字符串(但是json字符串里套了一堆的html代碼,不知道咋設計的)的方式渲染頁面的,那抓取工作簡單多了,寫了個抓取腳本,流程為:訪問頁面接口 --> 取到數據 --> 簡單處理 --> 錄入數據庫,抓取腳本直接放在計劃任務里每三分鐘執行一次,腳本

內容如下:

import reimport timeimport datetimeimport requestsimport pymysql# 連接mysql數據庫db = pymysql.connect("127.0.0.1","root","passwd","pzp")cursor = db.cursor()for i in range(1, 9999):  data = {    "RepaymentTypeId": 0,    "pagesize": 1,    "pageindex": i,    "type": 1,    "status": 2,    "startDeadLine": 0,    "endDeadLine": 0,    "rate": 0,    "beginRate": 0,    "endRate": 0,    "strkey": None,    "orderby": 15,    "unitStart": 0,    "unitEnd": 0  }  try:    r = requests.post('https://www.tuandai.com/pages/zSharePlan/getZXList', data=data).json()    if r.get('code') == 0:      html = r.get('data').get('projectListHtml')      dr = re.compile(r'<[^>]+>', re.S)      dd = dr.sub('', html).split()      # 截取單號,只取字符串中的數字      order_num = ''.join(re.compile('/d+').findall(dd[0]))      # 查詢mysql數據庫      cursor.execute("select order_num from tdw_zx_done where order_num = %s" %order_num)      # 獲取到查詢結果      ex = cursor.fetchone()      # 判斷單號是否已經記錄過      if ex is None:        # 如果單號沒有記錄過,則計數器置為0        x = 0        publish_time = datetime.datetime.strptime(          '20%s-%s-%s %s:%s:%s' %(order_num[0:2],order_num[2:4],order_num[4:6],order_num[6:8],order_num[8:10],order_num[10:12]),          '%Y-%m-%d %H:%M:%S'        )        # ‘元'單位都替換成‘萬元',并去掉漢字        a = dd[1].split(':')[1]        if '元' in a:          money = int(''.join(re.compile('/d+').findall(a))) / 10000        else:          money = a.replace('萬','')        # 取利率        rate = dd[4].replace('%','')        # 計算還款日期,借款日期 + 借款時間        days = ''.join(re.compile('/d+').findall(dd[6]))        repay = (publish_time + datetime.timedelta(days=int(days))).strftime('%Y-%m-%d')        print(publish_time, order_num, money, rate, days, repay)        # 往數據庫里插入數據并提交        sql = "INSERT INTO tdw_zx_done VALUES('%s', %s, %s, %s, %s, '%s')" %(publish_time, order_num, money, rate, days, repay)        cursor.execute(sql)        db.commit()      else:        # 如果單號已經記錄過,則計數器加1        x += 1        # 如果單號已錄入過數據庫,則返回        print('單號已錄入:%s' %str(order_num))      # 判斷如果有連續200個單號都已經錄入過數據庫,則跳出循環      if x == 200:        break      time.sleep(0.02)    else:      print(r)  except Exception as e:    print(e)db.close()

數據處理及緩存

上邊已經獲取到了原始數據,接下來需要對原始數據進行清洗,取自己需要的今日待還及實時成交,并寫入緩存,寫入緩存的目的是公眾號并發查詢的情況下,直接去緩存取數據,減小對數據庫的壓力,這個腳本程序也放在計劃任務里每分鐘執行

import osimport sysimport jsonimport datetimefrom decimal import Decimalos.chdir(sys.path[0])from connection import rediscon, mysqlconmc, rc = mysqlcon().cursor(), rediscon()def cache_now_data():  today = datetime.date.today().strftime('%Y-%m-%d')  tj, th, = '', ''  try:    # 成交數據統計    mc.execute("select count(1),sum(money) from tdw_zx_done where DATE(publish_time)='%s';" %today)    tj = mc.fetchone()    tjie = '借款人數:%s 借款金額:%s' %(tj[0], tj[1])    # 待還數據統計    mc.execute("select count(1),sum(money) from tdw_zx_done where repay='%s';" %today)    th = mc.fetchone()    thuan = '待還人數:%s 待還金額:%s' %(th[0], th[1])    # 完成還款預估時間    if th[0]:      tomorror_date = datetime.date.today() + datetime.timedelta(days=1)      tomorror_time_str = tomorror_date.strftime('%Y-%m-%d 00:00:00')      tomorror_time_format = datetime.datetime.strptime(tomorror_time_str, '%Y-%m-%d %H:%M:%S')       last_hour = (tomorror_time_format - datetime.datetime.now()).seconds / 60 / 60      avg_hour_money = round(Decimal(th[1] - tj[1]) / Decimal(last_hour), 4)      avg_hour_money = avg_hour_money if avg_hour_money > 0 else 0    else:      avg_hour_money = '無今日待還數據,無法計算'    # 按小時統計詳情    mc.execute("select Hour(publish_time) as Hour,count(1),sum(money) from tdw_zx_done where DATE(publish_time) ='%s' group by Hour;" %today)    tdetail = mc.fetchall()    dl = '小時 | 成交額(萬元)/n'    for i in tdetail:      dl += str(i[0]) + ' | ' + str(i[2]) + '/n'  except Exception as e:    print('數據庫操作異常:%s' %e)  try:    key = datetime.datetime.now().strftime('%Y%m%d%H%M')    val = {"daihuan":str(th[1]),"chengjiao":str(tj[1]),"avg_hour_money":str(avg_hour_money)}    print(rc.set('tdw_zx_now_'+key, json.dumps(val), ex=7200))  except Exception as e:    print('緩存操作異常:%s' %e)if __name__ == '__main__':  cache_now_data()

微信好友、群自動回復

我想看數據的時候如何去看呢?去服務器上執行下腳本這方式太low了吧,借助微信機器人,就像你跟朋友聊天一樣,發消息“最新數據”,那他就立即回復最新消息給你,這個方式看起來不錯,實現完成后有幾個朋友覺得不錯,也想看數據,那我干脆將這些需要看數據的朋友都拉倒一個群里吧,回復消息群里所有用戶都看得到很方便了,技術實現主要借助了itchat模塊(itchat主要通過網頁版微信接口處理數據,網頁版微信很多用戶無法登陸了,也就沒有辦法使用itchat),代碼如下

import itchatfrom tdw_data_statistics_now import get_now_data# 處理好友消息@itchat.msg_register(itchat.content.TEXT)def text_reply(msg):  if msg['Text'].startswith('命令:'):    message = msg['Content'].split('命令:')[1]    msg.user.send('正在處理你的命令:%s' %(message))  if '最新數據' == msg['Text']:    message = get_now_data()    msg.user.send(message)# 處理群聊消息@itchat.msg_register(itchat.content.TEXT, isGroupChat=True)def text_reply(msg):  #itchat.send(u'@%s/u2005I received: %s' % (msg['ActualNickName'], msg['Content']), msg['FromUserName'])  if '最新數據' == msg['Text']:    message = get_now_data()    msg.user.send(message)#message = getMessage()#itchat.send(message, toUserName='filehelper')itchat.auto_login(True, enableCmdQR=True)itchat.run(True)

微信公眾號自動回復

設想一個應用場景,如果有很多人需要這個數據怎么處理呢?讓他們都加一下我的微信或把他們都給加到一個群里固然可以,只是不夠優雅,這里想到了微信公眾號,當用戶關注公眾號后,回復“最新數據”可把最新數據自動回復給用戶是不是就優雅很多了。然后就寫了個機器人自動處理,主要借助werobot模塊實現。

微信公眾號可以配置為開發者模式,也就是開發者可以提供一個http接口,公眾號會把收到的所有消息發送給開發者提供的接口,服務器接收到數據后判斷數據類型,對數據做處理,這里需要用到web服務,所以引入Django

urlfrom django.urls import pathfrom werobot.contrib.django import make_viewfrom official.robot import roboturlpatterns = [  path('robot/', make_view(robot)),]機器人程序# cat official/robot.pyimport refrom werobot import WeRoBotfrom werobot.replies import ImageReplyfrom official.backends.get_tdw_data import get_now_datarobot = WeRoBot(enable_session=False,        token='',        APP_ID='',        APP_SECRET='')# 新用戶關注自動回復@robot.subscribedef subscribe(message):  return '''來了?坐,好戲馬上開始回復[最新數據]獲取最新數據更新'''# 聯系二維碼,用戶輸入"聯系"關鍵字回復作者二維碼@robot.filter(re.compile(".*?聯系.*?"))def contact(message):  return ImageReply(    message=message,    media_id="DBO8qVu-8bwNF9O7o8wCyRs4awfVTjA_WuPoLkj33B1C8ZX9JVdmw30zZo9l8ovx"  )# 處理文本消息@robot.textdef hello(message):  try:    msg = message.content.strip().lower()    if re.compile("最新.*").match(msg):      tdw_zx_now_data = get_now_data()      if tdw_zx_now_data:        return tdw_zx_now_data      else:        return '暫時無法獲取數據,請稍后再試'    else:      return '請輸入[ 最新數據 ]獲取智享數據更新/n/n如有疑問可以回復[ 聯系作者 ]與我聯系'  except Exception as e:    print(e)

后臺處理程序

import jsonimport datetimefrom django_redis import get_redis_connectioncache = get_redis_connection('default')def get_now_data():  now_time = datetime.datetime.now()  prev_time = now_time - datetime.timedelta(minutes=1)  # 直接去緩存取數據  redis_value = cache.get('tdw_zx_now_'+prev_time.strftime('%Y%m%d%H%M'))  if redis_value:    jsondata = json.loads(redis_value.decode())    daihuan = '今日待還金額:%s萬元' %jsondata.get('daihuan')    chengjiao = '當前已成交金額:%s萬元' %jsondata.get('chengjiao')    avg_hour_money = '完成還款預估每小時需要成交:%s萬元' %jsondata.get('avg_hour_money')    return '''%s/n%s/n%s/n%s''' %(prev_time.strftime('%Y-%m-%d %H:%M'), daihuan, chengjiao, avg_hour_money)  else:    return None

總結

  1. 學會投資理財
  2. 別人賺錢的方式可能跟自己想象的不一樣
  3. 用技術解決生活中的實際問題,不僅能提高能力,還能獲得更大的滿足

以上所述是小編給大家介紹的python幫我在投資中獲取更高收益的實現方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黑水县| 永寿县| 城口县| 卢氏县| 石泉县| 车致| 兰西县| 霍州市| 双流县| 云和县| 沂水县| 陆良县| 河间市| 开封县| 合山市| 云安县| 邳州市| 佛坪县| 余庆县| 牙克石市| 拜泉县| 樟树市| 江口县| 临夏县| 广灵县| 龙陵县| 武冈市| 航空| 久治县| 竹山县| 宁河县| 信阳市| 睢宁县| 中方县| 武功县| 达拉特旗| 库尔勒市| 南乐县| 米脂县| 广西| 蒙阴县|