Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 464

 

Eu não consigo resolver o problema, estou ficando sem graça e a cerveja não ajuda.

Eu tenho:

1 - há 30 EAs trabalhando em um gráfico ou símbolo e todos têm um número Medgic diferente

2- Cada EA tem 3-5 ordens em aberto ...

A tarefa é imprimir todos os números em uma barra em um gráfico e o lucro/perda total neles ...

Estou cavando, mas não chego a lugar algum:

  #define  MagicN 0
#define  MagProf 1
 ArrayResize(mags,100,1000);ArrayInitialize(mags,0);  
   for(int f=OrdersTotal()-1; f>=0; f--)
      if(OrderSelect(f,SELECT_BY_POS))
              {
               for(int z=100-1; z>=0; z--)
                 {
                  if(mags[z][MagicN]==OrderMagicNumber())
                  mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();

                  if(mags[z][MagicN]!=OrderMagicNumber())
                    {
                     mags[z][MagicN]=OrderMagicNumber();
                     mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
                    }
                 }
              }

Boas pessoas ajudam quem pode!!! )))))))

 
VOLDEMAR:

Eu não consigo resolver o problema, estou ficando sem graça e a cerveja não ajuda.

Eu tenho:

1 - há 30 EAs trabalhando em um gráfico ou símbolo e todos têm um número Medgic diferente

2- Cada EA tem 3-5 ordens em aberto ...

A tarefa é imprimir todos os números em uma barra em um gráfico e o lucro/perda total neles ...

Estou cavando, mas não chego a lugar algum:

Boas pessoas ajudam quem pode!!! )))))))


Criamos uma matriz bidimensional. Na primeira dimensão, armazenamos o lucro acumulado, na segunda dimensão, armazenamos o majik.

Ao processar pedidos, procuramos um número mágico na matriz, se não o encontrarmos, aumentamos a matriz, se o encontrarmos, aumentamos o lucro.

Após a conclusão do processamento, exibimos o resultado na tela

 
Vinin:


Criar uma matriz bidimensional. Na primeira dimensão, armazenamos o lucro acumulado, e na segunda dimensão, armazenamos o mejic.

Ao processar as ordens, procuramos as ordens na matriz, se não as encontramos, aumentamos a matriz, se as encontramos, aumentamos o lucro.

Após a conclusão do processamento, exibir o resultado na tela


Não foi isso que eu escrevi?
 
VOLDEMAR:

Não é isso que diz?

Não exatamente. Onde você define o tamanho da matriz e procura por um índice na Magik. Eu não vi isso.
 
for(int f=OrdensTotal()-1; f>=0; f--) // pesquisa de pedidos
if(OrderSelect(f,SELECT_BY_POS))
{
for(int z=0; z<ArraySize(mags); z++)// segundo laço sobre o número de elementos da matriz
{
if(mags[z][MagicN]==OrderMagicNumber()) // se já existe um MagicNumber, vamos adicionar o lucro
{
mags[z][MagProf]+=OrderProfit()+OrderComission()+OrderSwap();
}
caso contrário /se não houver nenhum mag
{
ArrayResize(mags,z,1000); // expandir array
mags[z][MagicN]=OrderMagicNumber(); // armazenar o mag
}
}

}

Mas com esta construção, o terminal não vai testar, diz erro crítico

 
VOLDEMAR:
for(int f=OrdensTotal()-1; f>=0; f--) // pesquisa de pedidos
if(OrderSelect(f,SELECT_BY_POS))
{
for(int z=0; z<ArraySize(mags); z++)// segundo laço sobre o número de elementos da matriz
{
if(mags[z][MagicN]==OrderMagicNumber()) // se já existe um MagicNumber, vamos adicionar o lucro
{
mags[z][MagProf]+=OrderProfit()+OrderComission()+OrderSwap();
}
caso contrário /se não houver nenhum mag
{
ArrayResize(mags,z,1000); // expandir array
mags[z][MagicN]=OrderMagicNumber(); // armazenar o mag
}
}

}

Mas com esta construção, o terminal não vai testar, diz erro crítico


O que é a variável MagicN e onde ela muda?
 
na definição tem o parâmetro 0 e MagProf na definição tem o valor 1
 
VOLDEMAR:
na definição tem um parâmetro 0 e MagProf na definição tem um valor de 1


Tente isto

#define MagicN 0
#define MagProf 1
double mags[10][2];
int CountMagic=0;

void CalcMagic()
  {
   for(int f=OrdersTotal()-1; f>=0; f--) // перебор ордеров
      if(OrderSelect(f,SELECT_BY_POS))
        {
         mags[FindMaic(OrderMagicNumber())][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
        }

  }
//+------------------------------------------------------------------+

int FindMaic(int Magic)
  {
   int Res=-1;
   for(int i=0;i<CountMagic;i++)
     {
      if(mags[i][MagicN]==Magic)
         Res=i;
      break;
     }
   if(Res==-1)
     {
      Res=CountMagic;
      CountMagic++;
      if(CountMagic>=ArrayRange(mags,0))
        {
         ArrayResize(mags,CountMagic+10);
        }

     }

   return(Res);
  }
//+------------------------------------------------------------------+

Em matrizes multidimensionais, a dimensionalidade pode ser definida usando o ArrayRange()

 
Existe uma StopLetter e Freeswell que eu posso obter através do marketinfo, mas existe a mesma restrição, mas que diz respeito à data mínima de validade, geralmente é de 15 minutos. Portanto, se eu colocar uma ordem pendente, o tempo mínimo após o qual ela se auto-extinguirá, se não for acionada, é de 15 minutos. Essa é a questão - como saber programticamente este limite?
 
Desead:
Há um stopplay e freezevel que eu posso obter através do marketinfo, e há a mesma restrição, mas que diz respeito à data de validade mínima, geralmente é de 15 minutos. ou seja, se eu colocar uma ordem pendente, o tempo mínimo após o qual ela se auto-extinguirá, se não for acionada, é de 15 minutos. Essa é a questão - como saber programticamente este limite?

Pergunte ao seu corretor! Alguns não executam uma expiração.

Não a coloco em uma ordem, mas a retiro de acordo com os termos.