Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1415

 
ANDREY:

Adicionei colchetes vazios PrintArray(double &eArray[]) O compilador não apresentou nenhum erro ou aviso.
MAS..... a função Print() não imprimiu uma única vez por alguma razão.

Compreendo sua preguiça, porque eu mesmo sou assim. Se você não for muito preguiçoso e meu entusiasmo o substituir, ficarei grato se você me disser o que mais está errado com a função personalizada.

Obrigado pela ajuda e desculpe pelo incômodo.

Talvez a matriz esteja vazia? Verifique alterando um pouco a função

void PrintArray(double &eArray)
   {
   int eSize=ArraySize(eArray);
   string eStr="Размер массива "+eSize+" : ";
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }
Se imprimir 0, procure por um problema no preenchimento da matriz.
 
Alexey Viktorov:

void PrintArray(double &eArray)
   {
   int eSize=ArraySize(eArray);
   string eStr="Размер массива "+eSize+" : ";
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }

Eu encontrei um erro. Na últimaimpressão(str); linha,você passou str em vez destr. Eu o consertei e tudo estava bem.

Graças a você, agora entendi este assunto não apenas em linhas gerais, mas em detalhes. A única pergunta sem resposta foi sobre os pontos positivos do meu post

Obrigado por sua ajuda e apoio.

 
Maxim Kuznetsov:

no fórum e em publicações sobre C#, Delphi e tudo mais...

Eu nunca fiz isso, pode algum link para "manequins"?
 
ANDREY:

Eu encontrei um erro. Na últimaimpressão(str); linha, você passou str em vez destr. Eu o consertei e tudo estava bem.

Graças a você, agora entendi este assunto não apenas em linhas gerais, mas em detalhes. A única pergunta sem resposta foi sobre os pontos positivos do meu post

Obrigado por sua ajuda e apoio.

Não fui eu quem o transmitiu,

Fórum sobre comércio, sistemas comerciais automatizados e estratégias comerciais de teste

Qualquer pergunta de novatos sobre MQL4 e MQL5, ajuda e discussão de algoritmos e códigos

Aleksei Stepanenko, 2021.03.13 09:04

Print("-LoY[0]-", DoubleToString(LoY[0],4), "---LoY[1]--", DoubleToString(LoY[1],4), "---LoY[2]--" , DoubleToString(LoY[2],4), "---LoY[3]--" , DoubleToString(LoY[3],4),................  "---LoY[30]--" ,  DoubleToString(LoY[30],4) );

Você pode querer imprimir uma matriz ou fazer uma função separada para imprimir uma matriz:

void PrintArray(double &eArray)
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }

E chame-a de qualquer lugar

PrintArray(LoY);

Eu simplesmente não prestei atenção a isso. Só não entendo como a compilação correu sem erros.

Qual é a resposta se você já descobriu e escreveu toda a seqüência

ANDREY:

Acho que finalmente descobri (sou um pouco lerdo) ......

Na primeira iteração, a string variável String está vazia. Os caracteres =+ dizem ao str para se atribuir a si mesmo vazio (sem valores) e a si mesmo vazio adiciona um string com valores, a saber"--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+",";;";. O valor desta cadeia é " --LoY[0]--, --1,6104-- ". Após estas operações , str recebe o valor "--LoY[0]--, --1,6104--" na primeira iteração. Como eu entendi em sua terminologia, este é chamado de primeiro elemento.

Na segunda faixa de iteração já tem o primeiro elemento com o valor " --LoY[0]--, --1. 6104-- " Os caracteres =+ instruem o strt a se atribuir com o valor do primeiro elemento e a se com o valor do primeiro elemento, acrescente uma cadeia com outros valores, a saber "--LoY["+"+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+",";;"; "+DoubleToString(LoY[r],4)+". O valor desta cadeia já é " --LoY[1]--, --1,6105--". Após estas operações, str recebe o valor"--LoY[0]-- --1,6104-- --LoY[1]-- --1,6105--" na segunda iteração.Ou seja, str tem o segundo elemento e na trigésima iteração str vai conter 30 elementos com valores diferentes dos elementos da matriz.

Quando o laço terminar, a string variável String com 30 itens será impressa uma vez fora do laço.
Demorei muito tempo para descobrir este algoritmo porque quando você estava falando sobre adição eu prestei atenção apenas ao sinal vermelho mais "--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+", e não ao str+=

Portanto, ainda é um mistério para mim qual o papel que aqueles vales vermelhos "--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+" desempenham neste algoritmo

Obrigado por sua ajuda.

E que mistério permanece, se tudo estiver corretamente programado...
 
MakarFX:
Eu nunca fiz isso, pode algum link para "manequins"?

Se você não escreveu em C#, Delphi e similares antes, isso não vai ajudar... As janelas são criadas como em qualquer outro lugar, mas primeiro você tem que aprender a fazer isso "em qualquer lugar".

Primeiro um pequeno curso em C#, WinForms (por exemplo). Deve haver um monte deles na internet. Isto vai um pouco além do escopo do fórum.

 

Alexey Viktorov .

Alexey Viktorov:


E que mistério permanece, se tudo estiver escrito corretamente...

Eu não entendi este algoritmo por muito tempo, porque quando você estava falando sobre adição eu estava prestando atenção apenas às vantagens vermelhas "--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+", mas não ao str+=

É por isso que eu ainda me pergunto qual o papel que estas vantagens vermelhas"--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+" desempenham neste algoritmo

Segue sem ambiguidade a forma como descrevi meu entendimento de que a conexão de cordas em cada iteração ocorre em um lugar e uma vez junto com a operação de atribuição str+=

Ou seja, usando o símbolo +, o valor de um elemento da variável string strts conecta (mais) com o valor de outro elemento da mesma variável string str
E eu ainda não entendo o que estes + vermelho significam str +="--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+",";";"; "+DoubleToString(LoY[r],4)+". Não há nenhuma operação de soma realizada sobre os valores que estão entre estas valias vermelhas ....., como me parece. Se eu estiver certo, qual é a função que essas vantagens vermelhas desempenham? E se eu estiver errado, devo ter falhado em entender alguma coisa.

A propósito, em seu posto, na linha amarela, há apenas um desses vermelhos mais antes de +DoubleToString(LoY[r],4). Mas eu não vejo isso depois.

Obrigado por sua ajuda.

 
Alexey Viktorov:

Só que não está claro como a compilação passou sem erros, não está claro...


E eu mesmo inicializei o str dentro do corpo da função do usuário quando vi que o compilador apontava que o str estava indefinido. Mas esqueci de lhe falar sobre isso.
Em seguida, excluí str da função do usuário em todos os lugares e coloquei o eStr entre parênteses em vez de str na última linha da função do usuário.

 
Maxim Kuznetsov:

Se você ainda não escreveu em C#, Delphi e similares, isso não vai ajudar... As janelas são criadas como em qualquer outro lugar, mas primeiro você precisa aprender a fazer isso "em qualquer lugar".

Primeiro um pequeno curso em C#, WinForms (por exemplo). Deve haver um monte deles na internet. Isto vai um pouco além do escopo do fórum.

Bem, o formulário pode ser criado.


Estou mais interessado em como a troca de dados entre minha janela e o Expert Advisor deve ser feita.

 
void PrintArray(double &eArray[])
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=string(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(eStr);
   }
 

Aleksei Stepanenko:

void PrintArray(double &eArray[])
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=string(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(eStr);
   }


Obrigado pelo esclarecimento.

A propósito, eu removi as vantagens amarelas e o compilador deu um erro. Portanto, eles desempenham algum papel em toda esta construção. Mas o que.... eu ainda não entendo. O que para eles é necessário quando a adição de cordas é feita somente através do uso de pluses azuis. A julgar por suas explicações, não há mais nada nesta construção ..... se não estou enganado.

E sobre cordel(i)... Sobre a conversão do tipo .... é mais ou menos claro para mim. O que não está claro é que..... string é o nome de um tipo de variável. i é uma contra-variável que denota o índice de um elemento de array. E por queeu estou entre parênteses () ? Tenho pensado até agora que os parênteses são uma característica da função. Por exemplo, Print( ). E dados diferentes são colocados dentro de parênteses em algumas funções. Mas o que significam parênteses ou que função os parênteses desempenham em relação a i e toda esta construção - string(i)? À primeira vista, parece que antes a variável i tinha um tipo int (inteiro), e depois você mudou o tipo da variável i de int para string (string) . Mas os parênteses redondos que contêm o meu nome não me deixam pensar assim.

Obrigado pela explicação.