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 111

 
Trendy:

Muito obrigado! Eu precisava dele para comparar as características das velas (mais, menos, etc.) Eu o parafusei - ele funciona. Só não consegue entender como compara o tipo de string de dados? ou o dobro para string não traduz número para string? :-D


PS. Não funciona em indicador - apenas em roteiro... Quando chamo Alto[i] - recebo apenas 4 casas decimais nele.

Estou escrevendo:

Alerta ("doubletostr High = ", DoubleToStr(High[1],5));
if (DoubleToStr(High[2],5)>(DoubleToStr(High[3],5))
{
Alerta ("Mais");
}
if (DoubleToStr(High[2],5)<(DoubleToStr(High[3],5))
{
Alerta ("Menor");

}

Trabalha, ele escreve o resultado com cinco dígitos, sobre/subcontagens. O problema é que no indicador o conjunto de cordas não aparece no gráfico. Portanto...

...escrita:

Alerta ("Duplo Alto Normalizado = ", NormalizeDuplo(Alto[1],5));

Não funciona - o resultado é > 1.1234

Eu não entendo os desenvolvedores - por que eles tiveram que complicar tanto as coisas? Por que, se ele mostra tantos dígitos na tabela, não vai riscar a função chamada com cinco dígitos? Talvez haja uma solução simples?


Fica ainda mais interessante:

traduzir

Alerta ("iFractals doubletostr= ", DoubleToStr(iFractals(0,0,MODE_UPPER,2),Dígitos));

Escrito: 1,32169 - OK.

Converter de volta para um valor numérico usando StrToDouble:

Alerta ("iFractals StrToDoubledoubledoubletostr= ", StrToDouble(DoubleToStr(iFractals(0,0,MODE_UPPER,2),Dígitos));

Resultado: 1.3217

Deve haver um memorando com Jackie Chan onde ele não entenda o chip).

 
hoz:

E o que o Alert realmente produz?

Diz 0,01, mas na verdade é 0...0100.
 
Trendy:

Fica ainda mais interessante:

traduzir

Alerta ("iFractals doubletostr= ", DoubleToStr(iFractals(0,0,MODE_UPPER,2),Dígitos));

Escrito: 1,32169 - OK.

Converter de volta para um valor numérico usando StrToDouble:

Alerta ("iFractals StrToDoubledoubledoubletostr= ", StrToDouble(DoubleToStr(iFractals(0,0,MODE_UPPER,2),Dígitos));

Resultado: 1.3217

Deve haver um memorando com Jackie Chan onde ele entendeu mal o chip).


DoubleToStr() é usado para emitir mensagens com a precisão que você deseja. Impressão padrão (), Alerta(), etc., imprimir em 4 dígitos.

Quando você quer ver um número com a precisão desejada, é quando você usa DoubleToStr(), não nos cálculos.

Você não precisa traduzir nada para frente e para trás ... ;)

 
semiromid:

Diz 0,01 mas o valor real é 0...0100.


Saída então 100 * ponto = 100 * 0,00001 = 0,001pp (se para cinco dígitos)

O valor do lBUY foi alterado acima. Portanto, na minha opinião, a condição:

if(lBUY==0.01)

Não será cumprida. E, portanto, o valor do lBUY permanecerá o mesmo.

 
artmedia70:
A variável j deve ser explicitamente inicializada no início da função com um valor negativo. Experimente. Eu ainda não procurei mais.


Hmm. Até agora a mesma coisa. Aqui nós temos:

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
bool isCloseByTakeLastOpenPos(int delta)
{
   datetime lastOrderCloseTime = 0,               // Время закрытия последнего открытого ордера
            lastOOTHist = -1;                     // Время открытия последнего открытого ордера из истории
   int j = -1;
   
   for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют..
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
      {
         lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
         j = i;
      }
   }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
      Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }
  
   for(int h=OrdersTotal()-1; h>=0; h--)
   {
      if (OrderSelect(h, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderMagicNumber() != i_magic)   continue;
         if (OrderSymbol() != Symbol())       continue;
         if (OrderType() > 1)                 continue;
         if (lastOOTHist < OrderOpenTime()) return(false);  // Выбранная рыночная позиция открыта позже закрытой по тейку
      }
      else {Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер");return(false);}
   }
   
   return (true);
}
 
artmedia70:

DoubleToStr() é usado para emitir mensagens com a precisão que você deseja. Impressão padrão(), Alerta(), etc., imprimirá 4 dígitos.

Quando você quer ver um número com a precisão desejada, é quando você usa DoubleToStr(), não nos cálculos.

Você não precisa traduzir nada para frente e para trás ... ;)


É compreensível... agora...) Mas a questão é que eu preciso de alguma forma desenterrar um quinto dígito para os cálculos(

Se o DoubleToStr() não é bom para ele, então este idioma não tem tal característica? Os desenvolvedores não previram isto?

 
hoz:


Hmm. É o mesmo até agora. Aqui estamos nós:

Não deveria ser a mesma coisa? ;)
 
Trendy:

É compreensível... agora...) Mas a questão é que eu preciso de alguma forma desenterrar um quinto dígito para os cálculos(

Se o DoubleToStr() não é bom para ele, então este idioma não tem tal característica? Os desenvolvedores não previram isto?


Os cálculos utilizam ainda mais dígitos do que você pensa. Se você quiser ver com a precisão que deseja, use DoubleToStr(). Você não verá isso de outra forma.
 

Cavalheiros programadores! Favor aconselhar como combinar um EA com um indicador?

Por exemplo, peguei um simples bot mo_bidir.mq4 que negocia usando seu próprio algoritmo e quero que ele continue abrindo negócios usando seu próprio algoritmo, mas após o sinal de 3 МА.

Por exemplo, em um sinal - Três Médias em Movimento:

FastEMA>MediumEMA>SlowEMA (tendência acima) - bot compra

FastEMA<MediumEMA<SlowEMA (tendência down) - bot vende

Inp_Signal_ThreeEMA_FastPeriod = 8;

Inp_Signal_ThreeEMA_MediumPeriod = 38;

Inp_Signal_ThreeEMA_SlowPeriod = 48;

O que eu preciso é que o Expert Advisor continue negociando em 5 minutos e que o indicador dê sinais do prazo diário ou de 4 horas, e eu quero ser capaz de mudar os prazos nas configurações do bot.

 
Bom dia a todos os comerciantes. Talvez esta questão já tenha sido discutida, mas alguns EAs do codebase não estão compilando em novas construções, o compilador jura que é uma versão descompilada. Mas isso parece ser um absurdo, as versões nunca foram descompiladas