Skip to content

Commit

Permalink
Tether strategy
Browse files Browse the repository at this point in the history
  • Loading branch information
marcforn committed Jan 28, 2018
1 parent ba61c01 commit 56aa48d
Show file tree
Hide file tree
Showing 6 changed files with 103 additions and 110 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
*.pyc
*.sqlite
*.csv
*.idea
credentials.py
20 changes: 9 additions & 11 deletions best_asset.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import time
import csv
from pprint import pprint
from exchange import Exchange
from statistics import PeriodRange
from statistics import Statistics


class BestAsset:

def __init__(self, period):
Expand All @@ -15,26 +13,26 @@ def __init__(self, period):

def best_asset(self):
try:
tickerRange = ["BTC", "ETH", "NEO", "BNB", "LTC", "BCH"]
bestAssetSymbol = self.statistics.get_best_asset(self.period, tickerRange)
if (bestAssetSymbol != self.currentAssetSymbol):
ticker_range = ["BTC", "ETH", "NEO", "BNB", "LTC", "BCH"]
best_asset_symbol = self.statistics.get_best_asset(self.period, ticker_range)
if best_asset_symbol != self.currentAssetSymbol:
# Print on console best asset
print("Best Asset: %s" %(bestAssetSymbol))
print("Best Asset: %s" % best_asset_symbol)

# Sell all assets
self.exchange.sell_all_assets()

# Buy best asset
self.exchange.buy_asset(bestAssetSymbol)
self.exchange.buy_asset(best_asset_symbol)

# Set new current asset
self.currentAssetSymbol = bestAssetSymbol
self.currentAssetSymbol = best_asset_symbol
except Exception as e:
print(e)
pass

def run(self):
print("Strategy Best Asset %s" %(self.period.value))
print("Strategy Best Asset %s" % self.period.value)
while True:
self.best_asset()
time.sleep(10) # Sleep 10 seconds
time.sleep(10) # Sleep 10 seconds
40 changes: 20 additions & 20 deletions best_asset_test.py
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
5 changes: 0 additions & 5 deletions cryptobot.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,3 @@
import schedule
import time
from pprint import pprint
from exchange import *
from statistics import *
from best_asset import *
from best_asset_test import *

Expand Down
99 changes: 48 additions & 51 deletions exchange.py
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
47 changes: 24 additions & 23 deletions statistics.py
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

0 comments on commit 56aa48d

Please sign in to comment.