① 如何用python炒股
你就是想找個軟體或者券商的介面去上傳交易指令,你前期的數據抓取和分析可能python都寫好了,所以差這交易指令介面最後一步。對於股票的散戶,正規的法子是華寶,國信,興業這樣願意給介面的券商,但貌似開戶費很高才給這權利,而且只有lts,ctp這樣的c++介面,沒python版就需要你自己封裝。還有的法是wind這樣的軟體也有直接的介面,支持部分券商,但也貴,幾萬一年是要的,第三種就是走野路子,滑鼠鍵盤模擬法,很復雜的,就是模擬鍵盤滑鼠去操作一些軟體,比如券商版交易軟體和大智慧之類的。還有一種更野的方法,就是找到這些軟體的關於交易指令的底層代碼並更改,我網路看到的,不知道是不是真的可行。。散戶就這樣,沒資金就得靠技術,不過我覺得T+1的規則下,預測准確率的重要性高於交易的及時性,花功夫做數據分析就好,交易就人工完成吧
② 用Python 進行股票分析 有什麼好的入門書籍或者課程嗎
個人覺得這問題問的不太對,說句不好的話,你是來搞編程的還是做股票的。
《Learn Python The Hard Way》,也就是我們所說的笨辦法學python,這絕對是新手入門的第一選擇,裡面話題簡練,是一本以練習為導向的教材。有淺入深,而且易懂。
其它的像什麼,《Python源碼剖析》,《集體智慧編程》,《Python核心編程(第二版)》等題主都可以適當的選擇參讀下,相信都會對題主有所幫助。
最後,還是要重復上面的話題,炒股不是工程學科,它有太多的變數,對於現在的智能編程來說,它還沒有辦法及時的反映那些變數,所以,只能當做一種參考,千萬不可過渡依賴。
結語:pyhton相對來說是一種比較高端的學科,需要有很強的邏輯能力。所以入門是非常困難的,如果真的要學習,是需要很大的毅力去堅持下去的,而且不短時間就能入門了,要有所心理准備。
③ 利用Python進行數據分析(10)-移動窗口函數
Python-for-data-移動窗口函數
本文中介紹的是 ,主要的運算元是:
統計和通過其他移動窗口或者指數衰減而運行的函數,稱之為 移動窗口函數
<style scoped="">.dataframe tbody tr th:only-of-type { vertical-align: middle; } <pre><code>.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </code></pre></style>
2292 rows × 3 columns
rolling運算元,行為和resample和groupby類似
rolling可以在S或者DF上通過一個window進行調用
<style scoped="">.dataframe tbody tr th:only-of-type { vertical-align: middle; } <pre><code>.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </code></pre></style>
2292 rows × 3 columns
指定一個常數衰減因子為觀測值提供更多的權重。常用指定衰減因子的方法:使用span(跨度)
一些統計運算元,例如相關度和協方差等需要同時操作兩個時間序列。
例如,金融分析中的股票和基準指數的關聯性問題:計算時間序列的百分比變化pct_change()
<style scoped="">.dataframe tbody tr th:only-of-type { vertical-align: middle; } <pre><code>.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </code></pre></style>
在rolling及其相關方法上使用apply方法提供了一種在移動窗口中應用自己設計的數組函數的方法。
唯一要求:該函數從每個數組中產生一個單值(縮聚),例如使用rolling()...quantile(q)計算樣本的中位數
④ python怎麼分析數據
python怎麼分析數據?
在不同的場景下通常可以採用不同的數據分析方式,比如對於大部分職場人來說,Excel可以滿足大部分數據分析場景,當數據量比較大的時候可以通過學習資料庫知識來完成數據分析任務,對於更復雜的數據分析場景可以通過BI工具來完成數據分析。通過工具進行數據分析一方面比較便捷,另一方面也比較容易掌握。
但是針對於更加開放的數據分析場景時,就需要通過編程的方式來進行數據分析了,比如通過機器學習的方式進行數據分析,而Python語言在機器學習領域有廣泛的應用。採用機器學習的方式進行數據分析需要經過五個步驟,分別是數據准備、演算法設計、演算法訓練、演算法驗證和演算法應用。
採用機器學習進行數據分析時,首先要了解一下常見的演算法,比如knn、決策樹、支持向量機、樸素貝葉斯等等,這些演算法都是機器學習領域非常常見的演算法,也具有比較廣泛的應用場景。當然,學習這些演算法也需要具備一定的線性代數和概率論基礎。學習不同的演算法最好結合相應的應用場景進行分析,有的場景也需要結合多個演算法進行分析。另外,通過場景來學習演算法的使用會盡快建立畫面感。
採用Python進行數據分析還需要掌握一系列庫的使用,包括Numpy(矩陣運算庫)、Scipy(統計運算庫)、Matplotpb(繪圖庫)、pandas(數據集操作)、Sympy(數值運算庫)等庫,這些庫在Python進行數據分析時有廣泛的應用。
相關推薦:《Python教程》以上就是小編分享的關於python怎麼分析數據的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!
⑤ Python和金融分析的關系量化交易內容深度
1. Python適合做數據分析,有很多成熟的數據分析框架:Pandas, Numpy等, 這些在課程中都有教。這些框架都可以很方便的完成數據分析的任務。
2. 量化交易課程中,傳智播客老師給學生講了關於股票各方面的知識點,以及使用代碼來分析(數據分析,人工智慧)買入賣出的時間點(基於大量數據),然後用代碼來完成買入賣出股票,如果有大量的數據作為參考的話,對於股票的盈利會更加輕松。
⑥ python做數據分析可以嗎
可以。
Python是一種面向對象、直譯式計算機程序設計語言,由Guido van Rossum於1989年底發明。由於他簡單、易學、免費開源、可移植性、可擴展性等特點,Python又被稱之為膠水語言。下圖為主要程序語言近年來的流行趨勢,Python受歡迎程度扶搖直上。
由於Python擁有非常豐富的庫,使其在數據分析領域也有廣泛的應用。由於Python本身有十分廣泛的應用,本期Python數據分析路線圖主要從數據分析從業人員的角度講述Python數據分析路線圖。整個路線圖計劃分成16周,120天左右。主要學習內容包括四大部分:
1)Python工作環境及基礎語法知識了解(包括正則表達式相關知識學習);
2)數據採集相關知識(python爬蟲相關知識);
3)數據分析學習;
4)數據可視化學習。
⑦ 如何用Python和機器學習炒股賺錢
相信很多人都想過讓人工智慧來幫你賺錢,但到底該如何做呢?瑞士日內瓦的一位金融數據顧問 Gaëtan Rickter 近日發表文章介紹了他利用 Python 和機器學習來幫助炒股的經驗,其最終成果的收益率跑贏了長期處於牛市的標准普爾 500 指數。雖然這篇文章並沒有將他的方法完全徹底公開,但已公開的內容或許能給我們帶來如何用人工智慧炒股的啟迪。
我終於跑贏了標准普爾 500 指數 10 個百分點!聽起來可能不是很多,但是當我們處理的是大量流動性很高的資本時,對沖基金的利潤就相當可觀。更激進的做法還能得到更高的回報。
這一切都始於我閱讀了 Gur Huberman 的一篇題為《Contagious Speculation and a Cure for Cancer: A Non-Event that Made Stock Prices Soar》的論文。該研究描述了一件發生在 1998 年的涉及到一家上市公司 EntreMed(當時股票代碼是 ENMD)的事件:
「星期天《紐約時報》上發表的一篇關於癌症治療新葯開發潛力的文章導致 EntreMed 的股價從周五收盤時的 12.063 飆升至 85,在周一收盤時接近 52。在接下來的三周,它的收盤價都在 30 以上。這股投資熱情也讓其它生物科技股得到了溢價。但是,這個癌症研究方面的可能突破在至少五個月前就已經被 Nature 期刊和各種流行的報紙報道過了,其中甚至包括《泰晤士報》!因此,僅僅是熱情的公眾關注就能引發股價的持續上漲,即便實際上並沒有出現真正的新信息。」
在研究者給出的許多有見地的觀察中,其中有一個總結很突出:
「(股價)運動可能會集中於有一些共同之處的股票上,但這些共同之處不一定要是經濟基礎。」
我就想,能不能基於通常所用的指標之外的其它指標來劃分股票。我開始在資料庫裡面挖掘,幾周之後我發現了一個,其包含了一個分數,描述了股票和元素周期表中的元素之間的「已知和隱藏關系」的強度。
我有計算基因組學的背景,這讓我想起了基因和它們的細胞信號網路之間的關系是如何地不為人所知。但是,當我們分析數據時,我們又會開始看到我們之前可能無法預測的新關系和相關性。
如果你使用機器學習,就可能在具有已知和隱藏關系的上市公司的寄生、共生和共情關系之上搶佔先機,這是很有趣而且可以盈利的。最後,一個人的盈利能力似乎完全關乎他在生成這些類別的數據時想出特徵標簽(即概念(concept))的強大組合的能力。
我在這類模型上的下一次迭代應該會包含一個用於自動生成特徵組合或獨特列表的單獨演算法。也許會基於近乎實時的事件,這可能會影響那些具有隻有配備了無監督學習演算法的人類才能預測的隱藏關系的股票組。
⑧ python編程這門科目是用來編寫股票指標和選股器的嗎
python是一門語言補丁,最大的優勢在於擁有眾多的包,很多事情都可以做。而在數據分析領域提供了pandas,numpy,matplotlib等進行數據可視化,用於股票,自然也是可以的
⑨ 如何用python 爬蟲抓取金融數據
獲取數據是數據分析中必不可少的一部分,而網路爬蟲是是獲取數據的一個重要渠道之一。鑒於此,我拾起了Python這把利器,開啟了網路爬蟲之路。
本篇使用的版本為python3.5,意在抓取證券之星上當天所有A股數據。程序主要分為三個部分:網頁源碼的獲取、所需內容的提取、所得結果的整理。
一、網頁源碼的獲取
很多人喜歡用python爬蟲的原因之一就是它容易上手。只需以下幾行代碼既可抓取大部分網頁的源碼。
為了減少干擾,我先用正則表達式從整個頁面源碼中匹配出以上的主體部分,然後從主體部分中匹配出每隻股票的信息。代碼如下。
pattern=re.compile('<tbody[sS]*</tbody>')
body=re.findall(pattern,str(content)) #匹配<tbody和</tbody>之間的所有代碼pattern=re.compile('>(.*?)<')
stock_page=re.findall(pattern,body[0]) #匹配>和<之間的所有信息
其中compile方法為編譯匹配模式,findall方法用此匹配模式去匹配出所需信息,並以列表的方式返回。正則表達式的語法還挺多的,下面我只羅列所用到符號的含義。
語法 說明
. 匹配任意除換行符「 」外的字元
* 匹配前一個字元0次或無限次
? 匹配前一個字元0次或一次
s 空白字元:[<空格> fv]
S 非空白字元:[^s]
[...] 字元集,對應的位置可以是字元集中任意字元
(...) 被括起來的表達式將作為分組,裡面一般為我們所需提取的內容
正則表達式的語法挺多的,也許有大牛隻要一句正則表達式就可提取我想提取的內容。在提取股票主體部分代碼時發現有人用xpath表達式提取顯得更簡潔一些,看來頁面解析也有很長的一段路要走。
三、所得結果的整理
通過非貪婪模式(.*?)匹配>和<之間的所有數據,會匹配出一些空白字元出來,所以我們採用如下代碼把空白字元移除。
stock_last=stock_total[:] #stock_total:匹配出的股票數據for data in stock_total: #stock_last:整理後的股票數據
if data=='':
stock_last.remove('')
最後,我們可以列印幾列數據看下效果,代碼如下
print('代碼',' ','簡稱',' ',' ','最新價',' ','漲跌幅',' ','漲跌額',' ','5分鍾漲幅')for i in range(0,len(stock_last),13): #網頁總共有13列數據
print(stock_last[i],' ',stock_last[i+1],' ',' ',stock_last[i+2],' ',' ',stock_last[i+3],' ',' ',stock_last[i+4],' ',' ',stock_last[i+5])
⑩ python數據分析與應用第三章代碼3-5的數據哪來的
savetxt
import numpy as np
i2 = np.eye(2)
np.savetxt("eye.txt", i2)
3.4 讀入CSV文件
# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800
c,v=np.loadtxt('data.csv', delimiter=',', usecols=(6,7), unpack=True) #index從0開始
3.6.1 算術平均值
np.mean(c) = np.average(c)
3.6.2 加權平均值
t = np.arange(len(c))
np.average(c, weights=t)
3.8 極值
np.min(c)
np.max(c)
np.ptp(c) 最大值與最小值的差值
3.10 統計分析
np.median(c) 中位數
np.msort(c) 升序排序
np.var(c) 方差
3.12 分析股票收益率
np.diff(c) 可以返回一個由相鄰數組元素的差
值構成的數組
returns = np.diff( arr ) / arr[ : -1] #diff返回的數組比收盤價數組少一個元素
np.std(c) 標准差
對數收益率
logreturns = np.diff( np.log(c) ) #應檢查輸入數組以確保其不含有零和負數
where 可以根據指定的條件返回所有滿足條件的數
組元素的索引值。
posretindices = np.where(returns > 0)
np.sqrt(1./252.) 平方根,浮點數
3.14 分析日期數據
# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800
dates, close=np.loadtxt('data.csv', delimiter=',', usecols=(1,6), converters={1:datestr2num}, unpack=True)
print "Dates =", dates
def datestr2num(s):
return datetime.datetime.strptime(s, "%d-%m-%Y").date().weekday()
# 星期一 0
# 星期二 1
# 星期三 2
# 星期四 3
# 星期五 4
# 星期六 5
# 星期日 6
#output
Dates = [ 4. 0. 1. 2. 3. 4. 0. 1. 2. 3. 4. 0. 1. 2. 3. 4. 1. 2. 4. 0. 1. 2. 3. 4. 0.
1. 2. 3. 4.]
averages = np.zeros(5)
for i in range(5):
indices = np.where(dates == i)
prices = np.take(close, indices) #按數組的元素運算,產生一個數組作為輸出。
>>>a = [4, 3, 5, 7, 6, 8]
>>>indices = [0, 1, 4]
>>>np.take(a, indices)
array([4, 3, 6])
np.argmax(c) #返回的是數組中最大元素的索引值
np.argmin(c)
3.16 匯總數據
# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800
#得到第一個星期一和最後一個星期五
first_monday = np.ravel(np.where(dates == 0))[0]
last_friday = np.ravel(np.where(dates == 4))[-1]
#創建一個數組,用於存儲三周內每一天的索引值
weeks_indices = np.arange(first_monday, last_friday + 1)
#按照每個子數組5個元素,用split函數切分數組
weeks_indices = np.split(weeks_indices, 5)
#output
[array([1, 2, 3, 4, 5]), array([ 6, 7, 8, 9, 10]), array([11,12, 13, 14, 15])]
weeksummary = np.apply_along_axis(summarize, 1, weeks_indices,open, high, low, close)
def summarize(a, o, h, l, c): #open, high, low, close
monday_open = o[a[0]]
week_high = np.max( np.take(h, a) )
week_low = np.min( np.take(l, a) )
friday_close = c[a[-1]]
return("APPL", monday_open, week_high, week_low, friday_close)
np.savetxt("weeksummary.csv", weeksummary, delimiter=",", fmt="%s") #指定了文件名、需要保存的數組名、分隔符(在這個例子中為英文標點逗號)以及存儲浮點數的格式。
.png
格式字元串以一個百分號開始。接下來是一個可選的標志字元:-表示結果左對齊,0表示左端補0,+表示輸出符號(正號+或負號-)。第三部分為可選的輸出寬度參數,表示輸出的最小位數。第四部分是精度格式符,以」.」開頭,後面跟一個表示精度的整數。最後是一個類型指定字元,在例子中指定為字元串類型。
numpy.apply_along_axis(func1d, axis, arr, *args, **kwargs)
>>>def my_func(a):
... """Average first and last element of a 1-D array"""
... return (a[0] + a[-1]) * 0.5
>>>b = np.array([[1,2,3], [4,5,6], [7,8,9]])
>>>np.apply_along_axis(my_func, 0, b) #沿著X軸運動,取列切片
array([ 4., 5., 6.])
>>>np.apply_along_axis(my_func, 1, b) #沿著y軸運動,取行切片
array([ 2., 5., 8.])
>>>b = np.array([[8,1,7], [4,3,9], [5,2,6]])
>>>np.apply_along_axis(sorted, 1, b)
array([[1, 7, 8],
[3, 4, 9],
[2, 5, 6]])
3.20 計算簡單移動平均線
(1) 使用ones函數創建一個長度為N的元素均初始化為1的數組,然後對整個數組除以N,即可得到權重。如下所示:
N = int(sys.argv[1])
weights = np.ones(N) / N
print "Weights", weights
在N = 5時,輸出結果如下:
Weights [ 0.2 0.2 0.2 0.2 0.2] #權重相等
(2) 使用這些權重值,調用convolve函數:
c = np.loadtxt('data.csv', delimiter=',', usecols=(6,),unpack=True)
sma = np.convolve(weights, c)[N-1:-N+1] #卷積是分析數學中一種重要的運算,定義為一個函數與經過翻轉和平移的另一個函數的乘積的積分。
t = np.arange(N - 1, len(c)) #作圖
plot(t, c[N-1:], lw=1.0)
plot(t, sma, lw=2.0)
show()
3.22 計算指數移動平均線
指數移動平均線(exponential moving average)。指數移動平均線使用的權重是指數衰減的。對歷史上的數據點賦予的權重以指數速度減小,但永遠不會到達0。
x = np.arange(5)
print "Exp", np.exp(x)
#output
Exp [ 1. 2.71828183 7.3890561 20.08553692 54.59815003]
Linspace 返回一個元素值在指定的范圍內均勻分布的數組。
print "Linspace", np.linspace(-1, 0, 5) #起始值、終止值、可選的元素個數
#output
Linspace [-1. -0.75 -0.5 -0.25 0. ]
(1)權重計算
N = int(sys.argv[1])
weights = np.exp(np.linspace(-1. , 0. , N))
(2)權重歸一化處理
weights /= weights.sum()
print "Weights", weights
#output
Weights [ 0.11405072 0.14644403 0.18803785 0.24144538 0.31002201]
(3)計算及作圖
c = np.loadtxt('data.csv', delimiter=',', usecols=(6,),unpack=True)
ema = np.convolve(weights, c)[N-1:-N+1]
t = np.arange(N - 1, len(c))
plot(t, c[N-1:], lw=1.0)
plot(t, ema, lw=2.0)
show()
3.26 用線性模型預測價格
(x, resials, rank, s) = np.linalg.lstsq(A, b) #系數向量x、一個殘差數組、A的秩以及A的奇異值
print x, resials, rank, s
#計算下一個預測值
print np.dot(b, x)
3.28 繪制趨勢線
>>> x = np.arange(6)
>>> x = x.reshape((2, 3))
>>> x
array([[0, 1, 2], [3, 4, 5]])
>>> np.ones_like(x) #用1填充數組
array([[1, 1, 1], [1, 1, 1]])
類似函數
zeros_like
empty_like
zeros
ones
empty
3.30 數組的修剪和壓縮
a = np.arange(5)
print "a =", a
print "Clipped", a.clip(1, 2) #將所有比給定最大值還大的元素全部設為給定的最大值,而所有比給定最小值還小的元素全部設為給定的最小值
#output
a = [0 1 2 3 4]
Clipped [1 1 2 2 2]
a = np.arange(4)
print a
print "Compressed", a.compress(a > 2) #返回一個根據給定條件篩選後的數組
#output
[0 1 2 3]
Compressed [3]
b = np.arange(1, 9)
print "b =", b
print "Factorial", b.prod() #輸出數組元素階乘結果
#output
b = [1 2 3 4 5 6 7 8]
Factorial 40320
print "Factorials", b.cumprod()
#output