一、简介
Easyquant是一个用Python编写的股票量化交易框架,可以帮助开发者快速地实现量化策略。
Easyquant具有以下特点:
简单易用,代码量少,不需要太多编程基础。 支持多账户,可以满足不同交易者的需求。 支持实时模拟和回测模式,方便开发者检验策略。
# 安装easyquant
pip install easyquant
# 导入easyquant
from easyquant import StrategyTemplate, DefaultLogHandler, settings
class MyStrategy(StrategyTemplate):
name = 'mystrategy'
def strategy(self, event):
# 编写交易策略的代码
pass
def log_handler(self):
# 自定义日志的输出方式
return DefaultLogHandler(self.name, log_type=settings.LOGGER_HANDLER)
if __name__ == '__main__':
mystrategy = MyStrategy()
mystrategy.run()
二、数据获取
获取股票数据是开发量化交易策略的重要任务。Easyquant提供了多种数据源供开发者使用:
Tushare Sina财经 聚宽量化 通联数据 新浪股票数据接口下面以Tushare为例,演示如何获取股票数据:
# 安装tushare
pip install tushare
# 导入tushare
import tushare as ts
# 获取沪深股票列表
stock_list = ts.get_stock_basics()
# 获取指定股票的历史k线数据
k_data = ts.get_k_data('000001', start='2021-01-01')
三、交易策略
Easyquant提供了一个模板StrategyTemplate,开发者只需要继承这个模板,实现其中的strategy方法即可编写自己的交易策略。
下面是一个例子:
from easyquant import StrategyTemplate, DefaultLogHandler
class MyStrategy(StrategyTemplate):
name = 'mystrategy'
def strategy(self, event):
# 获取当前股票的k线数据
k_data = self.get_kline_data(event.stock_code)
# 判断是否买入
if k_data['ma5'] > k_data['ma60']:
self.buy(stock_code=event.stock_code, price=event.last_price)
# 判断是否卖出
if k_data['ma5'] < k_data['ma60']:
self.sell(stock_code=event.stock_code, price=event.last_price)
def log_handler(self):
return DefaultLogHandler(self.name)
if __name__ == '__main__':
mystrategy = MyStrategy()
mystrategy.run()
四、交易模拟
Easyquant提供了实时模拟和回测模式,方便开发者检验自己的交易策略。
下面是一个例子:
# 导入模拟器
from easyquant import SimulationTrader
# 导入策略
from my_strategy import MyStrategy
class MySimulationTrader(SimulationTrader):
def __init__(self):
super().__init__()
# 设置初始资金
self.set_cash(100000)
# 导入策略
self.strategy = MyStrategy()
if __name__ == '__main__':
# 运行模拟器
MySimulationTrader().run()
五、交易回测
Easyquant提供了多种回测方法,可以根据需求选择不同的方法进行回测。
下面是一个例子:
# 导入回测器
from easyquant import BacktestTrader
# 导入策略
from my_strategy import MyStrategy
class MyBacktestTrader(BacktestTrader):
def __init__(self):
super().__init__()
# 设置回测起始和结束时间
self.set_backtest_period('2021-01-01', '2021-06-30')
# 导入策略
self.strategy = MyStrategy()
if __name__ == '__main__':
# 运行回测器
MyBacktestTrader().run()