Name
简单的做市对冲功能
Author
3piggy
Strategy Description
小平台自己做市,降低风险,对冲到大交易所 策略思想: 死循环轮询账户资产余额,将变动的币对冲到火币 同时发送钉钉与微信通知给管理员 使用sqlite保存历史账户余额,为其余策略服务,方便财务管理
Source (python)
# -*- coding: UTF-8 -*-
import time
from api import *
from Huobiapi import *
import sqlite3
def wechatmsg(text,desp):
server = 'https://sc.ftqq.com/xxxxxx.send'
payload = {'text':text,'desp':desp}
requests.post(server,params = payload)
def dingmsg(title,msg):
url = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxx'
data = {
"msgtype": "markdown",
"markdown": {
"title":title+msg,
"text": "#### " + title + "\n"
"> " + msg
}}
header = {'Content-Type':'application/json'}
r = requests.post(url = url ,headers=header,data = json.dumps(data)).json()
return r
def check():
try:
pre_balance = {}
conn = sqlite3.connect("/root/bot/hedge.db")
cursor = conn.cursor()
sql = 'select * from balance order by id desc limit 20;'
result = list(cursor.execute(sql))
for a in result:
if a[1] in list(pre_balance.keys()):
break
else:
pre_balance[a[1]] = a[2] #读取之前balance
coinname = list(pre_balance.keys())
print(pre_balance,coinname)
balance = GetBalance()
t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
for x in balance:
sql = "insert into balance (coin,balance,time) values(?,?,?);"
b = x['balance']+x['frozenBalance']
if b != 0:
v = (x['coin']['unit'],b,t)
print(v)
cursor.execute(sql,v)
for n in coinname:
if n == x['coin']['unit']:
d = round(b - pre_balance[n],5) #数量差
if d > 0:
Sell(n,d)
msg = '对冲卖出'+n+'数量:'+str(d)
print(msg)
wechatmsg('对冲',msg)
dingmsg('对冲',msg)
sql = "insert into hedge (coin,hedge_amount,status,time) values(?,?,?,?);"
v = (n,d,0,t)
cursor.execute(sql,v)
elif d < 0:
Buy(n,d)
msg = '对冲买入:'+n+'数量:'+str(d)
print(msg)
wechatmsg('对冲',msg)
dingmsg('对冲',msg)
sql = "insert into hedge (coin,hedge_amount,status,time) values(?,?,?,?);"
v = (n,d,0,t)
cursor.execute(sql,v)
else:
print('no hedge')
conn.commit()
conn.close()
except Exception as e:
raise e
def insert_balance():
try:
conn = sqlite3.connect("hedge.db")
cursor = conn.cursor()
balance = GetBalance()
t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
for x in balance:
sql = "insert into balance (coin,balance,time) values(?,?,?);"
b = x['balance']+x['frozenBalance']
if b != 0:
v = (x['coin']['unit'],b,t)
cursor.execute(sql,v)
conn.commit()
conn.close()
print('finish')
except Exception as e:
print('err',e)
if __name__ == '__main__':
while 1:
try:
check()
except Exception as e:
print(e)
time.sleep(30)
Detail
https://www.fmz.com/strategy/178194
Last Modified
2019-12-12 14:39:05