order_check

Comprueba si los fondos son suficientes para realizar la operación comercial requerida. Los resultados de la comprobación se retornan en forma de estructura MqlTradeCheckResult.

order_check(
   request      // estructura de la solicitud
   );

Parámetros

request

[in]  Estructura del tipo MqlTradeRequest que describe la acción comercial necesaria. Parámetro no nombrado obligatorio. Más abajo, podrá ver un ejemplo con el rellenado de una solicitud y la composición de una enumeración.

Valor retornado

El resultado de la comprobación se da en forma de estructura MqlTradeCheckResult. El campo request en la respuesta contiene la estructura de la solicitud comercial transmitida a order_check().

Observación

La comprobación exitosa de la solicitud no indica que la operación comercial solicitada se vaya a ejecutar obligatoriamente con éxito. La función order_check es un análogo de OrderCheck.

TRADE_REQUEST_ACTIONS

Identificador

Descripción

TRADE_ACTION_DEAL

Colocar una orden comercial para la ejecución inmediata de una transacción con los parámetros indicados (colocar una orden de mercado)

TRADE_ACTION_PENDING

Colocar una orden comercial para la ejecución de una transacción al darse las condiciones indicadas (orden pendiente)

TRADE_ACTION_SLTP

Cambiar los valores de Stop Loss y Take Profit de una posición abierta

TRADE_ACTION_MODIFY

Cambiar los parámetros de una orden comercial anteriormente colocada

TRADE_ACTION_REMOVE

Eliminar una orden comercial pendiente anteriormente colocada

TRADE_ACTION_CLOSE_BY

Cerrar una posición con otra opuesta

ORDER_TYPE_FILLING

Identificador

Descripción

ORDER_FILLING_FOK

Esta política de ejecución establece que la orden puede ser ejecutada exclusivamente en el volumen indicado. Si en el mercado en estos momentos no existe volumen suficiente de un instrumento financiero, la orden no será ejecutada. El volumen necesario puede componerse de varias ofertas disponibeles en el mercado en el momento actual.

ORDER_FILLING_IOC

Indica que el usuario acepta ejecutar una transacción al mayor volumen alcanzado en el mercado dentro de los límites establecidos en la orden. En caso de que no sea posible la ejecución completa, la orden se ejecutará con el volumen disponible, mientras que el volumen de la orden no ejecutado será cancelado.

ORDER_FILLING_RETURN

Este modo se usa para las órdenes de mercado (ORDER_TYPE_BUY y ORDER_TYPE_SELL), las órdenes límite y las órdenes stop limit (ORDER_TYPE_BUY_LIMIT, ORDER_TYPE_SELL_LIMIT, ORDER_TYPE_BUY_STOP_LIMIT y ORDER_TYPE_SELL_STOP_LIMIT) y solo en los modos "Ejecución según mercado" y "Ejecución bursátil". Si una orden de mercado o límite se ejecuta parcialmente con el volumen sobrante, esta no se quitará, sino que seguirá existiendo.

Al darse la activación para las órdenes ORDER_TYPE_BUY_STOP_LIMIT y ORDER_TYPE_SELL_STOP_LIMIT, se creará la orden límite correspondiente ORDER_TYPE_BUY_LIMIT/ORDER_TYPE_SELL_LIMIT con el tipo de ejecución ORDER_FILLING_RETURN.

ORDER_TYPE_TIME

Identificador

Descripción

ORDER_TIME_GTC

La orden se encontrará en la cola hasta que sea quitada

ORDER_TIME_DAY

La orden estará activa solo durante el día comercial actual

ORDER_TIME_SPECIFIED

La orden estará activa hasta la fecha de expiración

ORDER_TIME_SPECIFIED_DAY

La orden estará activa hasta las 23:59:59 del día indicado. Si la hora no se encuentra en la sesión comercial, la expiración tendrá lugar en la hora comercial más próxima.

Ejemplo:

import MetaTrader5 as mt5
# mostramos los datos sobre el paquete MetaTrader5
print("MetaTrader5 package author: ",mt5.__author__)
print("MetaTrader5 package version: ",mt5.__version__)
 
# establecemos la conexión con el terminal MetaTrader 5
if not mt5.initialize():
    print("initialize() failed, error code =",mt5.last_error())
    quit()
 
# obtenemos la divisa de la cuenta
account_currency=mt5.account_info().currency
print("Account сurrency:",account_currency)
 
# preparamos la estructura de la solicitud
symbol="USDJPY"
symbol_info = mt5.symbol_info(symbol)
if symbol_info is None:
    print(symbol, "not found, can not call order_check()")
    mt5.shutdown()
    quit()
 
# si el símbolo no está disponible en MarketWatch, lo añadimos
if not symbol_info.visible:
    print(symbol, "is not visible, trying to switch on")
    if not mt5.symbol_select(symbol,True):
        print("symbol_select({}}) failed, exit",symbol)
        mt5.shutdown()
        quit()
 
# preparamos la solicitud
point=mt5.symbol_info(symbol).point
request = {
    "action"mt5.TRADE_ACTION_DEAL,
    "symbol": symbol,
    "volume": 1.0,
    "type"mt5.ORDER_TYPE_BUY,
    "price"mt5.symbol_info_tick(symbol).ask,
    "sl"mt5.symbol_info_tick(symbol).ask-100*point,
    "tp"mt5.symbol_info_tick(symbol).ask+100*point,
    "deviation": 10,
    "magic": 234000,
    "comment""python script",
    "type_time"mt5.ORDER_TIME_GTC,
    "type_filling"mt5.ORDER_FILLING_RETURN,
}
 
# realizamos la comprobación y mostramos el resultado como es
result = mt5.order_check(request)
print(result);
# solicitamos el resultado en forma de diccionario y lo mostramos elemento por elemento
result_dict=result._asdict()
for field in result_dict.keys():
    print("   {}={}".format(field,result_dict[field]))
    # si se trata de la estructura de una solicitud comercial, también la mostramos elemento por elemento
    if field=="request":
        traderequest_dict=result_dict[field]._asdict()
        for tradereq_filed in traderequest_dict:
            print("       traderequest: {}={}".format(tradereq_filed,traderequest_dict[tradereq_filed]))
 
# finalizamos la conexión con el terminal MetaTrader 5
mt5.shutdown()
 
 
Resultado:
MetaTrader5 package author:  MetaQuotes Software Corp.
MetaTrader5 package version:  5.0.29
 
Account сurrency: USD
   retcode=0
   balance=101300.53
   equity=68319.53
   profit=-32981.0
   margin=51193.67
   margin_free=17125.86
   margin_level=133.45308121101692
   comment=Done
   request=TradeRequest(action=1, magic=234000, order=0, symbol='USDJPY', volume=1.0, ...
       traderequest: action=1
       traderequest: magic=234000
       traderequest: order=0
       traderequest: symbol=USDJPY
       traderequest: volume=1.0
       traderequest: price=108.081
       traderequest: stoplimit=0.0
       traderequest: sl=107.98100000000001
       traderequest: tp=108.181
       traderequest: deviation=10
       traderequest: type=0
       traderequest: type_filling=2
       traderequest: type_time=0
       traderequest: expiration=0
       traderequest: comment=python script
       traderequest: position=0
       traderequest: position_by=0

Ver también

order_send, OrderCheck, Tipos de operaciones comerciales, Estructura de la solicitud comercial, Estructura de los resultados de la comprobación de la solicitud comercial, Estructura del resultado de la solicitud comercial