Python & tmux & vim & git

on the way to geek, this is a guideline.

Python

use tinghua mirrors:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

tmux

tmux & vim are fantastic pairs of tools.

.tmux.conf

# remap prefix from 'C-b' to 'C-a'
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix

# split panes using | and -
bind | split-window -h
bind - split-window -v
unbind '"'
unbind %

bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# enable mouse support for switching panes/windows
set -g mouse off


#### copy mode : vim ####

# set vi mode for copy mode
setw -g mode-keys vi

# copy mode using 'Esc'
unbind [
bind Escape copy-mode

# paste using 'p'
unbind p
bind p paste-buffer

# Enable mouse mode (tmux 2.1 and above)
bind M set -g mouse on
bind m set -g mouse off

  • tmux new -s asession
  • Ctrl-b d
  • tmux attach -t asession

vim

vim

vim-tiny

neovim

vim-nox

apt install vim-autopep8
apt install vim-ctrlp
apt install vim-youcompleteme
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

.vimrc:

set nocompatible              " required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'

" add all your plugins here (note older versions of Vundle
" used Bundle instead of Plugin)

" ...
Plugin 'tmhedberg/SimpylFold'
Plugin 'vim-scripts/indentpython.vim'
Plugin 'Valloric/YouCompleteMe'
Plugin 'vim-syntastic/syntastic'
Plugin 'nvie/vim-flake8'
Plugin 'jnurmine/Zenburn'
Plugin 'altercation/vim-colors-solarized'
Plugin 'scrooloose/nerdtree'
Plugin 'kien/ctrlp.vim'
Plugin 'Lokaltog/powerline', {'rtp': 'powerline/bindings/vim/'}

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required

"split navigations
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>

" Enable folding
set foldmethod=indent
set foldlevel=99

" Enable folding with the spacebar
nnoremap <space> za

let g:SimpylFold_docstring_preview=1

au BufNewFile,BufRead *.py
    \ set tabstop=4 |
    \ set softtabstop=4 |
    \ set shiftwidth=4 |
    \ set textwidth=79 |
    \ set expandtab |
    \ set autoindent |
    \ set fileformat=unix

au BufNewFile,BufRead *.js, *.html, *.css
    \ set tabstop=2 |
    \ set softtabstop=2 |
    \ set shiftwidth=2

set shiftwidth=4

highlight BadWhitespace ctermbg=red guibg=darkred
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h match BadWhitespace /\s\+$/

set encoding=utf-8

let g:ycm_autoclose_preview_window_after_completion=1
map <leader>g  :YcmCompleter GoToDefinitionElseDeclaration<CR>

let python_highlight_all=1
syntax on

if has('gui_running')
  set background=dark
  colorscheme solarized
else
  colorscheme zenburn
endif

call togglebg#map("<F5>")

let NERDTreeIgnore=['\.pyc$', '\~$'] "ignore files in NERDTree

set nu

Tips:

以16进制打开文件

  • vim -b file-to-open.dat — 以2进制的形式打开文件
  • :%!xxd — 给当前文章执行xxd命令
  • :%!xxd -r
  • od
  • hexdump:以16进制输出文件
  • xxd:
  • % : 当前文章所有行
  • ! : 执行外部命令

查找替换命令:

%s/a_string/b_string/g

%s#a_string#b_string/g — 查找替换含有/的字符串

%s/\n/ /g — 把回车换行替换成空格

# * — 向上向下 查找当前单词

移动命令:

Ctrl+i Ctrl+o — 光标所在的上一个位置,下一个位置

排版:

:10, 100< — 向前缩进排版10到100行

块选中,I,#,Esc ×2

:10,100s/^/#/g — 为10到100行添加#注释

:10,100s/^#//g — 为10到100行去掉#注释

issues:

  • The ycmd server SHUT DOWN (restart wit…the instructions in the documentation.
cd ~.vim/bundle/YouCompleteMe 
python install.py

git

添加远程仓库:

初始化:

  • git init
  • git status
  • git add .
  • git checkout afilename.txt

特殊处理:

  • git fetch –all
  • git reset –hard origin/master
  • git commit b -m “new feature, in b”
  • git rm a.file
  • git rm a.file –cache
  • git amend
  • git log

对比:

  • git diff
  • git diff –cache
  • git diff –staged
git diff <filename> 命令,命令行窗口不会输出文件的改动信息。
git diff HEAD -- <filename>  命令同样也不会输出文件的改动信息。因为当前工作区未做改动。
git diff HEAD^ -- <filename> 命令则可以查看最近两次提交版本的区别(版本E和版本D的差别——增加数字“5”)
git diff HEAD^^ -- <filename> 命令则可以查看最近一次提交和最近一次提交的上上个版本的区别(版本E和版本C的差别——增加数字“4”和“5”)
git diff HEAD^^^ -- <filename>  命令则可以查看版本E和版本B的差别——增加数字“3”,“4”和“5”。
git diff HEAD~4 -- <filename>  命令则可以查看版本E和版本A的差别——增加数字“2”,“3”,“4”和“5”。等同于HEAD^^^^

.gitignore 文件的例子

# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为 txt 的文件
doc/**/*.txt

Shell

tree

hexedit :

ls -1 /dev/{ashmem,binder}

判断一个文件是否被更改过:

md5sum afile.txt

sha256sum afile.txt

区块链

https://coinmarketcap.com/

接着说第三方库

numpy

np.arange( 1, 150, 10 ).reshape(3, 5)
np.linspace(1, 100, 1000)

pandas

pandas有两个重要的数据结构Series DataFrame

  • s = Series(np.random.randint(1,10,4), index=[‘a’,’b’,’c’,’d’])
  • df = DataFrame(np.random.randint(1,10,24).reshape(6,4), index=dates, columns=list(‘ABCD’))

常用方法:

  • .head()
  • .tail()
  • .plot()
  • .sum()
  • .index
  • .value

seaborn

.jointplot
.pairplot

量化投资

这是Python引起的第三件事。也是正在尝试的一件事。欢迎有兴趣的同学一块来探讨。

VN.PY

重要的概念

sharp率: (收益-无风险利率)/波动率;

胜率是指出手赚钱次数与总出手次数之比;

赔率是指平均每次出手赚到的钱除以平均每次出手赔的钱,也叫做盈亏比。

投资策略,有的是高胜率低赔率,有的是低胜率高赔率,两样都高的,基本是不存在的。一般来说,胜率在40%左右,盈亏比在2以上的,就算不错的策略了。

程序化CTA

这是一种低胜率,高赔率的方法。

程序化交易由入场条件、出场条件,品种选择、时机选择,资金管理,一起组成。

我们追求的策略是:达到40%左右胜率,盈亏比在2以上,夏普率在1.5以上,最大回撤比一手保证金要少,最大回撤越小越好。这里面,最终看的指标是夏普率,但也并不是越高越好,太高的话,很可能是你的策略过拟合了。

注册获得开源股票数据API

Tushare为中国的开源交易数据提供者。注册后即可以使用提供的免费交易数据。这样如果你会使用python编程,同时也做了一些投资,有一些想法,不防拿这些数据来实验一下。这算不算进入大数据的一个窗口呢?

面对着这随时可以方便取到的股票交易数据,以及其它的一些数据,如期货,债券,利率,基金,银行拆借利率,M2,GDP,CPI,PPI。

还包括外汇和区块链的大数据信息。

注册Tushare

REF: