Skip to content

Commit

Permalink
Merge pull request #830 from whittlem/beta
Browse files Browse the repository at this point in the history
Merging beta into main
  • Loading branch information
whittlem authored Aug 16, 2023
2 parents fe4bbe9 + 7222d7c commit 26abf8b
Show file tree
Hide file tree
Showing 7 changed files with 87 additions and 42 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ jobs:

steps:
- uses: actions/checkout@v2
- name: Set up Python 3.9
- name: Set up Python 3.11
uses: actions/setup-python@v2
with:
python-version: 3.9
python-version: 3.11
- name: Find typos with codespell
uses: codespell-project/actions-codespell@master
with:
Expand Down
6 changes: 2 additions & 4 deletions examples/script-coinbase.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,9 @@
app1 = PyCryptoBot(exchange="coinbase")
model1 = CBAuthAPI(app1.api_key, app1.api_secret, app1.api_url, app=app1)

"""
app2 = PyCryptoBot(exchange="coinbasepro")
model2 = CAuthAPI(app2.api_key, app2.api_secret, app2.api_passphrase, app2.api_url, app=app2)
model3 = CPublicAPI(app=app2)
"""

""" COINBASE"""
# df = model1.get_accounts()
Expand Down Expand Up @@ -74,8 +72,8 @@
print(df)

""" COINBASE PRO"""
# df = model3.get_historical_data("ADA-GBP", Granularity.ONE_HOUR) # Coinbase Pro has this in the public API, Advanced Trade has this in the auth API
# print(df)
df = model3.get_historical_data("ADA-GBP", Granularity.ONE_HOUR) # Coinbase Pro has this in the public API, Advanced Trade has this in the auth API
print(df)


""" COINBASE"""
Expand Down
24 changes: 16 additions & 8 deletions models/config/binance_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import json
import os.path
import re
import sys

from .default_parser import is_currency_valid, default_config_parse, merge_config_and_args

Expand Down Expand Up @@ -101,14 +102,21 @@ def parser(app, binance_config, args={}):
app.api_key_file = binance_config["api_key_file"]

if app.api_key_file is not None:
try:
with open(app.api_key_file, "r") as f:
key = f.readline().strip()
secret = f.readline().strip()
binance_config["api_key"] = key
binance_config["api_secret"] = secret
except Exception:
raise RuntimeError(f"Unable to read {app.api_key_file}")
if not os.path.isfile(app.api_key_file):
try:
raise Exception(f"Unable to read {app.api_key_file}, please check the file exists and is readable. Remove it from the config file for test mode!\n")
except Exception as e:
print(f"{type(e).__name__}: {e}")
sys.exit(1)
else:
try:
with open(app.api_key_file, "r") as f:
key = f.readline().strip()
secret = f.readline().strip()
binance_config["api_key"] = key
binance_config["api_secret"] = secret
except Exception:
raise RuntimeError(f"Unable to read {app.api_key_file}")

if "api_key" in binance_config and "api_secret" in binance_config and "api_url" in binance_config:
# validates the api key is syntactically correct
Expand Down
24 changes: 16 additions & 8 deletions models/config/coinbase_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import json
import os.path
import re
import sys

from .default_parser import is_currency_valid, default_config_parse, merge_config_and_args
from models.exchange.Granularity import Granularity
Expand Down Expand Up @@ -56,14 +57,21 @@ def parser(app, coinbase_config, args={}):
app.api_key_file = coinbase_config["api_key_file"]

if app.api_key_file is not None:
try:
with open(app.api_key_file, "r") as f:
key = f.readline().strip()
secret = f.readline().strip()
coinbase_config["api_key"] = key
coinbase_config["api_secret"] = secret
except Exception:
raise RuntimeError(f"Unable to read {app.api_key_file}")
if not os.path.isfile(app.api_key_file):
try:
raise Exception(f"Unable to read {app.api_key_file}, please check the file exists and is readable. Remove \"api_key_file\" key from the config file for test mode!\n")
except Exception as e:
print(f"{type(e).__name__}: {e}")
sys.exit(1)
else:
try:
with open(app.api_key_file, "r") as f:
key = f.readline().strip()
secret = f.readline().strip()
coinbase_config["api_key"] = key
coinbase_config["api_secret"] = secret
except Exception:
raise RuntimeError(f"Unable to read {app.api_key_file}")

if "api_url" in coinbase_config["config"]:
coinbase_config["api_url"] = coinbase_config["config"]["api_url"]
Expand Down
28 changes: 18 additions & 10 deletions models/config/coinbase_pro_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import json
import os.path
import re
import sys

from .default_parser import is_currency_valid, default_config_parse, merge_config_and_args
from models.exchange.Granularity import Granularity
Expand Down Expand Up @@ -57,16 +58,23 @@ def parser(app, coinbase_config, args={}):
app.api_key_file = coinbase_config["api_key_file"]

if app.api_key_file is not None:
try:
with open(app.api_key_file, "r") as f:
key = f.readline().strip()
secret = f.readline().strip()
password = f.readline().strip()
coinbase_config["api_key"] = key
coinbase_config["api_secret"] = secret
coinbase_config["api_passphrase"] = password
except Exception:
raise RuntimeError(f"Unable to read {app.api_key_file}")
if not os.path.isfile(app.api_key_file):
try:
raise Exception(f"Unable to read {app.api_key_file}, please check the file exists and is readable. Remove \"api_key_file\" key from the config file for test mode!\n")
except Exception as e:
print(f"{type(e).__name__}: {e}")
sys.exit(1)
else:
try:
with open(app.api_key_file, "r") as f:
key = f.readline().strip()
secret = f.readline().strip()
password = f.readline().strip()
coinbase_config["api_key"] = key
coinbase_config["api_secret"] = secret
coinbase_config["api_passphrase"] = password
except Exception:
raise RuntimeError(f"Unable to read {app.api_key_file}")

if "api_key" in coinbase_config and "api_secret" in coinbase_config and "api_passphrase" in coinbase_config and "api_url" in coinbase_config:

Expand Down
27 changes: 17 additions & 10 deletions models/config/kucoin_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,16 +60,23 @@ def parser(app, kucoin_config, args={}):
app.api_key_file = kucoin_config["api_key_file"]

if app.api_key_file is not None:
try:
with open(app.api_key_file, "r") as f:
key = f.readline().strip()
secret = f.readline().strip()
password = f.readline().strip()
kucoin_config["api_key"] = key
kucoin_config["api_secret"] = secret
kucoin_config["api_passphrase"] = password
except Exception:
raise RuntimeError(f"Unable to read {app.api_key_file}")
if not os.path.isfile(app.api_key_file):
try:
raise Exception(f"Unable to read {app.api_key_file}, please check the file exists and is readable. Remove \"api_key_file\" key from the config file for test mode!\n")
except Exception as e:
print(f"{type(e).__name__}: {e}")
sys.exit(1)
else:
try:
with open(app.api_key_file, "r") as f:
key = f.readline().strip()
secret = f.readline().strip()
password = f.readline().strip()
kucoin_config["api_key"] = key
kucoin_config["api_secret"] = secret
kucoin_config["api_passphrase"] = password
except Exception:
raise RuntimeError(f"Unable to read {app.api_key_file}")

if "api_key" in kucoin_config and "api_secret" in kucoin_config and "api_passphrase" in kucoin_config and "api_url" in kucoin_config:
# validates the api key is syntactically correct
Expand Down
16 changes: 16 additions & 0 deletions models/exchange/coinbase/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -740,6 +740,22 @@ def get_historical_data(
df["close"] = df["close"].astype(float)
df["volume"] = df["volume"].astype(float)

# create a full range of requested interval
full_range = pd.date_range(start=df.index[0], end=df.index[-1], freq=freq)

# re-index the dataframe using the full range
df = df.reindex(full_range)

# fill missing values and forward-fill the price columns and set volume to 0 for missing rows.
df["open"].fillna(method="ffill", inplace=True)
df["high"].fillna(method="ffill", inplace=True)
df["low"].fillna(method="ffill", inplace=True)
df["close"].fillna(method="ffill", inplace=True)
df["volume"].fillna(0, inplace=True)
df["market"] = market
df["granularity"] = granularity.to_integer
df["date"] = df.index

# reset pandas dataframe index
df.reset_index()

Expand Down

0 comments on commit 26abf8b

Please sign in to comment.