xync-client 0.0.57.dev20__tar.gz → 0.0.57.dev22__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {xync_client-0.0.57.dev20/xync_client.egg-info → xync_client-0.0.57.dev22}/PKG-INFO +1 -1
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Abc/Ex.py +4 -4
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Bybit/agent.py +53 -65
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22/xync_client.egg-info}/PKG-INFO +1 -1
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/.env.sample +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/.gitignore +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/.pre-commit-config.yaml +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/README.md +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/makefile +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/pyproject.toml +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/setup.cfg +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/TestAgent.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/TestAsset.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/TestEx.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/TestOrder.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/_todo_refact/Binance/test_binance.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/_todo_refact/Bybit/test_bybit.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/_todo_refact/Bybit/test_bybit_p2p.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/_todo_refact/Gate/test_gate.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/_todo_refact/Htx/test_htx_p2p.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/_todo_refact/Wallet/test_agent.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/_todo_refact/Wallet/test_ex.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/_todo_refact/__init__.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/_todo_refact/_test_ex.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Abc/Agent.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Abc/Asset.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Abc/Auth.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Abc/BaseTest.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Abc/InAgent.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Abc/Order.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Abc/xtype.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Binance/__init__.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Binance/binance_async.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Binance/earn_api.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Binance/etype/ad.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Binance/etype/pm.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Binance/ex.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Binance/exceptions.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Binance/sapi.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Binance/web_c2c.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/BingX/__init__.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/BingX/agent.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/BingX/base.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/BingX/etype/ad.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/BingX/etype/pm.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/BingX/ex.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/BingX/req.mjs +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/BingX/sign.js +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/BitGet/__init__.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/BitGet/agent.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/BitGet/etype/ad.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/BitGet/ex.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/BitPapa/ex.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Bybit/InAgent.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Bybit/etype/ad.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Bybit/etype/cred.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Bybit/etype/order.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Bybit/ex.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Bybit/order.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Bybit/web_earn.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Bybit/web_p2p.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Bybit/ws.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Gate/etype/ad.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Gate/ex.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Gate/premarket.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Gmail/__init__.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Htx/agent.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Htx/earn.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Htx/etype/__init__.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Htx/etype/ad.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Htx/etype/cred.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Htx/etype/pm.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Htx/etype/test.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Htx/ex.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/KuCoin/etype/ad.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/KuCoin/etype/pm.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/KuCoin/ex.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/KuCoin/web.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Mexc/etype/ad.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Mexc/etype/pm.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Mexc/ex.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Okx/etype/ad.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Okx/etype/pm.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Okx/ex.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Pms/.gitignore +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Pms/Alfa/__init__.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Pms/Alfa/state.json +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Pms/Ozon/__init__.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Pms/Sber/__init__.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Pms/Tinkoff/__init__.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Pms/Tinkoff/state.json +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Pms/Volet/__init__.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Pms/Volet/_todo_req/req.mjs +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Pms/Volet/_todo_req/req.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Pms/Volet/api.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Pms/Volet/pl.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/TgWallet/agent.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/TgWallet/asset.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/TgWallet/auth.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/TgWallet/ex.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/TgWallet/inAgent.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/TgWallet/order.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/TgWallet/pyd.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/TgWallet/pyro.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/TgWallet/web.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/__init__.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/loader.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/pm_unifier.py +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client.egg-info/SOURCES.txt +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client.egg-info/dependency_links.txt +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client.egg-info/requires.txt +0 -0
- {xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client.egg-info/top_level.txt +0 -0
|
@@ -261,13 +261,13 @@ class BaseExClient(HttpClient):
|
|
|
261
261
|
}
|
|
262
262
|
prs: tuple[dict, dict] = await self.pairs()
|
|
263
263
|
for is_sell in (0, 1):
|
|
264
|
-
|
|
264
|
+
pss: list[models.PairSide] = []
|
|
265
265
|
for cur, coinz in prs[is_sell].items():
|
|
266
266
|
for coin in coinz:
|
|
267
267
|
pair, _ = await models.Pair.get_or_create(coin=coins[coin], cur=curs[cur])
|
|
268
|
-
pairex, _ = await models.PairEx.get_or_create(pair=pair, ex=self.ex)
|
|
269
|
-
|
|
270
|
-
await models.
|
|
268
|
+
# pairex, _ = await models.PairEx.get_or_create(pair=pair, ex=self.ex) # todo: разные ли комишки на покупку и продажу?
|
|
269
|
+
pss += [models.PairSide(is_sell=is_sell, pair=pair)]
|
|
270
|
+
await models.PairSide.bulk_create(pss, ignore_conflicts=True)
|
|
271
271
|
|
|
272
272
|
# Сохранение чужого объявления (с Pm-ами) в бд
|
|
273
273
|
async def ad_pydin2db(self, ad_pydin: BaseAdIn) -> models.Ad:
|
|
@@ -19,7 +19,7 @@ from x_model import init_db
|
|
|
19
19
|
from xync_schema import models
|
|
20
20
|
from xync_schema.enums import OrderStatus
|
|
21
21
|
|
|
22
|
-
from xync_schema.models import Actor, Cond,
|
|
22
|
+
from xync_schema.models import Actor, Cond, CondSim, Pmcur, PairSide
|
|
23
23
|
|
|
24
24
|
from xync_client.Abc.Agent import BaseAgentClient
|
|
25
25
|
from xync_client.Abc.xtype import BaseOrderReq, FlatDict
|
|
@@ -395,8 +395,8 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
395
395
|
size=30,
|
|
396
396
|
# status=status, # 50 - завершено
|
|
397
397
|
# tokenId=token_id,
|
|
398
|
-
|
|
399
|
-
|
|
398
|
+
beginTime=begin_time,
|
|
399
|
+
endTime=end_time,
|
|
400
400
|
# side=side, # 1 - продажа, 0 - покупка
|
|
401
401
|
)
|
|
402
402
|
except FailedRequestError as e:
|
|
@@ -443,12 +443,14 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
443
443
|
pmcur=pmcur, person=seller_person, detail=ecredex.accountNo
|
|
444
444
|
)
|
|
445
445
|
):
|
|
446
|
-
extr = (
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
446
|
+
extr = ", ".join(
|
|
447
|
+
[
|
|
448
|
+
ecredex.bankName,
|
|
449
|
+
ecredex.branchName,
|
|
450
|
+
ecredex.qrcode,
|
|
451
|
+
ecredex.payMessage,
|
|
452
|
+
ecredex.paymentExt1,
|
|
453
|
+
]
|
|
452
454
|
)
|
|
453
455
|
crd = await models.Cred.create(
|
|
454
456
|
detail=ecredex.accountNo,
|
|
@@ -542,17 +544,17 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
542
544
|
self,
|
|
543
545
|
coinex: models.Coinex,
|
|
544
546
|
curex: models.Curex,
|
|
545
|
-
|
|
547
|
+
taker_side: bool,
|
|
546
548
|
pms: list[str],
|
|
547
549
|
ceil: float,
|
|
548
550
|
volume: float = None,
|
|
549
551
|
place: int = 0,
|
|
550
552
|
):
|
|
551
|
-
k = (-1) ** int(
|
|
553
|
+
k = (-1) ** int(taker_side) # on_buy=1, on_sell=-1
|
|
552
554
|
|
|
553
555
|
creds: dict[models.Pmex, models.CredEx] = await self.get_credexs_by_norms(pms, curex.cur_id)
|
|
554
556
|
if not volume:
|
|
555
|
-
if
|
|
557
|
+
if taker_side: # гонка в стакане продажи - мы покупаем монету за ФИАТ
|
|
556
558
|
# todo: we using the only one fiat exactly from THE FIRST cred
|
|
557
559
|
fiat = await models.Fiat.get(cred_id=list(creds.values())[0].cred_id)
|
|
558
560
|
volume = fiat.amount / ceil
|
|
@@ -565,14 +567,14 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
565
567
|
credex_ids = [str(p.exid) for p in creds.values()]
|
|
566
568
|
|
|
567
569
|
while self.actor.person.user.status > 0:
|
|
568
|
-
ads: list[Ad] = await self.ads(coinex, curex,
|
|
570
|
+
ads: list[Ad] = await self.ads(coinex, curex, taker_side, list(creds.keys()))
|
|
569
571
|
self.overprice_filter(ads, ceil, k)
|
|
570
572
|
if not ads:
|
|
571
|
-
print(coinex.exid, curex.exid,
|
|
573
|
+
print(coinex.exid, curex.exid, taker_side, "no ads!")
|
|
572
574
|
await sleep(15)
|
|
573
575
|
continue
|
|
574
576
|
if not (cur_plc := [i for i, ad in enumerate(ads) if int(ad.userId) == self.actor.exid]):
|
|
575
|
-
logging.warning(f"No racing in {'-' if
|
|
577
|
+
logging.warning(f"No racing in {'-' if taker_side else '+'}{coinex.exid}/{curex.exid}")
|
|
576
578
|
await sleep(15)
|
|
577
579
|
continue
|
|
578
580
|
(cur_plc,) = cur_plc
|
|
@@ -583,13 +585,13 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
583
585
|
cad = self.get_cad(ads, ceil, k, place, cur_plc)
|
|
584
586
|
new_price = f"%.{curex.cur.scale}f" % round(float(cad.price) - k * step(mad, cad), curex.cur.scale)
|
|
585
587
|
if mad.price == new_price: # Если нужная цена и так уже стоит
|
|
586
|
-
print(end="v" if
|
|
588
|
+
print(end="v" if taker_side else "^", flush=True)
|
|
587
589
|
await sleep(3)
|
|
588
590
|
continue
|
|
589
591
|
if cad.priceType: # Если цена конкурента плавающая, то повышаем себе не цену, а %
|
|
590
592
|
new_premium = str(round(float(cad.premium) - k * step(mad, cad), 2))
|
|
591
593
|
if mad.premium == new_premium: # Если нужный % и так уже стоит
|
|
592
|
-
print(end="v" if
|
|
594
|
+
print(end="v" if taker_side else "^", flush=True)
|
|
593
595
|
await sleep(3)
|
|
594
596
|
continue
|
|
595
597
|
mad.premium = new_premium
|
|
@@ -599,14 +601,14 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
599
601
|
req = AdUpdateRequest.model_validate({**mad.model_dump(), "price": new_price, "paymentIds": credex_ids})
|
|
600
602
|
try:
|
|
601
603
|
_res = self.ad_upd(req)
|
|
602
|
-
print("-" if
|
|
604
|
+
print("-" if taker_side else "+", end=req.price, flush=True)
|
|
603
605
|
except FailedRequestError as e:
|
|
604
606
|
if ExcCode(e.status_code) == ExcCode.FixPriceLimit:
|
|
605
607
|
if limits := re.search(
|
|
606
608
|
r"The fixed price set is lower than ([0-9]+\.?[0-9]{0,2}) or higher than ([0-9]+\.?[0-9]{0,2})",
|
|
607
609
|
e.message,
|
|
608
610
|
):
|
|
609
|
-
req.price = limits.group(1 if
|
|
611
|
+
req.price = limits.group(1 if taker_side else 2)
|
|
610
612
|
if req.price != mad.price:
|
|
611
613
|
_res = self.ad_upd(req)
|
|
612
614
|
else:
|
|
@@ -629,20 +631,20 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
629
631
|
self,
|
|
630
632
|
coinex: models.Coinex,
|
|
631
633
|
curex: models.Curex,
|
|
632
|
-
|
|
634
|
+
taker_side: bool,
|
|
633
635
|
pms: list[str] = None,
|
|
634
636
|
ceil: float = None,
|
|
635
637
|
volume: float = 9000,
|
|
636
638
|
min_fiat: int = None,
|
|
637
639
|
max_fiat: int = None,
|
|
638
640
|
):
|
|
639
|
-
k = (-1) ** int(
|
|
641
|
+
k = (-1) ** int(taker_side) # on_buy=1, on_sell=-1
|
|
640
642
|
|
|
641
643
|
if pms:
|
|
642
644
|
creds: dict[models.Pmex, models.CredEx] = await self.get_credexs_by_norms(pms, curex.cur_id)
|
|
643
645
|
[str(p.exid) for p in creds.values()]
|
|
644
646
|
|
|
645
|
-
if
|
|
647
|
+
if taker_side: # гонка в стакане продажи - мы покупаем монету за ФИАТ
|
|
646
648
|
fiats = await models.Fiat.filter(
|
|
647
649
|
cred_id__in=[cx.cred_id for cx in creds.values()], amount__not=F("target")
|
|
648
650
|
)
|
|
@@ -651,17 +653,16 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
651
653
|
asset = await models.Asset.get(addr__actor=self.actor, addr__coin_id=coinex.coin_id)
|
|
652
654
|
volume = min(volume, asset.free - (asset.freeze or 0) - (asset.lock or 0))
|
|
653
655
|
volume = str(round(volume, coinex.coin.scale))
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
sell=is_sell,
|
|
656
|
+
ps = await PairSide.get(
|
|
657
|
+
is_sell=taker_side,
|
|
658
|
+
pair__coin_id=coinex.coin_id,
|
|
659
|
+
pair__cur_id=curex.cur_id,
|
|
659
660
|
)
|
|
660
661
|
while self.actor.person.user.status > 0: # todo: depends on rest asset/fiat
|
|
661
|
-
ads: list[Ad] = await self.ads(coinex, curex,
|
|
662
|
+
ads: list[Ad] = await self.ads(coinex, curex, taker_side, pms and list(creds.keys()))
|
|
662
663
|
|
|
663
664
|
if not ads:
|
|
664
|
-
print(coinex.exid, curex.exid,
|
|
665
|
+
print(coinex.exid, curex.exid, taker_side, "no ads!")
|
|
665
666
|
await sleep(300)
|
|
666
667
|
continue
|
|
667
668
|
|
|
@@ -669,11 +670,11 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
669
670
|
if (ceil - float(ad.price)) * k < 0:
|
|
670
671
|
break
|
|
671
672
|
if int(ad.userId) == self.actor.exid:
|
|
672
|
-
logging.info(f"My ad {'-' if
|
|
673
|
+
logging.info(f"My ad {'-' if taker_side else '+'}{coinex.exid}/{curex.exid} on place#{i}")
|
|
673
674
|
continue
|
|
674
|
-
ad_db, isnew = await self.cond_upsert(ad,
|
|
675
|
+
ad_db, isnew = await self.cond_upsert(ad, ps=ps)
|
|
675
676
|
if isnew:
|
|
676
|
-
s = f"{'-' if
|
|
677
|
+
s = f"{'-' if taker_side else '+'}{ad.price}[{ad.minAmount}-{ad.maxAmount}]{coinex.exid}/{curex.exid}"
|
|
677
678
|
print(s, end=" | ", flush=True)
|
|
678
679
|
elif not isnew and ad_db and ad_db.cond.raw_txt != clean(ad.remark):
|
|
679
680
|
# ad_db.cond.parsed = False
|
|
@@ -694,20 +695,16 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
694
695
|
await sleep(6)
|
|
695
696
|
|
|
696
697
|
async def cond_upsert(
|
|
697
|
-
self, ad: Ad, rname: str = None,
|
|
698
|
+
self, ad: Ad, rname: str = None, ps: PairSide = None, force: bool = False
|
|
698
699
|
) -> tuple[models.Ad, bool]:
|
|
699
700
|
sim, cid = None, None
|
|
701
|
+
ad_db = await models.Ad.get_or_none(exid=ad.id, ex=self.ex_client.ex).prefetch_related("cond")
|
|
700
702
|
# если точно такое условие уже есть в бд, ниче делать не надо
|
|
701
703
|
if not (cleaned := clean(ad.remark)) or (cid := {oc[0]: ci for ci, oc in self.all_conds.items()}.get(cleaned)):
|
|
702
|
-
|
|
703
|
-
return (
|
|
704
|
-
await models.Ad.get_or_none(exid=ad.id).prefetch_related("maker__person")
|
|
705
|
-
or await self.ad_create(ad, cid, rname, dr),
|
|
706
|
-
False,
|
|
707
|
-
)
|
|
708
|
-
return None, False
|
|
704
|
+
return (ad_db or force and await self.ad_create(ad, cid, rname, ps)), False
|
|
709
705
|
# если эта объява уже есть в бд
|
|
710
|
-
if ad_db
|
|
706
|
+
if ad_db:
|
|
707
|
+
await ad_db.fetch_related("cond__ads", "maker")
|
|
711
708
|
# у измененного условия этой объявы есть другие объявы?
|
|
712
709
|
if rest_ads := set(ad_db.cond.ads) - {ad_db}:
|
|
713
710
|
# другие объявы этого условия принадлежат другим юзерам
|
|
@@ -768,7 +765,7 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
768
765
|
return actor.person
|
|
769
766
|
return await models.Person.create(name=name)
|
|
770
767
|
|
|
771
|
-
async def ad_create(self, ad: Ad, cid: int, rname: str = None,
|
|
768
|
+
async def ad_create(self, ad: Ad, cid: int, rname: str = None, ps: PairSide = None) -> models.Ad:
|
|
772
769
|
act_df = {}
|
|
773
770
|
if int(ad.userId) != self.actor.exid:
|
|
774
771
|
act_df |= {"name": ad.nickName}
|
|
@@ -782,16 +779,16 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
782
779
|
max_fiat=ad.maxAmount,
|
|
783
780
|
cond_id=cid,
|
|
784
781
|
exid=int(ad.id),
|
|
785
|
-
|
|
786
|
-
or await
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
pairex__pair__cur__ticker=ad.currencyId,
|
|
782
|
+
pair_side=ps
|
|
783
|
+
or await PairSide.get(
|
|
784
|
+
is_sell=ad.side,
|
|
785
|
+
pair__coin__ticker=ad.tokenId,
|
|
786
|
+
pair__cur__ticker=ad.currencyId,
|
|
791
787
|
),
|
|
788
|
+
ex=self.ex_client.ex,
|
|
792
789
|
maker=actor,
|
|
793
790
|
)
|
|
794
|
-
await ad_db.
|
|
791
|
+
await ad_db.pms.add(*(await models.Pm.filter(pmexs__ex=self.ex_client.ex, pmexs__exid__in=ad.payments)))
|
|
795
792
|
return ad_db
|
|
796
793
|
|
|
797
794
|
async def sim_new(self, new_cid: int, sim: int, old_cid: int):
|
|
@@ -814,15 +811,9 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
814
811
|
self.cond_sims = {cs.cond_id: (cs.cond_rel_id, cs.similarity) for cs in await CondSim.all()}
|
|
815
812
|
for c, (o, s) in self.cond_sims.items():
|
|
816
813
|
self.sim_conds[o].add(c)
|
|
817
|
-
dr = await Direction.get(
|
|
818
|
-
sell=1,
|
|
819
|
-
pairex__ex=self.ex_client.ex,
|
|
820
|
-
pairex__pair__coin__ticker="USDT",
|
|
821
|
-
pairex__pair__cur__ticker="RUB",
|
|
822
|
-
)
|
|
823
814
|
for ad_db in await models.Ad.filter(direction__pairex__ex=self.ex_client.ex).prefetch_related("cond", "maker"):
|
|
824
815
|
ad = Ad(id=str(ad_db.exid), userId=str(ad_db.maker.exid), remark=ad_db.cond.raw_txt)
|
|
825
|
-
await self.cond_upsert(ad,
|
|
816
|
+
await self.cond_upsert(ad, force=True)
|
|
826
817
|
|
|
827
818
|
async def get_credexs_by_norms(self, norms: list[str], cur_id: int) -> dict[models.Pmex, models.CredEx] | None:
|
|
828
819
|
try:
|
|
@@ -901,32 +892,29 @@ async def main():
|
|
|
901
892
|
cl: AgentClient = actor.client(b)
|
|
902
893
|
# await cl.ex_client.set_pmcurexs(cookies=actor.agent.auth["cookies"]) # 617 -> 639
|
|
903
894
|
# await cl.set_creds()
|
|
895
|
+
# await cl.ex_client.set_pairs()
|
|
904
896
|
usdt = await models.Coinex.get(coin__ticker="USDT", ex=cl.actor.ex).prefetch_related("coin")
|
|
905
897
|
btc = await models.Coinex.get(coin__ticker="BTC", ex=cl.actor.ex).prefetch_related("coin")
|
|
906
898
|
eth = await models.Coinex.get(coin__ticker="ETH", ex=cl.actor.ex).prefetch_related("coin")
|
|
907
899
|
usdc = await models.Coinex.get(coin__ticker="USDC", ex=cl.actor.ex).prefetch_related("coin")
|
|
908
900
|
rub = await models.Curex.get(cur__ticker="RUB", ex=cl.actor.ex).prefetch_related("cur")
|
|
909
|
-
# await models.Direction.get(
|
|
910
|
-
# pairex__ex=cl.actor.ex, pairex__pair__coin__ticker="USDT", pairex__pair__cur__ticker="RUB", sell=True
|
|
911
|
-
# )
|
|
912
901
|
cl.all_conds = {
|
|
913
902
|
c.id: (c.raw_txt, {str(a.maker.exid) for a in c.ads})
|
|
914
903
|
for c in await Cond.all().prefetch_related("ads__maker")
|
|
915
904
|
}
|
|
916
|
-
# await cl.set_creds()
|
|
917
905
|
# await cl.actual_cond()
|
|
918
906
|
await gather(
|
|
919
|
-
cl.battle(usdt, rub, False, ["volet"], 79.
|
|
920
|
-
cl.battle(usdt, rub, True, ["volet"], 79.
|
|
907
|
+
cl.battle(usdt, rub, False, ["volet"], 79.8), # гонка в стакане покупки - мы продаем
|
|
908
|
+
cl.battle(usdt, rub, True, ["volet"], 79.8), # гонка в стакане продажи - мы покупаем
|
|
921
909
|
cl.battle(eth, rub, False, ["volet"], 206_000),
|
|
922
910
|
cl.battle(eth, rub, True, ["volet"], 200_000),
|
|
923
911
|
cl.battle(btc, rub, False, ["volet"], 8_500_000),
|
|
924
912
|
cl.battle(btc, rub, True, ["volet"], 8_400_000),
|
|
925
913
|
cl.battle(usdc, rub, False, ["volet"], 80.5),
|
|
926
914
|
cl.battle(usdc, rub, True, ["volet"], 79),
|
|
927
|
-
cl.take(usdt, rub, False, ceil=80
|
|
928
|
-
cl.take(usdt, rub, True, ceil=80
|
|
929
|
-
cl.get_api_orders(
|
|
915
|
+
cl.take(usdt, rub, False, ceil=80, volume=360),
|
|
916
|
+
cl.take(usdt, rub, True, ceil=80, volume=360),
|
|
917
|
+
# cl.get_api_orders(), # 10, 1738357200000, 1742504399999
|
|
930
918
|
)
|
|
931
919
|
|
|
932
920
|
bor = BaseOrderReq(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/_todo_refact/Binance/test_binance.py
RENAMED
|
File without changes
|
{xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/_todo_refact/Bybit/test_bybit.py
RENAMED
|
File without changes
|
{xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/_todo_refact/Bybit/test_bybit_p2p.py
RENAMED
|
File without changes
|
|
File without changes
|
{xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/_todo_refact/Htx/test_htx_p2p.py
RENAMED
|
File without changes
|
{xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/tests/_todo_refact/Wallet/test_agent.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Pms/Volet/_todo_req/req.mjs
RENAMED
|
File without changes
|
{xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client/Pms/Volet/_todo_req/req.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xync_client-0.0.57.dev20 → xync_client-0.0.57.dev22}/xync_client.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|