Stocstats неправильно рассчитать DMI - PullRequest
0 голосов
/ 30 марта 2020

Я использую stockstats для расчета индикатора DMI, следуйте по ссылке . Но значения из stockstats не математические с трейдингом.

Мой код ниже:

import requests
from datetime import datetime
import pandas as pd
from stockstats import StockDataFrame
from_symbol = 'BTC'
to_symbol = 'USDT'
exchange = 'Binance'
datetime_interval = 'hour'
def get_filename(from_symbol, to_symbol, exchange, datetime_interval, download_date):
   return '%s_%s_%s_%s_%s.csv' % (from_symbol, to_symbol, exchange, datetime_interval, download_date)


def download_data(from_symbol, to_symbol, exchange, datetime_interval):
supported_intervals = {'minute', 'hour', 'day'}
assert datetime_interval in supported_intervals,\
    'datetime_interval should be one of %s' % supported_intervals

print('Downloading %s trading data for %s %s from %s' %
      (datetime_interval, from_symbol, to_symbol, exchange))
base_url = 'https://min-api.cryptocompare.com/data/histo'
url = '%s%s' % (base_url, datetime_interval)

params = {'fsym': from_symbol, 'tsym': to_symbol,
          'limit': 300, 'aggregate': 1,
          'e': exchange}
request = requests.get(url, params=params)
data = request.json()
return data
def convert_to_dataframe(data):
df = pd.io.json.json_normalize(data, ['Data'])
df['datetime'] = pd.to_datetime(df.time, unit='s')
df = df[['datetime', 'low', 'high', 'open',
         'close', 'volumefrom', 'volumeto']]

return df
def filter_empty_datapoints(df):
indices = df[df.sum(axis=1) == 0].index
print('Filtering %d empty datapoints' % indices.shape[0])
df = df.drop(indices)
return df
def read_dataset(filename):
print('Reading data from %s' % filename)
df = pd.read_csv(filename)
df.datetime = pd.to_datetime(df.datetime) # change type from object to datetime
df = df.set_index('datetime') 
df = df.sort_index() # sort by datetime
print(df.shape)
return df

Загрузить данные

data = download_data(from_symbol, to_symbol, exchange, datetime_interval)
df = convert_to_dataframe(data)
df = filter_empty_datapoints(df)

current_datetime = datetime.now().date().isoformat()
filename = get_filename(from_symbol, to_symbol, exchange, datetime_interval, current_datetime)
print('Saving data to %s' % filename)
df.to_csv(filename, index=False)

Считать данные и рассчитать DMI (DI + / pdi "https://pypi.org/project/stockstats/ ")

df = read_dataset(savefile name)
df = StockDataFrame.retype(df)
df['mdi'] = df.get('mdi') # calculate MACD
print(df)

это показывает результат. (Дата 30/3/2020, 10: 0: 0) enter image description here Когда я сравниваю результат с торговой точки зрения, он совершенно другой enter image description here

Я беспокоюсь, если Stockstats не так при расчете DMI. Если у вас возникли проблемы, прежде чем, пожалуйста, скажите мне, как это исправить:).

...