Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@tonymorony
Last active September 1, 2019 20:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tonymorony/abf240dad5309b7d858db24ad33aa87d to your computer and use it in GitHub Desktop.
Save tonymorony/abf240dad5309b7d858db24ad33aa87d to your computer and use it in GitHub Desktop.
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