Développons un algorithme d'investissement avec Python 2

Jusqu'à la dernière fois

Dernière fois a simplement affiché le cours de l'action de 9984 (Softbank). Cette fois, calculons la moyenne mobile du cours de l'action.

Qu'est-ce qu'une moyenne mobile?

Wikipédia: Moyenne mobile

Il existe différents types de moyennes mobiles, mais dans le cas de moyennes mobiles simples, si $ p_t $ est le prix $ t $ jours auparavant, la moyenne mobile sur n jours sera la moyenne des cours de clôture des n derniers jours.

SMA_t = \frac{p_t + p_{t-1} + \ldots + p_{t - \left( n - 1 \right)}}{n};t \geq n - 1

La moyenne mobile est l'un des indicateurs les plus élémentaires de l'analyse technique des cours des actions et est utilisée pour juger des conditions telles que la croix d'or et la croix morte. La croix d'or dit «achetez-le» lorsque la moyenne mobile sur 5 jours dépasse la moyenne mobile sur 25 jours, et la croix morte est le contraire.

[Wikipédia: ligne moyenne mobile](https://ja.wikipedia.org/wiki/ligne moyenne mobile)

Cette fois, calculons la moyenne mobile avec le cours de clôture après ajustement du cours de l'action.

code

Du coup, c'est un code.

    def _mavg_signal(data):
        m5 = data["close_price_adj"].fillna(method='ffill').rolling(window=5, center=False).mean()
        m25 = data["close_price_adj"].fillna(method='ffill').rolling(window=25, center=False).mean()
        return {
            "mavg_5:price": m5,
            "mavg_25:price": m25,
        }

    #Enregistrement du signal
    ctx.regist_signal("mavg_signal", _mavg_signal)

Dans ʻinitialize () , enregistrez la fonction _mavg_signal avec ctx.regist_signal () `.

Dans _mavg_signal (), deux types de calcul sont effectués: moyenne mobile sur 5 jours et moyenne mobile sur 25 jours. Le paramètre «data» est de type pandas.Panel et a une structure tridimensionnelle. La structure tridimensionnelle est

axis-0 (items): éléments de données (close_price, volume, etc.) axis-1 (majeur): Date (type datetime.datetime) axis-2 (mineur): nom de marque (type d'objet symbole) Cité de https://quantx.io/handbook/ja/#initialize

Il semble qu'il ait une structure comme celle-ci. C'est difficile à imaginer, mais cela peut être plus facile à comprendre si vous pensez comme Excel (3D avec "ligne, colonne, feuille"?) L'image interne réelle est écrite dans handbook, mais après avoir décidé de l'élément de données de axis-0 et l'avoir déposé en 2D, pandas La moyenne mobile est calculée par la fonction de .DataFrame et renvoyée comme valeur de dict comme valeur de retour.

Essayez de courir

スクリーンショット 2017-06-15 10.38.18.png

C'est sorti! mavg_5 est la moyenne mobile sur 5 jours et mavg_25 est la moyenne mobile sur 25 jours. La moyenne mobile sur 5 jours n'est pas très différente du cours de clôture (close_price_adj), donc c'est difficile à voir.

Pouvez-vous vraiment calculer?

Je me demande si je peux vraiment le calculer, alors je vais vérifier le résultat réel du calcul sur l'onglet appelé RawData sur le graphique.

スクリーンショット 2017-06-15 11.08.43.png

La valeur de la moyenne mobile sur 5 jours du 10/01/2014 est $ \ frac {8880 + 8920 + 8990 + 8920 + 9020} 5 = 8946 $, il semble donc que cela puisse être calculé! Mavg_5: le prix est 5 Puisqu'il s'agit d'une moyenne mobile quotidienne, elle ne peut être calculée que le 4e jour après le début du test de retour, elle est donc vide.

Axe du graphique

Dans _mavg_signal (), qui calcule la moyenne mobile,

        return {
            "mavg_5:price": m5,
            "mavg_25:price": m25,
        }

Retourné le dict. La valeur de dict est pandas.DataFrame qui est le résultat du calcul de la moyenne mobile.

La clé est le nom de l'axe du graphique, mais le point est «: price», qui spécifie l'échelle dans le graphique. : price est une échelle prédéfinie, qui est l'échelle de prix de l'action du stock. En rendant les axes de mavg_5 et mavg_25 identiques, il est possible de comparer sur le graphique pour la première fois.

à titre d'essai,

        return {
            "mavg_5:mavg_5": m5,
            "mavg_25:mavg_25": m25,
        }

Avec ce sentiment, quand j'essaye de l'exécuter,

スクリーンショット 2017-06-15 10.48.22.png

Étant donné que l'échelle de l'axe vertical de chaque valeur moyenne mobile est différente, le degré de chevauchement des graphiques a légèrement changé (difficile à comprendre). Par conséquent, il est difficile de juger la croix d'or ou la croix morte à partir de ce graphique, alors alignons les axes.

Résumé

Ceci est le code pour cette fois.

def initialize(ctx):
    ctx.configure(
      target="jp.stock.daily",
      channels={
        "jp.stock": {
          "symbols": [ "jp.stock.9984" ],
          "columns": [ "close_price_adj" ]
        }
      }
    )

    def _mavg_signal(data):
        m5 = data["close_price_adj"].fillna(method='ffill').rolling(window=5, center=False).mean()
        m25 = data["close_price_adj"].fillna(method='ffill').rolling(window=25, center=False).mean()
        return {
            "mavg_5:price": m5,
            "mavg_25:price": m25,
        }

    #Enregistrement du signal
    ctx.regist_signal("mavg_signal", _mavg_signal)

def handle_signals(ctx, date, current):
    '''
    current: pd.DataFrame
    '''
    pass

La prochaine fois, j'essaierai de calculer et d'afficher des indicateurs plus compliqués.

Informations de référence

URL de la version officielle de PostScript 2018/1/11:

Recommended Posts

Développons un algorithme d'investissement avec Python 2
Développons un algorithme d'investissement avec Python 1
Algorithme génétique en python
Algorithme en Python (méthode Bellman-Ford, Bellman-Ford)
Algorithme en Python (Dijkstra)
Algorithme en Python (jugement premier)
Reproduire la méthode de division mutuelle euclidienne en Python
Algorithme en Python (dichotomie)
Implémenter l'algorithme de Dijkstra en python
Comment développer en Python
Algorithme en Python (recherche de priorité de largeur, bfs)
Algorithme de tri et implémentation en Python
Ecrire un serveur HTTP / 2 en Python
Algorithme Python
Ecrire des algorithmes A * (A-star) en Python
Algorithme en Python (recherche de priorité en profondeur, dfs)
Implémentation d'un algorithme simple en Python 2
Algorithme (arborescence de segments) en Python (s'entraîner)
Python in est aussi un opérateur
Exécutez un algorithme simple en Python
Une alternative à `pause` en Python
Livre Ali en python: méthode Dyxtra Sec.2-5
Algorithme en Python (ABC 146 C Dichotomy
Développement de slack bot avec python en utilisant chat.postMessage
Ecrire une méthode de cupidité simple en Python
Algorithme d'alignement par méthode d'insertion en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Mémorandum Python (algorithme)
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv