Discussão do artigo "Desenvolvendo um EA de negociação do zero (Parte 11): Sistema CROSS ORDER"

 

Novo artigo Desenvolvendo um EA de negociação do zero (Parte 11): Sistema CROSS ORDER foi publicado:

Criando um sistema cross order. Existem uma classe de ativos que dificulta muito a vida dos operadores, estes são os ativos de contrato futuro, e por que eles dificultam a vida do operador ?

A imagem da esquerda é um típico contrato futuro no caso o MINI DOLAR FUTURO, ele se iniciou a poucos dias, como pode ser notado no gráfico, mas mesmo assim o gráfico da direita reflete este contrato, e contém dados extras que na verdade são valores dos contratos já vencidos, então o gráfico da direita é um gráfico de histórico, quando vamos analisar pontos de suporte ou resistência antigas damos preferência em usar justamente o gráfico da direita. Mas existe um problema quando vamos operar, e isto pode ser visto abaixo:

          

Autor: Daniel Jose

 

Parabéns por mais esse excelente artigo Daniel.


Acredito que o único problema será na virada do ano, quando a função "CurrentSymbol" precisar buscar o nome do símbolo do próximo ano. Me parece que o valor de i1 irá retornar sempre o número do ano vigente (22), porém em dezembro já começamos a usar o símbolo com final 23.


 
Guilherme Mendonca #:

Parabéns por mais esse excelente artigo Daniel.


Acredito que o único problema será na virada do ano, quando a função "CurrentSymbol" precisar buscar o nome do símbolo do próximo ano. Me parece que o valor de i1 irá retornar sempre o número do ano vigente (22), porém em dezembro já começamos a usar o símbolo com final 23.


Na verdade este problema não acontecerá e o motivo é o que faz o LAÇO terminar ....

                                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;
                                }

Somente quando esta condição em destaque for atingida o laço irá ser encerrado, e o valor de i1 sempre será incrementado ... desta forma quando for feito a troca de ano o ativo será modificado automaticamente ....

 
Daniel Jose #:

Na verdade este problema não acontecerá e o motivo é o que faz o LAÇO terminar ....

Somente quando esta condição em destaque for atingida o laço irá ser encerrado, e o valor de i1 sempre será incrementado ... desta forma quando for feito a troca de ano o ativo será modificado automaticamente ....

 Você está correto.

Não havia me atentado para a linha de incremento do valor de i1.