Skip to content

Commit

Permalink
0.8.5 upload(waditu#65)
Browse files Browse the repository at this point in the history
  • Loading branch information
zengbin93 committed Nov 17, 2021
1 parent 70ee88e commit 288baff
Show file tree
Hide file tree
Showing 19 changed files with 483 additions and 372 deletions.
4 changes: 1 addition & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
## 使用前必看

* 这是个人开发的项目,虽然我已经尽可能的避坑,但可以很直接的说,这里面一定还有坑,使用前请仔细校验分析结果,发现新坑请告诉我,我来填;
* 目前开发完成度不高,API可能会有比较大的变动,暂时不准备写文档,没有能力看懂源码的,不建议现在使用。
* 目前开发完成度不高,**API会有比较大的变动,谨慎升级版本**,暂时不准备写文档,没有能力看懂源码的,不建议现在使用。
* 免责声明:项目开源仅用于技术交流!

## 项目贡献
Expand Down Expand Up @@ -60,8 +60,6 @@ pip install czsc -U -i https://pypi.python.org/simple

目前已经实现了缠论的 `分型、笔` 的自动识别,核心代码在 `czsc.analyze` 中;

使用聚宽数据的快速入门请查看 `examples\czsc_quick_start.py`

## 资料分享

* 链接:https://pan.baidu.com/s/1RXkP3188F0qu8Yk6CjbxRQ
Expand Down
4 changes: 2 additions & 2 deletions czsc/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
from .data.jq import JqCzscTrader
from . import aphorism

__version__ = "0.8.4"
__version__ = "0.8.5"
__author__ = "zengbin93"
__email__ = "[email protected]"
__date__ = "20211113"
__date__ = "20211116"

print(f"欢迎使用CZSC!当前版本标识为 {__version__}@{__date__}\n")

Expand Down
6 changes: 4 additions & 2 deletions czsc/analyze.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
# coding: utf-8
import os
import webbrowser
from typing import List, Callable
from datetime import datetime
import pandas as pd
import traceback
from typing import List, Callable
from datetime import datetime
from deprecated import deprecated
from collections import OrderedDict
from pyecharts.charts import Tab
from pyecharts.components import Table
Expand Down Expand Up @@ -394,6 +395,7 @@ def finished_bis(self) -> List[BI]:
return self.bi_list


@deprecated(reason="这个版本不支持分批买卖,实现逻辑也过于复杂,放弃维护", version='1.0.0')
class CzscTrader:
"""缠中说禅技术分析理论之多级别联立交易决策类"""

Expand Down
6 changes: 6 additions & 0 deletions czsc/aphorism.py
Original file line number Diff line number Diff line change
Expand Up @@ -529,6 +529,12 @@
--摘自《2006-11-19 12:12 《论语》详解:给所有曲解孔子的人(32)》
""",

"60": """
不要预测任何消息的影响,而应该仔细观察市场对消息的反应,即市场走势本身。如感冒之于人的体质,消
息是测试市场体质的,而不是用来预测的。
--摘自《即缠非缠》微博 2021-11-16
""",
}

def print_one():
Expand Down
55 changes: 2 additions & 53 deletions czsc/cobra/backtest.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"""
import traceback
import pandas as pd
from deprecated import deprecated
from typing import List, Callable, Tuple
from tqdm import tqdm

Expand All @@ -14,6 +15,7 @@
from ..analyze import CzscTrader, KlineGenerator


@deprecated(reason="generate_signals将被弃用,请使用 czsc.sensors.utils.generate_signals 进行替换", version='1.0.0')
def generate_signals(f1_raw_bars: List[RawBar],
init_count: int = 50000,
get_signals: Callable = get_default_signals) -> List[dict]:
Expand Down Expand Up @@ -162,56 +164,3 @@ def long_trade_simulator(signals: List[dict],
pf['结束时间'] = signals[-1]['dt'].strftime("%Y-%m-%d %H:%M")
return pairs, pf


def one_event_estimator(signals: List[dict], event: Event) -> Tuple[List[dict], dict]:
"""评估单个事件的表现
:param signals: 信号列表,必须按时间升序
:param event: 事件
:return: 交易对,绩效
"""
assert len(signals) > 1000 and signals[1]['dt'] > signals[0]['dt']

trades = []
cache = {'long_stop_price': -1, 'last_op': None}

for signal in signals:
m, f = event.is_match(signal)
if cache['last_op'] != Operate.LO and m:
trades.append({
"标的代码": signal['symbol'],
'开仓时间': signal['dt'].strftime("%Y-%m-%d %H:%M"),
'开仓价格': signal['close'],
'开仓理由': f,
'oid': signal['id'],
})
cache['last_op'] = Operate.LO

if cache['last_op'] == Operate.LO and not m:
trades.append({
"标的代码": signal['symbol'],
'平仓时间': signal['dt'].strftime("%Y-%m-%d %H:%M"),
'平仓价格': signal['close'],
'平仓理由': "事件空白",
'eid': signal['id'],
})
cache['last_op'] = Operate.LE

if len(trades) % 2 != 0:
trades = trades[:-1]

pairs = []
for i in range(0, len(trades), 2):
o, e = dict(trades[i]), dict(trades[i + 1])
o.update(e)
o['持仓分钟'] = o['eid'] - o['oid']
o['盈亏(%)'] = int((o['平仓价格'] - o['开仓价格']) / o['开仓价格'] * 10000) / 100
pairs.append(o)

pf = long_trade_estimator(pairs)
pf['基准收益(%)'] = int((signals[-1]['close'] - signals[0]['open']) / signals[0]['open'] * 10000) / 100
pf['基准每分钟BP'] = round((pf['基准收益(%)'] * 100) / (signals[-1]['id'] - signals[0]['id']), 4)
pf['开始时间'] = signals[0]['dt'].strftime("%Y-%m-%d %H:%M")
pf['结束时间'] = signals[-1]['dt'].strftime("%Y-%m-%d %H:%M")
return pairs, pf

21 changes: 0 additions & 21 deletions czsc/cobra/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,24 +100,3 @@ def kdj_dead_cross(kline: Union[List[RawBar], pd.DataFrame], just: bool = True)
return False


def drop_duplicates_by_window(seq: List[Union[str, int, float]],
default_value: [str, int, float] = None,
window_size: int = 5) -> List[Union[str, int, float]]:
"""从左到右按窗口进行去重,并使用 default_value 进行填充
:param seq: 输入序列
:param default_value: 重复位置的默认填充值
:param window_size: 窗口大小
:return: 去重后的序列
"""
for i in range(len(seq)):
if i < window_size:
left = seq[: i]
else:
left = seq[i-window_size+1: i]

if seq[i] in left:
seq[i] = default_value
return seq


Loading

0 comments on commit 288baff

Please sign in to comment.