栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python 量化交易 数据分析学习之旅

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 量化交易 数据分析学习之旅

列表 用法 List set tuple Dict

#集合 不含重复对象
StockExchange1 ={'1','2','3'}
StockExchange1.update (['4'])

StockExchange = set() #'set'空集
StockExchange.update (['SHANGHAI STOCK EXCHONGE','SHENZHENG STOCK EXCHANGE'])
StockExchange.update ([' SHANGHAI ENERGY EXCHANGE ','1'])#'update'添加元素
StockExchange.discard ('1')#' discard '删除元素

#列表
Numberlist = [1,2,3]
del Numberlist [1]#'del'删除元素
Numberlist.append (20)#'append'添加元素

List_new = [Numberlist for i in range(10) ]#循环Numberlist这个列表对象 得到List =  Numberlist*10

#元组
tuple = ('Name','She','He','Me')#'tuple'无法修改里面的元素

#小括号()创建元组 []是创建列表

#字典
ExchangeDict = dict()#创建字典
ExchangeDict ['Gold'] = '325.4'
ExchangeDict ['Silver'] = '6723'#删除元素用'del'

字符串,数据类型转换

type :Python 内置函数可以查看对象类型

  1. int整数型 float浮点型
  2. str字符串
  3. bool布尔值Flast True

''  :引号里面的内容为字符串

'1'就是字符串 1就是int 1.0就是float

list(),tuple(),str()

列表元组字符串可以互相转换

a = [1,2,3,4]

tuple(a)#列表则转换为元组

 

print

print("任意内容",end="")#end默认换行,换行符n  

print("1n1")

#1
#1

print(r'1n1')#r字符串对象符号不在进行转意

#>>1n1

i = 1
b = 10
print('this is number %s this is number %s'%(i,b))

使用print +for循环做个简单的进度条

def Progress_bar():
  print("程序启动中,请稍等:")
  for i in range(26):#
      a = "■" * i
      b = "□" * (25 - i)
      c = (i / 25) * 25 * 4
      print("r{}{}{:.2f}%".format(a, b, c), end="")
      time.sleep(0.1)

这里用到了time库Python内置的format,range以及函数。

Format

Format 与print 这种方法类似

print('this is number %s this is number %s'%(i,b))

print('this is number {} this is number {}'.format(对象1⃣️,对象2⃣️))#

def 创建函数对象

def Name(形参):  #Name为函数名,以后可以输入Name()调用此函数

  pass #空的函数一定要用pass 不然会报错

def Total_area(Extent,Width):

  Accumulate = Extent*Width

  return Accumulate

  1. 函数名Total_area 函数名一定要符合Python书写规范
  2. Extent,Width 形参
  3. Accumulate = Extent*Width函数体运行函数就会执行这个
  4. 运行完函数 如果不进行return我们想要的值或内容执行这个函数就没有什么意义了
  5. 执行函数 : Total_area(5,10)返回50

后面还会持续更新希望大家提出建议以及不对的地方             这是目前编写出来的程序

数据分析

import matplotlib as mtl
import matplotlib.pyplot as plt
import numpy as np
import re
import math
import time
#打开历史数据
with open('0600031','r',encoding='UTF-8') as File:
  Files = File.read().splitlines()
  
#查找字符串中的汉子
Name = re.findall("[\u4e00-\u9fa5]+",Files[1])
#放置数据的列表
Closing_Price = []#'收盘价'
High = []#'最高价'
Low = []#'最低价'
Open = []#'开盘价'
Front_Closing_Price = []#'前收盘价'
Ups_and_Downs = []#'涨跌额'
Rise_and_Fall = []#'涨跌幅'
Handover_rate = []#'换手率'
Turnover = []#'成交量'
Transaction_Amount = []#'成交金额'
Total_Market_Value = []#'总市值'
Circulating_Market_Value = []#'流通市值'
#放置数组的列表
Closing_Price_ = []#'收盘价'
High_ = []#'最高价'
Low_ = []#'最低价'
Open_ = []#'开盘价'
Front_Closing_Price_ = []#'前收盘价'
Ups_and_Downs_ = []#'涨跌额'
Rise_and_Fall_ = []#'涨跌幅'
Handover_rate_ = []#'换手率'
Turnover_ = []#'成交量'
Transaction_Amount_ = []#'成交金额'
Total_Market_Value_ = []#'总市值'
Circulating_Market_Value_ = []#'流通市值'
#提取字符串中的数据
for i in Files:
  A = re.findall('[A-Z]{0,2}[\u4e00-\u9fa5]+,(d{0,4}.d{0,2}),d{0,4}.d{0,2},d{0,4}.d{0,2},d{0,4}.d{0,2},d{0,4}.d{0,2},[-|0-9]d{0,3}.d{0,3},[-|0-9]d{0,4}.d{0,4},d{0,2}.d{0,4},d{0,13},d{6,15}.d{0,2},d{0,3}.d{0,12}.{2}d{2},.{1}d{0,3}.d{0,15}.{0,2}d{0,2}',i)
  B = re.findall('[A-Z]{0,2}[\u4e00-\u9fa5]+,d{0,4}.d{0,2},(d{0,4}.d{0,2}),d{0,4}.d{0,2},d{0,4}.d{0,2},d{0,4}.d{0,2},[-|0-9]d{0,3}.d{0,3},[-|0-9]d{0,4}.d{0,4},d{0,2}.d{0,4},d{0,13},d{6,15}.d{0,2},d{0,3}.d{0,12}.{2}d{2},.{1}d{0,3}.d{0,15}.{0,2}d{0,2}',i)
  C = re.findall('[A-Z]{0,2}[\u4e00-\u9fa5]+,d{0,4}.d{0,2},d{0,4}.d{0,2},(d{0,4}.d{0,2}),d{0,4}.d{0,2},d{0,4}.d{0,2},[-|0-9]d{0,3}.d{0,3},[-|0-9]d{0,4}.d{0,4},d{0,2}.d{0,4},d{0,13},d{6,15}.d{0,2},d{0,3}.d{0,12}.{2}d{2},.{1}d{0,3}.d{0,15}.{0,2}d{0,2}',i)
  D = re.findall('[A-Z]{0,2}[\u4e00-\u9fa5]+,d{0,4}.d{0,2},d{0,4}.d{0,2},d{0,4}.d{0,2},(d{0,4}.d{0,2}),d{0,4}.d{0,2},[-|0-9]d{0,3}.d{0,3},[-|0-9]d{0,4}.d{0,4},d{0,2}.d{0,4},d{0,13},d{6,15}.d{0,2},d{0,3}.d{0,12}.{2}d{2},.{1}d{0,3}.d{0,15}.{0,2}d{0,2}',i)
  E = re.findall('[A-Z]{0,2}[\u4e00-\u9fa5]+,d{0,4}.d{0,2},d{0,4}.d{0,2},d{0,4}.d{0,2},d{0,4}.d{0,2},d{0,4}.d{0,2},([-|0-9]d{0,3}.d{0,3}),[-|0-9]d{0,4}.d{0,4},d{0,2}.d{0,4},d{0,13},d{6,15}.d{0,2},d{0,3}.d{0,12}.{2}d{2},.{1}d{0,3}.d{0,15}.{0,2}d{0,2}',i)
  F = re.findall('[A-Z]{0,2}[\u4e00-\u9fa5]+,d{0,4}.d{0,2},d{0,4}.d{0,2},d{0,4}.d{0,2},d{0,4}.d{0,2},d{0,4}.d{0,2},[-|0-9]d{0,3}.d{0,3},([-|0-9]d{0,4}.d{0,4}),d{0,2}.d{0,4},d{0,13},d{6,15}.d{0,2},d{0,3}.d{0,12}.{2}d{2},.{1}d{0,3}.d{0,15}.{0,2}d{0,2}',i)
  G = re.findall('[A-Z]{0,2}[\u4e00-\u9fa5]+,d{0,4}.d{0,2},d{0,4}.d{0,2},d{0,4}.d{0,2},d{0,4}.d{0,2},d{0,4}.d{0,2},[-|0-9]d{0,3}.d{0,3},[-|0-9]d{0,4}.d{0,4},(d{0,2}.d{0,4}),d{0,13},d{6,15}.d{0,2},d{0,3}.d{0,12}.{2}d{2},.{1}d{0,3}.d{0,15}.{0,2}d{0,2}',i)
  H = re.findall('[A-Z]{0,2}[\u4e00-\u9fa5]+,d{0,4}.d{0,3},d{0,4}.d{0,3},d{0,4}.d{0,3},d{0,4}.d{0,3},d{0,4}.d{0,3},[-|0-9]d{0,3}.d{0,3},[-|0-9]d{0,4}.d{0,5},d{0,2}.d{0,5},(d{0,13}),d{6,15}.d{0,2},d{0,3}.d{0,12}.{2}d{2},.{1}d{0,3}.d{0,15}.{0,2}d{0,2}',i)
  I = re.findall('[A-Z]{0,2}[\u4e00-\u9fa5]+,d{0,4}.d{0,3},d{0,4}.d{0,3},d{0,4}.d{0,3},d{0,4}.d{0,3},d{0,4}.d{0,3},[-|0-9]d{0,3}.d{0,3},[-|0-9]d{0,4}.d{0,5},d{0,2}.d{0,5},d{0,13},(d{6,15}.d{0,2}),d{0,3}.d{0,12}.{2}d{2},.{1}d{0,3}.d{0,12}.{0,2}d{0,2}',i)
  J = re.findall('[A-Z]{0,2}[\u4e00-\u9fa5]+,d{0,4}.d{0,3},d{0,4}.d{0,3},d{0,4}.d{0,3},d{0,4}.d{0,3},d{0,4}.d{0,3},[-|0-9]d{0,3}.d{0,3},[-|0-9]d{0,4}.d{0,5},d{0,2}.d{0,5},d{0,13},d{6,15}.d{0,2},(d{0,3}.d{0,12}.{2}d{2}),.{1}d{0,3}.d{0,12}.{0,2}d{0,2}',i)
  K = re.findall('[A-Z]{0,2}[\u4e00-\u9fa5]+,d{0,4}.d{0,3},d{0,4}.d{0,3},d{0,4}.d{0,3},d{0,4}.d{0,3},d{0,4}.d{0,3},[-|0-9]d{0,3}.d{0,3},[-|0-9]d{0,4}.d{0,5},d{0,2}.d{0,5},d{0,13},d{6,15}.d{0,2},d{0,3}.d{0,12}.{2}d{2},.{1}(d{0,3}.d{0,12}.{0,2}d{0,2})',i)
  #将数据添加到列表
  Closing_Price.append(A)#收盘价
  High.append(B)#最高价
  Low.append(C)#最低价
  Open.append(D)#开盘价
  Ups_and_Downs.append(E)#涨跌额
  Rise_and_Fall.append(F)#涨跌幅
  Handover_rate.append(G) #换手率
  Turnover.append(H)#成交量
  Transaction_Amount.append(I)#成交额
  Total_Market_Value.append(J)#总市值
  Circulating_Market_Value.append(K)#流通市值
del Closing_Price[len(Closing_Price)-1] 
del Closing_Price[0]
del High[len(High)-1]
del High[0]
del Low[len(Low)-1]
del Low[0]
del Open[len(Open)-1]
del Open[0]
del Ups_and_Downs[len(Ups_and_Downs)-1]
del Ups_and_Downs[0]
del Rise_and_Fall[len(Rise_and_Fall)-1]
del Rise_and_Fall[0]
del Handover_rate[len(Handover_rate)-1]
del Handover_rate[0]
del Turnover[len(Turnover)-1]
del Turnover[0]
del Transaction_Amount[len(Transaction_Amount)-1]
del Transaction_Amount[0]
del Total_Market_Value[len(Total_Market_Value)-1]
del Total_Market_Value[0]
del Circulating_Market_Value[len(Circulating_Market_Value)-1]
del Circulating_Market_Value[0]
i = 0
for x in range(0,len(Closing_Price)-1):
  i = i+1
  Closing_Price_.append(float(Closing_Price[i][0]))
  High_.append(float(High[i][0]))
  Low_.append(float(Low[i][0]))
  Open_.append(float(Open[i][0]))
  Ups_and_Downs_.append(float(Ups_and_Downs[i][0]))
  Rise_and_Fall_.append(float(Rise_and_Fall[i][0]))
  Handover_rate_.append(float(Handover_rate[i][0]))
  Turnover_.append(float(Turnover[i][0]))
  Transaction_Amount_.append(float(Transaction_Amount[i][0]))
  Total_Market_Value_.append(float(Total_Market_Value[i][0]))
  Circulating_Market_Value_.append(float(Circulating_Market_Value[i][0]))
#数组倒序
np.flipud(Closing_Price_)
np.flipud(High_)
np.flipud(Low_)
np.flipud(Open_)
np.flipud(Ups_and_Downs)
np.flipud(Rise_and_Fall_)
np.flipud(Handover_rate_)
np.flipud(Turnover_)
np.flipud(Transaction_Amount)
np.flipud(Total_Market_Value)
np.flipud(Circulating_Market_Value)
def one():
  x = np.arange(0,len(Turnover_))
  b = np.array(Turnover_)
  plt.bar(x,b)
  
  plt.legend(loc='loc')
  plt.title('Stock'+Name[0])
  plt.xlabel('Time')
  plt.ylabel('Turnover')
  
  ax2 = plt.twinx()
  ax2.set_ylabel('Price');
  
  ax2.set_ylim([0, max(Open_)])
  
  d = np.array(Open_)
  plt.plot(x,d)
  
  plt.show()

量化交易

import datetime
import time
import random
import re
import csv
import numpy as np
import requests
from time import gmtime, strftime, strptime, time, gmtime, sleep
from datetime import timedelta, time, date, datetime

URL_Data_Infomation = 'http://api.money.126.net/data/feed/0600905,money.api?'
URL_Historical_Data_Information = 'http://quotes.money.163.com/service/chddata.html?code=0600905&start=20210630&end=20220304&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP'
User_Agent = ['User-Agent']
User_Agent_Headers = [ 
      'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1;Trident4.0;CIBA; .NETCLR2.0.50727; .NETCLR3.0.4506.2152; .NETCLR3.5.30729; .NET4.0C;InfoPath.2; .NET4.0E',
      'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)',
      'Mozilla/5.0 (Windows NT 6.1; WOW64)AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1']
def Random():
    '''
    中文:
      随机的Headers
    英文:
      Random Headers
    '''
    random.shuffle(User_Agent_Headers)
    Random = dict(zip(User_Agent,User_Agent_Headers))
    return Random
Stock_Type = set()
def History_Tick():
  Files = open('Code.csv','r',encoding='UTF-8',newline=None).read().splitlines()
  for File in Files:
    Stock_Type.add(str(re.findall(',D{1,3},(D{1,4}),d{8}$',File)))
    if re.findall('SH',File) == ['SH']:
      A_SH = re.findall('^d{6}',File)
      a_SH = str(A)
      b_SH = a[2:8]
      c_SH = re.sub('code=0(d{6})','code=0'+b,URL_Historical_Data_Information)
      requests.get('',Random()).text
      time.sleep(0.1)
      Name = str(b)
      with open(Name, 'w', newline='',encoding='UTF-8') as csvfile:
      Historical_data = csv.writer(csvfile)
      Historical_data.writerow(s)
    if re.findall('SZ',File) == ['SZ']:
      A_SZ = re.findall('^d{6}',File)
      a_SZ = str(A)
      b_SZ = a[2:8]
      c_SZ = re.sub('code=0(d{6})','code=1'+b,URL_Historical_Data_Information))
      requests.get('',Random()).text
      time.sleep(0.1)
      Name_SZ = 
      with open(Name, 'w', newline='',encoding='UTF-8') as csvfile:
      Historical_data = csv.writer(csvfile)
      Historical_data.writerow(s)
Tick_Code = []  
class Tick():
  '''
  中文:
    把数据放入类中
  English:
    Put the data into the class  
  '''
  Price = 'Price'
  Open = 'Open'
  High = 'High'   
  Low = 'Low'
  Percent = 'Percent'
  Datetime = 'Datetime'
  def __init__(self,Price,Open,High,Low,Percent,Datetime):
    '''
    交易数据实例化
    '''
    self.Price = Price
    self.Open = Open
    self.High = High
    self.Low = Low
    self.Percent = Percent
    self.Datetime = Datetime
  def Data_Information():
    '''
    中文:
      爬取网易财经API以及数据整理
    English:
      Crawl NetEase Finance API and data collation 
    '''
    from time import gmtime, strftime, strptime, time, gmtime, sleep
    from datetime import timedelta, time, date, datetime 
    Stock = requests.get(URL_Data_Infomation,headers=Random()).text
    Stock_Info = Stock.split(',')
    price = Stock_Info[7].split(sep=':')
    open_ = Stock_Info[8].split(sep=':')
    high = Stock_Info[2].split(sep=':')
    low = Stock_Info[14].split(sep=':')
    percent = Stock_Info[1].split(sep=':')
    time_ = Stock_Info[23].split(sep=':',maxsplit=1)
    Price = float(price[1])
    Open = float(open_[1])
    High = float(high[1])
    Low = float(low[1])
    Percent = float(percent[1])
    Time = time_[1]
    Datetime = datetime.strptime(Time, ' "%Y/%m/%d %H:%M:%S"')
    Data = [Price,Open,High,Low,Percent,Datetime]
    return Data

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/828915.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号