[Introduction au trading système] J'ai dessiné un oscillateur stochastique avec python et joué avec ♬

J'ai essayé l'oscillateur stochastique, l'entrée du trading système, après avoir augmenté le cours de l'action. Le code python est dans Reference (1), il a donc 3 ans, donc si vous pensez qu'il est toujours là, cela ne fonctionnera pas. Alors, je vais le mettre ensemble dans un article pour ne pas l'oublier. 【référence】 ①Investing with Python: Stochastic OscillatorImmediateDeprecationError of Google Finance data #587pandas.core.window.rolling.Rolling.min

Ce que j'ai fait

・ Introduction à Systre ・ Déplacer le code ・ Comment est-ce maintenant?

・ Introduction à Systre

Fondamentalement ① Achetez quand ça tombe en panne ② Vendez quand ça monte Ce n'est pas grave si le système peut automatiser cela. Est-ce que ① diminue plus? ② Peut-il encore augmenter? Il y a un risque, alors j'aimerais également le signaler. L'une des méthodes les plus couramment utilisées pour cette détermination consiste à utiliser le graphique de l'oscillateur stochastique présenté dans la référence (1), et cette fois nous décrirons comment le coder afin qu'il puisse être utilisé. The Stochastic Oscillator is calculated as follows:

%K = (Current Close - Lowest Low)/(Highest High - Lowest Low) * 100
%D = 3-day SMA of %K
Lowest Low =Le plus bas pour le look-back period)
Highest High =Le plus haut pour le look-back period)
3-day SMA =Moyenne mobile simple sur 3 jours

Une période d'analyse de 14 jours est généralement utilisée. Comment trouver la moyenne mobile simple est la suivante

SMA(n) = \frac {\sum_{i=0}^{n-1}(CLOSE_i)} {n}

【référence】 ④ Analyser les actions pour comprendre la performance de l'entreprise

・ Déplacer le code

En fait, le code de référence ① ne fonctionne pas. De plus, Yahoo Finance est interdit de gratter.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime as dt
from pandas_datareader import data

Vous pouvez l'obtenir en spécifiant la date sur Yahoo, Google et d'autres sites payants, mais vous ne pouvez pas spécifier la date de fin sur ce site. Cependant, cela fonctionne comme la même fonction en extrayant ce dont vous avez besoin à partir des données récupérées, comme indiqué ci-dessous. De plus, comme la séquence de données est inversée, elle est inversée. 【référence】 ⑥ [Obtenir des lignes / colonnes spécifiques à partir du bloc de données avec Pandas](https://pythondatascience.plavox.info/pandas/%E8%A1%8C%E3%83%BB%E5%88%97%E3% 81% AE% E6% 8A% BD% E5% 87% BA) ⑦Right way to reverse pandas.DataFrame?

def get_stock(stock,start,end):
    df = data.DataReader(stock, 'stooq',start)["Close"]
    df = df.iloc[::-1]
    return df[start:end]

def get_high(stock,start,end):
    df = data.DataReader(stock, 'stooq',start)['High']
    df = df.iloc[::-1]
    return df[start:end]

def get_low(stock,start,end):
    df = data.DataReader(stock, 'stooq',start)['Low']
    df = df.iloc[::-1]
    return df[start:end]

Calculez le% K ci-dessus ci-dessous. Ici, rolling (). Max () of pandas a été changé, et il peut être calculé en faisant ce qui suit selon la référence ③.

def STOK(close, low, high, n): 
    STOK = ((close - low.rolling(n).min()) / (high.rolling(n).max() - low.rolling(n).min())) * 100
    return STOK

Voici la fonction qui calcule% D. Calculez% K pour calculer la moyenne mobile simple sur 3 jours.

def STOD(close, low, high, n):
    STOK = ((close - low.rolling(n).min()) / (high.rolling(n).max() - low.rolling(n).min())) * 100
    STOD = STOK.rolling(3).mean()
    return STOD

La marque utilise Sony. La période est la même que la référence ① ci-dessus. En premier lieu, le nombre de jours pour revenir sur% K et% D est également de 14 jours.

stock = '6758.JP' #sony
start = dt.date(2016,1,1)
end = dt.date(2016,12,31)
df = pd.DataFrame(get_stock(stock, start, end))
df['High'] = get_high(stock, start, end)
df['Low'] = get_low(stock, start, end)
df['%K'] = STOK(df['Close'], df['Low'], df['High'], 14)
df['%D'] = STOD(df['Close'], df['Low'], df['High'], 14)

Je vais sortir les données pour confirmation ci-dessous.

print(df[0:30])
print(df.tail())
              Close     High      Low         %K         %D
Date
2016-01-04  2875.56  2981.55  2859.04        NaN        NaN
2016-01-05  2880.90  2916.39  2849.30        NaN        NaN
...
2016-01-21  2363.56  2506.53  2363.06        NaN        NaN
2016-01-22  2458.85  2470.05  2405.86  15.487720        NaN
2016-01-25  2468.09  2498.74  2439.42  18.493802        NaN
2016-01-26  2363.06  2408.78  2359.66   0.595113  11.525545
2016-01-27  2442.81  2453.99  2409.75  18.250258  12.446391
...
2016-02-15  2379.61  2408.29  2293.05  34.207540  16.258774
2016-02-16  2415.11  2459.84  2316.39  39.242858  27.149584
              Close     High      Low         %K         %D
Date
2016-12-26  3261.97  3293.31  3260.04  65.381424  70.155819
2016-12-27  3253.17  3264.93  3237.51  59.458713  65.992247
2016-12-28  3266.87  3296.23  3249.25  62.741071  62.527069
2016-12-29  3228.71  3261.97  3196.41  22.300469  48.166751
2016-12-30  3205.22  3240.46  3192.49   8.557408  31.199649
              Close     High      Low         %K         %D

Enfin, le graphique est affiché ci-dessous. Puisque% D manque de données pendant 15 jours (il n'y a pas de données les samedis et dimanches en premier lieu), alignez les axes horizontaux de ax1 et ax2 en traçant à partir du 16ème jour.

fig, (ax1,ax2) = plt.subplots(2,1,figsize=(1.6180 * 4, 4*1))
ax1.plot(df['Close'][16:],label = "close")
ax2.plot(df['%K'][16:],label = "%K")
ax2.plot(df['%D'][16:],label = "%D")
ax1.legend()
ax2.legend()
ax1.grid()
ax2.grid()
plt.savefig("./stock/stc_%K%D_6758.png ")
plt.show()

Le résultat est le suivant. stc_%K%D_6758.png Je ne peux pas me sentir soulagé, alors je vais essayer de sortir le même résultat que le site de référence. Le graphique 2016 de "FB" a pu être reproduit, et les mêmes graphiques de% K et% D ont été obtenus. stc_%K%D_yahoo.png À propos, vous pouvez vérifier le cours de l'action 2016 de FB dans la référence ⑧.

Eh bien, consultez la référence suivante ⑨ etc. pour savoir quoi faire à partir de ces tableaux. Référence ⑨ Traduction et devis Google. ** "Si supérieur à 80, le marché est considéré comme surachat et les valeurs inférieures à 20 sont considérées comme survendu.% K (ligne bleue dans le graphique ci-dessous) et% D (ligne rouge ci-dessous). L'intersection de ces deux lignes indique qu'un changement de direction du marché approche. Si% K est supérieur à% D, il s'agit d'un signal d'achat sauf si la valeur dépasse 80. , Lorsque% K tombe en dessous de% D, il est considéré comme un signal de vente à moins que la valeur ne tombe en dessous de 20. "** 【référence】 ⑧ Cours de l'action Facebook (Facebook, Inc.) / Actions américainesA trader’s guide to the stochastic oscillator

・ Comment est-ce maintenant?

Sony; il y a de nombreux magasins. .. .. Un peu suracheté. .. .. stc_%K%D_6758_now.png Nippon Airlines 9201; c'était suracheté. .. .. Mais pouvez-vous l'acheter lundi? stc_%K%D_9201.JP_now.png Sumitomo Mitsui Financial Group 8316; Hmm, surachat. .. .. stc_%K%D_8316.JP_now.png NTT Docomo 9437; S'il est survendu et que le bleu apparaît, achetez-le ♬ stc_%K%D_9437.JP_now.png

Je mets tout le code ci-dessous

C'est facile à utiliser, alors utilisons-le ・ Stock_trade / stc2.py

Résumé

・ J'ai dessiné un oscillateur stochastique et joué avec. ・ Je sens que je peux l'utiliser sérieusement

・ Y a-t-il un indicateur? ・ Faites-vous de la systole? ・ Si tel est le cas, il est probable que les frais de transaction feront faillite, et il sera nécessaire de trouver des moyens de le voir dans un cycle long.

prime

・ Yahoo Finance est interdit de gratter L'acquisition automatique (grattage) des informations de publication Yahoo! Finance est interdite

Recommended Posts

[Introduction au trading système] J'ai dessiné un oscillateur stochastique avec python et joué avec ♬
J'ai joué avec PyQt5 et Python3
J'ai créé un système qui décide automatiquement de s'exécuter demain avec Python et l'ajoute à Google Agenda.
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
[Commerce système] J'ai essayé de jouer avec décomposer l'oscillateur stochastique avec python ♬
[Introduction à StyleGAN] J'ai joué avec "The Life of a Man" ♬
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
[Introduction] Je veux créer un robot Mastodon avec Python! 【Débutants】
[Introduction à StyleGAN] J'ai joué avec "Une femme se transforme en Mayuyu" ♬
J'ai dessiné une carte thermique avec Seaborn [Python]
[Introduction à Pytorch] J'ai joué avec sinGAN ♬
[Introduction à AWS] J'ai joué avec des voix masculines et féminines avec Polly et Transcribe ♪
Je veux faire un jeu avec Python
Je veux écrire dans un fichier avec Python
Trading système commençant par Python 3: investissement et risque
J'ai exécuté GhostScript avec python, divisé le PDF en pages et l'ai converti en image JPEG.
J'ai essayé de faire un processus périodique avec CentOS7, Selenium, Python et Chrome
Quand j'ai essayé de créer un environnement virtuel avec Python, cela n'a pas fonctionné
Je veux écrire un élément dans un fichier avec numpy et le vérifier.
J'ai essayé de créer facilement un système de présence entièrement automatique avec Selenium + Python
Introduction à la création d'IA avec Python! Partie 3 J'ai essayé de classer et de prédire les images avec un réseau de neurones convolutifs (CNN)
Je veux travailler avec un robot en python.
J'ai essayé de faire LINE BOT avec Python et Heroku
Je veux faire fonctionner un ordinateur quantique avec Python
J'ai créé un programme pour convertir des images en art ASCII avec Python et OpenCV
Un système simple qui prend automatiquement des photos avec détection d'objet et l'envoie à LINE
Créez rapidement un tableau de bord d'analyse de données Python avec Streamlit et déployez-le sur AWS
Traitement d'image avec Python (j'ai essayé de le binariser en art mosaïque 0 et 1)
J'ai créé un package pour filtrer les séries chronologiques avec python
J'ai écrit rapidement un programme pour étudier la DI avec Python ①
Associez Python Enum à une fonction pour la rendre appelable
J'ai créé une application de livre simple avec python + Flask ~ Introduction ~
J'ai évalué la stratégie de négociation du système boursier avec Python.
Essayez d'ouvrir une sous-fenêtre avec PyQt5 et Python
[Python] J'ai installé le jeu depuis pip et j'ai essayé de jouer
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python
Obtenez de manière récursive la liste Excel dans un dossier spécifique avec python et écrivez-la dans Excel.
Je souhaite améliorer l'efficacité avec Python même dans les systèmes expérimentaux (2) RS232C et pySerial
J'ai aussi essayé d'imiter la fonction monade et la monade d'état avec le générateur en Python
[Python] Qu'est-ce qu'un tuple? Explique comment utiliser sans toucher et comment l'utiliser avec des exemples.
Je veux faire un changeur de voix en utilisant Python et SPTK en référence à un site célèbre
Je veux découper uniquement le visage d'une image de personne avec Python et l'enregistrer ~ Détection de visage et rognage avec face_recognition ~
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai fait un circuit simple avec Python (AND, OR, NOR, etc.)
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
Système de notation IPynb réalisé avec TA d'introduction à la programmation (Python)
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
[Introduction à Python3 Jour 1] Programmation et Python
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
Je veux résoudre APG4b avec Python (seulement 4.01 et 4.04 au chapitre 4)
Un mémorandum lors de l'acquisition automatique avec du sélénium
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
J'ai fait une loterie avec Python.
J'ai créé un formulaire de tweet Nyanko avec Python, Flask et Heroku
J'ai essayé de créer une liste de nombres premiers avec python
Je souhaite rechercher le texte intégral avec elasticsearch + python
Introduction à Hadoop et MapReduce avec Python