Mt4 Fim do apoio. - página 35

 
Реter Konow:

Esta variante da função não tem nenhuma função New_bar();

Esta é a opção que mais economiza recursos que já proporcionei. Além disso, tem outra vantagem: o novo evento de barra é salvo todo o tempo em que o código do usuário é executado em um timer ou evento de tick.

Anteriormente, só se podia obter este evento uma vez e a bandeira era liberada com New_bar(). A função especial agora limpa a matriz "event_new_bar[][]" uma vez por minuto e é chamada somente após a execução do código personalizado.

Funções personalizadas podem acessar diretamente a matriz e recuperar novas informações de eventos de barra todo o tempo em que o código é executado em um timer ou evento de tick.

Isto economiza ainda mais recursos.

O último código também não funciona, demorou 7 minutos para que a impressão chegasse

//+------------------------------------------------------------------+
//Пример использования событий нового бара в пользовательском функционал.
//Просто обращаемся к глобальному массиву "События_нового_бара[a1][a2]" напрямую
//и используем событие в наших торговых алгоритмах.
//+------------------------------------------------------------------+
void Моя_стратегия_торговли_на_новых_барах()
{
  for(int a1 = 0; a1 < Всех_символов; a1++)
   {
    string Этот_символ    = Символы[a1];
    //----------------------------------
    for(int a2 = 0; a2 < Всех_таймфреймов; a2++)
      {
       bool   Новый_бар      = События_нового_бара[a1][a2];
       int    Этот_таймфрейм = Таймфреймы[a2];
       //----------------------------------
       if(Новый_бар && Этот_символ == "EURUSD" && Этот_таймфрейм == PERIOD_M5)
         {
          Print("M5");
         }
       //---------------------------------- 
       if(Новый_бар && Этот_символ == "EURUSD" && Этот_таймфрейм == PERIOD_M1)
         {
          Print("M1");
         }
       //----------------------------------        
      }
   }
}
 
Vitaly Muzichenko:

O último código também não funciona, demorou 7 minutos para que a impressão chegasse.

Esta função deve ser chamada da OnTick ou de um temporizador.

Pode haver um pequeno problema, mas ainda não fui capaz de localizá-lo. Dê uma olhada no código você mesmo e procure por um erro. É tão simples quanto um 3 kopecks. E com comentários também.

Se você não entender, pergunte. Eu tenho outras coisas a fazer.

 
Реter Konow:

Esta variante da função não tem nenhuma função New_bar();

Esta é a opção que mais economiza recursos que já proporcionei. Além disso, tem outra vantagem: o novo evento de barra é salvo todo o tempo em que o código do usuário é executado em um timer ou evento de tick.

Anteriormente, só se podia obter este evento uma vez e a bandeira era liberada com New_bar(). A função especial agora limpa a matriz "event_new_bar[][]" uma vez por minuto e é chamada somente após a execução do código personalizado.

Funções personalizadas podem acessar diretamente a matriz e recuperar novas informações de eventos de barra todo o tempo em que o código é executado em um timer ou evento de tick.

Os recursos são economizados ainda mais.


Eu não entendo o humor. Por que - o depurador não entende russo? Ou sou só eu que tenho uma falha dessas? Vê variáveis em latim, mas não em cirílico.

Peter, então como você usa o depurador, ou não o usa?

 

Qualquer pessoa interessada pode procurar por um bug no código.

A essência do código:

1. declarar arrays globais:

  • matriz unidimensional para os nomes dos símbolos "Symbols[]".
  • matriz unidimensional para os períodos de tempo "Timeframes[]".
  • Uma matriz bidimensional onde escrevemos o número atual de barras "Number_bars[][]".
  • matriz bidimensional "New Bar Events[][]" onde escreveremos as bandeiras do novo evento do bar de cada símbolo e de cada período de tempo. Aqueles que estão em arrays "Symbols[]" e "Timeframes[]". Esta matriz será preenchida no laço por símbolos e cronogramas no evento do temporizador, uma vez por minuto. Depois disso, será liberado. No intervalo entre o enchimento e a limpeza desta matriz será chamada pela funcionalidade do usuário e informada sobre as novas barras.

2. Na inicialização, defina o tamanho do conjunto de símbolos e escreva lá os nomes dos símbolos da revisão do mercado.

3. Definir o tamanho da primeira dimensão da matriz "Number_bars[][]" que é igual ao número de símbolos, e a segunda dimensão é igual ao número de cronogramas. Este conjunto é como uma mesa. Ele registrará o número atual de barras de cada símbolo e cada período de tempo. O número é devolvido pela função iBars.

4. Definir o tamanho da primeira dimensão da matriz "Events_new_bar[][]", que é igual ao número de símbolos, e a segunda dimensão é igual ao número de cronogramas. Este conjunto é como uma mesa. Ele registrará as bandeiras de eventos de novas barras de cada símbolo em cada período de tempo.

5. Dentro do temporizador, contamos o minuto e fazemos um loop duplo (aninhado) nos símbolos (que estão na matriz Symbols[]) e nos prazos (que estão na matriz Timeframes[]). Chamamos a função iBars e obtemos o número atual de barras de cada símbolo e cada intervalo de tempo dos Símbolos e Matrizes de Intervalo de Tempo. Primeiro, comparamos o número atual de barras com o número já armazenado na matriz. Se estes valores não forem iguais, colocamos a bandeira do novo evento da barra na matriz "Event_new_bar[][]". Escrevemos então o número atual de bares no lugar do anterior.


A matriz global "events_new_bar[][]" está disponível em qualquer ponto do programa e é automaticamente preenchida a cada minuto, e também automaticamente limpa. Durante o período em que a matriz está sendo preenchida, a funcionalidade do usuário recebe novos dados sobre novas barras. A matriz é então limpa automaticamente.


É isso aí.

 
Реter Konow:

Esta função deve ser chamada da OnTick ou de um temporizador.

Pode haver algum pequeno problema, mas ainda não fui capaz de localizá-lo. Dê uma olhada no código você mesmo e procure por um erro. É tão simples quanto um 3 kopecks. E ainda por cima, com comentários.

Se você não entender, basta perguntar. Eu tenho outras coisas a fazer.


resposta profissional

 
Nikolai Semko:

Eu não entendo o humor. O que - o depurador não entende russo? Ou sou só eu que tenho uma falha dessas? Ele vê variáveis em latim, mas não em cirílico.

Peter, então como você usa o depurador, ou você não o usa?

Nikolai, para minha vergonha, não tenho a menor idéia de como usar o depurador. Eu nunca o usei. ((
 
Galina Bobro:

resposta profissional

E isto é o corrico profissional.
 
Реter Konow:

Esta função deve ser chamada da OnTick ou de um temporizador.

Pode haver algum pequeno problema, mas ainda não fui capaz de localizá-lo. Dê uma olhada no código você mesmo e procure por um erro. É tão simples quanto um 3 kopecks. E com comentários também.

Se você não entender, basta perguntar. Eu tenho outras coisas a fazer.

É tão complexo e retorcido que não dá para perceber.

Sinto muito, mas também é completamente ilegível.

 
Vitaly Muzichenko:

É tão complicado e retorcido que é uma bagunça.

Sinto muito, mas também é completamente ilegível.

Você sabe o que dizem sobre "você não pode... não torturar..."? Acho que é uma boa.

 
Реter Konow:

Você conhece o ditado sobre "você não pode... não torturar..."? Acho que é uma boa.

É isso mesmo, foi assim que você conseguiu realizar a tarefa de forma conclusiva, bem, ou eu não consegui acertar sua solução.