rgfewfger
This commit is contained in:
Binary file not shown.
183
交易/bitmart_交易.py
183
交易/bitmart_交易.py
@@ -1,15 +1,13 @@
|
||||
import re
|
||||
import hmac
|
||||
import time
|
||||
import base64
|
||||
import hashlib
|
||||
import datetime
|
||||
import requests
|
||||
|
||||
from tqdm import *
|
||||
from loguru import *
|
||||
from DrissionPage import *
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
from curl_cffi import requests
|
||||
|
||||
|
||||
def is_bullish(c): # 阳线
|
||||
@@ -45,43 +43,7 @@ class WeexTransaction:
|
||||
|
||||
self.pbar = None # 进度条对象
|
||||
|
||||
def get_signature(self, timestamp):
|
||||
# 将时间戳和密钥拼接
|
||||
string_to_sign = f'{timestamp}\n{self.secret}'
|
||||
string_to_sign = string_to_sign.encode('utf-8')
|
||||
# 使用 HMAC-SHA256 算法进行签名
|
||||
hmac_code = hmac.new(self.secret.encode('utf-8'), string_to_sign, digestmod=hashlib.sha256).digest()
|
||||
# 对签名结果进行 Base64 编码
|
||||
sign = base64.b64encode(hmac_code).decode('utf-8')
|
||||
return sign
|
||||
|
||||
# def send_dingtalk_message(self, message_content):
|
||||
# # 获取当前时间戳(毫秒)
|
||||
# timestamp = str(round(time.time() * 1000))
|
||||
# # 生成签名
|
||||
# sign = self.get_signature(timestamp, )
|
||||
# # 拼接带有签名信息的完整 Webhook URL
|
||||
# full_url = f"{self.webhook_url}×tamp={timestamp}&sign={sign}"
|
||||
#
|
||||
# # 定义消息内容
|
||||
# message = {
|
||||
# "msgtype": "text",
|
||||
# "text": {
|
||||
# "content": message_content
|
||||
# }
|
||||
# }
|
||||
#
|
||||
# # 设置请求头
|
||||
# headers = {
|
||||
# "Content-Type": "application/json"
|
||||
# }
|
||||
#
|
||||
# try:
|
||||
# # 发送 POST 请求
|
||||
# response = requests.post(full_url, headers=headers, data=json.dumps(message))
|
||||
#
|
||||
# except requests.RequestException as e:
|
||||
# print(f"请求发生错误: {e}")
|
||||
self.session = requests.Session() # 接口请求对象
|
||||
|
||||
def send_dingtalk_message(self, message_content):
|
||||
|
||||
@@ -159,31 +121,55 @@ class WeexTransaction:
|
||||
|
||||
def get_price(self):
|
||||
|
||||
headers = {
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'accept-language': 'zh-CN,zh;q=0.9',
|
||||
'cache-control': 'no-cache',
|
||||
'origin': 'https://derivatives.bitmart.com',
|
||||
'pragma': 'no-cache',
|
||||
'priority': 'u=1, i',
|
||||
'referer': 'https://derivatives.bitmart.com/',
|
||||
'sec-ch-ua': '"Not;A=Brand";v="99", "Google Chrome";v="139", "Chromium";v="139"',
|
||||
'sec-ch-ua-mobile': '?0',
|
||||
'sec-ch-ua-platform': '"Windows"',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'same-site',
|
||||
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36',
|
||||
}
|
||||
|
||||
params = {
|
||||
'unit': '30',
|
||||
'resolution': 'M',
|
||||
'contractID': '2',
|
||||
'offset': '340',
|
||||
'endTime': str(int(time.time())),
|
||||
}
|
||||
|
||||
datas = []
|
||||
for i in range(3):
|
||||
logger.info(f"获取最新数据:{i + 1}次。。。")
|
||||
try:
|
||||
logger.info(f"获取最新数据:{i + 1}次。。。")
|
||||
self.mn_tab.get(url="https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT")
|
||||
res = self.mn_tab.listen.wait(timeout=25) # 等待并获取一个数据包
|
||||
response = requests.get('https://contract-v2.bitmart.com/v1/ifcontract/quote/kline', params=params, headers=headers)
|
||||
|
||||
datas = []
|
||||
if res:
|
||||
for i in response.json()["data"]:
|
||||
print(i)
|
||||
|
||||
for data in res.response.body["data"]:
|
||||
insert_data = {
|
||||
'id': int(data["timestamp"]) - 1,
|
||||
'open': float(data["open"]),
|
||||
'high': float(data["high"]),
|
||||
'low': float(data["low"]),
|
||||
'close': float(data["close"])
|
||||
}
|
||||
insert_data = {
|
||||
'id': int(i["timestamp"]) - 1,
|
||||
'open': float(i["open"]),
|
||||
'high': float(i["high"]),
|
||||
'low': float(i["low"]),
|
||||
'close': float(i["close"])
|
||||
}
|
||||
|
||||
datas.append(insert_data)
|
||||
datas.append(insert_data)
|
||||
|
||||
return datas
|
||||
break
|
||||
except:
|
||||
pass
|
||||
time.sleep(1)
|
||||
|
||||
return False
|
||||
return datas
|
||||
|
||||
def remove_tags_and_spaces(self, html):
|
||||
# 创建 BeautifulSoup 对象
|
||||
@@ -200,7 +186,14 @@ class WeexTransaction:
|
||||
self.mn_tab.ele('x:(//button[normalize-space(text()) = "市价"])').click()
|
||||
time.sleep(1)
|
||||
|
||||
self.mn_tab.ele('x://*[@id="size_0"]').input(float(self.get_num()) / 100)
|
||||
num = self.get_num()
|
||||
if num:
|
||||
logger.info("获取可用余额成功!!!")
|
||||
else:
|
||||
logger.error("获取可用余额失败!!!")
|
||||
return
|
||||
|
||||
self.mn_tab.ele('x://*[@id="size_0"]').input(float(num) / 100)
|
||||
time.sleep(1)
|
||||
|
||||
if self.direction == "long" and not self.start:
|
||||
@@ -285,22 +278,59 @@ class WeexTransaction:
|
||||
|
||||
def get_num(self):
|
||||
|
||||
num_tab = self.page.new_tab()
|
||||
num_tab.listen.start("derivatives.bitmart.com/gw-api/contract-tiger/forward/v1/ifcontract/accounts")
|
||||
params = {
|
||||
'account_type': '3',
|
||||
'isServerCal': '1',
|
||||
}
|
||||
|
||||
for i in range(3):
|
||||
try:
|
||||
logger.info(f"获取最新数据:{i + 1}次。。。")
|
||||
num_tab.get(url="https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT")
|
||||
res = num_tab.listen.wait(timeout=15) # 等待并获取一个数据包
|
||||
response = self.session.get(
|
||||
'https://derivatives.bitmart.com/gw-api/contract-tiger/forward/v1/ifcontract/accounts',
|
||||
params=params,
|
||||
)
|
||||
|
||||
if res:
|
||||
num_tab.close()
|
||||
return res.response.body["data"]["accounts"][0]["available_balance"]
|
||||
return response.json()["data"]["accounts"][0]["available_balance"]
|
||||
except:
|
||||
pass
|
||||
time.sleep(1)
|
||||
|
||||
num_tab.close()
|
||||
return False
|
||||
|
||||
def get_token(self):
|
||||
tab = self.page.new_tab()
|
||||
tab.listen.start("derivatives.bitmart.com/gw-api/contract-tiger/forward/v1/ifcontract/userPositions")
|
||||
tab.get(url="https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT")
|
||||
|
||||
tab.listen.listen.wait(timeout=15)
|
||||
self.headers = tab.response.headers
|
||||
|
||||
self.cookies = tab.cookies()
|
||||
|
||||
self.session.cookies.update(self.cookies)
|
||||
self.session.headers.update(self.headers)
|
||||
|
||||
def get_position_status(self):
|
||||
params = {
|
||||
'status': '1',
|
||||
}
|
||||
|
||||
for i in range(3):
|
||||
try:
|
||||
response = self.session.get(
|
||||
'https://derivatives.bitmart.com/gw-api/contract-tiger/forward/v1/ifcontract/userPositions',
|
||||
params=params,
|
||||
)
|
||||
|
||||
if response.json()["data"]["positions"][0]["position_type"] == 1:
|
||||
self.start = 1
|
||||
elif response.json()["data"]["positions"][0]["position_type"] == 2:
|
||||
self.start = -1
|
||||
else:
|
||||
self.start = 0
|
||||
|
||||
return True
|
||||
except:
|
||||
time.sleep(1)
|
||||
|
||||
return False
|
||||
|
||||
@@ -325,10 +355,8 @@ class WeexTransaction:
|
||||
logger.info('关闭多余标签页失败!!!')
|
||||
|
||||
self.mn_tab = self.page.new_tab()
|
||||
self.mn_tab.listen.start("contract-v2.bitmart.com/v1/ifcontract/quote/kline")
|
||||
logger.success("浏览器开启抓包模式。。。")
|
||||
|
||||
self.mn_tab.get(url="https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT") # 打开网页
|
||||
self.mn_tab = self.page.new_tab(url="https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT") # 打开网页
|
||||
|
||||
self.pbar = tqdm(total=30, desc="等待时间中", ncols=80) # desc:进度条说明,ncols:长度
|
||||
|
||||
@@ -363,14 +391,11 @@ class WeexTransaction:
|
||||
if self.get_now_time() != self.kline_3["id"]:
|
||||
continue
|
||||
|
||||
time.sleep(15)
|
||||
|
||||
if self.get_text(target_text="全仓做多100X永续持仓"):
|
||||
self.start = 1
|
||||
elif self.get_text(target_text="全仓做空100X永续持仓"):
|
||||
self.start = -1
|
||||
if self.get_position_status():
|
||||
logger.info("获取仓位信息成功!!!")
|
||||
else:
|
||||
self.start = 0
|
||||
logger.info("获取仓位信息失败!!!")
|
||||
continue
|
||||
|
||||
if self.start == 1:
|
||||
if is_bearish(self.kline_1) and is_bearish(self.kline_2):
|
||||
|
||||
72
交易/test.py
Normal file
72
交易/test.py
Normal file
@@ -0,0 +1,72 @@
|
||||
import requests
|
||||
|
||||
cookies = {
|
||||
'AF_SYNC': '1765258261595',
|
||||
'tradeType': 'pro',
|
||||
'_ym_d': '1765261165',
|
||||
'_ym_uid': '1765261165802134230',
|
||||
'__adroll_fpc': '23875168b001e1ea5b3c338cadd7fe49-1762510277666',
|
||||
'_gcl_au': '1.1.1161787028.1762510265',
|
||||
'afUserId': '1ac8dae1-3f99-4800-b10c-6a2f5b9128a2-p',
|
||||
'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2214768493%22%2C%22first_id%22%3A%2219a5dcc471d134b-052dcac363853b8-26011051-14540800-19a5dcc471ef33%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTlhNWRjYzQ3MWQxMzRiLTA1MmRjYWMzNjM4NTNiOC0yNjAxMTA1MS0xNDU0MDgwMC0xOWE1ZGNjNDcxZWYzMyIsIiRpZGVudGl0eV9sb2dpbl9pZCI6IjE0NzY4NDkzIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2214768493%22%7D%2C%22%24device_id%22%3A%2219a5dcc471d134b-052dcac363853b8-26011051-14540800-19a5dcc471ef33%22%7D',
|
||||
'currentCurrency': 'USD',
|
||||
'_gid': 'GA1.2.727267646.1765355541',
|
||||
'_cfuvid': 'LqxpAwUIaf4fiq72Py_dM.deEKsZlGr2mGFEQZMcGiA-1765397364323-0.0.1.1-604800000',
|
||||
'golang': 'cn',
|
||||
'accessKey': 'eyJoZWFkZXIiOnsidHlwIjoiQml0TWFydCIsImFsZyI6IkJNQVBJU0lYIn0sInBheWxvYWQiOnsiamlkIjoiYzQxYWUzOGFjMjY1NDY1YjgyNDJiMGFlNGMzYmZlOWUiLCJ2ZXJzaW9uIjoiMjAyNTEyMTEiLCJleHBpcmVzQXQiOjE3NjU1MTAzMDkyMjMsImJtIjoia1NkYzJOY0JuQnVTdEsvTk1OamFlQ0R6NVRIeS9wZXIxNmdYeDZPRFBWLytxaVh0UW5WcWoyNjNobHQwSWNaQmZDVWh0N0xDUGRDZlpYYVg4aFJJekN6aGpubWxSNC9Sa2prQWNPR3NKUFo5SUp5N0MrSjhCa3pPTHJObE5mVFk0K0JjQkVCeEZuNVkvNXJEN2dYUWRVRm5MWkZpZXJ2V0doaW95ZzY5dHFFQ2JlK0FRMmJKU25qNmxRMWtNM3dCaHM2dzBvNVVhSFB4RXdmY3V5MFlObXVEZkllc1V1MFRERFRZZXFJOHltT2RqNmNUd2RuKzZlMnpJampZM3ZuVkhYOG9sblBkNTFVQ0RQM1YzUUY1QVFTRGVGd1ptYkUyTXNFR0R3QTRRTzBvZTlhMWozZWhneDlDY0IxTW1UMy96b3VrRFpESk80Tm9XVmNPU01YZzVEbDNpaU1Zeml6UWlxL1MvS1IxZUh4a0Vsa3Z6dEo1UzZGU2FYaWY3Yms2In0sInNpZ25hdHVyZSI6ImpsYTF3SUFySGtSdml2Z29QY1JKdEJMd1Vxb2RRb2VjUWFNY2NqK05XNFNXUzFjOFV1UGIvUnREd3V0Q3lGMStVVnBUbTFVQkZCQm1HekFEdjZBQnRnPT0ifQ==',
|
||||
'accessSalt': 'wxtMqnh06IDcwNWA2CJXVcWJgQEhONNngZu',
|
||||
'tokenAt': '1765510309223',
|
||||
'tokenSt': '1765423911627',
|
||||
'__cf_bm': '0C1pnUOIxv6UEs41adhYfAK6xRZl4W8j5Vz1QJgiNJQ-1765424190-1.0.1.1-5hfWqfjxsvm3ebMH8k5InFTDa9.ASF9nnizvLopXaacWUKoOTCPj0AC42fjXnve7Q.oVOJHIz3x9Gn80uQOYUWBa8gMPMhZFqYk6OLlAIds',
|
||||
'hasDelegation': 'false',
|
||||
'delegationType': '0',
|
||||
'delegationTypeList': '[]',
|
||||
'_ga_R8QWWJS24Y': 'GS2.1.s1765422430$o5$g1$t1765424194$j58$l0$h0',
|
||||
'_ga_7BWH3BJ925': 'GS2.1.s1765422430$o6$g1$t1765424194$j58$l0$h0',
|
||||
'_ga_PJBF32MZ6E': 'GS2.1.s1765422430$o6$g1$t1765424194$j58$l0$h0',
|
||||
'_ga_0V649X1YZB': 'GS2.1.s1765422430$o5$g1$t1765424194$j58$l0$h0',
|
||||
'_ga': 'GA1.2.1461651029.1762510272',
|
||||
}
|
||||
|
||||
headers = {
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'accept-language': 'zh-CN,zh;q=0.9',
|
||||
'baggage': 'sentry-environment=production,sentry-release=e9b215a,sentry-public_key=42eada5febd1737fdcb9413516bdb44f,sentry-trace_id=dcfafebe185040448b9fa1864b4d65f0,sentry-sampled=false,sentry-sample_rand=0.7037873385703364,sentry-sample_rate=0.2',
|
||||
'cache-control': 'no-cache',
|
||||
'content-type': 'application/json;charset=UTF-8',
|
||||
'expires': '0',
|
||||
'pragma': 'no-cache',
|
||||
'priority': 'u=1, i',
|
||||
'referer': 'https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT?theme=dark',
|
||||
'sec-ch-ua': '"Not;A=Brand";v="99", "Google Chrome";v="139", "Chromium";v="139"',
|
||||
'sec-ch-ua-mobile': '?0',
|
||||
'sec-ch-ua-platform': '"Windows"',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'same-origin',
|
||||
'sentry-trace': 'dcfafebe185040448b9fa1864b4d65f0-8663a32b9bdfc923-0',
|
||||
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36',
|
||||
'x-bm-client': 'WEB',
|
||||
'x-bm-contract': '2',
|
||||
'x-bm-device': '4e796e2e0eab358305db106ff976ef2e',
|
||||
'x-bm-tag': '',
|
||||
'x-bm-timezone': 'Asia/Shanghai',
|
||||
'x-bm-timezone-offset': '-480',
|
||||
'x-bm-ua': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36',
|
||||
'x-bm-version': 'e9b215a',
|
||||
# 'cookie': 'AF_SYNC=1765258261595; tradeType=pro; _ym_d=1765261165; _ym_uid=1765261165802134230; __adroll_fpc=23875168b001e1ea5b3c338cadd7fe49-1762510277666; _gcl_au=1.1.1161787028.1762510265; afUserId=1ac8dae1-3f99-4800-b10c-6a2f5b9128a2-p; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2214768493%22%2C%22first_id%22%3A%2219a5dcc471d134b-052dcac363853b8-26011051-14540800-19a5dcc471ef33%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTlhNWRjYzQ3MWQxMzRiLTA1MmRjYWMzNjM4NTNiOC0yNjAxMTA1MS0xNDU0MDgwMC0xOWE1ZGNjNDcxZWYzMyIsIiRpZGVudGl0eV9sb2dpbl9pZCI6IjE0NzY4NDkzIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2214768493%22%7D%2C%22%24device_id%22%3A%2219a5dcc471d134b-052dcac363853b8-26011051-14540800-19a5dcc471ef33%22%7D; currentCurrency=USD; _gid=GA1.2.727267646.1765355541; _cfuvid=LqxpAwUIaf4fiq72Py_dM.deEKsZlGr2mGFEQZMcGiA-1765397364323-0.0.1.1-604800000; golang=cn; accessKey=eyJoZWFkZXIiOnsidHlwIjoiQml0TWFydCIsImFsZyI6IkJNQVBJU0lYIn0sInBheWxvYWQiOnsiamlkIjoiYzQxYWUzOGFjMjY1NDY1YjgyNDJiMGFlNGMzYmZlOWUiLCJ2ZXJzaW9uIjoiMjAyNTEyMTEiLCJleHBpcmVzQXQiOjE3NjU1MTAzMDkyMjMsImJtIjoia1NkYzJOY0JuQnVTdEsvTk1OamFlQ0R6NVRIeS9wZXIxNmdYeDZPRFBWLytxaVh0UW5WcWoyNjNobHQwSWNaQmZDVWh0N0xDUGRDZlpYYVg4aFJJekN6aGpubWxSNC9Sa2prQWNPR3NKUFo5SUp5N0MrSjhCa3pPTHJObE5mVFk0K0JjQkVCeEZuNVkvNXJEN2dYUWRVRm5MWkZpZXJ2V0doaW95ZzY5dHFFQ2JlK0FRMmJKU25qNmxRMWtNM3dCaHM2dzBvNVVhSFB4RXdmY3V5MFlObXVEZkllc1V1MFRERFRZZXFJOHltT2RqNmNUd2RuKzZlMnpJampZM3ZuVkhYOG9sblBkNTFVQ0RQM1YzUUY1QVFTRGVGd1ptYkUyTXNFR0R3QTRRTzBvZTlhMWozZWhneDlDY0IxTW1UMy96b3VrRFpESk80Tm9XVmNPU01YZzVEbDNpaU1Zeml6UWlxL1MvS1IxZUh4a0Vsa3Z6dEo1UzZGU2FYaWY3Yms2In0sInNpZ25hdHVyZSI6ImpsYTF3SUFySGtSdml2Z29QY1JKdEJMd1Vxb2RRb2VjUWFNY2NqK05XNFNXUzFjOFV1UGIvUnREd3V0Q3lGMStVVnBUbTFVQkZCQm1HekFEdjZBQnRnPT0ifQ==; accessSalt=wxtMqnh06IDcwNWA2CJXVcWJgQEhONNngZu; tokenAt=1765510309223; tokenSt=1765423911627; __cf_bm=0C1pnUOIxv6UEs41adhYfAK6xRZl4W8j5Vz1QJgiNJQ-1765424190-1.0.1.1-5hfWqfjxsvm3ebMH8k5InFTDa9.ASF9nnizvLopXaacWUKoOTCPj0AC42fjXnve7Q.oVOJHIz3x9Gn80uQOYUWBa8gMPMhZFqYk6OLlAIds; hasDelegation=false; delegationType=0; delegationTypeList=[]; _ga_R8QWWJS24Y=GS2.1.s1765422430$o5$g1$t1765424194$j58$l0$h0; _ga_7BWH3BJ925=GS2.1.s1765422430$o6$g1$t1765424194$j58$l0$h0; _ga_PJBF32MZ6E=GS2.1.s1765422430$o6$g1$t1765424194$j58$l0$h0; _ga_0V649X1YZB=GS2.1.s1765422430$o5$g1$t1765424194$j58$l0$h0; _ga=GA1.2.1461651029.1762510272',
|
||||
}
|
||||
|
||||
params = {
|
||||
'account_type': '3',
|
||||
'isServerCal': '1',
|
||||
}
|
||||
|
||||
response = requests.get(
|
||||
'https://derivatives.bitmart.com/gw-api/contract-tiger/forward/v1/ifcontract/accounts',
|
||||
params=params,
|
||||
cookies=cookies,
|
||||
headers=headers,
|
||||
)
|
||||
|
||||
print(response.json()["data"]["accounts"][0]["available_balance"])
|
||||
Reference in New Issue
Block a user