總述
以前有這種想法,自從平時下班后自學python 開始,這種想法就越演越烈。其實筆者炒股也只有一年時間,炒股經驗遠遠不足,但想着平時私下時間拿來做點啥事,因此也是這篇文章的由來。
1. 炒股的策略
對於股票的研究,一直想再專門寫個專輯論述《炒股論》。特別是這兩年量化投資盛行,基本都是在python語言基礎上進行的策略回歸。
總體來說,常規的股票研究分兩種
1) 技術參數回歸
把K線歷史數據,MACD指標,這些進行參考,然后找出一條有效的策略,使得這個盈率50% -70%之間,這樣就可以持續的增大盈虧概率。
例如,技術量化回歸中最常用的策略之一:市值< 200億 ,換手率:3%<p <10%,5日均線上穿10日均線。。。
2)量價關系與籌碼回歸
由於很多行情接入點無法獲取level 2級別的數據,這使得再單位時間點上的交易數量有差異,這種導致統計也會出現偏差。基於這種方式,其實區別第一種看趨勢行情,它更傾向於當下行情。通過統計計算大致得出主力與散戶的比率,所有持倉人籌碼的盈虧比,這樣來指導下一步計划。
例如,統計當日各個階段的買入和賣出量,每一筆訂單累計到整體的成交量得出 主力大單與小單之比q,籌碼盈虧比k
炒股真的可以賺錢嗎?
-- 當然可以。只是喜憂參半,到頭所剩無幾,隨着參與的次數越多,各種成本平攤下來,最終可能還是個負數。
有些私募機構確實通過獲得了收益,在如今的中國一些機構里,量化投資更加盛行。它最大的好處是避免了人為因素,行業周期因素,因此更適合長期。
就像做T 輪動一樣,無論行情如何變動,只要每天有3%的波動,那么就可以獲取這每天的波動點。
炒股本質是博弈。那么我們就需要研究下漲跌概率。通過已經所選的策略 放在歷史行情當中進行回歸測試,檢查是否滿足贏虧比。
用python 需要哪些准備?
1. 基礎。 簡單語法,定義函數、名詞參數。 推薦python 基礎教程、python 簡明教程
2. 線程。簡單的線程並不難,了解就夠。 屬於高階部分,部分網上也有介紹。這樣可以實現各個函數的分工
3. 模塊。這個可能才是重點,如何調用別人的模塊,如何獲取數據。基礎內容中必學之一
可能這里需要爬蟲,通過東方財富,同花順或者新浪股票網頁獲取數據保存文件下來,當然也可以直接調用現行的接口。 比如 tushare, 新的pro版本已經是部分免費
也就是說,一個python 程序的本質,就是模塊中至少有tushare、pandas等等搭配的過程
如何用python 實現炒股中賺錢?
數據。這個比較容易獲取,甚至套用已有的網絡數據,如文章末尾的實例
算法。這部分是技術核心,一般機構公司都保密而不公開,而且策略隨市場變化,基本每個月都會變動以適用新的行情。后期專門討論此系列。
策略回歸。國內已經有很多平台可以用,先參考成熟的平台比如米寬,同花順,這些平台也有數據,注冊平台后直接通過編輯免費使用
重點:在於編寫一套何種策略,才能增大你的盈利概率,即使不用回歸歷史行情。
模型實例 1: 假設市場上交易只有兩人, 張三(A) 和李四(B) 同時手上各有10個蘋果,每個蘋果的成本是1元,若張三以單價2元賣出5個給李四時,請問李四若以3元的單價進行回賣給張三,至少要賣出幾個,才能不至於虧損?
當進行多次買賣后,雙方會到達一種新的平衡,若出現手上的蘋果出現2:8比率時,此時的蘋果價格會是多少?
這種解釋的啟發,會獲得算法上的靈感。
比如筆者平時摸索,自己建立了幾個小的經濟數學模型,通過自我探討成交量和價格波動關系,得到資金波動 公式k。然后通過當前的成交量,當前的價格來計算未來某一價格的最大可能性
當然這個模型不可能百分之百讓你盈利,做這樣的結果,目的是盡可能的增加你的預測概率。對於是否存在有百分之百的概率,對此我表示謹慎的態度,也是我盡力研究的方向
比如用baostock 平台數據獲取下來的數據,然后加入自己計算的策略(簡略參考部分)
# -*- coding: utf-8 -*- import pandas as pd import numpy as np import matplotlib.pyplot as plt import baostock as bs from matplotlib.dates import DateFormatter import datetime #### 登陸系統 lg = bs.login() stock = "sh.600996" # 顯示登陸返回信息 print('login respond error_code:'+lg.error_code) print('login respond error_msg:'+lg.error_msg) rs = bs.query_history_k_data_plus(stock, "date,code,open,high,low,close,volume,amount,adjustflag,turn,tradestatus,pctChg,isST", start_date='2019-06-20',frequency="d", adjustflag="3") print('query_history_k_data_plus respond error_code:'+rs.error_code) print('query_history_k_data_plus respond error_msg:'+rs.error_msg) data_list = [] while (rs.error_code == '0') & rs.next(): # 獲取一條記錄,將記錄合並在一起 data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) result.to_csv("./stock.csv", index=False) #### 結果集輸出到csv文件 #### bs.logout() data = pd.read_csv('/Users/few/stock.csv')