Skip to content

AutoQuant is an out-of-the-box quantitative investment platform.

License

Notifications You must be signed in to change notification settings

Marcnuth/AutoQuant

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PypI Versions PyPI - Downloads Python Versions Platform

AutoQuant

AutoQuant is an out-of-the-box quantitative investment platform.

It contains the full ML pipeline of data processing, strategy building(includes AI & traditionals), back-testing, and covers the entire chain of quantitative investment: alpha seeking, risk modeling, portfolio optimization, and order execution.

With AutoQuant, users can easily try ideas to create better Quant investment strategies.

Quick Start

Installation

pip install --upgrade autoquant

Data Preparation

from autoquant.collector import Collector
from autoquant import Market
from datetime import date

collector = Collector.default()

data = collector.daily_prices(
    market=Market.SZ, 
    code='002594', 
    start=date(2021, 11, 1), 
    end=date(2021, 11, 5)
)

data = collector.quarter_statement(
    market=Market.SH, 
    code='601318', 
    quarter=date(2021, 9, 30)
)
    

Backtest

from autoquant.collector import Collector
from autoquant.workflow import Workflow
from autoquant.broker import Broker
from autoquant import Market
from datetime import date

from autoquant.workflow import Workflow
from autoquant.strategy import MA_CrossOver


class SmaCross(MA_CrossOver):
    params = dict(fast=5, slow=20)


collector = Collector.default()
broker = Broker.default(kick_start=100000, commission=0.01)

data = collector.daily_prices(market=Market.SZ, code='002594', start=date(2020, 1, 1), end=date(2021, 11, 1))
w = Workflow().with_broker(broker).with_strategy(SmaCross).backtest(data)

w.visualize()

Advanced Topics

Market

AutoQuant support Shanghai, Shenzhen, HongKong and US markets now. Use Market Enum in codes:

from autoquant import Market

Market.SZ
Market.SH
Market.HK
Market.CN
Market.US

Index

AutoQuant support the indexes in multiple markets now.

Use StocksIndex Enum in codes:

from autoquant import StocksIndex

StocksIndex.ZZ500
StocksIndex.HS300
StocksIndex.SZ50

Use FundsIndex Enum in codes:

from autoquant import FundsIndex

FundsIndex.CN_ALL
FundsIndex.CN_ETF
FundsIndex.CN_QDII
FundsIndex.HUAXIA_SECTOR_ETF

Indicators

Specific Indicators

  • ParityIndex
  • AdjustedMomentum

Backtrader Indicators

All the indicators in Backtrader are available in AutoQuant.

For Example, if you were using the indicators of Backtrader like this:

from backtrader.indicators import Momentum

You can simply change the import sentence to use the indicators in AutoQuant. The codes would be:

from autoquant.indicators import Momentum

Metrics

Specific Metrics

  • Gross Rate Of Return
  • CAGR(Compound Annual Growth Rate)

TA-Lib Metrics

All the metrics in TA-Lib are available in AutoQuant.

For Example, if you were using the metrics of TA-Lib like this:

from talib import SMA

close = numpy.random.random(100)
output = MOM(close, timeperiod=5)

You can simply change the import sentence to use the metrics in AutoQuant. The codes would be:

from AutoQuant import SMA

close = numpy.random.random(100)
output = MOM(close, timeperiod=5)

Providers

Price Provider

Provides List

  • BaostockProvider
  • TushareProvider
  • EastmoneyProvider

API

def daily_prices(self, market: Market, code: str, start: date, end: date, **kwargs)

Financial Statement Provider

Provides List

  • SnowballProvider

API

def quarter_statement(self, market: Market, code: str, quarter: date, **kwargs)

def yearly_balance_sheet(self, market: Market, code: str,  years: list, **kwargs)

def yearly_income_sheets(self, market: Market, code: str, years: list, **kwargs)

def yearly_flow_sheets(self, market: Market, code: str, years: list, **kwargs)

Index Provider

Provides List

  • BaostockProvider
  • EastmoneyProvider

API

def stocks_of_index(self, index: StocksIndex, **kwargs)

def funds_of_index(self, index: FundsIndex, **kwargs)

Contribution Guide

Test

Test all

PYTHONPATH=./ pytest

Test specified test

PYTHONPATH=./ pytest tests/<YOUR_DISIRE_FILE>.py -k "<YOUR_DISIRE_TEST_CASE>" -s

Development

Generate Requirements

pipreqs ./ --encoding=utf8 --force

Package Update

python3 -m build 
python3 -m twine upload dist/*