Errores, fallos, preguntas - página 1030

 
Al_key:

Y también he estado recibiendo barshift usando la biblioteca del compositor. ¿No hay herramientas incorporadas en el Metatrader?

En realidad iBarShift() en MT4 probablemente funciona de la misma manera que en la biblioteca del compilador, pero sería mejor tenerlo incorporado - funcionaría más rápido (porque está en C++).
 
MetaDriver:

Su caso se trata con un pequeño resbalón.

El mío es peor. (Por cierto, tu caso sin Slip solía funcionar, dejó de hacerlo hace unas semanas).

El mismo esquema dejó de funcionar sin resbalones espeluznantes en otras cartas (no actuales):

Código desde aquí: https://www.mql5.com/ru/code/224

Búhos instalados, ver.

En la actual lanzo estándar. AMA en el gráfico, recalculación de poke (en el sueño de 0 a 2350) - me caigo a M1 y nunca volver. Después de unos segundos. Aparece AMA, y eso es todo.

Intento usar banderas (¿debo almacenar dos banderas, la actual y la m1? Si ya he estado usando la actual (bandera) y ahora estoy usando la m1 (bandera 2), entonces...).

pero lo dudo... Las garrapatas del lunes vendrán antes de que vuelva a la actual :)

upd sí, tengo un centenar de objetos en la carta, y además AMA, es decir, es muy pesado.

 
MetaDriver:

"Tenemos que hacerlo, Fedya. Tenemos que hacerlo".

(c) Shurik.

--

Este error se produce, por ejemplo, si la memoria para el buffer dinámico no está asignada (en este caso, en ActualBuffer). Este fragmento de código no lo aclara.

Aquí.

¿Y cómo se asigna la memoria para el buffer dinámico?

Supongo que, cuando lo sepa, la pregunta desaparecerá.

Aquí está todo el código

#include <TimeSeries.mqh>

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots   3
//--- plot Actual
#property  indicator_label1  "Actual"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrLime
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- plot Consensus
#property  indicator_label2  "Consensus"
#property  indicator_type2   DRAW_LINE
#property  indicator_color2  clrPeachPuff
#property  indicator_style2  STYLE_SOLID
#property  indicator_width2  1
//--- plot Previous
#property  indicator_label3  "Previous"
#property  indicator_type3   DRAW_LINE
#property  indicator_color3  clrLightCyan
#property  indicator_style3  STYLE_SOLID
#property  indicator_width3  1
//--- indicator buffers
double         ActualBuffer[];
double         ConsensusBuffer[];
double         PreviousBuffer[];
//--- indicator vars
string sDatetime;
string sActual;
string sConsensus;
string sPrevious;
int file_handle;
int barshift;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ActualBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ConsensusBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,PreviousBuffer,INDICATOR_DATA);
   file_handle = FileOpen("CSV - макроэкономика и госкорпстат/Existing Home Sales Change.csv",FILE_READ|FILE_CSV|FILE_ANSI,',');
   while(!FileIsEnding(file_handle))
        {
         sDatetime  = FileReadString(file_handle);
         sActual    = FileReadString(file_handle);
         sConsensus = FileReadString(file_handle);
         sPrevious  = FileReadString(file_handle);
         
         barshift = iBarShift(Symbol(), Period(), datetime(formatdatetime(sDatetime)), false);
         if(StringToDouble(formatstring(sActual)) > 0 && StringToDouble(formatstring(sActual)) < 10000) ActualBuffer[barshift] = StringToDouble(formatstring(sActual));
         Print(formatdatetime(sDatetime));
         Print("iBarShift = ", barshift, " Datetime = ", formatstring(sDatetime), " sActual = ", sActual, " sConsensus = ", sConsensus, " sPrevious = ", sPrevious);
        }
    
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+
//--- Функции форматирования
string formatstring(string strparam)
   {
      string result = StringSubstr(strparam,1, StringLen(strparam) - 2);
      return(result);
   }
string formatdatetime(string strparam)
   {
      string result = StringSubstr(strparam, 1, 4) + "." + StringSubstr(strparam, 5, 2) + "." + StringSubstr(strparam, 7, 11);
      
      return(result);
   }
 
Al_key:

Aquí.

¿Cómo se asigna la memoria para un buffer dinámico?

Supongo que cuando lo sepa, la pregunta desaparecerá.

Aquí está todo el código

Ps.

He leído sobre Array Resize allí... aquí hay una copia

"Después de enlazar, un buffer de array dinámico []será indexado como en los arrays regulares, incluso si el array a enlazar está preconfigurado para ser indexado como en timeseries. Si se quiere cambiar el orden de acceso a los elementos del array de indicadores, se debe aplicar la función ArraySetAsSeries() después de vincular el array mediante la función SetIndexBuffer(). Hay que tener en cuenta que las matrices dinámicas que han sido asignadas como búferes indicadores por la función SetIndexBuffer() no deben ser redimensionadas. En el caso de los búferes indicadores, todas las operaciones de redimensionamiento son realizadas por el subsistema de ejecución del terminal."

Estoy confundido.

 
Silent:
Guardar el perfil configurado por defecto Archivo - Perfiles - Por defecto
Por defecto, todavía no hay datos para cargar. La primera vez en un par de horas que todo se fue al garete.
 
Al_key:

Aquí.

¿Cómo se asigna la memoria para un buffer dinámico?

Supongo que cuando lo sepa, la pregunta desaparecerá.

Este es el código completo

INDICATOR_DATA son los datos a dibujar. Este buffer (tamaño) es monitoreado por la terminal (por rates_total, según entiendo).

Añade búferes para los cálculos intermedios (INDICATOR_CALCULATIONS). Para ellos, establece el tamaño.

PS Tengo #include <TimeSeries.mqh> no puede "abrir por alguna razón, no compila.

La actualización del lunes debe esperar, algo está mal aquí.

 
Silent:

INDICATOR_DATA son los datos a dibujar. Este buffer (tamaño) es monitoreado por la terminal (por rates_total, según tengo entendido).

Añade búferes para los cálculos intermedios (INDICATOR_CALCULATIONS). Para ellos, establece el tamaño.

PS Tengo #include <TimeSeries.mqh> no puede "abrir por alguna razón, no compila.

La actualización del lunes debe esperar, algo está mal aquí.

Ya he intentado cambiar, pero sigue el mismo error. Intentaré al menos poner los valores en un array normal, quizás algo funcione.
 
Al_key:
Intenté cambiarlo, pero sigue dando el mismo error. Intentaré al menos poner los valores en un array normal, quizás algo funcione.

Aquí hay uno sencillo que funciona. En INDICATOR_DATA escribimos desde INDICATOR_CALCULATIONS.

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   1
//--- plot Label1
#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrOrangeRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
input string   s="EURUSD";
input ENUM_TIMEFRAMES      tf;          // D1
input int      countBars=100;          // count
//--- put parameters
int   copied,i;
//--- indicator buffers
double         Label1Buffer[];
//--- buffers
double         p_Symbol[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   SetIndexBuffer(1,p_Symbol,INDICATOR_CALCULATIONS);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---
   if(prev_calculated==0)
     {
      ArrayInitialize(Label1Buffer,EMPTY_VALUE);
      ArrayInitialize(p_Symbol,EMPTY_VALUE);
      ArraySetAsSeries(Label1Buffer,true);
      ArraySetAsSeries(p_Symbol,true);
      ArraySetAsSeries(price,true);
     };
   ArrayCopy(p_Symbol,price,0,0,countBars);
   if(_LastError!=0) {Print(_LastError); return(prev_calculated);};
   if(_LastError==0)
     {
      for(i=countBars;i>0;i--)
        {
         Label1Buffer[i]=p_Symbol[i];
         Print("limitBars i = "+IntegerToString(i));
        };
     };
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
Silent:

INDICATOR_DATA son los datos a dibujar. Este buffer (tamaño) es monitoreado por la terminal (por rates_total, según tengo entendido).

Añade búferes para los cálculos intermedios (INDICATOR_CALCULATIONS). Para ellos, establece el tamaño.

PS Tengo #include <TimeSeries.mqh> no puede "abrir por alguna razón, no compila.

El lunes de actualización debe esperar, algo no está bien aquí.

Tome aquí: https://www.mql5.com/ru/code/1008

Acabo de encontrarlo, por eso no he sentido el código todavía. Y no funcionará todavía - el público aquí me lleva a comprar.

Creo que todo funcionará, si el código del problema se moverá de OnInit() a OnCalculate(). Durante mucho tiempo he conocido la característica de Five - no cualquier código en OnInit funciona bien. Es probable que la verdadera autodistribución de los buffers registrados a través de SetIndexBuffer() se garantiza que termina sólo después de la salida de OnInit(), porque debe suceder en el fondo (es automático, ¿no?).

TimeSeries - Библиотека функций для работы с таймсериями
TimeSeries - Библиотека функций для работы с таймсериями
  • votos: 12
  • 2012.08.24
  • Andrey Khatimlianskii
  • www.mql5.com
Библиотека функций для работы с таймсериями: iBars, iTime, iOpen, iHigh, iLow, iClose, iVolume, iHighest, iLowest, iBarshift. Для всех функций доступен краткий вариант вызова (с символом и периодом текущего графика).
 

Observo que sólo 3 de los 8 agentes pueden ejecutarse al mismo tiempo cuando se obtienen tareas de la nube.
Aunque si ejecuta su prueba en paralelo, los otros agentes también están habilitados.

¿Se supone que es así?