diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..c759264 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,4 @@ +# 1.0.8版本 + +1. 将加载历史数据的异步回放,从引擎移动到策略模板中 +2. 将模块的图标文件信息,改为完整路径字符串 diff --git a/README.md b/README.md index d550b78..3d8cb3c 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ -# vn.py框架的CTA策略模块 +# VeighNa框架的CTA策略模块

- + - +

@@ -17,7 +17,7 @@ ## 安装 -安装需要基于2.6.0版本以上的[VN Studio](https://www.vnpy.com)。 +安装环境推荐基于3.0.0版本以上的【[**VeighNa Studio**](https://www.vnpy.com)】。 直接使用pip命令: @@ -25,8 +25,9 @@ pip install vnpy_ctastrategy ``` -下载解压后在cmd中运行 + +或者下载源代码后,解压后在cmd中运行: ``` -python setup.py install +pip install . ``` diff --git a/setup.cfg b/setup.cfg index 687a0b6..c1fe9c9 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,11 +1,11 @@ [metadata] name = vnpy_ctastrategy -version = 1.0.6 +version = 1.0.8 url = https://www.vnpy.com license = MIT author = Xiaoyou Chen author_email = xiaoyou.chen@mail.vnpy.com -description = CTA strategy application for vn.py quant trading framework. +description = CTA strategy application for VeighNa quant trading framework. long_description = file: README.md long_description_content_type = text/markdown keywords = diff --git a/vnpy_ctastrategy/__init__.py b/vnpy_ctastrategy/__init__.py index a0dd891..655c48b 100644 --- a/vnpy_ctastrategy/__init__.py +++ b/vnpy_ctastrategy/__init__.py @@ -49,4 +49,4 @@ class CtaStrategyApp(BaseApp): display_name = "CTA策略" engine_class = CtaEngine widget_name = "CtaManager" - icon_name = "cta.ico" + icon_name = str(app_path.joinpath("ui", "cta.ico")) diff --git a/vnpy_ctastrategy/backtesting.py b/vnpy_ctastrategy/backtesting.py index e1a6459..e286ec3 100644 --- a/vnpy_ctastrategy/backtesting.py +++ b/vnpy_ctastrategy/backtesting.py @@ -1,6 +1,6 @@ from collections import defaultdict from datetime import date, datetime, timedelta -from typing import Callable +from typing import Callable, List from functools import lru_cache, partial import traceback @@ -766,15 +766,17 @@ def load_bar( interval: Interval, callback: Callable, use_database: bool - ): + ) -> List[BarData]: """""" self.days = days self.callback = callback + return [] - def load_tick(self, vt_symbol: str, days: int, callback: Callable): + def load_tick(self, vt_symbol: str, days: int, callback: Callable) -> List[TickData]: """""" self.days = days self.callback = callback + return [] def send_order( self, diff --git a/vnpy_ctastrategy/engine.py b/vnpy_ctastrategy/engine.py index dceacea..9da59dd 100644 --- a/vnpy_ctastrategy/engine.py +++ b/vnpy_ctastrategy/engine.py @@ -4,7 +4,7 @@ import traceback from collections import defaultdict from pathlib import Path -from typing import Any, Callable +from typing import Any, Callable, List from datetime import datetime, timedelta from concurrent.futures import ThreadPoolExecutor from copy import copy @@ -550,7 +550,7 @@ def load_bar( interval: Interval, callback: Callable[[BarData], None], use_database: bool - ): + ) -> List[BarData]: """""" symbol, exchange = extract_vt_symbol(vt_symbol) end = datetime.now(LOCAL_TZ) @@ -585,15 +585,14 @@ def load_bar( end=end, ) - for bar in bars: - callback(bar) + return bars def load_tick( self, vt_symbol: str, days: int, callback: Callable[[TickData], None] - ): + ) -> List[TickData]: """""" symbol, exchange = extract_vt_symbol(vt_symbol) end = datetime.now(LOCAL_TZ) @@ -606,8 +605,7 @@ def load_tick( end=end, ) - for tick in ticks: - callback(tick) + return ticks def call_strategy_func( self, strategy: CtaTemplate, func: Callable, params: Any = None diff --git a/vnpy_ctastrategy/template.py b/vnpy_ctastrategy/template.py index e37780b..df6ddfd 100644 --- a/vnpy_ctastrategy/template.py +++ b/vnpy_ctastrategy/template.py @@ -298,7 +298,7 @@ def load_bar( if not callback: callback = self.on_bar - self.cta_engine.load_bar( + bars = self.cta_engine.load_bar( self.vt_symbol, days, interval, @@ -306,11 +306,17 @@ def load_bar( use_database ) + for bar in bars: + callback(bar) + def load_tick(self, days: int): """ Load historical tick data for initializing strategy. """ - self.cta_engine.load_tick(self.vt_symbol, days, self.on_tick) + ticks = self.cta_engine.load_tick(self.vt_symbol, days, self.on_tick) + + for tick in ticks: + self.on_tick(tick) def put_event(self): """ diff --git a/vnpy_ctastrategy/ui/rollover.py b/vnpy_ctastrategy/ui/rollover.py index eef5c0f..42e4396 100644 --- a/vnpy_ctastrategy/ui/rollover.py +++ b/vnpy_ctastrategy/ui/rollover.py @@ -107,7 +107,7 @@ def roll_all(self) -> None: if not strategy.inited: self.write_log(f"策略{strategy.strategy_name}尚未初始化,无法执行移仓") return - + if strategy.trading: self.write_log(f"策略{strategy.strategy_name}正在运行中,无法执行移仓") return