Errores, fallos, preguntas - página 347

 
Así que es un error en el terminal o en el historial del servidor. Pero lo más probable es que sea el terminal, ya que es más probable que se hayan recuperado los informes del historial del servidor.
 

Urain:
Так что это или баг терминала, или серверной истории. Но скорее терминала, тк отчёты на чемпе скорее с серверной истории восстанавливались.

Es curioso. No estaba prestando atención. Claramente explicado.
 
Yedelkin:
Es curioso. No estaba prestando atención. Explicado con claridad.
Eso es, quién se divierte y quién tiene dos semanas de coger el gusanillo :o)
 
Lo encontré, por defecto ordena por tiempo y necesita ordenar por número de transacción. Está bien entonces.
 
Urain:
Lo encontré, por defecto ordena por tiempo y necesita ordenar por número de transacción. Entonces todo es correcto.

Entonces, ¿no hay errores? El objetivo es contar/clasificar las operaciones por número de billete, no por tiempo.

Sólo estaba revisando superficialmente los informes, no calculando los estados de posición.

 
Renat:

Entonces, ¿no hay errores? El objetivo es contar/clasificar las transacciones por ticket y no por tiempo.

Sólo estaba revisando superficialmente los informes, no calculando los estados de posición.

Exactamente, lo que ocurre es que cuando se guarda un informe no se automatiza este proceso y hay que vigilarlo cuidadosamente. No creo que todos los usuarios presten atención a esto y como resultado habrá errores al analizar el informe.

ZS He añadido la clasificación después de analizar el informe. A mí me ha funcionado, pero auguro que más de un programador lo pasará mal con esta función.

 

Durante la optimización, el nombre del parámetro de optimización se muestra en la esquina superior derecha del gráfico de optimización.


Al observar la optimización, esta inscripción es molesta porque el nuevo máximo siempre está oculto detrás de esta inscripción.

Renat, ¡muévelo a la esquina superior izquierda! O a la inferior derecha. O abajo a la izquierda... En cualquier lugar, sólo quítalo de la esquina superior derecha, por el amor de Dios. ¡Por favor! :)

// O al menos hacerlo pálido y ponerlo de fondo para que no tape la información.

 
MetaDriver:

Durante la optimización, el nombre del parámetro de optimización se muestra en la esquina superior derecha del gráfico de optimización.

Al observar la optimización, esta inscripción es molesta porque el nuevo máximo siempre está oculto detrás de esta inscripción.

Renat, ¡muévelo a la esquina superior izquierda! O a la inferior derecha. O abajo a la izquierda... En cualquier lugar, sólo quítalo de la esquina superior derecha, por el amor de Dios. ¡Por favor! :)

// O al menos hacerlo pálido y ponerlo de fondo para que no tape la información.

Abajo a la izquierda, y como fondo.
 

Por favor, dígame en qué me he equivocado. Estoy intentando escribir un sencillo script que borre las posiciones y las órdenes pendientes en el instrumento actual. Aquí:

//+------------------------------------------------------------------+
//|                                                        clean.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlTick current_tick;
   MqlTradeRequest close_request;
   MqlTradeResult  close_result;
   SymbolInfoTick(_Symbol,current_tick);
   int counter01;
   while(check_position()==true);
     {
      PositionSelect(_Symbol);
      close_request.action=TRADE_ACTION_DEAL; close_request.symbol=_Symbol; close_request.volume=PositionGetDouble(POSITION_VOLUME); close_request.type_filling=ORDER_FILLING_AON;
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         close_request.price=current_tick.bid; close_request.type=ORDER_TYPE_SELL;
        }
      else
        {
         close_request.price=current_tick.ask; close_request.type=ORDER_TYPE_BUY;
        }
      OrderSend(close_request,close_result);
     }
   do
     {
      for(counter01=1; counter01<=OrdersTotal(); counter01++)
        {
         close_request.order=OrderGetTicket(counter01-1);
         if(OrderGetString(ORDER_SYMBOL)==_Symbol)
           {
            close_request.action=TRADE_ACTION_REMOVE;
            OrderSend(close_request,close_result);
           }
        }
     }
   while(check_order()==true);
   if(GetLastError()!=0)
      Print("ошибка код ",GetLastError()," функция ",__FUNCTION__," строка ",__LINE__);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool check_position() // функция проверяет наличие позиции
  {
   int counter01;
   bool position_exsist=false;
   for(counter01=0; counter01<PositionsTotal(); counter01++)
     {
      if(PositionGetSymbol(counter01)==_Symbol)
        {
         position_exsist=true;
         break;
        }
     }
   return(position_exsist);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool check_order() // функция проверяет наличие ордеров
  {
   int counter01;
   bool order_exsist=false;
   for(counter01=0; counter01<OrdersTotal(); counter01++)
     {
      OrderGetTicket(counter01);
      if(OrderGetString(ORDER_SYMBOL)==_Symbol)
        {
         order_exsist=true;
         break;
        }
     }
   return(order_exsist);
  }
//+------------------------------------------------------------------+
El script se cuelga cuando hay una posición. Al depurarlo, descubrí que se congela al comprobar la posición. Cuando la condición del bucle while(check_position()==true) comienza a comprobarse, el control se pasa a check_position() y la primera vez que la función se ejecuta normalmente, devuelve true. Pero entonces el cuerpo del bucle no se ejecuta; comienza a comprobar la condición de nuevo y el control llega a check_position() y tras el operador return(order_exsist) no vuelve a la condición del bucle; va al principio de la función check_position(). Por favor, dígame en qué me he equivocado.
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
  • www.mql5.com
Основы языка / Операторы / Оператор возврата return - Документация по MQL5
 
molotkovsm:

Por favor, dígame en qué me he equivocado. Estoy intentando escribir un sencillo script que borre las posiciones y las órdenes pendientes en el instrumento actual. Aquí está:

El script se cuelga cuando hay una posición. Al depurarlo, descubrí que se congela al comprobar la posición. Cuando la condición del bucle while(check_position()==true) comienza la comprobación, el control se pasa a la función check_position() y la primera vez que la función se ejecuta normalmente, devuelve true. Pero entonces el cuerpo del bucle no se ejecuta; comienza a comprobar la condición de nuevo y el control llega a check_position() y tras el operador return(order_exsist) no vuelve a la condición del bucle; va al principio de la función check_position(). Por favor, dígame en qué debo estar equivocado.

Si hay una posición, obtendrá un bucle infinito porque

while(check_order()==true);

Es igual a

while(check_order()==true)
{
 //  пустой оператор
}
No hay forma de salir del bucle en el código porque no hay ruptura en el cuerpo del operador;