Я следую этому уроку парней и сталкиваюсь с некоторыми проблемами с ним. https://www.oreilly.com/learning/algorithmic-trading-in-less-than-100-lines-of-python-code
Когда я запускаю код, это вызывает у меня эту проблему, и я могу понять, что с ним не так, так же как и код, который есть у парня.
RuntimeWarning: invalid value encountered in sign df[col] = np.sign(df['returns'].rolling(momentum).mean())
Это также не построение графического кадра. На самом деле я не очень разбираюсь в данных, но, насколько я могу судить, все выглядит правильно.
Вот то, что у меня есть, это первая часть урока для ребят.
import configparser
import oandapy as opy
import pandas as pd
import numpy as np
import matplotlib
config = configparser.ConfigParser()
config.read('Config/oanda.cfg')
oanda = opy.API(environment='practice',
access_token=config['oanda']['access_token'])
# Read in the data
data = oanda.get_history(instrument='EUR_USD', # our instrument
start='2016-12-08', # start data
end='2016-12-10', # end date
granularity='M1') # minute bars
df = pd.DataFrame(data['candles']).set_index('time')
df.index = pd.DatetimeIndex(df.index)
# df.info()
df['returns'] = np.log(df['closeAsk'] / df['closeAsk'].shift(1))
cols = []
for momentum in [15, 30, 60, 120]:
col = 'position_%s' % momentum
df[col] = np.sign(df['returns'].rolling(momentum).mean())
cols.append(col)
import seaborn as sns; sns.set()
strats = ['returns']
for col in cols:
strat = 'strategy_%s' % col.split('_')[1]
df[strat] = df[col].shift(1) * df['returns']
strats.append(strat)
df[strats].dropna().cumsum().apply(np.exp).plot()