Esempio n. 1
0
def group_delete(fxtype):
    try:
        group_data = request.json['group']
        upper_fxtype = fxtype.upper()
        if upper_fxtype in ('SPOT', 'NDF'):
            for gr in group_data:
                databus.delete('LegalEntitiesRelationships/Groups_Spreads/FX' + upper_fxtype + '/' + gr)
                databus.delete('ClientSpreads/GroupSpreads/' + gr + '/FX' + upper_fxtype)

            with open(get_data_path('RobotFX_LegalEntitiesRelationships.json'), 'w') as json_file_out:
                json_file_out.write(json.dumps(databus.get_dict('LegalEntitiesRelationships'), indent=2))

            with open(get_data_path('RobotFX_Client_Spreads.json'), 'w') as json_file_out:
                json_file_out.write(json.dumps(databus.get_dict('ClientSpreads'), indent=2))

            return jsonify({'status': 'ok - group - ' + fxtype.lower() + ' - delete'})
        else:
            raise KeyError()
    except KeyError:
        exc_info = sys.exc_info()
        return jsonify(
            {
                'status': 'error - group - ' + fxtype.lower() + ' - delete',
                'exception': ''.join(traceback.format_exception(*exc_info)),
            }
        )
Esempio n. 2
0
def trading_parameters_ndf():
    trading_parameters = databus.get_dict('TradingParameters')
    engine_parameters = json.dumps(
        trading_parameters["Engine_Global_Parameters"]["FXNDF"])
    currency_keys = json.dumps(trading_parameters["CurrencyKeys"])
    counterparty_list = []
    leg_entities = databus.get_dict('LegalEntities')
    if leg_entities is None:
        leg_entities = {}
    trad_counterparties = trading_parameters['CounterpartyKeys']
    common_cp_keys = tuple(k for k, v in leg_entities.items()
                           if 'FXNDF' in v['Products'])
    for cp_key in common_cp_keys:
        trad_value = trad_counterparties[cp_key]['FXNDF']
        validate_kyc_rule = update_validate_rule(trad_value['ValidateKYC'],
                                                 'KYC', cp_key, True)
        validate_isda_rule = update_validate_rule(trad_value['ValidateISDA'],
                                                  'ISDA', cp_key, True)
        counterparty_list.append({
            'cter_prty_id':
            cp_key,
            'counterparty':
            leg_entities[cp_key]["CounterpartyName"],
            'upper_limit_dc':
            trad_value['UpperLimitDays2Maturity'],
            'automatic_flow':
            trad_value['AutoFlow'],
            'validate_kyc':
            validate_kyc_rule,
            'validate_isda':
            validate_isda_rule,
        })

    with open(get_data_path('RobotFX_Users.json')) as json_file:
        user_data = json.load(json_file)
        user_id = session.get("user_id", None)
        username = get_username(user_id)
        if username not in user_data:
            return render_template('404.html')

        response_data = user_data[username]
        allow_validate = response_data['allow_validate'].lower() == 'yes'

    validate_parameters = get_validate_parameters()

    json_sorted_currencies = get_currencies_sorted()
    return render_template(
        'trading-parameters-ndf.html',
        engine_parameters=engine_parameters,
        currency_keys=currency_keys,
        counterparty_data=json.dumps(counterparty_list),
        sorted_currencies=json_sorted_currencies,
        allow_validate=json.dumps(allow_validate),
        validate_parameters=json.dumps(validate_parameters),
    )
Esempio n. 3
0
def halt_spot():
    if request.method == 'GET':
        status_trading_spot = databus.get_dict('System/Status/Trading/SPOT')
        status_supplier = databus.get_dict('System/Status/Quoting')
        status_trading_spot.update(status_supplier)
        return jsonify(status_trading_spot)
    if request.method == 'PUT':
        spot_key = databus.get_dict('System/Status/General/Spot')
        if spot_key:
            databus.update_from_dict(json.loads(request.data),
                                     "System/Status/Trading")
            return jsonify({'status': 'ok'})
        else:
            return jsonify({'status': 'ok - halted'})
Esempio n. 4
0
def halt_ndf():
    if request.method == 'GET':
        status_trading_ndf = databus.get_dict('System/Status/Trading/NDF')
        status_supplier = databus.get_dict('System/Status/Quoting')
        status_trading_ndf.update(status_supplier)
        return jsonify(status_trading_ndf)
    if request.method == 'PUT':
        ndf_key = databus.get_dict('System/Status/General/NDF')
        if ndf_key:
            databus.update_from_dict(json.loads(request.data),
                                     "System/Status/Trading")
            return jsonify({'status': 'ok'})
        else:
            return jsonify({'status': 'ok - halted'})
Esempio n. 5
0
def halt_quoting():
    if request.method == 'GET':
        return jsonify(databus.get_dict('System/Status/Quoting'))
    if request.method == 'PUT':
        spot_key = databus.get_dict('System/Status/General/Spot')
        ndf_key = databus.get_dict('System/Status/General/NDF')
        data = (json.loads(request.data))['Quoting']
        allow_clicking_NDF = 'Spot' not in data and 'NDF' in data and ndf_key
        allow_clicking_Spot = 'Spot' in data and 'NDF' not in data and spot_key
        allow_clicking_All = 'Spot' in data and 'NDF' in data and spot_key and ndf_key
        if allow_clicking_NDF or allow_clicking_Spot or allow_clicking_All:
            databus.update_from_dict(json.loads(request.data), "System/Status")
            return jsonify({'status': 'ok'})
        else:
            return jsonify({'status': 'ok - halted'})
Esempio n. 6
0
def get_currencies_sorted():
    dic = databus.get_dict('Currencies')
    result = sorted(dic.keys(), key=lambda x: dic[x]['ViewPriority'])
    try:
        result.remove('BRL')
    except ValueError:
        pass
    return json.dumps(result)
Esempio n. 7
0
def get_currencies_sorted_list():
    currencies = databus.get_dict('Currencies')
    currencies_sorted = sorted(currencies.keys(),
                               key=lambda x: currencies[x]['ViewPriority'])
    try:
        currencies_sorted.remove('BRL')
    except ValueError:
        pass
    return currencies_sorted
Esempio n. 8
0
def risk_data(user_id):
    risk_dict = databus.get_dict('RiskData/CURVE')

    def sort(elem):
        return elem[1]['ViewPriority']

    sorted_dict = {k: v for k, v in sorted(risk_dict.items(), key=sort)}

    return json.dumps(sorted_dict)
Esempio n. 9
0
def fxsupplier_transactions():
    max_num_days_transaction = 3  # Constante de número total de dias de uma transação.
    accounting_status = databus.get_dict('Balance/SPOT')
    for currency, dict_value in accounting_status.items():
        del dict_value['TotalRevenue']
        accounting_status[currency] = dict_value['TotalAmount']
        accounting_status[currency]['BuyTotal'] = sum(
            accounting_status[currency]['BuyD' + str(i)]
            for i in range(max_num_days_transaction))
        accounting_status[currency]['SellTotal'] = sum(
            accounting_status[currency]['SellD' + str(i)]
            for i in range(max_num_days_transaction))
        accounting_status[currency]['Net'] = (
            accounting_status[currency]['BuyTotal'] -
            accounting_status[currency]['SellTotal'])

    return json.dumps(accounting_status)
Esempio n. 10
0
def market_data():
    return json.dumps(databus.get_dict('MarketData/Curves'))
Esempio n. 11
0
def counterparty_config_put():
    try:
        cp = json.loads(request.data)['counterparty']
        cnpj = cp['Cnpj']
        del cp['Cnpj']
        sel_spot = json.loads(request.data)['selected_spot']
        sel_ndf = json.loads(request.data)['selected_ndf']
        update_case = json.loads(request.data)['update_case']

        if "FXSPOT" not in cp['Products']:
            cp['FXMarketType'] = 1
            cp['DefaultFXTransaction'] = ''
            sel_spot = ''

        if "FXNDF" not in cp['Products']:
            sel_ndf = ''

        with open(get_data_path('RobotFX_LegalEntities.json')) as json_file:
            old_obj = json.load(json_file)
            if not update_case and cnpj in old_obj:
                return jsonify({'status': 'already_taken'})

            old_obj[cnpj] = cp

        with open(get_data_path('RobotFX_LegalEntities.json'), "w") as json_file_out:
            json_file_out.write(json.dumps(old_obj, indent=2))

        databus.update_from_file(get_data_path('RobotFX_LegalEntities.json'), 'LegalEntities')

        with open(get_data_path('RobotFX_TradingParameters.json')) as json_file:
            old_obj = json.load(json_file)
            cp = old_obj['CounterpartyKeys']

        with open(get_data_path('RobotFX_TradingParameters.json'), "w") as json_file_out:
            new_counterparty_default = {
                cnpj: {
                    "FXSPOT": {"ValidateKYC": "YES", "AutoFlow": "ENABLED"},
                    "FXNDF": {
                        "UpperLimitDays2Maturity": 720,
                        "AutoFlow": "ENABLED",
                        "ValidateKYC": "YES",
                        "ValidateISDA": "YES",
                    },
                }
            }
            cp.update(new_counterparty_default)
            old_obj['CounterpartyKeys'] = cp
            json_file_out.write(json.dumps(old_obj, sort_keys=True, indent=4))

        databus.update_from_file(get_data_path('RobotFX_TradingParameters.json'), 'TradingParameters')

        currencies = list(databus.get_dict('Currencies').keys())
        currencies.remove('BRL')

        time_buckets = []
        with open(get_data_path('RobotFX_NDFTimeBuckets.json')) as json_file:
            old_obj = json.load(json_file)
            tb = old_obj['TimeBuckets']
            for elem in tb:
                time_buckets.append(elem['EndDay'])

        with open(get_data_path('RobotFX_Client_Spreads.json')) as json_file:
            old_client_spreads = json.load(json_file)
            old_client_spreads['CounterpartySpreads'][cnpj] = {
                'FXSPOT': {},
                'FXNDF': {'Buckets': time_buckets, 'Spreads': {}},
            }
            for cur in currencies:
                old_client_spreads['CounterpartySpreads'][cnpj]['FXSPOT'][cur] = {'BUY': [None] * 3, 'SELL': [None] * 3}
                old_client_spreads['CounterpartySpreads'][cnpj]['FXNDF']['Spreads'][cur] = {
                    'BUYSELL': [None] * len(time_buckets)
                }

        with open(get_data_path('RobotFX_Client_Spreads.json'), 'w') as json_file_out:
            json_file_out.write(json.dumps(old_client_spreads, indent=2))

        databus.update_from_file(get_data_path('RobotFX_Client_Spreads.json'), 'ClientSpreads')

        with open(get_data_path('RobotFX_LegalEntitiesRelationships.json')) as json_file:
            groups_data = json.load(json_file)
            groups_data["Groups_Spreads_FXSPOT_Memberships"][cnpj] = sel_spot
            groups_data["Groups_Spreads_FXNDF_Memberships"][cnpj] = sel_ndf

        with open(get_data_path('RobotFX_LegalEntitiesRelationships.json'), "w") as json_file_out:
            json_file_out.write(json.dumps(groups_data, indent=2))

        databus.update_from_file(get_data_path('RobotFX_LegalEntitiesRelationships.json'), 'LegalEntitiesRelationships')

        return jsonify({'status': 'ok'})
    except KeyError:
        exc_info = sys.exc_info()
        return jsonify({'status': 'error', 'exception': ''.join(traceback.format_exception(*exc_info))})
    except json.decoder.JSONDecodeError:
        return jsonify({'status': 'fail because JSONDecoderError!'})
Esempio n. 12
0
def update_transaction_with_blotter_like_info(session, quote_req_id):
    q = session.query(
        tables.Transaction).filter_by(quote_req_id=quote_req_id).first()
    if q is not None:
        fx_product = q.fx_product
        blotter_info = json.loads(databus.get_dict(f"Blotter/{quote_req_id}"))
        blotter_info_keys = blotter_info.keys()
        if "symbol" in blotter_info_keys:
            symbol = blotter_info["symbol"]
            update_transaction_column(session, quote_req_id, "symbol", symbol)
        if "buy" in blotter_info_keys:
            buy = blotter_info["buy"]
            if isinstance(buy, float):
                update_transaction_column(session, quote_req_id, "buy", buy)
        if "sell" in blotter_info_keys:
            sell = blotter_info["sell"]
            if isinstance(sell, float):
                update_transaction_column(session, quote_req_id, "sell", sell)
        if "spread" in blotter_info_keys:
            spread = blotter_info["spread"]
            update_transaction_column(session, quote_req_id, "spread", spread)
        if "s_cost" in blotter_info_keys:
            s_cost = blotter_info["s_cost"]
            update_transaction_column(session, quote_req_id, "s_cost", s_cost)
        if "validate_kyc" in blotter_info_keys:
            validate_kyc = blotter_info["validate_kyc"]
            update_transaction_column(session, quote_req_id, "validate_kyc",
                                      validate_kyc)
        if "rejected_text" in blotter_info.keys():
            reject_text = blotter_info["rejected_text"]
            update_transaction_column(session, quote_req_id, "reject_text",
                                      reject_text)

        if fx_product == "SPOT":
            # client_side = blotter_info["client_side"]
            if "settlement_ccy" in blotter_info_keys:
                settlement_ccy = datetime.datetime.strptime(
                    blotter_info["settlement_ccy"], "%Y-%m-%d").date()
                update_transaction_column(session, quote_req_id,
                                          "settlement_ccy", settlement_ccy)
            if "settlement_brl" in blotter_info_keys:
                settlement_brl = datetime.datetime.strptime(
                    blotter_info["settlement_brl"], "%Y-%m-%d").date()
                update_transaction_column(session, quote_req_id,
                                          "settlement_brl", settlement_brl)
            if "settlement_ccy_dn" in blotter_info_keys:
                settlement_ccy_dn = blotter_info["settlement_ccy_dn"]
                update_transaction_column(session, quote_req_id,
                                          "settlement_ccy_dn",
                                          settlement_ccy_dn)
            if "settlement_brl_dn" in blotter_info_keys:
                settlement_brl_dn = blotter_info["settlement_brl_dn"]
                update_transaction_column(session, quote_req_id,
                                          "settlement_brl_dn",
                                          settlement_brl_dn)
            # timestamp = blotter_info["timestamp"]
            # revenue = blotter_info["revenue"]
        elif fx_product == "NDF":
            if "maturity" in blotter_info_keys:
                maturity = datetime.datetime.strptime(blotter_info["maturity"],
                                                      "%Y-%m-%d").date()
                update_transaction_column(session, quote_req_id, "maturity",
                                          maturity)
            if "dc" in blotter_info_keys:
                dc = blotter_info["dc"]
                update_transaction_column(session, quote_req_id, "dc", dc)
            if "du" in blotter_info_keys:
                du = blotter_info["du"]
                update_transaction_column(session, quote_req_id, "du", du)
            if "pre_brl" in blotter_info_keys:
                pre_brl = blotter_info["pre_brl"]
                update_transaction_column(session, quote_req_id, "pre_brl",
                                          pre_brl)
            if "cupom_ccy" in blotter_info_keys:
                cupom_ccy = blotter_info["cupom_ccy"]
                update_transaction_column(session, quote_req_id, "cupom_ccy",
                                          cupom_ccy)
            if "brl_risk" in blotter_info_keys:
                brl_risk = blotter_info["brl_risk"]
                update_transaction_column(session, quote_req_id, "brl_risk",
                                          brl_risk)
            if "spread_risk" in blotter_info_keys:
                spread_risk = blotter_info["spread_risk"]
                update_transaction_column(session, quote_req_id, "spread_risk",
                                          spread_risk)
            if "spread_notional" in blotter_info_keys:
                spread_notional = blotter_info["spread_notional"]
                update_transaction_column(session, quote_req_id,
                                          "spread_notional", spread_notional)
            if "f_cost" in blotter_info_keys:
                f_cost = blotter_info["f_cost"]
                update_transaction_column(session, quote_req_id, "f_cost",
                                          f_cost)
            if "fwd_points" in blotter_info_keys:
                fwd_points = blotter_info["fwd_points"]
                update_transaction_column(session, quote_req_id, "fwd_points",
                                          fwd_points)
            if "y_ccy" in blotter_info_keys:
                y_ccy = blotter_info["y_ccy"]
                update_transaction_column(session, quote_req_id, "y_ccy",
                                          y_ccy)
            if "y_ccy_client" in blotter_info_keys:
                y_ccy_client = blotter_info["y_ccy_client"]
                update_transaction_column(session, quote_req_id,
                                          "y_ccy_client", y_ccy_client)
            if "f_pfe" in blotter_info_keys:
                f_pfe = blotter_info["f_pfe"]
                update_transaction_column(session, quote_req_id, "f_pfe",
                                          f_pfe)
            if "validate_isda" in blotter_info_keys:
                validate_isda = blotter_info["validate_isda"]
                update_transaction_column(session, quote_req_id,
                                          "validate_isda", validate_isda)
            if "adj_maturity" in blotter_info_keys:
                adj_maturity = datetime.datetime.strptime(
                    blotter_info["adj_maturity"], "%Y-%m-%d").date()
                update_transaction_column(session, quote_req_id,
                                          "adj_maturity", adj_maturity)
            if "present_value_ccy" in blotter_info_keys:
                present_value_ccy = blotter_info["present_value_ccy"]
                update_transaction_column(session, quote_req_id,
                                          "present_value_ccy",
                                          present_value_ccy)
        else:
            pass
Esempio n. 13
0
def balance_spot():
    data = databus.get_dict('Balance')['SPOT']
    return json.dumps(data)
Esempio n. 14
0
def trading_parameters_spot():
    cash_limits_initialized = databus.get(
        'System/Status/Trading/SPOT/Initialized')
    trading_parameters = databus.get_dict('TradingParameters')
    engine_parameters = trading_parameters["Engine_Global_Parameters"][
        "FXSPOT"]
    currency_keys = trading_parameters["CurrencyKeys"]
    leg_entities = databus.get_dict('LegalEntities')
    if leg_entities is None:
        leg_entities = {}
    trad_counterparties = trading_parameters['CounterpartyKeys']
    common_cp_keys = tuple(k for k, v in leg_entities.items()
                           if 'FXSPOT' in v['Products'])
    counterparty_list = []
    for cp_key in common_cp_keys:
        trad_value = trad_counterparties[cp_key]['FXSPOT']
        validate_kyc_rule = update_validate_rule(trad_value['ValidateKYC'],
                                                 'KYC', cp_key, False)
        counterparty_list.append({
            'cter_prty_id':
            cp_key,
            'counterparty':
            leg_entities[cp_key]["CounterpartyName"],
            'automatic_flow':
            trad_value['AutoFlow'],
            'validate_kyc':
            validate_kyc_rule,
        })
    json_sorted_currencies = get_currencies_sorted()
    cash_limits_logs = {}

    if cash_limits_initialized:
        cash_limits_logs = databus.get_dict('CashLimits/Logs')
        pre_trading_ini_bal = {}
        for currency, maturity_value in cash_limits_logs.items():
            pre_trading_ini_bal[currency] = {}
            for maturity, value in maturity_value.items():
                if isinstance(value, list) and len(value) > 0:
                    pre_trading_ini_bal[currency][maturity] = value[0]
    else:
        cash_limits_logs = {}
        pre_trading_ini_bal = trading_parameters['PreTradingInitialBalance']

    with open(get_data_path('RobotFX_Users.json')) as json_file:
        user_data = json.load(json_file)
        user_id = session.get("user_id", None)
        username = get_username(user_id)
        if username not in user_data:
            return render_template('404.html')

        response_data = user_data[username]
        allow_validate = response_data['allow_validate'].lower() == 'yes'

    validate_parameters = get_validate_parameters()

    return render_template(
        'trading-parameters-spot.html',
        engine_parameters=json.dumps(engine_parameters),
        currency_keys=json.dumps(currency_keys),
        pre_trading_ini_bal=json.dumps(pre_trading_ini_bal),
        counterparty_data=json.dumps(counterparty_list),
        sorted_currencies=json_sorted_currencies,
        spot_initialized=cash_limits_initialized,
        cash_limits_logs=cash_limits_logs,
        allow_validate=json.dumps(allow_validate),
        validate_parameters=json.dumps(validate_parameters),
    )
Esempio n. 15
0
def balance_ndf():
    data = databus.get_dict('Balance/NDF')
    return json.dumps(data)