[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 367

 
LOA:


Três máximos para o período, não o mais recente. Ou melhor, não necessariamente o último.

Veja: você tem uma matriz com valores. Você precisa encontrar três máximos nesta série. Eles não têm que ser os últimos ou os primeiros da série temporal. Você só precisa encontrar os três máximos.

1. Vamos copiar sua matriz em uma temporária (vamos procurá-las na matriz temporária):

int ArrayCopy( objeto &dest [], objeto fonte[], int start_dest=0, int start_source=0, int count=WHOLE_ARRAY)

Copia uma matriz em outra. As matrizes devem ser do mesmo tipo. As matrizes do tipo double[], int[], datetime[], color[], e bool[], podem ser copiadas como matrizes do mesmo tipo.
Retorna o número de elementos copiados.
Parâmetros:
dest[] - Array-receiver.
fonte[] - Matriz da fonte.
start_dest - Iniciar índice para a matriz de destino. Por padrão, o índice inicial é 0.
start_source - Iniciar índice para matriz de fontes. O índice inicial padrão é 0.
contar - Número de elementos a copiar. Por padrão, toda a matriz(WHOLE_ARRAY).


2. Procure o valor máximo na matriz temporária:

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)

Procure o elemento com o valor máximo. A função retorna a posição do elemento máximo na matriz.
Parâmetros:
matriz[] - Matriz numérica para pesquisar.
contar - Número de elementos a serem pesquisados.
início - Iniciar - Iniciar índice para pesquisa.


3. Salvar índice encontrado na matriz (por exemplo, MassIndexMaxValue[])

4. zero o valor do máximo encontrado na matriz temporal - basta escrever zero lá

5. Procurar novamente o próximo valor máximo na matriz temporária (o índice do primeiro que encontramos já está armazenado em MassIndexMaxValue[] e o valor deste máximo é zerado)

Este laço continua até encontrarmos o número necessário de valores máximos na matriz temporária.

MassIndexMaxValue[] conterá agora índices do número necessário de valores máximos em sua matriz.
Vamos redefinir o tamanho da matriz temporária para zero - não há motivo para entupir a memória

É assim que as coisas são...

ZS... Acabei de fazer um esboço rápido no local... Posso ter cometido um erro - eu estava acordado quando estava escrevendo e não chequei nada, mas a função tem algo parecido com este conteúdo:

void FindMaxValue(double &ms[], int &ind[], int NumMaxValue) {   
   int i, IndMax;
   double tmp[];                       // создаём временный массив
   ArrayResize(ind,NumMaxValue);       // изменяем размер массива индексов максимальных значений под количество макс. значений
   ArrayResize(tmp,ArraySize(ms));     // размер временного массива = размеру вашего массива значений
   ArrayCopy(tmp, ms);                 // копируем ваш массив во временный
   for (i=0; i<NumMaxValue; i++) {     // цикл по количеству искомых максимумов
      IndMax=ArrayMaximum(tmp);        // ищем индекс максимального значения
      ind[i]=IndMax;                   // сохраняем индекс i-го максимального значения
      tmp[IndMax]=0;                   // обнуляем i-е найденное максимальное значение во временном массиве
      }
   ArrayResize(tmp,0);                 // обнуляем размер временного массива
   return;   
}

Quando é chamado:

FindMaxValue(Ваш_Массив_Значений, MassIndexMaxValue, 3);

... A matriz previamente definida no MassIndexMaxValue[] deve conter os índices dos três valores máximos encontrados em seu_valor_de_arranjo[];

 

Não consigo descobrir como são calculados a porcentagem de lucro por comércio e a porcentagem de perda por comércio. Você pode me dizer?

http://www.assessor.ru/forum/index.php?t=822

 
artmedia70:

Veja: você tem uma matriz com valores. Você precisa encontrar três máximos nesta série. Eles não têm que ser os últimos ou os primeiros da série temporal. Você só precisa encontrar os três máximos.


Artem, muito obrigado!

Estou feliz que minha idéia de zerar o valor máximo da matriz estava correta, e você descreveu tudo em detalhes, com a cópia em outra matriz, agora eu vou lidar com as minúcias.

E seguindo o conselho de Vladimir, vou começar com o algoritmo do programa, vou processar suas informações e tenho certeza de que tudo vai dar certo - bons professores.

OBRIGAÇÕES ESPECIAIS PARA O ARTIGO https://www.mql5.com/ru/articles/1357

 

Boa tarde!

Você pode me dizer como obter sinais de um indicador personalizado em um Expert Advisor?

Eu usei iCustom, mas as corujas ainda não recebem o sinal

double Signal_I=iCustom(NULL,0,"FL",0,0);
 
skyjet:

Boa tarde!

Você pode me dizer como obter sinais de um indicador personalizado em um Expert Advisor?

Eu usei iCustom, mas as corujas ainda não recebem o sinal


Talvez o código indicador iCustom não se preste a ele. há muito pouca informação em sua pergunta para responder.
 
skyjet:

Boa tarde!

Você pode me dizer como obter sinais de um indicador personalizado em um Expert Advisor?

Eu usei iCustom, mas as corujas ainda não recebem o sinal


É o mesmo com outros indicadores? Se sim, você usa incorretamente a função iCustom(). Se não, tente verificar o código do indicador - pode ser que seu indicador não utilize nenhum buffer de indicador - ele funciona com a construção de objetos gráficos.
 

Olá, há uma função:

bool Trade()
{
  if(!IsConnected())
  {
     Print("Связь отсутствует.");
     return(false);
  }

  if(!IsExpertEnabled())
  {
     Print("Торговля экспертами выключена.");
     return(false);
  }
  
  if(DayOfWeek()==0 || DayOfWeek()==6)
  {
     Print("В выходные не торгуем.");
     return(false);
  }
  
  if(!IsTradeAllowed())
  {
     Print("Торговля запрещена? WTF???.");
     return(false);
  }
  return(true);
}

Mas não funciona por alguma razão. Ela é chamada na EA logo no início, após int start() como a seguir:

  if(!Trade())
  {
    Sleep(5000);
    return;
  }

O Expert Advisor é carregado com sucesso nas guias Log e Experts, e nada mais aparece. Embora deva dizer: "Não negociamos nos fins de semana", pois 26.11.2011 é sábado.

Onde está o erro e o que estou fazendo de errado?

 
Roman.:

Talvez o código indicador iCustom não se preste a... Há muito pouca informação em sua pergunta para responder.
O indicador desenha linhas de apoio e resistência, o que faz durante a visualização. O próprio indicador dá um sinal LT_1 == 1 ou -1 quando cruzado.
if((Close[i] > BuyLevel) 
         {
    
          LT_1=1;
               
         }                                 
       if((Close[i] < CloseLevel)
         {
           
           LT_1=-1;
               
         }
 
ivan2k2:

Olá, há uma função:

Mas não funciona por alguma razão. Ela é chamada na EA logo no início, após int start() como a seguir:

O Expert Advisor é carregado com sucesso nas guias Log e Experts, e nada mais aparece. Embora deva dizer: "Não negociamos nos fins de semana", pois 26.11.2011 é sábado.

Onde está o erro e o que estou fazendo de errado?


Hoje é sábado - um dia de folga. Você inicia o Expert Advisor, a inicialização ocorre, mas como é dia de folga e não há nenhum tick, a função de início não é iniciada (ou seja, o comércio() não é chamado). Para verificar se funciona corretamente, você precisa colar a chamada desta função no bloco de inicialização, ou testá-la no testador.
 
skyjet:
O indicador desenha linhas de apoio e resistência, o que faz durante a visualização. O próprio indicador dá um sinal LT_1 == 1 ou -1 quando cruzado.

Então não se preocupe - basta mover o código do indicador para o Expert Advisor como é para cumprir os critérios de negociação e isso é tudo - então no conselho, de acordo com estas condições de negociação transferidas do indicador, você abre posições através do Expert Advisor e é isso ...
Razão: