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

 
Aleksei Stepanenko:

ou fazer uma função de impressão de matriz separada:

E chame-a de qualquer lugar

Alexey, estou em silêncio há muito tempo, mas não consigo ver isso silenciosamente... Por que usar IntegerToString() quando uma conversão do tipo explícito neste caso é muito mais fácil e menos cara...

eStr+=(string)i+": "+DoubleToString(eArray[i],4)+", ";
 

dunno, hábito :)

 
Aleksei Stepanenko:

ou fazer uma função de impressão de matriz separada:

E chame-a de qualquer lugar

Muito obrigado por sua compreensão e esclarecimento. Estou fazendo uma pausa para estudar e entender as informações que são novas para mim.

 
Alexey Viktorov:

Alexey, estou em silêncio há muito tempo, mas não consigo vê-lo em silêncio... Por que usar IntegerToString() quando uma conversão do tipo explícito neste caso é muito mais fácil e menos cara...

E obrigado também por seus valiosos acréscimos.

 
Você pode me dizer onde olhar e ler sobre a criação de uma janela externa para uma EA?
 
MakarFX:
Você pode me dizer onde procurar e ler sobre como criar uma janela externa para a EA?

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

tcl.Eval("toplevel .myWin ; wm title .myWin {Окношко}" ); // простите, не удержался
 
Aleksei Stepanenko:

ou fazer uma função de impressão de matriz separada:

E chame-a de qualquer lugar

Eu decidi fazer uma função de impressão de matriz personalizada separada. Ou melhor, não faça um, use o ( PrintArray() ) O que você já fez.

O que eu fiz?

Eu coloquei a chamada para a função PrintArray() do usuário dentro da função OnTick()... como descrito no tutorial de Kovalev.

2. coloquei o corpo da função PrintArray() fora da função OnTick()... ... como descrito no tutorial de Kovalev.

Todas as novas variáveis do corpo desta função são locais. Eles são declarados e inicializados dentro desta função.

int P1=0;
double LoY[31];
void OnTick()
{
if (P1==0)
{
for(int r=0; r<31;r++)
{
LoY[r]=1.6104+(r*2)*0.0001;
P1=1;
}
}
//*************************************************************  Б Л О К    N 2
for(int x=0; x<31;x++)
{
if (Bid < LoY[x] )
{
LoY[x]=Bid;
}
}
ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND);
PrintArray(LoY);
}
//****************************

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);
   }

Eu não fiz nenhuma mudança em sua função. Mas o compilador dá 6 erros por alguma razão. E todos eles estão relacionados à função do usuário.

Ficar-lhe-ia muito grato se pudesse me dizer o que eu fiz de errado.
Obrigado.

 
ANDREY:

Eu decidi fazer uma função de impressão de matriz personalizada separada. Ou melhor, não fazer um, usar o um ( PrintArray() ) O que você já fez.

O que eu fiz?

Eu coloquei a chamada para a função PrintArray() do usuário dentro da função OnTick()... como descrito no tutorial de Kovalev.

2. coloquei o corpo da função PrintArray() fora da função OnTick()... ... como descrito no tutorial de Kovalev.

Todas as novas variáveis do corpo desta função são locais. Eles são declarados e inicializados dentro desta função.

Eu não fiz nenhuma mudança em sua função. Mas o compilador produz 6 erros por alguma razão. E todos eles se relacionam com uma função do usuário.

Serei muito grato a você se me disser o que fiz de errado.
Obrigado.

Não me lembro exatamente e sou preguiçoso demais para verificá-lo. Tente adicionar colchetes

void PrintArray(double &eArray[])
 

Aleksei Stepanenko:

string str="";

for(int r=0; r<31;r++)
   {
   LoY[r]=1.6104+r*0.0001;
   str+="--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+", ";
   }
Print(str);


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

Na primeira iteração, a string variável String está vazia. Os caracteres =+ instruem a String a se atribuir vazia (sem valores) e a se atribuir vazia adiciona uma 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 iteração, str 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.

 
Alexey Viktorov:

Não me lembro exatamente, e sou preguiçoso demais para verificar. Tente adicionar colchetes

Adicionei colchetes vazios PrintArray(double &eArray[]) O compilador não mostrou 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 por sua ajuda e desculpe pelo inconveniente.

Razão: