El choque de EA cuando se utilizan varios pares... - página 3

 
¡Ah, ya lo he resuelto!

Necesitaba llamar a la modificación de la orden desde la función "int start()" cuando se llama también a "If(IsNewCandle())". Por lo tanto, en el cierre de cada hora, el "void OrderModify" que modifica la orden PENDING si el orderstoploss > iMA-ATR, será modificado y calibrado en consecuencia.

Así que ya está haciendo su trabajo correctamente :) Ahora a leer hasta que me sangren los ojos... :)
 
RaptorUK:

Esta es la cuestión... (similar para la OP_SELL)

. . y cuando obtienes un error 1 es porque OrderStopLoss() == BuyStopPrice por lo que estás modificando la orden para que tenga el mismo valor de StopLoss, de ahí el error 1 por lo que ahora te preguntas cómo por un lado OrderStopLoss() == BuyStopPrice y por otro OrderStopLoss() < BuyStopPrice

¿Has seguido el enlace del post y lo has leído hasta que te sangren los ojos? Apuesto a que no lo hiciste... https://www. mql5.com/en/forum/146380 si sigues ignorando este tema te seguirá atrapando y seguirás perdiendo el tiempo... entiéndelo, no lo sufras más, sé feliz


excepto con el cero nunca comparar dobles para la igualdad < ¿Podría ser esto lo que estaba buscando por 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:

excepto con cero nunca comparar dobles para la igualdad < ¿Podría ser esto lo que estaba buscando por WHRoeder ...?
Ciertamente eso funcionará, ¿entiendes por qué y cuál es el problema?
 
Para ser sincero, no lo entiendo... Sin embargo, experimenté con escribirlo e imprimir las comparaciones...
 
DomGilberto:
Para ser totalmente honesto, no lo entiendo... Sin embargo, experimenté con la escritura y la impresión de las comparaciones...

1,51234000001 no es lo mismo que 1,51234000002 pero desde el punto de vista de un precio ambos son 1,51234 por lo que son lo mismo... así que son lo mismo pero uno es mayor que el otro. Todo tiene que ver con la forma en que los números de punto flotante se representan en binario, es inexacto por lo que generalmente hay un pequeño error aquí y allá . . .

Mira esto: números de punto flotante

 

Pero, ¿por qué NormalizedDouble, Digits no lo resuelve? ¿Por qué se incluyen los decimales extra innecesarios? Aprecio el hecho de que no es necesario utilizar Normal izeDouble en las variables predefinidas, pero ¿qué sentido tiene utilizar NormalizeDouble en las variables no predefinidas, y luego tratar de compararlas cuando nunca van a coincidir :s?

Es extraño.

Si quisiera hacer "If(Bid > OrderOpenPrice())" no funcionaría, ¿verdad? ¿Tendría que hacer las reglas indicadas anteriormente, en cada declaración de comparación? es decir, "If(Bid - OrderOpenPrice() > Point / 2.)?


Ah, y lo que If(Bid == OrderOpenPrice()), ¿hay algo que tengo que hacer con esa declaración?

 
DomGilberto:

Pero, ¿por qué NormalizedDouble, Digits no lo resuelve? ¿Por qué se incluyen los decimales extra innecesarios? Entiendo que no es necesario usar NormalizeDouble en variables predefinidas, pero ¿qué sentido tiene usar NormalizeDouble en variables no predefinidas, y luego intentar compararlas cuando nunca van a coincidir :s?

NormalizeDouble no arregla el problema, no convierte 1 .51234000001 en 1.51234, sólo lo "desordena" de una manera diferente... así que al usarlo estás esperando que desordene todos tus valores de la misma manera.

DomGilberto:


Si quisiera hacer "If(Bid > OrderOpenPrice())" no funcionaría, ¿verdad? ¿Tendría que hacer las reglas indicadas anteriormente, en cada declaración de comparación? es decir, "If(Bid - OrderOpenPrice() > Point / 2.)?

Sí, si quieres estar seguro de que tu comparación te da un resultado preciso, sí.

DomGilberto:

Ah, y lo que If(Bid == OrderOpenPrice()), ¿hay algo que tenga que hacer con esa declaración?

Sí, sufrirá exactamente el mismo problema...
 
Ok gracias - He reducido drásticamente el error OrderModify 1 - sin embargo, todavía estoy recibiendo un poco de vez en cuando? Parece que es el MA_trail void? Además, ¿cómo puedo escribir correctamente "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 gracias - He reducido drásticamente el error OrderModify 1 - sin embargo, todavía estoy recibiendo un poco de vez en cuando? Parece que es el MA_trail void? Además, ¿cómo puedo escribir correctamente "If(Bid == OrderOpenPrice())?

Tus ojos no están sangrando lo suficiente...

Podrías hacer algo así:

!( MathAbs(FirstPrice - SecondPrice) > HalfAPoint )

¡cuidado con el !

Desde aquí: https://www.mql5.com/en/forum/136997/page4#781986

 
¿Sugiere esto en relación con el código anterior o en relación con "If(Bid == OrderOpenPrice())"?