量化24小时 - 第一部分 基础内容普及

  1. 量化使用环境, 语言, 工具集

Python+Anaconda, MongoDB+RoboMongo, vn.py(install, python setup.py install)

  1. Python 学习

基础:
Learn Python The Hard Way . com (笨方法学 Python)
廖雪峰学 Python

扩展库:
利用 Python 进行数据分析
Python Cookbook

图形界面:
Python QT GUI

其他:
游戏编程: https://codecombat.163.com/play/dungeon 使用网易账号登录
Flask Web 开发

__feature__ 允许在 2.x 里面使用 3.x 方法特性(比如 Unicode 字符串, 比如 / 精确除法, // 整除).

Emie Chan 的系列(3本) 构建思路体系
Quantstart.com 更复杂, 实操
官方论坛 http://www.vnpie.com/forum.php 找问题, 求答案.

  1. Python基础

jupyter 快速执行代码: shift+enter
Kernal -> restart 用于清空以前的执行

string: s[id] s.upper() s.lower()
字符串链接 +
字符串包含 t in s
分割字符串 s.split(sp)
判断全部是字母 s.isalpha()
判断全部是数字 s.isdigit()

list: l1=[] range(len) l1[id] l1.append(itm) l1.pop() l1.extend(l2) l1.sort()
循环操作:

1
2
3
l2 = []
for i in l:
l2.append(i+1)

列表推导式:

1
l3 = [i+1 for i in l]

时间复杂度线性O(n) => 大数据使用 Num.py Pandas

列表: 存储 K线数据

dict: d={} d[key]=val
循环操作:

1
2
3
4
5
6
7
for key in d.keys():
pass
for val in d.values():
pass
for item in d.items():
# tuple
pass

字典: 数据缓存(报价,持仓,委托状态), 事件驱动

1
2
3
4
5
6
if cond:
pass
elif cond:
pass
else:
pass

判断: 数据是否获取成功, 收盘价是否满足, 信号怎么样

函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def func1(x=3):
return 1,2,x

a,b,c = func1()

def func2(*args):
''' *args 是列表 '''
return args

a,b,c = func2(1,2,3)

def func3(**kvargs):
''' **kvargs 是字典 '''
return kvargs

a,b,c = func3(a=1, b=2, c=3)

异常

1
2
3
4
5
6
7
import math
math.pow(3,4)

try :
pass
except:
print("exception fail")

1
2
3
4
5
6
7
8
9
10
11
12
13
class Dog:
def __init__(self, name):
self.name = name
self.__voice = 'wang wang..'

def yell(self):
print self.__voice

dog = Dog("WangCai")
type(dog)
isinstance(dog, Dog)
dir(dog)
del(dog)
  1. 常用模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
''' 获取参数, 退出程序 '''
import sys
sys.argv
sys.exit()

''' 加载配置文件等 '''
import os
os.getcwd() # 当前工作目录

''' 程序执行多久 '''
import time
time.time() # 时间戳
time.sleep(1)

''' 日期 '''
import datetime
datetime.date(2019,01,30)
datetime.date.today() # 年月日
datetime.datetime.now() # 年月日时分秒毫秒

import collections
d1 = {}
d2 = collections.OrderdDict() # 实际是字典+列表
d3 = collections.defaultdict(list)

import json
sjson = json.dumps({"a":1})
ojson = json.loads(sjson)

import shelve
fp = shelve.open("file.vt") # 加载本地保存文件
fp['a'] = 1
fp.close()

''' 错误捕捉 '''
import traceback
try:
pass
except:
traceback.print_exec()
err = traceback.format_exec()

import Queue
q = Queue.Queue()
q.put(1)
v = q.get()
v = q.get(timeout=1)

# 线程

模块安装

1
2
3
4
5
6
pip install tushare

conda install -c quantopian ti-lib

cd pyqtgraph # http://www.pyqtgraph.org/
python setup.py install
  1. 数据

数据类型

tick(买卖交易记录), K线 用于高频等策略
基本面, GDP, CPI等宏观数据, 用于α策略或者因子策略

数据源

上海中期论坛 BoxModule: 期货市场, 分钟线, Tick 级别历史行情
万德 WindPy(中国的 Bloomberg): 中低端用户
TuShare - 雅虎,新浪,腾讯

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
code = "510050"
# 日k线 open high close low volume price_change p_change ma5 ma10 ma20 v_ma5 v_ma10 v_ma20
df = ts.get_hist_data(code)
# 某天某股票的3分钟统计的平均交易记录
df = ts.get_tick_data(code, date="2019-01-30")
# 当天所有股票 code name changepercent trade open high low settlement volume turnoverratio amount per pb mktcap nmc
df = ts.get_today_all()
# 当天的某股票3分钟统计的平均交易记录 time price pchange change volume amount type
df = ts.get_today_ticks(code)

# 保存数据, 直接写入文件
df.to_csv(os.getcwd() + "/" + code + '.csv');

# 保存数据, 写入数据库
data = df.to_json(orient="records")
data = json.loads(data)

import pymongo
client = pymongo.MongoClient("localhost", 27017)
db = client["quant"]
col = db["stocktick"]
col.insert(data)
col.drop_collection("stocktick")

自相关(趋势)强, 时间序列平稳 - 选择测试 CTA 策略

QA: 什么是 CTA 策略? - Commodity Trading Advisor Strategy
四张图告诉你CTA策略是怎么赚钱的
什么是 CTA 策略

自回归强, 数据平稳 - 选择测试 均值回归 策略

QA: 什么是 均值回归 策略?

了解了历史数据的特性, 也就大致决定了研究方向, 开始跑数据从策略回测.

策略上线前, 实盘初始化得到交易信号

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.