[PYTHON] Essayez de modéliser le rendement cumulatif du roulement dans le trading à terme

Modélisation du futur trading

Il s'agit essentiellement d'une continuation de précédent et précédent.

Aujourd'hui, la norme "[] Ven "génère en fait des retours continus à partir des rollovers, aidant à prévoir et à modéliser C'est une histoire à utiliser.

Rollover est simplement une transition d'un contrat avec une échéance proche pour le trading à terme à un contrat qui est bientôt ou loin devant. C'est. Afin de modéliser la transition continue du solde de la transaction, diverses conditions du marché et de la transaction doivent être prises en considération, mais nous considérerons ici un modèle simple qui transite linéairement.

Sélection de marque

Reportez-vous à Gold Futures Rollover Dates 2013 et sélectionnez l'action appropriée. Au moment de la rédaction de cet article, il est 3/13, donc visons GCJ14 et GCM14, qui sont sur le point d'atteindre la dernière date de transaction.

Marche aléatoire

[Random Walk](http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%83%BB%E3% Simulez de futurs contrats de trading avec 82% A6% E3% 82% A9% E3% 83% BC% E3% 82% AF% E7% 90% 86% E8% AB% 96).

def random_walk(px, n, f):
    np.random.seed(34567)
    N = 200
    _walk = (np.random.randint(0, 200, size=N) - 100) * 0.25
    perturb = (np.random.randint(0, 20, size=N) - 10) * 0.25
    walk = _walk.cumsum()
    rng = pd.date_range(px.index[0], periods=len(px) + N, freq='B')
    near = np.concatenate([px.values, px.values[-1] + walk])
    far = np.concatenate([px.values, px.values[-1] + walk + perturb])
    prices = pd.DataFrame({n: near, f: far}, index=rng)
    return prices

Vous avez maintenant une fonction de marche aléatoire. Passons les données Yahoo! Finance à cela.

#Prix de base de la fiducie d'investissement SPY S&Utilisé comme prix approximatif pour l'indice P 500
px = web.get_data_yahoo('SPY')['Adj Close'] * 10
#Spécifiez la marque et la date d'expiration du contrat
expiries = {
    'GCJ14': datetime(2014,4,28),
    'GCM14': datetime(2014,6,26)
}
expiry = pd.Series(expiries).order()

print( px.tail(5) )
# => 
# Date
# 2014-03-06    1881.8
# 2014-03-07    1882.6
# 2014-03-10    1881.6
# 2014-03-11    1872.3
# 2014-03-12    1872.8

print( expiry )
# =>
# GCJ14   2014-04-28
# GCM14   2014-06-26

prices = random_walk(px, 'GCJ14', 'GCM14')
print( prices.tail(5) )
# =>
#               GCJ14    GCM14
# 2014-10-17  1618.80  1621.05
# 2014-10-20  1634.80  1632.55
# 2014-10-21  1622.55  1623.80
# 2014-10-22  1638.55  1639.30
# 2014-10-23  1637.55  1638.30

Pondéré

Ensuite, créez un modèle qui calcule les poids. Le code est le même que celui du livre O'Reilly.

def get_roll_weights(start, expiry, items, roll_periods=5):
    dates = pd.date_range(start, expiry[-1], freq='B')
    weights = pd.DataFrame(np.zeros((len(dates), len(items))),
                        index=dates, columns=items)
    prev_date = weights.index[0]
    for i, (item, ex_date) in enumerate( expiry.iteritems() ):
        if i < len(expiry) - 1:
            weights.ix[prev_date:ex_date - pd.offsets.BDay(), item] = 1
            roll_rng = pd.date_range(end=ex_date - pd.offsets.BDay(),
                                     periods=roll_periods + 1, freq='B')
            decay_weights = np.linspace(0, 1, roll_periods + 1)
            weights.ix[roll_rng, item] = 1 - decay_weights
            weights.ix[roll_rng, expiry.index[i + 1]] = decay_weights
        else:
            weights.ix[prev_date:, item] = 1
        prev_date = ex_date
    return weights

Calcul des rendements continus

Enfin, utilisez ces fonctions pour trouver l'index de retour continu.

weights = get_roll_weights('3/11/2014', expiry, prices.columns)

sample_prices  = prices.ix['2014-04-17' : '2014-04-28']
sample_weights = weights.ix['2014-04-17' : '2014-04-28']
sample = sample_prices * sample_weights

#Créer un nouveau bloc de données
result = pd.DataFrame({'GCJ14': sample['GCJ14'], 'GCM14': sample['GCM14'], 'GOLD': sample['GCJ14'] + sample['GCM14'] })

#Obtenez un retour sur les contrats à terme reconduits
print( result )
# =>
#               GCJ14    GCM14     GOLD
# 2014-04-17  1663.30     0.00  1663.30
# 2014-04-18  1687.55     0.00  1687.55
# 2014-04-21  1348.24   337.16  1685.40
# 2014-04-22  1017.78   678.42  1696.20
# 2014-04-23   676.62  1015.53  1692.15
# 2014-04-24   338.01  1351.84  1689.85
# 2014-04-25     0.00  1705.55  1705.55
# 2014-04-28     0.00  1723.05  1723.05

image.png

C'est la fin de l'analyse du portefeuille d'actions, et nous l'appliquerons à d'autres domaines à partir de la prochaine fois.

référence

Introduction à l'analyse de données avec le traitement des données Python avec NumPy et pandas http://www.oreilly.co.jp/books/9784873116556/

Recommended Posts

Essayez de modéliser le rendement cumulatif du roulement dans le trading à terme
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
Essayez Cython dans les plus brefs délais
Essayez de simuler le mouvement du système solaire
Essayez d'afficher les données ferroviaires des informations numériques des terres nationales en 3D
Spécifier le modèle d'éclairage du matériau SCN dans Pythonista
Comptez le nombre de paramètres dans le modèle d'apprentissage en profondeur
Essayez de résoudre les problèmes / problèmes du "programmeur matriciel" (Chapitre 1)
La décision de scikit-learn Comment visualiser un modèle en bois
[Django] Essayons de clarifier la partie de Django qui était en quelque sorte à travers le test
Essayez d'estimer le nombre de likes sur Twitter
Essayez d'obtenir le contenu de Word avec Golang
Comment utiliser le modèle appris dans Lobe en Python
Essayez de déchiffrer les données de connexion stockées dans Firefox
Pour faire l'équivalent de Ruby ObjectSpace._id2ref en Python
Essayez de gratter les données COVID-19 Tokyo avec Python
Comment trouver le nombre optimal de clusters pour les k-moyennes
Essayez d'obtenir la liste des fonctions du paquet Python> os
[Mémo] Le mystère des instructions d'affectation cumulative dans les fonctions Python
J'ai fait une fonction pour vérifier le modèle de DCGAN
Essayez d'améliorer la précision de l'estimation du nombre de Twitter
Essayez de résoudre les problèmes / problèmes du "programmeur matriciel" (fonction du chapitre 0)
Essayez d'automatiser le fonctionnement des périphériques réseau avec Python
Essayez d'extraire les mots-clés populaires dans COTOHA
Essayez de modéliser une distribution multimodale à l'aide de l'algorithme EM
Essayez d'extraire les caractéristiques des données de capteur avec CNN
Résumé du format de chaîne de caractères en Python3 Que ce soit pour vivre avec l'ancien modèle ou le nouveau modèle
Essayez de calculer la position de l'émetteur à partir du modèle de propagation des ondes radio avec python [Wi-Fi, Beacon]
Comment retourner les données contenues dans le modèle django au format json et les mapper sur le dépliant
[Pytorch] Je souhaite attribuer manuellement les paramètres d'entraînement du modèle
Comment déterminer l'existence d'un élément sélénium en Python
[Note] Essayons de prédire la quantité d'électricité utilisée! (Partie 1)
Comment connaître la structure interne d'un objet en Python
Essayez d'obtenir la liste des fils du bulletin d'information (je n'aime pas) avec Python.
[Python] PCA scratch dans l'exemple de "Introduction à la méthode d'analyse multivariée"
Comment changer la couleur du seul bouton pressé avec Tkinter
Essayez de transcrire la fonction de masse stochastique de la distribution binomiale en Python
Comment vérifier la taille de la mémoire d'une variable en Python
Premier python ② Essayez d'écrire du code tout en examinant les fonctionnalités de python
Essayez de résoudre le problème N Queen avec SA de PyQUBO
Exportez le contenu de ~ .xlsx dans le dossier en HTML avec Python
N'hésitez pas à changer l'étiquette de légende avec Seaborn en python
Essayez de modifier une nouvelle image à l'aide du modèle StyleGAN2 entraîné
Utilisez PyCaret pour prédire le prix des appartements d'occasion à Tokyo!
J'ai écrit le code pour écrire le code Brainf * ck en python
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Comment obtenir les coordonnées de sommet d'une entité dans ArcPy
[Introduction au modèle SIR] Considérez le résultat de l'ajustement de Diamond Princess ♬
Créez une fonction pour obtenir le contenu de la base de données dans Go
Je veux connaître la population de chaque pays du monde.
Essayez de prédire le triplet de la course de bateaux en classant l'apprentissage
[Version terminée] Essayez de connaître le nombre d'habitants de la ville à partir de la liste d'adresses avec Python
Programmation pour combattre dans le monde ~ 5-5,5-6
Programmer pour combattre dans le monde 5-3
L'histoire de la participation à AtCoder
Programmation pour combattre dans le monde - Chapitre 4