MQL4 - automated forex trading   /  

Форум

Аппроксимация индикатора старшего периода Close[0] на младшем периоде

К списку тем  | 1 2 Авторизуйтесь или зарегистрируйтесь, чтобы создать новую тему

avatar
1279
chv 20.10.2006 22:24 

Интересны соображения по следующему вопросу. Есть некий индикатор Ind. Мы получаем его значения старшего периода, например, D1 на графике младшего периода, например, M15, путём вызова

double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift).

При этом реальное значение индикатора на D1 для Close[1] предыдущего дня, например, равно 1.2612. Сейчас идут бары младшего графика M15, и 96 таких баров сформируют сутки, т.е. следующее окончательное значение Close[0] для D1. Вопрос, какими методами аппроксимации можно, исходя из значения Close[1] на D1 индикатора и значений закрытых баров графика M15, вычислять и прогнозировать значение Close[0] для D1 графика? Понятно, что результат будет вероятностный, т.к. мы не знаем всех значений M15-баров, которые за текущие сутки придут позже, но всё же, как точнее аппроксимировать дневное значение индикатора, будущее на момент закрытия суток. Или всё-таки полагаться на вызов iCustom для D1 графика с shift = 0, что точнее?

 

Увеличьте эффективность групповой работы

Поставьте TeamWox и увеличьте эффективность групповой работы в вашей компании. TeamWox позволяет хранить всю рабочую информацию в одном месте: письма, документы, файлы, платежи и история сообщений в чате. Так решается проблема сохранности данных и удобной групповой работы с ними.


avatar
3181
favoritefx 24.10.2006 10:31 

По M15 можно составить экстраполяционный многочлен Нюьтона и по нему высчитать все значения M15 до интересующего тебя момента времени Close[0] для D1. Как вариант, можно составить множество таких многочленов для разных таймфреймов и взять средний результат.


avatar
1279
chv 25.10.2006 00:13 
favoritefx писал (а):

составить экстраполяционный многочлен Ньютона


Пробовал найти в инете информацию о нём, выпадает какая-то лажа и мусор. Вы можете дать для примера нормальную ссылку, ознакомиться с теорией этого дела. Я понимаю, что это численные методы, но идти искать бумажные книжки очень не хочется.

Сейчас как раз кривая аппроксимация старших таймфреймов на младших графиках тормозит развитие эксперта :(


avatar
66
New 25.10.2006 06:11 
chv писал (а):
favoritefx писал (а):

составить экстраполяционный многочлен Ньютона


Пробовал найти в инете информацию о нём, выпадает какая-то лажа и мусор. Вы можете дать для примера нормальную ссылку, ознакомиться с теорией этого дела. Я понимаю, что это численные методы, но идти искать бумажные книжки очень не хочется.


Лучше искать интерполяционный многочлен Ньютона - хотя толку
от этого все равно будет ноль.

avatar
1279
chv 25.10.2006 12:45 
New писал (а):
Лучше искать интерполяционный многочлен Ньютона - хотя толку
от этого все равно будет ноль.

Почему? Я могу рассказать, как я считаю значения других timeframes в эксперте. В начале с помощью:
int ArrayCopyRates( & dest_array[], string symbol=NULL, int timeframe=0)
закачиваются в массив static double arrCloseM_xxxx[][6] нужные значения:
bool downloadArray6(double arrClose[][], int currPeriod)
{
   // провести закачку
   int number_copied = ArrayCopyRates(arrClose, NULL, currPeriod);
 
   // если нет, повторить
   if (GetLastError() == 4009)
      number_copied = ArrayCopyRates(arrClose, NULL, currPeriod);
 
   // если нет, повторить
   if (GetLastError() == ERR_HISTORY_WILL_UPDATED)
   {
      Sleep(100);
      number_copied = ArrayCopyRates(arrClose, NULL, currPeriod);
   }
   if (PrintErrMessage("downloadArray6(" + currPeriod + ") FAILED "))
      return(false); // FAILED
 
   // OK
   return (true);
}
а затем через расчёт индикатора на основе данных этого массива:
double getValue(double arrClose[][], int shift)
{
   double ret = 
   -2*arrClose[shift+0][4]
   +3*arrClose[shift+1][4]
}
получаются в эксперте нужные значения. Но в другом коде, индикаторе, я пробую вычислять аппроксимированные значения, и индикатор показывает другие значения линий, и их пересечений. В эксперте эти значения сильно скачут и отличаются от индикаторных, притом, что 0-й бар я не беру в расчёты. И попытка перенести этот расчёт через аппроксимацию в эксперта приводит также к другим значениям, чем в индикаторе, это вообще странно.

avatar
3181
favoritefx 25.10.2006 13:53 
chv писал (а):
favoritefx писал (а):

составить экстраполяционный многочлен Ньютона


Пробовал найти в инете информацию о нём, выпадает какая-то лажа и мусор. Вы можете дать для примера нормальную ссылку, ознакомиться с теорией этого дела. Я понимаю, что это численные методы, но идти искать бумажные книжки очень не хочется.

Сейчас как раз кривая аппроксимация старших таймфреймов на младших графиках тормозит развитие эксперта :(


Лично я читал справочники по математике. Бумажные :)
Нашел кое-что в нете.Правда это метод Адамса.
http://www.math.rsu.ru/mexmat/kvm/MME/dsarch/adams.html

avatar
1781
Bookkeeper 25.10.2006 16:48 
Не заметил Вашу тему. Только что открыл другую (индюк внутри бара) - может темы дополняют друг друга?
Апроксимировать ведь можно не показания индикатора с другого (меньшего) ТФ, а все того же - с Д1 в Вашем примере. Ведь индюк на Д1 продолжает работать в момент close[0] и прекрасно выдает показания.

Если я что-то не так понял, простите что влез.

avatar
1279
chv 25.10.2006 17:15 
Да в общем всё верно, если я сам верно понял :). Если точнее, эксперт работая на графике H1, внутри себя пробует рассчитать значения индикаторов для графиков D1, H4, H1, M15, т.е. практически все "ходовые" таймфреймы. Вопрос в том, что значения в эксперте отличаются от значений в индикаторе, даже если вызывает индикатор напрямую в расчётах, или расчёты индикатора просто скопированы (код) в эксперта.
В общем, есть разхождения, и в эксперте из-за них не идёт работа.

avatar
1781
Bookkeeper 25.10.2006 17:50 
chv писал (а):
Да в общем всё верно, если я сам верно понял :). Если точнее, эксперт работая на графике H1, внутри себя пробует рассчитать значения индикаторов для графиков D1, H4, H1, M15, т.е. практически все "ходовые" таймфреймы. Вопрос в том, что значения в эксперте отличаются от значений в индикаторе, даже если вызывает индикатор напрямую в расчётах, или расчёты индикатора просто скопированы (код) в эксперта.
В общем, есть разхождения, и в эксперте из-за них не идёт работа.

То что у меня не совсем так. Индикатор работает на D1, а его показания можно видеть на M1, не дожидаясь пока день закончится :).

В Вашем случае кажется это будет так: на каждом из нужных Вам ТФ (D1, H4, H1, M15) запускаете индикаторы, все равно один и тот же или разные, лишь бы в них было добавлено присвоение показаний индикатора на нулевом баре глобальной переменной, а в советника индюки не встраиваете, а читаете и обрабатываете значения глобальных на каждом тике. Только результат может быть неожиданным - в окне графика глядя на историю мы видим, чем закончилась отрисовка индикатором каждого бара, а читая глобальные, мы получаем данные индикатора, не закончившего еще формировать бар. Я поэтому и полез посмотреть - что же внутри бара и происходит.

Оказалось, что если на М15 русуем мувинг с периодом 21, то на М1 это не совсем то же самое, что рисовать мувинг с периодом 21*15=315.

avatar
1279
chv 26.10.2006 08:16 
Да, интересная идея, значит, Вы не вычисляете значения индикаторов через iCustom для других нужных timeframes, а просто вешаете индикаторы на нужные графики и через глобальные переменные читаете их? Попробую так, я просто делал автономного советника, не завязанного на тики индикаторов в других окнах.
А приведение сдвига по барам (Close[shift]) для разных timeframes, конечно, нужно делать, ибо Close[3] для D1, конечно, не равно Close[3] для M15 :)

Я делаю это так:
   // shift - бар на текущем графике
   // shift_curr - бар на указанном timeframe графике
   int shift_curr = ShiftOffset0Bars + 0
      , err = 0;
 
   while (iTime(
            NULL //string symbol
            , timeframe
            , shift_curr
         ) > 
         Time[shift])
   {
      shift_curr++;
   }
На выходе shift_curr даёт нужный индекс бара.

avatar
Модератор
33759
Rosh 26.10.2006 08:17 
IBarShift() не пробовали?
К списку тем   | 1 2  

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