[PYTHON] Est-ce un commerce de système?

Synopsis jusqu'à la dernière fois

J'essaie de compléter l'histoire par elle-même dans cet article, mais si vous lisez ce qui suit mon article, le déroulement de l'histoire deviendra plus clair.

introduction

Cette fois, je vais essayer de prédire si la fourchette de prix (prix discount-prix de clôture) du lendemain de NIKKEI 225 est positive ou négative par une méthode différente de l'apprentissage automatique. Le point auquel il faut faire attention est que lorsque vous regardez le graphique avec des bougies, il arrive assez souvent que la ligne positive continue pendant un certain temps et la ligne négative continue. «Trois jours consécutifs» ou «quatre jours consécutifs».

Si aujourd'hui est une ligne positive et que la probabilité de devenir une ligne positive demain est différente de la probabilité de devenir une ligne négative, si la plus grande probabilité est utilisée comme valeur prédite, la possibilité d'atteindre la prédiction augmentera.

Yin Yang Bigram

Immédiatement, découvrons le ratio de NIKKEI 225 pour ajouter en continu des lignes positives ou négatives.

Déposez les données de cours de l'action NIKKEI225 avec CSV,

Date,Open,High,Low,Close,Volume
2017-10-31,21896.38,22020.38,21840.07,22011.61,1055801728.0
2017-10-30,22047.95,22086.88,21921.24,22011.67,1397960064.0
2017-10-27,21903.27,22016.5,21815.72,22008.45,1241389952.0
2017-10-26,21698.95,21793.62,21688.56,21739.78,851784320.0
2017-10-25,21900.13,21921.36,21648.35,21707.62,1258339712.0
    ...

Utilisez le code ci-dessous pour connaître le ratio yang yang, yin yang, yang yin, yin yin.

import pandas as pd
import numpy as np

nikkei_225 = pd.read_csv('NIKKEI225.csv').set_index('Date').sort_index()
open_list = nikkei_225['Open'].tolist()
close_list = nikkei_225['Close'].tolist()
diff_list = np.array(close_list) - np.array(open_list)

posiposi = 0
posinega = 0
negaposi = 0
neganega = 0
for i in range(len(diff_list)-1):
    if diff_list[i]>=0 and diff_list[i+1]>=0:
        posiposi = posiposi + 1
    elif diff_list[i]>=0 and diff_list[i+1]<0:
        posinega = posinega + 1
    elif diff_list[i]<0 and diff_list[i+1]>=0:
        negaposi = negaposi + 1
    else:
        neganega = neganega + 1
print(posiposi, posinega, negaposi, neganega)        

2014-10-30_2017-10-31 Avec 735 actions Yangyang = 170 cas Yang Yin = 195 cas Yinyang = 195 cas Teinte = 175 caisses Rencontré.

Que ça,

Le résultat était que. Je pensais qu'il y avait beaucoup de soleil et d'ombre, mais je l'ai enlevé. Mais c'est asymétrique, alors je vais l'essayer.

Programme d'achat et de vente

Répétez ceci. Bref, si c'est une ligne positive aujourd'hui, c'est une ligne négative demain, et si c'est une ligne négative aujourd'hui, c'est une ligne positive demain. Est-ce un commerce de système?

Simulation des profits et pertes (back test)

Du 01/11/2017 au 28/07/2020, j'ai essayé de simuler le cas de la répétition de l'achat et de la vente de 10000000 yens à chaque fois avec le schéma d'achat et de vente ci-dessus. Les frais de négociation ont été fixés à 2026 yens pour un aller-retour. Le code est ci-dessous.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

nikkei225 = pd.read_csv('NIKKEI225.csv').set_index('Date').sort_index()
n1357 = pd.read_csv('1357.csv').set_index('Date').sort_index()
n1358 = pd.read_csv('1358.csv').set_index('Date').sort_index()

nikkei225_open_list = nikkei225['Open'].tolist()
nikkei225_close_list = nikkei225['Close'].tolist()
nikkei225_diff_list = np.array(nikkei225_close_list) - np.array(nikkei225_open_list)

n1357_open_list = n1357['Open'].tolist()
n1357_close_list = n1357['Close'].tolist()
n1357_diff_list = np.array(n1357_close_list) - np.array(n1357_open_list)

n1358_open_list = n1358['Open'].tolist()
n1358_close_list = n1358['Close'].tolist()
n1358_diff_list = np.array(n1358_close_list) - np.array(n1358_open_list)

x = []
y = []
total_gain = 0
for i in range(len(nikkei225_diff_list)-1):
 if nikkei225_diff_list [i]> = 0: # Le Nikkei225 d'aujourd'hui est une ligne positive
 Achetez le n ° 1357 pour 10 millions de yens et vendez-le à la clôture
        n = int(10000000/n1357_close_list[i])
        daily_gain = n1357_diff_list[i+1]*n - 2026
 else: # Le Nikkei225 d'aujourd'hui est caché
 Achetez le n ° 1358 pour 10 millions de yens et vendez-le à la clôture
        n = int(10000000/n1358_close_list[i])
        daily_gain = n1358_diff_list[i+1]*n - 2026
    total_gain += daily_gain
    x.append(i)
    y.append(total_gain)

# terrain
plt.plot(x, y, label="total_gain")
plt.show()
print('total_gain=', total_gain)

Résultats de la simulation des profits et des pertes

N'est-ce pas bon!

result.png

total_gain= 5633247

Au cours des 33 mois allant du 01/11/2017 au 28/07/2020, les 10000000 yens d'origine sont devenus 15 633 247 yens, le taux annuel est donc calculé à 20,48%. Est-ce vrai? J'aimerais que tout le monde refasse le test.

Le graphique des profits / pertes cumulés montre une augmentation et une diminution graduelles, mais il augmente à long terme et la forme n'est pas mauvaise.

Prise en compte des résultats

Je vais donc séparer la période d'étude et la période d'évaluation. Puisqu'il ne s'agit pas d'un grand apprentissage, il ne sera pas nécessaire de séparer la période d'apprentissage et la période d'évaluation séparément, donc traçons le graphique cumulatif des profits et des pertes pour toute la période du 2014-10-30 au 2020-07-28.

result2.png

total_gain= 969052

Les profits et pertes cumulés sont positifs pour toute la période, mais le graphique montre que la perte a augmenté dans la première moitié de 700 jours et s'est rétablie dans la seconde moitié de 700 jours. Comment voyez-vous cela? Les 700 derniers jours devraient être considérés comme une simple coïncidence.

Résumé

Continué (peut-être)

Recommended Posts

Est-ce un commerce de système?
Cette chaîne est-elle une fraction?
Qu'est-ce qu'un appel système
Ceci est une question webiopi
À propos du 02 février 2020 * Ceci est un article Python.
Qu'est-ce qu'une distribution?
Qu'est-ce qu'un terminal?
Qu'est-ce qu'un hacker?
Qu'est-ce qu'un pointeur?
Ceci est un exemple d'application de fonction dans dataframe.
Qu'est-ce qu'un arbre de décision?
La liste Python n'est pas une liste
Qu'est-ce qu'un changement de contexte?
Qu'est-ce qu'un super utilisateur?
[Définition] Qu'est-ce qu'un cadre?
Qu'est-ce qu'une fonction de rappel?
L'image est Namekuji
Le go-template est-il parfait pour le tuling? J'ai créé un système de traitement brainf * ck
[Python] Qu'est-ce qu'une fonction zip?
[Python] Qu'est-ce qu'une instruction with?
Y a-t-il un spécial dans scipy? ??
Remarques lorsque gcloud est cassé
Qu'est-ce qu'une portée lexicale / une portée dynamique?
Qu'est-ce que le réseau neuronal convolutif?
Quel type de noyau est ce noyau?
Qu'est-ce que le système X Window?
Créer un système de recommandation avec python
La "méthode destructive" est-elle un terme Ruby?