-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
103 additions
and
110 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,5 @@ | ||
*.pyc | ||
*.sqlite | ||
*.csv | ||
*.idea | ||
credentials.py |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,53 +1,53 @@ | ||
import time | ||
import csv | ||
from pprint import pprint | ||
from exchange import Exchange | ||
from statistics import PeriodRange | ||
from statistics import Statistics | ||
|
||
|
||
class BestAssetTest: | ||
|
||
def __init__(self, period): | ||
self.period = period | ||
self.statistics = Statistics(default="USDT") | ||
self.exchange = Exchange(default="USDT") | ||
self.currentAssetSymbol = None | ||
self.current_asset_symbol = None | ||
|
||
self.buyPrice = 0 | ||
|
||
def best_asset(self): | ||
try: | ||
tickerRange = ["BTC", "ETH", "NEO", "BNB", "LTC", "BCH"] | ||
bestAssetSymbol = self.statistics.get_best_asset(self.period, tickerRange) | ||
ticker_range = ["BTC", "ETH", "NEO", "BNB", "LTC", "BCH"] | ||
best_asset_symbol = self.statistics.get_best_asset(self.period, ticker_range) | ||
|
||
if (bestAssetSymbol != self.currentAssetSymbol): | ||
if (self.currentAssetSymbol != None): | ||
currentPrice = self.exchange.get_asset_price(self.currentAssetSymbol) | ||
if best_asset_symbol != self.current_asset_symbol: | ||
if self.current_asset_symbol is not None: | ||
current_price = self.exchange.get_asset_price(self.current_asset_symbol) | ||
|
||
print(currentPrice) | ||
percentage = (float(currentPrice) - float(self.buyPrice)) / float(self.buyPrice) * 100 | ||
print("Selling asset %s at %s with percentage %s" %(self.currentAssetSymbol, currentPrice, percentage)) | ||
print(current_price) | ||
percentage = (float(current_price) - float(self.buyPrice)) / float(self.buyPrice) * 100 | ||
print("Selling asset %s at %s with percentage %s" % ( | ||
self.current_asset_symbol, current_price, percentage)) | ||
|
||
fileName = "output_%s.csv" %(self.period.value) | ||
file = open(fileName, 'a') | ||
file_name = "output_%s.csv" % self.period.value | ||
file = open(file_name, 'a') | ||
try: | ||
writer = csv.writer(file) | ||
writer.writerow((self.currentAssetSymbol, self.buyPrice, currentPrice, percentage)) | ||
writer.writerow((self.current_asset_symbol, self.buyPrice, current_price, percentage)) | ||
finally: | ||
file.close() | ||
|
||
if (bestAssetSymbol != None): | ||
self.buyPrice = self.exchange.get_asset_price(bestAssetSymbol) | ||
print("Buying asset %s at %s" %(bestAssetSymbol, self.buyPrice)) | ||
if best_asset_symbol is not None: | ||
self.buyPrice = self.exchange.get_asset_price(best_asset_symbol) | ||
print("Buying asset %s at %s" % (best_asset_symbol, self.buyPrice)) | ||
|
||
# Set new current asset | ||
self.currentAssetSymbol = bestAssetSymbol | ||
self.current_asset_symbol = best_asset_symbol | ||
except Exception as e: | ||
print(e) | ||
pass | ||
|
||
def run(self): | ||
print("[TEST] Strategy Best Asset %s" %(self.period.value)) | ||
print("[TEST] Strategy Best Asset %s" % self.period.value) | ||
while True: | ||
self.best_asset() | ||
time.sleep(10) # Sleep 10 seconds | ||
time.sleep(10) # Sleep 10 seconds |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,116 +1,113 @@ | ||
import math | ||
import json | ||
from binance.client import Client | ||
from binance.enums import * | ||
from credentials import * | ||
from pprint import pprint | ||
|
||
|
||
class Exchange: | ||
|
||
def __init__(self, default): | ||
self.client = Client(binance_api_key, binance_api_secret) | ||
self.storageTicker = default | ||
self.client = Client(binance_api_key, binance_api_secret) | ||
self.storage_ticker = default | ||
|
||
def get_asset_price(self, assetName): | ||
if (assetName != "USDT"): | ||
ticker = self.client.get_ticker(symbol=assetName + self.storageTicker) | ||
def get_asset_price(self, asset_name): | ||
if asset_name != "USDT": | ||
ticker = self.client.get_ticker(symbol=asset_name + self.storage_ticker) | ||
return ticker["lastPrice"] | ||
else: | ||
return 1 | ||
|
||
def buy_asset(self, assetName): | ||
if (assetName != self.storageTicker): | ||
def buy_asset(self, asset_name): | ||
if asset_name != self.storage_ticker: | ||
# Print on console buy order | ||
print("Buying asset: %s" %(assetName)) | ||
print("Buying asset: %s" % asset_name) | ||
|
||
# Set asset name according mapper CoinMarketCap vs Binance | ||
assetName = self.mapper_assetName(assetName) | ||
asset_name = self.mapper_asset_name(asset_name) | ||
|
||
# Get free balance to trade | ||
result = self.client.get_asset_balance(asset=self.storageTicker) | ||
freebalance = result["free"] | ||
result = self.client.get_asset_balance(asset=self.storage_ticker) | ||
free_balance = result["free"] | ||
|
||
# Get price asset vs storage ticker | ||
result = self.client.get_symbol_ticker(symbol=assetName + self.storageTicker) | ||
result = self.client.get_symbol_ticker(symbol=asset_name + self.storage_ticker) | ||
price = result["price"] | ||
|
||
# Max quantity to buy | ||
quantity = (float(freebalance) / float(price)) | ||
quantity = (float(free_balance) / float(price)) | ||
|
||
factor = 1 * math.pow(10, self.mapper_min_quantity(assetName)) | ||
factor = 1 * math.pow(10, self.mapper_min_quantity(asset_name)) | ||
quantity = math.floor(quantity * factor) / factor | ||
print("quantity round %s" %quantity) | ||
print("quantity round %s" % quantity) | ||
|
||
# Submit a buy order | ||
order = self.client.order_market_buy(symbol=assetName + self.storageTicker, quantity=quantity) | ||
self.client.order_market_buy(symbol=asset_name + self.storage_ticker, quantity=quantity) | ||
|
||
def sell_all_assets(self): | ||
response = self.client.get_account() | ||
balanceLenght = len(response["balances"]) | ||
for i in range(0, balanceLenght): | ||
balance_lenght = len(response["balances"]) | ||
for i in range(0, balance_lenght): | ||
item = response["balances"][i] | ||
if (item["asset"] != self.storageTicker and float(item["free"]) > 0): | ||
if item["asset"] != self.storage_ticker and float(item["free"]) > 0: | ||
try: | ||
factor = 1 * math.pow(10, self.mapper_min_quantity(item["asset"])) | ||
quantity = math.floor(float(item["free"]) * factor) / factor | ||
|
||
if (quantity > 0): | ||
if quantity > 0: | ||
# Print on console buy order | ||
print("Selling asset: %s" %(item["asset"])) | ||
order = self.client.order_market_sell(symbol=item["asset"] + self.storageTicker, quantity=quantity) | ||
print("Selling asset: %s" % (item["asset"])) | ||
self.client.order_market_sell(symbol=item["asset"] + self.storage_ticker, quantity=quantity) | ||
except Exception as e: | ||
print(e) | ||
pass | ||
|
||
def mapper_assetName(self, assetName): | ||
if (assetName == "USDT"): | ||
def mapper_asset_name(self, asset_name): | ||
if asset_name == "USDT": | ||
return "USDT" | ||
elif (assetName == "BTC"): | ||
elif asset_name == "BTC": | ||
return "BTC" | ||
elif (assetName == "ETH"): | ||
elif asset_name == "ETH": | ||
return "ETH" | ||
elif (assetName == "XRP"): | ||
elif asset_name == "XRP": | ||
return "XRP" | ||
elif (assetName == "BCH"): | ||
elif asset_name == "BCH": | ||
return "BCC" | ||
elif (assetName == "ADA"): | ||
elif asset_name == "ADA": | ||
return "ADA" | ||
elif (assetName == "LTC"): | ||
elif asset_name == "LTC": | ||
return "LTC" | ||
elif (assetName == "XEM"): | ||
elif asset_name == "XEM": | ||
return "XEM" | ||
elif (assetName == "NEO"): | ||
elif asset_name == "NEO": | ||
return "NEO" | ||
elif (assetName == "XLM"): | ||
elif asset_name == "XLM": | ||
return "XLM" | ||
elif (assetName == "MIOTA"): | ||
elif asset_name == "MIOTA": | ||
return "IOTA" | ||
elif (assetName == "BNB"): | ||
elif asset_name == "BNB": | ||
return "BNB" | ||
|
||
def mapper_min_quantity(self, assetName): | ||
if (assetName == "USDT"): | ||
def mapper_min_quantity(self, asset_name): | ||
if asset_name == "USDT": | ||
return 4 | ||
elif (assetName == "BTC"): | ||
elif asset_name == "BTC": | ||
return 6 | ||
elif (assetName == "ETH"): | ||
elif asset_name == "ETH": | ||
return 5 | ||
elif (assetName == "XRP"): | ||
elif asset_name == "XRP": | ||
return 0 | ||
elif (assetName == "BCC"): | ||
elif asset_name == "BCC": | ||
return 5 | ||
elif (assetName == "ADA"): | ||
elif asset_name == "ADA": | ||
return 0 | ||
elif (assetName == "LTC"): | ||
elif asset_name == "LTC": | ||
return 5 | ||
elif (assetName == "XEM"): | ||
elif asset_name == "XEM": | ||
return 0 | ||
elif (assetName == "NEO"): | ||
elif asset_name == "NEO": | ||
return 3 | ||
elif (assetName == "XLM"): | ||
elif asset_name == "XLM": | ||
return 1 | ||
elif (assetName == "IOTA"): | ||
elif asset_name == "IOTA": | ||
return 0 | ||
elif (assetName == "BNB"): | ||
elif asset_name == "BNB": | ||
return 2 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,39 +1,40 @@ | ||
import enum | ||
from coinmarketcap import Market | ||
from pprint import pprint | ||
|
||
|
||
class PeriodRange(enum.Enum): | ||
HOUR = "HOUR" | ||
DAY = "DAY" | ||
WEEK = "WEEK" | ||
|
||
|
||
class Statistics: | ||
|
||
def __init__(self, default): | ||
self.market = Market() | ||
self.default = default | ||
self.market = Market() | ||
self.default = default | ||
|
||
def get_best_asset(self, period, tickerRange): | ||
bestAssetSymbol = self.default | ||
bestAssetPercentage = 0 | ||
def get_best_asset(self, period, ticker_range): | ||
best_asset_symbol = self.default | ||
best_asset_percentage = 0 | ||
|
||
response = self.market.ticker(limit=100, convert='USD') | ||
tickerListLenght = len(response) | ||
for i in range(0, tickerListLenght): | ||
ticker_list_length = len(response) | ||
for i in range(0, ticker_list_length): | ||
item = response[i] | ||
|
||
if (item["symbol"] in str(tickerRange)): | ||
if (period == PeriodRange.HOUR): | ||
if (float(item["percent_change_1h"]) > float(bestAssetPercentage)): | ||
bestAssetSymbol = item["symbol"] | ||
bestAssetPercentage = item["percent_change_1h"] | ||
elif (period == PeriodRange.DAY): | ||
if (float(item["percent_change_24h"]) > float(bestAssetPercentage)): | ||
bestAssetSymbol = item["symbol"] | ||
bestAssetPercentage = item["percent_change_24h"] | ||
elif (period == PeriodRange.WEEK): | ||
if (float(item["percent_change_7d"]) > float(bestAssetPercentage)): | ||
bestAssetSymbol = item["symbol"] | ||
bestAssetPercentage = item["percent_change_7d"] | ||
|
||
return bestAssetSymbol | ||
if item["symbol"] in str(ticker_range): | ||
if period == PeriodRange.HOUR: | ||
if float(item["percent_change_1h"]) > float(best_asset_percentage): | ||
best_asset_symbol = item["symbol"] | ||
best_asset_percentage = item["percent_change_1h"] | ||
elif period == PeriodRange.DAY: | ||
if float(item["percent_change_24h"]) > float(best_asset_percentage): | ||
best_asset_symbol = item["symbol"] | ||
best_asset_percentage = item["percent_change_24h"] | ||
elif period == PeriodRange.WEEK: | ||
if float(item["percent_change_7d"]) > float(best_asset_percentage): | ||
best_asset_symbol = item["symbol"] | ||
best_asset_percentage = item["percent_change_7d"] | ||
|
||
return best_asset_symbol |