Trading système commençant par Python 3: investissement et risque

Cet article est écrit pour les débutants en investissement (en actions).

Lorsque vous avez peu d'expérience en investissement

Pour cette raison, lorsque vous achetez des actions et que le prix baisse, vous avez tendance à les vendre immédiatement. Et à cause de cette erreur maintes et maintes fois, la perte augmente. Si vous avez peu d'expérience, le cours de l'action baissera trop peu importe le nombre d'actions que vous choisissez et le moment de l'achat et de la vente. Parfois, cela fonctionne depuis le début, mais c'est juste de la chance et ne dure pas longtemps.

Par conséquent, il est important d'analyser les données sur les cours des actions. Et les résultats de l'analyse basée sur les données de divers marchés boursiers dans le monde sont simples.

Personne n'est ravi de la baisse du prix des actions qu'ils ont achetées. C'est difficile pour quiconque de faire ça. Par conséquent, même si vous perdez de l'argent, vous avez tendance à le vendre. Ceux qui ont ce genre d'expérience doivent repenser la manière de gérer les risques. Réduisons le risque. Vous devriez investir dans des actions avec moins de fluctuations de prix. Si vous répétez toujours la même expérience, l'achat d'actions peut ne pas être approprié. Il vaut peut-être mieux investir dans des obligations avec moins de fluctuations de prix. Bien sûr, les liens tomberont également, vous pourriez donc avoir des expériences similaires. Dans de tels cas, choisir des obligations avec moins de fluctuations de prix ou des dépôts en espèces peut être plus approprié. Cette tendance des êtres humains ne peut être surmontée par l'acquisition d'expérience et de connaissances. Cela commence par vous connaître.

Si le prix d'une action baisse et que vous continuez à la détenir même si vous êtes ravi, vous devez examiner de plus près la nature de l'action. Parce que c'est votre tolérance au risque. L'une des lignes directrices à l'époque est la rentabilité et la volatilité des prix. La rentabilité est une mesure de la hausse des cours des actions dans le passé. La volatilité des prix est une mesure de la fluctuation du cours des actions.

Apprenons en fait à analyser les données. Python est utile pour l'analyse des données. Nous vous recommandons d'installer le bloc-notes Jupyter à ce moment-là. Cet article est écrit dans le notebook Jupyter. De plus, le code du programme est écrit en supposant le notebook Jupyter. Vous avez également besoin d'un pandas-datareader. Pour l'installation de jupyter notebook, reportez-vous à System trade starting with Python3: Installing Jupyter notebook. Il y a aussi des instructions pour installer pandas-datareader ici.

Veuillez vous référer à J'ai téléchargé le cours de l'action de Yahoo Finance US pour savoir comment utiliser pandas-datareader.

Objectif d'investissement

La sélection de titres est très difficile pour les débutants. Parfois, l'entreprise que vous avez achetée fait faillite. Alors regardons d'abord l'indice boursier, qui se compose de diverses actions. Lors de l'analyse des cours boursiers à long terme, il est essentiel de prendre le logarithme du cours boursier. Pour plus d'informations, reportez-vous à System Trading Starting with Python 3: The Role of Logistics in System Trading.

FNB (fiducie de placement cotée)

Lorsque vous investissez dans un indice boursier, les ETF (fonds d'investissement cotés) qui peuvent être achetés et vendus à tout moment et dont les prix sont très transparents sont les bases.

Dow Jones

L'ETF du cours moyen de l'action Dow, qui représente les États-Unis avec la plus longue histoire, est «DIA».

%matplotlib inline 
import matplotlib.pyplot as plt #Bibliothèque de dessins
import pandas_datareader.data as web #Bibliothèque de téléchargement de données
import numpy as np
import pandas as pd
import seaborn as sns
tsd = web.DataReader("dia","yahoo","1980/1/1").dropna()#jpy
np.log(tsd.loc[:,'Adj Close']).plot()

image.png

NASDAQ 100

L'ETF de l'indice boursier du NASDAQ, un marché boursier émergent qui a réalisé une croissance économique aux États-Unis, est «QQQ».

tsd = web.DataReader("qqq","yahoo","1980/1/1").dropna()#jpy
np.log(tsd.loc[:,'Adj Close']).plot()

image.png

S&P500 L'indice boursier de référence du fonds de pension américain est le S & P500 et son ETF est «SPY».

tsd = web.DataReader("spy","yahoo","1980/1/1").dropna()#jpy
np.log(tsd.loc[:,'Adj Close']).plot()

image.png

Vous pouvez voir qu'ils augmentent tous à long terme.

Autres ETF

ETF=['DIA','SPY','QQQ','IBB','XLV','IWM','EEM','EFA','XLP','XLY','ITB','XLU','XLF',
     'VGT','VT','FDN','IWO','IWN','IYF','XLK','XOP','USMV'] #ETF d'indice boursier
ETF2=['BAB','GLD','VNQ','SCHH','IYR','AGG','BND','LQD','VCSH','VCIT','JNK'] #ETF autres que les indices boursiers

Saisir le degré d'excitation par le rapport risque / rendement

Quel genre de mouvement le cours de l'action vous excite-t-il? Il est important de connaître votre propre modèle. Sachant que c'est le point de départ de l'investissement en actions. Vous ne pouvez laisser personne d'autre vous enseigner ce schéma. Vous n'avez pas d'autre choix que de le trouver vous-même. Et jusqu'à ce que vous trouviez ce modèle, vous devriez investir le moins possible.

Permettez-moi de vous présenter un outil pour trouver ce modèle. C'est le rapport risque / rendement. Divisez le rendement annualisé par l'écart-type annualisé (volatilité). Voyons en fait le mouvement après le choc Lehman.

m=[]#Enregistre les données moyennes annualisées pour chaque stock
v=[]#Enregistrer l'écart-type annualisé de chaque stock
PORT=ETF
j=0
for i in range(len(PORT)):
    tsd=web.DataReader(PORT[i], "yahoo",'1980/1/1')#Télécharger les données de cours de bourse
    tsd2=tsd.loc['2010/1/1':]#Après le choc Lehman
    tsd3=tsd.loc['1980/1/1':'2009/12/31']#Avant le choc Lehman
    if len(tsd3)>1000:
        lntsd=np.log(tsd2.iloc[:,5])#Prenez le logarithme naturel des données
        m.append((lntsd.diff().dropna().mean()+1)**250-1)
        v.append(lntsd.diff().dropna().std()*np.sqrt(250))
        print('{0: 03d}'.format(j+1),'{0:7s}'.format(PORT[i]),'moyenne{0:5.2f}'.format(m[j]),
          'Volatilité{0:5.2f}'.format(v[j]),'m/v {0:5.2f}'.format(m[j]/v[j]),
          'Le nombre de données{0:10d}'.format(len(tsd)))
        j+=1
v_m=pd.DataFrame({'v':v,'m':m})
plt.scatter(v_m.v,v_m.m,color="g")
plt.ylabel('return')
plt.xlabel('volatility')
01 DIA moyenne 0.12 Volatilité 0.17 m/v  0.68 Nombre de données 5710
02 SPY Moyenne 0.13 Volatilité 0.17 m/v  0.73 Nombre de données 6966
03 Moyenne QQQ 0.19 Volatilité 0.20 m/v  0.97 Nombre de données 5424
04 Moyenne IBB 0.16 Volatilité 0.24 m/v  0.65 Nombre de données 4937
05 Moyenne XLV 0.14 Volatilité 0.17 m/v  0.80 Nombre de données 5476
06 Moyenne IWM 0.10 Volatilité 0.22 m/v  0.43 Nombre de données 5116
07 Moyenne EEM 0.02 Volatilité 0.23 m/v  0.09 Nombre de données 4395
08 Moyenne EPT 0.04 Volatilité 0.19 m/v  0.20 Nombre de données 4801
09 Moyenne XLP 0.11 Volatilité 0.14 m/v  0.80 Nombre de données 5476
10 Moyenne XLY 0.17 Volatilité 0.19 m/v  0.93 Nombre de données 5476
11 Moyenne XLU 0.10 Volatilité 0.18 m/v  0.57 Nombre de données 5476
12 Moyenne XLF 0.11 Volatilité 0.25 m/v  0.45 Nombre de données 5476
13 VGT moyenne 0.18 Volatilité 0.21 m/v  0.88 Nombre de données 4194
14 Moyenne IWO 0.12 Volatilité 0.23 m/v  0.53 Nombre de données 5073
15 IWN moyenne 0.07 Volatilité 0.22 m/v  0.30 Nombre de données 5073
16 Moyenne IYF 0.09 Volatilité 0.21 m/v  0.42 Nombre de données 5116
17 Moyenne XLK 0.18 Volatilité 0.20 m/v  0.88 Nombre de données 5476

image.png

Ensuite, jetons un coup d'œil avant le choc Lehman.

m2=[]#Enregistre les données moyennes annualisées pour chaque stock
v2=[]#Enregistrer l'écart-type annualisé de chaque stock
PORT=ETF
j=0
for i in range(len(PORT)):
    tsd=web.DataReader(PORT[i], "yahoo",'1980/1/1')#Télécharger les données de cours de bourse
    tsd2=tsd.loc['1980/1/1':'2009/12/31']#Télécharger les données de cours de bourse
    if len(tsd2)>1000:
        lntsd=np.log(tsd2.iloc[:,5])#Prenez le logarithme naturel des données
        m2.append((lntsd.diff().dropna().mean()+1)**250-1)
        v2.append(lntsd.diff().dropna().std()*np.sqrt(250))
        print('{0: 03d}'.format(j+1),'{0:7s}'.format(PORT[i]),'moyenne{0:5.2f}'.format(m2[j]),
          'Volatilité{0:5.2f}'.format(v2[j]),'m/v {0:5.2f}'.format(m2[j]/v2[j]),
          'Le nombre de données{0:10d}'.format(len(tsd2)))
        j+=1
v_m2=pd.DataFrame({'v2':v2,'m2':m2})
plt.scatter(v_m2.v2,v_m2.m2,color="g")
plt.ylabel('return')
plt.xlabel('volatility')
01 DIA moyenne 0.04 Volatilité 0.21 m/v  0.21 Nombre de données 3008
02 SPY Moyenne 0.08 Volatilité 0.20 m/v  0.38 Nombre de données 4264
03 QQQ moyenne-0.01 Volatilité 0.34 m/v -0.02 Nombre de données 2722
04 Moyenne IBB-0.03 Volatilité 0.30 m/v -0.09 Nombre de données 2235
05 Moyenne XLV 0.03 Volatilité 0.20 m/v  0.16 Nombre de données 2774
06 Moyenne IWM 0.05 Volatilité 0.26 m/v  0.17 Nombre de données 2414
07 Moyenne EEM 0.23 Volatilité 0.37 m/v  0.62 Nombre de données 1693
08 Moyenne EPT 0.05 Volatilité 0.25 m/v  0.21 Nombre de données 2099
09 Moyenne XLP 0.02 Volatilité 0.17 m/v  0.11 Nombre de données 2774
10 Moyenne XLY 0.02 Volatilité 0.26 m/v  0.09 Nombre de données 2774
11 Moyenne XLU 0.04 Volatilité 0.22 m/v  0.18 Nombre de données 2774
12 XLF en moyenne-0.02 Volatilité 0.36 m/v -0.06 Nombre de données 2774
13 VGT moyenne 0.02 Volatilité 0.24 m/v  0.11 Nombre de données 1492
14 IWO en moyenne-0.01 Volatilité 0.28 m/v -0.02 Nombre de données 2371
15 IWN moyenne 0.08 Volatilité 0.26 m/v  0.30 Nombre de données 2371
16 IYF en moyenne-0.04 Volatilité 0.33 m/v -0.11 Nombre de données 2414
17 XLK en moyenne-0.02 Volatilité 0.31 m/v -0.07 Nombre de données 2774

image.png

Le ratio a tendance à être relativement plus élevé après le choc de Lehman.

Ensuite, comparons les deux périodes.

plt.scatter(v_m.m/v_m.v,v_m2.m2/v_m2.v2)
plt.ylabel('2009-now')
plt.xlabel('1980-2009')

image.png

En fait, ce serait bien si la relation pouvait tracer une ligne droite montant vers la droite, mais malheureusement, une telle relation ne semble pas exister. En effet, l'indice boursier est fortement affecté par l'effondrement de la bulle Internet en 2000. L'effondrement de la bulle réduira considérablement l'efficacité des investissements. Cependant, cela ne peut être évité. Gardez à l'esprit que l'investissement en actions comporte toujours des risques imprévisibles.

Ensuite, analysons les ETF autres que l'indice boursier. Indice or, immobilier (RIET) et obligataire.

m=[]#Enregistre les données moyennes annualisées pour chaque stock
v=[]#Enregistrer l'écart-type annualisé de chaque stock
PORT=ETF2
j=0
for i in range(len(PORT)):
    tsd=web.DataReader(PORT[i], "yahoo",'1980/1/1')#Télécharger les données
    tsd2=tsd.loc['2010/1/1':]
    tsd3=tsd.loc['1980/1/1':'2009/12/31']
    if len(tsd3)>100:
        lntsd=np.log(tsd2.iloc[:,5])#Prenez le logarithme naturel des données
        m.append((lntsd.diff().dropna().mean()+1)**250-1)
        v.append(lntsd.diff().dropna().std()*np.sqrt(250))
        print('{0: 03d}'.format(j+1),'{0:7s}'.format(PORT[i]),'moyenne{0:5.2f}'.format(m[j]),
          'Volatilité{0:5.2f}'.format(v[j]),'m/v {0:5.2f}'.format(m[j]/v[j]),
          'Le nombre de données{0:10d}'.format(len(tsd)))
        j+=1
v_m=pd.DataFrame({'v':v,'m':m})
plt.scatter(v_m.v,v_m.m,color="g")
plt.ylabel('return')
plt.xlabel('volatility')

01 GLD Moyenne 0,04 Volatilité 0,16 m / v 0,28 Nombre de données 3991 02 VNQ Moyenne 0,10 Volatilité 0,21 m / v 0,45 Nombre de données 4027 03 Moyenne IYR 0,09 Volatilité 0,21 m / v 0,44 Nombre de données 5101 04 AGG Moyenne 0,04 Volatilité 0,04 m / v 1,00 Nombre de données 4279 05 BND Moyenne 0,04 Volatilité 0,04 m / v 0,95 Nombre de données 3392 06 LQD Moyenne 0,06 Volatilité 0,07 m / v 0,85 Nombre de données 4573 07 JNK Moyenne 0,05 Volatilité 0,09 m / v 0,61 Nombre de données 3226

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267055/74e510f5-49da-fc6d-2838-0d6ee52a83ee.png)


Il semble que la tendance générale puisse être saisie par la ligne droite montante vers la droite. Si vous prenez un gros risque, vous obtiendrez un grand retour.

```python
 m2 = [] # Enregistrer les données sur la moyenne annualisée de chaque cours de bourse
 v2 = [] # Enregistrer l'écart type annualisé de chaque cours de bourse
PORT=ETF2
j=0
for i in range(len(PORT)):
 tsd = web.DataReader (PORT [i], "yahoo", '1980/1/1') # Télécharger les données
    tsd2=tsd.loc['1980/1/1':'2009/12/31']
    if len(tsd2)>100:
 lntsd = np.log (tsd2.iloc [:, 5]) # Prend le logarithme naturel des données
        m2.append((lntsd.diff().dropna().mean()+1)**250-1)
        v2.append(lntsd.diff().dropna().std()*np.sqrt(250))
 print ('{0: 03d}'. format (j + 1), '{0: 7s}'. format (PORT [i]), 'Moyenne {0: 5.2f}'. format (m2 [j]) ,
 'Volativity {0: 5.2f}'. Format (v2 [j]), 'm / v {0: 5.2f}'. Format (m2 [j] / v2 [j]),
 'Nombre de données {0: 10d}'. Format (len (tsd2)))
        j+=1
v_m2=pd.DataFrame({'v2':v2,'m2':m2})
plt.scatter(v_m2.v2,v_m2.m2,color="g")
plt.ylabel('return')
plt.xlabel('volatility')
 01 GLD Moyenne 0,19 Volatilité 0,22 m / v 0,84 Nombre de données 1289
 02 VNQ Moyenne 0,04 Volatilité 0,45 m / v 0,08 Nombre de données 1325
 03 Moyenne IYR 0,08 Volatilité 0,34 m / v 0,24 Nombre de données 2399
 04 AGG Moyenne 0,04 Volatilité 0,06 m / v 0,72 Nombre de données 1577
 05 BND Moyenne 0,06 Volatilité 0,07 m / v 0,84 Nombre de données 690
 06 LQD Moyenne 0,06 Volatilité 0,10 m / v 0,62 Nombre de données 1871
 07 JNK Moyenne 0,02 Volatilité 0,25 m / v 0,08 Nombre de données 524

image.png

Il a la même tendance qu'après le choc Lehman.

Ensuite, comparons les deux périodes.

plt.scatter(v_m.m/v_m.v,v_m2.m2/v_m2.v2)
plt.ylabel('2009-now')
plt.xlabel('1980-2009')

image.png

Dans de nombreux cas, la tendance des risques plus élevés à des rendements plus élevés semble être la même avant et après le choc de Lehman. De là, nous pouvons voir que le modèle des mouvements de prix semble plus facile à prévoir dans la gestion obligataire que dans la gestion des stocks.

Puis la note au début

-L'investissement à long terme est fondamental -Investissez dans un marché en hausse à long terme -Prenez des risques dans la mesure où vous ne serez pas ravi sur le marché baissier -Ne vendez pas avant de faire un profit -Si vous pensez que le marché boursier est risqué pour vous, investissez sur le marché obligataire, et si vous pensez toujours que c'est risqué, faites un dépôt bancaire

Il semble que nous pouvons arriver à la conclusion. Cependant, cette conclusion est différente pour chaque personne, alors obtenez la vôtre.

Recommended Posts

Trading système commençant par Python 3: investissement et risque
Commerce système à partir de Python3: investissement à long terme
"Commerce du système à partir de Python3" lecture du mémo
Système de trading automatique FX réalisé avec python et algorithme génétique Partie 1
Python à partir de Windows 7
GRPC commençant par Python
Commerce système à partir de Python 3: hedge fund et CTA
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Python et matériel - Utilisation de RS232C avec Python -
Apprentissage amélioré à partir de Python
python avec pyenv et venv
Système de support de présentation avec Python3
Python commençant par Hello world!
[Introduction au trading système] J'ai dessiné un oscillateur stochastique avec python et joué avec ♬
J'ai évalué la stratégie de négociation du système boursier avec Python.
Analysez les actions avec python et recherchez des phases de trading favorables
Commerce du système à partir de Python3: obtenez le dernier code de programme
Communiquez avec FX-5204PS avec Python et PyUSB
Briller la vie avec Python et OpenCV
Robot fonctionnant avec Arduino et python
Installez Python 2.7.9 et Python 3.4.x avec pip.
Réseau neuronal avec OpenCV 3 et Python 3
Modulation et démodulation AM avec python
Scraping avec Node, Ruby et Python
Grattage avec Python, Selenium et Chromedriver
Grattage avec Python et belle soupe
Encodage et décodage JSON avec python
Introduction à Hadoop et MapReduce avec Python
[GUI en Python] PyQt5-Glisser-déposer-
Créer un système de recommandation avec python
Lire et écrire NetCDF avec Python
J'ai joué avec PyQt5 et Python3
Lire et écrire du CSV avec Python
Intégration multiple avec Python et Sympy
Analyse de données à partir de python (visualisation de données 1)
Coexistence de Python2 et 3 avec CircleCI (1.0)
Analyse de données à partir de python (visualisation de données 2)
Jeu Sugoroku et jeu d'addition avec Python
Modulation et démodulation FM avec Python
Communiquez entre Elixir et Python avec gRPC
Construction de pipeline de données avec Python et Luigi
Calculer et afficher le poids standard avec python
Surveiller les pannes de Mojo avec Python et Skype
Modulation et démodulation FM avec Python Partie 3
[Automation] Manipulez la souris et le clavier avec Python
Authentification sans mot de passe avec RDS et IAM (Python)
Installation de Python et gestion des packages avec pip
Utilisation de Python et MeCab avec Azure Databricks
Capturer des images avec Pupil, python et OpenCV
Fractal pour faire et jouer avec Python
Un mémo contenant Python2.7 et Python3 dans CentOS
Efficacité commerciale à partir de zéro avec Python
Utilisez PIL ou Pillow avec Cygwin Python
Créer et décrypter du code César avec python
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
Lire et écrire des fichiers JSON avec Python
J'ai installé et utilisé Numba avec Python3.5
Obtenez et convertissez l'heure actuelle dans le fuseau horaire local du système avec python