CZSC 是纏中說禪技術分析理論的 python 實作,該理論源自 纏中說禪 博客,
注意:檔案寫的比較匆忙,很多地方可能沒有講清楚,有什么疑問,可以到 常見問題(FAQ) 看看,看完還有疑問,可以直接在FAQ鏈接下面跟帖提問,
此檔案僅適用于
czsc == 0.6.7,地址: https://github.com/zengbin93/czsc
CZSC 官方檔案(0.6.7)
- 1. 纏中說禪技術分析理論基礎
- 2. 安裝、更新與卸載
- 3. 基礎資訊
- 3.1 符號說明
- 3.2 基礎形態定義
- 4. 簡單用法
- 4.1 查看分析結果
- 4.2 單級別形態選股
- 4.3 實時監控并推送訊息到企業微信
- 5. 高級用法
- 5.1 使用掘金量化終端進行纏論策略研究
- 5.2 對接K線資料
1. 纏中說禪技術分析理論基礎
- 纏中說禪重新編排版《論語》(整理版)
- 纏中說禪交易指南
- 纏中說禪技術原理
- 纏中說禪圖解分析示范
以上四篇文章,建議按順序讀一遍,如果讀完后感覺纏中說禪技術分析理論還不錯,推薦閱讀原文,
2. 安裝、更新與卸載
czsc 是一個python第三方庫,安裝、更新、卸載與任何 python 第三方庫都是一樣的,czsc 目前已經實作了纏中說禪技術分析理論中的一些核心概念,包括分型、筆等,基于此,設計并實作了N個纏中說禪技術分析信號,用于輔助策略設計和多因子建模,
python 版本必須大于等于 3.7
直接從 github 安裝與更新:
pip install git+git://github.com/zengbin93/czsc.git -U
從 pypi 安裝與更新:
pip install czsc -U -i https://pypi.python.org/simple
快速卸載:
pip uninstall czsc
3. 基礎資訊
3.1 符號說明
在信號和因子設計程序中,為了方便表達,引入以下符號,不區分大小寫:
| 符號 | 說明 |
|---|---|
| BI | 筆物件 |
| FX | 分型物件 |
| — | — |
| X5 | 五筆形態 |
| X7 | 七筆形態 |
| X9 | 九筆形態 |
| L | 多頭信號,Long 的首字母 |
| S | 空頭信號,Short 的首字母 |
| — | — |
| C6 | 日線級別 |
| C5 | 60分鐘級別 |
| C4 | 30分鐘級別 |
| C3 | 15分鐘級別 |
| C2 | 5分鐘級別 |
| C1 | 1分鐘級別 |
| — | — |
| L1 | 向下筆轉折右側 |
| L2 | 向下筆轉折左側 |
| L3 | 向上筆中繼右側 |
| L4 | 向上筆中繼左側 |
| S1 | 向上筆轉折右側 |
| S2 | 向上筆轉折左側 |
| S3 | 向下筆中繼右側 |
| S4 | 向下筆中繼左側 |
| — | — |
| R1 | 倒數第1筆 |
| R2 | 倒數第2筆 |
| R3 | 倒數第3筆 |
| R4 | 倒數第4筆 |
| R5 | 倒數第5筆 |
符合舉例:
X5LA0 表示五筆形態為aAb式底背弛基礎型,具體的說,X5 = 五筆形態,L = 多頭,A0 = aAb式底背弛基礎型
3.2 基礎形態定義
在信號層面,定義了若干種常見形態,具體請參考:
- 纏中說禪形態挖掘之五筆形態
- 纏中說禪形態挖掘之七筆形態
- 纏中說禪形態挖掘之九筆形態
4. 簡單用法
czsc 庫目前內置了聚寬資料的獲取方法,聚寬資料的用戶可以很方便的使用一些基礎功能,
4.1 查看分析結果
CzscTrader 是依賴聚寬資料實作的多級別分析類 ,聚寬資料用戶可以直接使用,
# 首次使用需要設定聚寬賬戶
# from czsc.data.jq import set_token
# set_token("phone number", 'password') # 第一個引數是JQData的手機號,第二個引數是登錄密碼
from datetime import datetime
import czsc
from czsc.trader import CzscTrader
assert czsc.__version__ == '0.6.7'
# 在默認瀏覽器中打開最新分析結果,
ct = CzscTrader(symbol="000001.XSHG", end_date=datetime.now())
ct.open_in_browser(width="1400px", height="580px")
# open_in_browser 方法可以在windows系統中使用,如果無法使用,可以直接保存結果到 html 檔案
# ct.take_snapshot(file_html="czsc_results.html", width="1400px", height="580px")
# 在默認瀏覽器中打開指定結束日期的分析結果)
ct = CzscTrader(symbol="000001.XSHG", end_date="2021-03-04")
ct.open_in_browser(width="1400px", height="580px")
4.2 單級別形態選股
以三買為例,單級別形態選股的實作方法如下:
# 首次使用需要設定聚寬賬戶
# from czsc.data.jq import set_token
# set_token("phone number", 'password') # 第一個引數是JQData的手機號,第二個引數是登錄密碼
from datetime import datetime
from typing import List
from czsc.data.jq import get_kline, get_index_stocks
import czsc
from czsc.analyze import CZSC
from czsc.enum import Signals
assert czsc.__version__ == '0.6.7'
def is_third_buy(symbol):
"""判斷一個股票現在是否有日線三買"""
bars = get_kline(symbol, freq="D", end_date=datetime.now(), count=1000)
c = CZSC(bars, freq="日線")
# 在這里判斷是否有五筆三買形態,也可以換成自己感興趣的形態
if c.signals['倒1五筆'] in [Signals.X5LB0.value, Signals.X5LB1.value]:
return True
else:
return False
if __name__ == '__main__':
# 獲取上證50最新成分股串列,這里可以換成自己的股票池
symbols: List = get_index_stocks("000016.XSHG")
for symbol in symbols:
try:
if is_third_buy(symbol):
print("{} - 日線三買".format(symbol))
except:
print("{} - 執行失敗".format(symbol))
4.3 實時監控并推送訊息到企業微信
CZSC 內部實作了企業微信群聊機器人的實時訊息推送方法,可以推送文本訊息和檔案,關于企業微信群聊機器人的使用方法,請參考騰訊檔案:https://work.weixin.qq.com/api/doc/90000/90136/91770
下面是一個實時監控因子的案例,以日線筆因子為例:
# 首次使用需要設定聚寬賬戶
# from czsc.data.jq import set_token
# set_token("phone number", 'password') # 第一個引數是JQData的手機號,第二個引數是登錄密碼
import traceback
import time
import shutil
import os
import pickle
from datetime import datetime
from czsc.trader import CzscTrader, Factors
from czsc.utils.qywx import push_text, push_file
# =======================================================================================================
# 基礎引數配置
ct_path = os.path.join(".", "czsc_traders")
os.makedirs(ct_path, exist_ok=True)
# 關于企業微信群聊機器人的使用檔案,參考:https://work.weixin.qq.com/api/doc/90000/90136/91770
# 企業微信群聊機器人的key
qywx_key = "4ad2e226-2519-4893-8670-*****"
# 定義需要監控的股票串列
symbols = ["300033.XSHE", "300803.XSHE", "002739.XSHE"]
# =======================================================================================================
def save_pkl(data, file):
with open(file, "wb") as f:
pickle.dump(data, f)
def read_pkl(file):
with open(file, "rb") as f:
data = pickle.load(f)
return data
def monitor(use_cache=True):
push_text("自選股CZSC筆因子監控啟動 @ {}".format(datetime.now().strftime("%Y-%m-%d %H:%M")), qywx_key)
moni_path = os.path.join(ct_path, "monitor")
# 首先清空歷史快照
if os.path.exists(moni_path):
shutil.rmtree(moni_path)
os.makedirs(moni_path, exist_ok=True)
for s in symbols:
print(s)
try:
file_ct = os.path.join(ct_path, "{}.ct".format(s))
if os.path.exists(file_ct) and use_cache:
ct: CzscTrader = read_pkl(file_ct)
ct.update_factors()
else:
ct = CzscTrader(s, max_count=1000)
save_pkl(ct, file_ct)
# 每次執行,會在moni_path下面保存一份快照
file_html_ = os.path.join(moni_path, f"{ct.symbol}_{ct.kf.end_dt.strftime('%Y%m%d%H%M')}.html")
ct.take_snapshot(file_html_, width="1400px", height="580px")
if ct.s['日線筆因子'] != Factors.Other.value:
msg = "{} - {}\n".format(s, ct.s['日線筆因子'])
msg += "同花順F10:http://basic.10jqka.com.cn/{}".format(s[:6])
push_text(msg, key=qywx_key)
file_html_new = os.path.join(moni_path, f"{ct.symbol}_{ct.kf.end_dt.strftime('%Y%m%d%H%M')}.html")
shutil.copyfile(file_html_, file_html_new)
push_file(file_html_new, key=qywx_key)
except Exception as e:
traceback.print_exc()
print("{} 執行失敗 - {}".format(s, e))
push_text("自選股CZSC筆因子監控結束 @ {}".format(datetime.now().strftime("%Y-%m-%d %H:%M")), qywx_key)
def run_monitor():
mdt = ["09:30", "10:00", "10:30", "11:00", "11:20", "13:00", "13:30", "14:00", "14:30", "14:50"]
monitor()
while 1:
print(datetime.now().strftime("%H:%M"))
if datetime.now().strftime("%H:%M") in mdt:
monitor()
time.sleep(3)
if __name__ == '__main__':
run_monitor()
5. 高級用法
5.1 使用掘金量化終端進行纏論策略研究
使用掘金量化終端進行纏論策略研究的代碼稍微有點復雜,主要是需要實作一些掘金量化平臺的一些回呼函式和下單方法,具體的內容,點擊訪問:https://github.com/zengbin93/czsc_gm
5.2 對接K線資料
纏中說禪技術分析理論只需要K線,因此,任何第三方資料源只要轉換一下K線獲取方法就可以使用,下面以 Tushare 資料為例,介紹下如何進行K線資料轉換,重點是 format_kline 方法,
import pandas as pd
import tushare as ts
from datetime import datetime, timedelta
from typing import List
import czsc
from czsc.analyze import CZSC, RawBar
from czsc.enum import Signals
assert czsc.__version__ == '0.6.7'
# 使用第三方資料,只需要定義一個K線轉換函式
def format_kline(kline: pd.DataFrame) -> List[RawBar]:
"""
:param kline: Tushare 資料介面回傳的K線資料
:return: 轉換好的K線資料
"""
bars = []
records = kline.to_dict('records')
for record in records:
# 將每一根K線轉換成 RawBar 物件
bar = RawBar(symbol=record['ts_code'], dt=pd.to_datetime(record['trade_date']), open=record['open'],
close=record['close'], high=record['high'], low=record['low'], vol=record['vol'])
bars.append(bar)
return bars
def is_third_buy(ts_code):
"""判斷一個股票現在是否有日線三買"""
# 呼叫tushare的K線獲取方法,Tushare資料的使用方法,請參考:https://tushare.pro/document/2
end_date = datetime.now()
start_date = end_date - timedelta(days=1000)
df = ts.pro_bar(ts_code=ts_code, adj='qfq', asset="E",
start_date=start_date.strftime("%Y%m%d"),
end_date=end_date.strftime("%Y%m%d"))
bars = format_kline(df)
c = CZSC(bars, freq="日線")
# 在這里判斷是否有五筆三買形態,也可以換成自己感興趣的形態
if c.signals['倒1五筆'] in [Signals.X5LB0.value, Signals.X5LB1.value]:
return True
else:
return False
if __name__ == '__main__':
# 這里可以換成自己的股票池
ts_codes = ['603259.SH', '603288.SH', '603501.SH', '603986.SH']
for ts_code in ts_codes:
try:
if is_third_buy(ts_code):
print("{} - 日線三買".format(ts_code))
except:
print("{} - 執行失敗".format(ts_code))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/267132.html
標籤:python
