Mt4 Fim do apoio. - página 44

 
Реter Konow:

Agora me diga - eu já completei a tarefa?

Você (Peter e seus oponentes) estão vindo do lado errado! A tarefa pode ser feita nos dois sentidos!

Um montador virá e dirá que pode fazê-lo ainda mais eficazmente, e com ainda menos consumo de recursos informáticos!

Mas qual é o sentido disso?

Na minha opinião, deveríamos pensar em eficiência somente quando nos falta velocidade ou memória. Quando se tem o suficiente, é mais importante que seja fácil manter e modificar o sistema. Mesmo que isso prejudique um pouco a velocidade do programa e a memória utilizada.

Os nomes russos não me incomodam, a única coisa que me incomoda - estou acostumado a prefixos, para que você possa entender imediatamente o tipo de variável por sua aparência. E o identificador russo ou inglês - a diferença não é grande (1C - há muito russo).

Mas acima de tudo estou surpreso com a recusa voluntária de um depurador. É apenas masoquismo... Posso entender quando não há depurador (em algum momento não houve depuração nos dados históricos) - você tem que torcer, emitir mensagens de depuração, logs... Mas se você tiver um depurador - é muito mais conveniente e eficiente trabalhar com ele!

 
George Merts:

Você (Peter e seus oponentes) estão vindo do lado errado! A tarefa pode ser feita nos dois sentidos!

Um montador virá e dirá que pode fazê-lo ainda mais eficazmente, e com ainda menos consumo de recursos informáticos!

Mas qual é o sentido disso?

Na minha opinião, deveríamos pensar em eficiência somente quando nos falta velocidade ou memória. Quando se tem o suficiente, é mais importante que seja fácil manter e modificar o sistema. Mesmo que isso prejudique um pouco a velocidade do programa e a memória utilizada.

Os nomes russos não me incomodam, a única coisa que me incomoda - estou acostumado a prefixos, para que você possa entender imediatamente o tipo de variável por sua aparência. E o identificador russo ou inglês - a diferença não é grande (1C - há muito russo).

Mas acima de tudo estou surpreso com a recusa voluntária de um depurador. É apenas masoquismo... Posso entender quando não há depurador (em algum momento não houve depuração nos dados históricos) - você tem que torcer, emitir mensagens de depuração, logs... Mas se você tiver um depurador - é muito mais conveniente e eficiente trabalhar com ele!

George, eu não tinha idéia de como usar um depurador. Nem sequer sabia ou se perguntava para que era. Portanto, não há masoquismo aqui. E agora é tarde demais.
 

Peter, você substituiu a tarefa. Sua solução às vezes é necessária, mas muito raramente, e não puramente nesta forma, mas semelhante.

Mais frequentemente uma tarefa diferente - o aparecimento de novos bares deve ser rastreado em diferentes lugares do programa. Portanto, passar um símbolo e um período de tempo em funções e procurá-las em matrizes não é uma boa solução em absoluto. Como a função isNewBar tem uma variável estática, temos que fazer uma cópia da função para cada símbolo de período de tempo. É possível passar uma variável pelo último período de tempo para a função por referência.

Mas existe uma variante ideal com OOP - ele cria seu próprio objeto para cada símbolo - cronograma.

Isto é, se não considerarmos que a função isNewBar não é de modo algum necessária, apenas para estereotipar do nada a fazer.

 
Dmitry Fedoseev:

Peter, você substituiu a tarefa. Sua solução às vezes é necessária, mas muito raramente, e não puramente nesta forma, mas semelhante.

Mais frequentemente uma tarefa diferente - o aparecimento de novos bares deve ser rastreado em diferentes lugares do programa. Portanto, passar um símbolo e um período de tempo em funções e procurá-las em matrizes não é uma boa solução em absoluto. Como a função isNewBar tem uma variável estática, temos que fazer uma cópia da função para cada símbolo de período de tempo. É possível passar uma variável pelo último período de tempo para a função por referência.

Mas existe uma variante ideal com OOP - ele cria seu próprio objeto para cada símbolo - cronograma.

Isto é, se não considerarmos que a função isNewBar não é necessária, apenas para esfregá-la, do nada para fazer.

Eu não mudei nada. Eu acabei de resolver esta tarefa de uma maneira diferente. Seguindo sua lógica, eu devo ter chegado inevitavelmente à necessidade do OOP. Entretanto, não importa como você olhe para ela, você pode usar minha solução com segurança. Qualquer função, a qualquer momento e de qualquer lugar do programa acessa a matriz global para um novo evento de bar em qualquer símbolo e em qualquer período de tempo.

Não importa quantos símbolos e quantos prazos existam - na minha solução, o número deles não aumenta a carga no sistema. Basta olhar para a matriz - se há ou não um novo evento de bar.

Você pode reduzir a lista de símbolos se não retirá-los do relatório de mercado, mas digitá-los manualmente na matriz Symbols[]. Por favor.


Adicionado:

A propósito, favor notar - a função New_bar() não está mais presente. Realmente se revelou desnecessário. Você estava certo.

 
Реter Konow:

A minha tarefa era: fazer com que eu pudesse obter novos eventos de barra de um conjunto de símbolos, em um conjunto de prazos, sem OOP, e que fosse um código curto e eficiente.

Agora me diga - eu já completei a tarefa?

Absolutamente SIM. Mas!!!! Acontece que minha sugestão foi um pouco distorcida e, como resultado, você a entendeu como a entendeu. Em forex, você só está interessado nos dados que precisa aqui e agora. Preciso das informações para um símbolo e para o período atual, só isso - os outros não me interessam. Precisamos das informações para outro símbolo e um certo período, então o mesmo código deve obtê-las. E não há necessidade de sobrecarregar o sistema com o recebimento de informações, o que não é necessário agora.

Não é culpa sua, apenas aconteceu. Eu tentei detê-lo, mas não consegui.

 
Dmitry Fedoseev:

Peter, você substituiu a tarefa.

Ele não o trocou para cima. Foi a forma como a sentença foi parafraseada que ele a entendeu dessa forma.

 
Alexey Viktorov:

Absolutamente SIM. Mas!!!! Acontece que minha sugestão foi um pouco distorcida e, como resultado, você entendeu como entendeu. Em forex, você só está interessado nos dados que precisa aqui e agora. Preciso das informações para um símbolo e para o período atual, só isso - os outros não me interessam. Precisamos das informações para outro símbolo e um certo período, então o mesmo código deve obtê-las. E não há necessidade de sobrecarregar o sistema com o recebimento de informações, o que não é necessário agora.

A culpa não é sua, apenas aconteceu dessa maneira. Eu tentei detê-lo, mas não consegui.

Não há problema algum - basta escrever descrições dos símbolos necessários na matriz Symbols[].

Remover registro do OnInit():

   for(int a1 = 0; a1 < All_symbols; a1++)
     {
      Symbols[a1] = SymbolName(a1 + 1,true); 
      //Возможно, нумерация символов в обзора рынка идет с нуля.
      //Тогда: Symbols[a1] = SymbolName(a1,true);
     }

E inicializar a matriz em âmbito global:

Symbols[3] = {"EURUSD","AUDUSD","GBPUSD"};

E remover prazos desnecessários da matriz Timeframes[];

int    Timeframes[3] = {PERIOD_M1,PERIOD_M5,PERIOD_M15};

Mude a variável.

int    All_Timeframes = 3;

E mudar a variável All_Symbols:

int    All_symbols = 3;

Desta forma, você receberá eventos somente para os símbolos certos e os prazos certos.

Adicionado:

Remova também a configuração do tamanho da matriz do OnInit(), já que você sabe o número de símbolos:

   //-------------------------------------------------------------   
   All_symbols = SymbolsTotal(true);
   //---------------------------------------------------------   
   ArrayResize(Symbols,All_symbols);
   //---------------------------------------------------------
   ArrayResize(All_bars_table,All_symbols);
   //---------------------------------------------------------
 
Реter Konow:

Eu não substituí nada. Eu acabei de resolver este problema de maneira diferente. Seguindo sua lógica, eu inevitavelmente tinha que chegar à necessidade de OOP. Entretanto, não importa como você olhe para ela, você pode usar minha solução com segurança. Qualquer função, a qualquer momento e de qualquer lugar do programa acessa a matriz global para um novo evento de bar em qualquer símbolo e em qualquer período de tempo.

Não importa quantos símbolos e quantos prazos existam - na minha solução, o número deles não aumenta a carga no sistema. Basta olhar para a matriz - se há ou não um novo evento de bar.

Você pode reduzir a lista de símbolos se não retirá-los do relatório de mercado, mas digitá-los manualmente na matriz Symbols[]. Por favor.


Adicionado:

A propósito, repare - a função New_bar() desapareceu. Realmente se revelou desnecessário. Você estava certo.


Se for o caso, conforme destacado em negrito - no caixote do lixo.

 
Dmitry Fedoseev:

Se como destacado em negrito, vai para o lixo.

Por quê?
 
Реter Konow:

Não há problema, basta escrever na matriz Symbols[] os nomes dos símbolos que você quer e pronto.

Remover entrada do OnInit():

E inicializar a matriz em âmbito global:

E remover prazos desnecessários da matriz Timeframes[];

Alterar a variável

E mudar a variável All_Symbols:

Desta forma, você receberá eventos somente para os símbolos necessários e os prazos necessários.


Peter, pare com isso. Eu não preciso de nenhuma outra função para definir uma nova barra além da minha própria. Bem, acontece que todo o seu trabalho árduo se tornou desnecessário, desculpe.