amicks / speculator Goto Github PK
View Code? Open in Web Editor NEWAPI for predicting the next Bitcoin and Ethereum with machine learning and technical analysis
License: MIT License
API for predicting the next Bitcoin and Ethereum with machine learning and technical analysis
License: MIT License
Is there any point of having day, hour, second available, when they do not have a "closed" value? Cause they all seem to produce an error. Or should they take the last available timestamp? For example, if you do this, you get an error:
$ python main.py --unit hour
Traceback (most recent call last):
File "main.py", line 106, in
raise SystemExit(main())
File "main.py", line 82, in main
x = x.drop(['close'], axis=1)
File "/home/anaconda3/envs/speculator/lib/python3.6/site-packages/pandas/core/generic.py", line 2530,
in drop
obj = obj._drop_axis(labels, axis, level=level, errors=errors)
File "/home/anaconda3/envs/speculator/lib/python3.6/site-packages/pandas/core/generic.py", line 2562,
in _drop_axis
new_axis = axis.drop(labels, errors=errors)
File "/home/anaconda3/envs/speculator/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 3
741, in drop
labels[mask])
ValueError: labels ['close'] not contained in axis
I want to offer a new point of view, and my colaboraty
Things this project offers that I did not find in other free projects, are:
https://github.com/Leci37/stocks-prediction-Machine-learning-RealTime-telegram/tree/develop
I am trying to run the Speculator library. While trying to run I came across the following error:
PC@PC:~/Speculator/speculator$ python3 main.py
INFO:requests.packages.urllib3.connectionpool:Starting new HTTPS connection (1): poloniex.com
Traceback (most recent call last):
File "main.py", line 92, in <module>
raise SystemExit(main())
File "main.py", line 59, in main
count=args.count, period=args.period)
File "/usr/local/lib/python3.5/dist-packages/speculator/market.py", line 48, in __init__
self.json = self.get_json()
File "/usr/local/lib/python3.5/dist-packages/speculator/market.py", line 59, in get_json
self.period, self.symbol)[0]
File "/usr/local/lib/python3.5/dist-packages/speculator/utils/poloniex.py", line 61, in chart_json
json = requests.get(url).json()
File "/usr/lib/python3/dist-packages/requests/models.py", line 808, in json
return complexjson.loads(self.text, **kwargs)
File "/usr/lib/python3.5/json/__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.5/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
The error what I think is coming from this code:
import logging
import requests
from speculator.utils import date
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def json_to_url(json, symbol):
""" Converts a JSON to a URL by the Poloniex API
Args:
json: JSON data as a list of dict dates, where the keys are
the raw market statistics.
symbol: String of currency pair, like a ticker symbol.
Returns:
String URL to Poloniex API representing the given JSON.
"""
start = json[0]['date']
end = json[-1]['date']
diff = end - start
# Get period by a ratio from calculated period to valid periods
# Ratio closest to 1 is the period
# Valid values: 300, 900, 1800, 7200, 14400, 86400
periods = [300, 900, 1800, 7200, 14400, 86400]
diffs = {}
for p in periods:
diffs[p] = abs(1 - (p / (diff / len(json)))) # Get ratio
period = min(diffs, key=diffs.get) # Find closest period
url = ('https://poloniex.com/public?command'
'=returnChartData¤cyPair={0}&start={1}'
'&end={2}&period={3}').format(symbol, start, end, period)
return url
def chart_json(start, end, period, symbol):
""" Requests chart data from Poloniex API
Args:
start: Int epoch date to START getting market stats from.
Note that this epoch is FURTHER from the current date.
end: Int epoch date to STOP getting market stats from.
Note that this epoch is CLOSER to the current date.
period: Int defining width of each chart candlestick in seconds.
Valid values: 300, 900, 1800, 7200, 14400, 86400
symbol: String of currency pair, like a ticker symbol.
Returns:
Tuple of (JSON data, URL to JSON).
JSON data as a list of dict dates, where the keys are
the raw market statistics.
String URL to Poloniex API representing the given JSON.
"""
url = ('https://poloniex.com/public?command'
'=returnChartData¤cyPair={0}&start={1}'
'&end={2}&period={3}').format(symbol, start, end, period)
logger.debug(' HTTP Request URL:\n{0}'.format(url))
json = requests.get(url).json()
logger.debug(' JSON:\n{0}'.format(json))
if 'error' in json:
logger.error(' Invalid parameters in URL for HTTP response')
raise SystemExit
elif all(val == 0 for val in json[0]):
logger.error(' Bad HTTP response. Time unit too short?')
raise SystemExit
elif len(json) < 1: # time to short
logger.error(' Not enough dates to calculate changes')
raise SystemExit
return json, url
def parse_changes(json):
""" Gets price changes from JSON
Args:
json: JSON data as a list of dict dates, where the keys are
the raw market statistics.
Returns:
List of floats of price changes between entries in JSON.
"""
changes = []
dates = len(json)
for date in range(1, dates):
last_close = json[date - 1]['close']
now_close = json[date]['close']
changes.append(now_close - last_close)
logger.debug('Market Changes (from JSON):\n{0}'.format(changes))
return changes
def get_gains_losses(changes):
""" Categorizes changes into gains and losses
Args:
changes: List of floats of price changes between entries in JSON.
Returns:
Dict of changes with keys 'gains' and 'losses'.
All values are positive.
"""
res = {'gains': [], 'losses': []}
for change in changes:
if change > 0:
res['gains'].append(change)
else:
res['losses'].append(change * -1)
logger.debug('Gains: {0}'.format(res['gains']))
logger.debug('Losses: {0}'.format(res['losses']))
return res
def get_attribute(json, attr):
""" Gets the values of an attribute from JSON
Args:
json: JSON data as a list of dict dates, where the keys are
the raw market statistics.
attr: String of attribute in JSON file to collect.
Returns:
List of values of specified attribute from JSON
"""
res = [json[entry][attr] for entry, _ in enumerate(json)]
logger.debug('{0}s (from JSON):\n{1}'.format(attr, res))
return res
def get_json_shift(year, month, day, unit, count, period, symbol):
""" Gets JSON from shifted date by the Poloniex API
Args:
year: Int between 1 and 9999.
month: Int between 1 and 12.
day: Int between 1 and 31.
unit: String of time period unit for count argument.
How far back to check historical market data.
Valid values: 'hour', 'day', 'week', 'month', 'year'
count: Int of units.
How far back to check historical market data.
period: Int defining width of each chart candlestick in seconds.
symbol: String of currency pair, like a ticker symbol.
Returns: JSON, list of dates where each entry is a dict of raw market data.
"""
epochs = date.get_end_start_epochs(year, month, day, 'last', unit, count)
return chart_json(epochs['shifted'], epochs['initial'],
period, symbol)[0]
The issue was with Poloniex api, and I searched many sources for the resolution but could not find anything working. For example, some say that changing IP or using VNP will help but it isn't. Second I tried using the dedicated server, still the issue persists.
Kindly, suggest me what is the best possible technique available for resolving my issue.
Is there a way to get rid of the Google captcha while requesting through requests library? I guess that is the issue.
How to select best delta when predict other coin ex: USDT_ZEC...
Hi,
Do you manage to get a good test set accuracy with a relatively small delta (-d) ?
If you set a high delta, there's a good chance the next trend will be neutral isn't it ?
Run python3 app.py on my mac.
And i got the following as output.
$ python3 app.py Traceback (most recent call last): File "app.py", line 2, in <module> from api import api, cache, ENABLE_DB, db ModuleNotFoundError: No module named 'api'
Could you shed some light on how to bring up the rest service for btc/etc price predication please?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.