导图社区 数字货币量化交易
数字货币量化交易的思维导图,内容有课程及数字货币概述、python基础、Vnpy、数据爬取处理、tradingview等,一起来看。
编辑于2023-04-25 14:55:28 四川省数字货币量化交易
课程及数字货币概述
课程说明及代码下载
量化交易课程
课程代码下载地址 https://github.com/51bitquant/51bitquant 网格策略下载:https://github.com/51bitquant/binance_grid_trader https://github.com/51bitquant/binance_grid_trader
VNPY课程
数字货币概述
python基础
开发环境安装配置
python开发环境安装
(https://repo.anaconda.com/archive/)下载安装 anaconda2021.05 (安装在programdata,需要显示文件夹)(https://www.jetbrains.com/idea/download/other.html)idea 2022.3.2(破解idea https://www.bilibili.com/read/cv21507811/ 把破解文件安装在idea目录下,不要删除)
conda虚拟环境配置
1.conda配置mytrader环境 = conda create -n mytrader python=3.7 创建python虚拟环境 conda activate mytrader 激活mytrader虚拟环境 (conda remove -n mytrader --all 清除环境) 2.mytrader中安装howtrader: 在mytrader环境下,进入howtrader目录,执行: pip install -r requirements.txt python setup.py install 在mytrader环境下安装了howtrader,查看已安装的包:conda list 安装 TA-Lib: 下载 TA_Lib‑0.4.24‑cp39‑cp39‑win_amd64.whl 在下载文件目录中执行 :pip install TA_Lib‑0.4.24‑cp39‑cp39‑win_amd64.whl 3.在idea中配置mytrader环境(interpreter) 1.在File-settings-plugin中安装 : python 2.配置sdk : 在File-project structure 中,首先安装SDKs,选择已安装的mytrader目录下的python.exe 3.然后在project中选择已配置的sdk 解决power shell安全策略禁止脚本问题, 1.在“开始”菜单中以管理员身份运行PowerShell 2.输入 set-ExecutionPolicy RemoteSigned 选“是”执行
Window服务器搭建Python开发环境设置和部署 23:34
# 第十三课: Window服务器的部署 实盘策略可以部署可以在Linux和Window, 看你的需求。但是Linux服务器相对性能和稳定性来说会更好。 course_codes-main\class_13 ================== ## Linux的服务器部署 Linux的服务器部署可以看网易云课堂这个视频 [Linux服务器视频链接](https://study.163.com/course/courseLearn.htm?courseId=1209509824&share=2&shareId=480000001919830#/learn/video?lessonId=1281123249&courseId=1209509824) ## 服务器选择 [优惠券: https://www.ucloud.cn/site/global.html?invitation_code=C1x2EA81CD79B8C#dongjing](https://www.ucloud.cn/site/global.html?invitation_code=C1x2EA81CD79B8C#dongjing) 如果付款的时候,没有找到优惠券可以联系他们客服,找他们要优惠券。 ## 连接服务器方式 1. Microsoft Remote Desktop 2. Mac需要是美国地区的,但是你可以修改自己的appstore的地区,或者注册一个美国地区的,具体自己百度。 ## 设置系统语言 1. 搜索languages,然后安装Chinese 2. 然后重启 ## 安装软件 1. IE浏览器需要设置下下载安全选项. 2. chrome 浏览器 3. 安装anaconda和pycharm 4. 安装git工具 ## 安装howtrader > pip install git+https://github.com/ramoslin02/howtrader ## 上传文件到服务器 1. windowd的可以自己百度学习下,如何把文件上传到window服务器 2. linux服务器的可以看下网易云课堂的实盘部署 3. 使用Microsoft Remote Desktop文件同步的功能
python基础
python数学计算与基本数据类型 23:38
字符串: 字符串截取和运算 * + 通过下标来运算, 分割, 替换, 大写小写转变
Python内置对象列表List和字典Dict的使用 17:49
list对象 python中数组是list 遍历列表: for index, value in enumerate(b) 枚举enumerate 列表长度: len(lst) 列表切片操作: print(b[0:2]) print(b[1:]) 到最后一个 print(b[1:-1]) 最后一个之前 print(b[:-1]) 最后一个之前 dict for key in dict_1: print(key, dict_1[key]) 取键 取值 插入键值对:直接插 删除键值对:.pop
list 切片
Python条件判断语句和循环语句的使用 16:52
循环语句: for 循环 fruits = ['苹果', '香蕉', '樱桃', '荔枝', '芒果'] # for 值 in list: # for fruit in fruits: # print(fruit) # for index, fruit in enumerate(fruits): enumerate枚举方法,返回两个值
Python函数的定义和调用 15:40
定义函数: def 函数名称 多个单词以下划线命名 python不用驼峰命名 局部变量和全局变量 可以重名 只要是*使用*变量,而该变量在全局域中有定义,而在局部没有定义,则会使用全局变量 函数中使用某个变量时,该变量名既有全局变量也有同名的局部变量,则会使用局部变量 global 在局部域中定义全局变量 函数入口: main 函数 main+tab
python常用数据结构list,dict和tuple讲解 27:20
面向对象编程
什么是面向对象编程 12:10
Import request >> request.get(url,,).json() request方法查询返回json
Python类与实例变量 11:52
1.object类 基类,定义类的时候需要继承 class 类名(继承类),也可以不继承 2.定义类时,第一个方法是init方法,即类的实例化方法,方法的第一个参数是self,表示对象实例的本身,init中还可以传递其他需要初始化的参数,把参数用self变量来接收 3.Self.xxx 叫做实例变量,是每个实例特有的。self表示实例本身,每个类可以有很多个实例 定义类之后,需要将类实例化 ------------ __init__() 在定义类的时候__init__()方法是必不可少的。init()这种初始化方法,用来初始化新创建对象的属性,在一个对象被创建以后会立即调用,__init__()方法又被称为构造器(constructor) self 函数的第一个参数,就必须是实例对象本身,并且约定俗成,把其名字写为self。因此我们再定义类中的所有函数时必须传入self参数 main python脚本被作为模块(module)引入(import)时,其中的main()函数将不会被执行
object类 基类 定义类的时候需要继承 class 类名(继承类)
_init_() 方法 类的实例化方法,方法的第一个参数是self,表示对象实例的本身
self.xx 实例变量,每个实例特有
Python实例方法的定义和使用 11:21
不同的实例可以传递不同的参数 ----------- 拼接字符串 f-string方式,前面加f,变量大花括号 f"key={self.key},secert={self.secret}" 等同于 "key",self.key,"secert=",self.secret
Python类使用实战演练 09:59
字典类型数据 类可以用来做为数据的封装
用类作为数据封装示例
Python类变量、类方法和静态方法 12:34
#类中的变量: 类体中、所有函数之外:此范围定义的变量,称为类属性或类变量; 类体中,所有函数内部:以“self.变量名”的方式定义的变量,称为实例属性或实例变量; 类体中,所有函数内部:以“变量名=变量值”的方式定义的变量,称为局部变量。 所有类的实例化对象都同时共享类变量,也就是说,类变量在所有实例化对象中是作为公用资源存在的。 ---------------------------- 类方法的调用方式有 2 种,既可以使用类名直接调用,也可以使用类的实例化对象调用 静态方法、类方法一般作为工具类,不需要使用类的成员变量 #实例方法 实例方法最大的特点就是,它最少也要包含一个 self 参数 clang = CLanguage() clang.say() # 实例直接调用 #静态方法 采用 @staticmethod 修饰的方法 #静态方法中无法调用任何类属性和类方法 ,一般作为工具类,不需要使用类的成员变量 可由类名或类实例调用: #(常用)使用类名直接调用静态方法 CLanguage.info("C语言中文网","http://c.biancheng.net") #(不推荐)使用类对象调用静态方法 clang = CLanguage() clang.info("Python教程","http://c.biancheng.net/python") #类方法 与静态方法类似,采用@classmethod修饰符,至少包含一个参数cls(不是类对象) @classmethod def info(cls): print("正在调用类方法",cls) (常用)使用类名直接调用,(不推荐)使用类对象调用 ------------------------------ class Binance(object): host = "https://api.binance.com" def __init__(self, key, secret): self.key = key self.secret = secret @staticmethod def get_kline_data(name): print(Binance.host) #只能用类去调用类变量,不能调用self变量 print(name) @classmethod def print_class_info(cls): # cls变量代表当前类 print("当前类的ULR", cls.host) if __name__ == '__main__': binance = Binance('11111', '222222') #创建类实例 print(Binance.host) #调用类变量 print(binance.host) #调用实例变量 Binance.host = "api.binance.com" # 修改类变量 Binance.get_kline_data('111') # 调用静态方法
类属性或类变量
实例属性或实例变量
局部变量
实例方法
静态方法
类方法
Python枚举类型的定义和使用 10:48
Enum类型 枚举类型不能初始化来使用,使用时直接使用类的实例变量 from enum import Enum class OrderType(Enum): # 继承Enum类型 LIMIT = "LIMIT" MARKET = "MARKET" STOP = "STOP" class Binance(object): def __init__(self): self.base_url = "https://fapi.binance.com" def get_kline_data(self, symbol: str, interval: Interval, limit: int = 500): # interval: Interval 表示变量为Interval类型 params = {"symbol": symbol, "interval": interval.value, "limit": limit} print(params) return requests.get(self.base_url+'/fapi/v1/klines', params=params).json()
继承Enum类
Debug
Python编程的常见错误和debug 27:51
Ta-lib分析库安装
windows环境安装
course_codes-main\class_14
linux环境安装
yuncodes\backtest\class_01_install_talib yuncodes\backtest\class_03_talib_usage ============== 到 https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib 下载对应版本的ta-lib, 如python3.7环境下就下载cp37版本的ta-lib,然后用两次pip install安装
Vnpy
VNPY安装配置使用
vnpy框架的安装 11:07
yuncodes\backtest\class_02_install_vnpy ===================
VNPY量化交易软件的安装, 图形界面的启动和功能介绍 15:30
course_codes-main\class_06 ============ howtrader下载: https://github.com/ramoslin02/howtrader.git**
下载安装howtrader
创建howtrader文件夹、创建启动文件
vnpy常见类、使用及python类型编程 19:14
course_codes-main\class_07 ============ howtrader --app --cta_strategy # 策略模板 --strategys # 默认策略 --api --rest #rest api 接口 --websocket # websocket --binances # 币安现货合约网关 --binance --binances --event #量化课程讲解 --trader --database # 数据库方面 --ui constant.py #常量 object.py tikedata bardata k线数据类 orderdata 订单数据类 postiondata 仓位数据 account 账号信息 setting.py #设置 数据库配置设置 文件名:“vt_setting.json”如果该文件未配置参数则使用默认值 ------------- 函数类型定义:加 : 或 ->,指定函数/参数/返回值的类型,提高代码识别度 例: def hello(string: str 赋值类型) -> int: 返回类型 #传入str类型参数,返回int类型 print(string) return len(string) a: Person = func(Person('lisi', 10)) # 为提高代码识别度,指定a的类型是person类
howtrader框架讲解
函数类型定义 def hello(string: str 赋值类型) -> int: 返回类型
VNPY数据库配置和数据爬取 12:32
course_codes-main\class_08 ============= ## 支持的数据库类型 1. 支持sqlite3数据库(默认使用) 2. mongodb数据库 3. mysql ##vt_setting配置: 默认的sqlite的配置 { "database.driver": "sqlite", "database.database": "database.db"
mongdb配置
vt_setting配置修改
在交易所建立私钥,在main ui 上连接交易所
crawl_data.py 爬取数据
第二章课程总结和后续课程学习要求 11:25
course_codes-main\class_09 ============ ## 1. 数据爬取 1. 数据库: 为了方便学习,降低学习成本,用sqlite数据库,不用任何配置 2. 用crawl_data爬取BTCUSDT, ETHUSDT, BNBUSDT等现货和合约的数据, 如果没有数据后面课程没法学习。 3. okex和火币没有提供历史数据,他们最多提供2000个K线的数据,学习和研究非常不方便,除非自己购买第三方数据 ## 2. 把UI界面和行情跑起来 1. 注册币安账号 2. 配置API: 生成api地址: 3. 启动界面 > python main.py ## 注意事项 如何确定自己电脑的网络是否能访问币安交易所呢? 在终端输入 > ping api.binance.com 如果能访问就不用配置代理,如果不能访问就需要配置代理主机和代理端口
VNPY策略模板
认识VNPY CTA策略模板(以UI讲解) 32:05
course_codes-main\class_10 ============= # 第十课: 认识VNPY CTA策略模板 课程代码和课件下载地址: https://github.com/ramoslin02/course_codes ## 系统的内置的策略 在框架howtrader.app.cta_strategy.strategies目录下 ## 写一个简单的策略 1. 在项目的启动文件夹下面创建一个叫strategies文件夹 2. 拷贝系统内置的策略,一份然后修改里面的方法 ## 策略启动的步骤 1. 连接交易所 2. 添加策略(添加策略可以通过 cta_engine.add_strategy()) 3. 启动策略 历史数据从交易所load_bar,实时数据用load_tick
(基于UI)策略启动/连接交易所/接收实盘数据/实盘下单交易
VNPY CTA策略代码加载启动过程讲解 23:08
course_codes-main\class_11 ============= # 第十一课: VNPY CTA策略代码加载启动过程讲解 具体代码: main_script.py ## 策略启动的步骤 1. 启动主引擎 2. 添加网关 3. 添加CtaStrategyApp 4. 链接交易所 5. 初始化cta引擎(加载策略配置信息等,添加策略等等) 6. 启动策略 ------ print 打印到控制台 wirte log 生成日志文件
CTA策略代码加载启动过程讲解
数据爬取处理
pandas框架处理交易所行情数据基础 144:34
51bitquant-master\pandas_basic\pandas_basic1 ===============================
pandas处理行情数据2-DataFrame数据去重计算涨跌幅等 27:09
51bitquant-master\pandas_basic\pandas_basic2 ===============================
pandas批量处理CSV文件 12:26
51bitquant-master\pandas_basic\pandas_read_muti_csv3 ==================================
利用Pandas对交易所行情数据不同周期进行转换 17:00
51bitquant-master\pandas_basic\pandas_resample_data4 ====================================
如何爬取交易所数据,如何清洗数据并导入vnpy数据库 10:07
yuncodes\backtest\class_04_fetch_clear_datas ================
tradingview
Tradingview的简单使用和加载技术指标 10:25
Tradingview内置脚本语法、操作符、变量和方法使用讲解 22:24
Tradingview均线类技术指标脚本开发讲解 15:18
Tradingview通道突破类技术指标脚本开发讲解 21:03
Tradingview自定义指标开发讲解 13:36
实盘策略
策略回测
回测框架的使用,如何利用回测引擎回测策略 14:04
yuncodes\backtest\class_05_back_testing ========================= engine_type = EngineType.LIVE # live trading engine 实盘引擎 engine_type = EngineType.BACKTESTING # 回测引擎 csv_loader # 加载csv # 设置交易对产品参数 engine.set_parameters(
回测引擎结构
现货、现货杠杆和期货交易成本、利润和爆仓价格计算过程讲解 40:15
yuncodes\real_trade\calculate_futures =========================
交易所Websocket订阅
什么是websocket? 08:12
yuncodes\chapter_ws\class_01 ===================
Websocket连接Okex永续合约并订阅orderbook数据 18:03
yuncodes\chapter_ws\class_02_okex_ws =========================
Websocket连接火币交易所并处理订单簿数据 15:12
yuncodes\chapter_ws\class_03_huobi_ws ==========================
Python多线程和锁的使用讲解 21:16
yuncodes\chapter_ws\class_04_thread_lock ============================
交易所Websocket断开自动重连代码实现 12:09
yuncodes\chapter_ws\class_05_ws_reconnect =============================
交易所Websocket登录并订阅账户相关数据接口开始学习 11:08
yuncodes\chapter_ws\class_06_ws_login ==========================
BitMex交易所Websocket登录并订阅订单账户仓位信息 09:24
yuncodes\chapter_ws\class_07_ws_bitmex ===========================
BitMex交易所订单簿的实时数据更新处理 15:30
yuncodes\chapter_ws\class_08_ws_bitmex ===========================
Websocket客户端的代码优化 12:56
yuncodes\chapter_ws\class_08_ws_inherited ============================
交易所API接口
火币API解读并获取交易所API数据
51bitquant-master\huobi_api\huobi_api ==================== pandas pd.set_option('expand_frame_repr', False) # 设置展开显示所有列 pd.set_option('display.max_rows', 1000) # 设置最大显示1000行 request对象 https://2.python-requests.org/ request.status request.json
币安API接口获取数据并保存成CSV文件 24:16
51bitquant-master\binance_api\binance_api ====================== 权重: api密钥可以使用的总权重有限制。例如,如果限制是1200,这意味着api密钥只能在一分钟内使用总共1200个权重点数。如果超过了api密钥允许使用的总权限重,则会遭受错误代码'429 too many requests',并且不能发送任何其他请求,直到下一个有效的时间窗口开始 resp = requests.get(url) data = resp.json() df = pd.DataFrame(data) # 指定每一行的数据是什么 [ [ 1499040000000, // 开盘时间 "0.01634790", // 开盘价 "0.80000000", // 最高价 "0.01575800", // 最低价 "0.01577100", // 收盘价(当前K线未结束的即为最新价) "148976.11427815", // 成交量 1499644799999, // 收盘时间 "2434.19055334", // 成交额 308, // 成交笔数 "1756.87402397", // 主动买入成交量 "28.46694368", // 主动买入成交额 "17928899.62484339" // 请忽略该参数 ] ] df = pd.DataFrame(data, columns={'open_time': 0, 'open': 1, 'high': 2, 'low': 3, 'close': 4, 'volume': 5, 'close_time': 6, 'quote_volume': 7, 'trades': 8, 'taker_base_volue': 9, 'taker_quote_volume': 10, 'ignore': 11}) # 设置第一行数据为index,替代序列id,inplace 内容替换 df.set_index('open_time', inplace=True) df.to_csv(str(end_time) + '.csv')
Http协议与Python requests框架 12:47
yuncodes\chapter3_http\class_01 ====================== import requests from requests import Response # import json # url = 'https://fapi.binance.com/fapi/v1/klines?symbol=BTCUSDT&interval=1m&limit=10' url1 = 'https://fapi.binance.com/fapi/v1/klines' params = {'symbol': 'BTCUSDT', 'interval': '1m', 'limit': 10} data: Response = requests.get(url1, params=params, timeout=5) # data: Response = requests.get(url, timeout=5) # data: Response 表示data为Response数据类型 print(data.status_code) # 200 print(data.headers) print(data.json()) # json格式 # print(data.content) # content格式,需要转化为json print(json.loads(data.content)) ----- post方法 def post(url, data=None, json=None, **kwargs):
http请求构造及基础应用
币安合约REST API公开接口请求实战 37:25
yuncodes\chapter3_http\class_02_binance ================== class BianceFutureHttpClient(object): def __init__(self, base_url=None, api_key=None, api_secret=None, timeout=5): if base_url: # 如果base_url不为NONE self.base_url = base_url else: self.base_url = 'https://fapi.binance.com' def get_klines(self, symbol, interval: Interval, start_time=None, end_time=None, limit=500): path = '/fapi/v1/klines' params = {"symbol": symbol, "interval": interval.value, "limit": limit } if start_time: params['startTime'] = start_time if end_time: params['endTime'] = end_time url = self.base_url + path response_data = requests.get(url, params=params, timeout=self.timeout).json() return response_data def place_order(self, symbol, side: Side, type_: OrderType, quantity, price=None,stop_price=None, time_inforce=TimeInForce.GTC,recv_window=5000): .... for key in params.keys(): query_str += f'{key}={params[key]}&' query_str = query_str[0:-1] print(query_str)
币安合约签名API接口数据获取实战 34:33
yuncodes\chapter3_http\class_03 ===================== 接口鉴权类型 api_secert 作为sha256的密钥,需要把secert提交到header里面 需要签名的接口 (TRADE 与 USER_DATA) 调用这些接口时,除了接口本身所需的参数外,还需要传递signature即签名参数。 签名使用HMAC SHA256算法. API-KEY所对应的API-Secret作为 HMAC SHA256 的密钥,其他所有参数作为HMAC SHA256的操作对象,得到的输出即为签名。 ---- 下订单 查订单 撤销订单 查询当前挂单 ---- # 必传参数无默认值 def place_order(self, symbol, side: Side, type_: OrderType, quantity, price=None,stop_price=None, time_inforce=TimeInForce.GTC,recv_window=5000): path = '/fapi/v1/order' params = { "symbol": symbol, "side": side.value, "type": type_.value, "quantity": quantity, "recvWindow": recv_window, "timestamp": self.get_timestamp() } # type_参数为limit类型时增加参数 if type_ == OrderType.LIMIT: # 限价单 params["timeInForce"] = time_inforce.value if price > 0: params['price'] = price else: # 报错 raise ValueError("price 不能为空") if type_ == OrderType.MARKET: pass if type_ == OrderType.STOP: # 止损单 if stop_price > 0: params['stopPrice'] = stop_price # 做多: 8000, 7800, 7790 else: raise ValueError("stop price 不能为空") if price > 0: params['price'] = price else: raise ValueError("price 不能为空") query_str = '' for key in params.keys(): query_str += f'{key}={params[key]}&' # 去掉最后一个&符号 query_str = query_str[0:-1] print(query_str) # 签名需要用到的库 # import hashlib # import hmac signature = hmac.new(self.secret.encode('utf-8'),msg=query_str.encode('utf-8'), digestmod=hashlib.sha256).hexdigest() # 将secret通过hash256加密得到签名 data = query_str + '&signature=' + signature url = self.base_url + path + '?' + data headers = {"X-MBX-APIKEY": self.key} # 在header中给一个key response_data = requests.post(url, headers=headers, timeout=self.timeout).json() return response_data
币安api请求invalid-api-key问题答疑开始学习 4:16
yuncodes\chapter3_http\class_04 ===================== api-key 申请问题答疑
币安合约REST API封装与优化 29:43
yuncodes\chapter3_http\class_04 =====================
火币交易所REST API接口开发 35:14
yuncodes\chapter3_http\class_05_huobipro ============================
Okex交易所REST API交易接口实现 29:38
yuncodes\chapter3_http\class_06_okex =========================
Bitmex交易所签名API接口讲解与实现 11:12
yuncodes\chapter_ws\class_08_ws_bitmex ===========================