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

OSCHINA-MIRROR/foolcage-zvt

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README-cn.md 29 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 11:50 7fc72d5

Зовёт

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

Заявление

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

Прочитайте это на других языках: English.

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

Модель рынка

ZVT абстрагирует рынок в виде следующей модели:

  • TradableEntity (объект торговли)
  • ActorEntity (участник рынка)
  • EntityEvent (события, происходящие с объектом торговли и участником рынка)

Быстрый старт

Установка

python3 -m pip install -U zvt

Использование демонстрации

Главный экран

Dash & Plotly UI

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

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

zvt

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

Здесь показанный пример зависит от последующей загрузки исторических данных, обновление данных см. в документации ниже

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

Вы можете писать и запускать стратегии в предпочитаемой среде разработки, а затем просматривать соответствующие объекты, факторы, сигналы и чистую стоимость в интерфейсе.

Раздельный интерфейс переднего и заднего плана

Более гибкий и расширяемый, более подходящий для обработки реального времени и взаимодействия с пользователями, в сочетании с динамической системой тегов 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 server

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

zvt_server

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

  • api документы

open http://127.0.0.1:8090/docs

  • Разверните интерфейс

Код переднего плана: https://github.com/zvtvz/zvt_ui

Измените файл среды переднего плана: https://github.com/zvtvz/zvt_ui/blob/main/.env

Установите {your server IP}, то есть адрес службы zvt_server

NEXT_PUBLIC_SERVER = {your server IP}

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

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

Момент чуда

>>> from zvt.domain import Stock, Stock1dHfqKdata
>>> from zvt.ml import MaStockMLMachine
>>> Stock.record_data(provider="em")
>>> entity_ids = ["stock_sz_000001", "stock_sz_000338", "stock_sh_601318"]
>>> Stock1dHfqKdata.record_data(provider="em", entity_ids=entity_ids, sleeping_time=1)
>>> machine = MaStockMLMachine(entity_ids=["stock_sz_000001"], data_provider="em")
>>> machine.train()
>>> machine.predict()
>>> machine.draw_result(entity_id="stock_sz_000001")

Эти несколько строк кода реализуют: сбор данных, постоянное хранение, инкрементное обновление, машинное обучение, прогнозирование, отображение результатов. После ознакомления с основными концепциями системы вы можете применить их к любому объекту торговли на рынке.

Основные понятия

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

#### Данные о ценных бумагах американских компаний

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

                   id            entity_id timestamp entity_type exchange  code                         name list_date end_date

code A stockus_nyse_A stockus_nyse_A NaT stockus nyse A 安捷伦 None None AA stockus_nyse_AA stockus_nyse_AA NaT stockus nyse AA 美国铝业 None None AAC stockus_nyse_AAC stockus_nyse_AAC NaT stockus nyse AAC Ares Acquisition Corp-A None None ... ... ... ... ... ... ... ... ... ... ZWRK stockus_nasdaq_ZWRK stockus_nasdaq_ZWRK NaT stockus nasdaq ZWRK Z-Work Acquisition Corp-A None None ZY stockus_nasdaq_ZY stockus_nasdaq_ZY NaT stockus nasdaq ZY Zymergen Inc None None ... ... ... ... ... ... ... ... ... ...

[4136 строк x 9 столбцов]


#### Американские ценные бумаги

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

                   id            entity_id timestamp entity_type exchange  code                         name list_date end_date

code A stockus_nyse_A stockus_nyse_A NaT stockus nyse A 安捷伦 None None AA stockus_nyse_AA stockus_nyse_AA NaT stockus nyse AA 美国铝业 None None AAC stockus_nyse_AAC stockus_nyse_AAC NaT stockus nyse AAC Ares Acquisition Corp-A None None AACG stockus_nasdaq_AACG stockus_nasdaq_AACG NaT stockus nasdaq AACG ATA Creativity Global ADR None None AACG stockus_nyse_AACG stockus_nyse_AACG NaT stockus nyse AACG ATA Creativity Global ADR None None ... ... ... ... ... ... ... ... ... ... ZWRK stockus_nasdaq_ZWRK stockus_nasdaq_ZWRK NaT stockus nasdaq ZWRK Z-Work Acquisition Corp-A None None ZY stockus_nasdaq_ZY stockus_nasdaq_ZY NaT stockus nasdaq ZY Zymergen Inc None None ... ... ... ... ... ... ... ... ... ...

[5826 строк x 9 столбцов]

Stockus.query_data(code='AAPL') id entity_id timestamp entity_type exchange code name list_date end_date 0 stockus_nasdaq_AAPL stockus_nasdaq_AAPL None stockus nasdaq AAPL 苹果 None None


#### Гонконгские ценные бумаги

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

|---------------------------------------------|------------------|---------------|--------------|--------|--------|-----|------|---------|
| 2007-05-09                                    | None             | 2007-05-09    | 潍柴动力   | 1d     |        |       |       |         |
| stock_sz_000338_2007-05-10                    | stock_sz_000338  | 2007-05-10    | 潍柴动力   | 1d     |        |       |       |         |
| stock_sz_000338_2007-05-11                    | stock_sz_000338  | 2007-05-11    | 潍柴动力   | 1d     |        |       |       |         |
| ...                                           | ...              | ...           | ...          | ...    | ...   | ...   |       |         |
| 3426 stock_sz_000338_2021-08-27                | stock_sz_000338  | 2021-08-27    | 潍柴动力   | 1d     |        |       |       |         |
| 3427 stock_sz_000338_2021-08-30                | stock_sz_000338  | 2021-08-30    | 潍柴动力   | 1d     |        |       |       |         |
| 3428 stock_sz_000338_2021-08-31                | stock_sz_000338  | 2021-08-31    | 潍柴动力   | 1d     |        |       |       |         |
| 3429 stock_sz_000338_2021-09-01                | stock_sz_000338  | 2021-09-01    | 潍柴动力   | 1d     |        |       |       |         |
| 3430 stock_sz_000338_2021-09-02                | stock_sz_000338  | 2021-09-02    | 潍柴动力   | 1d     |        |       |       |         |

[3431 строка x 15 столбцов]

Примечание: в запросе не хватает контекста, чтобы полностью понять и перевести текст. Однако, исходя из предоставленных данных, можно предположить, что это таблица с финансовыми данными о ценах акций на фондовом рынке. Финансовые факторы

В запросе представлен фрагмент таблицы с финансовыми показателями, такими как базовая прибыль на акцию (basic_eps), общий операционный доход (total_op_income), чистая прибыль (net_profit), рост операционного дохода и чистой прибыли за год (op_income_growth_yoy и net_profit_growth_yoy), рентабельность собственного капитала (roe), коэффициент общей рентабельности (rota), валовая маржа прибыли (gross_profit_margin), маржа чистой прибыли (net_margin) и дата (timestamp).

Данные охватывают период с 2002 по 2021 год. В таблице представлены значения этих показателей для разных дат.

Примечание: в запросе могут быть дополнительные данные, которые не были включены в перевод. Финансовая отчётность: три таблицы

Финансовая отчётность: три таблицы

# Актив и пассив баланса
>>> BalanceSheet.record_data(code='000338')
# Отчёт о прибылях и убытках
>>> IncomeStatement.record_data(code='000338')
# Денежный поток
>>> CashFlowStatement.record_data(code='000338')

И ещё

>>> zvt_context.schemas
[zvt.domain.dividend_financing.DividendFinancing,
 zvt.domain.dividend_financing.DividendDetail,
 zvt.domain.dividend_financing.SpoDetail...]

zvt_context.schemas — это список схем, которые поддерживаются системой. Схема — это структура данных, которая определяет поля и их значения. Чтобы посмотреть, как работает схема, можно использовать следующие методы:

  • help() — выводит информацию о схеме.

  • source code — файлы в папке domain содержат определения схем. Можно посмотреть комментарии к полям.

На основе этих примеров можно понять, как записывать данные в систему:

Schema.record_data(provider='your provider',codes='the codes')

Обратите внимание на параметр provider. Он представляет поставщика данных. У одной схемы может быть несколько поставщиков. Это основа стабильности системы.

Чтобы посмотреть список доступных поставщиков:

>>> Stock.provider_map_recorder
{'joinquant': zvt.recorders.joinquant.meta.jq_stock_meta_recorder.JqChinaStockRecorder,
 'exchange': zvt.recorders.exchange.exchange_stock_meta_recorder.ExchangeStockMetaRecorder,
 'em': zvt.recorders.em.meta.em_stock_meta_recorder.EMStockRecorder,
 'eastmoney': zvt.recorders.eastmoney.meta.eastmoney_stock_meta_recorder.EastmoneyChinaStockListRecorder}

Можно использовать любого поставщика для получения данных. По умолчанию используется первый.

Пример получения данных по акциям:

>>> Block.provider_map_recorder
{'eastmoney': zvt.recorders.eastmoney.meta.eastmoney_block_meta_recorder.EastmoneyChinaBlockRecorder,
 'sina': zvt.recorders.sina.meta.sina_block_recorder.SinaBlockRecorder}

>>> Block.record_data(provider='sina')
Block registered recorders:{'eastmoney': <class 'zvt.recorders.eastmoney.meta.china_stock_category_recorder.EastmoneyChinaBlockRecorder'>, 'sina': <class 'zvt.recorders.sina.meta.sina_china_stock_category_recorder.SinaChinaBlockRecorder'>}
2020-03-04 23:56:48,931  INFO  MainThread  finish record sina blocks:industry
2020-03-04 23:56:49,450  INFO  MainThread  finish record sina blocks:concept

Дополнительные сведения о методе record_data:

  • Параметр code (один) или codes (несколько) указывает на акции, которые нужно получить.
  • Если не указать код, то будут получены данные по всему рынку.
  • Метод сохраняет данные локально и выполняет только инкрементное обновление.

Для обновления данных можно использовать запланированные задачи. Подробнее об этом можно узнать здесь: запланированное обновление.

Получение данных по всему рынку

После того как данные были сохранены с помощью метода query_data, их можно быстро найти локально.

Например, чтобы найти акции с доходностью собственного капитала (roe) более 8% и ростом выручки более 8%, а также с выручкой за прошлый год, можно выполнить следующий запрос:

>>> df=FinanceFactor.query_data(filters=[FinanceFactor.roe>0.08,FinanceFactor.report_period=='year',FinanceFactor.op_income_growth_yoy>0.08],start_timestamp='2019-01-01',order=FinanceFactor.roe.desc(),limit=20,columns=["code"]+FinanceFactor.important_cols(),index='code')

          code  basic_eps  total_op_income    net_profit  op_income_growth_yoy  net_profit_growth_yoy     roe    rota  gross_profit_margin  net_margin  timestamp
code
000048  000048     2.7350     4.919000e+09  1.101000e+09                0.4311                 1.5168  0.7035  0.1988               0.5243      0.2355 2020-04-30
000912  000912     0.3500     4.405000e+09  3.516000e+08                0.1796                 1.2363  4.7847  0.0539               0.2175      0.0795 2019-03-20
002207  002207     0.2200     3.021000e+08  5.189000e+07                0.1600                 1.1526  1.1175  0.1182               0.1565      0.1718 2020-04-27
002234  002234     5.3300     3.276000e+09  1.610000e+09                0.8023                 3.2295  0.8361  0.5469               0.5968      0.4913 2020-04-21
002458  002458     3.7900     3.584000e+09  2.176000e+09                1.4326                 4.9973  0.8318  0.6754               0.6537      0.6080 2020-02-20
...        ...        ...              ...           ...                   ...                    ...     ...     ...                  ...         ...        ...
600701  600701    -3.6858     7.830000e+08 -3.814000e+09                1.3579                -0.0325  1.9498 -0.7012               0.4173     -4.9293 2020-04-29
600747  600747    -1.5600     3.467000e+08 -2.290000e+09                2.1489                -0.4633  3.1922 -1.5886               0.0378     -6.6093 2020-06-30
600793  600793     1.6568     1.293000e+09  1.745000e+08                0.1164                 0.8868  0.7490  0.0486               0.1622      0.1350 2019-04-30
600870  600870     0.0087 3.096000e+07  4.554000e+06                0.7773                 1.3702  0.7458  0.0724               0.2688      0.1675 2019-03-30
688169  688169    15.6600     4.205000e+09  7.829000e+08                0.3781                 1.5452  0.7172  0.4832               0.3612      0.1862 2020-04-28

[20 строк x 11 столбцов]

**Есть ли какие-то данные?**

В тексте приведены числовые значения, но нет информации о том, что они обозначают.

**Как записывать данные?**

Не удалось определить, как именно записываются данные.

**Как запрашивать данные?**

Также не удалось определить способ запроса данных.

* * *

Далее в тексте идёт описание стратегии, которая основана на использовании торговых моделей. В ней используются данные о сделках и событиях, связанных с этими сделками. Стратегия предполагает выполнение определённых действий при наступлении определённых событий.

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

Для получения дополнительной информации рекомендуется обратиться к документации по системе. **factor_df**

factor_df — это данные, полученные в результате вычислений трансформатором (transformer) над data_df. В примере используется MacdTransformer().

**Пример:**
| level | high | id | entity_id | open | low | timestamp | close | diff | dea | macd |
|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|
| 1d   | 54.91 | stock_sh_601318_2019-01-02 | stock_sh_601318 | 54.78 | 53.70 | 2019-01-02 | 53.94 | NaN | NaN | NaN |
| 1d   | 55.06 | stock_sh_601318_2019-01-03 | stock_sh_601318 | 53.91 | 53.82 | 2019-01-03 | 54.42 | NaN | NaN | NaN |
| 1d   | 55.71 | stock_sh_601318_2019-01-04 | stock_sh_601318 | 54.03 | 53.98 | 2019-01-04 | 55.31 | NaN | NaN | NaN |

И так далее...

**result_df**

result_df — двумерный индекс DataFrame, который можно использовать для выбора акций. Он вычисляется на основе data_df или factor_df.

В этом примере после вычисления macd жёлто-белая линия находится на оси 0, если True, иначе False.

**Пример:**
| score |
|:--:|
| False |
| False |
| False |
| False |
| False |

И так далее…

Формат result_df:

* filter_result принимает значения True или False;
* score_result принимает значение от 0 до 1.

Весь процесс включает в себя выбор акций и тестирование на истории.

**Окружение**

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;
* jq_password — пароль для доступа к данным JQ;
* smtp_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')**

> Универсальный способ настройки: init_config(current_config=zvt_config, **kv).

### Исторические данные

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

#### Источник данных

> Расчёт новых данных в реальном времени для пользовательского интерфейса основан на источнике данных QMT. Если вам необходимо его использовать, свяжитесь с автором.

Проект поддерживает несколько провайдеров данных. На основе согласованности схем данных можно выбирать и расширять их по мере необходимости. В настоящее время поддерживаются бесплатные данные от таких поставщиков, как «Синьхуаньет», «Дунчай», биржи.

#### При проектировании данных предполагается, что провайдеры адаптируют схему, а не наоборот. Таким образом, даже если один из провайдеров станет недоступен, его можно будет заменить без влияния на использование всей системы.

Однако у бесплатных данных есть очевидные недостатки: нестабильность, трудоёмкость очистки и сбора данных, высокие затраты на обслуживание и возможность внезапной недоступности. 

Личное предложение: если вы просто изучаете и исследуете, то можете использовать бесплатные данные; если же вы серьёзно намерены заниматься количественным анализом, лучше выбрать надёжного поставщика данных.

> Большинство бесплатных данных в проекте в настоящее время достаточно стабильны и прошли строгие испытания, особенно данные от «Дунчая», которыми можно пользоваться без опасений.

> Чтобы добавить других поставщиков данных, обратитесь к [руководству по расширению данных](https://zvtvz.github.io/zvt/#/data_extending).

## Разработка

### Клонирование кода

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


Создайте виртуальную среду проекта (Python >= 3.6), установите зависимости.

pip3 install -r requirements.txt pip3 install pytest


### Тестирование
Импортируйте проект в PyCharm (рекомендуется, но вы также можете использовать другие IDE), затем запустите тесты с помощью pytest.

Большинство функций можно найти в разделе tests.

## Вклад
Мы надеемся, что больше разработчиков присоединятся к разработке zvt. Я постараюсь как можно быстрее рассмотреть PR и своевременно ответить. Но перед отправкой PR убедитесь, что:

1. Пройдены все модульные тесты. Для новых функций добавьте модульные тесты.
2. Соблюдены правила разработки.
3. Обновлены соответствующие документы, если это необходимо.

Также приветствуются разработчики, которые могут предоставить больше примеров для zvt и помочь улучшить документацию.

## Пожертвование автору
Если вы считаете, что проект был полезен для вас, вы можете угостить автора кофе.

<img src="https://raw.githubusercontent.com/zvtvz/zvt/master/docs/imgs/alipay-cn.png" width="25%" alt="Alipay">
<img src="https://raw.githubusercontent.com/zvtvz/zvt/master/docs/imgs/wechat-cn.png" width="25%" alt="Wechat">

## Контакты

Присоединяйтесь к группе WeChat: foolcage, добавив пароль: zvt.
<img src="https://raw.githubusercontent.com/zvtvz/zvt/master/docs/imgs/wechat.jpeg" width="25%" alt="Wechat">

Публичный аккаунт WeChat:
<img src="https://raw.githubusercontent.com/zvtvz/zvt/master/docs/imgs/gongzhonghao.jpg" width="25%" alt="Wechat">

Столбец Zhihu: https://zhuanlan.zhihu.com/automoney

## Спасибо
<p><a href=https://www.jetbrains.com/?from=zvt><img src="https://raw.githubusercontent.com/zvtvz/zvt/master/docs/imgs/jetbrains.png" width="25%" alt="jetbrains"></a></p>

Опубликовать ( 0 )

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

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