Discusión sobre el artículo "DoEasy. Elementos de control (Parte 31): Desplazamiento por el contenido del control "ScrollBar"" - página 3

 
#include <DoEasy\Engine.mqh>

CEngine        engine;

....

   int h=37,w=100;
   string name=prefix+"EDIT_BUY_LIMIT";
   x=309;
   y=124;
   if(!EditCreate(name,x,y,w-16,h,"",clrBlack,clrWhite))
     {
      Alert(TextByLanguage("Fallo al crear Editar elemento \""","Could not create Edit element \""),prefix+"EDIT_BUY_LIMIT"+", error: "+(string)GetLastError());
      return false;
     }


//+------------------------------------------------------------------+
//| Crea Editar|
//+------------------------------------------------------------------+
bool EditCreate(const string name,
                const int x,
                const int y,
                const int w,
                const int h,
                const string text,
                const color clr_txt,
                const color clr_bg,
                const string font="Calibri",
                const int font_size=11)
  {
   if(!engine.CreateEditField(0,name,0,false,x,y,w,h,font_size,CORNER_LEFT_LOWER,ALIGN_CENTER,false))
     {
      Print(DFUN,TextByLanguage("Error al crear el elemento Editar Código de error="","Could not Edit element! Error code="),GetLastError()); 
      return false;   // --- aquí devuelve false
     }
 }
 
Y realmente, ¿cómo se crea una Edición vinculándola a un panel?
 
Vaya, he dibujado el panel, he pasado mucho tiempo. Y resulta que no se puede crear un elemento de edición...
 
leonerd #:
Vaya, he dibujado el panel, he pasado mucho tiempo. Y resulta que no se puede crear un elemento Editar...
Por favor, muéstrame tu ejemplo totalmente compilable.
 
Artyom Trishkin #:
Muéstrame tu ejemplo totalmente compilable, por favor.

Bueno, lo que hay que compilar si no hay tal objeto.

GRAPH_ELEMENT_TYPE_WF_RADIOBUTTON está ahí y muchos otros, pero no hay un simple Edit. A través del método del motor CreateEditField() termino creando un campo, pero dime ¿cómo enlazarlo al panel?

CPanel *pnl=engine.CreateWFPanel("WFPanel",50,50,280,240,array_clr,200,true,true,false,-1,FRAME_STYLE_BEVEL,true,false);
if(pnl!=NULL)
  {
   if(!pnl.CreateNewElement(GRAPH_ELEMENT_TYPE_WF_RADIOBUTTON,InpRbnShiftX+dist_rbtn_x*i,InpRbnShiftY,50,20,clrNONE,255,true,false))
     ..
  }

 
leonerd #:

Entonces, ¿qué hay que compilar si no existe tal objeto?

Hay GRAPH_ELEMENT_TYPE_WF_RADIOBUTTON y muchos otros, pero no hay un simple Edit. A través del método del motor CreateEditField() termino creando un campo, pero dime ¿cómo enlazarlo al panel?

La librería aún está en desarrollo. Los elementos gráficos están a menos de la mitad. No hay campo de entrada todavía. Sólo existe uno estándar, que es el que estás intentando crear.

Cuando el objeto "Campo de entrada" esté disponible, entonces todo funcionará. No es práctico vincular un objeto estándar al formulario ahora - no participará en el modelo de eventos del objeto formulario.

 

De acuerdo.

Además, este método no funciona correctamente

CArrayObj* pos_orders=engine.GetListAllOrdersByPosID(prev_pos_ticket);

Sólo me devuelve el último pedido. Por alguna razón, al filtrar los pedidos, los trata como pedidos pendientes borrados.

Voy a dar algunos datos. La primera orden de la posición se abrió con un limitador (SELL STOP), hubo varias actualizaciones de la posición cambiando SL/TP. Luego capté un evento de cierre en SL. Estoy intentando encontrar la primera orden de la posición cerrada, pero el método anterior no funciona correctamente.

CEngine engine

....

    if(event.TypeEvent()==TRADE_EVENT_POSITION_CLOSED_BY_SL)
        {
         
         ulong prev_pos_ticket=event.TicketPositionPrevious();  // aquí está el billete de posición correcto 
         CArrayObj* pos_orders=engine.GetListAllOrdersByPosID(prev_pos_ticket); // aquí en el array recibido sólo la última orden de posición (sl)
        }
  
 
leonerd posición cerrada, pero el método anterior no funciona correctamente.

El ticket de posición y el id de posición son cosas completamente diferentes. Necesitas buscar por el ID de la posición, no por su ticket, que cambia constantemente y se hace igual al ticket de la orden que generó la operación que cambió la posición.

Usted debe leer artículos o ayuda sobre el sistema de órdenes en MetaTrader 5....

 

En ClosePosition() ni siquiera rellena el relleno en absoluto

En Trading.mqh trade_obj.ClosePosition(ticket,comment,deviation)
trade_obj tiene el relleno requerido, y al entrar en este método.m_request.type_filling se convierte en FOK por defecto

 
leonerd ,comment,deviation)
trade_obj tiene el relleno requerido, y al entrar en este método.m_request.type_filling se convierte en FOK por defecto
Lo miraré. Gracias.