Comparez le retour nocturne et le retour diurne du cours moyen de l'action Nikkei avec Python

Introduction.

Un mois après le choc corona qui a licencié les investisseurs du monde entier, de plus en plus de voix se font entendre que la première vague a atteint son point bas. image.png Au fait, ce qui effraie les investisseurs, c'est la «nuit» où ils dorment. Même si la négociation à la Bourse de Tokyo est fermée, les Nikkei Average Futures sont activement négociés à la séance nocturne de la Bourse d'Osaka (appelée OSE) et au Chicago Mercantile Exchange à l'heure de Londres et à l'heure de New York. Il n'est pas rare que le cours de l'action s'effondre la nuit sans le savoir ... au réveil le matin ** "Ohagyaa!" **. Je me posais la question ici, mais pour les «investisseurs à moyen et long terme» qui reportent leurs positions la nuit, le marché actuel peut être un creux et un excellent point de négociation, mais les day traders qui ne reportent pas leurs positions la nuit. Le monde dans lequel vous pouvez voir peut être complètement différent. Cette fois, je téléchargerai les données horaires du cours moyen de l'action Nikkei à l'aide de l'API python ** MT5 **, qui est utilisée par les day traders du monde entier, et j'analyserai la relation entre le retour d'ouverture nocturne et le retour diurne du cours moyen de l'action Nikkei. J'ai fait.

Cours moyen de l'action Nikkei au 27 mars 2020

Comme mentionné au début, les intervalles de temps perçus par les investisseurs à moyen et long terme et les day traders sont complètement différents, de sorte que l'image de la «hausse» du cours moyen de l'action Nikkei le 27 mars 2020 est également très différente. En particulier, il n'est pas rare que les day traders voient le jour comme "GU (écart en hausse) et en gros plan", même s'il s'agissait d'une "hausse" pour les investisseurs à moyen et long terme. Il n'y a pas.

Cours moyen de l'action Nikkei au 27 mars 2020, vu par les investisseurs à moyen et long terme

Du cours de clôture de 18 832,21 yens la veille au cours de clôture de 19 389,43 yens de la journée ** Une forte augmentation de près de 600 yens! ** ** image.png

Prix moyen de l'action Nikkei le 27 mars 2020, tel que vu par le trader de date

À partir du cours d'ouverture de 19021,97 yens de la journée, la fin de la séance avant était de 18901,46 yens, soit une baisse de près de ▲ 100 yens, puis le marché arrière a commencé à 19045,80 yens, et à 15h00 lorsque le day trader a fermé la position, il a augmenté d'environ +100 yens à 19176,30 yens. ** Ce fut une journée presque plate pour les day traders. ** ** image.png

Analysons avec python!

Saviez-vous ce que vous souhaitez analyser à partir de l'exemple ci-dessus? Ensuite, téléchargez immédiatement les données horaires des 3 dernières années (= 24 heures x 252 jours ouvrables / an x 3 ans) auprès du courtier via MT5, et ** close return (= clôture le jour précédent → clôture le jour) ** et * * Examinons la relation entre les retours de jour (= proche du jour → clôture le jour) **

# set time index to raw bar data
def time_set(rate):
    rate_time = rate.dropna(how='all', axis='index').reset_index()
    rate_time['time'] = pd.to_datetime(rate_time['time'], unit='s')
    rate_time = rate_time.set_index('time')
    return rate_time

# specify symbol to research
symbol = 'JP225Cash'

# get bar data from MT5
mt5.initialize()
_rate = pd.DataFrame(mt5.copy_rates_from_pos(symbol, mt5.TIMEFRAME_H1, 0, 24 * 252 * 3)).set_index('time')
mt5.shutdown()

rate = time_set(_rate)
# XM: GMT+3, JP: GMT+9, diff = 6
rate.index = [x + relativedelta(hours=6) for x in rate.index]
rate_open = rate[rate.index.hour == 9]['open']
rate_close = rate[rate.index.hour == 15]['close']
rate_close.index = [x - relativedelta(hours=6) for x in rate_close.index]
rate_TK = pd.concat([rate_open, rate_close], axis='columns')
rate_TK.columns = ['open', 'close']
rate_TK['close to open'] = (rate_TK['open'] / rate_TK['close'].shift(1) - 1) * 100
rate_TK['open to close'] = (rate_TK['close'] / rate_TK['open'] - 1) * 100
rate_TK['close to close'] = (rate_TK['close'] / rate_TK['close'].shift(1) - 1) * 100
rate_TK = rate_TK.dropna()

sns.jointplot('close to open', 'open to close', rate_TK)
plt.show()

Résultat de l'analyse (période entière)

L'axe horizontal est le retour le plus proche et l'axe vertical est le retour de fermeture. image.png Tout d'abord, vous pouvez voir à peu près trois tendances.

  1. Aucune tendance n'est observée dans la plage de ± 1σ (** marche aléatoire **).
  2. Si les deux gammes (± 1σ à ± 2σ) au milieu entourées par le cadre rouge ont un grand rendement positif ou négatif, le rendement diurne fluctue également (** clustering de volatilité **).
  3. Lorsque le retour est en chute libre dans la plage la plus à gauche (-2σ ou moins) entouré par le cadre rouge et le marqueur jaune, le retour de jour est fortement positif (** pistolet Nichigin? **) Si vous voulez faire une stratégie, vous devriez viser le canon japonais en argent en 3. Cependant, il y a trop peu d'échantillons (seulement deux fois au cours des 3 dernières années), et la reproductibilité reste incertaine. Cependant, le contenu du post précédent (prédire l'indice boursier complet de Shanghai immédiatement après le crash avec python) a quelque chose en commun (il y a une répulsion plus ou moins autonome après avoir trop baissé)!

En passant, après avoir analysé jusqu'à présent, il semble que le public entendra une telle voix. ** "N'y a-t-il pas une grande différence de signification entre la tendance haussière et la tendance baissière à moyen terme?" ** ** "La montée en flèche de la tendance baissière (la situation actuelle) n'est-elle pas une forte hausse en raison de ventes rentables?" ** Cela peut être vrai. Faisons la même analyse pour deux cas où le rendement moyen sur 3 mois est positif (tendance haussière) et négatif (tendance baissière).

# calc 3M average return
rate_TK['3M Mean'] = rate_TK['close to close'].rolling(63).mean()
# split 2 cases: up trend / down trend
rate_TK_3MUP = rate_TK[rate_TK['3M Mean'] >= 0]
rate_TK_3MDN = rate_TK[rate_TK['3M Mean'] < 0]
# plot
sns.jointplot('close to open', 'open to close', rate_TK_3MUP)
plt.show()
sns.jointplot('close to open', 'open to close', rate_TK_3MDN)
plt.show()

Résultat de l'analyse (période de tendance à la hausse limitée)

Le décor a beaucoup changé! Je veux dire, il n'y a pas de tendance claire. En d'autres termes, il est difficile de prédire les rendements de jour même si vous regardez les rendements de clôture. ** Il y a des rumeurs selon lesquelles le marché chuchote sur le marché, comme "Le cours de l'action baisse à l'heure de Tokyo (= moyenne Nikkei) et augmente à l'heure de New York (= Dow)", mais en utilisant les données réelles de cette manière Si vous l'analysez, vous constaterez que ce n'est pas si simple. ** ** Et, en fait, dans la stratégie «heure de Tokyo ⇔ anomalie horaire de New York», du moins sur le marché haussier, il semble difficile de réaliser un profit en ne négociant que l'intraday de l'heure de Tokyo sans reporter la position la nuit. image.png

Résultat de l'analyse (période de tendance baissière limitée)

Les résultats observés sur toute la période sont présentés ici. Après tout, ** Le day trader aux gros revenus ne va-t-il pas à la chasse sans manquer la répulsion féroce à la cheminée dans la tendance baissière? ** ** image.png

En premier lieu, dans quelle mesure la hausse du marché a-t-elle contribué à l'heure de Tokyo?

Considérons ici deux modèles d'investissement.

  1. ACHETEZ ET CONSERVEZ le cours moyen de l'action Nikkei pendant 3 ans (appelons cela ** Stratégie d'achat économique mondiale **).
  2. Répétez l'achat et la détention du cours moyen de l'action Nikkei pour l'heure de Tokyo seulement pendant 3 ans (appelons cela ** stratégie d'achat et de détention des Abenomics **). C'est une façon assez grossière de penser qu'elle reflète l'économie japonaise parce que c'est le mouvement de l'heure de Tokyo, mais je n'ai pas l'intention de mesurer sérieusement l'effet des mesures économiques du Japon ici, mais ** Les day traders sont limités à l'heure de Tokyo. Je voudrais savoir à quel point je peux profiter des avantages de la hausse du prix global du marché lorsque j'achète et détiens le cours moyen de l'action Nikkei. Si la hausse des cours des actions est due à la reprise de l'économie japonaise, j'aimerais que vous la releviez dans la stratégie d'achat et de détention des Abenomics en 2.
# Global v.s. Abenomics
Buy_and_Hold = ((1 + rate_TK['close to close'] / 100).cumprod() - 1) * 100
Tokyo_time = ((1 + rate_TK['open to close'] / 100).cumprod() - 1) * 100

# plot
Buy_and_Hold.plot(legend='B&H')
Tokyo_time.plot(legend='TK time B&H')
(Tokyo_time - Buy_and_Hold).plot(kind='area', stacked=False)
plt.title('cumulative return')
plt.show()

Voici un graphique du rendement cumulé de chaque stratégie calculé avec le code ci-dessus. image.png Le bleu proche de la clôture est le retour cumulé de la stratégie d'achat et de conservation économique mondiale, l'orange ouvert pour fermer est le retour cumulé de la stratégie d'achat et de maintien avenomics, et la zone verte est la différence entre les deux rendements stratégiques (Avenomics return-world economic return). Si vous regardez les choses de cette façon, vous pouvez voir pourquoi la stratégie d'achat et de conservation des Abenomics n'est pas abandonnée, ou ** N'est-il pas beaucoup mieux d'acheter uniquement le jour que de le reporter la nuit? N'est-il pas bon d'éviter les risques? ** ** De plus, au cours des trois dernières années, la majeure partie de la hausse du cours moyen de l'action Nikkei a été provoquée la nuit, mais au cours de la dernière année, la différence s'est progressivement rétrécie. ** Dans le choc corona, la stratégie d'achat de l'avenomique est finalement l'économie mondiale. Vous pouvez voir que la stratégie d'achat a été largement surperformée **! M. Abe, je vais le faire (?).

Résumé

Recommended Posts

Comparez le retour nocturne et le retour diurne du cours moyen de l'action Nikkei avec Python
Tracez l'indice boursier moyen Nikkei avec des pandas
Un mémo contenant Python2.7 et Python3 dans CentOS
Télécharger des fichiers sur le Web avec Python
Mettez Cabocha 0.68 dans Windows et essayez d'analyser la dépendance avec Python
Installez OpenCV 4.0 et Python 3.7 sur Windows 10 avec Anaconda
Comparez la vitesse d'ajout et de carte Python
Comparez les vitesses d'analyse XML avec Python et Go
Introduction à Python avec Atom (en route)
Archivez et compressez tout le répertoire avec python
Obtenez le cours de l'action d'une entreprise japonaise avec Python et faites un graphique
[CGI] Exécutez le programme Python du serveur avec Vue.js + axios et obtenez les données de sortie
J'ai essayé de comparer la vitesse de traitement avec dplyr de R et pandas de Python
Remarques sur le traitement d'images HDR et RAW avec Python
Installez le sélénium sur votre Mac et essayez-le avec python
Visualisez la gamme d'insertions internes et externes avec python
Suivi automatique sur Twitter avec python et sélénium! (RPA)
Obtenez des commentaires sur youtube Live avec [python] et [pytchat]!
Informations pour contrôler les moteurs avec Python sur RaspberryPi
Installez la dernière version stable de Python avec pyenv (à la fois 2 et 3)
E-mail hipchat avec postfix, fluentd et python sur Azure
Automatisez Chrome avec Python et Selenium sur votre Chromebook
Installez django sur python + anaconda et démarrez le serveur
Récupérez la chaîne correspondante dans l'expression régulière et réutilisez-la lors du remplacement sur Python3
La première intelligence artificielle. Tensorflow sur CentOS7.0. Construit séparément pour les séries python3.5 et python2.7 avec virtualenv.
Comment gratter le cours d'une action individuelle du site Web Nikkei Shimbun avec Python
Mettez Ubuntu dans Raspi, mettez Docker dessus et contrôlez GPIO avec python à partir du conteneur
Essayez d'utiliser l'API Twitter rapidement et facilement avec Python
Comparez HTTP GET / POST avec cURL (commande) et Python (programmation)
J'ai évalué la stratégie de négociation du système boursier avec Python.
Usurpation d'adresse IP à l'aide de tor sur macOS et vérification avec python
Tester Python avec Miniconda dans un environnement OS X et Linux avec travis-ci
Accédez au serveur SQL de l'hôte avec python27 / pyodbc sur le conteneur
Résolvez le livre en spirale (algorithme et structure de données) avec python!
Comparez les mots de passe de connexion par hachage avec hashlib de la bibliothèque standard
Remarques sur le déploiement de pyenv avec Homebrew et la gestion des versions de Python
Enregistrer des images sur le Web sur un lecteur avec Python (Colab)
Jouez avec le mécanisme de mot de passe de GitHub Webhook et Python
[Analyse du cours de l'action] Apprentissage des pandas moyens Nikkei (005: Regroupement par année / année-confirmation des informations statistiques)
Le cours de l'action a chuté avec "nouvelle Corona"? J'ai essayé d'obtenir le cours moyen de l'action Nikkei par grattage Web
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Python et matériel - Utilisation de RS232C avec Python -
Python sur Ruby et Ruby en colère sur Python
Comparons les types de tableaux Python
Gratter la moyenne du Nikkei avec le dramaturge-python
Appelez l'API avec python3.
python avec pyenv et venv
Obtenez des stocks avec Python
Fonctionne avec Python et R
Jeu de vie avec Python [je l'ai fait] (sur terminal et Tkinter)
J'ai comparé la vitesse de Hash avec Topaz, Ruby et Python
Comment est le progrès? Continuons le boom ?? en Python
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
Premiers pas avec le framework Python Django sur Mac OS X
Créez des rendez-vous pour le concours AtCoder sur Google Agenda avec Python et GAS
Créez un environnement Python 2.7 64 bits avec TDM-GCC et MinGW-w64 sous Windows 7
Erreur et solution lors de l'installation de python3 avec homebrew sur mac (catalina 10.15)
IME On / Off est affiché par LED en coopération avec Python et Arduino
Installez rapidement OpenCV2.4 (+ python) sur OS X et essayez l'exemple
Créer une API REST qui renvoie l'heure actuelle avec Python3 + Falcon