Бұл мақалада мен Binance Futures платформасындағы екі негізгі келісім-шарт түрін — USDT-M және Coin-M — салыстырамын. Деривативтер нарығындағы трейдерлер үшін дұрыс келісім-шарт таңдау өте маңызды, өйткені бұл тікелей пайда мен тәуекелділікке әсер етеді.
USDT-M vs Coin-M: Негізгі айырмашылықтар
Binance Futures платформасында екі негізгі келісім-шарт түрі бар: USDT-Margined (USDT-M) және Coin-Margined (Coin-M). Олардың негізгі айырмашылығы — маржа валютасы мен есептеу әдісі.
USDT-M келісім-шарттары
- Маржа ретінде USDT немесе BUSD қолданылады
- Пайда мен шығын USDT-де есептеледі
- Төлем валютасы тұрақты — әрдайым USDT
- Жаңа трейдерлер үшін қарапайым
- Кросс маржа режимінде барлық активтер үшін бірдей PnL есептеледі
Coin-M келісім-шарттары
- Маржа ретінде тикельдік криптовалюталар қолданылады (BTC, ETH, т.б.)
- Пайда мен шығын тикельдік активте есептеледі
- Пайда мен шығын валютасы келісім-шарт активіне байланысты өзгереді
- Тәжірибелі трейдерлер үшін қолайлы
- Валютаның нақты құндылығына ие болғысы келетіндер үшін пайдалы
Техникалық салыстыру
| Параметр | USDT-M | Coin-M |
|---|---|---|
| Маржа валютасы | USDT / BUSD | BTC, ETH, және т.б. |
| PnL есептеу | USDT | Негізгі актив |
| Келісім-шарттар | BTCUSDT, ETHUSDT, және т.б. | BTCUSD, ETHUSD, және т.б. |
| Кредиттік левередж | 1x-125x | 1x-125x |
| Төлемақы | maker: 0.02%, taker: 0.04% | maker: 0.015%, taker: 0.035% |
| Қолайлылық | Жаңадан бастаушыларға | Тәжірибелі трейдерлерге |
Binance API интеграциясы
Енді мен Binance Futures API-мен жұмыс істеу үшін Python кодын келтіремін. Екі келісім-шарт түріне арналған мысалдарды көресіз.
import requests
import hashlib
import hmac
import time
Binance Futures API настройкалары
API_KEY = 'your_binance_api_key'
API_SECRET = 'your_binance_api_secret'
BASE_URL = 'https://fapi.binance.com'
def get_signature(params, secret):
"""HMAC SHA256 сигнатурасын жасау"""
query_string = '&'.join([f"{k}={v}" for k, v in params.items()])
return hmac.new(
secret.encode('utf-8'),
query_string.encode('utf-8'),
hashlib.sha256
).hexdigest()
def get_all_positions(symbol_type='USDT'):
"""Барлық позицияларды алу"""
endpoint = '/fapi/v2/account'
timestamp = int(time.time() * 1000)
params = {
'timestamp': timestamp,
'recvWindow': 5000
}
params['signature'] = get_signature(params, API_SECRET)
headers = {
'X-MBX-APIKEY': API_KEY
}
response = requests.get(
BASE_URL + endpoint,
params=params,
headers=headers
)
positions = response.json().get('positions', [])
# USDT-M немесе Coin-M позицияларын фильтрлеу
if symbol_type == 'USDT':
filtered = [p for p in positions if 'USDT' in p['symbol']]
else:
filtered = [p for p in positions if 'USD' in p['symbol'] and 'USDT' not in p['symbol']]
return filtered
USDT-M позицияларын алу
usdt_positions = get_all_positions('USDT')
print(f"USDT-M позициялар саны: {len(usdt_positions)}")
Coin-M позицияларын алу
coin_positions = get_all_positions('COIN')
print(f"Coin-M позициялар саны: {len(coin_positions)}")
import requests
import time
BASE_URL = 'https://fapi.binance.com'
def get_contracts_by_type(contract_type='USDT'):
"""Келісім-шарттар тізімін алу"""
if contract_type == 'USDT':
endpoint = '/fapi/v1/exchangeInfo'
else:
endpoint = '/dapi/v1/exchangeInfo'
response = requests.get(BASE_URL + endpoint)
data = response.json()
contracts = []
for symbol in data.get('symbols', []):
if symbol['status'] == 'TRADING':
contract_info = {
'symbol': symbol['symbol'],
'contract_type': 'USDT-M' if 'USDT' in symbol['symbol'] else 'Coin-M',
'price_precision': symbol['pricePrecision'],
'quantity_precision': symbol['quantityPrecision'],
'max_leverage': symbol['leverageRange'][-1] if symbol.get('leverageRange') else 'N/A',
'contract_size': symbol.get('contractSize', 1)
}
contracts.append(contract_info)
return contracts
def calculate_pnl(entry_price, current_price, quantity, is_long=True, is_usdt_m=True):
"""Пайда мен шығынды есептеу"""
if is_usdt_m:
# USDT-M: PnL USDT-де
if is_long:
pnl = (current_price - entry_price) * quantity
else:
pnl = (entry_price - current_price) * quantity
pnl_currency = 'USDT'
else:
# Coin-M: PnL негізгі активте (BTC, ETH, т.б.)
if is_long:
pnl = quantity * (1/entry_price - 1/current_price)
else:
pnl = quantity * (1/current_price - 1/entry_price)
pnl_currency = 'BTC'
return pnl, pnl_currency
USDT-M келісім-шарттарын алу
usdt_contracts = get_contracts_by_type('USDT')
print(f"USDT-M келісім-шарттары: {len(usdt_contracts)}")
Coin-M келісім-шарттарын алу
coin_contracts = get_contracts_by_type('COIN')
print(f"Coin-M келісім-шарттары: {len(coin_contracts)}")
USDT-M мысалы
entry = 50000 # ETH/USDT кіру бағасы
current = 52000 # Ағымдағы баға
qty = 1 # 1 ETH келісім-шарт
pnl, currency = calculate_pnl(entry, current, qty, is_long=True, is_usdt_m=True)
print(f"USDT-M PnL: {pnl:.4f} {currency}")
Coin-M мысалы (BTCUSD)
btc_entry = 50000
btc_current = 52000
btc_pnl, btc_currency = calculate_pnl(btc_entry, btc_current, 1, is_long=True, is_usdt_m=False)
print(f"Coin-M PnL (BTC): {btc_pnl:.8f} {btc_currency}")
Қайсысын таңдау керек?
USDT-M таңдаған жөн, егер:
- Сіз жаңадан бастаушы трейдер болсаңыз
- Жалғыз валютамен (USDT) жұмыс істегенді қаласаңыз
- Портфолионы басқаруды қарапайым еткіңіз келсе
- Төлемақылар сіз үшін маңызды емес
- Кросс-маржа режимінде барлық позицияларды бірге басқарғыңыз келсе
Coin-M таңдаған жөн, егер:
- Сіз тәжірибелі трейдер болсаңыз
- Нақты BTC немесе ETH-ке ие болғыңыз келсе
- Төлемақыларды үнемдегіңіз келсе (aker: 0.015%, taker: 0.035%)
- Валюта бағамының өзгеруіне икемді болғыңыз келсе
- Әр активті жеке басқарғыңыз келсе
Жиі кездесетін қателіктер және шешімдер
1. "Invalid symbol" қатесі
Себебі: Келісім-шарт символы дұрыс емес пішімде жіберілді.
Қате: символ дұрыс емес
symbol = "BTC/USDT" # Бұл дұрыс емес!
Дұрыс: Binance пішімі бойынша
symbol_usdt_m = "BTCUSDT" # USDT-M келісім-шарты
symbol_coin_m = "BTCUSD" # Coin-M келісім-шарты
API сұранысы
endpoint = '/fapi/v1/ticker/price'
params = {'symbol': symbol_usdt_m}
2. "Timestamp mismatch" қатесі
Себебі: Сервер мен клиент уақыттарының айырмашылығы үлкен.
Уақытты синхрондау
import datetime
def get_server_time():
"""Сервер уақытын алу"""
response = requests.get('https://fapi.binance.com/fapi/v1/time')
return response.json()['serverTime']
def adjust_timestamp(timestamp, recv_window=5000):
"""Уақытты түзету"""
server_time = get_server_time()
# Уақыт айырмашылығы 1 секундтан көп болса, түзету қажет
local_time = int(time.time() * 1000)
time_diff = server_time - local_time
if abs(time_diff) > 1000: # 1 секунд
timestamp = server_time + 100 # Кішігірім буфер қосу
return timestamp
Қолдану
timestamp = adjust_timestamp(int(time.time() * 1000))
params = {
'timestamp': timestamp,
'recvWindow': 5000
}
3. "Signature verification failed" қатесі
Себебі: HMAC сигнатурасы дұрыс емес жасалды.
def create_valid_signature(params, secret):
"""Дұрыс сигнатура жасау"""
# Параметрлерді сұрыптау керек
sorted_params = sorted(params.items())
query_string = '&'.join([f"{k}={v}" for k, v in sorted_params])
# Дұрыс hash әдісі
signature = hmac.new(
secret.encode('utf-8'),
query_string.encode('utf-8'),
hashlib.sha256
).hexdigest()
return signature
Қателіктерден аулақ болу үшін
params = {
'symbol': 'BTCUSDT',
'side': 'BUY',
'type': 'LIMIT',
'quantity': '0.001',
'price': '50000',
'timeInForce': 'GTC',
'timestamp': int(time.time() * 1000),
}
Ескертпе: 'recvWindow' да параметрлерге қосылуы керек
params['recvWindow'] = 5000
signature = create_valid_signature(params, API_SECRET)
params['signature'] = signature
Қорытынды
Binance Futures платформасында USDT-M және Coin-M келісім-шарттарының арасындағы таңдау сіздің тәжірибеңізге, мақсаттарыңызға және ұнайтын стратегияңызға байланысты. Екі жүйенің де өз артықшылықтары мен кемшіліктері бар.
Егер сіз жаңадан бастасаңыз немесе қарапайымдылықты қаласаңыз — USDT-M келісім-шарттарын қарастырыңыз. Егер сіз тәжірибелі трейдер болсаңыз және нақты криптовалюталарға ие болғыңыз келсе — Coin-M келісім-шарттары сіз үшін тиімді.
Кез келген жағдайда, API интеграциясын жасамас бұрын Binance-тің ресми құжаттамасын мұқият оқып, тестілеуден өткізген жөн.