STMT

STMT es el nombre elegido para el marco de trabajo que vamos a desarrollar en este y próximos posts. Las siglas corresponden a SpeakerTrading Marco Trabajo. La idea de STMT es la de ofrecer un marco de trabajo que permita usar las funciones de Visual Chart de una forma sencilla, intuitiva, accesible a todo el mundo.

Esta librería está enfocada al uso, por lo que no comentaré detalles técnicos a menos que alguien tenga especial interés. Por lo general, todo lo que incluye STMT estará previamente explicado con un sencillo e ilustrativo ejemplo. Al igual que hago yo, vosotr@s también podéis crear vuestro propio marco de trabajo aunque espero que STMT cubra vuestras necesidades y no tengáis que perder el tiempo en programación “de bajo nivel”.

Sobra decir que estoy a vuestra entera disposición en cuanto a la orientación del marco de trabajo. Acepto sugerencias sobre funcionalidades que debería tener o que os gustaría incluir.

STMT, a diferencia de los ejemplos, incluye control de errores además de ofrecer una arquitectura mucho más intuitiva y flexible que el uso directo de las funciones de Visual Chart.

Las versiones de STMT empezarán casi desde cero con la idea de que la versión 1.0 cubra, más o menos, todas las funciones de Visual Chart.

En esta primera versión, os muestro un ejemplo de cómo obtener campos en tiempo real y las posiciones de un símbolo. Como podéis apreciar en el código, el uso de Visual Chart es extremadamente simple y casi todo el código se centra en mostrar los resultados en los controles de la ventana.

Comenzar a usar STMT

Para usar STMT, basta crear una aplicación y, en las referencias, agregar la librería STMT.dll.

Referencia a STMT

Hecho esto, tenemos un objeto VisualChart disponible. Creando este objeto, tenemos disponible toda la funcionalidad de STMT.

Ejemplo de Tiempo Real con STMT

Creamos una aplicación y añadimos la referencia a STMT.

Añadimos una variable VisualChart de STMT a nuestra ventana:

private VisualChart visualChart;

En el constructor, creamos el objeto y le indicamos donde vamos a gestionar los eventos de tiempo real y cambio de posiciones:

visualChart = new VisualChart();
visualChart.CamposModificados += VisualChart_OnCamposModificados;
visualChart.LimitesCambiando += VisualChart_OnLimitesCambiando;

En el evento de cierre de la ventana, destruimos el objeto para indicarle a Visual Chart que ya no estamos usando ninguno de los símbolos, consultas… que puedan estar activas en el momento de cerrar la aplicación.

private void TiempoRealForm_FormClosed(object sender, FormClosedEventArgs e)
{
   visualChart.Dispose();
}

La ventana tiene los controles que muestra la imagen siguiente:

Disenio ventana

Un TextBox para que se indique el símbolo a monitorizar y un botón para iniciar la monitorización. Varios controles Label para mostrar el valor de varios campos en tiempo real y una tabla donde se muestra lo mismo que en la ventana de posiciones de Visual Chart.

El código asociado a la pulsación del botón es el siguiente:

private void ButtonMonitorizar_Click(object sender, EventArgs e)
{
   if (visualChart.TiempoReal.Simbolos.Count() == 1)
   {
      string simbolo = visualChart.TiempoReal.Simbolos[0];
      if (string.CompareOrdinal(TextBoxSimbolo.Text, simbolo) == 0)
      {
         // El texto es el mismo, no cambia nada, salir
         return;
      }

      // Cambia el simbolo: se elimina el anterior
      visualChart.TiempoReal.QuitarSimbolo(simbolo);
      tabla.Rows.Clear();
   }

   if (!string.IsNullOrWhiteSpace(TextBoxSimbolo.Text))
   {
      Campo[] campos = new[] { Campo.Ultimo, Campo.Volumen, Campo.VolumenUltimo };
      visualChart.TiempoReal.MonitorizarLimites(TextBoxSimbolo.Text);
      visualChart.TiempoReal.MonitorizarCampos(TextBoxSimbolo.Text, campos);
   }
}

Como solo trabajamos con un símbolo en este ejemplo, si ya estamos recibiendo tiempo real de un símbolo y se pulsa el botón con otro símbolo distinto, le indicamos a VisualChart que queremos dejar de trabajar con el símbolo (QuitarSimbolo) y vaciamos la tabla de las posiciones.

A continuación, le pedimos que monitorice las posiciones y los campos que nos interesan del nuevo símbolo.

Veamos cómo gestionar la llegada de información de tiempo real:

private void VisualChart_OnCamposModificados(object sender, EventArgs e)
{
   string simbolo = visualChart.TiempoReal.Simbolos[0];
   InfoSimbolo info = visualChart.TiempoReal[simbolo];

   LabelUltimo.Text = info.Ultimo.ToString();
   LabelVolumen.Text = info.Volumen.ToString();
   LabelVolumenUltimo.Text = info.VolumenUltimo.ToString();
}

Tan simple como obtener el símbolo con el que estamos trabajando para acceder a su información. Los valores del símbolo los pasamos a los controles Label.

Para el caso de las posiciones:

private void VisualChart_OnLimitesCambiando(object sender, EventArgs e)
{
   string simbolo = visualChart.TiempoReal.Simbolos[0];
   InfoSimbolo info = visualChart.TiempoReal[simbolo];

   EstablecerCeldasPosicion(info.Posiciones.Bid, "ordenesCompra", "titulosCompra", "precioCompra");
   EstablecerCeldasPosicion(info.Posiciones.Ask, "ordenesVenta", "titulosVenta", "precioVenta");
}

Hacemos como anteriormente para obtener la información del símbolo, que contiene las posiciones. El método EstablecerCeldasPosicion rellena la tabla con los valores.

Aplicacion STMT

Como vemos, con unas pocas líneas de código tenemos funcionando una pequeña ventana de posiciones y algunos campos de tiempo real: todo actualizándose continuamente.

Archivo Zip Descargar STMT 0.1.zip.

Archivo Zip Descargar C# ST_TiempoReal.zip.

Archivo Zip Descargar VB .NET ST_TiempoReal_vb.zip.

Si te ha gustado la entrada, considera hacer una donación Donar. ¿Por qué donar?

Esta entrada fue publicada en Programación, STMT y etiquetada , . Guarda el enlace permanente.

5 respuestas a STMT

  1. Wikmar dijo:

    ¿No habrá que registrar la dll?. Intento crear la referencia a STMT.dll y me da el error que enlazo a continuación. Desarrollo en Visual Basic 6, no trabajo con C.

    http://www.screencast.com/t/f6dsm6HwwhGe

  2. La librería está hecha en .NET y es una DLL normal, no es un ActiveX ni un COM. No se puede agregar una referencia desde Visual Basic 6.

    Para usarlo desde ese entorno tendrías que declarar los cuerpos de cada función que vayas a usar, del modo en que se hace para acceder a las funciones del API de Windows:

    Declare Function Beep Lib «kernel32.dll» (ByVal freq As Long, ByVal duration As Long) As Long

    De momento déjalo, en cuanto pueda generaré una versión de STMT que funcione en Visual Basic 6 y te la envío. A partir de ahí STMT será siempre compatible con VB6.

  3. Buenas tardes,

    Excelente trabajo.

    Al intentar ejecutar desde Visual Studio _visualChart = new VisualChart(); Me sale un mensaje indicando que la librería STMT ha caducado.
    ¿Puedo hacer algo?
    ¿Está disponible el código fuente?

    Un saludo y gracias,
    Manuel Blanco
    Madrid

    • Podrías programar tu propio marco de trabajo. En los posts se explican distintas funcionalidades que ofrece Visual Chart para que cada uno pueda crearse uno adaptado a sus necesidades.

      Si alguien tiene dudas, solo tiene que hacérmelas llegar y respondo conforme tengo tiempo. El blog está orientado a la enseñanza, su finalidad es totalmente didáctica. Por eso los ejemplos son tan escuetos. Cada post (pensarlo, programarlo y redactarlo) consume un tiempo considerable. A cambio, no he recibido prácticamente nada. El blog tiene cierto seguimiento pero el feedback es prácticamente nulo. Los lectores «leen, descargan y se van», de ahí que lleve tiempo sin redactar nuevos posts y me haya centrado en desarrollar STMT para uso particular.

      Estoy trabajando en una nueva versión de STMT mucho más completa pero escapa del objetivo didáctico del blog. No he pensado como ofrecerla (acepto sugerencias) aunque estoy colaborando con unas pocas personas que si tendrán acceso a la librería. La nueva versión de STMT contempla la posibilidad de graficar históricos e indicadores en tu aplicación, Excel, históricos Heiken Ashi, diversas funciones (varianza, velocidad, pendiente…) en cualquier línea de un histórico o indicador, escáner, simulador de tiempo real, etc.

      Si te animas a desarrollar tu propio marco de trabajo, no dudes en plantearme tus dudas. Es costoso pero el resultado bien merece la pena.

Deja un comentario