Es ist im Grunde eine Fortsetzung von vorherige und vorherige.
Heute ist der Standard "[[] in Future Trading Fr](http://www.comtex.co.jp/www/?module=Default&action=meigara&page=sheet1&article=T-kin) "baut tatsächlich kontinuierliche Renditen aus Rollovers auf und hilft bei der Vorhersage und Modellierung Es ist eine Geschichte, für die man sich einsetzen kann.
Rollover ist einfach ein Übergang von einem Kontrakt mit einer sich nähernden Frist für den Futures-Handel zu einem Kontrakt, der bald oder lange vor uns liegt. Das ist. Um den kontinuierlichen Übergang des Transaktionssaldos zu modellieren, müssen verschiedene Marktbedingungen und die Transaktion berücksichtigt werden. Hier betrachten wir jedoch ein einfaches Modell, das linear übergeht.
Lesen Sie Gold Futures Rollover Dates 2013 und wählen Sie die entsprechende Aktie aus. Zum Zeitpunkt des Schreibens ist es 3/13, also zielen wir auf GCJ14 und GCM14, die kurz vor dem Erreichen des letzten Handelstermins stehen.
[Random Walk](http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%83%BB%E3% Simulieren Sie zukünftige Handelskontrakte mit 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
Sie haben jetzt eine Random-Walk-Funktion. Lassen Sie uns Yahoo! Finance-Daten an diese weitergeben.
#SPY Investment Trust Grundpreis S.&Wird als ungefährer Preis für den P 500-Index verwendet
px = web.get_data_yahoo('SPY')['Adj Close'] * 10
#Geben Sie die Marke und das Vertragsablaufdatum an
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
Erstellen Sie als Nächstes ein Modell, das die Gewichte berechnet. Der Code ist der gleiche wie im O'Reilly-Buch.
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
Verwenden Sie diese Funktionen schließlich, um den kontinuierlichen Rückgabeindex zu ermitteln.
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
#Erstellen Sie einen neuen Datenrahmen
result = pd.DataFrame({'GCJ14': sample['GCJ14'], 'GCM14': sample['GCM14'], 'GOLD': sample['GCJ14'] + sample['GCM14'] })
#Holen Sie sich eine Rendite auf Rollover-Futures
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
Dies ist das Ende der Analyse des Aktienportfolios und wir werden es ab dem nächsten Mal auf andere Bereiche anwenden.
Einführung in die Datenanalyse mit Python-Datenverarbeitung mit NumPy und Pandas http://www.oreilly.co.jp/books/9784873116556/
Recommended Posts