Maldito error 130 al infierno - página 3

 
delcor wrote >>

Vangrosh

gracias por el aporte

me puedes ayudar a entender

es esto correcto

hago un EA con auto trail

if(OrderType()==OP_SELL && OrderSymbol()==Symbol())

{
si (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); // colocar un TP y un SL
}
if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) // coloca un TP
{
if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) // comprobar verdadero
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) // si es verdad modifica la orden
Print("Error_Modificar - ",GetLastError());
else str=StringConcatenate("\NMi número de entrada es ", OrderTicket(), " y mi configuración de stop loss es ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // nuevo código
}
}
}

Aquí está lo que escribí en otro post, explicando el enfoque diferente.

>>Aquí hay una solución fácil simplemente comprobando que el nuevo precio de stoploss es al menos 1 punto o mayor que el antiguo stoploss. Sólo hay que hacer lo contrario para una orden de venta.

      if (OrderType() == OP_BUY)
      {      
         if(Bid-OrderOpenPrice() > (Point* TrailingStop))
         {       
            double oldStopLoss = OrderStopLoss();
            double newStopLoss = Bid-Point* TrailingStop;
            double nextStopLoss = oldStopLoss + Point; // Adding 1 point to oldStopLoss, i.e. 76.78 to 76.79            
                       
            if( newStopLoss >= nextStopLoss) // checking that the new stoploss price is at least 1 point or greater then the old stoploss
            {                              
               OrderModify(OrderTicket(),OrderOpenPrice(), newStopLoss,0,0,Green);
               return;
            }
         }
      }


Aquí está la función completa que utilizo. Ahora que lo pienso podría haber utilizado un nombre var mejor que nextStopLoss, y también debería añadir la comprobación de errores a la OrderModify().

También mi función Trailing Stop está en un EA que puede tener múltiples órdenes abiertas al mismo tiempo, es por eso que tiene esos parámetros para que pueda actualizar el Trailing Stop en múltiples órdenes al mismo tiempo.

void CheckTrailingStop(int order_Ticket, int trailingStopValue)
{
   double oldStopLoss;
   double newStopLoss;
   double nextStopLoss;
   int _trailingStop = trailingStopValue;
   
   if ( order_Ticket < 0) return;
                                    
   if(OrderSelect( order_Ticket, SELECT_BY_TICKET, MODE_TRADES) == false)
   {
      Print("CheckTrailingStop() - OrderSelect returned the error of ", GetLastError());
      return;   
   }
         
   if (OrderType() == OP_BUY)
   {      
      if(Bid-OrderOpenPrice() > Point*_trailingStop)
      {       
         oldStopLoss = OrderStopLoss();
         newStopLoss = Bid-Point*_trailingStop;
         nextStopLoss = oldStopLoss + Point; // Adding 1 point to oldStopLoss, i.e. 76.78 to 76.79            
                    
         if( newStopLoss >= nextStopLoss)
         {                              
            OrderModify(OrderTicket(),OrderOpenPrice(), newStopLoss,0,0,Green);
            return;
         }
      }
   }
                                             
   if (OrderType() == OP_SELL)
   {               
      if(OrderOpenPrice()-Ask > Point*_trailingStop)
      {
         oldStopLoss = OrderStopLoss();
         newStopLoss = Ask+Point*_trailingStop;
         nextStopLoss = oldStopLoss - Point; // Subtracting 1 point from oldStopLoss, i.e. 76.78 to 76.77
                    
         if( newStopLoss <= nextStopLoss || (OrderStopLoss() == 0))
         {                              
            OrderModify(OrderTicket(),OrderOpenPrice(), newStopLoss,0,0,Green);
            return;
         }
      }
   }
}

Entonces en mi función start() tengo:

void start()
{                      
   if ( validTimePeriod == false) return;
   if ( validTrailingStop == false) return;
        
   //---- Start Main program ----
   Main();
   
   if ( EnableHedging == true)
   {
      HedgeStopLossCheck();
      CheckHedges();
   }
   
   if ( TrailingStop > 0) CheckTrailingStop( currentOrderTicket, TrailingStop);               
           
   CheckWaiting();
   
   GetOpenTradeLots();   
      
   CheckIfCurrentOrder_Closed();
}

Dejé las otras llamadas de función allí sólo para que puedas ver que me gusta dividir mi código en funciones específicas tanto como sea posible. Hace las cosas mucho más fáciles.

Buena suerte con tu EA.

 
vangrosh:

Aquí está lo que escribí en otro post, explicando el enfoque diferente.

>>Aquí hay una solución fácil simplemente comprobando que el nuevo precio de stoploss es al menos 1 punto o mayor que el antiguo stoploss. Sólo hay que hacer lo contrario para una orden de venta.


Aquí está la función completa que utilizo. Ahora que lo pienso podría haber utilizado un nombre var mejor que nextStopLoss, y también debería añadir la comprobación de errores a la OrderModify().

También mi función Trailing Stop está en un EA que puede tener múltiples órdenes abiertas al mismo tiempo, es por eso que tiene esos parámetros para que pueda actualizar el Trailing Stop en múltiples órdenes al mismo tiempo.

Entonces en mi función start() tengo:

Dejé las otras llamadas de función allí sólo para que puedas ver que me gusta dividir mi código en funciones específicas tanto como sea posible. Hace las cosas mucho más fáciles.

Buena suerte con su EA.

gracias - se ve bien

así que coloca su función start() en la parte inferior de la ea

 
Yo también tengo un problema de error espantoso. La cosa es que no tengo stop loss ni take profit, simplemente falla al colocar la orden pendiente, a muchos pips del mercado donde no debería haber problema...
 
TheEconomist wrote >>
Yo también tengo un problema con el terrible error. La cosa es que no tengo stop loss ni take profit, simplemente falla al colocar la orden pendiente, a muchos pips del mercado donde no debería haber problema...

El problema con el good'ole 130 es que indica (uno de) una clase o grupo de errores y no lo lleva a uno a ninguna solución instantánea..
Usted puede incluso arreglar un problema y su todavía allí

¿Lo único que ocurre aquí es un error tipográfico?

¿Quizá está introduciendo una orden Buy Limit por encima de Ask, cuando lo que pretendía era una orden Buy Stop?

FWIW

-BB-

 
BarrowBoy:

El problema con el buen 'ole 130 es que indica (uno de) una clase o grupo de errores y no lo lleva a uno a cualquier solución instantánea..
Usted puede incluso arreglar un problema y su todavía allí

¿Lo único que ocurre aquí es un error tipográfico?

¿Quizá está introduciendo una orden Buy Limit por encima de Ask, cuando lo que pretendía era una orden Buy Stop?

FWIW

-BB-

Tengo una función que selecciona el tipo de operación:

int SellOperation(double ToCompare)
  {
   int op;
   if (Bid> ToCompare)
     op=OP_SELLSTOP;
   if (Bid== ToCompare)
     op=OP_SELL;
   if (Bid< ToCompare)
     op=OP_SELLLIMIT;        
   return( op);   
  }
  
  
int BuyOperation(double ToCompare)
  { 
   int op;
   if (Ask> ToCompare)
     op=OP_BUYLIMIT;
   if (Ask== ToCompare)
     op=OP_BUY;
   if (Ask< ToCompare)
     op=OP_BUYSTOP;
   return( op);
  }

int WhatOperation(int operation, double ToCompare)
  { 
   if ( operation==OP_BUY)
     return( BuyOperation( ToCompare));
   if ( operation==OP_SELL)
     return( SellOperation( ToCompare));     
  }       

así:

09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Diario: Apertura de venta en el nivel 2 para el pilón 0 @ 0.8024 mientras que la oferta = 0.8016
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Diario: OrderSend error 130
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Diario: ReliableOrderSend error : 130 : Invalid stops.


 

Hola TheEconomist

sólo algunas cosas rápidas...

1. No veo ninguna normalización en ToCompare, a no ser que se garantice que WhatOperation() tiene normalización real dada.

2. 2. Las comparaciones dobles tienen problemas - por ejemplo, 'Fallo de declaración condicional... [Al final] si ( 1.4225 > 1.4225) no es TRUE!!!!!!'

3. ¿Sigues las indicaciones de https://book.mql4.com/appendix/limits?

Saludos

 

He estado estudiando este post con la esperanza de resolver mi error en 'Quick Question ' con 130. La función de envío de pedidos está ahí, así como los asientos con la función de impresión, ¿alguno de vosotros sabe lo que está pasando?

Gracias,

Bauer Boy

 

.

como se ve en .../24681

if( isBuying ) 
{ 
  if( stopLoss > 0)
  ACCTSL = Ask - ( stopLoss*Point* MyDig);

  if( takeProfit > 0)
  ACCTTP = Ask + ( takeProfit*Point* MyDig);
  // Buy
  ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, ACCTSL, ACCTTP, 
  nameEA, 16384,0,Red); 
  Print ("Stop Loss Value", ACCTSL);
  Print ("Take Profit Value", ACCTTP);

1. StopLevel= MarketInfo(Symbol(),MODE_STOPLEVEL);

SL,TP deben estar al menos a puntos de StopLevel de Bid

Ver abajo (**)


2. ACCTxx = NormalizeDouble(Ask ..(..), Digits);


3. Print("Oferta=",DoubleToString(Oferta, Dígitos),", Oferta=",DoubleToString(Oferta,Dígitos));


4. Print ("Stop Loss Value",DoubleToString( ACCTSL, Digits),", stopLoss=",stopLoss);
5. Print ("Take Profit Value", DoubleToString(ACCTTP, Digits),", takeProfit=",takeProfit);

¿Por qué DoubleToString()? Print() solo muestra CUATRO DIGITOS



Porcierto, yo también pondría en algún sitio al menos una vez Print("MyDig=",MyDig); ¿Por qué? Puede parecer una nimiedad, pero se sorprendería de las diversiones que rodean a cosas tan simples.


5. TODOS sus problemas pueden ser fácilmente resueltos al tener toda la información disponible a su alcance y mostrarla.

Luego, con papel + lápiz a la vieja usanza se puede ver dónde están los malentendidos.



(**)

Referencia: https://book.mql4.com/appendix/limits

Limitación de la distancia mínima del StopLevel.

No se realizará una operación de trading si se interrumpe alguna de las siguientes condiciones.

Tipo de orden Precio de apertura StopLoss (SL) TakeProfit (TP)
Comprar
La modificación está prohibida Bid-SL StopLevel TP-Oferta StopLevel
Venta
La modificación está prohibida SL-Ask StopLevel Ask-TP StopLevel
BuyLimit
Ask-OpenPrice StopLevel OpenPrice-SL StopLevel TP-Precio abierto StopLevel
SellLimit
OpenPrice-Bid StopLevel SL-Precio abierto ≥StopLevel OpenPrice-TP StopLevel
BuyStop
PrecioAbierto-Pedir ≥NivelStop OpenPrice-SL StopLevel TP-Precio abierto StopLevel
SellStop
Bid-Precio Abierto StopLevel SL-Precio abierto StopLevel OpenPrice-TP StopLevel

 
fbj wrote >>

.

como se ve en .../24681

1. StopLevel= MarketInfo(Symbol(),MODE_STOPLEVEL);

SL,TP deben estar al menos a puntos de StopLevel de Bid

Ver abajo (**)


2. ACCTxx = NormalizeDouble(Ask ..(..), Digits);


3. Print("Oferta=",DoubleToString(Oferta, Dígitos),", Oferta=",DoubleToString(Oferta,Dígitos));


4. Print ("Stop Loss Value",DoubleToString( ACCTSL, Digits),", stopLoss=",stopLoss);
5. Print ("Take Profit Value", DoubleToString(ACCTTP, Digits),", takeProfit=",takeProfit);

¿Por qué DoubleToString()? Print() solo muestra CUATRO DIGITOS



Porcierto, yo también pondría en algún sitio al menos una vez Print("MyDig=",MyDig); ¿Por qué? Puede parecer una nimiedad, pero te sorprendería la gracia que rodea a cosas tan sencillas.


5. TODOS sus problemas pueden ser fácilmente resueltos al tener toda la información disponible a su alcance y mostrarla.

Luego, con papel + lápiz a la vieja usanza se puede ver dónde están los malentendidos.



(**)

Referencia: https://book.mql4.com/appendix/limits

Limitación de la distancia mínima del StopLevel.

No se realizará una operación de trading si se interrumpe alguna de las siguientes condiciones.

Tipo de orden Precio de apertura StopLoss (SL) TakeProfit (TP)
Comprar
La modificación está prohibida Bid-SL StopLevel TP-Oferta StopLevel
Venta
La modificación está prohibida SL-Ask StopLevel Ask-TP StopLevel
BuyLimit
Ask-OpenPrice StopLevel OpenPrice-SL StopLevel TP-Precio abierto StopLevel
SellLimit
OpenPrice-Bid StopLevel SL-Precio abierto ≥StopLevel OpenPrice-TP StopLevel
BuyStop
PrecioAbierto-Pedir ≥NivelStop OpenPrice-SL StopLevel TP-Precio abierto StopLevel
SellStop
Bid-Precio Abierto StopLevel SL-Precio abierto StopLevel OpenPrice-TP StopLevel

Realmente no puedo decir lo que está pasando y por qué está sucediendo esto

2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: OrderSend (Trender Beta Test ) failed with error #130

2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: MyDig=10

2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: Take Profit Value1.43155, takeProfit=110

2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: Stop Loss Value1.42255, stopLoss=200

2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: Bid=1.44255, Ask=1.44229







 
Bauer_Boy wrote >>

Realmente no puedo decir lo que está pasando y por qué está sucediendo esto

Realmente es el momento de mostrar todo el código. Si usted duda, puede utilizar PM.

Veo que tienes TP más bajo entonces Bid

Razón de la queja: