Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Najmulhaq1997 opened this issue Sep 3, 2023 · 0 comments
Open

Comments

@Najmulhaq1997
Copy link

Najmulhaq1997 commented Sep 3, 2023

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
image
image

@2pd @aisling11 @chairz @bnbot

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant