ORDER_POSITION_ID - página 17

 

OrderGetInteger - funciona sólo con órdenes pendientes en el mercado

HistoryOrderGetInteger - funciona con los pedidos completados en el historial

 

Si alguien más está interesado, se adjunta el código, el ejecutable y el archivo de registro de EA.

MT-5 FORTALEZAS

Conclusiones:

1. Hasta que la orden se ejecute completamente o se elimine, NO hay historial de la misma.

El ORDER_POSITION_ID de la orden parcialmente ejecutada no está establecido.

Gracias a todos, lo tengo.

Archivos adjuntos:
Test_orders.zip  26 kb
 
йSerj_Che:
HI 0 10:29:25.468 Operaciones : intercambio compra 2,00 SBRF-9,14 en el mercado
JE 0 10:29:25.531 Operaciones : aceptada la compra de intercambio 2,00 SBRF-9,14 en el mercado
NM 0 10:29:25.562 Operaciones : intercambio de compra 2.00 SBRF-9.14 en el mercado colocado para ejecución en 88 ms
MN 0 10:29:25.562 Operaciones : operación #4522433 comprar 2.00 SBRF-9.14 a 6903 hecho (basado en la orden #4988264)
IE 0 10:29:26.640 Operaciones : intercambio vender 2,00 SBPR-9,14 en el mercado
DL 0 10:29:26.734 Operaciones : aceptó el cambio vender 2,00 SBPR-9,14 en el mercado
MQ 0 10:29:26.734 Operaciones : intercambio vender 2.00 SBPR-9.14 en el mercado colocado para la ejecución en 92 ms
KF 0 10:29:26.734 Operaciones : deal #4522434 sell 1.00 SBPR-9.14 at 5255 done (based on order #4988265)

DK 0 10:29:26.734 Operaciones : deal #4522435 sell 1.00 SBPR-9.14 at 5255 done (based on order #4988265)

ahora es una ejecución parcial.

Chicos, vamos, este listado muestra que una orden (#4988265) fue ejecutada por dos operaciones (#4522435 &#4522434) y no tiene nada que ver con una ejecución parcial.

Digamos que queremos comprar 50 contratos de VTBR-9.14 en el mercado. Sólo podemos comprar a los proveedores de liquidez, aquellos que ponen órdenes de venta limitadas. Su nivel y volumen pueden verse en la mitad superior de la copa. Veámoslo:

Hacemos una orden de compra. Nuestra orden sólo puede ser ejecutada por 4 vendedores diferentes. Podemos ver que podemos comprar 1 contrato a 3874, 40 contratos a 3875, 1 contrato a 3876 y 28 contratos a 3877. Esto significa que nuestro pedido sería atendido por 4 vendedores a la vez por 4 ofertas:

Transacción #
Precio

Volumen/

volumen disponible.

Total

Volumen

Tiempo
1
3874
1/1
112:21:341
2
3875
40/40
4112:21:351
3
3876
1/1
4212:21:363
4
3878
8/28
5012:21:365

Presta atención a la hora. El momento de realizar una operación no coincide necesariamente con el momento de cursar una orden. Permítanme dar un ejemplo más para que quede más claro:

Ejecución parcial.

Supongamos que queremos comprar 100 contratos VTBR-9.14 a un precio no peor que 3873. Fijamos BuyLimit para 100 contratos al nivel de 3873. Sin embargo, en el momento en que realizamos la orden, ya hay varios vendedores que venden sus contratos a un precio mejor que el especificado en nuestra orden:

Volumen
Precio
1
3871
3
3872
1
3872
39
3872
263872

Inmediatamente después de la colocación de esta orden limitada, se producirán 5 operaciones, que ejecutará parcialmente nuestra orden limitada. por un importe de 70 contratos (1+3+1+39+26).

Las operaciones ejecutadas pasarán al historial de transacciones y la propia orden de Límite seguirá activa y será visible en la pestaña de "Operaciones" de este formulario:

Una vez que nuestra orden fusiona las órdenes limitadas de la dirección opuesta, su precio será la mejor oferta para quienes deseen vender sus contratos:

Volumen
Precio
30 (Esta es nuestra oferta)
3873
2 (las ofertas de otros participantes son peores)
3872
12
3871

Como nuestra oferta es mejor y el mercado es líquido, nuestra orden será cubierta por otros participantes del mercado con órdenes opuestas, de mercado o pendientes.

Al cabo de un rato la orden se llenará y pasará al "Historial".

Si analizamos todo el proceso en términos de tiempo, se obtiene lo siguiente:

1. Establecemos una orden de Límite. Su tiempo de ajuste corresponde a ORDER_TIME_SETUP_MSC.

2. Las operaciones iniciadas por esta orden comienzan a activarse. Estas operaciones se añaden inmediatamente al historial. La orden en sí sigue estando en la pestaña "Comercio" y tiene el aspecto que se muestra en la figura anterior.

3. Al cabo de un tiempo, todas las operaciones se activan, la orden adquiere el volumen necesario y se traslada al historial de órdenes. Su tiempo de ejecución ORDER_TIME_DONE corresponde generalmente a la última operación ejecutada.

La orden no ha alcanzado el volumen necesario debido a algunas razones (falta de liquidez, vencimiento de la orden). En este caso, se trasladará al historial en el estado "parcialmente ejecutado". Esto significa que no todo el volumen solicitado será ejecutado por las operaciones.

Observe la captura de pantalla de esta orden:

La orden se ejecutó en 25 segundos (¡!) y todo este tiempo estuvo en la pestaña de órdenes activas. Y sólo el último oficio pasó a la historia. Su ORDER_TIME_DONE, respectivamente, es ahora igual a la hora de la última operación.

 

P/S Como prometí (respecto a la publicación de la respuesta de servicedesk).

No recibiré respuesta del Servicio de Atención al Cliente porque retiré mi solicitud porque ya no era necesaria.

Agradezco a komposter su propuesta de escribir un EA de prueba con

Le mantendré al día y le proporcionaré registros detallados.

 
papaklass:

¿¡Está bien!? ¿No quieres dar las gracias a Integer, que estuvo contigo toda la noche y te hizo PENSAR?

Ayúdate a ti mismo después de semejante actitud...

¿Quieres continuar?
 
papaklass:

¿¡Está bien!? ¿No quieres dar las gracias a Integer, que estuvo contigo toda la noche y te hizo PENSAR?

Ayúdate a ti mismo después de semejante actitud...

Eso fue culpa suya, no debiste ayudarle a pensar, debiste hacerlo por él.
 
sandex:
Ese es su error, no debió ayudar a pensar, sino que lo hizo por él.

sandex:

está buscando en la parte equivocada,OrderGetInteger(ORDER_POSITION_ID) - está tratando de buscar en la parte que no estuvo involucrada en la apertura/cambio/cierre de la posición

debe ser así HistoryOrderGetInteger(ticket,ORDER_POSITION_ID)

-----------------

¿Su comentario?

¿Quieres continuar?

 
Mikalas:

sandex:

está buscando en la parte equivocada,OrderGetInteger(ORDER_POSITION_ID) - está tratando de buscar en la parte que no estuvo involucrada en la apertura/cambio/cierre de la posición

debe ser así HistoryOrderGetInteger(ticket,ORDER_POSITION_ID)

-----------------

¿Su comentario?

¿Quieres continuar?

¿Por qué? ¿Por qué haces esto? ¿Como si el hombre escribiera tonterías? No sería una tontería si no hubieras escrito tu propia tontería. Has escrito que la entrada de la orden aparece en el historial de órdenes y sigue en el mercado.

¿Quieres continuar?

 

La finalización, creo, es la última.

Ningún foro en el que haya participado antes o en el que esté participando

No existe esa actitud de los usuarios del foro entre sí.

Un foro es una comunidad de personas con ideas afines que resuelven (discuten)

Es una comunidad de personas con ideas afines que pueden trabajar juntas para resolver problemas y ayudarse mutuamente.

Todas las personas son DIFERENTES: una capta la esencia de la pregunta al vuelo y la otra necesita tiempo,

para entenderlo.

Piénsalo con calma.

P / S Y doy las gracias a Yurich y komposter, precisamente porque.

He dado las gracias a Yurich y a komposter porque no han dicho nada innecesario.

A un hombre (aunque se equivoque o esté equivocado).

¡Son un ejemplo de verdaderos usuarios del foro!

 
papaklass:

Ya estoy sentado en el parterre. Lo espero con impaciencia.... :)

Sasha, esta es una posición muy cómoda para obtener una patada...