bibliothèque de commerce d'algorithmes python

bibliothèque de commerce d'algorithmes python

Je voudrais présenter quelques bibliothèques de trading d'algorithmes de python. J'ai étudié les quatre éléments suivants cette fois.

zipline github est la bibliothèque avec le plus d'étoiles parmi les trois. Comme référence pour savoir comment l'utiliser, jetons un coup d'œil au code de trading d'algorithme utilisant DMA, qui est également dans l'exemple.

import pytz
from datetime import datetime
import zipline as zp

start = datetime(1990, 1, 1, 0, 0, 0, 0, pytz.utc)
end = datetime(2002, 1, 1, 0, 0, 0, 0, pytz.utc)
data = zp.utils.factory.load_from_yahoo(stocks=['AAPL'], indexes={}, start=start,
                                        end=end, adjusted=False)

class DualMovingAverage(zp.TradingAlgorithm):
    def initialize(self, short_window=100, long_window=400):
        self.add_transform(zp.transforms.MovingAverage, 'short_mavg', ['price'],
                           window_length=short_window)

        self.add_transform(zp.transforms.MovingAverage, 'long_mavg', ['price'],
                           window_length=long_window)
        self.invested = False

    def handle_data(self, data):
        short_mavg = data['AAPL'].short_mavg['price']
        long_mavg = data['AAPL'].long_mavg['price']
        buy = False
        sell = False

        if short_mavg > long_mavg and not self.invested:
            self.order('AAPL', 100)
            self.invested = True
            buy = True
        elif short_mavg < long_mavg and self.invested:
            self.order('AAPL', -100)
            self.invested = False
            sell = True

        self.record(short_mavg=short_mavg,
                    long_mavg=long_mavg,
                    buy=buy,
                    sell=sell)


import matplotlib.pyplot as plt
dma = DualMovingAverage()
perf = dma.run(data)
fig = plt.figure()
ax1 = fig.add_subplot(211,  ylabel='Price in $')
data['AAPL'].plot(ax=ax1, color='r', lw=2.)
perf[['short_mavg', 'long_mavg']].plot(ax=ax1, lw=2.)

ax1.plot(perf.ix[perf.buy].index, perf.short_mavg[perf.buy],
         '^', markersize=10, color='m')
ax1.plot(perf.ix[perf.sell].index, perf.short_mavg[perf.sell],
         'v', markersize=10, color='k')

ax2 = fig.add_subplot(212, ylabel='Portfolio value in $')
perf.portfolio_value.plot(ax=ax2, lw=2.)

ax2.plot(perf.ix[perf.buy].index, perf.portfolio_value[perf.buy],
         '^', markersize=10, color='m')
ax2.plot(perf.ix[perf.sell].index, perf.portfolio_value[perf.sell],
         'v', markersize=10, color='k')

plt.legend(loc=0)
plt.gcf().set_size_inches(14, 10)
plt.show()

zipline.png En regardant le code, les données historiques du cours de l'action sont obtenues à l'aide de la fonction zp.utils.factory.load_from_yahoo. Celui-ci est de type «pandas.DataFrame» et a la même structure que les données de cours de bourse qui peuvent être obtenues avec «pandas». La partie principale de l'algorithme est créée en héritant de la classe zp.TradingAlgorithm. En décrivant le traitement à effectuer pour chaque fois du cours de l'action dans la fonction «handle_data» et en attribuant la valeur à la fonction «record», il est possible de récupérer les données nécessaires à la représentation graphique des résultats. Je suis. Concernant les indicateurs techniques, la tyrolienne elle-même a quelques fonctions de calcul d'indicateurs, mais en installant ta-lib, vous pouvez utiliser des indicateurs plus variés. Sera.

PyAlgoTrade L'utilisation est similaire à la tyrolienne, mais elle semble être capable de gérer le commerce en direct de pièces de monnaie et d'événements Twitter. Jetons également un œil au code pour le trading d'algorithmes utilisant des bandes de bandes dans des échantillons.

from pyalgotrade import strategy
from pyalgotrade import plotter
from pyalgotrade.tools import yahoofinance
from pyalgotrade.technical import bollinger
from pyalgotrade.stratanalyzer import sharpe


class BBands(strategy.BacktestingStrategy):
    def __init__(self, feed, instrument, bBandsPeriod):
        strategy.BacktestingStrategy.__init__(self, feed)
        self.__instrument = instrument
        self.__bbands = bollinger.BollingerBands(feed[instrument].getCloseDataSeries(), bBandsPeriod, 2)

    def getBollingerBands(self):
        return self.__bbands

    def onBars(self, bars):
        lower = self.__bbands.getLowerBand()[-1]
        upper = self.__bbands.getUpperBand()[-1]
        if lower is None:
            return

        shares = self.getBroker().getShares(self.__instrument)
        bar = bars[self.__instrument]
        if shares == 0 and bar.getClose() < lower:
            sharesToBuy = int(self.getBroker().getCash(False) / bar.getClose())
            self.marketOrder(self.__instrument, sharesToBuy)
        elif shares > 0 and bar.getClose() > upper:
            self.marketOrder(self.__instrument, -1*shares)


def main(plot):
    instrument = "yhoo"
    bBandsPeriod = 40

    # Download the bars.
    feed = yahoofinance.build_feed([instrument], 2011, 2012, ".")

    strat = BBands(feed, instrument, bBandsPeriod)
    sharpeRatioAnalyzer = sharpe.SharpeRatio()
    strat.attachAnalyzer(sharpeRatioAnalyzer)

    if plot:
        plt = plotter.StrategyPlotter(strat, True, True, True)
        plt.getInstrumentSubplot(instrument).addDataSeries("upper", strat.getBollingerBands().getUpperBand())
        plt.getInstrumentSubplot(instrument).addDataSeries("middle", strat.getBollingerBands().getMiddleBand())
        plt.getInstrumentSubplot(instrument).addDataSeries("lower", strat.getBollingerBands().getLowerBand())

    strat.run()
    print "Sharpe ratio: %.2f" % sharpeRatioAnalyzer.getSharpeRatio(0.05)

    if plot:
        plt.plot()


if __name__ == "__main__":
    main(True)

pyalgotrade.png Comme la tyrolienne, elle hérite de la classe strategy.BacktestingStrategy pour créer la partie principale du commerce. Par rapport à «tyrolienne», diverses fonctions de tracé de données sont préparées et je pense que c'est pratique.

pybacktest C'est une bibliothèque légère comparée aux deux bibliothèques ci-dessus. Jetons un coup d'œil à l'exemple de code réel.

import pybacktest
import pandas as pd

ohlc = pybacktest.load_from_yahoo('SPY')
ohlc.tail()

short_ma = 50
long_ma = 200

ms = pd.rolling_mean(ohlc.C, short_ma)
ml = pd.rolling_mean(ohlc.C, long_ma)
    
buy = cover = (ms > ml) & (ms.shift() < ml.shift())  # ma cross up
sell = short = (ms < ml) & (ms.shift() > ml.shift())  # ma cross down

bt = pybacktest.Backtest(locals(), 'ma_cross')

import pylab
bt.plot_trades()
pd.rolling_mean(ohlc.C, short_ma).plot(c='green')
pd.rolling_mean(ohlc.C, long_ma).plot(c='blue')
pylab.legend(loc='upper left')
pylab.show()

pybacktest.png Vous pouvez voir que le code est plus court que les deux ci-dessus. La classe qui effectue les backtests est pybacktest.Backtest, mais avant cela, les données chronologiques des signaux d'achat et de vente sont obtenues à l'avance. Il n'y a pas de fonctions telles que le calcul d'indicateurs techniques, et cela ressemble à une bibliothèque qui résume simplement les fonctions.

backtrader

from datetime import datetime
import backtrader as bt
    
class SmaCross(bt.SignalStrategy):
    def __init__(self):
        sma1, sma2 = bt.ind.SMA(period=10), bt.ind.SMA(period=30)
        crossover = bt.ind.CrossOver(sma1, sma2)
        self.signal_add(bt.SIGNAL_LONG, crossover)
    
cerebro = bt.Cerebro()
cerebro.addstrategy(SmaCross)
    
data0 = bt.feeds.YahooFinanceData(dataname='YHOO', fromdate=datetime(2011, 1, 1),
                                  todate=datetime(2012, 12, 31))
cerebro.adddata(data0)
   
cerebro.run()
cerebro.plot()

image

Autre

Il s'agit d'une bibliothèque de trading d'algorithmes python trouvée ailleurs. ultra-finance QSTK

Recommended Posts

bibliothèque de commerce d'algorithmes python
Bibliothèque de messagerie Python 3.6
Bibliothèque Python AST
Note sur la bibliothèque Python
Installer une bibliothèque externe pour python
Bibliothèque d'optimisation Python Pulp
Python - Bitflyer Achat et vente de Bitcoin
Aim Python Library Master (48) Autopep8
Aim Python Library Master (36) json2html
Aim Python Library Master (49) psidialogs
Aim Python Library Master (26) easyxml
Aim python library master (29) table_printer
Espaces de noms Aim Python Library Master (55)
AIM Python Library Master (46) BrowserPlus
Bibliothèque de calcul d'évolution Python Deap (3)
Aim Python Library Master (30) Chronyk
AIM Python Library Master (3) Workalendar
Aim Python Library Master (42) Speedrecorder
Aim Python Library Master (37) Slimurl
Recommandation de la bibliothèque binpacking de python
Aim Python Library Master (44) pynetviz
Aim Python Library Master (8) Rolex
Aim Python Library Master (52) Marktime
Aim Python Library Master (21) hy
Viser les requêtes du maître de bibliothèque python (18)
Windows10: installation de la bibliothèque dlib pour python
Aim Python Library Master (13) Easydev
Aim Python Library Master (20) Pyyaml
Aim Python Library Master (34) simultané
Viser la segmentation de mots du maître de la bibliothèque python
Aim Python Library Master (43) cpmoptimize
Aim Python Library Master (68) pazudorasolver
Aim Python Library Master (58) Faker
Aim Python Library Master (11) nlist
Aimez le maître de la bibliothèque python (38) beautiful_print
Aim Python Library Master (65) Geopy
Aim Python Library Master (2) Vincenty
Journal de bord Aim Python Library Master (59)
Aim Python Library Master (51) Pyautogui
Aim Python Library Master (10) Timeit
Aim Python Library Master (0) Liens
Aim Python Library Master (66) youtube-dl
Remplacer les fonctions de bibliothèque en Python
Aim Python Library Master (53) psutil
Aim Python Library Master (22) HTMltag
Aim Python Library Master (67) httpie
Aim Python Library Master (45) xlsxwriter
Aim Python Library Master (9) WebHelpers
Aim Python Library Master (32) SQL
Aim Python Library Master (60) Colourettu
Viser maître de la bibliothèque python (64) pretty_cron
Aim Python Library Master (56) colorthief
Aim Python Library Master (61) recherche imbriquée
Aim Python Library Master (17) Rangeparser
Aim Python Library Master (47) Deckor
Aim Python Library Master (25) Orderset
Viser le maître de la bibliothèque python (62)
Aim Python Library Master (12) Excel
Bibliothèque de calcul d'évolution Python Deap (2)
Aim Python Library Master (24) combi