Last active
September 1, 2019 20:17
-
-
Save tonymorony/abf240dad5309b7d858db24ad33aa87d to your computer and use it in GitHub Desktop.
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
from mm2_coins import coins | |
import requests | |
import random | |
import time | |
import json | |
import calendar | |
import threading | |
trading_nodes = [ | |
{ | |
'id': 1, | |
'ip': '127.0.0.1' | |
} | |
] | |
user_pass = "" | |
def mm2_activate_coin(node_ip, user_pass, coin, electrums): | |
r = requests.post(node_ip, json={'userpass': user_pass, 'method': 'electrum', 'coin': coin, 'servers': electrums, 'mm2': 1}) | |
return r.json() | |
def mm2_activate_eth(node_ip, user_pass, coin, electrums, contract_address): | |
r = requests.post(node_ip, json={'userpass': user_pass, 'method': 'enable', 'coin': coin, 'urls': electrums, 'swap_contract_address': contract_address}) | |
return r.json() | |
def mm2_get_coin_balance(node_ip, user_pass, coin): | |
r = requests.post(node_ip, json={'userpass': user_pass, 'method': 'my_balance', 'coin': coin}) | |
return r.json() | |
def mm2_get_orderbook(node_ip, user_pass, base, rel, price): | |
r = requests.post(node_ip, json={'userpass': user_pass, 'method': 'orderbook', 'base': base, 'rel': rel}) | |
return r.json() | |
def mm2_get_wif(node_ip, user_pass, passphrase, coin): | |
r = requests.post(node_ip, json={'userpass': user_pass, 'method': 'calcaddress', 'passphrase': passphrase, 'coin': coin}) | |
return r.json() | |
def mm2_set_price(node_ip, user_pass, base, rel, price, volume): | |
r = requests.post(node_ip, json={'userpass': user_pass, 'method': 'setprice', 'base': base, 'rel': rel, 'price': price, 'volume' : volume}) | |
return r.json() | |
def mm2_max_set_price(node_ip, user_pass, base, rel, price): | |
r = requests.post(node_ip, json={'userpass': user_pass, 'method': 'setprice', 'base': base, 'rel': rel, 'price': price, 'max' : True}) | |
return r.json() | |
def mm2_buy(node_ip, user_pass, base, rel, relvolume, price, volume): | |
r = requests.post(node_ip,json={'userpass': user_pass, 'method': 'buy', 'base': base, 'rel': rel, 'relvolume': relvolume, 'price': price, 'volume': volume}) | |
return r.json() | |
def mm2_my_swap_status(node_ip, user_pass, uuid): | |
r = requests.post(node_ip,json={'userpass': user_pass, 'method': 'my_swap_status', 'params': {'uuid': uuid}}) | |
return r.json() | |
def mm2_my_recent_swaps(node_ip, user_pass): | |
r = requests.post(node_ip,json={'userpass': user_pass, 'method': 'my_recent_swaps'}) | |
return r.json() | |
def mm2_stop(node_ip, user_pass): | |
r = requests.post(node_ip,json={'userpass':user_pass,'method':'stop'}) | |
return r.json() | |
def mm2_orderbook(node_ip, user_pass, base, rel): | |
r = requests.post(node_ip,json={'userpass': user_pass, 'method': 'orderbook', 'base': base, 'rel': rel}) | |
return r.json() | |
def mm2_withdraw(node_ip, user_pass, coin, to, amount): | |
r = requests.post(node_ip,json={'userpass': user_pass, 'method': 'withdraw', 'coin': coin, 'to': to, 'amount': amount}) | |
# activating KMD | |
for node in trading_nodes: | |
beer_activation_response = mm2_activate_coin("http://"+node["ip"]+":7783", user_pass, "KMD", [{"url":"electrum1.cipig.net:10001"},{"url":"electrum2.cipig.net:10001"},{"url":"electrum3.cipig.net:10001"}]) | |
print(beer_activation_response) | |
# activating DGB | |
for node in trading_nodes: | |
beer_activation_response = mm2_activate_coin("http://"+node["ip"]+":7783", user_pass, "DGB", [{"url":"electrum1.cipig.net:10059"},{"url":"electrum2.cipig.net:10059"},{"url":"electrum3.cipig.net:10059"}]) | |
print(beer_activation_response) | |
# activating QTUM | |
for node in trading_nodes: | |
beer_activation_response = mm2_activate_coin("http://"+node["ip"]+":7783", user_pass, "QTUM", [{"url":"s1.qtum.info:50001"},{"url":"s2.qtum.info:50001"},{"url":"s2.qtum.info:50001"}]) | |
print(beer_activation_response) | |
# activating ETH | |
for node in trading_nodes: | |
beer_activation_response = mm2_activate_eth("http://"+node["ip"]+":7783", user_pass, "ETH", ["http://195.201.0.6:8555"], "0x8500AFc0bc5214728082163326C2FF0C73f4a871") | |
print(beer_activation_response) | |
# activating BAT | |
for node in trading_nodes: | |
beer_activation_response = mm2_activate_eth("http://"+node["ip"]+":7783", user_pass, "BAT", ["http://195.201.0.6:8555"], "0x8500AFc0bc5214728082163326C2FF0C73f4a871") | |
print(beer_activation_response) | |
# activating LTC | |
for node in trading_nodes: | |
beer_activation_response = mm2_activate_coin("http://"+node["ip"]+":7783", user_pass, "LTC", [{"url":"electrum-ltc.bysh.me:50001"},{"url":"electrum.ltc.xurious.com:50001"}]) | |
print(beer_activation_response) | |
# activating USDC | |
for node in trading_nodes: | |
beer_activation_response = mm2_activate_eth("http://"+node["ip"]+":7783", user_pass, "USDC", ["http://195.201.0.6:8555"], "0x8500AFc0bc5214728082163326C2FF0C73f4a871") | |
print(beer_activation_response) | |
# activating OMG | |
for node in trading_nodes: | |
beer_activation_response = mm2_activate_eth("http://"+node["ip"]+":7783", user_pass, "OMG", ["http://195.201.0.6:8555"], "0x8500AFc0bc5214728082163326C2FF0C73f4a871") | |
print(beer_activation_response) | |
# activating BTC | |
for node in trading_nodes: | |
beer_activation_response = mm2_activate_coin("http://"+node["ip"]+":7783", user_pass, "BTC", [{"url":"electrum1.cipig.net:10000"},{"url":"electrum2.cipig.net:10000"},{"url":"electrum3.cipig.net:10000"}]) | |
print(beer_activation_response) | |
# activating DASH | |
for node in trading_nodes: | |
beer_activation_response = mm2_activate_coin("http://"+node["ip"]+":7783", user_pass, "DASH", [{"url":"electrum1.cipig.net:10061"},{"url":"electrum2.cipig.net:10061"},{"url":"electrum3.cipig.net:10061"}]) | |
print(beer_activation_response) | |
# activating VRSC | |
for node in trading_nodes: | |
beer_activation_response = mm2_activate_coin("http://"+node["ip"]+":7783", user_pass, "VRSC", [{"url":"electrum1.cipig.net:10021"},{"url":"electrum2.cipig.net:10021"},{"url":"electrum3.cipig.net:10021"}]) | |
print(beer_activation_response) | |
# activating RFOX | |
for node in trading_nodes: | |
beer_activation_response = mm2_activate_coin("http://"+node["ip"]+":7783", user_pass, "RFOX", [{"url":"electrum1.cipig.net:10034"},{"url":"electrum2.cipig.net:10034"},{"url":"electrum3.cipig.net:10034"}]) | |
print(beer_activation_response) | |
# activating BCH | |
for node in trading_nodes: | |
beer_activation_response = mm2_activate_coin("http://"+node["ip"]+":7783", user_pass, "BCH", [{"url":"bch.imaginary.cash:50001"},{"url":"bch.loping.net:50001"},{"url":"electron.coinucopia.io:50001"}]) | |
print(beer_activation_response) | |
# activating DOGE | |
for node in trading_nodes: | |
beer_activation_response = mm2_activate_coin("http://"+node["ip"]+":7783", user_pass, "DOGE", [{"url":"electrum1.cipig.net:10060"},{"url":"electrum2.cipig.net:10060"},{"url":"electrum3.cipig.net:10060"}]) | |
print(beer_activation_response) | |
# activating ZILLA | |
for node in trading_nodes: | |
beer_activation_response = mm2_activate_coin("http://"+node["ip"]+":7783", user_pass, "ZILLA", [{"url":"electrum1.cipig.net:10028"},{"url":"electrum2.cipig.net:10028"},{"url":"electrum3.cipig.net:10028"}]) | |
print(beer_activation_response) | |
# activating RVN | |
for node in trading_nodes: | |
rvn_activation_response = mm2_activate_coin("http://"+node["ip"]+":7783", user_pass, "RVN", [{"url":"rvn.satoshi.org.uk:50001"},{"url":"rvn.satoshi.org.uk:50001"},{"url":"rvn.satoshi.org.uk:50001"}]) | |
print(rvn_activation_response) | |
def my_balance(node_ip, user_pass, cointag): | |
params = {'userpass': user_pass, | |
'method': 'my_balance', | |
'coin': cointag,} | |
r = requests.post(node_ip, json=params) | |
return r | |
def my_balances(node_ip, user_pass, coins): | |
coins_balances = {"timestamp": "", "total": "", "balances": []} | |
api_coins = {"BTC":"bitcoin","BCH":"bitcoin-cash","DGB":"digibyte","DASH":"dash", | |
"QTUM":"qtum","DOGE":"dogecoin","KMD":"komodo", | |
"ETH":"ethereum", "BAT":"basic-attention-token", | |
"USDC":"usd-coin", "LTC":"litecoin", "VRSC":"verus-coin","OMG":"omisego", | |
"RVN":"ravencoin","RFOX":"redfox-labs","ZILLA":"chainzilla"} | |
url = 'https://api.coingecko.com/api/v3/simple/price' | |
coin_string = ",".join(list(api_coins.values())) | |
params = dict(ids=coin_string,vs_currencies='usd') | |
r = requests.get(url=url, params=params) | |
prices = r.json() | |
total = 0 | |
coins_balances["timestamp"] = calendar.timegm(time.gmtime()) | |
for coin in coins: | |
try: | |
balance_response = my_balance(node_ip, user_pass, coin['tag']).json() | |
address = balance_response["address"] | |
balance = balance_response["balance"] | |
coin = balance_response["coin"] | |
price = prices[api_coins[coin]]['usd'] | |
value = round(float(balance)*float(price),2) | |
total += value | |
coins_balances["balances"].append({coin: balance}) | |
except Exception as e: | |
print(e) | |
print(balance_response) | |
pass | |
coins_balances["total"] = total | |
return coins_balances | |
def get_coins_prices(node_ip, user_pass, coins): | |
coins_prices = {"timestamp": "", "prices": []} | |
api_coins = {"BTC":"bitcoin","BCH":"bitcoin-cash","DGB":"digibyte","DASH":"dash", | |
"QTUM":"qtum","DOGE":"dogecoin","KMD":"komodo", | |
"ETH":"ethereum", "BAT":"basic-attention-token", | |
"USDC":"usd-coin", "LTC":"litecoin", "VRSC":"verus-coin","OMG":"omisego", | |
"RVN":"ravencoin","RFOX":"redfox-labs","ZILLA":"chainzilla"} | |
url = 'https://api.coingecko.com/api/v3/simple/price' | |
coin_string = ",".join(list(api_coins.values())) | |
params = dict(ids=coin_string,vs_currencies='usd') | |
r = requests.get(url=url, params=params) | |
prices = r.json() | |
while True: | |
coins_prices["timestamp"] = calendar.timegm(time.gmtime()) | |
try: | |
for coin in coins: | |
balance_response = my_balance(node_ip, user_pass, coin['tag']).json() | |
coin = balance_response["coin"] | |
if coin in api_coins.keys(): | |
price = prices[api_coins[coin]]['usd'] | |
coins_prices["prices"].append({coin: price}) | |
else: | |
print("price parser not setup for coin: " + coin) | |
break | |
except Exception as e: | |
pass | |
return coins_prices | |
def ticker_marketmaking(base_ticker, rels_tickers, margin, prices, balances): | |
for price in prices["prices"]: | |
if base_ticker in price.keys(): | |
base_price = price[base_ticker] | |
for balance in balances["balances"]: | |
if base_ticker in balance.keys(): | |
base_balance = float(balance[base_ticker]) | |
volume = ( base_balance - base_balance * 0.1) / len(rels_tickers) | |
for rel_ticker in rels_tickers: | |
for price in prices["prices"]: | |
if rel_ticker in price.keys(): | |
rel_price = price[rel_ticker] | |
trade_price = ( base_price / rel_price ) * (margin + 1) | |
print(mm2_set_price("http://127.0.0.1:7783", user_pass, "KMD", rel_ticker, trade_price, volume)) | |
def to_ticker_marketmaking(base_ticker, rels_tickers, margin, prices, balances): | |
for price in prices["prices"]: | |
if base_ticker in price.keys(): | |
base_price = price[base_ticker] | |
for balance in balances["balances"]: | |
if base_ticker in balance.keys(): | |
base_balance = float(balance[base_ticker]) | |
volume = ( base_balance - base_balance * 0.1) / len(rels_tickers) | |
for rel_ticker in rels_tickers: | |
for price in prices["prices"]: | |
if rel_ticker in price.keys(): | |
rel_price = price[rel_ticker] | |
trade_price = ( rel_price / base_price ) * (margin + 1) | |
print(mm2_max_set_price("http://127.0.0.1:7783", user_pass, rel_ticker, "KMD", trade_price)) | |
def trading_loop(): | |
while True: | |
start = time.time() | |
current_prices = get_coins_prices("http://127.0.0.1:7783", user_pass, coins) | |
current_balances = my_balances("http://127.0.0.1:7783", user_pass, coins) | |
end = time.time() | |
print(end - start) | |
print(current_prices) | |
print(current_balances) | |
ticker_marketmaking("KMD", ["RVN","VRSC","DOGE","DGB"], 0.04, current_prices, current_balances) | |
to_ticker_marketmaking("KMD", ["RVN","VRSC","DOGE","DGB"], 0.04, current_prices, current_balances) | |
# from another side need to sell these tickers back to KMD with margin (max volume) - making all to KMD | |
time.sleep(600) | |
trading_loop() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment