Как алгоритмизировать выявление скопления фида МА? - страница 15

 

Вопрос снят, ошибка была в том, что при выгрузки в советнике добавил в класс больше контрольных параметров! 

Доброго время суток, прошу подскажите - что не уловил?

Выгружаю данные в .bat , потом загружаю , но бьется только первая запись, далее данные не совпадают.


Смысл кода таков - 

индикатор

- Дополнить новые данные если они есть в файл.

советник

- Выгрузить данные в класс.


В индикаторе загружаю так -

//+------------------------------------------------------------------+
//| Выгружаю данные с файла если он есть                             |
//+------------------------------------------------------------------+
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());
  }

В советнике выгружаю так -

//+------------------------------------------------------------------+
//| Выгрузка                                                         |
//+------------------------------------------------------------------+
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);
        }
     }
  }
 
Хоть бы код какой-нибудь такой выложили, чтобы можно было запустить у себя, покрутить, поковырять...
 

Здравствуйте, продолжаю мастерить способ распознания жгутов МА

Взял массив значений одного бара 400 штук значений периодов: - sm.d[per-1].m[bar]

Вывел на график XY, чтобы подумать как определить жгуты. диапазон от 4-го до 400-го МА одного бара

ось X - период 4-400



Продифференцировал, получил этот график

 Я так понимаю, что образовавшиеся закругления это жгуты.


Продифференцировал через специальную программу, а вот не могу в mql. Может кто подскажет как через mql5 это сделать?

Хотя и определить диапазон этого закругления тоже не просто!!! Есть у кого какие предложения?

Как определить этот диапазон?

или этот?


 
Mikhail Toptunov:

Здравствуйте, продолжаю мастерить способ распознания жгутов МА

Взял массив значений одного бара 400 штук значений периодов: - sm.d[per-1].m[bar]

Вывел на график XY, чтобы подумать как определить жгуты. диапазон от 4-го до 400-го МА одного бара

ось X - период 4-400



Продифференцировал, получил этот график

 Я так понимаю, что образовавшиеся закругления это жгуты.


Продифференцировал через специальную программу, а вот не могу в mql. Может кто подскажет как через mql5 это сделать?

Хотя и определить диапазон этого закругления тоже не просто!!! Есть у кого какие предложения?

Как определить этот диапазон?

или этот?


"продиффиренцировал" - можно по подробнее, как это?
 

Думаю - обыкновенное дифференциальное уравнение (дифференцирование и интегрирование)

Производная:1(X),2(Y)

 
Mikhail Toptunov:

Думаю - обыкновенное дифференциальное уравнение (дифференцирование и интегрирование)

Производная:1(X),2(Y)

например есть котировка

как продифференцировать?

без пакетов, кодом?

 
Renat Akhtyamov:

например есть котировка

как продифференцировать?

без пакетов, кодом?

Извините, вы меня спрашиваете? 

- Я не в курсе. Я вроде как сам спросил, КАК?

 
Mikhail Toptunov:

Извините, вы меня спрашиваете? 

- Я не в курсе. Я вроде как сам спросил, КАК?

да. интересно

вот, нагуглил

Дифференцирование временного ряда – переход от ряда X(t) к ряду разностей X(t) - X(t-1)

 
Renat Akhtyamov:

да. интересно

вот, нагуглил

Дифференцирование временного ряда – переход от ряда X(t) к ряду разностей X(t) - X(t-1)

Я не понимаю!

 

Уважаемые профессионалы ну как же выбрать этот диапазон?