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

 
Maxim Kuznetsov:

Mas não separe os dados ao acaso, sem um objetivo global.

Do projeto atual: tomamos uma (breve) matriz, a saída é um índice de elementos na ordem correta:

void BubleSortIndex5(double &data[5],int &index[5])
{
   for(int i=0;i<5;i++)
      index[i]=i;
   for(int i=0;i<4;i++) {
      for(int j=1;j<5;j++) {
         if (data[index[i]]>data[index[j]]) {
            int tmp=index[i];
            index[i]=index[j];
            index[j]=tmp;
         }
      }
   }
}


para matrizes maiores, precisamos mudar o algoritmo de classificação (borbulhar não funciona para matrizes maiores) - mudá-lo.

A mensagem principal é: não toque nos dados da fonte. Operar ou com referências ou, melhor ainda, com índices de matriz. Caso contrário, as informações serão perdidas, o que será muito necessário mais tarde.

Muito obrigado .

".....Operar com links ou, melhor ainda, com índices de matriz. Caso contrário, perde-se informação, que será necessária mais tarde....".

Esta é a primeira vez que ouço falar de operações de referência. Eu ficaria grato se você pudesse me dizer onde eu poderia ler sobre isso, a fim de entender a diferença entre operar com referências e operar com dados de origem que eu não lembro de tal tópico no livro de Kovalev.

 

Colegas, por favor, avisem por que o som pára de tocar quando o volume desejado da vela.

O arquivo de som está na pasta SOUNDS, quando eu defino o alerta o arquivo está tocando normalmente, mas não há som no indicador.

Ou, você precisa de uma pasta especial com sons para indicadores?


/

O laço princip al do cálculo do indicador for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
Range=(high[bar]-low[bar])/_Point;
IndBuffer[bar]=Range;

if(Range<5)
{
if (prev_calculado > 0 && Flag==0)
{
Flag=1;
}
}
if(Range>=Threshold){
clr=0;
if (prev_calculated > 0 && Flag===1 )
{
Bandeira=0;

PlaySound("zummer");


}
}

Arquivos anexados:
 
ANDREY:

Muito obrigado por sua resposta rápida. No meu caso, cada valor de um elemento de matriz é único e existe em uma única instância. Ou seja, o valor 5, como outros valores, não é repetido.

No meu caso, o valor 5 pode não existir em uma matriz não classificada. Isso significa que algumas células em array não selecionado podem estar vazias.
Mas se o valor 5 não estiver em array não selecionado, então não posso especificar o valor 5 como segundo parâmetro na função ArrayBsearch(). Somente valores que necessariamente existem em array não selecionado entram nesta função.
Obrigado por sua ajuda.

Por que você precisado ArrayBsearch() se você não pretende classificar arrays? Para encontrar um número, tudo o que você precisa é uma simples comparação alternativa do número que você está procurando com os números nas células da matriz. Se o número que você está procurando não estiver lá, basta devolver um número falso.

//+------------------------------------------------------------------+
//|                                                  FindInArray.mq4 |
//|                                       Copyright 2020, © Cyberdev |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev"
#property version   "1.00"
#property strict

#property script_show_inputs

#define  size1 2 
#define  size2 10

input double value = 5;
input int index = 0;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int vIndex = -1;

bool searshValue(double & array2D[2][], const int _len, const int _index, const double _value) {
  int i;
  for(i = 0; i < _len; i++) {
    if(NormalizeDouble(array2D[_index][i], _Digits) == NormalizeDouble(_value, _Digits)) {
      vIndex = i;
      return true;
    }
  }
  return false;
}

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {
  double array[size1][size2] = {
    {10,9,8,7,6,5,4,3,2,1}, 
    {10,3,8,9,2,1,1,8,8,6}
  };
  
  if(searshValue(array, size2, index, value)) 
    Print("value1 array["+(string)index+"]["+(string)vIndex+"]: ", array[index][vIndex]);
  else
    Print("Value: "+(string)value+" not found!");
}
//+------------------------------------------------------------------+
 
Mihail Matkovskij:

Então por que você precisado ArrayBsearch() se você não quer classificar arrays de forma alguma? Para encontrar um número, basta comparar o número que você está procurando com os números nas células da matriz, um por um. Se o número que você está procurando não estiver lá, basta devolver um número falso.

Muito obrigado. Graças a você eu aprendi informações úteis e melhorei meu conhecimento da MQL4

 
ANDREY:

Muito obrigado. Graças a vocês, aprendi informações valiosas e ampliei meus horizontes e conhecimentos sobre a MQL4.

Ainda bem que pude ajudar.

 
Mihail Matkovskij:

Então por que você precisado ArrayBsearch() se você não quer classificar arrays de forma alguma? Para encontrar um número, tudo o que você precisa é uma simples comparação alternativa do número que você está procurando com os números nas células da matriz. Se o número que você está procurando não estiver lá, basta devolver um número falso.

Entendo corretamente que a função

searshValue ()

Não da MQL4 ou mesmo da MQL5 ?

 
Mihail Matkovskij:

Fico feliz em poder ajudar.

Eu gostaria que houvesse mais pessoas como você...... que ficassem felizes em ajudar

 
ANDREY:

Entendo corretamente que a função

Não da MQL4 ou mesmo da MQL5 ?

Veja atentamente o exemplohttps://www.mql5.com/ru/forum/160683/page1208#comment_17279150 . Você não encontrou nada lá?

Esta função:

bool searshValue(double & array2D[2][], const int _len, const int _index, const double _value) {
  int i;
  for(i = 0; i < _len; i++) {
    if(NormalizeDouble(array2D[_index][i], _Digits) == NormalizeDouble(_value, _Digits)) {
      vIndex = i;
      return true;
    }
  }
  return false;
}
Você deveria ser um pouco mais cuidadoso!
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2020.07.09
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 

Olá, eu preciso de ajuda, tenho uma conta aberta nesta plataforma através de uma corretora que não quer sacar meus fundos, o que devo fazer?

 
Ботагоз Битабарова:

Olá! Preciso de ajuda, nesta plataforma abriu uma conta para mim, através de uma corretora que não quer sacar meus fundos, o que fazer?

Este recurso não tem nada a ver com empresas de corretagem.

Razão: