Ajude-me a aprender a programar. - página 4

 

Dmitry Fedoseev:
Recalcula todas as vezes, ou não recalcula

Você não entendeu nada. O mundo não chegou a um ponto de partida com PositionTotal(). Só estou ressaltando que é errado fazer isso.

Dmitry Fedoseev:
Mas em vez de trazer um experimento assassino

O que você não gosta em minha experiência? O compilador otimizou demais o resultado da primeira chamada?

Isto é exatamente o que otimiza: para (int i = 0; i < 1+2 ; i+++) {}

ou isto: const int X = 1;for (int i = 0; i < X+2; i++) {}

mas isto definitivamente não é: int X = 1; for (int i = 0; i < X+1; i++) {} porque eu não sou um telepata e não sei o que e onde pode acontecer com este X - ele pode ser modificado dentro do laço ou indiretamente, por exemplo, por um link/ponteiro? Ele fará a adição 'X+1' para cada iteração. Mesmo se você remover '+1', o programa continuará usando o valor atual de 'X', a menos que este 'X' seja declarado como uma constante.

E certamente não guarda o resultado retornado pela função, Karl! (antecipando seu "mas e se para (int index=f();)") - há apenas uma chamada aqui, na inicialização do índice).

Dmitry Fedoseev:
E o compilador - eu quis dizer que ele otimiza o código e chama a variável diretamente, não através de uma função

Sim, claro, o compilador conhece exatamente a situação do mercado e tem certeza de que uma chamada de função sempre retorna o mesmo valor, então por que chamar essa função mais de uma vez, você só tem que lembrar o resultado no OnInit() uma vez e OK!

E não importa que mesmo dentro da própria execução do ciclo, no seu caso com PositionsTotal(), algumas ordens podem já ter desaparecido - paradas, fechadas pelas mãos ou outra EA - e o resto não será processado, porque todas de repente! receberam menos?

Dmitry Fedoseev:
Isto é claramente visível com a função ArraySize(), você não pode dizer a diferença entre chamar a função e usar uma variável. Mas não é assim com PositionsTotsl(), infelizmente.

Como o tamanho de alguma matriz e o número de posições atualmente abertas se relacionam entre si? Você está acessando elementos de matriz por um índice, bem, por exemplo, matriz de acesso[999] com elementos de tamanho 3. Se esta matriz for realmente do tipo 'inteligente', uma classe lá, por exemplo, com operador '[]' onde a verificação de validade é feita, então tudo bem. Mas e se não for? De qualquer forma, este é um exemplo clássico de shithcode. Por que devemos gaseificar a poça, apenas admiti-la e não nos incomodarmos.

 
Tio Nisla:

Dmitry Fedoseev:
Recalcula todas as vezes, ou não recalcula

Você não entendeu nada. O mundo não chegou a um ponto de partida com PositionTotal(). Só estou ressaltando que é errado fazer isso.

Dmitry Fedoseev:
Mas em vez de trazer um experimento assassino

O que você não gosta em minha experiência? O compilador otimizou demais o resultado da primeira chamada?

Isto é exatamente o que otimiza: para (int i = 0; i = 1+2; i++) {}

ou isto: const int X = 1;for (int i = 0; i = X+2; i++) {}

mas isto definitivamente não é: int X = 1; for (int i = 0; i = X+1; i++) {} porque eu não sou um telepata e não sei o que e onde pode acontecer com este X - ele pode ser modificado dentro do laço ou indiretamente, por exemplo, por um link/ponteiro? Ele fará a adição 'X+1' para cada iteração. Mesmo se você remover '+1', o programa ainda usará o valor atual de 'X', a menos que este 'X' seja declarado como uma constante.

E certamente não guarda o resultado retornado pela função, Karl! (antecipando seu "mas e se para (int index=f();)") - há apenas uma chamada aqui, na inicialização do índice).

Dmitry Fedoseev:
E o compilador - eu quis dizer que ele otimiza o código e chama a variável diretamente, não através de uma função

Bem, sim, claro, o compilador conhece exatamente a situação do mercado e tem certeza de que uma chamada de função sempre retorna o mesmo valor, então por que chamar essa função mais de uma vez, você tem que armazenar o resultado no OnInit() uma vez, e tudo bem!

E não importa que mesmo dentro da própria execução do ciclo, no seu caso com PositionsTotal(), algumas ordens podem já ter desaparecido - paradas, fechadas pelas mãos ou outra EA - e o resto não será processado porque todas elas de repente! ficaram menos?

Dmitry Fedoseev:
Isto é claramente visível com a função ArraySize(), você não pode dizer a diferença entre chamar a função e usar uma variável. Mas não é assim com PositionsTotsl(), infelizmente.

Como o tamanho de alguma matriz e o número de posições atualmente abertas se relacionam entre si? Você está acessando elementos de matriz por um índice, bem, por exemplo, matriz de acesso[999] com um tamanho de 3 elementos. Se esta matriz for realmente do tipo 'inteligente', uma classe lá, por exemplo, com operador '[]' onde a verificação de validade é feita, então tudo bem. Mas e se não for? De qualquer forma, este é um exemplo clássico de shithcode. É melhor não tentar gaseificar a situação.

Se não houver fim à vista no PositionTotal(), você falhou o alvo de todo. Porque a função ArraySize() pode ser chamada em cada repetição de loop, e a velocidade não muda.

Não estou satisfeito com sua experiência por causa de sua ausência.

Todas suas outras fantasias não são interessantes porque são fantasias (e além disso, são selvagens e muito longe da realidade e até mesmo falsas).

Você deve estar no jardim de infância.

 
Dmitry Fedoseev:

Com o conhecimento de quê? Se é um algoritmo que não existe na natureza, mas você mesmo tem que inventá-lo, e ele define tudo.

Com o conhecimento de como escrever competentemente o código certo no idioma de interesse.

Eu não entendo, não existe tal algoritmo que possa fazer isso?

Como coletar informações sobre transações e utilizá-las? Preciso coletar informações sobre todas as posições da EA, seu volume, lucro, tipo, preço de abertura. E depois consulte as informações sobre a posição mais recente, ou a maior posição.

Na verdade, o autor criou o tema com esta pergunta.

E os ciclos e o desempenho das funções foram discutidos por outros. Mas eles também são aqueles que querem saber a melhor maneira ou o caminho certo.

 
Nikolay Mitrofanov:

Com o conhecimento de como escrever o código certo de forma competente no idioma de interesse.

Eu não entendo, não há algoritmo que possa fazer isso?

Assim, o autor criou o tema com esta pergunta em mente.

E sobre loops e desempenho de funções outras pessoas se interessaram por ele. Por assim dizer, mais sofisticados na realização de tais algoritmos) Mas eles também são aqueles que querem saber como fazê-lo melhor ou como fazê-lo corretamente.

E então você ainda está pensando em como calcular posições? Bem, então eu sinto muito.

Interessantes estes sofisticados, que ainda querem saber... e ainda não sabem. É tudo uma questão de calcular posições também?

Desculpe novamente, não estou enganado, pela frase "implementação de algoritmos" você quer dizer uma função de contagem de posição? Ou seja, se você escreve PositionsTots() em loop ou usa uma variável - você chama isso de algoritmo?
 
Dmitry Fedoseev:

E então você ainda está falando sobre como contar as posições? Bem, então sinto muito.

Interessantes estes sofisticados que ainda querem saber... e ainda não sabem. E isso também é tudo sobre a contagem de posições?

Então sobre o que você está discutindo se a pergunta está esgotada)? LOL.

Há uma tarefa para obter dados de posição.

Há uma função de idioma para obter o número de posições abertas, que é usada no loop.

Há uma questão de como utilizá-lo corretamente no loop: no primeiro parâmetro do for loop ou pelo segundo - onde a condição é verificada.

É estranho que você não entenda o que você quer))))

Você escreve que é caro porque o número não é constante. Mas por quê, você não pode explicar.

Você pode explicar por que é caro?

Pessoalmente, acho que os desenvolvedores se certificaram de que esta função não recalcularia as posições abertas a cada tick, e só o faria ao abrir e fechar uma posição.

Você acha que os desenvolvedores ainda não pensaram nisso?

Como você pode ter tanta certeza de que a função é cara e recalculada, e não tira apenas o valor da memória do terminal?

Até agora, ao invés de uma resposta substantiva, eu li tagarelice ociosa.

 
Nikolay Mitrofanov:

Então, sobre o que vocês estão discutindo se o assunto está encerrado)? LOL.

Esse é o humor da situação - durante as vinte e quatro horas da página quatro, um simpósio sobre como contar posições. Muito interessante.

 
Dmitry Fedoseev:

Se PositionTotal() não é a única coisa que importa, então você perdeu o ponto. Porque a função ArraySize() pode ser chamada em cada repetição de loop, e a velocidade não muda.

Não estou satisfeito com sua experiência por causa de sua ausência.

Todas as outras fantasias não são interessantes, porque são fantasias (e além do mais, são selvagens e muito longe da realidade, e até mesmo falsas).

ArraySize(), se um array não é dinâmico ou de tipo classe, já é uma constante ao declarar o array em si. Mas isso ainda não significa nada, porque ArraySize(array) e sizeof(arrayof) são duas grandes diferenças. O primeiro é chamado mas não se vê; o segundo é calculado na fase de compilação.

int arr[5];

PrintFormat("sizeof(array): %d, num_elem = %d\n", sizeof(arr), sizeof(arr) / sizeof(int));
PrintFormat("ArraySize(): %d\n", ArraySize(arr));
ArrayResize(arr, 7);
PrintFormat("ArraySize(): %d\n", ArraySize(arr));
PrintFormat("sizeof(array): %d, num_elem = %d\n", sizeof(arr), sizeof(arr) / sizeof(int));
ArrayResize(arr, 3);
PrintFormat("ArraySize(): %d\n", ArraySize(arr));
PrintFormat("sizeof(array): %d, num_elem = %d\n", sizeof(arr), sizeof(arr) / sizeof(int));

2021.05.03 22:01:37.253 show_the_shitz EURJPY,H4: initialized
2021.05.03 22:01:37.253 show_the_shitz EURJPY,H4: sizeof(array): 20, num_elem = 5
2021.05.03 22:01:37.253 show_the_shitz EURJPY,H4: ArraySize(): 3
2021.05.03 22:01:37.253 show_the_shitz EURJPY,H4: sizeof(array): 20, num_elem = 5
2021.05.03 22:01:37.253 show_the_shitz EURJPY,H4: ArraySize(): 7
2021.05.03 22:01:37.252 show_the_shitz EURJPY,H4: ArraySize(): 5
2021.05.03 22:01:37.252 show_the_shitz EURJPY,H4: sizeof(array): 20, num_elem = 5

Portanto, diga seu ponto de vista alternativo em outro lugar.

-----------------

Por que eu estou tentando me explicar? Uma pessoa não quer ver e pensar. Muito bem, deixe-o gerar o código cuja operação depende da fase lunar, tempo médio do meridiano de Marte e coceira do calcanhar traseiro. A única pena é que muitas pessoas, especialmente novatos, copiam *código novo* em seus projetos sem pensar duas vezes e depois se intrigam com o que está errado.

 
Tio Nisla:

ArraySize(), se o array não é dinâmico e não é do tipo classe, já é uma constante ao declarar o array em si. Mas isto também não significa nada, porque ArraySize(array) e sizeof(arrayof) são duas grandes diferenças. O primeiro é chamado mas não se vê; o segundo é calculado na fase de compilação.

Portanto, diga seu ponto de vista alternativo em outro lugar.

-----------------

Por que eu estou tentando me explicar? Uma pessoa não quer ver e pensar. Muito bem, deixe-o gerar o código cuja operação depende da fase lunar, tempo médio do meridiano de Marte e coceira do calcanhar traseiro. A única pena é que muitas pessoas, especialmente os novatos, nem sequer pensam duas vezes em copiar *código novo* em seus projetos e depois se intrigam com o que está errado.

Esse é um argumento de morte! Sem palavras... Por que você deve aplicar o ArraySize() a uma matriz não-dinâmica? Não consigo imaginar como se poderia pensar nisso. E o que o sizeof() tem a ver com isso? Está tudo bem aí?

E este não é o meu ponto de vista, mas um que há muito tempo tem sido verificado pelos participantes do fórum. Mas não vou procurar por este fio.

Mas posso lhes dizer que não tem nada a ver com o caching.

 
Nikolay Mitrofanov:

Para mim, acho bom que uma pessoa tente entender e cavar mais fundo...

Ao não prestar atenção às pequenas coisas, o codificador passa a ter o hábito de escrever código de forma errada. E então pentear o código significa trabalho duplo e muitas vezes não apenas para o autor, mas para aqueles que ainda têm sorte de trabalhar com o código.

Por que se preocupar em escrever o código quando você pode fazê-lo corretamente e escrevê-lo bem e entender os detalhes?)

Seu conselho é... bem... IMHO


Seu conselho é bom para um programador experiente (fortemente autoconfiante) que pode então pentear através dele, porque ele ou ela sabe onde e o que deve ser penteado.

Fedoseyev está certo. Não é necessário, e levará algum tempo para pentear o código como você gostaria. Mas você entende com o tempo que é melhor escrever algo novo. Assim, cada novo código será penteado a princípio.

 

Realidades interessantes do fórum. Quando alguém pergunta sobre algo, ninguém vai escrever uma linha de código. Mas assim que chegam, fazem fila e começam a bater - ah, ah, ah, que código errado. E o que é interessante, geralmente diz respeito ao código tão simples quanto três kopecks. Cada espaço está sob escrutínio. Quanto a algo mais complicado, existe o silêncio, surdo como um tanque.