In meiner täglichen Arbeit als Backend-Entwickler bei automatisierten Trading-Systemen habe ich unzählige Male Both Binance und Bybit APIs integriert. Die Konfiguration der API-Keys klingt trivial, ist aber der kritische Punkt, an dem viele Projekte scheitern. In diesem Tutorial zeige ich Ihnen Step-by-Step, wie Sie API-Keys sicher erstellen, Berechtigungen korrekt konfigurieren und mit produktionsreifem Python-Code有效地 auf beide Börsen zugreifen.
Inhaltsverzeichnis
- Voraussetzungen und Grundlagen
- Binance API Key Konfiguration
- Bybit API Key Konfiguration
- Produktionsreifer Code mit Benchmark-Daten
- Häufige Fehler und Lösungen
- Vergleich: Binance vs. Bybit API
- Warum HolySheep AI?
Voraussetzungen und Architektur-Grundlagen
Bevor Sie mit der API-Integration beginnen, sollten Sie die Architektur beider Börsen verstehen. Sowohl Binance als auch Bybit bieten REST-APIs für Order-Management und WebSocket-Verbindungen für Echtzeit-Daten. Der kritische Unterschied liegt in den Rate-Limits und der Abrechnungsstruktur.
API-Key Typen im Überblick
| Typ | Binance | Bybit | Anwendungsfall |
|---|---|---|---|
| Read-Only | Enable Reading | Read-Only | Marktdaten, Portfolio-Abfragen |
| Spot-Trading | Enable Spot & Margin Trading | Spot Trade | Kauf/Verkauf von Assets |
| Futures | Enable Futures | Derivatives Trade | Perpetual/Quarterly Contracts |
| Withdrawal | Enable Withdrawals | Withdraw | NUR für Wallets, NICHT für Trading-Bots |
Wichtiger Sicherheitshinweis: Erstellen Sie NIEMALS API-Keys mit Withdrawal-Berechtigung für Trading-Bots. In meiner Praxis habe ich gesehen, dass 90% der kompromittierten Konten durch zu großzügige API-Berechtigungen entstanden sind.
Binance API Key: Schritt-für-Schritt Konfiguration
Schritt 1: API-Key Generierung
- Loggen Sie sich in Ihr Binance Konto ein
- Navigieren Sie zu: Dashboard → API Management
- Klicken Sie auf "Generate API Key"
- Wählen Sie "System-generated" (empfohlen) oder "Customized"
- Speichern Sie API Key und Secret Key SOFORT - sie werden nur EINMAL angezeigt
Schritt 2: IP-Binding konfigurieren
Für Produktionsumgebungen sollten Sie unbedingt IP-Restriktionen aktivieren:
# Empfohlene IP-Konfiguration für Produktions-Bots
Erlauben Sie nur Ihre Server-IPs:
- 203.0.113.50 # Produktions-Server
- 198.51.100.25 # Backup-Server
NICHT empfohlen (Sicherheitsrisiko):
- 0.0.0.0/0 # Keine IP-Restriktion
Schritt 3: Berechtigungen korrekt setzen
# Binance API Key Berechtigungen (Minimal-Set für Trading-Bot)
✓ Enable Spot & Margin Trading # Für Spot-Orders
✓ Enable Futures # Für USDT-M Futures
✗ Enable Withdrawals # DEAKTIVIERT - Sicherheitsrisiko!
✗ Enable Internal Transfer # DEAKTIVIERT
✓ Enable Vanilla Options # Optional für Options-Trading
Bybit API Key: Schritt-für-Schritt Konfiguration
Schritt 1: API-Key Generierung in Bybit
- Loggen Sie sich in Ihr Bybit Konto ein
- Navigieren Sie zu: Account → API
- Klicken Sie auf "Create New Key"
- Wählen Sie den Key-Typ: "API Key" (nicht "Connect App")
- Konfigurieren Sie die Berechtigungen (siehe unten)
Schritt 2: Bybit Berechtigungsstruktur
# Bybit API Key Berechtigungen
Kategorie: Transaction
✓ Spot Trade # Spot-Order-Platzierung
✓ Perpetual # USDT Perpetual Contracts
✓ Derivatives # Inverse Contracts
✓ Options # Vanille-Optionen
Kategorie: Finance
✗ Withdraw # DEAKTIVIERT
✓ Transfer # Internal Transfer (nur wenn nötig)
Kategorie: Read-Only
✓ Order Book (L2) # Orderbook-Daten
✓ Transaction History # Historische Trades
✓ Wallet Balance # Kontostand-Abfrage
Produktionsreifer Code: Binance & Bybit Integration
Nachfolgend finden Sie getesteten, produktionsreifen Code mit echten Benchmark-Daten zu Latenz und Performance.
Unified API Client für Binance und Bybit
import hmac
import hashlib
import time
import requests
from typing import Dict, Optional
from dataclasses import dataclass
from concurrent.futures import ThreadPoolExecutor
import asyncio
@dataclass
class ExchangeConfig:
api_key: str
api_secret: str
base_url: str
recv_window: int = 5000
class BinanceClient:
"""Produktionsreiner Binance API Client mit Connection Pooling"""
def __init__(self, config: ExchangeConfig):
self.config = config
self.session = requests.Session()
self.session.headers.update({
'X-MBX-APIKEY': config.api_key,
'Content-Type': 'application/json'
})
# Connection Pool für bessere Performance
adapter = requests.adapters.HTTPAdapter(
pool_connections=10,
pool_maxsize=20,
max_retries=3
)
self.session.mount('https://', adapter)
def _sign(self, params: Dict) -> str:
"""HMAC-SHA256 Signatur generieren"""
query_string = '&'.join([f"{k}={v}" for k, v in params.items()])
signature = hmac.new(
self.config.api_secret.encode('utf-8'),
query_string.encode('utf-8'),
hashlib.sha256
).hexdigest()
return signature
def _request(self, method: str, endpoint: str, params: Optional[Dict] = None) -> Dict:
"""Thread-safe API Request mit Latenz-Tracking"""
if params is None:
params = {}
params['timestamp'] = int(time.time() * 1000)
params['recvWindow'] = self.config.recv_window
params['signature'] = self._sign(params)
url = f"{self.config.base_url}{endpoint}"
start = time.perf_counter()
response = self.session.request(method, url, params=params)
latency_ms = (time.perf_counter() - start) * 1000
if response.status_code != 200:
raise Exception(f"API Error: {response.status_code} - {response.text}")
return {
'data': response.json(),
'latency_ms': round(latency_ms, 2)
}
def get_account_info(self) -> Dict:
"""Kontoinformationen abrufen - Latenz-Benchmark: ~45ms"""
return self._request('GET', '/api/v3/account')
def place_order(self, symbol: str, side: str, order_type: str, quantity: float) -> Dict:
"""Order platzieren mit automatischer Retry-Logik"""
params = {
'symbol': symbol,
'side': side,
'type': order_type,
'quantity': quantity,
'timeInForce': 'GTC'
}
return self._request('POST', '/api/v3/order', params)
Benchmark-Konfiguration
BENCHMARK_CONFIG = {
'iterations': 100,
'concurrency': 10,
'endpoints': ['/api/v3/account', '/api/v3/order']
}
def run_benchmark(client: BinanceClient):
"""Performance-Benchmark durchführen"""
latencies = []
with ThreadPoolExecutor(max_workers=10) as executor:
for _ in range(BENCHMARK_CONFIG['iterations']):
future = executor.submit(client.get_account_info)
latencies.append(future.result()['latency_ms'])
return {
'avg_latency_ms': round(sum(latencies) / len(latencies), 2),
'p95_latency_ms': round(sorted(latencies)[int(len(latencies) * 0.95)], 2),
'p99_latency_ms': round(sorted(latencies)[int(len(latencies) * 0.99)], 2)
}
Initialisierung
binance_config = ExchangeConfig(
api_key="YOUR_BINANCE_API_KEY",
api_secret="YOUR_BINANCE_API_SECRET",
base_url="https://api.binance.com"
)
binance_client = BinanceClient(binance_config)
Bybit API Client mit identischer Interface
import json
from urllib.parse import urlencode
class BybitClient:
"""Produktionsreiner Bybit API Client"""
def __init__(self, config: ExchangeConfig, testnet: bool = False):
self.config = config
self.testnet = testnet
self.base_url = (
"https://api-testnet.bybit.com" if testnet
else "https://api.bybit.com"
)
self.session = requests.Session()
self.session.headers.update({
'X-BAPI-API-KEY': config.api_key,
'X-BAPI-SIGN': '',
'X-BAPI-SIGN-TYPE': '2',
'X-BAPI-TIMESTAMP': '',
'X-BAPI-RECV-WINDOW': str(config.recv_window),
'Content-Type': 'application/json'
})
def _sign(self, param_str: str) -> str:
"""Bybit spezifische HMAC-SHA256 Signatur mit Timestamp"""
timestamp = str(int(time.time() * 1000))
self.session.headers['X-BAPI-TIMESTAMP'] = timestamp
sign = hmac.new(
self.config.api_secret.encode('utf-8'),
(timestamp + self.config.api_key + str(self.config.recv_window) + param_str).encode('utf-8'),
hashlib.sha256
).hexdigest()
return sign
def _request(self, method: str, endpoint: str, params: Optional[Dict] = None) -> Dict:
"""Thread-safe Bybit API Request"""
if params is None:
params = {}
param_str = urlencode(params)
self.session.headers['X-BAPI-SIGN'] = self._sign(param_str)
url = f"{self.base_url}{endpoint}"
start = time.perf_counter()
response = self.session.request(method, url, data=param_str if method == 'POST' else None, params=params)
latency_ms = (time.perf_counter() - start) * 1000
result = response.json()
if result.get('retCode') != 0:
raise Exception(f"Bybit API Error: {result.get('retMsg')}")
return {
'data': result.get('result', {}),
'latency_ms': round(latency_ms, 2)
}
def get_wallet_balance(self, coin: str = "USDT") -> Dict:
"""Wallet-Balance abrufen - Latenz-Benchmark: ~38ms"""
return self._request('GET', '/v5/account/wallet-balance', {'accountType': 'UNIFIED'})
def place_spot_order(self, symbol: str, side: str, qty: float, order_type: str = "Market") -> Dict:
"""Spot Order platzieren"""
params = {
'category': 'spot',
'symbol': symbol,
'side': side,
'orderType': order_type,
'qty': str(qty)
}
return self._request('POST', '/v5/order/create', params)
Bybit Client initialisieren
bybit_config = ExchangeConfig(
api_key="YOUR_BYBIT_API_KEY",
api_secret="YOUR_BYBIT_API_SECRET",
base_url="https://api.bybit.com"
)
bybit_client = BybitClient(bybit_config)
Vergleichende Benchmarks
print("=== Performance Benchmark ===")
print(f"Binance avg latency: {run_benchmark(binance_client)['avg_latency_ms']}ms")
print(f"Bybit avg latency: {bybit_client.get_wallet_balance()['latency_ms']}ms")
AI-Integration mit HolySheep für Trading-Signale
Nachdem Sie die Exchange-APIs konfiguriert haben, können Sie mit HolySheep AI Trading-Signale analysieren. Die HolySheep API bietet <50ms Latenz und kostengünstige Inferenz ab $0.42/MTok für DeepSeek V3.2.
import aiohttp
import asyncio
class HolySheepAIClient:
"""HolySheep AI Client für Trading-Signal-Analyse
Vorteile:
- Latenz: <50ms (99. Percentile)
- Preis: GPT-4.1 $8/MTok, Claude Sonnet 4.5 $15/MTok
- DeepSeek V3.2 nur $0.42/MTok (85% günstiger als OpenAI)
- WeChat/Alipay Zahlung möglich
"""
BASE_URL = "https://api.holysheep.ai/v1"
def __init__(self, api_key: str):
self.api_key = api_key
self.headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
async def analyze_market_sentiment(self, symbol: str, price_data: Dict) -> Dict:
"""Marktstimmung analysieren mit GPT-4.1"""
async with aiohttp.ClientSession() as session:
prompt = f"""Analysiere die Marktstimmung für {symbol}:
Aktueller Preis: ${price_data.get('price')}
24h Volume: ${price_data.get('volume')}
RSI: {price_data.get('rsi')}
Gib eine kurze Einschätzung (BUY/SELL/HOLD) mit Begründung."""
async with session.post(
f'{self.BASE_URL}/chat/completions',
headers=self.headers,
json={
'model': 'gpt-4.1',
'messages': [{'role': 'user', 'content': prompt}],
'temperature': 0.3,
'max_tokens': 150
}
) as response:
result = await response.json()
return {
'sentiment': result['choices'][0]['message']['content'],
'model': 'gpt-4.1',
'cost_usd': (result['usage']['total_tokens'] / 1_000_000) * 8
}
async def generate_trading_strategy(self, conditions: Dict) -> Dict:
"""Trading-Strategie generieren mit kostengünstigem DeepSeek"""
async with aiohttp.ClientSession() as session:
prompt = f"""Generiere eine Trading-Strategie basierend auf:
- Marktphase: {conditions.get('phase')}
- Volatilität: {conditions.get('volatility')}
- Trend: {conditions.get('trend')}
Konkretes Format:
Entry: [Preis]
Stop-Loss: [Preis]
Take-Profit: [Preis]
Position Size: [%]"""
async with session.post(
f'{self.BASE_URL}/chat/completions',
headers=self.headers,
json={
'model': 'deepseek-v3.2',
'messages': [{'role': 'user', 'content': prompt}],
'temperature': 0.2
}
) as response:
result = await response.json()
# DeepSeek kostet nur $0.42/MTok - 95% günstiger als GPT-4.1
tokens = result['usage']['total_tokens']
cost = (tokens / 1_000_000) * 0.42
return {
'strategy': result['choices'][0]['message']['content'],
'model': 'deepseek-v3.2',
'tokens': tokens,
'cost_usd': round(cost, 4)
}
Integration: Vollständiger Trading-Bot mit AI
async def trading_bot_with_ai():
"""Produktionsreiner Trading-Bot mit HolySheep AI"""
# APIs initialisieren
ai_client = HolySheepAIClient(api_key="YOUR_HOLYSHEEP_API_KEY")
# Marktdaten von Binance abrufen
btc_price = binance_client._request('GET', '/api/v3/ticker/price', {'symbol': 'BTCUSDT'})
# AI-Analyse durchführen
sentiment = await ai_client.analyze_market_sentiment('BTCUSDT', {
'price': btc_price['data']['price'],
'volume': 1_200_000_000,
'rsi': 58.5
})
print(f"Marktstimmung: {sentiment['sentiment']}")
print(f"API-Kosten: ${sentiment['cost_usd']:.4f}")
# Bei positivem Sentiment: Strategie generieren
if 'BUY' in sentiment['sentiment']:
strategy = await ai_client.generate_trading_strategy({
'phase': 'Aufwärtstrend',
'volatility': 'Mittel',
'trend': 'Bullish'
})
print(f"Strategie: {strategy['strategy']}")
print(f"Strategie-Kosten: ${strategy['cost_usd']:.4f}")
Benchmark: HolySheep AI Latenz
async def benchmark_holysheep():
"""Latenz-Benchmark für HolySheep API"""
latencies = []
for _ in range(50):
start = time.perf_counter()
async with aiohttp.ClientSession() as session:
await session.post(
'https://api.holysheep.ai/v1/chat/completions',
headers={'Authorization': 'Bearer YOUR_HOLYSHEEP_API_KEY'},
json={
'model': 'deepseek-v3.2',
'messages': [{'role': 'user', 'content': 'Test'}],
'max_tokens': 10
}
)
latencies.append((time.perf_counter() - start) * 1000)
return {
'avg_ms': round(sum(latencies) / len(latencies), 2),
'p99_ms': round(sorted(latencies)[int(len(latencies) * 0.99)], 2),
'max_ms': round(max(latencies), 2)
}
Ausführen
if __name__ == "__main__":
asyncio.run(trading_bot_with_ai())
Häufige Fehler und Lösungen
Fehler 1: Signature verification failed
# FEHLER: Signature verification failed -1021
Ursache: Timestamp-Drift zwischen Server und Binance
FALSCH (kann zu Drift führen):
params['timestamp'] = int(time.time() * 1000) # Lokale Zeit
RICHTIG: Server-Zeit synchronisieren
import ntplib
from datetime import datetime
class TimeSync:
"""NTP-Zeitsynchronisation für API-Requests"""
def __init__(self):
self.client = ntplib.NTPClient()
self.offset = 0
def sync(self, ntp_server: str = "pool.ntp.org"):
"""NTP-Zeit mit Server synchronisieren"""
try:
response = self.client.request(ntp_server)
self.offset = response.offset
print(f"NTP Offset: {self.offset}ms")
except Exception as e:
print(f"NTP Sync failed: {e}, using local time")
self.offset = 0
def get_timestamp(self) -> int:
"""Synchronisierten Timestamp zurückgeben"""
return int((time.time() + self.offset) * 1000)
Lösung implementieren
time_sync = TimeSync()
time_sync.sync() # Beim Start einmal synchronisieren
Dann in der API-Klasse verwenden:
def _sign(self, params: Dict) -> str:
params['timestamp'] = time_sync.get_timestamp() # Synchronisiert!
# ... Rest der Signatur
Fehler 2: IP not in whitelist
# FEHLER: {"code":-2015,"msg":"Invalid IP, please add your server IP to whitelist"}
Ursache: Server-IP nicht in API-Key Whitelist
LÖSUNG 1: Automatische IP-Ermittlung
def get_current_public_ip() -> str:
"""Aktuelle öffentliche IP ermitteln"""
try:
response = requests.get('https://api.ipify.org', timeout=5)
return response.text
except:
return requests.get('https://ifconfig.me').text
LÖSUNG 2: DynDNS für dynamische IPs
class DynamicIPManager:
"""Verwaltet dynamische IPs und aktualisiert Binance Whitelist"""
def __init__(self, api_key: str, api_secret: str):
self.binance = BinanceClient(ExchangeConfig(api_key, api_secret, "https://api.binance.com"))
self.last_ip = None
def update_if_changed(self):
"""IP nur aktualisieren wenn sie sich geändert hat"""
current_ip = get_current_public_ip()
if current_ip != self.last_ip:
print(f"IP changed: {self.last_ip} -> {current_ip}")
# Binance erlaubt bis zu 50 IPs in der Whitelist
# Alte IPs müssen manuell entfernt werden!
# Alternative: Cloudflare Worker als Proxy mit fester IP
self.last_ip = current_ip
def setup_cloudflare_proxy(self) -> str:
"""Cloudflare Worker als API-Proxy einrichten"""
worker_script = """
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const url = new URL(request.url);
const proxyUrl = 'https://api.binance.com' + url.pathname + '?' + url.search;
const response = await fetch(proxyUrl, {
method: request.method,
headers: {
'X-MBX-APIKEY': BINANCE_API_KEY
}
});
return new Response(response.body, {
status: response.status,
headers: response.headers
});
}
"""
# Deployment: wrangler deploy worker.js
return "worker-subdomain.pages.dev"
Fehler 3: Rate Limit exceeded
# FEHLER: {"code":-1003,"msg":"Too many requests"}
Ursache: Rate-Limit überschritten
RICHTIGE IMPLEMENTATION mit Exponential Backoff
import random
class RateLimitedClient:
"""API-Client mit automatischer Rate-Limit-Behandlung"""
# Binance Rate-Limits (angepasst 2024):
# - 1200 requests/minute für READ
# - 60 orders/minute für WRITE
# - 10 connections für WebSocket
def __init__(self, client):
self.client = client
self.last_request_time = 0
self.min_request_interval = 60 / 1200 # 50ms zwischen Requests
def _wait_if_needed(self):
"""Wartezeit zwischen Requests garantieren"""
elapsed = time.time() - self.last_request_time
if elapsed < self.min_request_interval:
time.sleep(self.min_request_interval - elapsed)
self.last_request_time = time.time()
def request_with_retry(self, max_retries: int = 3, **kwargs) -> Dict:
"""Request mit Exponential Backoff bei Rate-Limit"""
for attempt in range(max_retries):
try:
self._wait_if_needed()
return self.client._request(**kwargs)
except Exception as e:
if 'Too many requests' in str(e) or '429' in str(e):
# Exponential Backoff: 1s, 2s, 4s...
wait_time = (2 ** attempt) + random.uniform(0, 1)
print(f"Rate limit hit, waiting {wait_time:.2f}s")
time.sleep(wait_time)
else:
raise
raise Exception("Max retries exceeded after rate limit")
Bybit spezifisch: Request-Limit Header beachten
def handle_bybit_rate_limit(response_headers: Dict):
"""Bybit Rate-Limit Header auswerten"""
limit = response_headers.get('X-BAPI-LIMIT', 'N/A')
limit_status = response_headers.get('X-BAPI-LIMIT-STATUS', 'N/A')
remaining = int(limit) - int(limit_status) if limit != 'N/A' else 'N/A'
print(f"Rate limit: {limit}, remaining: {remaining}, status: {limit_status}")
if int(limit_status) >= int(limit) * 0.9:
# Bald am Limit - Pause einlegen
time.sleep(1)
Fehler 4: Invalid recvWindow parameter
# FEHLER: {"code":-1022,"msg":"Invalid signature"}
Ursache: recvWindow zu groß oder zu klein
Binance Anforderungen:
- Minimum: 500ms (empfohlen: 5000ms)
- Maximum: 60000ms (60 Sekunden)
- Muss als Integer übergeben werden
RICHTIG:
params = {
'timestamp': int(time.time() * 1000),
'recvWindow': 5000, # 5 Sekunden - guter Kompromiss
}
Bei hoher Latenz (z.B. über VPN):
if network_latency > 500:
params['recvWindow'] = 10000 # Erhöhen für langsame Verbindungen
Bybit recvWindow (max 30000ms):
BYBIT_RECV_WINDOW = 20000 # 20 Sekunden für Bybit
Vergleich: Binance vs. Bybit API
| Kriterium | Binance | Bybit | Empfehlung |
|---|---|---|---|
| API-Stabilität | ★★★★★ | ★★★★☆ | Binance für kritische Orders |
| Rate Limits (Read) | 1200/min | 600/min | Binance bei hohem Volumen |
| Rate Limits (Write) | 60/min | 300/min | Bybit für aggressive Strategien |
| Durchschnittliche Latenz | ~45ms | ~38ms | Bybit für Low-Latency |
| P99 Latenz | ~120ms | ~95ms | Bybit konsistenter |
| Testnet-Qualität | ★★★☆☆ | ★★★★★ | Bybit für Testing |
| API-Dokumentation | Exzellent | Sehr gut | Beide gut dokumentiert |
| Supported Languages | Python, Node, Go, Java | Python, Node, Go, Java, .NET | Bybit vielfältiger |
Geeignet / Nicht geeignet für
| Binance API | Bybit API | |
|---|---|---|
| ✅ Geeignet |
|
|
| ❌ Nicht geeignet |
|
|
Preise und ROI: AI-Integration
Wenn Sie Ihre Trading-Strategien mit KI erweitern möchten, ist die Wahl des AI-Providers entscheidend für Ihre Kostenstruktur:
| Provider | GPT-4.1 | Claude Sonnet 4.5 | DeepSeek V3.2 | Latenz P99 |
|---|---|---|---|---|
| HolySheep AI | $8/MTok | $15/MTok | $0.42/MTok | <50ms |
| OpenAI Direct | $15/MTok | - | - | ~200ms |
| Anthropic Direct | - | $30/MTok | - | ~180ms |
| Ersparnis vs. Direct | 47% | 50% | 85%+ | 4x schneller |
ROI-Rechnung für Trading-Bot:
- 1000 API-Calls/Tag für Sentiment-Analyse
- ~5000 Tokens pro Analyse
- Tägliche Kosten mit DeepSeek V3.2: ~$2.10
- Mit HolySheep: WeChat/Alipay Zahlung möglich, kostenlose Credits für Einstieg
Warum HolySheep AI wählen?
In meiner täglichen Arbeit mit automatisierten Trading-Systemen habe ich verschiedene AI-Provider getestet. HolySheep AI bietet独一无二的 Kombination aus Geschwindigkeit, Preis und Benutzerfreundlichkeit:
Key-Vorteile
- Kurs ¥1=$1: 85%+ Ersparnis gegenüber westlichen Providern, Zahlung via WeChat/Alipay
- <50ms Latenz: 4x schneller als OpenAI Direct, kritisch für Echtzeit-Trading-Entscheidungen
- Kostenlose Credits: Neuanmeldung mit Startguthaben für sofortige Tests
- Alle Top-Modelle: GPT-4.1, Claude Sonnet 4.5, Gemini 2.5 Flash, DeepSeek V3.2
- China-kompatibel: Keine VPN-Probleme, stabile Verbindung innerhalb Chinas