binance / binance/binance-toolbox-python

Can not set stop loss / take profit, error ‘Order does not exist

Open
#18 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
110
Forks
22
PR merge metrics
No merged PRs in 30d

Description

I have an issue is the TP/SL function not reading the Binance side
could you please help me to resolve this issues
```
import requests
import hashlib
import hmac
import time

def get_current_price(symbol):
base_url = 'https://fapi.binance.com'
endpoint = '/fapi/v1/ticker/price'

params = {
'symbol': symbol
}

response = requests.get(f'{base_url}{endpoint}', params=params)
data = response.json()

if 'price' in data:
return float(data['price'])
else:
return None

def calculate_required_margin(quantity, price, leverage):
return (quantity * price) / leverage

def get_account_balance():
base_url = 'https://fapi.binance.com'
endpoint = '/fapi/v2/account'

params = {
'timestamp': int(time.time() * 1000)
}

signature = hmac.new(API_SECRET.encode('utf-8'), '&'.join([f'{k}={v}' for k, v in params.items()]).encode('utf-8'), hashlib.sha256).hexdigest()

headers = {
'X-MBX-APIKEY': API_KEY
}

url = f'{base_url}{endpoint}?timestamp={params["timestamp"]}&signature={signature}'

response = requests.get(url, headers=headers)
return response.json()

def create_cross_order(symbol, side, quantity, leverage, position_side, take_profit_percent, stop_loss_percent):
base_url = 'https://fapi.binance.com'
endpoint = '/fapi/v1/order'

current_price = get_current_price(symbol)
if current_price is None:
print('Failed to fetch current price.')
return

required_margin = calculate_required_margin(quantity, current_price, leverage)

# Fetch account information to check available balance
account_info = get_account_balance()
if 'totalWalletBalance' in account_info:
total_wallet_balance = float(account_info['totalWalletBalance'])
if total_wallet_balance < required_margin:
print("Insufficient balance for required margin.")
return
else:
print("Failed to fetch account balance.")
return

# Calculate take profit and stop loss prices
take_profit_price = current_price * (1 + take_profit_percent / 100)
stop_loss_price = current_price * (1 - stop_loss_percent / 100)

params = {
'symbol': symbol,
'side': side,
'positionSide': position_side,
'quantity': quantity,
'price': current_price,
'type': 'LIMIT',
'timeInForce': 'GTC',
'leverage': leverage,
'timestamp': int(time.time() * 1000),
'takeProfit': take_profit_price,
'stopLoss': stop_loss_price
}

query_string = '&'.join([f'{k}={v}' for k, v in params.items()])
signature = hmac.new(API_SECRET.encode('utf-8'), query_string.encode('utf-8'), hashlib.sha256).hexdigest()

headers = {
'X-MBX-APIKEY': API_KEY
}

url = f'{base_url}{endpoint}?{query_string}&signature={signature}'

response = requests.post(url, headers=headers)
return response.json()

# Show account balance
balance_response = get_account_balance()
if 'totalWalletBalance' in balance_response:
print(f"Total Wallet Balance: {balance_response['totalWalletBalance']} USDT")
else:
print("Failed to fetch account balance.")

# Create order with take profit of 1.5% and stop loss of 2%
symbol = 'BTCUSDT'
side = 'BUY' # Change this to 'SELL' if you're opening a short position
quantity = 0.01
leverage = 10 # Leverage x10
position_side = 'LONG' # Change this to 'SHORT' if opening a short position
take_profit_percent = 1.5
stop_loss_percent = 2.0
response = create_cross_order(symbol, side, quantity, leverage, position_side, take_profit_percent, stop_loss_percent)
if response is not None:
print(response)
```
![image](https://github.com/binance/binance-futures-connector-python/assets/134910536/1fdf461e-2606-4f82-89fe-a618666f9271)
![image](https://github.com/binance/binance-futures-connector-python/assets/134910536/5ef9dd33-0ad8-4874-93d3-71b754a34800)
![image](https://github.com/binance/binance-futures-connector-python/assets/134910536/489e2a8c-23b6-48a0-9f06-44f274ba3145)

@2pd @aisling11 @chairz @bnbot

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.