7/23 星期一
已辦事項:
- Zabbix監控平臺服務搭建成功。
- 瞭解量化交易概念,量化交易的價值。
從一個靈感開始 --> 把靈感細化成明確的可執行的交易策略 --> 把策略轉成程序 -->
檢驗策略效果:回測和模擬交易 –> 進行實盤交易並不斷維護修正
回測:根據一段時間的歷史數據模擬執行該策略,根據結果改進策略程序。
模擬交易:根據實際行情模擬執行策略一段時間,根據結果評價並改進策略。 - K線圖的看法以及影線的作用。
陽線:收盤價 > 開盤價
陰線:收盤價 < 開盤價
影線的作用:哪邊影線長,越不容易向那個方向波動。 - 市價單和限價單的不同點。
市價單:以市場價格買進或賣出股票的委託單。成交價格通常等同或接近下單時報價,主要視成交速度和該股市場活躍度而定。
限價單:是一種以等於或低於指定價格買進特定數量股票的委託單,或一種以等同或高於指定價格(稱爲限定價格)賣出股票的委託單。 - JoinQuant平臺的使用,基礎環境的搭建。
- Content對象的基本使用。
當前時間 context.current_dt
當前時間的“年-月-日”的字符串格式 context.current_dt.strftime("%Y-%m-%d")
前一個交易日 context.previous_date
當前可用資金 context.portfolio.avaliable_cash
持倉價值 context.portfolio.positions_value
累計收益 context.portfolio.returns
當前持有股票 context.portfolio.positions.keys()
當前持有的某股票的開倉均價 context.portfolio.positions['xxxxxx.xxxx'].avg_cost
當前持有的某股票的可賣持倉量 context.portfolio.positions['xxxxxx.xxxx'].closeable_amount
待辦事項:
- Python中列表生成式的應用。
- 研究量化交易案例,策略學習中。
- K線圖的瞭解。
7/24 星期二
已辦事項:
- 學習量化交易,並完成了基礎案例。
- Python中列表生成式的學習應用。
- 學習JoinQuant平臺中量化交易的數據取用方法。
- 瞭解策略評價及模擬指標:策略收益,基準收益,年化收益率,最大回撤率,交易次數,Alapha,Beta,夏普比率。
Python學習記錄:
-
Python中的range()函數
Python列表生成式:通過列表生成式,可以非常簡單的將代碼生成list
簡單表達式:[x * x for x in range(1 , 11)]
複雜表達式:[generate_tr(name, score) for name, score in d.items()]
條件過濾:[x * x for x in range(1, 11) if x % 2 == 0]
多層表達式:[m + n for m in 'ABC' for n in '123']
# 如下:構建一個100項平方數的列表,並求和。
list = [x**2 for x in range(1,101,1)]
print(list)
sum = 0
for num in list:
sum += num
print(sum)
isinstance(x, str) 可以判斷變量 x 是否是字符串
待辦事項:
- pandas數據分析庫的繼續學習。
- 量化策略的學習。
7/25 星期三
已辦事項:
- pandas數據分析庫的學習。重點理解了數據分組,數據合併,數據統計方面的操作。
- Python中特殊語法的學習。
- 練習科賽網上的pandas案例,練習整理後將上傳SVN。
Python學習記錄:
- lambda表達式:匿名函數,無函數名,快速定義單行的最小函數。
-
filter(function, sequence):對sequence中的item依次執行function(item),將執行結果爲ITrue的item組成一個list/string/tuple返回
map(function, sequence):對sequence中的item依次執行function(item),執行結果組成一個List返回
reduce(function, sequence, starting_value):對sequence中的item順序迭代調用function,如果有starting_value,還可以作爲初始值調用
注:在Python3中,reduce()函數已經被從全局名字空間裏移除了,它現在被放置在fucntools模塊裏,如果想要使用它,則需要通過引入functools模塊來調用reduce() 函數:from functools import reduce
遇到的問題:
-
數據連接合並問題
concat:可以將數據根據不同的軸作簡單的融合
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,keys=None, levels=None, names=None, verify_integrity=False)
常用參數:
objs: series/dataframe或者是panel構成的序列list
axis:需要合併鏈接的軸,0是行,1是列
join:連接的方式 inner或者outer -
merge:常用參數
on:列名,join用來對齊的那一列的名字,用到這個參數的時候一定要保證左表和右表用來對齊的那一列都有相同的列名。
left_on:左表對齊的列,可以是列名,也可以是和dataframe同樣長度的arrays。
right_on:右表對齊的列,可以是列名,也可以是和dataframe同樣長度的arrays。
left_index/ right_index: 如果是True的haunted以index作爲對齊的key。
how:數據融合的方法。
left:只保留左表的所有數據
right:只保留右表的所有數據
outer:保留兩個表的所有信息
inner:只保留兩個表公共部分的信息
sort:根據dataframe合併的keys按字典順序排序,默認是,如果置false可以提高表現。 -
join:類比merge
-
apply函數用法
apply函數是pandas裏面所有函數中自由度最高的函數,可以把dataframe的一列或幾列遍歷計算。
DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)
參數func是一個函數,需要自己實現。函數參數可以在args=()中設置。 -
數據集中日期作爲索引需要注意的問題
# 將日期設爲索引,注意數據類型,應該是datetime64[ns]
wind['Yr_Mo_Dy'] = pd.to_datetime(wind['Yr_Mo_Dy'])
wind = wind.set_index('Yr_Mo_Dy')
# print(wind.head())
待辦事項:
- 數據分析可視化方面學習。
- 繼續進行pandas數據分析方面的練習,在練習中發現問題,解決問題。
- 瞭解下Python web開發。
7/26 星期四
已辦事項:
- 學習Django框架,併成功搭建了一個投票Demo。
- 瞭解SQLite數據庫。
- DiffMerge代碼比較工具的使用,用於比對代碼。
- 對Python web項目中開發環境搭建以及virtualenv虛擬環境的學習,不同於JVM。Python web項目共用同一套環境,當多個項目共同使用時候,會出現包導入異常等問題。
關於Django框架中的代碼優化問題:類視圖 – 抓圖紀念下,還需要去了解學習
待辦事項:
- Python中正則表達式的學習。
- 瞭解下互聯網項目開發架構發展。
- 針對Django框架進行分層次學習,典型的MVC架構框架。
7/27 星期五
已辦事項:
- 學習了Python中正則表達式的內容。
- 瞭解了當下互聯網項目微服務架構。
- 開展Django + Xamin項目各種踩坑。
Python學習記錄:
-
正則表達式: -- 類比編譯原理中的分析策略
1. 何爲正則表達式?
正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。
2. 正則表達式匹配過程
1.依次拿出表達式和文本中的字符比較,
2.如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。
3.如果表達式中有量詞或邊界,這個過程會稍微有一些不同。
3. 正則表達式語法規則 圖片來自CSDN
4. 原生字符串解決反斜槓問題:
匹配'\':正則表達式:'\\\\',採用原生字符串後的正則表達式:r'\\'
匹配'\d':正則表達式:'\\d',採用原生字符串後的正則表達式:r'\d'
5. Python 自帶了re模塊,它提供了對正則表達式的支持
#返回pattern對象
pattern = re.compile(string[,flag])
#以下爲匹配所用函數
re.match(pattern, string[, flags])
re.search(pattern, string[, flags])
re.split(pattern, string[, maxsplit])
re.findall(pattern, string[, flags])
re.finditer(pattern, string[, flags])
re.sub(pattern, repl, string[, count])
re.subn(pattern, repl, string[, count]) - 踩坑記錄:
1.Django1.0 和 2.0 版本在路由方面等配置上有較大不同。
2.Pycharm在進行虛擬環境加載和庫導入時候存在問題,與Django當前版本有出入。
3.連接數據庫模塊上pymysql,Python2 和 3 用法不一致。
4.項目啓動後,404錯誤不斷,檢查settings,urls,代碼對比後還是404。
5.環境Python3 + pip3 + Django1.10 項目啓動還是Django 2.0的歡迎頁。
待辦事項:
- 下週着手數據展示平臺的開發。
- 技術選型,功能規劃,接口文檔的產出。
- 牢記約定優於配置,不要重複造輪子。