Added documentation
This commit is contained in:
@@ -1,23 +1,52 @@
|
||||
from app.services.Bybit.functions import price_symbol
|
||||
import math
|
||||
import logging.config
|
||||
from app.services.Bybit.functions.price_symbol import get_price
|
||||
import app.telegram.database.requests as rq
|
||||
|
||||
from logger_helper.logger_helper import LOGGING_CONFIG
|
||||
from pybit.unified_trading import HTTP
|
||||
|
||||
client = HTTP()
|
||||
logging.config.dictConfig(LOGGING_CONFIG)
|
||||
logger = logging.getLogger("min_qty")
|
||||
|
||||
async def get_min_qty(tg_id):
|
||||
def round_up_qty(value: float, step: float) -> float:
|
||||
"""
|
||||
Округление value вверх до ближайшего кратного step.
|
||||
"""
|
||||
return math.ceil(value / step) * step
|
||||
|
||||
async def get_min_qty(tg_id: int) -> float:
|
||||
"""
|
||||
Получает минимальный объем (количество) ордера для символа пользователя на Bybit,
|
||||
округленное с учетом шага количества qtyStep.
|
||||
|
||||
:param tg_id: int - идентификатор пользователя Telegram
|
||||
:return: float - минимальное количество лота для ордера
|
||||
"""
|
||||
api_key = await rq.get_bybit_api_key(tg_id)
|
||||
secret_key = await rq.get_bybit_secret_key(tg_id)
|
||||
SYMBOL = await rq.get_symbol(tg_id)
|
||||
symbol = await rq.get_symbol(tg_id)
|
||||
|
||||
client = HTTP(
|
||||
api_key=api_key,
|
||||
api_secret=secret_key
|
||||
)
|
||||
client = HTTP(api_key=api_key, api_secret=secret_key)
|
||||
|
||||
price = await price_symbol(tg_id)
|
||||
json_data = client.get_instruments_info(symbol=SYMBOL, category='linear')
|
||||
price = await get_price(tg_id)
|
||||
|
||||
min_qty = int(5 / price * 1.1) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1% <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5 USDT
|
||||
|
||||
return min_qty
|
||||
response = client.get_instruments_info(symbol=symbol, category='linear')
|
||||
|
||||
instrument = response['result'][0]
|
||||
lot_size_filter = instrument.get('lotSizeFilter', {})
|
||||
|
||||
min_order_qty = float(lot_size_filter.get('minOrderQty', 0))
|
||||
min_notional_value = float(lot_size_filter.get('minNotionalValue', 0))
|
||||
qty_step = float(lot_size_filter.get('qtyStep', 1))
|
||||
|
||||
calculated_qty = (5 / price) * 1.1
|
||||
|
||||
min_qty = max(min_order_qty, calculated_qty)
|
||||
|
||||
min_qty_rounded = round_up_qty(min_qty, qty_step)
|
||||
|
||||
logger.debug(f"tg_id={tg_id}: price={price}, min_order_qty={min_order_qty}, "
|
||||
f"min_notional_value={min_notional_value}, qty_step={qty_step}, "
|
||||
f"calculated_qty={calculated_qty}, min_qty_rounded={min_qty_rounded}")
|
||||
|
||||
return min_qty_rounded
|
||||
|
Reference in New Issue
Block a user