Discusión sobre el artículo "Desarrollando un EA comercial desde cero (Parte 11): Sistema de órdenes cruzadas"

 

Artículo publicado Desarrollando un EA comercial desde cero (Parte 11): Sistema de órdenes cruzadas:

Creación de un sistema de órdenes cruzadas. Hay una clase de activos que les hace la vida muy difícil a los comerciantes, estos son los activos de contratos futuros, y ¿por qué le hacen la vida difícil al comerciante?

La imagen de la izquierda es un típico contrato de futuros, en este caso, del MINI DÓLAR FUTURO, que comenzó hace unos días, como se puede notar en el gráfico, pero aun así el gráfico de la derecha refleja este contrato y contiene datos extra que en realidad son los valores de los contratos ya vencidos, por lo que el gráfico de la derecha es un gráfico de historial, cuando vamos a analizar antiguos puntos de soporte o resistencia damos preferencia en utilizar precisamente el gráfico de la derecha. Pero hay un problema cuando vamos a comerciar, y esto se puede ver a continuación:

          

Autor: Daniel Jose

 

Enhorabuena por este excelente artículo Daniel.


Creo que el único problema estará en el cambio de año, cuando la función "CurrentSymbol" necesite buscar el nombre del símbolo del próximo año. Me parece que el valor de i1 siempre devolverá el número del año en curso (22), pero en diciembre ya empezamos a utilizar el símbolo que termina en 23.


 
Guilherme Mendonca nombre del símbolo del próximo año. Me parece que el valor de i1 siempre devolverá el número del año en curso (22), pero en diciembre ya empezamos a usar el símbolo terminado en 23.


En realidad, este problema no ocurrirá y la razón de ello es lo que hace que el Bucle termine.....

                                for (int i0 = 0, i1 = mdt1.year - 2000;;)
                                {
                                        m_Infos.szSymbol = StringFormat("%s%s%d", sz0, StringSubstr(sz1, i0, 1), i1);
                                        m_Infos.szFullSymbol = StringFormat("%s%s%d", sz2, StringSubstr(sz1, i0, 1), i1);
                                        if (i0 < StringLen(sz1)) i0++; else
                                        {
                                                i0 = 0;
                                                i1++;
                                        }
                                        if (macroGetDate(dt) < macroGetDate(SymbolInfoInteger(m_Infos.szSymbol, SYMBOL_EXPIRATION_TIME))) break;
                                }

Sólo cuando se cumpla esta condición terminará el bucle, y el valor de i1 se incrementará siempre... por lo que cuando se cambie el año, el activo se modificará automáticamente ....

 
Daniel Jose #:

De hecho, este problema no va a suceder y la razón de ello es lo que hace que el TIE para terminar....

Sólo cuando se alcance esta condición resaltada finalizará el bucle, y el valor de i1 se incrementará siempre... por lo que cuando se cambie el año, el activo se modificará automáticamente ....

Tienes razón.

No había prestado atención a la línea que incrementa el valor de i1.