¿Cómo se algoritmiza la detección de los grupos de alimentación MA? - página 15

 

¡Pregunta aclarada, el error estaba en añadir más parámetros de control a la clase al descargar en el EA!

Buenos días, por favor, aconséjeme: ¿qué es lo que no he captado?

He descargado los datos en .bat, y luego los cargo, pero sólo la primera entrada es correcta, luego los datos no coinciden.


El significado del código es el siguiente

indicador

- Rellene los nuevos datos si están en el archivo.

el asesor

- Volcar datos a una clase.


En indicador se sube como -

//+------------------------------------------------------------------+
//| Выгружаю данные с файла если он есть                             |
//+------------------------------------------------------------------+
void TextCsv0(int size)
  {
   ArrayFree(cand_buff);
   ArrayResize(cand_buff,0);
   long count=FileLoad("test.bin",cand_buff);
   if(count!=-1)
     {
      for(int i=0; i<count; i++)
         PrintFormat("%s\t%G\t%G\t%G\t%G\t%G\t%G\t%G\t%G\t%G\t%I64u",
                     TimeToString(cand_buff[i].time,TIME_DATE|TIME_SECONDS),
                     cand_buff[i].bar,cand_buff[i].period,cand_buff[i].praceMA);
     }
   TextCsv1(size,(int)count);
  }
//+------------------------------------------------------------------+
//| Загружаю новые данные                                            |
//+------------------------------------------------------------------+
void TextCsv1(int size,int count)
  {
   int _count=0;
   if(count==-1) count=0;
   for(int i=0; i<size; i++)
      if(TextCsv2(count,i)==true)
        {
         ArrayResize(cand_buff,count+(int)_count+1);
         cand_buff[count+_count].period=Alt[i].period;
         cand_buff[count+_count].bar=Alt[i].bar;
         cand_buff[count+_count].praceMA=Alt[i].praceMA;
         cand_buff[count+_count].time=Alt[i].time;
         cand_buff[count+_count].High=Alt[i].High;
         cand_buff[count+_count].Low=Alt[i].Low;
         cand_buff[count+_count].type=Alt[i].type;
         _count++;
        }
   TextCsv(size,_count,count);
  }
//+------------------------------------------------------------------+
//| Проверка на новые данные                                         |
//+------------------------------------------------------------------+
bool  TextCsv2(long count,int i)
  {
   bool fl=true;
   for(int j=(int)count-1; j>=0; j--)
      if(cand_buff[j].period==Alt[i].period)
         if(cand_buff[j].time==Alt[i].time)
            return(false);
   return(true);
  }
//+------------------------------------------------------------------+
//| Загрузка                                                         |
//+------------------------------------------------------------------+
void TextCsv(int size,int _count, int count)
  {
//--- откроем файл для записи массива структуры в файл (если его нет, то создастся автоматически)
   ResetLastError();
   int file_handle=FileOpen("test.bin",FILE_READ|FILE_WRITE|FILE_BIN);//FileOpen("test "+"//"+_symbol(),FILE_READ|FILE_WRITE|FILE_BIN|FILE_COMMON);
   if(file_handle!=INVALID_HANDLE)
     {
      FileSeek(file_handle,0,SEEK_END);
      //--- подготовим счетчик количества байт
      uint counter=0;
      //--- в цикле запишем значения массива
      for(int i=0; i<_count; i++)
         counter+=FileWriteStruct(file_handle,cand_buff[count+i]);
      //  PrintFormat("В файл %s записано %d байт информации",_symbol(),counter);
      PrintFormat("Всего байтов: %d * %d * %d = %d, %s",size,4,7,size*4*7,size*4*7==counter ? "Верно" : "Ошибка");
      //--- закрываем файл
      FileClose(file_handle);
      // PrintFormat("Данные записаны, файл %s закрыт",_symbol());
     }
   else
      PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",_symbol(),GetLastError());
  }

En el Asesor Experto, descárgalo de la siguiente manera -

//+------------------------------------------------------------------+
//| Выгрузка                                                         |
//+------------------------------------------------------------------+
void LoadFail(datetime InpTimeDrawTo)
  {
   ArrayFree(buf0);
   long count=FileLoad("test.bin",buf0);
   if(count!=-1)
     {
      for(int i=0; i<count; i++)
        {
         PrintFormat("%s\t%G\t%G\t%G\t%G\t%G\t%G\t%G\t%G\t%I64u\t%d\t%I64u",
                     TimeToString(buf0[i].time,TIME_DATE|TIME_SECONDS),
                     buf0[i].bar,buf0[i].period,buf0[i].praceMA,buf0[i].High,buf0[i].Low,buf0[i].type);
        }
     }
  }
 
Al menos deberías tener algo de código para poder ejecutarlo por tu cuenta, retorcerlo, hurgar...
 

Hola, continuando con la forma de reconocer los arneses MA

Toma un array de 400 MAs de una barra con valores de periodo: - sm.d[per-1].m[bar]

Lo he trazado en el gráfico XY para ver cómo identificar los paquetes. el rango es de la 4ª a la 400ª MA de una barra

Eje X - período 4-400



Diferenciados, obtuvimos este gráfico

Entiendo que las curvas formadas son un flagelo.


La diferenciación se hace con la ayuda de un programa especial, pero no puedo usar mql. Tal vez, ¿quién sabe cómo hacerlo en mql5?

¡¡¡Aunque tampoco es fácil determinar el rango de este redondeo!!! ¿Alguien tiene alguna sugerencia?

¿Cómo se determina este rango?

¿O éste?


 
Mikhail Toptunov:

Hola, continuando con la forma de reconocer los arneses MA

Toma un array de 400 MAs de una barra con valores de periodo: - sm.d[per-1].m[bar]

Lo he trazado en el gráfico XY para ver cómo identificar los paquetes. el rango es de la 4ª a la 400ª MA de una barra

Eje X - período 4-400



Diferenciados, obtuvimos este gráfico

Entiendo que las curvas formadas son un flagelo.


La diferenciación se hace con la ayuda de un programa especial, pero no puedo usar mql. Tal vez, ¿quién sabe cómo hacerlo en mql5?

¡¡¡Aunque tampoco es fácil determinar el rango de este redondeo!!! ¿Alguien tiene alguna sugerencia?

¿Cómo se determina este rango?

¿O éste?


"Prodiferenciada", ¿puede explicar cómo se hace?
 

Creo que - ecuación diferencial ordinaria (diferenciación e integración)

Derivada:1(X),2(Y)

 
Mikhail Toptunov:

Creo que - ecuación diferencial ordinaria (diferenciación e integración)

Derivada:1(X),2(Y)

Por ejemplo, hay una cita

¿cómo diferenciar?

sin paquetes, por código?

 
Renat Akhtyamov:

por ejemplo hay una cita

¿cómo diferenciar?

sin paquetes, por código?

Perdona, ¿me estás preguntando a mí?

- No tengo conocimiento de ello. Me pregunté, ¿cómo?

 
Mikhail Toptunov:

Lo siento, ¿me estás preguntando a mí?

- No lo sé. Me pregunté, ¿cómo?

Sí. Interesante.

aquí, buscó en Google.

Diferenciación de series temporales - pasar de una serie X(t) a una serie de diferencias X(t) - X(t-1)

 
Renat Akhtyamov:

Sí. Interesante.

aquí, busqué en Google

Diferenciar una serie temporal - pasar de una serie X(t) a una serie de diferencias X(t) - X(t-1)

¡No lo entiendo!

 

Estimados profesionales, ¿cómo se elige esta gama?

Razón de la queja: