0%

这篇文章描述如何在macOS上面装Veighna 3.2.0。

在mac机器上没法使用CTP,而tts提供了CTP的所有接口,所以这里记录一下如何在mac上安装veighna 3.2.0。

首先要装ta-lib

1
pip install ta-lib

然后

1
pip install -r requirements.txt

最后,进入vnpy源码目录,安装

1
pip install . $@

如果是Linux版本,只需

1
pip install .

CTP没法安装,TTS模拟环境也没有办法安装,等后面发布mac版本。

1
pip install vnpy_tts

下面文章讲的是veighna 3.0.0的安装流程,目前来看有点老了。

macOS

在mac OS下面安装veighna 3.0.0,Linux类似。我使用的是anaconda下面的python。

创建python 3.10的环境

1
$ conda create -n py310 python=3.10

激活py310环境。

1
$ conda activate py310

安装vnpy

1
$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple vnpy

不出意外,在安装ta-lib的时候会出错。

1
2
3
4
5
6
7
8
9
10
11
12
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
error: command '/usr/bin/clang' failed with exit code 1
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for ta-lib
Running setup.py clean for ta-lib
Successfully built deap
Failed to build ta-lib
Installing collected packages: ta-lib, pyzmq, PySide6, pyqtgraph, plotly, install, deap, seaborn, qdarkstyle, vnpy
Running setup.py install for ta-lib ... error
error: subprocess-exited-with-error
解决mac OS xcrun error, missing xcrun

然后重新安装vnpy,即可以成功安装。

进入vnpy/example/veighna_trader/,执行run.py

1
$ python run.py

遇到如下问题:

ModuleNotFoundError: No module named 'importlib_metadata'

安装模块。

1
$ pip install importlib_metadata

最后可以成功启动veighna trader界面。不过mac OS无法加载CTP模块。

国内市场用到的绝大部分量化交易接口(如CTP、飞马、飞创、恒生等),其开发商只提供了Windows和Linux的API开发包。
没有Mac版本(无法直接使用)的同时,也没有提供API源代码(无法自行编译),因此这类接口在Mac系统上无法使用(强行加载会报错找不到C++的DLL文件)。
但纯Python接口和REST/WebSocket接口,由于不存在对于C++链接库的依赖,所以在Mac上均可以直接运行。

Windows 10

创建python3.10环境和上面相同。

1
$ pip install -i https://mirrors.aliyun.com/pypi/simple vnpy

安装ta-lib失败。

按官网提供的安装方法安装。

1
2
pip install --extra-index-url http://139.196.190.180 --trusted-host 139.196.190.180 TA_Lib
Successfully installed TA-Lib-0.4.24

重新执行上面的安装语句,可能会遇到一个错误,这个错误不会中断安装程序,很容易被忽略,而且最后还能显示安装成功。

这个错误跟deap相关。

1
2
3
4
5
6
7
WARNING: Discarding https://pypi.tuna.tsinghua.edu.cn/packages/af/29/e7f2ecbe02997b16a768baed076f5fc4781d7057cd5d9adf7c94027845ba/deap-1.2.2.tar.gz#sha256=95c63e66d755ec206c80fdb2908851c0bef420ee8651ad7be4f0578e9e909bcf (from https://pypi.tuna.tsinghua.edu.cn/simple/deap/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
Using cached https://pypi.tuna.tsinghua.edu.cn/packages/b0/9c/a7404777a4cdf5857224051f2ae363d76c3d3b17d27b2caf12ed9bbe6d94/deap-1.2.1.tar.gz (936 kB)
ERROR: Command errored out with exit status 1:
command: 'C:\ProgramData\Miniconda3\envs\py310\python.exe' -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Simon\\AppData\\Local\\Temp\\pip-install-w5an0dek\\deap_f8336f0a0f4e439d85daec3d2c91d4cb\\setup.py'"'"'; __file__='"'"'C:\\Users\\Simon\\AppData\\Local\\Temp\\pip-install-w5an0dek\\deap_f8336f0a0f4e439d85daec3d2c91d4cb\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base 'C:\Users\Simon\AppData\Local\Temp\pip-pip-egg-info-jymbv_bj'
cwd: C:\Users\Simon\AppData\Local\Temp\pip-install-w5an0dek\deap_f8336f0a0f4e439d85daec3d2c91d4cb\
Complete output (1 lines):
error in deap setup command: use_2to3 is invalid.

官方也提供了解决方案。

查看setuptools版本。

1
2
pip list | findstr setuptools
setuptools 58.0.4

需要把setuptools降低到57版本。

1
2
3
4
5
6
7
8
9
10
11
12
pip install setuptools==57.0.0


Collecting setuptools==57.0.0
Downloading setuptools-57.0.0-py3-none-any.whl (821 kB)
|████████████████████████████████| 821 kB 63 kB/s
Installing collected packages: setuptools
Attempting uninstall: setuptools
Found existing installation: setuptools 58.0.4
Uninstalling setuptools-58.0.4:
Successfully uninstalled setuptools-58.0.4
Successfully installed setuptools-57.0.0

最近再安装vnpy,就可以安装成功了,如果运行时需要什么模块,再安装就可以了。

需要注意的是,如果使用VSCode来编辑python文件,在使用终端命令中,类型一定要选择

关于证券融资融券里面的几个概念,很容易混淆。这里把它们都清楚的讲一下。

融资

融资主要在于资,即金额。

融资买入额

当日融资买入的金额

融资偿还额

当日融资偿还金额

当日净买入额

上面两个参数之差

融资余额

当日融资余额 = 前日融资余额 + 当日融资买入额 - 当日融资偿还额

(融资余额是指每天收盘后累计发生的向券商借钱买股票尚未偿还的资金)

融券

融券在于券,即股数。

主要看借了多少券,跟数量有关。

融券卖出量

融券偿还量

当日净卖出量

净卖出量 = 融券卖出量 - 融券偿还量

融券余额

本日融券余量余额 = (前日融券余量 + 当日融券卖出数量 - 当日融券偿还量) * 最新收盘价

融资融券余额

融资融券余额 = 融资余额 + 融券余额

如果融资融券余额增加,预示着股价的波动会加大。

我们从外部获取到的时间数据,是str类型的。如果时间的时区为UTC+0时区,要转成东八区来显示,可以按如下方法来操作。

1
2
3
4
5
6
7
from datetime import datetime
import pytz

format = "%Y-%m-%d %H:%M:%S"
date = datetime.strptime("2022-04-01 12:00:00", format)
converted_date = date.replace(tzinfo=pytz.utc).astimezone(pytz.timezone("Asia/Shanghai"))
print(datetime.strftime(converted_date, format))

如果是在DataFrame里,比如从Excel里面读出来的数据。可用下面方法。

1
2
3
4
5
6
7
import pandas as pd

df = pd.DataFrame(["2022-03-22 12:00:05", "2022-03-22 13:10:05"], columns=['date'])

df['date2'] = pd.to_datetime(df['date'], format="%Y-%m-%d %H:%M:%S")
df['date3'] = df['date2'].dt.tz_localize(pytz.utc).dt.tz_convert("Asia/Shanghai").dt.strftime("%Y-%m-%d %H:%M:%S")
df

这个dt不能缺少,用于Datetime上面的。

1
2
3
df['date2'].dt

<pandas.core.indexes.accessors.DatetimeProperties object at 0x7fbe14fd2f10>