EA em choque ao usar múltiplos pares... - página 3

 
Ah, eu descobri!

Eu precisava chamar a ordem de modificação a partir da função "int start()" quando "If(IsNewCandle())" é chamado também. Portanto, em cada hora de fechamento, a ordem "void OrderModify" que modifica é a ordem PENDING se a ordemtoploss > iMA-ATR, será modificada e calibrada de acordo.

Portanto, isso agora está fazendo seu trabalho corretamente :) Agora para ler até meus olhos sangrarem... :)
 
RaptorUK:

Esta é a questão . . . (semelhante para o OP_SELL)

... e quando você recebe um erro 1 é porque OrderStopLoss() == BuyStopPrice então você está modificando o pedido para ter o mesmo valor StopLoss, daí o erro 1 então agora você está se perguntando como por um lado OrderStopLoss() == BuyStopPrice e por outro lado OrderStopLoss() < BuyStopPrice

Você seguiu o link no post e o leu até seus olhos sangrarem? Aposto que você não ... https://www. mql5.com/en/forum/146380 se você continuar ignorando este assunto, ele vai continuar te pegando e você vai continuar perdendo tempo ... pegue-o, entenda-o, não sofra mais com ele, seja feliz


exceto que com zero nunca se comparam duplas para igualdade < Poderia ser isto o que eu estava procurando pela WHRoeder...?
if (a > b)
if (a - b > Point / 2.)
if (a >= b)
if (a - b > -Point)
if (a != b)
if (MathAbs(a - b) > Point / 2.)
 
DomGilberto:

exceto que com zero nunca se comparam duplas para igualdade < Poderia ser isto o que eu estava procurando pela WHRoeder...?
Certamente isso vai funcionar, você entende por que e qual é a questão?
 
Para ser perfeitamente honesto, não, eu não entendo... Mas experimentei escrevê-lo e imprimir as comparações...
 
DomGilberto:
Para ser perfeitamente honesto, não, eu não entendo... Mas experimentei escrevê-lo e imprimir as comparações...

1,51234000001 não é o mesmo que 1,51234000002 mas do ponto de vista de um preço, ambos são 1,51234, portanto são o mesmo . . . portanto são o mesmo, mas um é maior que o outro. Tudo tem a ver com a forma como os números de ponto flutuante são representados em binário, é impreciso, de modo que geralmente há um pequeno erro aqui e ali . . .

Dê uma olhada nisso: números de ponto flutu ante

 

Mas por que o NormalizedDouble, Digits não resolveria isso? Por que as casas decimais extra desnecessárias são incluídas? Eu aprecio o fato de você não precisar usar NormalizeDouble em variáveis pré-definidas, mas de que adianta usar NormalizeDouble em variáveis não pré-definidas, e depois tentar compará-las quando elas nunca se igualarão :s?

Estranho!

Se eu quisesse fazer "If(Bid > OrderOpenPrice() )", isso não funcionaria? Eu precisaria fazer as regras mencionadas acima, em cada declaração de comparação? ou seja, "If(Bid - OrderOpenPrice() > Point / 2.)?


Oh e se (Bid == OrderOpenPrice()), há algo que eu precise fazer com essa declaração?

 
DomGilberto:

Mas por que o NormalizedDouble, Digits não resolveria isso? Por que as casas decimais extra desnecessárias são incluídas? Eu aprecio o fato de você não precisar usar NormalizeDouble em variáveis pré-definidas, mas de que adianta usar NormalizeDouble em variáveis não pré-definidas, e depois tentar compará-las quando elas nunca se igualarão :s?

NormalizeDouble não resolve o problema, não transforma 1 ,51234000001 em 1,51234 ele apenas "mexe" com ele de uma maneira diferente ... assim, ao usá-lo, você espera que ele mexa com todos os seus valores da mesma maneira.

DomGilberto:


Se eu quisesse fazer "If(Bid > OrderOpenPrice() )", isso não funcionaria? Eu precisaria fazer as regras mencionadas acima, em cada declaração de comparação? ou seja, "If(Bid - OrderOpenPrice() > Point / 2.)?

Sim, se você quisesse ter certeza de que sua comparação estava lhe dando um resultado preciso, sim.

DomGilberto:

Oh e se (Bid == OrderOpenPrice()), há algo que eu precise fazer com essa afirmação?

Sim, ele sofrerá exatamente do mesmo problema ...
 
Ok obrigado - eu reduzi dramaticamente o erro OrderModify 1 - entretanto, ainda estou recebendo um pouco de vez em quando? Parece que é o vazio MA_trail? Também, como eu escreveria corretamente "If(Bid == OrderOpenPrice())?
//+----------------------------------------------------------------------------------------------------------------------------------------+  
//Moving Average Trailing Stop Function
//+----------------------------------------------------------------------------------------------------------------------------------------+   
void MA_Trail()

{

   double ATR = iATR(NULL,60,14,1);
   double MA = iMA(NULL,60,MA_Period,0,1,0,1);
   
   double BuyStopPriceMath = MA - ATR;
   double SellStopPriceMath = MA + ATR;
   
   double BuyStopPrice = NormalizeDouble(BuyStopPriceMath,5);
   double SellStopPrice = NormalizeDouble(SellStopPriceMath,5);

   for(int b=OrdersTotal()-1; b>=0; b--)
     {
      if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
         if(OrderMagicNumber()==MagicNumber)
            if(OrderSymbol()==Symbol())
               {

               if(OrderType()==OP_BUY)
                  {
                  if(OrderStopLoss() - BuyStopPrice > Point / 2.) continue;
                  if(BuyStopPrice - OrderStopLoss() > Point / 2.)
                     bool BuyModify = OrderModify(OrderTicket(),OrderOpenPrice(),BuyStopPrice,OrderTakeProfit(),0,CLR_NONE);
                   if(!BuyModify)Print(" Buy Trailing Stop Failed: ", GetLastError());
                   }     

    
               if(OrderType()==OP_SELL)
                  {
                  if(SellStopPrice - OrderStopLoss() > Point / 2. ) continue;
                  if(OrderStopLoss() - SellStopPrice > Point / 2. )
                     bool SellModify = OrderModify(OrderTicket(),OrderOpenPrice(),SellStopPrice,OrderTakeProfit(),0,CLR_NONE);
                  if(!SellModify)Print(" Sell Trailing Stop Failed: ", GetLastError());
                  }
              }   
      }
} 
 
DomGilberto:
Ok obrigado - eu reduzi dramaticamente o erro OrderModify 1 - entretanto, ainda estou recebendo um pouco de vez em quando? Parece que é o vazio MA_trail? Também, como eu escreveria corretamente "If(Bid == OrderOpenPrice())?

Seus olhos não estão sangrando o suficiente ...

Você poderia fazer algo assim:

!( MathAbs(FirstPrice - SecondPrice) > HalfAPoint )

tenha cuidado com o !

A partir daqui: https://www.mql5.com/en/forum/136997/page4#781986

 
Você está sugerindo isso em relação ao código acima ou em relação a "If(Bid == OrderOpenPrice())"?
Razão: