Математические основы индикаторов

lazamoro

Активный участник
Lo más importante que debemos entender es que las operaciones angulares pueden ser diferentes de las operaciones simples con números. Por ejemplo, tenemos tres puntos y queremos encontrar una línea de tendencia para ellos. Luego, conectamos todos los pares de puntos entre sí. Luego, movemos todas las líneas a un punto de inicio (la línea azul de la derecha se ha movido al punto de inicio). Luego consideraremos la línea que corre en el centro como la línea de tendencia. Esta línea nos da el valor del ángulo. Y al tenerla, ya podemos construir una función lineal; en nuestro ejemplo, la línea de tendencia final se desplazará ligeramente hacia arriba.
Посмотреть вложение 487245
Sr. AlexeNP Muchas gracias de nuevo por su amabilidad. Sé que lo estoy volviendo loco. Pero, ¿no hay un indicador en MT4 que realice la función de la que está hablando, y me detendré allí?
 

Вложения

  • Captura.PNG
    Captura.PNG
    4,5 КБ · Просмотры: 6

Billy Kid

Почетный гражданин
Да, он настроен для движений цены вверх. То есть, чистый тренд вниз и флэт он не различает. Если отдельно посчитать движения вверх и вниз, то можно получить дополнительную информацию о движении цены
Может быть для тренда вниз взять отрицательное значение угла?
 

AlexeNP

Гуру форума
Sr. AlexeNP Muchas gracias de nuevo por su amabilidad. Sé que lo estoy volviendo loco. Pero, ¿no hay un indicador en MT4 que realice la función de la que está hablando, y me detendré allí?
в MT4 есть какое-то измерение углов, но (как мне кажется) оно построено на том, чтобы свести график к одному масштабу (например 1:1), а потом измерить угол. Но такой подход в корне неправильный - на одной оси графика у нас время, а на другом - цена. И никакими ухищрениями мы не сможем свести их к одному основанию. Условно говоря - нам нужно сопоставить 1 секунду и 1 пункт цены. С таким же успехом мы можем как-то сопоставлять зеленое с твердым. Единственный выход - строить линейную функцию между временем и ценой (такой подход вполне допустим). И после вычисления этой зависимости можно вычислять угол.
Дальше, с угловыми величинами нужно обращаться аккуратно. Например, у нас есть два угла 10 и 350 градусов. Требуется найти их среднее (10 + 350)/2 = 180. Результат неправильный. Средний угол = 0.
Разницу между двумя подходами можно увидеть на индикаторе.
 

Вложения

  • lazamoro.mq4
    2,5 КБ · Просмотры: 66

AlexeNP

Гуру форума

Вложения

  • AIS Power Deviations.mq4
    3,9 КБ · Просмотры: 104
  • AIS Power Deviations.mq5
    2,9 КБ · Просмотры: 35

kos17788

Почетный гражданин
можно... тут и еще кое-что можно добавить
Добрый день. Алекс если соберетесь добавлять еще в индикатор AIS Power Deviations , можете центральную линию прикрутить? Очень хорошо подошли мне эти индикаторы, спасибо. За адаптивные мувинги тоже спасибо.
 
Последнее редактирование:

lazamoro

Активный участник
MT4 tiene algún tipo de medición de ángulo, pero (creo) se basa en reducir el gráfico a una escala (por ejemplo, 1:1) y luego medir el ángulo. Pero este enfoque es principalmente erróneo: en un eje del gráfico tenemos el tiempo y en el otro, el precio. Y sin trucos podemos reducirlos a una sola base. En términos relativos, necesitamos comparar 1 segundo y 1 punto de precio. Con el mismo exito, de alguna manera podemos comparar verde con solido. La única salida es construir una función lineal entre el tiempo y el precio (este enfoque es bastante aceptable). Y después de calcular esta dependencia, puedes calcular el ángulo.
Además, los valores angulares deben manejarse con cuidado. Por ejemplo, tenemos dos ángulos de 10 y 350 grados. Se requiere encontrar su promedio (10 + 350)/2 = 180. El resultado es incorrecto. Ángulo medio = 0.
La diferencia entre los dos enfoques se puede ver en el indicador.
MT4 tiene algún tipo de medición de ángulo, pero (creo) se basa en reducir el gráfico a una escala (por ejemplo, 1:1) y luego medir el ángulo. Pero este enfoque es principalmente erróneo: en un eje del gráfico tenemos el tiempo y en el otro, el precio. Y sin trucos podemos reducirlos a una sola base. En términos relativos, necesitamos comparar 1 segundo y 1 punto de precio. Con el mismo exito, de alguna manera podemos comparar verde con solido. La única salida es construir una función lineal entre el tiempo y el precio (este enfoque es bastante aceptable). Y después de calcular esta dependencia, puedes calcular el ángulo.
Además, los valores angulares deben manejarse con cuidado. Por ejemplo, tenemos dos ángulos de 10 y 350 grados. Se requiere encontrar su promedio (10 + 350)/2 = 180. El resultado es incorrecto. Ángulo medio = 0.
La diferencia entre los dos enfoques se puede ver en el indicador.

MT4 tiene algún tipo de medición de ángulo, pero (creo) se basa en reducir el gráfico a una escala (por ejemplo, 1:1) y luego medir el ángulo. Pero este enfoque es fundamentalmente erróneo: en un eje del gráfico tenemos el tiempo y en el otro, el precio. Y sin trucos podemos reducirlos a una sola base. En términos relativos, necesitamos comparar 1 segundo y 1 punto de precio. Con el mismo éxito, de alguna manera podemos comparar verde con sólido. La única salida es construir una función lineal entre el tiempo y el precio (este enfoque es bastante aceptable). Y después de calcular esta dependencia, puedes calcular el ángulo.
Además, los valores angulares deben manejarse con cuidado. Por ejemplo, tenemos dos ángulos de 10 y 350 grados. Se requiere encontrar su promedio (10 + 350)/2 = 180. El resultado es incorrecto. Ángulo medio = 0.
La diferencia entre los dos enfoques se puede ver en el indicador.
Sr. AlexeNP

AlexeNP

 

Вложения

  • Captura.PNG
    Captura.PNG
    2,6 КБ · Просмотры: 15
  • Captura.PNG
    Captura.PNG
    2,6 КБ · Просмотры: 15
  • Captura.PNG
    Captura.PNG
    2,6 КБ · Просмотры: 15

egor008

Активный участник
Алекс Здравствуйте.


Помогите пожалуйста.


Как ( из четырёх, целых чисел ) найти Две пары чисел, наи-ближайших по значению?



На примере 4-х закрытых баров. растояние open - close. Бычий/Медвежий - любые бары.


Как найти момент, когда из 4-х баров, в любой последовательности,

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

Вложения

  • пример.jpg
    пример.jpg
    25,1 КБ · Просмотры: 33
  • пример — копия.jpg
    пример — копия.jpg
    42,7 КБ · Просмотры: 33
Последнее редактирование:

egor008

Активный участник
Алекс Здравствуйте.


Помогите пожалуйста.


Как ( из четырёх, целых чисел ) найти Две пары чисел, наи-ближайших по значению?



На примере 4-х закрытых баров. растояние open - close. Бычий/Медвежий - любые бары.


Как найти момент, когда из 4-х баров, в любой последовательности,

два бара, друг с другом, наи-близки по значению. И оставшиеся, два бара, друг с другом, тоже наи-близки по значению.
Как это найти, математически?


Спасибо!
 

egor008

Активный участник
Как это найти, математически?


Спасибо!
Вопрос снимаю. Нашёл примерчик и разобрался. Благодарю.

Прикрепляю, если кому, вдруг пригодится.
PHP:
    static int bar[4];
 
 
       bar[0] = (int)MathAbs( ((Close[1]-Open[1])/Point) );
       bar[1] = (int)MathAbs( ((Close[2]-Open[2])/Point) );
       bar[2] = (int)MathAbs( ((Close[3]-Open[3])/Point) );
       bar[3] = (int)MathAbs( ((Close[4]-Open[4])/Point) );
 

     double mindiff =0;
     double tmpdiff =0;
 
   int pos1 = 0;
   int pos2 = 1;
   
   
       mindiff = fabs(bar[pos1] - bar[pos2]);
   
   
   
      for ( int i = 1; i < 4 - 1; ++i ) {
      
         for (int  j = i + 1; j < 4; ++j ) {
      
      
            if ( ( tmpdiff = fabs(bar[i] - bar[j]) ) < mindiff ) {
      
      
                mindiff = tmpdiff;
      
                pos1 = i;
                pos2 = j;
      
              }
           }
         }
    //+-----------------------------------------------------------------------------------------+

 
   Comment("\n"
 
                                                   ,"\n"
     "             Ближайшие значения"             ,"\n"
      "             ------------------"            ,"\n"
     "             индекс    ",(string)pos1        ,"\n"
     "             индекс    ",(string)pos2        ,"\n"
                                                   ,"\n"
                            
     "           первый    bar[0]      ",(string)bar[0] ,"\n"
     "           второй    bar[1]      ",(string)bar[1] ,"\n"
     "           третий    bar[2]      ",(string)bar[2] ,"\n"
     "           четвёр    bar[3]      ",(string)bar[3] ,"\n"
  
  
     );
   
    //+-----------------------------------------------------------------------------------------+
 

AlexeNP

Гуру форума
Вопрос снимаю. Нашёл примерчик и разобрался. Благодарю.

Прикрепляю, если кому, вдруг пригодится.
PHP:
    static int bar[4];
 
 
       bar[0] = (int)MathAbs( ((Close[1]-Open[1])/Point) );
       bar[1] = (int)MathAbs( ((Close[2]-Open[2])/Point) );
       bar[2] = (int)MathAbs( ((Close[3]-Open[3])/Point) );
       bar[3] = (int)MathAbs( ((Close[4]-Open[4])/Point) );
 

     double mindiff =0;
     double tmpdiff =0;
 
   int pos1 = 0;
   int pos2 = 1;
  
  
       mindiff = fabs(bar[pos1] - bar[pos2]);
  
  
  
      for ( int i = 1; i < 4 - 1; ++i ) {
     
         for (int  j = i + 1; j < 4; ++j ) {
     
     
            if ( ( tmpdiff = fabs(bar[i] - bar[j]) ) < mindiff ) {
     
     
                mindiff = tmpdiff;
     
                pos1 = i;
                pos2 = j;
     
              }
           }
         }
    //+-----------------------------------------------------------------------------------------+

 
   Comment("\n"
 
                                                   ,"\n"
     "             Ближайшие значения"             ,"\n"
      "             ------------------"            ,"\n"
     "             индекс    ",(string)pos1        ,"\n"
     "             индекс    ",(string)pos2        ,"\n"
                                                   ,"\n"
                           
     "           первый    bar[0]      ",(string)bar[0] ,"\n"
     "           второй    bar[1]      ",(string)bar[1] ,"\n"
     "           третий    bar[2]      ",(string)bar[2] ,"\n"
     "           четвёр    bar[3]      ",(string)bar[3] ,"\n"
 
 
     );
  
    //+-----------------------------------------------------------------------------------------+
так у меня сейчас тема - нелинейные индикаторы (точнее, только те где используется алгоритм сортировки), то
 

Вложения

  • egor008.mq4
    1,1 КБ · Просмотры: 83

egor008

Активный участник
так у меня сейчас тема - нелинейные индикаторы (точнее, только те где используется алгоритм сортировки), то
Ну значит, я в тему. А тема очень интересная.

Код в сполере, работает не правильно. Врёт. Что - то, с ним не так.
В вашем коде, (без обид) я тоже не разобрался.
Хотя бы подписали где-что.. Но выглядит идеально.

Как мне его интерпритивовать, не могу понять. Вывел всё, в текст-коммент.
Но не могу разобраться. Где пёс, где кот.

Как мне найти, два бара с минимальной разницей, по размеру?
В идеале, одинаковые два бара, по размеру.

И указать их индексы, как в первом примере.




Если я туплю, укажите где и помогите разобраться пожалуйста.
 

Вложения

  • пример_2.jpg
    пример_2.jpg
    82,6 КБ · Просмотры: 383
  • egor008_1.mq4
    14,2 КБ · Просмотры: 18
Последнее редактирование:

AlexeNP

Гуру форума
Ну значит, я в тему. А тема очень интересная.

Код в сполере, работает не правильно. Врёт. Что - то, с ним не так.
В вашем коде, (без обид) я тоже не разобрался.
Хотя бы подписали где-что.. Но выглядит идеально.

Как мне его интерпритивовать, не могу понять. Вывел всё, в текст-коммент.
Но не могу разобраться. Где пёс, где кот.

Как мне найти, два бара с минимальной разницей, по размеру?
В идеале, одинаковые два бара, по размеру.

И указать их индексы, как в первом примере.




Если я туплю, укажите где и помогите разобраться пожалуйста.
сейчас постараюсь объяснить. Вот в примере всего 4 величины, и их, худо-бедно сможем сравнить за приемлемое количество действий... и строк в коде будет не очень много) А если таких величин будет 100? Тогда нам придется делать 100*(100+1)/2 сравнений... Чего-то это уже дофига) Поступим проще - делаем массив с 2 измерениями, в 1-ое записываем значение величины, во 2-ое - ее индекс. Положим к нам поступили значения в таком порядке 5, 4, 8, 10. Тогда массив у нас будет такой
5 0
4 1
8 2
10 3
Теперь мы сортируем массив и он у нас становится таким
4 1
5 0
8 2
10 3
Теперь нам нужно сравнить значения по порядку в этом отсортированном массиве - разность будет минимальной только с рядом стоящими элементами. То есть, элемент массива с индексом 0, нужно сравнить только с элементом с индексом 1. С элементом с индексом 2 сравнивать уже не нужно - это сравнение будет не меньше, чем предыдущее. В нашем примере - разница между 4 и 5 всяко меньше чем между 4 и 8
В виде индикатора мы сделаем это так
 

Вложения

  • egor008 ind.mq4
    5,7 КБ · Просмотры: 50

egor008

Активный участник
сейчас постараюсь объяснить. Вот в примере всего 4 величины, и их, худо-бедно сможем сравнить за приемлемое количество действий... и строк в коде будет не очень много) А если таких величин будет 100? Тогда нам придется делать 100*(100+1)/2 сравнений... Чего-то это уже дофига) Поступим проще - делаем массив с 2 измерениями, в 1-ое записываем значение величины, во 2-ое - ее индекс. Положим к нам поступили значения в таком порядке 5, 4, 8, 10. Тогда массив у нас будет такой
5 0
4 1
8 2
10 3
Теперь мы сортируем массив и он у нас становится таким
4 1
5 0
8 2
10 3
Теперь нам нужно сравнить значения по порядку в этом отсортированном массиве - разность будет минимальной только с рядом стоящими элементами. То есть, элемент массива с индексом 0, нужно сравнить только с элементом с индексом 1. С элементом с индексом 2 сравнивать уже не нужно - это сравнение будет не меньше, чем предыдущее. В нашем примере - разница между 4 и 5 всяко меньше чем между 4 и 8
В виде индикатора мы сделаем это так
Вот теперь - понятно, для чего сортировка была нужна.

Благодарю!

Пойду проверять..
 

egor008

Активный участник
сейчас постараюсь объяснить. Вот в примере всего 4 величины, и их, худо-бедно сможем сравнить за приемлемое количество действий... и строк в коде будет не очень много) А если таких величин будет 100? Тогда нам придется делать 100*(100+1)/2 сравнений... Чего-то это уже дофига) Поступим проще - делаем массив с 2 измерениями, в 1-ое записываем значение величины, во 2-ое - ее индекс. Положим к нам поступили значения в таком порядке 5, 4, 8, 10. Тогда массив у нас будет такой
5 0
4 1
8 2
10 3
Теперь мы сортируем массив и он у нас становится таким
4 1
5 0
8 2
10 3
Теперь нам нужно сравнить значения по порядку в этом отсортированном массиве - разность будет минимальной только с рядом стоящими элементами. То есть, элемент массива с индексом 0, нужно сравнить только с элементом с индексом 1. С элементом с индексом 2 сравнивать уже не нужно - это сравнение будет не меньше, чем предыдущее. В нашем примере - разница между 4 и 5 всяко меньше чем между 4 и 8
В виде индикатора мы сделаем это так
Да. Подтверждаю! всё идеально работает!
Благодарчики!!! Супер!

Пойду дальше, процент совпадений прикручивать, что бы, вывезти, из всего этого, сигнал..
 

AlexeNP

Гуру форума
Читал недавно статью - умнейший человек ее написал, еще немного и скоро меня догонит по уму) _mql5.com/ru/articles/11782
ну, а кому читать неохота (или не умеет), то - краткое содержание:
Base LogIndicator. Индикатор, основанный на логарифмическом преобразовании цен.
InpCoefficient - весовые коэффициенты индикатора, можно вводить любые числа. Ограничение - их сумма не должна быть равна нулю.

MMMM. Индикатор, показывающий меры центральной тенденции.
iMode - выбор тенденции.
iPeriod - период индикатора (не меньше 2).

1.png

Bayesian Moving Average. Индикатор, реализующий байесовское сглаживание.
iMode - выбор тенденции для сглаживания.
iPeriod - период индикатора.
Parameter - параметр сглаживания.

3.png

Median Median. Индикатор, отображающий медиану медиан. Нелинейный аналог треугольной оконной функции.
iPeriod - период индикатора.

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

Strength Trend. Индикатор, показывающий насколько сильна трендовая составляющая в выборке цен.
iPeriod - период индикатора.

nRSI. Индикатор, основанный на вероятностях приращения цены.
iMode - выбор метода сглаживания.
iPeriod - период индикатора.

nIchimoku Kinko Hyo. Модернизация индикатора классического индикатора Ichimoku.
PeriodS, PeriodM, PeriodL - короткий, средний и длинный периоды индикатора.

Script Pattern. Скрипт, собирающий статистику по паттернам цены. По окончании работы сохраняет результаты в файл в папке Files.

Pattern. Индикатор, рассчитывающий паттерны. На основе исторических данных делает прогноз о преимущественном движении цены на открывающемся баре.
Least - минимальное количество наблюдений паттерна в истории. Прогноз будет выводиться только для тех паттернов, которые наблюдались не менее Least раз.

11.png

EA Along Across. Торговый советник, использующий паттерны цены.
Mode - выбор направления паттерна.
Least - количество наблюдений паттерна в истории.
Percent - процент преобладания одного направления движения цены над другим. Влияет на количество открываемых позиций. Значение этого параметра следует выбирать в пределах 51 - 99.
 

Вложения

  • mt4.zip
    13,8 КБ · Просмотры: 82
  • mt5.zip
    12,6 КБ · Просмотры: 32

AlexeNP

Гуру форума
По какому принципу определяется вероятность?
берем разности цены open от первой, до iPeriod -1, для каждой разности определяем среднее по движению цены на открывающемся баре high - open и open - low... все результаты усредняем при помощи байесовского сглаживания.
 
Верх