mirror of
https://git.wownero.com/lza_menace/totrader.git
synced 2024-08-15 00:33:13 +00:00
164 lines
4.6 KiB
Python
Executable file
164 lines
4.6 KiB
Python
Executable file
#!/usr/bin/env python
|
|
|
|
from argparse import ArgumentParser
|
|
from os import getenv
|
|
from dotenv import load_dotenv
|
|
from requests import get as requests_get
|
|
from requests import post as requests_post
|
|
from requests.auth import HTTPBasicAuth
|
|
from decimal import Decimal
|
|
from random import uniform
|
|
from pprint import pprint
|
|
from time import sleep
|
|
from db import Ticker, Balance, Order
|
|
|
|
|
|
|
|
satoshi = .00000001
|
|
|
|
class TradeOgre(object):
|
|
def __init__(self):
|
|
load_dotenv('.env')
|
|
self.base = 'https://tradeogre.com/api/v1'
|
|
self.auth = HTTPBasicAuth(
|
|
getenv('TO_USER'),
|
|
getenv('TO_PASS')
|
|
)
|
|
|
|
def req(self, route, method='get', data={}):
|
|
url = self.base + route
|
|
if method == 'get':
|
|
r = requests_get(url, auth=self.auth)
|
|
else:
|
|
r = requests_post(url, auth=self.auth, data=data)
|
|
return r.json()
|
|
|
|
def get_trade_pair(self, pair):
|
|
route = f'/ticker/{pair}'
|
|
return self.req(route)
|
|
|
|
def get_balance(self, currency):
|
|
route = '/account/balance'
|
|
data = {'currency': currency}
|
|
return self.req(route, 'post', data)
|
|
|
|
def get_balances(self):
|
|
route = '/account/balances'
|
|
return self.req(route)
|
|
|
|
def submit_order(self, type, pair, quantity, price):
|
|
route = f'/order/{type}'
|
|
data = {'market': pair, 'quantity': quantity, 'price': price}
|
|
return self.req(route, 'post', data)
|
|
|
|
def get_order(self, uuid):
|
|
route = f'/account/order/{uuid}'
|
|
return self.req(route)
|
|
|
|
|
|
def get_metrics():
|
|
# define vars
|
|
to = TradeOgre()
|
|
base = 'BTC'
|
|
currency = 'WOW'
|
|
trade_pair = f'{base}-{currency}'
|
|
|
|
# get market data
|
|
tp_res = to.get_trade_pair(trade_pair)
|
|
print(tp_res)
|
|
spreat_btc = Decimal(tp_res['ask']) - Decimal(tp_res['bid'])
|
|
spread_sats = float(spreat_btc / Decimal(.00000001))
|
|
spread_perc = (spreat_btc / Decimal(tp_res['ask'])) * 100
|
|
|
|
# store market data in db
|
|
t = Ticker(
|
|
trade_pair=trade_pair,
|
|
initial_price=tp_res['initialprice'],
|
|
current_price=tp_res['price'],
|
|
high_price=tp_res['high'],
|
|
low_price=tp_res['low'],
|
|
volume=tp_res['volume'],
|
|
bid=tp_res['bid'],
|
|
ask=tp_res['ask'],
|
|
spread_btc=spreat_btc,
|
|
spread_sats=spread_sats,
|
|
spread_perc=spread_perc
|
|
)
|
|
t.save()
|
|
|
|
# get balances and store in db
|
|
for c in base, currency:
|
|
gb_res = to.get_balance(c)
|
|
print(gb_res)
|
|
b = Balance(
|
|
currency=c,
|
|
total=gb_res['balance'],
|
|
available=gb_res['available']
|
|
)
|
|
b.save()
|
|
|
|
def put_market_maker():
|
|
to = TradeOgre()
|
|
latest_ticker = Ticker.select().order_by(Ticker.date.desc()).get()
|
|
if latest_ticker.spread_sats > 4:
|
|
bid_amount = uniform(80, 90)
|
|
ask_amount = uniform(80, 90)
|
|
to_bid = latest_ticker.bid + satoshi
|
|
to_ask = latest_ticker.ask - satoshi
|
|
buy = to.submit_order('buy', 'BTC-WOW', bid_amount, '{:.8f}'.format(to_bid))
|
|
print(buy)
|
|
if buy['success']:
|
|
o = Order(
|
|
trade_pair='BTC-WOW',
|
|
trade_type='market_maker',
|
|
buy=True,
|
|
quantity=bid_amount,
|
|
price=to_bid,
|
|
uuid=buy['uuid']
|
|
)
|
|
o.save()
|
|
|
|
sleep(3)
|
|
sell = to.submit_order('sell', 'BTC-WOW', ask_amount, '{:.8f}'.format(to_ask))
|
|
print(sell)
|
|
if sell['success']:
|
|
o = Order(
|
|
trade_pair='BTC-WOW',
|
|
trade_type='market_maker',
|
|
buy=False,
|
|
quantity=ask_amount,
|
|
price=to_ask,
|
|
uuid=sell['uuid']
|
|
)
|
|
o.save()
|
|
|
|
def check_orders():
|
|
to = TradeOgre()
|
|
orders = Order.select().where(Order.active==True)
|
|
for order in orders:
|
|
print(order.uuid)
|
|
o = to.get_order(order.uuid)
|
|
print(o)
|
|
if o['success'] is False:
|
|
order.active = False
|
|
order.save()
|
|
sleep(5)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
parser = ArgumentParser(description='Helpful TradeOgre trading script')
|
|
parser.add_argument('-t', '--trade', action='store_true', help='Put in buy/sell orders')
|
|
parser.add_argument('-u', '--update-orders', action='store_true', help='Update status of orders')
|
|
args = parser.parse_args()
|
|
|
|
if args.trade:
|
|
put_market_maker()
|
|
exit()
|
|
|
|
if args.update_orders:
|
|
check_orders()
|
|
exit()
|
|
|
|
while True:
|
|
get_metrics()
|
|
sleep(60)
|