I used this code: import time
from binance.client import Client
from binance.enums import *
from binance.exceptions import BinanceAPIException
import pandas as pd
import requests
import json
import numpy as np
import pytz
import datetime as dt
import ccxt

date = dt.datetime.now().strftime("%m/%d/%Y %H:%M:%S")
print(date)

t = int(time.time()*1000 - 1000)
url = f"https://api.binance.com/api/v1/time?timestamp={t}"
r = requests.get(url)
result = json.loads(r.content)

API keys and other configuration
API_KEY = ''
API_SECRET = ''

client = Client(API_KEY, API_SECRET)

STOP_LOSS_PERCENTAGE = -50
TAKE_PROFIT_PERCENTAGE = 100
MAX_TRADE_QUANTITY_PERCENTAGE = 100
POSITION_SIDE_SHORT = 'SELL'
POSITION_SIDE_LONG = 'BUY'
symbol = 'BTCUSDT'
quantity = 1
order_type = 'MARKET'
leverage = 100
max_trade_quantity_percentage = 1

client = Client(API_KEY, API_SECRET)

binance_futures = ccxt.binance({
'apiKey': '',
'secret': '',
'enableRateLimit': True,  # enable rate limitation
'options': {
'defaultType': 'future',
'adjustForTimeDifference': True
}
})

Get server time and time difference
server_time = binance_futures.fapiPrivateGetPositionRisk()
time_difference = int(time.time() * 1000) - server_time - 500

Get current time adjusted for time difference
current_time = int(time.time() * 1000) - time_difference

Use adjusted timestamp in subsequent requests
balances = binance_futures.fetch_balance({'timestamp': current_time})
print(balances)

def get_klines(symbol, interval, lookback):
url = "https://fapi.binance.com/fapi/v1/klines"
start_time = (dt.datetime.now() - dt.timedelta(minutes=lookback))
end_time = dt.datetime.now()
query_params = f"?symbol={symbol}&interval={interval}&startTime={start_time}&endTime={end_time}"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
try:
response = requests.get(url + query_params, headers=headers)
response.raise_for_status()
data = response.json()
if not data: # if data is empty, return None
print('No data found for the given timeframe and symbol')
return None
ohlc = []
for d in data:
timestamp = dt.datetime.fromtimestamp(d[0]/1000).strftime('%Y-%m-%d %H:%M:%S')
ohlc.append({
'Open time': timestamp,
'Open': float(d[1]),
'High': float(d[2]),
'Low': float(d[3]),
'Close': float(d[4]),
'Volume': float(d[5])
})
df = pd.DataFrame(ohlc)
df.set_index('Open time', inplace=True)
return df
except requests.exceptions.RequestException as e:
print(f'Error in get_klines: {e}')
return None
df = get_klines('BTCUSDT', '1m', 44640)

def signal_generator(df):
open = df.Open.iloc[-1]
close = df.Close.iloc[-1]
previous_open = df.Open.iloc[-2]
previous_close = df.Close.iloc[-2]

perl
Copy code
# Bearish pattern
if (open>close and
previous_open<previous_close and
close<previous_open and
open>=previous_close):
    return 'sell'

# Bullish pattern
elif (open<close and
previous_open>previous_close and
close>previous_open and
open<=previous_close):
    return 'buy'

# No clear pattern
else:
    return ""
df = get_klines('BTCUSDT', '1m', 44640)
def order_execution(symbol, signal, max_trade_quantity_percentage, leverage):
max_trade_quantity = None
account_balance = binance_futures.fetch_balance()
usdt_balance = 0
for b in account_balance['assets']:
if b['asset'] == 'USDT':
usdt_balance = float(b['balance'])
max_trade_quantity = usdt_balance * max_trade_quantity_percentage/100

python
Copy code
# Close long position if signal is opposite
long_position = None
short_position = None

# Get current positions
positions = binance_futures.fapiPrivateGetPositionRisk()
for p in positions:
    if p['symbol'] == symbol and p['positionSide'] == 'LONG':
        long_position = p
    elif p['symbol'] == symbol and p['positionSide'] == 'SHORT':
        short_position = p

# Close positions
if long_position is not None:
    binance_futures.fapiPrivatePostOrder(symbol=symbol, side='SELL', type='MARKET', quantity=long_position['positionAmt'], positionSide='LONG', reduceOnly=True)
    time.sleep(1)
if short_position is not None:
    binance_futures.fapiPrivatePostOrder(symbol=symbol, side='BUY', type='MARKET', quantity=short_position['positionAmt'], positionSide='SHORT', reduceOnly=True)
    time.sleep(1)
    print("Both positions closed.")

# Place new order
quantity = max_trade_quantity
if signal == 'buy':
    position_side = 'BOTH'
    opposite_position = short_position
elif signal == 'sell':
    position_side = 'BOTH'
    opposite_position = long_position
else:
    print("Invalid signal. No order placed.")
    return

if opposite_position is not None:
    quantity = min(max_trade_quantity, abs(float(opposite_position['positionAmt'])))

price = None
if signal == 'buy':
    order_type = 'TAKE_PROFIT_MARKET'
    price = binance_futures.fapiPublicGetTickerPrice({'symbol': symbol})['price']
elif signal == 'sell':
    order_type = 'STOP_MARKET'
    price = binance_futures.fapiPublicGetTickerPrice({'symbol': symbol})['price']
    stop_price = price * (1 + STOP_LOSS_PERCENTAGE / 100)

order = binance_futures.fapiPrivatePostOrder(symbol=symbol, side='BUY' if signal == 'buy' else 'SELL', type=order_type, quantity=quantity, price=price, stopPrice=stop_price, reduceOnly=False, positionSide=position_side, timeInForce='GTC', leverage=str(leverage))
order_id = order['orderId']
print(f"Placed {signal} order with order ID {order_id} and quantity {quantity}")
time.sleep(1)

# Set stop loss and take profit orders
# Get the order details to determine the order price
if signal == 'buy':
    take_profit_price = price * (1 + TAKE_PROFIT_PERCENTAGE / 100)
    stop_loss_price = price * (1 - STOP_LOSS_PERCENTAGE / 100)
elif signal == 'sell':
    take_profit_price = price * (1 - TAKE_PROFIT_PERCENTAGE / 100)
    stop_loss_price = price * (1 + STOP_LOSS_PERCENTAGE / 100)

# Set stop loss and take profit orders
binance_futures.fapiPrivatePostOrder(symbol=symbol, side='SELL' if signal == 'buy' else 'BUY', type='TAKE_PROFIT_MARKET', quantity=quantity, price=take_profit_price, reduceOnly=True, positionSide=position_side, timeInForce='GTC', stopPrice=None)
time.sleep(1)
binance_futures.fapiPrivatePostOrder(symbol=symbol, side='SELL' if signal == 'buy' else 'BUY', type='STOP_MARKET', quantity=quantity, price=stop_loss_price, reduceOnly=True, positionSide=position_side, timeInForce='GTC', stopPrice=None)

# Print order creation confirmation messages
print(f"Placed stop loss order with stop loss price {stop_loss_price}")
print(f"Placed take profit order with take profit price {take_profit_price}")
time.sleep(1)
while True:
df = get_klines('BTCUSDT', '1m', 44640)
if df is not None:
signal = signal_generator(df)
if signal:
print(f"The signal time is: {dt.datetime.now().strftime('%Y-%m-%d %H:%M:%S')} :{signal}")
order_execution('BTCUSDT', signal, MAX_TRADE_QUANTITY_PERCENTAGE, leverage)

df = get_klines('BTCUSDT', '1m', 44640)
if df is not None:
signal = signal_generator(df)
if signal:
print(f"The signal time is: {dt.datetime.now().strftime('%Y-%m-%d %H:%M:%S')} :{signal}")
order_execution('BTCUSDT', signal, MAX_TRADE_QUANTITY_PERCENTAGE, leverage)
time.sleep(0.1)
But I getting ERROR: Traceback (most recent call last):
File "C:\Users\Alan\AppData\Roaming\Python\Python311\site-packages\ccxt\base\exchange.py", line 559, in fetch
response.raise_for_status()
File "C:\Users\Alan\AppData\Roaming\Python\Python311\site-packages\requests\models.py", line 1021, in raise_for_status

raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://fapi.binance.com/fapi/v1/positionRisk?timestamp=1685706950143&recvWindow=10000&signature=e0578adf87ff44f10ec5669ad669b3445e9f8a5587cfeff4bdb0ed2698c3ac25

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "c:\Users\Alan.vscode\jew_bot\jew_bot\jew_bot.py", line 51, in 
server_time = binance_futures.fapiPrivateGetPositionRisk()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Alan\AppData\Roaming\Python\Python311\site-packages\ccxt\base\types.py", line 25, in unbound_method
return _self.request(self.path, self.api, self.method, params, config=self.config)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Alan\AppData\Roaming\Python\Python311\site-packages\ccxt\binance.py", line 7274, in request
response = self.fetch2(path, api, method, params, headers, body, config)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Alan\AppData\Roaming\Python\Python311\site-packages\ccxt\base\exchange.py", line 2862, in fetch2
return self.fetch(request['url'], request['method'], request['headers'], request['body'])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Alan\AppData\Roaming\Python\Python311\site-packages\ccxt\base\exchange.py", line 575, in fetch
skip_further_error_handling = self.handle_errors(http_status_code, http_status_text, url, method, headers, http_response, json_response, request_headers, request_body)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Alan\AppData\Roaming\Python\Python311\site-packages\ccxt\binance.py", line 7251, in handle_errors
self.throw_exactly_matched_exception(self.exceptions['exact'], error, feedback)
File "C:\Users\Alan\AppData\Roaming\Python\Python311\site-packages\ccxt\base\exchange.py", line 3172, in throw_exactly_matched_exception
raise exactstring
ccxt.base.errors.InvalidNonce: binance {"code":-1021,"msg":"Timestamp for this request was 1000ms ahead of the server's time."}
Please if it possible give me full right code