1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/foolcage-zvt

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Происхождение ZVT

Три основных принципа торговли акциями

Декларация

В настоящее время этот проект не гарантирует обратной совместимости, поэтому будьте осторожны при обновлении. По мере развития мыслей автора некоторые вещи, которые когда-то считались важными, могут стать менее значимыми и, следовательно, не поддерживаться. Нужно самостоятельно оценивать, будет ли полезно добавление некоторых новых элементов.

Читайте это на других языках: 中文.

Прочитайте документацию:https://zvt.readthedocs.io/en/latest/

Установка

python3 -m pip install -U zvt

Основной интерфейс

Dash & Plotly UI

Подходит для бэктестинга и исследований, но не применим для данных в реальном времени и взаимодействия с пользователем.

После завершения установки введите zvt в командной строке

zvt

откройте http://127.0.0.1:8050/

Приведённый здесь пример опирается на данные, фактор, трейдер, пожалуйста, прочитайте документацию.

Основная концепция системы визуальна, и название интерфейса соответствует ей один к одному, так что оно также единообразно и расширяемо.

Вы можете написать и запустить стратегию в своём любимом ide, а затем просмотреть связанные с ней цели, факторы, сигналы и производительность в пользовательском интерфейсе.

Rest api и автономный интерфейс

Более гибкий и масштабируемый, больше подходит для обработки данных в реальном времени и взаимодействия с пользователями. В сочетании с динамической системой тегов, предоставляемой ZVT, он предлагает подход к торговле, который сочетает в себе искусственный интеллект и человеческое вмешательство.

  • Инициализация системы тегов

запустите следующие скрипты:

https://github.com/zvtvz/zvt/blob/master/src/zvt/tasks/init_tag_system.py https://github.com/zvtvz/zvt/blob/master/src/zvt/tasks/stock_pool_runner.py https://github.com/zvtvz/zvt/blob/master/src/zvt/tasks/qmt_data_runner.py https://github.com/zvtvz/zvt/blob/master/src/zvt/tasks/qmt_tick_runner.py

  • Установите uvicorn
pip install uvicorn
  • Запустите сервер zvt

После завершения установки введите zvt_server в командной строке

zvt_server

Или запустите его из исходного кода: https://github.com/zvtvz/zvt/blob/master/src/zvt/zvt_server.py

  • Проверьте документацию по API

откройте http://127.0.0.1:8090/docs

  • Разверните службу внешнего интерфейса

Исходный код внешнего интерфейса: https://github.com/zvtvz/zvt_ui

Измените файл env: https://github.com/zvtvz/zvt_ui/blob/main/.env

Установите {ваш IP-адрес сервера} на IP-адрес zvt_сервера

NEXT_PUBLIC_SERVER = {your server IP}

Затем обратитесь к README внешнего интерфейса, чтобы запустить службу внешнего интерфейса.

откройте http://127.0.0.1:3000/trade

Узрите мощь zvt:

>>> from zvt.domain import Stock, Stock1dHfqKdata **Перевод текста:**

exchange code name list_date end_date 0 stockus_nasdaq_AAPL stockus_nasdaq_AAPL None stockus nasdaq AAPL 苹果 None None


#### Hong Kong stock

Stockhk.record_data() df = Stockhk.query_data(index='code') print(df)

                 id         entity_id timestamp entity_type exchange   code    name list_date end_date

code 00001 stockhk_hk_00001 stockhk_hk_00001 NaT stockhk hk 00001 长和 None None 00002 stockhk_hk_00002 stockhk_hk_00002 NaT stockhk hk 00002 中电控股 None None 00003 stockhk_hk_00003 stockhk_hk_00003 NaT stockhk hk 00003 香港中华煤气 None None 00004 stockhk_hk_00004 stockhk_hk_00004 NaT stockhk hk 00004 九龙仓集团 None None 00005 stockhk_hk_00005 stockhk_hk_00005 NaT stockhk hk 00005 汇丰控股 None None ... ... ... ... ... ... ... ... ... ... 09996 stockhk_hk_09996 stockhk_hk_09996 NaT stockhk hk 09996 沛嘉医疗-B None None 09997 stockhk_hk_09997 stockhk_hk_09997 NaT stockhk hk 09997 康基医疗 None None 09998 stockhk_hk_09998 stockhk_hk_09998 NaT stockhk hk 09998 光荣控股 None None 09999 stockhk_hk_09999 stockhk_hk_09999 NaT stockhk hk 09999 网易-S None None 80737 stockhk_hk_80737 stockhk_hk_80737 NaT stockhk hk 80737 湾区发展-R None None

[2597 rows x 9 columns]

df[df.code=='00700']

                id         entity_id timestamp entity_type exchange   code  name list_date end_date

2112 stockhk_hk_00700 stockhk_hk_00700 None stockhk hk 00700 腾讯控股 None None


#### And more

from zvt.contract import * zvt_context.tradable_schema_map

{'stockus': zvt.domain.meta.stockus_meta.Stockus, 'stockhk': zvt.domain.meta.stockhk_meta.Stockhk, 'index': zvt.domain.meta.index_meta.Index, 'etf': zvt.domain.meta.etf_meta.Etf, 'stock': zvt.domain.meta.stock_meta.Stock, 'block': zvt.domain.meta.block_meta.Block, 'fund': zvt.domain.meta.fund_meta.Fund}


Ключ — это тип торгуемой сущности, а значение — схема. Система предоставляет унифицированные методы **записи (record_data)** и **запроса (query_data)** для схемы.

Index.record_data() df=Index.query_data(filters=[Index.category=='scope',Index.exchange='sh']) print(df) id entity_id timestamp entity_type exchange code name list_date end_date publisher category base_point 0 index_sh_000001 index_sh_000001 1990-12-19 index sh 000001 上证指数 1991-07-15 None csindex scope 100.00 1 index_sh_000002 index_sh_000002 1990-12-19 index sh 000002 A股指数 1992-02-21 None csindex scope 100.00 2 index_sh_000003 index_sh_000003 1992-02-21 index sh 000003 B股指数 1992-08-17 None csindex scope 100.00 3 index_sh_000010 index_sh_000010 2002-06-28 index sh 000010 上证180 2002-07-01 None csindex scope 3299.06 4 index_sh_000016 index_sh_000016 2003-12-31 index sh 000016 上证50 2004-01-02 None csindex scope 1000.00 .. ... ... ... ... ... ... ... ... ... ... ... ... 25 index_sh_000020 index_sh_000020 2007-12-28 index sh 000020 中型综指 2008-05-12 None csindex scope 1000.00 26 index_sh_000090 index_sh_000090 2009-12-31 index sh 000090 上证流通 2010-12-02 None csindex scope 1000.00 27 index_sh_930903 index_sh_930903 2012-12-31 index sh 930903 中证A股 2016-10-18 None csindex scope 1000.00 28 index_sh_000688 index_sh_000688 2019-12-31 index sh 000688 科创50 2020-07-23 None csindex scope 1000.00 29 index_sh_931643 index_sh_931643 2019-12-31 index sh 931643 科创创业50 2021-06-01

Примечание: в тексте запроса присутствуют фрагменты кода на языке Python, которые не были переведены. Что за данные представлены?

В тексте представлен фрагмент кода на языке Python, который выполняет запрос к базе данных с финансовыми показателями компаний. В результате запроса получается таблица с данными о различных финансовых показателях для ряда компаний.

Как записываются данные?

Данные записываются в базу данных при помощи кода на Python.

Как запросить данные?

Запрос данных осуществляется при помощи функции query_data() класса FinanceFactor. Запрос фильтрует данные по определённым условиям и возвращает только соответствующие им строки таблицы.

  • Текст после описания стратегии не переведён, так как содержит код на языке Python. ``` StockActorSummary.report_date == recent_report_date]

if self.entity_ids: filters = filters + [StockActorSummary.entity_id.in_(self.entity_ids)]

df = StockActorSummary.query_data(filters=filters)

if pd_is_not_null(df): self.logger.info(f'{df}') self.finish_date = recent_report_date

long_df = df[df['change_ratio'] > 0.05] short_df = df[df['change_ratio'] < -0.5] try: self.trade_the_targets(due_timestamp=timestamp, happen_timestamp=timestamp, long_selected=set(long_df['entity_id'].to_list()), short_selected=set(short_df['entity_id'].to_list())) except Exception as e: self.logger.error(e)


Это похоже на язык Python.

Основной язык текста запроса — Python. **2019-01-03    1d  55.06  stock_sh_601318_2019-01-03  stock_sh_601318  53.91  53.82 2019-01-03  54.42       NaN       NaN       NaN**

                **2019-01-04    1d  55.71  stock_sh_601318_2019-01-04  stock_sh_601318  54.03  53.98 2019-01-04  55.31       NaN       NaN       NaN**

                **2019-01-07    1d  55.88  stock_sh_601318_2019-01-07  stock_sh_601318  55.80  54.64 2019-01-07  55.03       NaN       NaN       NaN**

                **2019-01-08    1d  54.83  stock_sh_601318_2019-01-08  stock_sh_601318  54.79  53.96 2019-01-08  54.54       NaN       NaN       NaN**
...                          ...    ...                         ...              ...    ...    ...        ...    ...       ...       ...       ...

**stock_sz_000338 2019-06-03    1d  11.04  stock_sz_000338_2019-06-03  stock_sz_000338  10.93  10.74 2019-06-03  10.81 -0.121336 -0.145444  0.048215**

                **2019-06-04    1d  10.85  stock_sz_000338_2019-06-04  stock_sz_000338  10.84  10.57 2019-06-04  10.73 -0.133829 -0.143121  0.018583**

                **2019-06-05    1d  10.92  stock_sz_000338_2019-06-05  stock_sz_000338  10.87  10.59 2019-06-05  10.59 -0.153260 -0.145149 -0.016223**

                **2019-06-06    1d  10.71  stock_sz_000338_2019-06-06  stock_sz_000338  10.59  10.49 2019-06-06  10.65 -0.161951 -0.148509 -0.026884**

                **2019-06-10    1d  11.05  stock_sz_000338_2019-06-10  stock_sz_000338  10.73  10.71 2019-06-10  11.02 -0.137399 -0.146287  0.017776**

[208 rows x 11 columns]

### result_df

**two-dimensional index** DataFrame which calculating using factor_df or(and) data_df.
It's used by TargetSelector.

e.g.,[macd](https://github.com/zvtvz/zvt/blob/master/src/zvt/factors/technical_factor.py#L56)

In [14]: factor.result_df Out[14]: filter_result entity_id timestamp stock_sh_601318 2019-01-02 False 2019-01-03 False 2019-01-04 False 2019-01-07 False 2019-01-08 False ... ... stock_sz_000338 2019-06-03 False 2019-06-04 False 2019-06-05 False 2019-06-06 False 2019-06-10 False

[208 rows x 1 columns]


The format of result_df is as follows:

<p align="center"><img src='https://raw.githubusercontent.com/zvtvz/zvt/master/docs/imgs/result_df.png'/></p>

filter_result is True or False, score_result is from 0 to 1

Combining the stock picker and backtesting, the whole process is as follows:
<p align="center"><img src='https://raw.githubusercontent.com/zvtvz/zvt/master/docs/imgs/flow.png'/></p>

## Env settings(optional)

from zvt import * zvt_env {'zvt_home': '/Users/foolcage/zvt-home', 'data_path': '/Users/foolcage/zvt-home/data', 'tmp_path': '/Users/foolcage/zvt-home/tmp', 'ui_path': '/Users/foolcage/zvt-home/ui', 'log_path': '/Users/foolcage/zvt-home/logs'}

zvt_config


* jq_username 聚宽数据用户名
* jq_password 聚宽数据密码
* smtp_host 邮件服务器host
* smtp_port 邮件服务器端口
* email_username smtp邮箱账户
* email_password smtp邮箱密码
* wechat_app_id
* wechat_app_secrect

init_config(current_config=zvt_config, jq_username='xxx', jq_password='yyy')

> config others this way: init_config(current_config=zvt_config, **kv)

### History data

ZVT supports incremental data updates, and sharing historical data among users is encouraged for time-saving efficiency

#### Data providers

> The new UI's real-time quotes are based on the QMT data source. To obtain access, please contact the author.

the data could be updated from different provider, this make the system stable.

> add other providers, [Data extension tutorial](https://zvtvz.github.io/zvt/#/data_extending)

## Development

### Clone

git clone https://github.com/zvtvz/zvt.git


set up virtual env(python>=3.8),install requirements

pip3 install -r requirements.txt pip3 install pytest


### Tests

```shell
pytest ./tests --ignore=tests/recorders/ 

Most of the

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/foolcage-zvt.git
git@api.gitlife.ru:oschina-mirror/foolcage-zvt.git
oschina-mirror
foolcage-zvt
foolcage-zvt
master