跳到主要内容

博客

代码人生:编织技术与生活的博客之旅

彻底不用简书了,纪念一下。

始​

一开始我的文章内容是基于简书 (www.jianshu.com),
也是因为简书,才喜欢上 markdown 语法。 简书的编辑器有所见即所得的 markdown 预览,
对于初学者就非常的直观。

简书编辑

简书实时保存很迅速,
在多端需要都有编辑(记录)的情况下,
右上角的按钮会实时显示成保存中,
每次保存都有历史记录,
给人非常安心的感觉。

保存 历史记录

老版本的简书文章界面非常的简洁,
隐隐有点苹果的高级质感,
现存版本的简书文章旁边都是广告,眼花缭乱。

老版本简书


终​

营销文章占领平台,随着简书做大了,
很多机器人从 csdn 搬到了简书上,
但是对我单纯放内容的人而言,问题不大。

一次明星引战引到简书,简书开始了质量审查。
“我们”有种特性,上头传达命令时,说 10 分,下头的人做事,得要求 12 分。
于是乎简书的审查非常非常严,技术文章稍微沾点边就会锁定,哪怕以前的老文章也会被锁定。

锁定

再后面简书搜索功能关闭,至今(2021-05-17)未开。

感觉到简书离凉不久了,于是全部搬运到 github 上,
确实部分还未完成发表的文章放私有仓库编辑,再贴过来不方便,
但是胜过审查不严格,技术讨论自由。

然​

  • 掘金

偶尔试过掘金的编辑。
掘金的文章质量目前来看还是很好,
再一个文章编辑带色彩,目前来看比简书要舒服很多。
但是考虑到万一哪天突然有了敏感词,
所以还是换本地 github 来的舒服。

掘金编辑

  • OneNote

已经用了 outlook + Microsoft todo。
也想着用 OneNote 去做笔记及文章发表,
但是最新版的对 markdown 并不友好,且国内同步是个很大的问题。
所以还是选择了当前的方案。

已​

最终还是 vs code 的方案去写,也开始尝试接触 Vue 的框架去弄 blog。 未完成的写在 github 私有项目里,写完了的文章复制过来。 用了几个插件,保证舒适度,感谢插件开发者的贡献。

  • Markdown All in One # markdown 基本需要都在里面了
  • Note Sync # 实时同步到 github 上,建议配置 dev 分支,写好了 merge 一下。
  • Mermaid Markdown Syntax Highlighting # 画图专用
  • Marp for VS Code # markdown to PPT

目前用于写博客还挺舒服的。


今天把简书的内容全部搬过来,简书彻底废弃,特此纪念一下。

_

随笔阅读需 3 分钟

记录一下一些 Pycharm 的不爽点。 多了的话就换 vscode 为主力了。

coverage​

  • 在多项目下,report 是显示第一个项目的 report 导致覆盖率为 0。
  • .coveragerc 能识别不跑的代码,但是不能识别不现实,不跑会导致覆盖率下降。 目前用注释干掉了 (# pragma: no cover)。

pycharm 打不开问题​

问题连接

首先确定 wsl 是否能打开

然后 WORKAROUND: run the following commands in the Administrator console (cmd.exe):

netsh int ipv4 set dynamicport tcp start=49152 num=16383 netsh int ipv4 set dynamicport udp start=49152 num=16383 If the above doesn't help, please try these commands instead:

net stop winnat net start winnat

提示 Package requirements 'traceback_with_variables’, 'sentry_sdk' are not satisfied​

  • 改包名到正确包名
    • traceback-with-variables
    • sentry-sdk
  • 右下角编辑器 - manage packages - python package - 设置(小齿轮)- 增加 Package Repository

doctest 不支持​

随笔阅读需 1 分钟

  • 下载 cygwin

  • 安装时选择包 make

  • 将C:\cygwin64\bin添加到系统环境变量第一条 ,放后面会有 bug.

  • 然后就可以用了

  • 有挺多 Linux 命令的,在没有将 wsl2 作为主力平台的时候,cygwin 的挺多命令能弥补 windows 的部分不足。

编程阅读需 1 分钟

下载官方的部署项目

git clone https://github.com/getsentry/onpremise.git
cd onpremise
git chechout 9.1.2

docker 换源

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hkoa9dfz.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

安装

export SENTRY_IMAGE='sentry:9.1.2'
./install.sh

运行 Sentry docker-compose up -d

Bug​

解决 sentry 安装时的 could not translate host name “postgres” to address: Name or service not known

docker rmi postgres
docker pull postgres:9.6

更新后发现表不兼容
偷懒直接删掉了

编程阅读需 1 分钟

推荐一下 vim 的视屏学习
玩转 Vim 从放弃到爱不释手 - PegasusWang

这是个人对 PegasusWang 视屏学习笔记

img


图片来自 RUNOOB

img


a append
i insert
o open a line below

A append after line
I insert before line
O append a line above

vs vertical split 
sp split

普通选择 v
选择行 V
ctrl + v 方块选择

y 复制

ctrl + h 删除上一个字符
ctrl + w 删除上一个单词
ctrl + u 删除当前行
ctrl + a 跳到开头
ctrl + e 跳到结尾

快速回到最后编辑 gi

w/W 移到下一个 word/WORD 开头
e/E 下一个 word/WORD 结尾
b/B 回到上一个 word/WORD 开头 backword

f{char} 移动到 char 字符上 F{char} 向前搜索
t{char} 移动到 char 的前面字符上
;, 选择上一个下一个

0 移动到行头 ^移动到行头非空白
$ 移动到行尾 g_移动到行尾非空白

() 在句子间移动
{} 在段落间移动

:help 查看帮助

gg/G 移动到文件开头和结尾
ctrl+o 快速返回
H/M/L 跳到屏幕的 Head / Middle / Lower
Ctrl +u / Ctrl +f 上下翻页 upword / forward
zz 把当前行设置为屏幕中间

d 配合使用删除一个单词
x 删除一个字符

dw 删除单词光标及之后的
daw 删除单词包括之后的空格
diw 删除单词

r replace 替换一个字符 R 不断替换
s substitute 插入模式 S 整行删除进入插入模式
c change
c t {char} 删除 到 char 并进入插入模式

/ or ? 向前向后搜索
n/N 上一个 下一个匹配
\* \# 向前向后匹配 直接搜索当前光标的单词

vim 替换命令
:[range] s[ubstitute]/{pattern}/{string}/[flags]
range 表示范围 比如 :10, 20 表示 10-20 行,%表示全部
pattern 是要替换的模式,string 是替换后文本
Flags 有几个常用的标志
g(global) 表示全局范围内执行
c(confirm) 表示每次确认
n 报告匹配的到的次数而不替换 可以用来查询匹配次数

vim 复制粘贴与寄存器

normal 模式下复制粘贴:
y(yank) 复制
p(paste) 粘贴
d 删除
使用 d 和 p 组合可以达到剪切的效果

visual 模式下选择,normal 模式下再使用 p 粘贴

yiw 复制一个单词 p 粘贴
yy 复制一行 p 粘贴
dd 删除一行 p 粘贴

insert 模式下的粘贴
Ctrl+v(Windows)
Cmd+v(MacOs)
鼠标右键-粘贴

Ctrl + n / ctrl + p 补全单词
ctrl+x ctrl+f 补全文件名
ctrl +x ctrl +o 补全代码

Vim-plug
https://github.com/junegunn/vim-plug
插件搜索:
https://vimawesome.com/

启动界面
https://github.com/mhinz/vim-startify

修改启动界面:https://github.com/mhinz/vim-startify
状态栏美化:https://github.com/vim-airline/vim-airline
增加代码缩进线条:https://github.com/yggdroot/indentline

call plug#begin('~/.vim/plugged')
Plug 'mhinz/vim-startify' " 修改启动界面
Plug 'vim-airline/vim-airline' " vim 状态栏美化
Plug 'vim-airline/vim-airline-themes' " vim 状态栏美化
Plug 'yggdroot/indentline' " 增加代码缩进线条
Plug 'w0ng/vim-hybrid' " 主题 :colorscheme hybrid

Plug 'scrooloose/nerdtree' " 文件目录
Plug 'ctrlpvim/ctrlp.vim' “ 模糊查找
Plug 'easymotion/vim-easymotion' " 文内映射
Plug 'tpope/vim-surround' " 单双引号 修改 ds cs ys
Plug '/usr/local/opt/fzf' " 模糊搜索
Plug 'junegunn/fzf.vim' " 模糊搜索 Ag 模糊搜索字符串 Files 模糊搜索目录
Plug 'brooth/far.vim' " 批量替换
Plug 'majutsushi/tagbar' " 浏览代码用

" Initialize plugin system"
call plug#end()

vim-go go ide
python-mode python 综合 mode
jedi-vim 代码补全
vim-interestingwords 高亮感兴趣的单词
neovim/vim8 异步补全插件
tpope/vim-commentary 代码注释

git 相关
vim-fugitive vim 里用 git
vim-gitgutter vim 里显示文件变动
gv.vim 查看代码提交记录

Tmux 强大的终端管理器

neovim 替代 vim

https://github.com/PegasusWang/vim-config


《Practical vim》
《笨方法学 vimscript》

编程阅读需 3 分钟

每次 Jenkins 走 pipeline 自动构建时,我需要等待构建完成,上到测试环境后再通知测试或者项目去跟近, 最开始想用机器人,后面发现发邮件很简单,我也有邮件弹窗提示,所以让 jenkins 做完后发个做完的邮件给我。

Jenkinsfile 中增加两段代码:

1. 在 stage 该在的地方添加下列代码​

        stage("get GIT_COMMIT_NAME/GIT_COMMIT_EMAIL") {    
agent any
steps {
checkout scm
script {
// Git committer name
env.git_commit_name = sh (script: "git --no-pager show -s --format='%an' $GIT_COMMIT",returnStdout: true).trim()
echo "Git committer name: ${GIT_COMMIT_NAME}"
// Git committer email
env.git_commit_email = sh (script: "git --no-pager show -s --format='%ae' $GIT_COMMIT",returnStdout: true).trim()
echo "Git committer email: ${GIT_COMMIT_EMAIL}"
}
}

2. 在文件最后一个花括号前面增加下列代码​

    post {    
success {
script {
mail to: "${env.git_commit_email}",
subject: "[Jenkins] SUCCESSFUL: ${env.appName} [${env.BUILD_NUMBER}]",
body: """SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'
分支:${env.BRANCH_NAME}
JOB_NAME: ${env.JOB_NAME}
提交人:${env.git_commit_name}
构建次数:${env.BUILD_NUMBER}
console output:${env.BUILD_URL}
"""
}
}
failure {
script {
mail to: "${env.git_commit_email}",
subject: "[Jenkins] FAILURE: ${env.appName} [${env.BUILD_NUMBER}]",
body: """<p>SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'
分支:${env.BRANCH_NAME}
JOB_NAME: ${env.JOB_NAME}
提交人:${env.git_commit_name}
构建次数:${env.BUILD_NUMBER}
console output:${env.BUILD_URL}
"""
}
}
}

从此自动构建 再也不用盯着构建任务是否结束再通知下游工作人员啦​


编程阅读需 1 分钟

参考 LINK : fatal error LNK1158: cannot run 'rc.exe'

python 编译 cython 文件的时候

报错如下​

    ERROR: Command errored out with exit status 1:    
command: 'd:\programdata\miniconda3\envs\py35\python.exe' -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'D:\\PycharmProjects\\rqalpha-mod-optimizer2\\setup.py'"'"'; __file__='"'"'D:\\PycharmProjects\\rqalpha-mo
d-optimizer2\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' develop --no-deps
cwd: D:\PycharmProjects\rqalpha-mod-optimizer2\
Complete output (38 lines):
running develop
running egg_info
writing requirements to rqalpha_mod_optimizer2.egg-info\requires.txt
writing dependency_links to rqalpha_mod_optimizer2.egg-info\dependency_links.txt
writing rqalpha_mod_optimizer2.egg-info\PKG-INFO
writing top-level names to rqalpha_mod_optimizer2.egg-info\top_level.txt
reading manifest file 'rqalpha_mod_optimizer2.egg-info\SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no previously-included files matching '*' found under directory 'tests'
warning: no previously-included files matching '__pycache__' found under directory '*'
warning: no previously-included files matching '*.py[co]' found under directory '*'
writing manifest file 'rqalpha_mod_optimizer2.egg-info\SOURCES.txt'
running build_ext
cythoning rqalpha_mod_optimizer2\api.py to rqalpha_mod_optimizer2\api.c
cythoning rqalpha_mod_optimizer2\mod.py to rqalpha_mod_optimizer2\mod.c
cythoning rqalpha_mod_optimizer2\_version.py to rqalpha_mod_optimizer2\_version.c
building 'rqalpha_mod_optimizer2.api' extension
creating build
creating build\temp.win-amd64-3.5
creating build\temp.win-amd64-3.5\Release
creating build\temp.win-amd64-3.5\Release\rqalpha_mod_optimizer2
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -Id:\programdata\miniconda3\envs\py35\include -Id:\programdata\miniconda3\envs\py35\include "-IC:\Program Fil
es (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared" "-IC:\Program Files (x86)\Windows K
its\10\include\10.0.17763.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\winrt" /Tcrqalpha_mod_optimizer2\api.c /Fobuild\temp.win-amd64-3.5\Release\rqalpha_mod_optimizer2\api.obj
api.c
creating D:\PycharmProjects\rqalpha-mod-optimizer2\build\lib.win-amd64-3.5
creating D:\PycharmProjects\rqalpha-mod-optimizer2\build\lib.win-amd64-3.5\rqalpha_mod_optimizer2
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\link.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:d:\programdata\miniconda3\envs\py35\libs /LIBPATH:d:\programda
ta\miniconda3\envs\py35\PCbuild\amd64 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Wi
ndows Kits\10\lib\10.0.17763.0\um\x64" /EXPORT:PyInit_api build\temp.win-amd64-3.5\Release\rqalpha_mod_optimizer2\api.obj /OUT:build\lib.win-amd64-3.5\rqalpha_mod_optimizer2\api.cp35-win_amd64.pyd /IMPLIB:build\temp.win-amd64
-3.5\Release\rqalpha_mod_optimizer2\api.cp35-win_amd64.lib
api.obj : warning LNK4197: export 'PyInit_api' specified multiple times; using first specification
Creating library build\temp.win-amd64-3.5\Release\rqalpha_mod_optimizer2\api.cp35-win_amd64.lib and object build\temp.win-amd64-3.5\Release\rqalpha_mod_optimizer2\api.cp35-win_amd64.exp
Generating code
Finished generating code
LINK : fatal error LNK1158: cannot run 'rc.exe'
d:\programdata\miniconda3\envs\py35\lib\site-packages\Cython\Compiler\Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: D:\PycharmProj
ects\rqalpha-mod-optimizer2\rqalpha_mod_optimizer2\api.py
tree = Parsing.p_module(s, pxd, full_module_name)
d:\programdata\miniconda3\envs\py35\lib\site-packages\Cython\Compiler\Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: D:\PycharmProj
ects\rqalpha-mod-optimizer2\rqalpha_mod_optimizer2\mod.py
tree = Parsing.p_module(s, pxd, full_module_name)
d:\programdata\miniconda3\envs\py35\lib\site-packages\Cython\Compiler\Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: D:\PycharmProj
ects\rqalpha-mod-optimizer2\rqalpha_mod_optimizer2\_version.py
tree = Parsing.p_module(s, pxd, full_module_name)
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\link.exe' failed with exit status 1158
----------------------------------------
Rolling back uninstall of rqalpha-mod-optimizer2
Moving to d:\programdata\miniconda3\envs\py35\lib\site-packages\rqalpha_mod_optimizer2-0.2.5.dist-info\
from d:\programdata\miniconda3\envs\py35\lib\site-packages\~qalpha_mod_optimizer2-0.2.5.dist-info
Moving to d:\programdata\miniconda3\envs\py35\lib\site-packages\rqalpha_mod_optimizer2\
from d:\programdata\miniconda3\envs\py35\lib\site-packages\~qalpha_mod_optimizer2
ERROR: Command errored out with exit status 1: 'd:\programdata\miniconda3\envs\py35\python.exe' -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'D:\\PycharmProjects\\rqalpha-mod-optimizer2\\setup.py'"'"'; __file__='"'
"'D:\\PycharmProjects\\rqalpha-mod-optimizer2\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' dev
elop --no-deps Check the logs for full command output.

解决

C:\Program Files (x86)\Windows Kits\8.1\bin\x86

这个目录下的 rc.exe 和 rcdll.dll 拷贝到我的 Visual C++ 的 VC/Bin 目录下:

D:\Apps\x86\Microsoft\Visual_Studio\v14.0\VC\bin

通过错误信息,我电脑的文件位置是 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\

注意我的 Visual C++ 的安装目录可能和你的不同,你需要用你自己的的 VC/Bin 目录。

哑巴日记

随笔阅读需 2 分钟

PyCharm及 VS Code 快速配置RQSDK上手​

PyCharm​

为什么要用PyCharm?​

  • PyCharm 作为 IDE(集成开发环境),再带 python 解释器和虚拟环境管理功能,开箱即用
  • PyCharm 默认的内置功能极为丰富(Git、数据库支持、框架支持等),无需手动配置插件便可直接使用
  • PyCharm 内置了在业界无出其右的静态代码审查(code inspect)功能

PyCharm 下载​

官网提供了专业版和社区版下载。

  • 专业版用于科学计算和 Web 开发。同时具有 HTML、JS 和 SQL 等支持。专业版 PyCharm 支持试用30天。

  • 社区版用于通常的 Python 开发。免费且开源。

创建 PyCharm 工程(Project)​

下载且安装完成 PyCharm 后,便可打开 Pycharm 后建立一个工程。该阶段可以设置项目使用的 Python 解释器/虚拟环境,后续开发中的代码提示、调试等功能都依赖为工程配置的虚拟环境:

  1. 点击 Create New Project 按钮
  2. 展开 Project interpreter
  3. 选择虚拟环境(若没有已存在环境,则 PyCharm 会自动创建)
  4. 点击 Create 按钮

建立一个项目

如果没有python环境 ,编辑器右下角会有进度条提示python的安装进度。

工程创建完成后,亦可在设置中修改当前工程使用的虚拟环境:

  1. 点击左上角菜单栏FIle -> Settings(macOS 中为 PyCharm -> Preference)
  2. 点击 Project: **** -> Project Interpreter
  3. 点击右边小齿轮 -> Show All
  4. 点击加号(+) -> 选择虚拟环境(Virtualenv Environment) 或者 Conda 环境(Conda Environment) `

配置python环境

在 PyCharm 中安装 RQSDK​

若当前工程配置的虚拟环境中还未安装 RQSDK,可以直接在 PyCharm 中调用终端(terminal)安装,PyCharm 会自动在改终端激活先前配置好的虚拟环境。 若点击左下角 Terminal 以激活终端,输入以下代码以安装 RQSDK

pip install -i https://pypi.douban.com/simple rqsdk     

使用 PyCharm 编写代码​

  • 创建 Python 模块(module)鼠标右键项目文件夹 -> New -> Python File -> 输入文件名

  • 若当前工程正确配置了虚拟环境,且虚拟环境中安装了 RQSDK,在 py 文件中输入“rq”时便可以看到 PyCharm 给出的代码提示 image.png

  • 在 py 文件中输入代码,如使用 RQDatac 调取日线数据:

import rqdatac    

rqdatac.init()
print(rqdatac.get_price("000001.XSHE"))
  • 在编辑区域点击右键执行 Run... 便可以运行当前模块,注意,上述代码的运行要求事先使用 rqsdk license 命令配置好 license。

  • 当用了 rqsdk install rqalpha_plus 后,当前python环境也会有 rqoptimizer 和 rqfactor

使用 PyCharm 运行回测​

回测在终端中需要通过 rqalpha-plus 命令而非 python 命令运行,故在 PyCharm 中运行回测需要进行一些额外的配置,以简单的 buy-and-hold 回测策略为例。

1 创建名为 buy_and_hold 的 python 模块并键入以下代码:

# buy_and_hold.py    

def init(context):
context.s = "000001.XSHE"
context.fired = False

def handle_bar(context, bar_dict):
if not context.fired:
order_shares(context.s, 1000)
context.fired = True

2 点击右上角的 Add Configuration

打开配置启动参数窗口

3 在打开的窗口中将第一项左侧默认的运行方式由 Script path 修改为 Module name 4 设置 Module name 为 rqalpha_plus,设置 Parameters 为回测运行的子命令 run 及其参数,如:

run -f buy_and_hold.py -s 20190101 -e 20191231 -a stock 20000 --plot    

配置启动命令

5 点击 OK 按钮以完成配置 6 点击右上角的三角形按钮以运行回测,或点击虫子按钮以调试(debug)代码

运行策略


Visual Studio Code (VS Code)​

为什么要用 VS Code?​

  1. 轻量化,下载安装更快;资源占用低,对配置相对不足的计算机更友好
  2. 启动快速,首次创建工程时没有漫长等待创建索引的过程
  3. 生态健全,有着丰富的第三方主题和插件

在Visual Studio Code官网可以下载标准版。

安装 Python 插件(Extensions)​

VScode 不是 python 专用的编辑器,故使用其开发 python 需要安装专门的插件支持才能获得代码提示、审查、调试等功能:

  • 在左侧栏点击 Extensions 后,搜索 python,选择搜索到的第一项并点击 install 按钮安装。

image.png

设置虚拟环境/Python 解释器​

  • 使用 Ctrl+Shift+P 快捷键(macOS 为 Command+Shift+P)打开 command palette 窗口
  • 输入关键字 python select 并找到 Python: Select Interpreter 一项, 点击该项并在随后弹出的 Python 解释器列表中选择目标虚拟环境中的解释器(若目标虚拟环境未列出,则需要手工输入解释器的路径)

使用 VS Code 编写代码​

  • 新建一个文件夹
  • 将文件夹拖入到VS code 窗口
  • 创建py文件 open folder -> new file 文件名:demo_rqdatac.py

创建py文件

VS code 代码补全功能

  • 使用rqdatac 查看平安银行日线数据

文件中输入以下代码:

import rqdatac    

rqdatac.init()
print(rqdatac.get_price("000001.XSHE"))

vs code demo

  • 运行rqalpha-plus 生成样例策略并运行

image.png

运行样例策略需要的命令如下 (假设conda环境名为py35)

conda activate py35    
pip install rqsdk -i https://pypi.douban.com/simple/
rqsdk install rqalpha-plus
rqsdk download-data
rqalpha-plus examples
rqalpha-plus run -f examples/buy_and_hold.py -s 2018-01-01 -e 2018-05-31 -fq 1m --plot --account stock 1000000

命令对应作用如下:

  • 激活名为 py35 的 conda环境,如果没有则输入conda create -n py35
  • 安装 rqsdk和rqalpha-plus
  • 生成样例策略文件夹
  • 使用 examples 的 buy_and_hold.py 策略启动回测

用debug方式运行回测​

选择python解释器 1

选择python解释器 2

launch.json配置如下

{    
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: 模块",
"type": "python",
"request": "launch",
"module": "rqalpha-plus",
"args": ["run", "-f", "examples\\buy_and_hold.py", "-s", "2018-01-01", "-e", "2018-05-31", "-fq", "1m", "--plot", "--account", "stock", "1000000"]
}
]
}

debug 运行buy_and_hold.py 1

debug 运行buy_and_hold.py 2

随笔阅读需 6 分钟

转载自《PyPI 打包上传实践》

1. 代码打包​

要打包代码,首先需要编写自己的代码包。比如你写了一个。py 文件,里面有一些函数啥的,为了方便调用,你需要将代码打包,下次使用时直接调用就好,因此,第一步,将你写的代码打包。 创建一个文件夹,并在该文件夹下创建 __init__.py 文件,然后将你写的。py 文件放到这个文件夹下面就行。

packagename/    
|
+-- __init__.py
|
+-- myfunction.py
|
+-- mymorefunction.py
|
+-- ...
|

packagename为你创建的包名称,myxxx.py是你写的 python 代码,还有添加个__init__.py文件(文件内容可以为空). 现在你可以调用这个包了(引入包的路径)

import packagename    

2. 符合 pypi 的格式​

将上面的文件的目录结构改成如下格式

packagename    
|
+-- COPYING.txt
|
+-- README.rst
|
+-- setup.py
|
+-- packagename
. |
. +-- __init__.py
. |
. +-- myscripts1.py
. |
. +-- mysscripts2.py
. |
. +-- mymorescripts.py
. |
.
|
+-- docs/
|

就是将原来的目录深移一层,文件夹的名称一样即可。在第一层目录下创建些特殊文件。 Tips

  • COPYING.txt : 可以不要(节约时间,重要的事情先说、简单说)。 就是授权文件,里面是你关于这个包的授权,比如:MIT license,那么你里面放入 MIT License 全文即可,当然,如果你不清楚这个,你完全可以不要这个文件。
  • README.rst:就是介绍,可以不要吧(不推荐,要是想让大家用的话还是好好写一写) 这个文件想必研发都应该清楚。如果有,尽量放些东西在这里了,后面如果可能我们会用到它的。
  • setup.py:核心文件 这里面的内容后面讲
  • docs/(这是个文件夹,存放一些文档的) 这个文件夹你放你的 documents 吧,不过要用心写文档真是个难事,所以这个文件夹基本是不存在的——为自己的懒惰可耻一把。

**setup.py **的样例

# coding: utf-8    
import codecs
import os
import sys

try:
from setuptools import setup
except:
from distutils.core import setup

"""
打包的用的 setup 必须引入,
"""

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
if sys.version_info < (2, 5):
sys.exit('Python 2.5 or greater is required.')

try:
from setuptools import setup
except ImportError:
from distutils.core import setup

import SendMoney

with open('README.rst', 'rb') as fp:
readme = fp.read()

# 版本号,自己随便写
VERSION = "1.0.7"

LICENSE = "MIT"

setup(
name='<项目的名称>',
version=VERSION,
description=(
'<项目的简单描述>'
),
long_description=readme,
author='<你的名字>',
author_email='<你的邮件地址>',
maintainer='<维护人员的名字>',
maintainer_email='<维护人员的邮件地址',
license=LICENSE,
packages=find_packages(),
platforms=["all"],
url='<项目的网址,我一般都是 github 的 url>',
install_requires=[
"beautifulsoup4",
lxml_requirement
],
classifiers=[
'Development Status :: 4 - Beta',
'Operating System :: OS Independent',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Programming Language :: Python',
'Programming Language :: Python :: Implementation',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Topic :: Software Development :: Libraries'
],
)

# URL 你这个包的项目地址,如果有,给一个吧,没有你直接填写在 PyPI 你这个包的地址也是可以的
# INSTALL_REQUIRES 模块所依赖的 python 模块
# 以上字段不需要都包含

文中的 classifiers 的内容并不是随便填写的,你需要参照本文参考文档中的 PyPI Classifiers 来写

3、开始使用 Distutils 进行打包​

为了保证效果,在打包之前我们可以验证 setup.py 的正确性,执行下面的代码

python setup.py check

输出一般是 running check 如果有错误或者警告,就会在此之后显示 没有任何显示表示 Distutils 认可你这个 setup.py 文件。

如果没有问题,那么就可以正式打包,执行下面的代码:

python setup.py sdist

执行完成后,会在顶层目录下生成 dist 目录和 egg 目录

打包完成后就可以准备将打包好的模块上传到 pypi 了,首先你需要在 pypi 上进行注册 注册完成后,你需要在本地创建好 pypi 的配置文件,不然有可能会出现使用 http 无法上传到 pypi 的问题 在用户目录下创建。pypirc 文件,文件的内容如下 window 用户创建.pypirc可以命名为.pypirc. 位置示例:C:\Users\admin\.pypirc.

[distutils]    
index-servers=pypi

[pypi]
repository = https://upload.pypi.org/legacy/
username = <username>
password = <password>

完成后运行:

python setup.py register sdist upload

最后出现Server response (200): OK就是成功了,可以去 pypi 上查看自己发布的包

包到这里,就完成了上传 PyPI 的工作了。你如果要用,安装下就好:

pip install packagename

这个过程还是很顺利的,以后多尝试,出现问题再补充!

作者:snowy_sunny 链接:https://www.jianshu.com/p/be91c70adb27

Python阅读需 5 分钟