Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- #запрашивает баланс пользователя
- #проходит tkPar читает настройки, с биржи цену, ставти если нужно ордера
- #ордера не снимает и не учитывает, на ошибки забивает, за спредом не следит!!!
- import ssl
- import json
- import time
- import hmac
- import hashlib
- import urllib
- import urllib2
- from decimal import *
- #create by reddish111 ETH-0x394b570584F2D37D441E669e74563CD164142930 BTC-12r2MkL2BLtYasUGxysngEz1uJTpvB1vQE like cupone
- # Replace these with your own API key data
- wexAKey = 'your-api-key-here'
- wexASec = 'your-api-secret-here'
- #кофициент bns и вычеты балансов 'min_amount',cof=b2/b1,bns,min_b1,min_b2
- tkPar={'usdet_usd':['0.2','1','0.02','0','0'],'ruret_rur':['8','2','0.01','0','1500']}
- def rqurl(url,key='',secret='',param=''): #(Low Level API call)
- ps={}
- hd={'User-Agent':'bot','Content-type':'application/x-www-form-urlencoded'}
- if param!='':
- param['nonce']=int(time.time())
- ps=urllib.urlencode(param)
- sig = hmac.new(secret,ps, digestmod=hashlib.sha512).hexdigest()
- hd.update({'Key': key,'Sign': sig,}) #'nonce':nonce()
- url='https://wex.nz/tapi/'
- else:
- url='https://wex.nz/api/3/'+url
- # print (url, ps,hd)
- rop = urllib2.urlopen(urllib2.Request(url, ps,hd),context=ssl._create_unverified_context())
- data = json.loads(rop.read())
- # print data
- rop.close()
- return data
- def rqurl2(met,par={}): #(trade api)
- par['method']=met
- res=rqurl('',wexAKey,wexASec,par)
- return res
- def dds(par): #конверт в dec через str
- ret=Decimal(str(par))
- return ret
- amPrBuy={} #масив pair*цен*sumм_закупа
- def amftab(pair,prl,up=False,n=None):
- res=dds('0')
- poped=[]
- if amPrBuy.get(pair) is None:
- amPrBuy[pair]={}
- if up!=False: #обновить
- if n[1]>0:
- if amPrBuy[pair].get(n[0]) is None:
- amPrBuy[pair][n[0]] = n[1]
- else:
- amPrBuy[pair][n[0]] = amPrBuy[pair][n[0]]+n[1]
- else:
- amn=amPrBuy[pair].get(n[0])
- if amn is None:
- amn=0
- namn=amn + n[1]
- if namn >0 : #добавить | обновить
- amPrBuy[pair][n[0]]=namn
- else:
- if amn!=0:
- amPrBuy[pair].pop(n[0])
- for pr in amPrBuy[pair]:
- if pr<n[0]:
- namn=amPrBuy[pair][pr]+namn
- if namn>0:
- amPrBuy[pair][pr]=namn
- break
- else:
- poped.append(pr)
- else: #выдать сумму балансов ниже цены
- for pr in amPrBuy[pair]:
- if pr<prl:
- res=res+amPrBuy[pair][pr]
- for i in poped: #удалить всё использованное
- amPrBuy[pair].pop(i)
- return res
- def runBot():
- fpr='' #полный список пар для запроса
- for pr in tkPar:
- fpr=pr if fpr=='' else fpr+'-'+pr
- dep=rqurl('depth/'+fpr) #информацию о активных ордерах пары
- bal=rqurl2('getInfo')
- time.sleep(1) #чтоб nonce + было
- for pr in tkPar: #проверить балансировку и если надо сделать ордер
- c1,c2=pr.split('_') #названия валют пары
- bf=bal['return']['funds']
- tp=tkPar[pr]
- b1=dds(bf[c1])-dds(tp[3])
- b2=dds(bf[c2])-dds(tp[4])
- prs=dep[pr]['asks'][0]
- prb=dep[pr]['bids'][0]
- pp=dds(tp[1])
- dprs=dds(prs[0])
- dprb=dds(prb[0])
- bm=b1*pp*dprs
- bl=b1*pp*dprb
- dtp=dds(tp[0])
- print pr,'None' if amPrBuy.get(pr) is None else amPrBuy[pr]
- print(b1,b2,bm,bl,dtp) #тут ещё условия для оптимизации
- if b2<bm: #продажа или покупка что то 1!!!
- prl=dprs*(1-dds(tp[2]))
- am=amftab(pr,prl).quantize(dtp) #ставить ордера если есть запас по таблице
- am2=((bm-b2)/(2*dprs)).quantize(dtp) #выбрать балансер
- if am2<am:
- am=am2 #поставить меньшее
- if am<dtp: #меньше min не ставить
- continue
- res=rqurl2('Trade',{'pair':pr,'type':'sell','rate':str(prs[0]),'amount':str(am)})
- if res.get('success')==True:
- amftab(pr,prl,True,[prl,-am]) #обновить таблицу
- print 'create sell',prs[0],am #,res
- else:
- if b2>bl:
- am=((b2-bl)/(2*dprb)).quantize(dtp)
- if am<dtp: #меньше min не ставить
- continue
- res=rqurl2('Trade',{'pair':pr,'type':'buy','rate':str(prb[0]),'amount':str(am)})
- # print res
- if res.get('success')==True:
- amftab(pr,dds(prb[0]),True,[dds(prb[0]),am]) #обновить таблицу
- print 'create buy',prb[0],am #,res
- #если не учитывать открытые ордера то если баланс=0 с 1 стороны выставит весь баланс 2ой в ордера!!!
- #args=sys.argv #короче для старта должно быть примерно cof=b2/b1
- if __name__ == '__main__':
- for i in range(100000):
- print i
- # try:
- runBot()
- # except:
- # print 'pass some erorr'
- time.sleep(10) #спать 10сек
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement