He leído el artículo que mencionas, que sin duda también es útil, pero en mi pregunta me refería a la posibilidad de leer las acciones sobre órdenes de otros participantes en el mercado, no las que coloca un operador desde su terminal. Es decir, el filtro sobre el que escribí debería aplicarse a las operaciones actuales del mercado. ¿Proporciona MetaTrader tal información? No he visto tales posibilidades en el manejador de eventos de la pila.
В статье описываются возможности языка MQL5 с точки зрения событийно-ориентированного программирования. Преимущество данного подхода состоит в том, что программа может получать информацию о поэтапном выполнении торговой операции. Приводится пример того, как с помощью обработчика события TradeTransaction можно получать и обрабатывать информацию о совершаемых торговых действиях. Думаю, что такой подход можно смело применять для целей копирования торговых сделок с терминала на терминал.
Rubick: ...pero en mi pregunta me refería a la posibilidad de leer las acciones sobre las órdenes de otros participantes en el mercado, no las colocadas por un operador desde su terminal. Es decir, el filtro sobre el que escribí debería aplicarse a las operaciones actuales del mercado. ¿Proporciona MetaTrader tal información? No he visto tales posibilidades en el controlador de eventos de la pila.
La pila muestra todas las órdenes limitadas actuales que están en el mercado en este momento. ¿Qué quiere decir con el término "operaciones de mercado en curso"?
denkir: La pila muestra todas las órdenes limitadas actuales que están en el mercado en ese momento. ¿Qué quiere decir con el término "operaciones actuales en el mercado"?
Le pido disculpas si no me he explicado con claridad. Intentaré explicarlo un poco más. Mire, en ENUM_BOOK_TYPE sólo hay cuatro tipos de órdenes listadas en la pila. Se pueden dividir en dos categorías: limitadas y de mercado. Ahora te contaré cómo entiendo yo la operación. Os advierto que aquí tengo dudas, así que si entiendo algo mal, corregidme por favor. Así que aquí está. Aquí hay dos grupos de posibles variantes.
Cuando una orden limitada se encuentra con una orden de mercado y se produce una operación - Tick. O dos ofertas de mercado se encuentran y hay un acuerdo - Tick.
Cuando dos ofertas limitadas se encuentran y la última de ellas conduce a un acuerdo - Tick.
La tarea que me planteo es filtrar las operaciones en dos categorías, 1ª - las producidas por ofertas limitadas, 2ª - las producidas por ofertas de mercado. Para que sirve esto es para mi en privado por favor. Puedo decir que he visto la implementación de tal filtro, ¡y por medio de 1C! También me sorprendió mucho cuando lo vi. Pero me gustó la idea. Y ahora, según tengo entendido es necesario acoplar el manejador OnTick con el manejador OnBookEvent. Cómo hacer esto, no tengo ni idea, así que pido su ayuda.
BlackBart: ¿Es posible crear un evento de libro para el mercado de divisas para ver las órdenes pendientes? Naturalmente para un único proveedor de liquidez.
Se necesita un broker que proporcione esta información.
"Es evidente que de todas las órdenes de venta, la orden #6 tuvo el mayor volumen con el precio de 7700 Rub y el volumen de 1011 lotes. La orden #39 tuvo el mayor volumen de todas las órdenes de compra con el precio de 7653 Rub y el volumen de 534 lotes".
No es la orden #6, ni la orden #39. Se trata de niveles, a los que se puede acceder mediante
last_bookArray[6]
o
last_bookArray[39]
Los MqlBookArrays se componen de ofertas de venta desde [0] hasta [ArraySize(bookArray)/2-1], y de ofertas de compra desde [ArraySize(bookArray)/2] hasta [ArraySize(bookArray)-1]. Que yo sepa, los libros tienen 2n niveles. Y, si no me equivoco, los niveles empiezan por el índice 0 (cero), por lo que el índice del modo matemático (el volumen más alto, la oferta de venta más frecuente) es 5 (volumen 1011, nivel/precio 7700), mientras que el modo de oferta de compra es 38 (volumen 534, nivel/precio de 7653).
El modo de oferta de compra podría tomarse como soporte. Y el modo de oferta de venta podría ser resistencia.
He intentado utilizar tu indicador, el BookEventProcessor2.mq5., pero al intentar compilarlo dentro del meta Editor mql5, me da el siguiente error, podrías ser tan amable de solucionarme esos problemillas para ver como funciona en estos momentos. También me podrías decir si también puede incluir las órdenes limitadas de venta y compra a la vez pero con otro color.
He intentado utilizar tu indicador, el BookEventProcessor2.mq5., pero al intentar compilarlo dentro del meta Editor mql5, me da el siguiente error, podrías ser tan amable de solucionarme esos problemillas para ver como funciona en estos momentos. También me podrías decir si también puede incluir las órdenes limitadas de venta y compra al mismo tiempo pero con otro color.
saludos ,
Michael
Michael, gracias por tus preguntas. En primer lugar, BookEventProcessor2 no es un indicador - es un Asesor Experto. Todo lo que necesita es colocar los archivos fuente y de cabecera en una carpeta. Echa un vistazo a las imágenes adjuntas a continuación.
Si desea cambiar los colores rápidamente vaya al método CBookBarsPanel::Init() :
//+------------------------------------------------------------------+//| Inicialización|//+------------------------------------------------------------------+bool CBookBarsPanel::Init(constuint _width,constuint _height)
{
//--- tamaño del panelthis.m_width=_width;
this.m_height=_height;
//--- asignar memoriaif(this.m_obj_arr.Reserve(this.m_arr_size))
{
//--- la bandera de gestión de memoria this.m_obj_arr.FreeMode(true);
//--- etiqueta del panel
CChartObjectRectLabel *ptr_rect_label=new CChartObjectRectLabel;
if(CheckPointer(ptr_rect_label)==POINTER_DYNAMIC)
if(ptr_rect_label.Create(0,"Panel",0,15,15,this.m_width,this.m_height))
if(ptr_rect_label.BorderType(BORDER_RAISED))
if(this.m_obj_arr.Add(ptr_rect_label))
{
//--- etiqueta de la barra uint curr_x=this.m_width/5;
uint curr_y=35;
uint mid_idx=this.m_arr_size/2-1;
for(uint idx=0;idx<this.m_arr_size;idx++)
{
color rec_color=(idx<(mid_idx+1))?clrRed:clrGreen;//---
CBookRecord *ptr_record=new CBookRecord;
if(CheckPointer(ptr_record)==POINTER_DYNAMIC)
if(ptr_record.Create(IntegerToString(idx+1),rec_color,curr_x+15,
curr_y,curr_x*3,10))
if(this.m_obj_arr.Add(ptr_record))
curr_y+=(idx==mid_idx)?24:13;
}
}
}
//---returnthis.m_obj_arr.Total()==(this.m_arr_size+1);
}
O puedes cambiar ligeramente los parámetros del método así:
//+------------------------------------------------------------------+//| Inicialización|//+------------------------------------------------------------------+bool CBookBarsPanel::Init(constuint _width,constuint _height, constcolor_buy_clr, constcolor_sell_clr)
{
//--- tamaño del panelthis.m_width=_width;
this.m_height=_height;
//--- asignar memoriaif(this.m_obj_arr.Reserve(this.m_arr_size))
{
//--- la bandera de gestión de memoria this.m_obj_arr.FreeMode(true);
//--- etiqueta del panel
CChartObjectRectLabel *ptr_rect_label=new CChartObjectRectLabel;
if(CheckPointer(ptr_rect_label)==POINTER_DYNAMIC)
if(ptr_rect_label.Create(0,"Panel",0,15,15,this.m_width,this.m_height))
if(ptr_rect_label.BorderType(BORDER_RAISED))
if(this.m_obj_arr.Add(ptr_rect_label))
{
//--- etiqueta de la barra uint curr_x=this.m_width/5;
uint curr_y=35;
uint mid_idx=this.m_arr_size/2-1;
for(uint idx=0;idx<this.m_arr_size;idx++)
{
color rec_color=(idx<(mid_idx+1))?_sell_clr:_buy_clr;
//---
CBookRecord *ptr_record=new CBookRecord;
if(CheckPointer(ptr_record)==POINTER_DYNAMIC)
if(ptr_record.Create(IntegerToString(idx+1),rec_color,curr_x+15,
curr_y,curr_x*3,10))
if(this.m_obj_arr.Add(ptr_record))
curr_y+=(idx==mid_idx)?24:13;
}
}
}
//---returnthis.m_obj_arr.Total()==(this.m_arr_size+1);
}
Gracias por la pronta respuesta, el asesor experto ahora funciona bastante bien. Pero yo estaba tratando de hablar de esta referencia:
Al enviar una solicitud de operación utilizando la función OrderSend(), algunas operaciones requieren la indicación del tipo de orden. El tipo de orden se especifica en el campo typede la estructura especialMqlTradeRequest, y puede aceptar valores de la enumeración ENUM_ORDER_TYPE.
ENUM_ORDER_TYPE
Identificador
Descripción
ORDER_TYPE_BUY
Orden de compra de mercado
ORDER_TYPE_SELL
Orden de venta a mercado
ORDER_TYPE_BUY_LIMIT
Orden pendiente con límite de compra
ORDEN_TIPO_VENTA_LIMITE
Orden pendiente de límite de venta
ORDER_TYPE_BUY_STOP
Orden pendiente Buy Stop
ORDER_TYPE_SELL_STOP
Orden pendiente Sell Stop
ORDER_TYPE_BUY_STOP_LIMIT
Al alcanzar el precio de la orden, se coloca una orden pendiente Buy Limit al precio StopLimit
ORDEN_TIPO_VENTA_STOP_LIMITE
Al alcanzar el precio de la orden, se coloca una orden pendiente de venta limitada al precio StopLimit.
ORDER_TYPE_CLOSE_BY
Orden para cerrar una posición por otra contraria
Puedo ver en la terminal de Mql5, que el exper advisor muestra ORDER_TYPE_BUY Y ORDER_TYPE_BUY, pero mi pregunta es se puede mostrar la transaccion en el bookevent sobre y cambiar esos colores, porque se como ver la orden de compra, pero donde esta el gran jefe poniendo su dinero, con Iceberg y abrazar orden pendiente a cierto nivel de precio.
Trade Request Structure - Data Structures - Constants, Enumerations and Structures - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
Lo más probable es que no necesite un bombo, sino un manipulador de transacciones de mercado.
...pero en mi pregunta me refería a la posibilidad de leer las acciones sobre las órdenes de otros participantes en el mercado, no las colocadas por un operador desde su terminal. Es decir, el filtro sobre el que escribí debería aplicarse a las operaciones actuales del mercado. ¿Proporciona MetaTrader tal información? No he visto tales posibilidades en el controlador de eventos de la pila.
La pila muestra todas las órdenes limitadas actuales que están en el mercado en ese momento. ¿Qué quiere decir con el término "operaciones actuales en el mercado"?
Le pido disculpas si no me he explicado con claridad. Intentaré explicarlo un poco más. Mire, en ENUM_BOOK_TYPE sólo hay cuatro tipos de órdenes listadas en la pila. Se pueden dividir en dos categorías: limitadas y de mercado. Ahora te contaré cómo entiendo yo la operación. Os advierto que aquí tengo dudas, así que si entiendo algo mal, corregidme por favor. Así que aquí está. Aquí hay dos grupos de posibles variantes.
La tarea que me planteo es filtrar las operaciones en dos categorías, 1ª - las producidas por ofertas limitadas, 2ª - las producidas por ofertas de mercado. Para que sirve esto es para mi en privado por favor. Puedo decir que he visto la implementación de tal filtro, ¡y por medio de 1C! También me sorprendió mucho cuando lo vi. Pero me gustó la idea. Y ahora, según tengo entendido es necesario acoplar el manejador OnTick con el manejador OnBookEvent. Cómo hacer esto, no tengo ni idea, así que pido su ayuda.
¿Es posible crear un evento de libro para el mercado de divisas para ver las órdenes pendientes? Naturalmente para un único proveedor de liquidez.
"Es evidente que de todas las órdenes de venta, la orden #6 tuvo el mayor volumen con el precio de 7700 Rub y el volumen de 1011 lotes. La orden #39 tuvo el mayor volumen de todas las órdenes de compra con el precio de 7653 Rub y el volumen de 534 lotes".
No es la orden #6, ni la orden #39. Se trata de niveles, a los que se puede acceder mediante
o
Los MqlBookArrays se componen de ofertas de venta desde [0] hasta [ArraySize(bookArray)/2-1], y de ofertas de compra desde [ArraySize(bookArray)/2] hasta [ArraySize(bookArray)-1]. Que yo sepa, los libros tienen 2n niveles. Y, si no me equivoco, los niveles empiezan por el índice 0 (cero), por lo que el índice del modo matemático (el volumen más alto, la oferta de venta más frecuente) es 5 (volumen 1011, nivel/precio 7700), mientras que el modo de oferta de compra es 38 (volumen 534, nivel/precio de 7653).
El modo de oferta de compra podría tomarse como soporte. Y el modo de oferta de venta podría ser resistencia.
Me gustaría saber cómo puedo aumentar el número de niveles...
Michael, gracias por tus preguntas. En primer lugar, BookEventProcessor2 no es un indicador - es un Asesor Experto. Todo lo que necesita es colocar los archivos fuente y de cabecera en una carpeta. Echa un vistazo a las imágenes adjuntas a continuación.
Si desea cambiar los colores rápidamente vaya al método CBookBarsPanel::Init() :
O puedes cambiar ligeramente los parámetros del método así:
Hola Dennis
Gracias por la pronta respuesta, el asesor experto ahora funciona bastante bien. Pero yo estaba tratando de hablar de esta referencia:
Al enviar una solicitud de operación utilizando la función OrderSend(), algunas operaciones requieren la indicación del tipo de orden. El tipo de orden se especifica en el campo typede la estructura especialMqlTradeRequest, y puede aceptar valores de la enumeración ENUM_ORDER_TYPE.
ENUM_ORDER_TYPE
Identificador
Descripción
ORDER_TYPE_BUY
Orden de compra de mercado
ORDER_TYPE_SELL
Orden de venta a mercado
ORDER_TYPE_BUY_LIMIT
Orden pendiente con límite de compra
ORDEN_TIPO_VENTA_LIMITE
Orden pendiente de límite de venta
ORDER_TYPE_BUY_STOP
Orden pendiente Buy Stop
ORDER_TYPE_SELL_STOP
Orden pendiente Sell Stop
ORDER_TYPE_BUY_STOP_LIMIT
Al alcanzar el precio de la orden, se coloca una orden pendiente Buy Limit al precio StopLimit
ORDEN_TIPO_VENTA_STOP_LIMITE
Al alcanzar el precio de la orden, se coloca una orden pendiente de venta limitada al precio StopLimit.
ORDER_TYPE_CLOSE_BY
Orden para cerrar una posición por otra contraria
Puedo ver en la terminal de Mql5, que el exper advisor muestra ORDER_TYPE_BUY Y ORDER_TYPE_BUY, pero mi pregunta es se puede mostrar la transaccion en el bookevent sobre y cambiar esos colores, porque se como ver la orden de compra, pero donde esta el gran jefe poniendo su dinero, con Iceberg y abrazar orden pendiente a cierto nivel de precio.
¿es eso posible?
Saludos Michael.
RDER_TYPE_SELL_LIMIT
Orden pendiente Sell Limit
ORDER_TYPE_BUY_STOP
Orden pendiente Buy Stop