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

 

Minha pergunta é para um novato:

Recentemente descobri que o MetaEditor não está abrindo no terminal, e o comando "mudar" não funciona em EAs e indicadores ............. Por favor, me ajude com isto. Por favor, ajude-me a descobrir.

 
gnawingmarket:

Minha pergunta é para um novato:

Recentemente descobri que o MetaEditor não está abrindo no terminal, e o comando "mudar" não funciona em EAs e indicadores ............. Por favor, me ajude com isto. Obrigado.


Vou tentar responder a isso.

Nenhuma possibilidade de corrigir códigos antigos funciona mais.

 
Mas você tem um príncipe coroado.
 
tara:
Ao menos você tem um príncipe para coroar.


Você sabe tudo! Hoje eu não consegui pegar quem me colocou como Administrador, e não consegui a senha, e não pensei em perguntar! Vou conseguir amanhã! O que você está fazendo de pé?

Obrigado tara por sua participação! Tive tudo restaurado por meu vizinho no quarteirão! Especialista em ciência da computação!

 
Top2n:

Sim, eu entendo que existem muitas perguntas estúpidas. Honestamente, tenho tentado o dia todo, mas sem resultados.

Estou escrevendo os valores de preços de várias linhas de tendência na barra atual em uma matriz.

Como posso apagar um valor da matriz se não há nenhum objeto?

artmedia70:

Se passarmos através dos valores das linhas de tendência em cada tick, inicializarmos o array e aumentarmos sua dimensão ao encontrar o próximo preço necessário da linha de tendência necessária, então não haverá necessidade de remover os valores das linhas de tendência eliminadas do array. A matriz será dinâmica, e cada vez a cada tique, conterá apenas valores de objetos existentes.


?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
double MassTrendNumber(double &array[], string tip) // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
ArrayResize(array,ObjectsTotal(OBJ_TREND));

 for (int i = 0, limit = ArrayResize(array,ObjectsTotal(OBJ_TREND)); i < limit; i++) 

 {
 string DWnem=ObjectName(i); 
  string DW="downtrendline"+IntegerToString(i); // существует два названия трендовых линий, первое
  string DW2="uptrendline"+IntegerToString(i); // второе
if(tip="Sell")   //первый массив цен на селл
  if(DWnem=DW)//если имя равно "downtrendline"
   if(ObjectGet(DWnem,OBJPROP_COLOR)==Goldenrod || ObjectGet(DWnem,OBJPROP_COLOR)==Gainsboro || ObjectGet(DWnem,OBJPROP_COLOR)==White)
// Также существует три цвета
   array[i]=ObjectGetValueByShift(DWnem,1); //записываем
if(tip="Buy")   //второй массивцен на бай
 if(DWnem=DW2)
 if(ObjectGet(DWnem,OBJPROP_COLOR)==Goldenrod || ObjectGet(DWnem,OBJPROP_COLOR)==Gainsboro || ObjectGet(DWnem,OBJPROP_COLOR)==White)
  array[i]=ObjectGetValueByShift(DWnem,1);

  }   return;
   }

	          
 

Estou tentando fazer um oscilador por volta de 0 a partir do preço fechado em uma janela separada, mas não consigo.

Ou seja, temos o preço Close[i], preciso que este preço vá acima/abaixo de zero como no MACD/CCI, em uma janela separada, mas por mais que eu tente, não posso fazê-lo sem valores adicionais como MA: agora eu consigo algo semelhante se eu subtrair o iClose-iMA, mas talvez haja variantes sem suavizar?

Ou na faixa 0,0...1,0 se não houver como chegar a zero...

 
Top2n:

O método de busca no método abaixo é ligeiramente diferente:

#property strict

/******************************************************************************/
bool AddValue(double &array[], const double value) {
  const int size = ArraySize(array);

  if (ArrayResize(array, size + 1) != size + 1) {
    return false; // Ошибка, значение не может быть добавлено к массиву
  }

  array[size] = value; //записываем
  return true; // Нет ошибки, значение добавлено к массиву
}

/******************************************************************************/
bool AddValueIfFound(double &array[], const string name) {
  const int type = ObjectType(name);

  if (type == OBJ_TREND) {
    switch ((color)ObjectGet(name, OBJPROP_COLOR)) { // Тип color допустимо использовать в switch
    case Goldenrod:
    case Gainsboro:
    case White:
      if (!AddValue(array, ObjectGetValueByShift(name, 1))) {
        return false; // Ошибка, значение найдено, но не может быть добавлено к массиву
      }
    }
  }

  return true; // Нет ошибки, значение, если найдено, добавлено к массиву
}

/******************************************************************************/
bool MassTrendNumber(double &array[], const bool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
  const string subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второе

  if (ArrayResize(array, 0) != 0) {
    return false; // Ошибка, массив не может быть заполнен достоверно
  }

  for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit; i++) {
    if (!AddValueIfFound(array, subname + IntegerToString(i))) {
      return false; // Ошибка, массив, если и заполнен, то недостоверно
    }
  }

  return true; // Нет ошибки, массив заполнен достоверно
}

/******************************************************************************/
void FillAndPrint(double &array[], const bool buy) {
  if (MassTrendNumber(array, buy)) {
    const int limit = ArraySize(array);

    Print("Найдено объектов: ", limit);

    for (int i = 0; i < limit; i++) {
      Print("Price[", i, "] = ", DoubleToStr(array[i], Digits));
    }
  } else {
    Print("Чёрт!");
  }
}

/******************************************************************************/
void OnStart() {
  double masS[];
  double masB[];

  Print("Sell:");
  FillAndPrint(masS, false);

  Print("Buy:");
  FillAndPrint(masB, true);
}

Adicione duas linhas de tendência brancas com nomes correspondentes ao gráfico e você o tem:

04:14:34 Script 2 EURUSDm,H1: loaded successfully
04:14:34 2 EURUSDm,H1: initialized
04:14:34 2 EURUSDm,H1: Sell:
04:14:34 2 EURUSDm,H1: Найдено объектов: 1
04:14:34 2 EURUSDm,H1: Price[0] = 1.36268
04:14:34 2 EURUSDm,H1: Buy:
04:14:34 2 EURUSDm,H1: Найдено объектов: 1
04:14:34 2 EURUSDm,H1: Price[0] = 1.35668
04:14:34 2 EURUSDm,H1: uninit reason 0
04:14:34 Script 2 EURUSDm,H1: removed

Não escreva funções quilométricas, divida o programa em breves "frases" - "tijolos". Os "tijolos" pequenos fazem os maiores, e os maiores fazem os ainda maiores. Veja, é possível.

Passe todos os seus dados para funcionar somente através de parâmetros.

Certifique-se de lidar com os erros se a função que está sendo chamada falhar e outras ações, se o erro for ignorado, terão sérias consequências. A grande maioria das falhas de programa (em geral) ocorre porque o tratamento de erros não é programado de forma alguma.

Por exemplo, se o ArrayResize(), chamado para ampliar o tamanho da matriz, retornou um erro, e o programador não o verificou e se refere à matriz supostamente ampliada, ocorre um erro que faz com que o programa MQL4 deixe de funcionar mais tarde. O Expert Advisor, por exemplo, deixa de negociar deixando posições em aberto. Não é ótimo?

Tente inserir "array[0] = 0;" antes do loop na função MassTrendNumber(), e certifique-se de que o script termina após o erro de overrun do array.

 
evillive:

Estou tentando fazer um oscilador por volta de 0 a partir do preço fechado em uma janela separada, mas não consigo.

Ou seja, temos o preço Close[i], preciso que este preço vá acima/abaixo de zero como no MACD/CCI, em uma janela separada, mas por mais que eu tente, não posso fazê-lo sem valores adicionais como MA: agora eu consigo algo semelhante se eu subtrair o iClose-iMA, mas talvez haja variantes sem suavizar?

Ou na faixa 0,0...1,0 se não houver como chegar a zero...


https://www.mql5.com/ru/code/9340
 

É mais ou menos isso mesmo. Nada é novo neste mundo ))))
 
simpleton:

O método de busca abaixo é ligeiramente diferente:

Adicione duas linhas brancas de tendência com os nomes correspondentes ao gráfico e você o tem:

Não escreva funções quilométricas, divida o programa em frases curtas "-"tijolos". Os "tijolos" pequenos fazem os maiores, e os maiores fazem os ainda maiores. Veja, é possível.

Somente passe todos os dados para as funções através de parâmetros.

Certifique-se de lidar com erros se a função que está sendo chamada falhar, e a ação subseqüente, se o erro for ignorado, terá sérias conseqüências. A grande maioria das falhas de programa (em geral) ocorre porque o tratamento de erros não é programado de forma alguma.

Por exemplo, se o ArrayResize(), chamado para ampliar o tamanho da matriz, retornou um erro, e o programador não o verificou e se refere à matriz supostamente ampliada, ocorre um erro que faz com que o programa MQL4 deixe de funcionar mais tarde. O Expert Advisor, por exemplo, deixa de negociar deixando posições em aberto. Isso não é ótimo?

Tente inserir "array[0] = 0;" antes do loop no MassTrendNumber() e certifique-se de que o script termina após o erro de overrun do array.


Sim, muito obrigado, você está além das palavras como é útil, tão claro! Fantástico!!!