Метод тенденциальной планиметрии - страница 3

 
Народ, в связи с аналогией между жгутами и магическими машками. "Маги" утверждают что при пробое магической МА, цена движется мощно и устойчиво. А значит на жгутах можно попробовать аналог стратегии пересечения, которая на МА быстро ведет к сливу. Потому просьба/вопрос. Есть тут спецы по ручному тестированию ? Интересно было бы проверить стратегию пробоя жгутов. Думаю убережет от кучи ложных входов. Увы, пока я не могу написать приемлмый индикатор плотности и советника на его основе. Но в ручную проверить думаю было бы любопытно.
 

Плотность можно было бы вычислять по дисперсии между значениями разных машек в заданный момент времени. Чем ниже дисперсия, тем выше плотность.

 
Я думаю это не сложно. Достаточно взять 2-е машки - самую быструю и самую медленную. Они задают границы потока, каким бы он ни был. В жгутах его ширина минимальна и равна расстоянию между машками. В другое время она увеличивается, но все равноа расстоянию межу этими двумя машками.
 
Вопрос к знатокам mql. Я все-таки очень хочу написать индикатор плотности. Он будет конечно не так красив, как радуга из машек, зато куда более полезен. А главное пригоден для роботостроения. Чтобы нарисовать плотность, придется раскрасить в разные цвета всю плоскость графика. Ведь плотность на баре это не число, а распределение, массив. Вопрос как мне это лучше сделать ? В индикаторе Ишимоку канал закрашивается вертикальными линиями, которые в языке являются объектами. Тут же будет множество разноцветных каналов. А значит по сравнению с Ишимоку резко возрастет число вертикальных линий на рисунке. Вопрос, не приведет ли это к неприятностям для терминала ? Еще вопрос. Можно ли сделать раскраску как-то иначе, оптимальнее ? Пиксельной низкоуровневой графики в mql, как я понимаю, нет.
 
Yurixx:
Я думаю это не сложно. Достаточно взять 2-е машки - самую быструю и самую медленную. Они задают границы потока, каким бы он ни был. В жгутах его ширина минимальна и равна расстоянию между машками. В другое время она увеличивается, но все равноа расстоянию межу этими двумя машками.

Нет, эти две машки не дают границы потока. Частенько бывает и наоборот. Этот способ хорош только для тренда. На флете надо смотреть видимость машки.
 
eugenk, по-моему, ты слегка преувеличиваешь сложность задачи. И еще камень хочешь по пределу загрузить. Чем тебе не нравится число, т.е. дисперсия? Этот индикатор - несколько строк кода. И совсем не обязательно его на каждом тике вычислять.
 
eugenk:
Вопрос к знатокам mql. Я все-таки очень хочу написать индикатор плотности. Он будет конечно не так красив, как радуга из машек, зато куда более полезен. А главное пригоден для роботостроения. Чтобы нарисовать плотность, придется раскрасить в разные цвета всю плоскость графика. Ведь плотность на баре это не число, а распределение, массив. Вопрос как мне это лучше сделать ? В индикаторе Ишимоку канал закрашивается вертикальными линиями, которые в языке являются объектами. Тут же будет множество разноцветных каналов. А значит по сравнению с Ишимоку резко возрастет число вертикальных линий на рисунке. Вопрос, не приведет ли это к неприятностям для терминала ? Еще вопрос. Можно ли сделать раскраску как-то иначе, оптимальнее ? Пиксельной низкоуровневой графики в mql, как я понимаю, нет.

Я на предыдущей странице давал ссылку на подобную стратегию. Посмотри. Чистая стратегия, ничего не автоматизировано. Но посмотреть стоит.
 
//+------------------------------------------------------------------+
//|                                                      Density.mq4 |
//+------------------------------------------------------------------+
#property copyright "Mathemat (c) 2007"
#property indicator_separate_window
#property indicator_buffers 1
 
extern int _LoPeriod = 3;
extern int _HiPeriod = 200;
extern int _ma_method = MODE_EMA;
extern int _ma_price = PRICE_CLOSE;
 
double _dens[];   // графический буфер плотности жгута
double _mas[];    // массив машек
 
int init()
{
  SetIndexBuffer( 0, _dens );
  SetIndexStyle ( 0, DRAW_LINE );
  ArrayResize( _mas, _HiPeriod - _LoPeriod + 1 );
  return( 0 );
}
 
// рассчитывает массив машек на заданном баре
void makeMAsArray( int sh )
{
   for( int i = _LoPeriod; i <= _HiPeriod; i ++ )  
      _mas[ i ] = iMA( NULL, 0, i, 0, _ma_method, _ma_price, sh );
   return;
}
 
// возвращает с.к.о. текущего массива машек 
double stderr( int quantity )
{
   double linsum = 0;
   double sqwsum = 0;
   for( int i = 0; i < quantity; i ++ ) 
   {
      linsum += _mas[ i ];
      sqwsum += _mas[ i ] * _mas[ i ];
   }   
   return( MathSqrt( sqwsum / quantity - linsum * linsum / ( quantity * quantity ) ) );   
}
 
 
int start()
{
   int limit = Bars;
   int counted_bars = IndicatorCounted();
   if( counted_bars > 0 )  counted_bars--;
   limit = Bars - counted_bars;
   
   for( int sh = 0; sh < limit; sh ++ )
   {
      makeMAsArray( sh );
      _dens[ sh ] = 1 / stderr( _HiPeriod - _LoPeriod + 1 );
   }
   return( 0 );
}

Этот индюкатор показывает плотность жгута на основе дисперсии внутри машек для каждого бара. Машки - экспоненциальные. Вычисления какие-то нереальные. Да и главный его недостаток - то, что он не нормирован.

P.S. Признаю бесперспективность подхода, основанного на подсчете дисперсии: мощный жгут может быть и там, где разброс разных машек большой.

 

Судить о плотности машек можно по двум показателям: число машек на интервал и интервал между машками. Мне кажется интересной вторая возможность. Разумеется нужно некоторое усреднение. То есть рассчитываем функцию (интервал занимаемый n машками)[(среднее или медианное значение этих n машек] на полном диапазоне значений машек (машки при этом упорядочиваем по значению), находим её минимумы и рисуем полосы скажем по полувысоте. n навскидку можно взять порядка 10. Хотя на самом деле и n и способ определения границ полос нужно подбирать по ходу дела, глядя на получающиеся картинки.

 

Проблема в том, что сами машки надо научиться вычислять еще оптимальнее, чем в стандартном пакете метаквотов. Нужен какой-то рекуррентный алгоритм вычислений машек, при котором по известной машке периода N вычисляется машка периода N+1. В принципе он несложен, но тогда придется отвергнуть стандартный алгоритм метаквотов.

По поводу плотности машек: здесь явно нужен какой-то алгоритм кластеризации, так как они могут располагаться очень неоднородно по вертикали (для заданного бара). Короче, задача технически совсем непроста.

P.S. Эффективность тысячи вызовов iMA() от 3 до 1002 - порядка 500 000 операций (сложений) ~ 1000 * 1000 / 2. Если же делать рекуррентный алгоритм (зная машку периода N, просто умножаем на N, прибавляем самую дальнюю новую цену и делим на N+1; получаем машку периода N+1) - эффективность будет линейно зависеть от N.