Скачать MetaTrader 5

Как собрать статистику показаний MACD Color ?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
tommy27
80
tommy27  

Как собрать статистику по индюку?

Нужна статистика показаний от одной нулевой точки до другой (на скрине отмечены стрелками)

1.количество таких отрезков за произвольно заданный промежуток времени

2.сколько раз индикатор меняет цвет в каждом таком отрезке

3.максимальное значение индикатора в каждом отрезке

Может есть какие то готовые функции позволющие такое проделать? Если нет прошу помоч советом.

Sceptic Philozoff
Модератор
17843
Sceptic Philozoff  

Да тут достаточно самого индюкатора. Просто создать скрипт, пройтись в цикле по истории и тупо вычислить. Кода - если писать его по-человечески, с разными функциями, - строк на 100-200, вряд ли больше.

Если пишете на MQL4 - никаких проблем. Вызов значений буферов индюкатора - функцией iCustom().

Если не пишете - попробуйте заинтересовать кого-нибудь, на хрена это Вам нужно.

tommy27
80
tommy27  

Спасибо.

Надоело уже просить, осваиваю сам потихоньку. Пробовал записать в файл с помощью FileWriteArray получается но не то. А как бы сохранить double массив в файл CSV ?

Sceptic Philozoff
Модератор
17843
Sceptic Philozoff  

Проще писать, не особо заморачиваясь, просто с помощью FileWrite().

А зачем писать массив в файл? Или у Вас проблема с программным поиском максимального значения индюкатора на отрезке? Ну если Вы собираетесь открыть файл в Экселе и там проанализировать - вполне достойный путь...

Хотя да, понял, файл все же нужен. Но выводить придется двумерный массив - № отрезка, число перемен знака внутри него, максимальное/минимальное значение индюкатора внутри.

tommy27
80
tommy27  

Для начала хотелось бы сделать так:

В файл выводятся значения индикатора построчно, где каждая строка это данные индикатора от одной нулевой точки до другой - как это сделать пока не очень понимаю (

а потом в экселе всё анализируется.

Sceptic Philozoff
Модератор
17843
Sceptic Philozoff  

Ну если так, то это просто. Что такое нулевая точка? Это первый бар, на котором значение меняет знак (движение из глубины истории к настоящему)? Или предыдущий к этому бару? Судя по рисунку, похоже, что это первый бар перемены знака.

Короче, разберитесь пока с этим кодом. Ключевая функция, которую Вам придется изменить, - это последняя, makeUnifiedBuff(). В нее запишите значения индюкатора MACD_Сolored: у него минимум два буфера, их надо объединить. У меня нет исходника, сделайте это самостоятельно.

Ну а с цветами как-нибудь придумаете сами.

//+------------------------------------------------------------------+
//|                                           stats_MACD_colored.mq4 |
//+------------------------------------------------------------------+

int _h;                 /// хэндл файла статистики
double _unifiedBuff[ ];    /// "единый" буфер индюкатора
int _zeros[ ];

int start( )
{
   _h = FileOpen( "stats.csv", FILE_CSV | FILE_WRITE, " " );
   valuesToFile( );
   FileClose( _h );   
   return( 0 );
}//+------------------------------------------------------------------+

 
void valuesToFile( )
{
   makeZerosArray(  );
   int size = ArrayRange( _zeros, 0 );
   string stringOut = "";
   int shFirst, shLast;
   for( int i = 1; i < size - 1; i ++ )          /// цикл начнем со второго в истории "нулевого" бара
   {
      shFirst = _zeros[ i ];
      shLast = _zeros[ i + 1 ];
      stringOut = "" + i + ",";
      for( int sh = shFirst; sh > shLast; sh -- )     stringOut = stringOut + _unifiedBuff[ sh ] + ",";
      FileWrite( _h, stringOut );
      stringOut = "";
   }
   return;
}//+------------------------------------------------------------------+            


     /// заполняем массив нулевых точек
      void makeZerosArray(  )
      {
         makeUnifiedBuff( );
         
         int size = 0;        /// текущий размер массива нулевых точек
         for( int i = Bars - 2; i > 0; i -- )
         {
            if( _unifiedBuff[ i ] * _unifiedBuff[ i + 1 ] < 0 )      
            {
               size ++;
               ArrayResize( _zeros, size );
               _zeros[ size - 1 ] = i;
            }
         }
         return;
      }//+------------------------------------------------------------------+
      
      
            /// в этой функции надо создать "единый буфер", объединяющий буферы индюкатора; здесь это сделано для стандартного пользовательского MACD
            void makeUnifiedBuff( )
            {
               ArrayResize( _unifiedBuff, Bars );
               for( int i = Bars - 1; i >= 0; i -- )      _unifiedBuff[ i ] = iCustom( Symbol( ), 0, "MACD", 12, 26, 9, 0, i );
               return;
            }//+------------------------------------------------------------------+
            
tommy27
80
tommy27  
Спасибо большое за помощь, буду разбираться.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий