Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Как исключить гэп свечу при рассчете индикатора Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
roma095



Зарегистрирован: 02.02.2012
Сообщения: 170

СообщениеДобавлено: Вс Окт 28, 2012 3:49 pm Ответить с цитатой Вернуться к началу

Есть необходимость исключить гэп свечу для рассчета индикатора. Но индикаторы рассчитываются исходя из периода. как это обойти?
Посмотреть профиль Отправить личное сообщение
Mechanic



Зарегистрирован: 10.06.2008
Сообщения: 359

СообщениеДобавлено: Вс Окт 28, 2012 4:22 pm Ответить с цитатой Вернуться к началу

А что за индикатор и по каким ценам считаете? Мувингу по ценам закрытия без разницы, гэп там или не гэп...
Посмотреть профиль Отправить личное сообщение ICQ Number
roma095



Зарегистрирован: 02.02.2012
Сообщения: 170

СообщениеДобавлено: Вс Окт 28, 2012 4:27 pm Ответить с цитатой Вернуться к началу

close rsi
Посмотреть профиль Отправить личное сообщение
Mechanic



Зарегистрирован: 10.06.2008
Сообщения: 359

СообщениеДобавлено: Вс Окт 28, 2012 4:51 pm Ответить с цитатой Вернуться к началу

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

Код:
function BuiltInRSIEquivalent(period)
{
    P = N = 0;

    result = Null;

    for(i = 1; i < BarCount; i++)
    {
        diff = C[i] - C[i - 1];
        W = S = 0;

        if(diff > 0)
            W = diff;

        if(diff < 0)
            S = -diff;

        P = ((period - 1) * P + W) / period;
        N = ((period - 1) * N + S) / period;

        if(i >= period)
            result[i] = 100 * P / (P + N);
    }

    return result;
}


Последний раз редактировалось: Mechanic (Вс Окт 28, 2012 4:55 pm), всего редактировалось 2 раз(а)
Посмотреть профиль Отправить личное сообщение ICQ Number
roma095



Зарегистрирован: 02.02.2012
Сообщения: 170

СообщениеДобавлено: Вс Окт 28, 2012 4:54 pm Ответить с цитатой Вернуться к началу

Вы хотите сказать что там идет рассчет именно по открытию-закрытию дня? Если я буду использовать ТФ 15 минут,он мне должен вычислить по 15 минуткам значение RSI
Посмотреть профиль Отправить личное сообщение
Mechanic



Зарегистрирован: 10.06.2008
Сообщения: 359

СообщениеДобавлено: Вс Окт 28, 2012 4:57 pm Ответить с цитатой Вернуться к началу

Да нет, "вчерашнее-сегодняшнее" - это я условно, имея в виду текущий и предыдущий бары. Конечно, считается на том таймфрейме, на который кидаете индикатор. Я просто к тому, что цены открытия баров в расчёте RSI не используются, а при гэпе только они оказываются "не там". Цены закрытия гэп не искажает. Вот мне и непонятно, что именно вы хотите исключить и зачем.
Посмотреть профиль Отправить личное сообщение ICQ Number
rupiter



Зарегистрирован: 16.09.2013
Сообщения: 62

СообщениеДобавлено: Вт Мар 15, 2016 12:21 pm Ответить с цитатой Вернуться к началу

(Наверное, в этой ветке это будет к месту)

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

SetBarsRequired(sbrAll, sbrAll);
invClose = 0;
delta = 0;
DateOfBar = DateNum();

for( i = 0; i < BarCount ; i++ )
{
 
  if( i > 0 )
   {
     if( DateOfBar[BarCount-i-1] != DateOfBar[BarCount-i] )
      delta[BarCount-i-1] += Close[BarCount-i] - Close[BarCount-i-1] + delta[BarCount-i];
     else
      delta[BarCount-i-1] = delta[BarCount-i];
   }

  invClose[BarCount-i-1] = Close[BarCount-i-1] + delta[BarCount-i-1];

}

Plot(invClose, "invClose", colorRed);


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

Код:

TimeFrameSet( in1Minute);

// здеськод из предыдущего примера, без инструкции plot()

TimeFrameRestore();
Plot(invClose, "invClose", colorRed);


Эффекта никакого Confused


Последний раз редактировалось: rupiter (Вт Мар 15, 2016 12:25 pm), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
rupiter



Зарегистрирован: 16.09.2013
Сообщения: 62

СообщениеДобавлено: Вт Мар 15, 2016 12:22 pm Ответить с цитатой Вернуться к началу

График
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 8509

СообщениеДобавлено: Вт Мар 15, 2016 4:36 pm Ответить с цитатой Вернуться к началу

Скорее всего дело в следующем
Функция TimeFrameSet() преобразует ТОЛЬКО массивы цен OHLCV. Соответственно на твой массив invClose она ника не влияет.
Тебе надо расчитать твой скорректированный массив invClose. Потом подменить им цены закрытия (Close = invClose) и только потом применять TimeFrameSet. При этом имей ввду, что грфик должен быть не часовой а минутный ибо на часовом графике AFL минуток не видит вообще не смотря на то, что они есть в базе.
И еще. Когда используешь функцию TimeFrameRestore() ты восстанавливаешь массивы цен к исходным. Т.е. выполненная ранее замена Close = invClose отменяется.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
rupiter



Зарегистрирован: 16.09.2013
Сообщения: 62

СообщениеДобавлено: Ср Мар 16, 2016 9:59 am Ответить с цитатой Вернуться к началу

000 писал(а):

Функция TimeFrameSet() преобразует ТОЛЬКО массивы цен OHLCV. Соответственно на твой массив invClose она ника не влияет.
Тебе надо расчитать твой скорректированный массив invClose. Потом подменить им цены закрытия (Close = invClose) и только потом применять TimeFrameSet.

Допустим, мой текущий таймфрейм графика - часовки. Если я до объявления TimeFrameSet( in1Minute) стану это делать, то мой массив invClose будет создан на часовках. Потом я его в минутный массив не смогу преобразовать!
000 писал(а):
При этом имей ввду, что грфик должен быть не часовой а минутный ибо на часовом графике AFL минуток не видит вообще не смотря на то, что они есть в базе.
В том то и дело, что моя программа корректирует (то есть, должна корректировать) цену закрытия предыдущего дня к цене закрытия первой минуты текущего дня. То есть, по идее, я всего лишь изменяю цену закрытия прошлого дня (она же - цена закрытия последнего часа прошлого дня, как и последней минуты прошлого дня).

На словах логика такая. У меня открыт часовой таймфрейм минутных данных. Инструкцией TimeFrameSet( in1Minute) я преобразую часовой массив в минутный (база же минутная, должна это позволить), корректирую цену закрытия каждого дня, затем возвращаю масштаб графика на часовой. И, кстати, почему ты говоришь , что прочие массивы, кроме OHLCV не регулируются инструкцией TimeFrameSet, когда даже в мануале показан пример создания массива скользящей средней на одном таймфрейме, а потом выложенной на другом?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 8509

СообщениеДобавлено: Ср Мар 16, 2016 1:28 pm Ответить с цитатой Вернуться к началу

Нет. Я написал, что если у тебя фрейм графика часовой, то к минуткам ты никак не можешь обратиться. Нельзя на часовом графике написать TimeFrameSet( in1Minute)

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
rupiter



Зарегистрирован: 16.09.2013
Сообщения: 62

СообщениеДобавлено: Пн Мар 21, 2016 5:54 am Ответить с цитатой Вернуться к началу

000 писал(а):
Нет. Я написал, что если у тебя фрейм графика часовой, то к минуткам ты никак не можешь обратиться. Нельзя на часовом графике написать TimeFrameSet( in1Minute)

Хорошо. А можешь подсказать какую-нибудь другую идею (чисто концептуально), как можно это сделать? То есть, приравнять цену закрытия дня к цене закрытия первой минуты следующего дня.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 8509

СообщениеДобавлено: Пн Мар 21, 2016 9:16 am Ответить с цитатой Вернуться к началу

Взять минутки, изменить цену закрытия последней свечки. При помощи фунции AddToComposite() создать новый символ без гэпа. Или дальше работать с этим символом меняя при необходимости фрейм в большую сторону функциями TimeFrameSet(). Только надо не забывать, что функция TimeFrameRestore() возвращает оригинальные цены закрытия.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
rupiter



Зарегистрирован: 16.09.2013
Сообщения: 62

СообщениеДобавлено: Пн Мар 21, 2016 5:42 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Взять минутки, изменить цену закрытия последней свечки. При помощи фунции AddToComposite() создать новый символ без гэпа. Или дальше работать с этим символом меняя при необходимости фрейм в большую сторону функциями TimeFrameSet(). Только надо не забывать, что функция TimeFrameRestore() возвращает оригинальные цены закрытия.
То есть, получается, нужно менять котировки за пределами Амиброкера, а потом импортировать их?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 8509

СообщениеДобавлено: Пн Мар 21, 2016 5:57 pm Ответить с цитатой Вернуться к началу

Зачем за пределами? Ами сам прекрасно может создать новый символ.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen