[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 451

 
Vinin:

¿Por qué el proverbio inglés "great minds think alike" en ruso
corresponden a la frase "los tontos piensan igual"?

 
Vinin >>:

Наверно надо предварительно выбрать ордер.

Lo sé, he escrito antes en la página 445, pero sigo teniendo un problema.


Mi problema es llegar a un punto ridículo. Error en la función de cierre de la orden.

OrserClose(int tip){
if( tip==1){
for( i=0; i<OrdersTotal(); i++){
           if(true==OrderSelect( i, SELECT_BY_POS, MODE_TRADES)){
           if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderMagicNumber() == Magic){
           OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
               }
           }
         }  
}

Tengo un error (en diferentes terminales)

EURCHF,M5: Error de OrderClose 4107

EURCHF,M5: precio inválido 1.48566000 para la función OrderClose


si lo hago

OrderClose(OrderTicket(), OrderLots(),OrderClosePrice(),3, Violet);
OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),3,Violet);

el mismo error. Pero cuando escribo OrderClose(...) no en una función separada, sino en int start(), este error no se produce.

¿Cuál es el problema y cómo solucionarlo?



 
Urain писал(а) >>

¿Por qué el proverbio inglés "great minds think alike" en ruso
corresponden a "los tontos piensan igual"?

Entonces estamos de suerte.

 
T-G писал(а) >>

Lo sé, he escrito antes en la página 445, pero sigo teniendo un problema.

Mi problema es llegar a un punto ridículo. Error en la función de cierre de la orden.

Tengo un error (en diferentes terminales)

EURCHF,M5: Error de OrderClose 4107

EURCHF,M5: precio inválido 1.48566000 para la función OrderClose

si lo hago

el mismo error. Pero cuando escribo OrderClose(...) no en una función separada, sino en int start(), este error no se produce.

¿Cuál es el problema y cómo solucionarlo?

No lo sé, no lo sé. Siempre uso mi propia función para cerrar la orden.

Como ejemplo, éste.

//+------------------------------------------------------------------+
//|                                         Функция закрытия ордеров |
//|                                Copyright © 2010, Victor Nicolaev |
//|                                            e-mail: vinin@mail.ru |
//+------------------------------------------------------------------+
//| void Order_Close(int lMagic, int lOP=-1);                        |
//+------------------------------------------------------------------+
void Order_Close(int lMagic, int lOP=-1){
   bool res;
   GetLastError();
   for(int i = OrdersTotal() - 1;  i >= 0;  i--) {
      if (!OrderSelect( i, SELECT_BY_POS, MODE_TRADES))   continue;
      if (OrderSymbol() != Symbol())                     continue;
      if (OrderMagicNumber() != lMagic)                   continue;
      if (OrderType()!= lOP && lOP!=-1)                     continue;
      
      RefreshRates();
      double _ask      =MarketInfo(Symbol(),MODE_ASK);
      double  _bid     =MarketInfo(Symbol(),MODE_BID);
      double  _point   =MarketInfo(Symbol(),MODE_POINT);
      double  _digits  =MarketInfo(Symbol(),MODE_DIGITS);

      double ClosePrice=NormalizeDouble( iif(OrderType()==OP_BUY,_bid, _ask),_digits);
      res=OrderClose(OrderTicket(), OrderLots(), ClosePrice, 3, iif(OrderType()==OP_BUY, clCloseBuy, clCloseSell));
      if (! res) {
         int err=GetLastError();
         Print("Error(", err,") delete order ", NameOP[ lOP],": ", ErrorDescription( err));
      }
   }
}

Para utilizarlo se necesitan más funciones

//+------------------------------------------------------------------+
//|                                    Функция логического сравнения |
//|                                Copyright © 2010, Victor Nicolaev |
//|                                            e-mail: vinin@mail.ru |
//+------------------------------------------------------------------+
//| double iif(bool A, double B, double C);                          |
//+------------------------------------------------------------------+
double iif(bool A, double B, double C) {if( A) return( B); return( C); }
 

Ayuda con el problema de controlar los agujeros de la historia. Por favor, aconsejar sobre un mecanismo realmente de trabajo para el Asesor de Expertos para atrapar el error 4066.

Si no hay un control inequívoco sobre el procedimiento de carga de datos del historial, no tiene sentido operar con Asesores Expertos.

El riesgo de este tipo de operaciones simplemente tiende al infinito, sea cual sea la estrategia de negociación que se utilice.


Me ha sorprendido mucho que la solución a este problema la tenga que pensar el usuario por sí mismo y a través de un sitio.

Creo que la falta de apoyo claro del promotor en este tema es un puro montaje.

Creo que MetaQuotes podría publicar un conjunto de soluciones recomendadas y probadas para las preguntas y problemas más comunes.

 
MoneyJinn писал(а) >>

Creo que MetaQuotes podría publicar un conjunto de soluciones recomendadas y probadas para las preguntas y tareas comunes estándar.

El artículo "Gráficos sin agujeros". podría ayudar... https://www.mql5.com/ru/articles/1407

 

El tema es "cualquier pregunta" y no sólo sobre el código, ¿verdad?

Tengo una pregunta, o más bien quiero una opinión, ¿a dónde crees que llegará el precio?



 
T-G >>:

Тема же называется "любой вопрос" а не только по коду?

У меня вопрос, а точнее хочется узнать мнение, куда по вашему мнению двинется цена?

esta no es una pregunta para principiantes :)

 
Ayude a resolver este problema.
Si hay una función que divide un lote de gran tamaño en varios pedidos, por favor, compártala.

Gracias.




Razón de la queja: