XTS copy trader update till 9 July 2023
from flask import Flask, render_template
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.interval import IntervalTrigger
import atexit
from Connect import XTSConnect
import pandas as pd
from datetime import datetime
id = "11013144"
API_KEY = "082144eb6500c64b37aa90"
API_SECRET = "Vnsv775#57"
source = "WEBAPI"
XTS_API_BASE_URL = "https://xts-api.trading"
xt = XTSConnect(API_KEY, API_SECRET, source)
app = Flask(__name__)
order_logs = [] # Variable to store the order logs
response = xt.interactive_login()
processed_logs = set() # Set to keep track of processed logs
processed_orders = set() # Set to keep track of processed orders
def read_symbols_from_csv():
symbols = []
try:
df = pd.read_csv('TradeSettings.csv', usecols=['Symbol'])
symbols = df['Symbol'].tolist()
except pd.errors.EmptyDataError:
print("The CSV file is empty or has no data.")
except FileNotFoundError:
print("The CSV file was not found.")
except Exception as e:
print("An error occurred while reading the CSV file:", str(e))
return symbols
printed_orders = []
def check_api_response():
with open('OrderLogs.txt', 'r') as f:
existing_logs = set(f.read().splitlines())
orderbook = xt.get_order_book()
try:
results = orderbook.get('result', [])
with open('OrderLogs.txt', 'a+') as f:
for order in results:
AppOrderID = order.get('AppOrderID')
if AppOrderID not in processed_orders and AppOrderID not in processed_logs:
OrderGeneratedDateTime = order.get('OrderGeneratedDateTime')
TradingSymbol = order.get('TradingSymbol')
OrderQuantity = order.get('OrderQuantity')
OrderStatus = order.get('OrderStatus')
OrderSide = order.get('OrderSide')
ProductType = order.get('ProductType')
output = f"{OrderGeneratedDateTime} Order for {OrderSide} {TradingSymbol} {ProductType} for {OrderQuantity} Quantity is {OrderStatus}, Exchange order Id {AppOrderID}"
if output not in existing_logs:
f.write(output + '\n') # Append the output to the OrderLogs.txt file
processed_orders.add(AppOrderID) # Add the AppOrderID to the set of processed orders
processed_logs.add(AppOrderID) # Add the AppOrderID to the set of processed logs
current_time = datetime.now().strftime("%H:%M")
for order in results:
OrderStatus = order.get('OrderStatus')
OrderGeneratedDateTime = order.get('OrderGeneratedDateTime')
TradingSymbol = order.get('TradingSymbol')
OrderQuantity = order.get('OrderQuantity')
AppOrderID = order.get('AppOrderID')
OrderSide = order.get('OrderSide')
ProductType = order.get('ProductType')
order_time = datetime.strptime(OrderGeneratedDateTime, "%d-%m-%Y %H:%M:%S").strftime("%H:%M")
if OrderStatus == 'Filled' and order_time == current_time and AppOrderID not in printed_orders:
output = f"{OrderGeneratedDateTime} Order for {OrderSide} {TradingSymbol} {ProductType} for {OrderQuantity} Quantity is {OrderStatus}, Exchange order Id {AppOrderID}"
print(output)
printed_orders.append(AppOrderID) # Add the AppOrderID to the printed orders list
netpositionresponce=xt.get_position_netwise()
for position in netpositionresponce['result']['positionList']:
if position['TradingSymbol'] == TradingSymbol:
for child_position in position['childPositions']:
if child_position['TradingSymbol'] == TradingSymbol:
symbol_net_pos = child_position['Quantity']
break
if OrderSide=="BUY":
pass
if OrderSide=="SELL":
pass
except KeyError:
pass
except Exception as e:
print("An error occurred while processing the order book:")
print(str(e))
print(orderbook) # Print the orderbook response for inspection
app = Flask(__name__)
@app.route('/')
def index():
logs = read_order_logs()
return render_template('index.html', logs=logs)
def read_order_logs():
with open('OrderLogs.txt', 'r') as f:
logs = f.read().splitlines()
return logs
if __name__ == '__main__':
scheduler = BackgroundScheduler()
scheduler.add_job(check_api_response, IntervalTrigger(seconds=1))
scheduler.start()
atexit.register(lambda: scheduler.shutdown())
app.run(debug=True)
#xts python sdk link = GitHub - symphonyfintech/xts-pythonclient-api-sdk
Comments
Post a Comment