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.
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.
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.
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.
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.
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.
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.
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,
É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.
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.
URL de la version officielle de PostScript 2018/1/11:
Recommended Posts