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

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

url = “https://api.binance.com/api/v1/time”
t = time.time()*1000
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 = 125
max_trade_quantity_percentage = 1

client = Client(API_KEY, API_SECRET)

def getminutedata(symbol, interval, lookback):
try:
frame = pd.DataFrame(client.get_historical_klines(symbol, interval, lookback+‘min ago UTC’))
frame = frame.iloc[:60,:6]
frame.columns = [‘Time’,‘Open’,‘High’,‘Low’,‘Close’,‘Volume’]
frame = frame.set_index(‘Time’)
today = dt.date.today()
frame.index = pd.to_datetime(frame.index, unit=‘ms’).tz_localize(‘UTC’).tz_convert(‘Etc/GMT+3’).strftime(f"{today} %H:%M:%S")
frame = frame.astype(float)
return frame
except Exception as e:
print(f"Error getting minute data: {str(e)}“)
return None

df = getminutedata(‘BTCUSDT’, ‘1m’, ‘44640’)

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

# 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 ‘’
except Exception as e:
print(f"Error generating signal: {str(e)}”)
return ‘’

def order_execution(symbol, signal, max_trade_quantity_percentage, leverage):
try:
max_trade_quantity = None
account_balance = client.futures_account_balance()
usdt_balance = float([x[‘balance’] for x in account_balance if x[‘asset’] == ‘USDT’][0])
max_trade_quantity = usdt_balance * max_trade_quantity_percentage/100

# Close long position if signal is opposite
long_position = None
short_position = None
positions = client.futures_position_information(symbol=symbol)
for p in positions:
if p[‘positionSide’] == ‘LONG’:
long_position = p
elif p[‘positionSide’] == ‘SHORT’:
short_position = p
if long_position is not None and short_position is not None:
print(“Multiple positions found. Closing both positions.”)
client.futures_create_order(
symbol=symbol,
side=SIDE_SELL,
type=ORDER_TYPE_MARKET,
quantity=long_position[‘positionAmt’],
reduceOnly=True
)
time.sleep(1)
client.futures_create_order(
symbol=symbol,
side=SIDE_BUY,
type=ORDER_TYPE_MARKET,
quantity=short_position[‘positionAmt’],
reduceOnly=True
)
print(“Both positions closed.”)
return

if signal == ‘buy’:
position_side = POSITION_SIDE_LONG
opposite_position = short_position
elif signal == ‘sell’:
position_side = POSITION_SIDE_SHORT
opposite_position = long_position
else:
print(“Invalid signal. No order placed.”)
return

order_quantity = 0
if opposite_position is not None:
order_quantity = min(max_trade_quantity, abs(float(opposite_position[‘positionAmt’])))
if opposite_position[‘positionSide’] != position_side:
print(“Opposite position found. Closing position before placing order.”)
client.futures_create_order(
symbol=symbol,
side=SIDE_SELL if opposite_position[‘positionSide’] == POSITION_SIDE_LONG else SIDE_BUY,
type=ORDER_TYPE_MARKET,
quantity=order_quantity,
reduceOnly=True
)
time.sleep(1)

order = client.futures_create_order(
symbol=symbol,
side=SIDE_BUY if signal == ‘buy’ else SIDE_SELL,
type=ORDER_TYPE_MARKET,
quantity=order_quantity,
reduceOnly=False,
timeInForce=TIME_IN_FORCE_GTC,
positionSide=position_side,
leverage=leverage
)
print(f"Placed {signal} order with order ID {order[‘orderId’]} and quantity {order_quantity}“)
time.sleep(1)
# Set stop loss and take profit orders
stop_loss_price = order[‘avgPrice’] * (1 + STOP_LOSS_PERCENTAGE / 100) if signal == ‘sell’ else order[‘avgPrice’] * (1 - STOP_LOSS_PERCENTAGE / 100)
take_profit_price = order[‘avgPrice’] * (1 + TAKE_PROFIT_PERCENTAGE / 100) if signal == ‘buy’ else order[‘avgPrice’] * (1 - TAKE_PROFIT_PERCENTAGE / 100)
client.futures_create_order(
symbol=symbol,
side=SIDE_SELL if signal == ‘buy’ else SIDE_BUY,
type=ORDER_TYPE_STOP_LOSS,
quantity=order_quantity,
stopPrice=stop_loss_price,
reduceOnly=True,
timeInForce=TIME_IN_FORCE_GTC,
positionSide=position_side
)
client.futures_create_order(
symbol=symbol,
side=SIDE_SELL if signal == ‘buy’ else SIDE_BUY,
type=ORDER_TYPE_LIMIT,
quantity=order_quantity,
price=take_profit_price,
reduceOnly=True,
timeInForce=TIME_IN_FORCE_GTC,
positionSide=position_side
)
print(f"Set stop loss at {stop_loss_price} and take profit at {take_profit_price}”)
time.sleep(1)
except Exception as e:
print(f"Error executing order: {str(e)}“)
while True:
try:
current_time = dt.datetime.now().strftime(”%Y-%m-%d %H:%M:%S")
df = getminutedata(‘symbol’, ‘1m’, ‘44640’) # Get minute data each loop
if df is None:
continue
current_signal = signal_generator(df)
print(f"The signal time is: {current_time} :{current_signal}“)
if current_signal:
order_execution(‘symbol’, current_signal, max_trade_quantity_percentage, leverage)
time.sleep(1) # Add a delay of 1 second
except Exception as e:
print(f"Unknown error: {str(e)}”)
time.sleep(1) # Wait 1 minute before trying again Is this code is right ?