Características del lenguaje mql5, sutilezas y técnicas - página 109

 
Taras Slobodyanik:

lógico - es un golpe.

Escribió la información sin evaluar la lógica. Si está afectado, el PositionID debería haber cambiado de la misma manera.

No va a cambiar ahora. Si se trata de un error, ¡sería genial!


Por lo tanto, una pregunta. ¿Debe la transacción DEAL_ENTRY_INOUT cambiar el PositionID a DEAL_ORDER?

Yo creo que sí. Este comportamiento sería muy conveniente/correcto.
 
fxsaber:

Escribió la información sin evaluar la lógica. Sin embargo, si se ve afectado, el PositionID debería haber cambiado de la misma manera.

No va a cambiar ahora. Si se trata de un error, ¡sería genial!


Por lo tanto, una pregunta. ¿Debe la transacción DEAL_ENTRY_INOUT cambiar el PositionID a DEAL_ORDER?

Dice que no. https://www.mql5.com/ru/docs/constants/tradingconstants/positionproperties#enum_position_property_integer

Aunque se escribió antes que sí, y se cambió el ID de la posición.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Тикет позиции. Уникальное число, которое присваивается каждой вновь открытой позиции. Как правило, соответствует тикету ордера, в результате которого она была открыта, за исключением случаев изменения тикета в результате служебных операций на сервере. Например, начисления свопов переоткрытием позиции. Для нахождения ордера, которым была открыта...
 
Andrey Barinov:

Dice que no. https://www.mql5.com/ru/docs/constants/tradingconstants/positionproperties#enum_position_property_integer

Quizás haya alguna buena razón para ello. Desde mi punto de vista, no me parece correcto en absoluto.

Aunque antes se escribió que sí, y se cambió el ID de posición.

Pido a los promotores que aclaren la situación. Cuando el PositionID cambia, entonces después de cinco volteos, la pestaña de Historial de Operaciones en la vista de Posiciones mostrará cinco posiciones.

Ahora (el PositionID no cambia durante un giro) sólo se muestra siempre una posición. Esta es, por decirlo suavemente, una solución extraña.

 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Nueva versión de MetaTrader 5 build 1930: Ventanas de gráficos flotantes y bibliotecas .Net en MQL5

fxsaber, 2018.11.09 16:19

En el modo "por ticks reales", el Probador genera las barras de forma independiente, a la llegada de los ticks. Por esta razón, el historial de barras de un símbolo personalizado en el Terminal y en el Comprobador puede ser muy diferente.

 
A menudo sucede que después de compilar el EA, se restablecen los ajustes del Probador, si este EA fue seleccionado previamente en él. Esto es molesto, por decir lo menos. Después de cada compilación, tenemos que ir al árbol de Asesores Expertos y buscar nuestro EA. Si alguien no lo sabe, hay una receta para que el Probador no se reinicie. Debe ejecutar el Asesor Experto una vez en modo de depuración en el historial - CTRL+F5. Después, cualquier recompilación no afectará a la configuración del probador.
 
fxsaber:
Nos hemos dado cuenta de que los ajustes del probador a menudo se restablecen después de la compilación, si este Asesor Experto ha sido previamente seleccionado en él. Esto es molesto, por decir lo menos. Después de cada compilación, tenemos que ir al árbol de Asesores Expertos y buscar nuestro EA. Si alguien no lo sabe, hay una receta para que el Probador no se reinicie. Debe ejecutar el Asesor Experto una vez en modo de depuración en el historial - CTRL+F5. Después, cualquier recompilación no afectará a la configuración del probador.


Lo mismo, lo noté ayer.

Lo arreglé así: Después de compilar la nueva versión (Nuevo nombre de archivo) hay que reiniciar el terminal. - Tal vez no actualiza mqlcache

Después de eso, el probador no se restablece al archivo anterior durante la compilación.


Este problema ha aparecido varias veces antes y luego ha desaparecido. Luego reapareció de nuevo....

Z.I. no leyó el significado de tus palabras, y estabas aconsejando en vez de preguntando...

 
Los comentarios no relacionados con este tema han sido trasladados a "Cualquier pregunta de los novatos en MQL4, ayuda y discusión sobre algoritmos y códigos".
 

¿Alguien aquí? Compruebe el script de descarga de la historia...

¿Soy el único que se muere de frío? El guión está sacado de la ayuda...

//+------------------------------------------------------------------+ 
//|                                              TestLoadHistory.mq5 | 
//|                        Copyright 2009, MetaQuotes Software Corp. | 
//|                                              https://www.mql5.com | 
//+------------------------------------------------------------------+ 
#property copyright "2009, MetaQuotes Software Corp." 
#property link      "https://www.mql5.com" 
#property version   "1.02" 
#property script_show_inputs 

//--- input parameters 

//+------------------------------------------------------------------+ 
//| Script program start function                                    | 
//+------------------------------------------------------------------+ 
void OnStart()
  {



   int      all_symbols=SymbolsTotal(false);   string  sym_name="";
   Print("Load symbols ",all_symbols);

   for(int k=0;k<all_symbols;k++)
      if((sym_name=SymbolName(k,false))!="")
        {
         SymbolSelect(sym_name,true);

         Print(k," Symbol name ",sym_name);

         int res=CheckLoadHistory(sym_name,PERIOD_M1,(TimeCurrent()-60*60*24*5));

         switch(res)
           {
            case -1 : Print("Unknown symbol ",sym_name);             break;
            case -2 : Print("Requested bars more than max bars in chart ",sym_name); break;
            case -3 : Print("Program was stopped ",sym_name);                        break;
            case -4 : Print("Indicator shouldn't load its own data ",sym_name);      break;
            case -5 : Print("Load failed ",sym_name);                                break;
            case  0 : Print("Loaded OK ",sym_name);                                  break;
            case  1 : Print("Loaded previously ",sym_name);                          break;
            case  2 : Print("Loaded previously and built ",sym_name);                break;
            default : Print("Unknown result ",sym_name);
           }

         datetime first_date;
         SeriesInfoInteger(sym_name,PERIOD_M1,SERIES_FIRSTDATE,first_date);
         int bars=Bars(sym_name,PERIOD_M1);
         Print("First date ",first_date," - ",bars," bars");
        }
//--- 

//--- 
  }
//+------------------------------------------------------------------+ 
//|                                                                  | 
//+------------------------------------------------------------------+ 
int CheckLoadHistory(string symbol,ENUM_TIMEFRAMES period,datetime start_date)
  {
   datetime first_date=0;
   datetime times[100];
//--- check symbol & period 
   if(symbol==NULL || symbol=="") symbol=Symbol();
   if(period==PERIOD_CURRENT)     period=Period();
//--- check if symbol is selected in the MarketWatch 
   if(!SymbolInfoInteger(symbol,SYMBOL_SELECT))
     {
      if(GetLastError()==ERR_MARKET_UNKNOWN_SYMBOL) return(-1);

      SymbolSelect(symbol,true);
     }
//--- check if data is present 
   SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date);
   if(first_date>0 && first_date<=start_date) return(1);
//--- don't ask for load of its own data if it is an indicator 
   if(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR && Period()==period && Symbol()==symbol)
      return(-4);
//--- second attempt 
   if(SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date))
     {
      //--- there is loaded data to build timeseries 
      if(first_date>0)
        {
         //--- force timeseries build 
         CopyTime(symbol,period,first_date+PeriodSeconds(period),1,times);
         //--- check date 
         if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
            if(first_date>0 && first_date<=start_date) return(2);
        }
     }
//--- max bars in chart from terminal options 
   int max_bars=TerminalInfoInteger(TERMINAL_MAXBARS);
//--- load symbol history info 
   datetime first_server_date=0;
   while(!SeriesInfoInteger(symbol,PERIOD_M1,SERIES_SERVER_FIRSTDATE,first_server_date) && !IsStopped())
      Sleep(5);
//--- fix start date for loading 
   if(first_server_date>start_date) start_date=first_server_date;
   if(first_date>0 && first_date<first_server_date)
      Print("Warning: first server date ",first_server_date," for ",symbol,
            " does not match to first series date ",first_date);
//--- load data step by step 
   int fail_cnt=0;
   while(!IsStopped())
     {
      //--- wait for timeseries build 
      while(!SeriesInfoInteger(symbol,period,SERIES_SYNCHRONIZED) && !IsStopped())
         Sleep(5);
      //--- ask for built bars 
      int bars=Bars(symbol,period);
      if(bars>0)
        {
         if(bars>=max_bars) return(-2);
         //--- ask for first date 
         if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
            if(first_date>0 && first_date<=start_date) return(0);
        }
      //--- copying of next part forces data loading 
      int copied=CopyTime(symbol,period,bars,100,times);
      if(copied>0)
        {
         //--- check for data 
         if(times[0]<=start_date)  return(0);
         if(bars+copied>=max_bars) return(-2);
         fail_cnt=0;
        }
      else
        {
         //--- no more than 100 failed attempts 
         fail_cnt++;
         if(fail_cnt>=100) return(-5);
         Sleep(10);
        }
     }
//--- stopped 
   return(-3);
  }
//+------------------------------------------------------------------+ 
//| Возвращает строкое значение периода                              | 
//+------------------------------------------------------------------+ 
string GetPeriodName(ENUM_TIMEFRAMES period)
  {
   if(period==PERIOD_CURRENT) period=Period();
//--- 
   switch(period)
     {
      case PERIOD_M1:  return("M1");
      case PERIOD_M2:  return("M2");
      case PERIOD_M3:  return("M3");
      case PERIOD_M4:  return("M4");
      case PERIOD_M5:  return("M5");
      case PERIOD_M6:  return("M6");
      case PERIOD_M10: return("M10");
      case PERIOD_M12: return("M12");
      case PERIOD_M15: return("M15");
      case PERIOD_M20: return("M20");
      case PERIOD_M30: return("M30");
      case PERIOD_H1:  return("H1");
      case PERIOD_H2:  return("H2");
      case PERIOD_H3:  return("H3");
      case PERIOD_H4:  return("H4");
      case PERIOD_H6:  return("H6");
      case PERIOD_H8:  return("H8");
      case PERIOD_H12: return("H12");
      case PERIOD_D1:  return("Daily");
      case PERIOD_W1:  return("Weekly");
      case PERIOD_MN1: return("Monthly");
     }
//--- 
   return("unknown period");
  }
//+------------------------------------------------------------------+
 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Situación poco clara cuando se activan las órdenes pendientes.

fxsaber, 2018.11.26 13:37

También hay una situación como ésta:

  1. Se ha colocado una orden de mercado abriendo una posición y OrdersTotal ha aumentado en uno.
  2. Se ejecutó y OrdersTotal disminuyó en uno, pero PositionsTotal no aumentó en uno. En otras palabras, hay una posición, pero el terminal no lo sabe.

Por ejemplo, no hay posiciones ni órdenes - PositionsTotal = 0, OrdersTotal = 0.

Se establece una orden de mercado. PosicionesTotal = 0, PedidosTotal = 1.

La orden de mercado se ejecuta - OrdersTotal = 0. ¡Pero PositionsTotal = 0!

 
Duración de la ejecución
PositionSelectByTicket(OrderGetInteger(ORDER_TICKET));

de tal manera que PositionsTotal puede (no es difícil de reproducir) cambiar.


Por ejemplo, PositionsTotal devuelve cero justo antes de PositionsSelectBytTicket, que devuelve true.