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

Popular posts from this blog

MQL5 : Add time to current time in mins

MQL5: Closed order detail