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

 

Интересны соображения по следующему вопросу. Есть некий индикатор 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, что точнее?

 
 

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

 
favoritefx писал (а):

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


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

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

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


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


Лучше искать интерполяционный многочлен Ньютона - хотя толку
от этого все равно будет ноль.
 
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-й бар я не беру в расчёты. И попытка перенести этот расчёт через аппроксимацию в эксперта приводит также к другим значениям, чем в индикаторе, это вообще странно.
 
chv писал (а):
favoritefx писал (а):

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


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

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


Лично я читал справочники по математике. Бумажные :)
Нашел кое-что в нете.Правда это метод Адамса.
http://www.math.rsu.ru/mexmat/kvm/MME/dsarch/adams.html
 
Не заметил Вашу тему. Только что открыл другую (индюк внутри бара) - может темы дополняют друг друга?
Апроксимировать ведь можно не показания индикатора с другого (меньшего) ТФ, а все того же - с Д1 в Вашем примере. Ведь индюк на Д1 продолжает работать в момент close[0] и прекрасно выдает показания.

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

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

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

Оказалось, что если на М15 русуем мувинг с периодом 21, то на М1 это не совсем то же самое, что рисовать мувинг с периодом 21*15=315.
 
Да, интересная идея, значит, Вы не вычисляете значения индикаторов через 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 даёт нужный индекс бара.
 
IBarShift() не пробовали?
Причина обращения: