Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 91

 
Jenya77769:

Olá! Os dois números menos q e w são comparados incorretamente, quando são iguais, o se operador pensa que um é maior que o outro. Qual é o erro? Quando q = -0,0002 e w é também -0,0002, res12=falso, por quê?

porque é um duplo e eles não são exatamente iguais.

FIGURA : comparar valores normalizados

 
Jenya77769:

Olá! Os dois números menos q e w são comparados incorretamente, quando são iguais, o se operador pensa que um é maior que o outro. Qual é o erro? Quando q = -0,0002 e w é também -0,0002, res12=falso, por quê?


Compare sua diferença com zero, isto é mais correto e funciona para números de qualquer tipo.

 

Pessoal, aqui vai uma pergunta...

uma linha horizontal, com um dia de duração.

Tem uma etiqueta de texto, um objeto de etiqueta.

Como posso fazer este rótulo de texto estar sempre no meio da linha (no meio do dia), em qualquer zoom do gráfico?

 
John Smith:

Pessoal, aqui vai uma pergunta...

uma linha horizontal, com um dia de duração.

Tem uma etiqueta de texto, um objeto de etiqueta.

Como posso fazer este rótulo de texto estar sempre no meio da linha (no meio do dia), em qualquer zoom do gráfico?

Alterar a coordenada X da etiqueta, ou seja, calculá-la como o meio da linha
 
Renat Akhtyamov:
Alterar a coordenada X do marcador, ou seja, calculá-la como o meio da linha

Bem, isso é compreensível, mas como eu faço isso?


Eu tinha uma segunda opção - com o marcador ligado ao início do dia, usando uma variável de texto para inserir espaços na frente do valor do marcador, dependendo do zoom do gráfico.

Em essência, quero que a etiqueta fique à esquerda no zoom próximo, e no zoom para fora, a etiqueta deve ser movida para o meio. Como os níveis de zoom em mt4 são padrão, então para cada nível de zoom não é tão difícil encontrar o número certo de espaços. Mas aqui está uma pergunta - o mql4 tem tal função que determinaria o nível atual de zoom do gráfico?

Então tudo será simples, algo como isto: "se chartzoom = 50%, então espaçosnumber = 10", etc.

Onde o número de espaços é a variável string que define o número de espaços antes do texto da etiqueta, como __________ 1.23456 - há 10 espaços com _ sinal.

 
John Smith:

Bem, isso é compreensível, mas como eu faço isso?


Eu tinha uma segunda opção - com o marcador ligado ao início do dia, usando uma variável de texto para inserir espaços na frente do valor do marcador, dependendo do zoom do gráfico.

Em essência, quero que a etiqueta fique do lado esquerdo com o zoom próximo, e com o zoom para fora a etiqueta deve ser movida para o meio. Como os níveis de zoom em mt4 são padrão, então para cada nível de zoom não é tão difícil encontrar o número certo de espaços. Mas aqui está uma pergunta - o mql4 tem tal função que determinaria o nível atual de zoom do gráfico?

Então tudo será simples, algo como isto: "se chartzoom = 50%, então espaçosnumber = 10", etc.

Onde o número de espaços é a variável string que define o número de espaços antes do texto da etiqueta, como __________ 1.23456 - há 10 espaços com _ sinal.

Leia meus comentáriosaqui
 

Olá a todos! precisam de ajuda novamente. Não se consegue descobrir qual é o erro. Arrasto novamente. Arrasto por MA. Preciso arrasto várias ordens. Pode haver loops. Desde que haja uma ordem em aberto, tudo está funcionando perfeitamente. Assim que mais uma ordem é aberta, o bacanalia começa - modificação constante (com um e o mesmo parâmetro) da primeira ordem (erro 1 não é mostrado). Neste caso, a segunda ordem é modificada como deve ser - quando as condições apropriadas são cumpridas (a primeira ordem, quando as condições mudam, altera seus parâmetros e continua a modificação constante com novas ordens). Não consigo encontrar a razão. Quem poderia me dar uma dica?

void TrailingStop()
{
   int i;
   int k          = OrdersTotal(); 
   double Ma      = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 1); 
   int MinDistans = int(MarketInfo(Symbol(), MODE_STOPLEVEL));
   
   double lips1  = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 1); 
   double lips2  = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 2);
   double teeth1 = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, 1);
   double teeth2 = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, 2);
   double jaw1   = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW , 1);
   double jaw2   = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW , 2);
   
   for (i = 0; i < k; i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         {
            if(OrderType() == OP_BUY)
            {
               if(lips2 < teeth2 && teeth2 < jaw2 && lips1 < teeth1 && teeth1 < jaw1)
                  break;
               
               if(lips2 > teeth2 && teeth2 > jaw2 && lips1 > teeth1 && teeth1 > jaw1)
               {   
                  if((OrderStopLoss() + TrailingStep*Point) < Ma)
                  {
                     double Sl = NormalizeDouble(Ma, Digits);                 
                     
                     if((Bid - MinDistans) > Sl && (OrderStopLoss() + TrailingStep*Point) < Sl)
                     { 
                        OrderModifyX(OrderTicket(), OrderOpenPrice(), Sl, OrderTakeProfit(), OrderExpiration(), 0);
                     }
                  }
               }
            }
         }
      }     
 
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))  
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         {
            if(OrderType() == OP_SELL)
            {
               if(lips2 > teeth2 && teeth2 > jaw2 && lips1 > teeth1 && teeth1 > jaw1)
                  break;
                  
               if(lips2 < teeth2 && teeth2 < jaw2 && lips1 < teeth1 && teeth1 < jaw1)
               {
                  if(MathAbs(OrderStopLoss() - TrailingOpen*Point) > Ma)
                  {
                     double Sl = NormalizeDouble(Ma, Digits);
                 
                     if((Ask + MinDistans) < Sl && (OrderStopLoss() - TrailingStep*Point) > Sl)
                     {
                        OrderModifyX(OrderTicket(), OrderOpenPrice(), Sl, OrderTakeProfit(), OrderExpiration(), 0);
                     }
                  }
               }
            }
         }
      }
   }
}



 
Youri Lazurenko:

Olá a todos! precisam de ajuda novamente. Não se consegue descobrir qual é o erro. Arrasto novamente. Arrasto por MA. Preciso arrasto várias ordens. Pode haver loops. Desde que haja uma ordem em aberto, tudo está funcionando perfeitamente. Assim que mais uma ordem é aberta, o bacanalia começa - modificação constante (com um e o mesmo parâmetro) da primeira ordem (erro 1 não é mostrado). Neste caso, a segunda ordem é modificada como deve ser - quando as condições apropriadas são cumpridas (a primeira ordem, quando as condições mudam, altera seus parâmetros e continua a modificação constante com novas ordens). Não consigo encontrar a razão. Quem pode me ajudar?


1. O ciclo deve ser revertido.

2) Para que serve o intervalo?

 
Artyom Trishkin:

1. O ciclo deve ser revertido.

2. Para que serve o intervalo?


Olá.

1 - "O loop deve ser inverso" - você quer dizer para(i = k; i > 0; i--)?

2. "Para que é a pausa?" - Para sair. Geralmente, no início, após selecionar o tipo de ordem e se for contra a quebra de tendência. Depois selecionamos novamente o tipo de pedido e, se houver tendência, modificamo-lo.

Esta variante de quebra me ajudou antes. Quando você sugeriu uma solução para o arrasto pela MA. Se, por exemplo, em um comércio de compra, a parada estava acima da MA, eu recebi o erro 1 até que a MA estava acima da parada, após o qual o erro desapareceu. Quando introduzi a condição de que se a parada for acima da MA, então quebra, tudo voltava ao normal.

 
Youri Lazurenko:

Olá.

1 - "O loop deve ser invertido" - você quer dizer para(i = k; i > 0; i--)?

2. "Para que é a pausa?" - Para sair. Geralmente, no início, após selecionar o tipo de ordem e se for contra a quebra de tendência. Depois selecionamos novamente o tipo de pedido e, se houver tendência, modificamo-lo.

Esta variante de quebra me ajudou antes. Quando você sugeriu uma solução para o arrasto pela MA. Se, por exemplo, em um comércio de compra, a parada estava acima da MA, eu recebi o erro 1 até que a MA estava acima da parada, após o qual o erro desapareceu. Quando eu estabeleço a condição de que se a parada estiver acima da MA, tudo se normalizou.

A quebra completa completamente o loop. E quanto ao resto dos cargos, então?
Verifique onde a parada é relativa a seu novo nível.
O loop inverso de OrderTotal()-1 até >=0
Razão: