Может кто порекомендует функцию - страница 3

 
lovova:
Допустим Математу понятно что такое "движуха" и он её коротко описал .
Ужель Вы пришли искать "отлаженую функцию" которую ради шутки выдал Mathemat???) А ежели она Вам подходит и вы сможете встроить ее в код неужели нельзя было эти две строчки самому написать? Вот народ и потешается. Нечего обижаться.
 
alexjou:
Это нифига не МОСК, скорее МОЗЖИЧОГ.
Как сказал мне один друг, узнав, что я готовлю эксперта у чемпионату: "Фигня, просто замени функцию выиграть(много) на победить(всех)" =)))
 
Самое интересное, что задачка, которую lovova пытался нарисовать, вполне решаемая, хоть первый пост и выглядит комично :) .
Ясно, что когда рынок вял, то котировки еле-тикают. Когда начинается движение, то котировки поступают часто.
Поэтому я предлагаю за критерий того, что в рынке началось движение, выбрать некий порог скорости поступления тиков.
Оформить это можно в виде индикатора.
В одном из постов  lovova сказал, что програмный код мог бы сделать сам, если бы знал как. Поможем ему в этом - обрисуем работу индикатора.
Итак, достаточно иметь всег один индикаторный буфер и значения индикатора рисовать в виде линии.
Индикатор начинает свою работу с того, что обнуляет ключевые переменные - нужно объявить и сразу обнулить как минимум две переменные - одна служит накопителем расстояния (в пунктах), пройденного ценой. Другая служит накопителем времени, в течение которого цена "шагала". В индикаторный буфер на каждом тике вносим значение = расстояние, разделённое на время. Итак,  индикатор брошен на график. Переменные пока пусты. Значит в блоке инициализации мы должны в одну из вспомогательных переменных запомнить последнее известное время сервера, в другую вспомогательную переменную внести последнюю известную котировку. Теперь как только придёт первая котировка, тут же в переменную-накопитель времени мы вносим значение = время прихода котировки минус последнее известное время сервера. В накопитель расстояния вносим значение = модулю разности последняя известная цена минус новая цена последнего тика.  В индикаторный буфер вносим частное от деления расстояния на время
(делим накопители друг на друга). Это и есть искомая скорость.
В силу того, что скорость мы будем вносить на каждом тике, то нам понадобится програмно сдвинуть индикаторный буфер, если это пришёл не первый тик новой свечи. Значит нам понадобится функция, возвращающая признак нового бара. Её в своё время опубликовал Rosh. Вот она:
//+------------------------------------------------------------------+
//| функция isNewBar() - возвращает признак нового бара              |
//+------------------------------------------------------------------+
bool isNewBar(){
  bool res=false;
  if(myBars!=Bars){
    res=true;
    myBars=Bars;
  }
Теперь на каждом новом тике мы увеличиваем переменные-накопители времени и расстояния на соответствующие величины и вносим полученное значение скорости в индикаторный буфер.
Нам осталось лишь выполнить слежение за тем, какова величина наших накопителей и насколько много ячеек в индикаторном буфере.
В случае подхода накопителей к критической величине (чтоб не стало значение переменной больше допустимого), мы должны уменьшить значение этих накопителей так, чтобы результат их деления давал последнюю известную скорость (чтобы небыло "провалов" в показаниях индикатора). И нам так же нужно отслеживать насколько много ячеек стало в индикаторном буфере. Если их, скажем, стало 10 000 и к тому же индикатор брошен например на 15 валютных пар, то сдвигание значений ячеек индикаторного буфера может заставить комп весьма ощутимо подтормаживать. Значит, как только количество ячеек массива станет равно, например 1000*2, мы должны половину посдедних значений обнулить (обрезать хвост индикатора).

Ну теперь самое интересное - как только индикатор готов, мы должны сделать исследование его работы на каждой валютной паре, на которой собрались торговать. Мы должны подобрать некую критическую скорость движения цены, по достижении которой можно смело сказать, что рынок пришёл в движение.
Далее можно встроить в код индикатора зуковой сигнал. Если текущая скорость стала больше или равна некоторому значению, то раздаётся звук, ну или что-то там иное, на усмотрение программиста. Ну вот в принципе и всё.
Дерзайте.
 
komposter писал (а):
Если бы хоть кто-то понял, что требуется, он бы ответил. Или ты думаешь, что здесь собрались жлобы?

 Пять баллов :) Настроение поднял просто супер :)
 
drknn:

В силу того, что скорость мы будем вносить на каждом тике, то нам понадобится програмно сдвинуть индикаторный буфер, если это пришёл не первый тик новой свечи. Значит нам понадобится функция, возвращающая признак нового бара. Её в своё время опубликовал Rosh. Вот она:
//+------------------------------------------------------------------+
//| функция isNewBar() - возвращает признак нового бара              |
//+------------------------------------------------------------------+
bool isNewBar(){
  bool res=false;
  if(myBars!=Bars){
    res=true;
    myBars=Bars;
  }

Функция возвращает признак нового бара вплоть до тех пор, пока Bars не упрется в ограничение количества баров на графике.
 
Вот индикатор, который выполняет похожие функции, только он работает иначе.
Файлы:
 
lovova, когда код будет готов, непожадничай, выложи индикатор здесь - всётаки интересно, что в результате получится.
 
drknn:
Самое интересное, что задачка, которую lovova пытался нарисовать, вполне решаемая, хоть первый пост и выглядит комично :) .
Ясно, что когда рынок вял, то котировки еле-тикают. Когда начинается движение, то котировки поступают часто.
Поэтому я предлагаю за критерий того, что в рынке началось движение, выбрать некий порог скорости поступления тиков.
Оформить это можно в виде индикатора.

Когда-то давно писал "мощный" тиковый анализатор, который в числе прочего высчитывал и скорость поступления тиков, с различным усреднением (на мой взгляд самый бесполезный параметр, т.к. не имеет напраления). Ничего полезного извлечь не удалось, т. к. с тиковыми индикаторами и экспертами достаточно сложно работать. В силу:

  1. невозможности тестирования на исторических данных, а как следствие сложность подбора параметров.
  2. слабой информативности тиковых данных после цепочки поставщиков котировок и фильтров ДЦ .

Максимум чего мне удалось из него выжать это эксперт который не сильно сливал. Так что если и использовать тики, только во вспомогательных целях. имхо.

 
Irtron:
drknn:

В силу того, что скорость мы будем вносить на каждом тике, то нам понадобится програмно сдвинуть индикаторный буфер, если это пришёл не первый тик новой свечи. Значит нам понадобится функция, возвращающая признак нового бара. Её в своё время опубликовал Rosh. Вот она:
//+------------------------------------------------------------------+
//| функция isNewBar() - возвращает признак нового бара              |
//+------------------------------------------------------------------+
bool isNewBar(){
  bool res=false;
  if(myBars!=Bars){
    res=true;
    myBars=Bars;
  }

Функция возвращает признак нового бара вплоть до тех пор, пока Bars не упрется в ограничение количества баров на графике.
Не совсем так. Советник с подобной функцией Prototype-IX. Пример мультивалютного советника два месяца висел на чемпионате и правильно определял наступление нового бара по 12 символам и 5 перидоам (матрица 12 x 6). Ограничение количества баров решается терминалом самостоятельно, производится периодическая подрезка.
 
Как всегда, не хватает времени для того, чтобы написать и проверить. Вот идея, как определить начало "движуху". Берём кол-во тиков (volume) за последние, например, 60 минутных баров. Высчитываем среднеквадратичное отклонение. Наблюдаем за текущим баром, если его среднеквадратичное отклонение станет больше расчитаного ранее * на весовой коэффициент (например, 1,3), то движении началось,  т. к. тиков пришло больше. Естественно, нужно добавить 
ещё весовой коэффициент на начало движения. В общем, нужно поэксперементировать.  Зато такой подход позволяет автоматически подстраиваться под 
волатильность рынка (ИМХО)