[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 174

 
tpg_k156:
Boa tarde a todos. Você pode me dizer como copiar negócios no Metatrader 4. Para que, abrindo um comércio em um terminal, você possa obter um comércio aberto em outro.

Procure na CodeBase por uma copiadora. Não é o melhor, mas estão disponíveis gratuitamente
 
Quem sabe, é possível fazer com que Hora(), Minuto() e Segundos() variáveis globais para controlar à meia-noite (0,00) a mudança do indicador DailyPivotPoints para novos níveis de PP e outras linhas da EA? Eu costumava fazê-lo diretamente no indicador com Hora(), Minuto(), Segundos(), e funcionava sem a necessidade de compilar todas as noites. Mas recentemente deixou de mudar a si mesma, talvez de mudar o bild? Obrigado!
 
borilunad:
Quem sabe, é possível fazer com que Hora(), Minuto() e Segundos() variáveis globais para controlar à meia-noite (0,00) a mudança do indicador DailyPivotPoints para novos níveis de PP e outras linhas da EA? Eu costumava fazê-lo diretamente no indicador com Hora(), Minuto(), Segundos(), e funcionava sem a necessidade de compilar todas as noites. Mas recentemente deixou de mudar a si mesma, talvez de mudar o bild? Obrigado!

Deve funcionar no primeiro tique do novo dia.
 
borilunad:

Obrigado, Victor! A minha versão curta funcionou para você?


Sim, Boris, isso é muito bom, a propósito! Muito obrigado. Era isso que eu queria. Torci-o... Torci-o... Eu não entendi direito. Ainda não tive muita experiência e meu cérebro não está pensando como um profissional. É um beco sem saída, não é? :(

Eu não queria perguntar, mas tive que perguntar. Porque eu mesmo não consegui encurtar o tempo.

 
Você pode me dizer como construir um canal que passa por fractais, mas que se limita a 0 barra e se limita a mais um bar quando uma nova barra aparece. É a limitação que é o problema.
 
beginner:
Você pode me dizer como construir um canal que passa por fractais, mas que se limita a 0 barra e se limita a mais um bar quando uma nova barra aparece. É a limitação que é o problema.

Explicar o conceito de "limitado por 0 bar".
 

Aqui está a função:

bool IsUpFractal(int index)
{
   double centerHigh = High[index + g_center];     // За точку отсчета берется средний..
                                                   // ..бар на участке из i_fractalPeriod
                                                   // ..баров
// - 1 - == Поиск максимумов справа от центрального бара ================================
   int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)           // Справа от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh <= High[i])                   // ..максимумом. Не позволяется..
         return (false);                           // ..наличие баров с большим или..
      cnt++;                                       // ..равным максимумом.
   }
   
   if (i < 0)                                      // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 1 - == Окончание блока =============================================================

// - 2 - == Поиск максимумов слева от центрального бара =================================
   cnt = 0;
   i = index + g_center + 1;
   int total = Bars - 1;
   for (; i < total && cnt < g_center; i++)        // Слева от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh == High[i])                   // ..максимумом. Не позволяется..
         continue;                                 // ..наличие баров с большим..
      if (centerHigh < High[i])                    // ..максимумом. Равный - позволяется
         return (false);
      cnt++;                                    
   }
   
   if (i >= total)                                 // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 2 - == Окончание блока =============================================================
                                                   
   return (true);                                  // Фрактал найден                 
}
//+-------------------------------------------------------------------------------------+
//| Определение наличия нижнего фрактала на указанном баре                              |
//+-------------------------------------------------------------------------------------+
bool IsDnFractal(int index)
{
   double centerLow = Low[index + g_center];       // За точку отсчета берется средний..
                                                   // ..бар на участке из i_fractalPeriod
                                                   // ..баров
// - 1 - == Поиск минимумов справа от центрального бара =================================
   int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)           // Справа от центрального бара должно
   {                                               // ..быть g_center-1 баров с большим..
      if (centerLow >= Low[i])                     // ..минимумом. Не позволяется..
         return (false);                           // ..наличие баров с меньшим или..
      cnt++;                                       // .. равным минимумом
   }
   
   if (i < 0)                                      // g_center-1 больших минимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 1 - == Окончание блока =============================================================

// - 2 - == Поиск минимумов слева от центрального бара ==================================
   cnt = 0;
   i = index + g_center + 1;
   int total = Bars - 1;
   for (; i < total && cnt < g_center; i++)        // Слева от центрального бара должно
   {                                               // ..быть g_center-1 баров с большим..
      if (centerLow == Low[i])                     // ..минимумом. Не позволяется..
         continue;                                 // ..наличие баров с меньшим минимумом
      if (centerLow > Low[i])                      // ..Равный минимум - разрешается
         return (false);
      cnt++;   
   }
   
   if (i >= total)                                 // g_center-1 больших минимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 2 - == Окончание блока =============================================================
                                                   
   return (true);                                  // Фрактал найден                 
}

A função obtém o valor doíndice que tem um valor de barra para calcular 0 ou 1. É aqui que o laço é escrito de uma forma interessante:

for (; i >= 0 && cnt < g_center; i--)

Ou seja, não há valor variável a partir do qual se possa iniciar o cálculo. De acordo com a lógica da máquina, de qual barra, neste caso, o cálculo começará? Se houver um decréscimo de i... então do máximo?

Novamente lá i = índice + g_centro - 1, mas aqui está um ponto. Quevalorde índice virá aquiprimeiro? Máximo ou mínimo?

 
hoz:

Ou seja, não há valor variável a partir do qual se possa iniciar o cálculo. De acordo com a lógica da máquina, a partir de qual barra começará o cálculo? Se houver um decréscimo de i... é o máximo?


Não, pelo valor que a variável que eu tinha antes do ciclo. A entrada

   int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)

é idêntico a

   int cnt,i;
   for (cnt = 0, i = index + g_center - 1; i >= 0 && cnt < g_center; i--)
 
Em outras palavras, a primeira expressão no for loop pode ser escrita em seu lugar ou antes do loop, e o resultado é o mesmo.
 
hoz:

Novamente, i = índice + g_centro - 1, mas aqui está o ponto. Qual é oprimeiro valor deíndice que vem aqui? Máximo ou mínimo?


O índice será o valor passado para a função como um parâmetro.
Razão: