使用python 來實現炒股


總述

以前有這種想法,自從平時下班后自學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')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM