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 135

 

Bom dia, se não for muito difícil, por favor, avise um novato:

1) Como declarar um array de tamanho igual ao valor de alguma variável? (se i=7 declarar array duplo Muss[7] e assim por diante);

2) Por que uma matriz em uma função definida pelo usuário é considerada declarada e utilizada adequadamente se a condição é sempre falsa?

enquanto (falso){

Alerta("aaaaaaaaaaaa" );

Buf_max estático duplo [9000000];

Buf_min duplo estático [9000000];}

3) Existe uma diferença na função do usuário e, em geral, entre apenas uma matriz e uma matriz estática?

 
ALXIMIKS:

Bom dia, se não for muito difícil, por favor, avise um novato:

1) Como declarar um array de tamanho igual ao valor de alguma variável? (Se i=7 declarar array duplo Muss[7] e assim por diante);

...

1) ArrayResize()

int i=7;
double Muss[]; // объявление динамического массива
//---
int init() 
{
  ArrayResize(Muss,i); // устанавливает новый размер массива
  return(0);
}
 

tal coisa:

se você chamar MarketInfo(Symbol(),MODE_TRADEALLOWED), ele retorna - 1=comércio permitido.

Mas se você pairar sobre o símbolo na visão geral do mercado, a ponta de ferramenta com texto - Trade: Close aparecerá.

qual é o truque aqui?

realmente não me deixa negociar, mas por que MODE_TRADEALLOWED retorna um valor errado?

 
chief2000:

Quantas vezes você executou o indicador? Parece várias vezes (a ciclicidade é perceptível em seus resultados).
Adicionar mais uma impressão ao deinit com algum "separador", definir a condição de entrada ou refazê-la no script para que não seja executada mais de uma vez, então ficará mais clara.


Grande idéia))

Eu o simplifiquei, assim:

//+------------------------------------------------------------------+
//|                                            massive_fffffffff.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

int start()
{ 

   int Array[4] = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size = ArrayRange(Array, 0);
   
   for(int i=0; i<11; i++)
   {
      i++;
      Print("_i = ", i);
   }

   for(x1=0; x1<Array_Size; x1++)
   {
      Print("Combination = ", Array[x1]);

      for(x2=x1+1; x2<Array_Size; x2++)
      {
         Print("Combination = ", Array[x1] + "   " + Array[x2]);

         for(x3=x2+1; x3<Array_Size; x3++)
         {
            Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

            for(x4=x3+1; x4<Array_Size; x4++)
            {
               Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
            }
         }
      }
   }
  for(int h=0; h<11; i++)
   {
      h++;
      Print("h = ", h);
   }


   return(0);
}

O início no diário de bordo é assim:

2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 11
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 10
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 11
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 10
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: Combination = 1
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 11
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:06     massive_fffffffff test started
2013.09.10 17:09:04     TestGenerator: spread set to 2
2013.09.10 17:09:04     massive_fffffffff EURUSD.GI,M5: loaded successfully

Não há sequer nenhum ciclo. Não há ordem. A produção não é nada consistente.

 
hoz:


Grande idéia))

Eu o simplifiquei, assim:

O início no diário de bordo é assim:

Não há sequer nenhum ciclo. Não há ordem. A produção não é nada consistente.


Você tornou as coisas um pouco mais complicadas, na fase de teste tudo pode ser feito em 1-2 linhas, dependendo da variante. É possível fazer tudo na Inite. A ordem de saída não foi estipulada.


bool Status_Run = true;


start() {

   if(Status_Run==true) {
      Status_Run  = false;

      Print("---START ---");
      ......

   }
}
 
chief2000:

Você tornou as coisas um pouco mais complicadas, na fase de verificação tudo pode ser feito em 1-2 linhas, dependendo da variante. É possível fazer tudo na Inite. A ordem de saída não foi estipulada.





Você pretende introduzir uma bandeira para que os loops sejam executados uma vez e pronto? Eu não paro de executar... É assim que funciona:

//+------------------------------------------------------------------+
//|                                            massive_fffffffff.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

int start()
{ 

   bool Status_run = true;
   int Array[4] = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size = ArrayRange(Array, 0);
   
   if (Status_run == true)
   {
      Status_run = false;

      for(x1=0; x1<Array_Size; x1++)
      {
         Print("Combination = ", Array[x1]);

         for(x2=x1+1; x2<Array_Size; x2++)
         {
            Print("Combination = ", Array[x1] + "   " + Array[x2]);

            for(x3=x2+1; x3<Array_Size; x3++)
            {
               Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

               for(x4=x3+1; x4<Array_Size; x4++)
               {
                  Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
               }
            }
         }
      }
   }

   return(0);
}

No entanto, em essência, o código deve funcionar como no INITA, de uma vez por todas. Então a variável booleana Status_run será imediatamente definida como falsa e a condição se não for executada novamente... Mas meu tronco não fica sem saída por algum motivo.

 
hoz:


Você pretende introduzir uma bandeira para que os loops sejam executados uma vez e pronto? Eu não paro de correr... É assim que funciona:

Embora em essência, o código deve funcionar como no INITE, uma vez e pronto. Então a variável booleana Status_run será imediatamente definida como falsa e a condição se não for executada novamente... Mas eu não fico sem saída no tronco por alguma razão.


Você afirmou que os loops deram resultados errados e eu lhe ofereci uma maneira de testá-los. Se funcionar como você precisa, então você deve seguir seu algoritmo, e se não, você deve mudá-lo durante a verificação.

PS "Status_run" deve ser criado antes de começar(), é uma variável global.
 

Gurus, uma palavra de conselho. Eu defino a variável bool Flag=true; para começar,

Eu abro um acordo

se ( condição)

{

Opn_S = verdadeiro;

Bandeira=falso;

}

Há uma pergunta sobre a bandeira, se a bandeira retornafalsa quando aberta e há esta bandeira na condição de aberta. Por quanto tempo a verdade ou o falso é passado para a bandeira, ela é zerada no dia seguinte?

 
Forexman77:

Gurus, uma palavra de conselho. Eu defino variável bool=verdadeiro; para começar,

Eu abro um acordo

se ( condição)

{

Opn_S = verdadeiro;

Bandeira=falso;

}

Há uma pergunta sobre a bandeira, se a bandeira retornafalsa quando aberta e há esta bandeira na condição de aberta. Por quanto tempo a verdade ou o falso é passado para a bandeira, ela será zerada no dia seguinte?


Não, a cada novo tick o valor de A bandeira será verdadeira . https://book.mql4.com/ru/variables/types

Ou declarar a variável globalmente - por exemplo, no início de um programa, fora de todas as funções.

Ou fazer a variável estática - bandeira estática bool=verdadeira; .

 
ALXIMIKS:

Não, a cada novo tick o valor de A bandeira será verdadeira . https://book.mql4.com/ru/variables/types

Ou declarar a variável globalmente - no início do programa, fora de todas as funções.

Ou fazer a variável estática - bandeira estática bool=verdadeira; .

Obrigado!