[PYTHON] Référence de l'API Quantopian

À propos de cet article

À propos de la référence API de Quantopian, je traduirai la partie qui vous intéresse en japonais au lieu d'un mémo. L'auteur n'est pas bon en anglais, veuillez donc comprendre le texte.

Méthode requise

L'algorithme doit implémenter deux méthodes, ʻinitialize et handle_data. La troisième méthode est before_trading_start`, qui est facultative.

Initialisation

initialize(context)

Appelé une seule fois au début du backtest. L'objet de contexte peut être passé à toutes les autres méthodes de l'algorithme.

context: un dictionnaire vide au moment de l'initialisation. Vous pouvez accéder à la propriété en notation point ou crochet.

Valeur de retour Aucun

Réponse aux événements du marché

handle_data(context, data) Appelé à chaque fois qu'un événement de marché (mise à jour de la barre) se produit.

data: Un dictionnaire indexé par ID de titres (SID), y compris les problèmes d'univers. Représente un instantané de l'univers boursier au moment où cette méthode a été appelée.

context: identique à celui qui apparaît dans initialize. Stocke le statut défini par l'utilisateur et les objets de portefeuille.

Valeur de retour Aucun

Pré-traitement pour le trading

before_trading_start(context, data) Appelé une seule fois par jour avant l'ouverture du marché. Son utilisation principale est d'interroger la base de données sous-jacente de Quantopian pour enquêter sur les données financières des entreprises individuelles. En utilisant les données de base de votre entreprise, vous pouvez définir l'univers boursier à utiliser dans votre algorithme en fonction de plus de 600 critères mesurables.

context: identique à celui qui apparaît dans initialize. Stocke le statut défini par l'utilisateur et les objets de portefeuille.

Valeur de retour Aucun

Autres méthodes

Il existe plusieurs méthodes de classement disponibles dans l'algorithme. Lors de la construction d'une position cible à l'aide d'une fonction telle que order_target, les commandes terminées sont prises en compte, mais les commandes ouvertes ne sont pas prises en compte.

Méthode de commande

Les méthodes de classement qui peuvent être utilisées dans l'algorithme sont indiquées dans le tableau. Les commandes régulières sont passées avec le nombre d'actions, le montant et le pourcentage spécifiés par montant ou pourcentage. L'ordre cible prend en compte la position existante et crée un ordre afin que la position après la commande soit le nombre d'actions, le montant et le pourcentage spécifiés par montant ou pourcentage. Lors de la construction d'une position cible avec un ordre cible, les ordres fermés sont pris en compte, mais les ordres ouverts ne le sont pas.

Type de commande Commande régulière Ordre cible
Spécifiez le nombre d'actions order() order_target()
Spécification du montant order_value() order_target_value()
Spécification de poids order_percent() order_target_percent()

Vous pouvez spécifier le type de commande style = OrderType pour tous les types de commande. La valeur par défaut est MarketOrder, qui vous permet d'utiliser StopOrder, LimitOrder et StopLimitOrder (Limit + Stop).

Spécifiez le nombre d'actions

order(security, amount, style=OrderType) order_target(security, amount, style=OrderType)

order crée une commande pour la marque et la quantité spécifiées. order_target crée un ordre pour que le nombre d'actions après l'ordre soit le nombre cible d'actions. S'il n'y a pas de position existante, une commande pour la quantité totale spécifiée par montant sera créée. S'il existe une position existante, la différence entre le nombre cible d'actions et le nombre d'actions actuellement détenues sera la quantité d'ordre. Par exemple, si vous avez 5 actions AAPL dans votre portefeuille actuel et que vous exécutez order_target (symbol ('AAPL'), 20), un ordre pour la différence de 15 actions sera créé.

sécurité: objet titres montant: spécifiez le nombre d'actions sous forme de nombre entier. Les nombres positifs sont des achats et les nombres négatifs sont des ventes. style: spécifiez le type de commande.

Valeur de retour numéro de commande

Spécification du montant

order_value(security, amount, style=OrderType) order_target_value(security, amount, style=OrderType)

order_value crée une commande avec le montant spécifié. Par exemple, si vous souhaitez acheter AAPL \ $ 1000, spécifiez order_value (symbole ('AAPL'), 1000) et si le prix d'AAPL est \ $ 105, 9 actions seront achetées. Les fractions sont tronquées. order_target_value crée une commande de sorte que le montant après la commande soit le montant cible. S'il n'y a pas de position existante, une commande complète spécifiée par montant sera créée. Si vous avez une position existante, la différence entre le montant cible et le montant de détention actuel sera le montant de la commande. Par exemple, si vous avez \ $ 500 en AAPL dans votre portefeuille actuel, exécuter order_target_value (symbol ('AAPL'), 2000) créera une commande avec une différence de \ $ 1500.

sécurité: objet titres spécifiez le montant avec montant: float. Les nombres positifs sont des achats et les nombres négatifs sont des ventes. style: spécifiez le type de commande.

Valeur de retour numéro de commande

Spécification de poids

order_percent(security, amount, style=OrderType) order_target_percent(security, percent, style=OrderType)

order_percent crée un ordre avec un poids spécifié pour la valeur du portefeuille. La valeur du portefeuille est la valeur de la position et le montant total des liquidités. Le pourcentage doit être spécifié sous forme de fraction. Par exemple, order_percent (symbol ('AAPL'), .5) créera un ordre d'achat pour AAPL avec 50% de la valeur du portefeuille actuel. order_target_percent crée une commande afin que le poids après la commande soit la cible. S'il n'y a pas de poste existant, un ordre complet spécifié par pourcentage sera créé. S'il existe une position existante, la différence entre le poids cible et le poids actuellement détenu sera la quantité commandée. Par exemple, si le portefeuille actuel a un poids AAPL de 5%, l'exécution de order_target_percent (symbol ('AAPL'), 0.1) créera un ordre avec une différence de 5%.

sécurité: objet titres montant: spécifiez le poids. Les nombres positifs sont des achats et les nombres négatifs sont des ventes. pourcentage: spécifiez le poids. Les nombres positifs sont des achats et les nombres négatifs sont des ventes. style: spécifiez le type de commande.

Valeur de retour numéro de commande

Annulation de la commande

cancel_order(order) Annule la commande spécifiée.

commande: ID de commande

Valeur de retour Aucun

Obtenir des informations sur la commande

get_open_orders(sid=sid) Si aucun ID de titres n'est spécifié ou Aucun, un dictionnaire saisi par l'ID de titres est renvoyé. Le dictionnaire stocke une liste d'informations d'ordre pour chaque ID de titres dans l'ordre du plus ancien au plus récent. Si un ID de titres est spécifié, renvoie une liste des ordres ordonnés pour l'ID de titres, triés par plus ancien.

sid: (facultatif) ID de titres

Valeur de retour Dictionnaire ou liste

Obtenir des informations sur la commande

get_order(order) Renvoie les informations de commande spécifiées.

commande: ID de commande

Valeur de retour Renvoie un objet de commande lisible et inscriptible, mais est détruit à la fin de handle_data.

Exécution d'ordres avec les titres Interactive Brokers

Relative Order order(security, amount, style=RelativeOrder(offset, pct_offset, limit_price, exchange)) RelativeOrder est un bon de commande qui vous permet d'exécuter à un prix plus agressif que NBBO (National Best Bid & Offer) [^ 1]. En présentant une offre et une offre plus agressives que NBBO, vous pouvez augmenter les chances que votre commande soit exécutée. Il existe des compensations fixes (par exemple, 2 cents au-dessus et en dessous de l'offre / offre) et des compensations en pourcentage, qui peuvent également être utilisées en combinaison. Les cotations sont automatiquement ajustées en fonction du mouvement du marché.

[^ 1]: ... Parmi les prix offerts par toutes les bourses nationales et les teneurs de marché, celui avec l'Offre et l'Offre qui est le plus favorable à l'investisseur.

Pour utiliser ce formulaire de commande, abonnez-vous aux données de marché d'IB pour les commandes relatives. Sinon, l'IB fournira des devis avec 15 minutes de retard.

Dans le cas d'un ordre d'achat, si la NBB (National Best Bid) augmente, le prix de l'ordre sera automatiquement ajusté à la hausse. Si la BNB baisse, le prix de la commande ne sera pas ajusté. En effet, la baisse de la BNB aurait rendu les commandes existantes plus agressives.

Dans le cas des ordres de vente, si la NBO (National Best Offer) baisse, le prix de la commande sera automatiquement ajusté à la baisse. Si le NBO augmente, le prix de la commande ne sera pas ajusté. En effet, on pense que la hausse de NBO a rendu les commandes existantes plus agressives.

Si vous spécifiez à la fois une compensation fixe et une compensation en pourcentage, l'IB choisira le plus agressif et possible des deux prix. (Plus élevé pour acheter, plus bas pour vendre)

Dans ce bon de commande, vous pouvez également spécifier une limite afin qu'elle ne soit pas exécutée au-dessus du prix spécifié en cas d'achat et en dessous du prix spécifié en cas de vente.

En cas de backtesté avec ce bon de commande, l'ordre sera un simple ordre au marché. Cela fonctionne vraiment comme un ordre relatif uniquement lorsqu'il est exécuté avec un compte IB Real Money.

À l'avenir, lorsque les backtesters prendront en charge ce bon de commande, ils mettront en place un modèle de glissement personnalisé.

Pour utiliser ce bon de commande, vous devez importer RelativeOrder à partir de la bibliothèque brokers.ib.

sécurité: objet titres montant: nombre d'actions commandées. offset: valeur de décalage fixe par rapport au NBB ou au NBO actuel. En unités en dollars. pct_offset: valeur de décalage en pourcentage par rapport au NBB ou au NBO actuel. Spécifiez entre 0 et 100. limit_price: spécifie le prix d'achat le plus élevé ou le prix le plus bas pour la vente. échange: non utilisé. Pour ce bon de commande, IB Live Trading passera une commande auprès de SMART [^ 2]. Ignoré sinon Live Trading. Le routage vers l'échange IEX n'est pas autorisé.

[^ 2]: Un ordre qui sélectionne automatiquement le marché avec le meilleur prix parmi plusieurs marchés tels que SMART ... Smart Order Routing (SOR), les échanges nationaux et privés (PTS), et exécute les ventes.

VWAPBestEffort

python


order(security, amount, style=VWAPBestEffort(limit_price=price1, start_date=date1,
                                             end_date=date2, max_pct_vol=percent,
                                             avoid_liquidity=False, exchange=Exchange))

VWAPBestEffort cherche à approcher le prix moyen pondéré en fonction du volume (VWAP) en subdivisant les commandes en plus petits morceaux et en les exécutant sur une période de temps spécifiée. Ce bon de commande est uniquement disponible pour le trading en direct IB. IB prend en charge le meilleur effort VWAP pour les ordres de marché et à cours limité. L'ordre stop et l'ordre limite + stop ne sont pas pris en charge. Ce bon de commande est compatible avec les bons de commande qui incluent order, order_target, order_value, order_target_percent. Une fois qu'un ordre au marché ou à cours limité a été placé auprès de l'IB, le courtier utilisera l'algorithme du meilleur effort pour exécuter l'ordre.

Avec cette méthode, la commande sera partiellement remplie dans le délai imparti et entièrement remplie à la date de fin. Il est fortement recommandé que l'algorithme vérifie les commandes ouvertes pour que la logique de commande fonctionne.

Vous devez importer la classe VWAPBestEffort à partir de brokers.ib pour passer une commande VWAP.

sécurité: objet titres montant: nombre d'actions commandées. limit_price: (facultatif) Spécifiez le prix limite de la commande avec un nombre fractionnaire. Si Aucun est spécifié, ce sera un ordre au marché. start_date: (facultatif) spécifie la période de début du VWAP. La valeur par défaut est 1 minute après l'heure de l'algorithme. Les ordres BestEffort seront exécutés à partir de la minute suivante de l'IB. end_date: (facultatif) Spécifie la période de fin du VWAP. La valeur par défaut est l'heure de fin de la transaction. max_pct_volume: (facultatif) Spécifie le pourcentage du volume quotidien autorisé à être négocié. La plage possible est de 0,01 à 0,5. La valeur par défaut est 0,25. éviter_liquidity: (facultatif) Empêche les commandes d'atteindre l'enchère / offre. Cela vous aidera à éviter les frais d'acquisition de liquidité [^ 3] et vous obtiendrez une remise sur l'offre de liquidité. Cependant, l'écart par rapport à l'indice de référence peut augmenter. Ce paramètre est une valeur booléenne et vaut par défaut False. exchange: (facultatif) spécifie l'acheminement de la commande. La valeur par défaut pour IB Live Trading est SMART. Ignoré sinon Live Trading. Le routage vers l'échange IEX n'est pas autorisé.

Valeur de retour numéro de commande

pipeline

// Sera résumé séparément

Autres méthodes

Acquisition de données historiques

history(bar_count, frequency, field, ffill=True) Obtenez des données historiques variables pour chaque jour.

bar_count: spécifiez le nombre de barres sous forme d'entier. Le nombre comprend la barre actuelle. fréquence: spécifie la fréquence à laquelle les données sont récupérées. «1d» et «1m» sont disponibles. champ: spécifiez la valeur à obtenir à partir des données historiques. Vous pouvez spécifier l'un des éléments suivants: "prix_open", "prix_fermé", "prix", "élevé", "faible" et "volume". ffill: spécifie s'il faut utiliser les données précédentes pour remplir les données historiques manquantes. La valeur par défaut est True. Si la valeur est False, np.nan sera renvoyé pour les données de prix et 0 pour le volume.

Valeur de retour Au format pandas.DataFrame, le nombre de lignes est bar_count, la valeur est la valeur spécifiée par field et column est l'ID de sécurité de l'univers actuel.

Enregistrer sur le graphique

record(series1_name=value1, series2_name=value2, ...) record('series1_name', value1, 'series2_name', value2, ...) Enregistre la valeur donnée par l'argument. Produit un graphique pour tout le contenu enregistré. valeurs: vous pouvez définir jusqu'à 5 mots-clés et valeurs.

Valeur de retour Aucun

Traitement d'exécution périodique

schedule_function(func=myfunc, date_rule=date_rule, time_rule=time_rule, half_days=True) Exécute la fonction automatiquement selon un calendrier prédéfini. Il ne peut être appelé que depuis initialize.

func: définit le nom de la fonction. La fonction doit avoir un contexte et des données comme paramètres. date_rule: spécifie la partie date de la planification. Les dates peuvent être décalées quotidiennement, hebdomadairement ou à partir du début ou de la fin de chaque mois. La valeur par défaut est quotidienne et le décalage est de 0. En d'autres termes, si vous ne spécifiez pas de règle de date, la fonction s'exécute quotidiennement. Les règles applicables sont les suivantes.

time_rule: spécifie la partie horaire de la planification. L'heure peut être spécifiée comme un décalage par rapport au début ou à la fin du début ou de la fin de la transaction, respectivement. La valeur par défaut est au début de la transaction et 1 minute avant la fin de la transaction. Les règles applicables sont les suivantes.

half_days: valeur booléenne qui spécifie le comportement de la demi-journée Hitachi. Si la valeur est False, la fonction ne sera pas appelée le jour de Semi-Hitachi. La valeur par défaut est True.

Valeur de retour Aucun

Obtenez le symbole boursier

set_symbol_lookup_date('YYYY-MM-DD') Spécifiez une date et faites du symbole boursier en vigueur à ce moment l'univers. Doit être exécuté dans initialize avant d'appeler la fonction symbole ou symboles.

date: chaîne de format AAAA-MM-JJ

Valeur de retour Aucun

Acquisition d'objet titres

sid(int) Obtenez l'objet titres en spécifiant l'ID de titres.

int: ID de titres

Valeur de retour Objet titres

symbol('symbol1') Obtenez l'objet titres en spécifiant le symbole boursier.

'symbol1': symbole boursier

Valeur de retour Objet titres

symbols('symbol1', 'symbol2', ...) Obtient une liste d'objets de titres en spécifiant des symboles boursiers séparés par des virgules.

'symbol1', 'symbol2', ...: symbole boursier

Valeur de retour Liste des objets titres

Mise à jour de l'univers

update_universe(sids) Mettez à jour l'univers boursier. Appelé before_trading_start.

sids: liste des ID de titres

Valeur de retour Aucun

Recommended Posts

Référence de l'API Quantopian
Liste de référence de l'API xlwings