Пропуск свечей

 

Здравствуйте. Подскажите пожалуйста как пропустить 50 свечей на графике?

t=iTime(NULL,0,i+1);
if(iBarShift(NULL,0,t)>50)

такой вариант работает, но только в будущем. На истории не пропускает эти 50 свечей.

 
Igor Kryuchkov:

Здравствуйте. Подскажите пожалуйста как пропустить 50 свечей на графике?

такой вариант работает, но только в будущем. На истории не пропускает эти 50 свечей.


Подробнее, пожалуйста. Пока вопрос непонятен. Что значит "пропустить 50 свечей"?

 
Ihor Herasko:

Подробнее, пожалуйста. Пока вопрос непонятен. Что значит "пропустить 50 свечей"?


Есть сигнал. У него рисуется линия на 50 баров вперед, но условия на отрисовку сигнала еще раз выполняются раз от раза в этот же момент и получается наложение сигналов другу на друга в некоторых местах. Мне надо что бы после сигнала не трогались условия еще 50 баров. Примерный код.

if(a!=1&&iRSI(NULL, 0, 14, PRICE_CLOSE, i+1)>50)
{
Отрисовка сигнала
a=1;
}

// тут нужно подождать 50 баров и сделать а=0;
// как это осуществить?



if(a!=1&&iRSI(NULL, 0, 14, PRICE_CLOSE, i+1)>50) // такой вариант подходит, но он работает только когда график идет вперед,на истории налазиет друг на друга
{
Отрисовка сигнала
t=iTime(NULL,0,i+1);
a=1;
}

if(iBarShift(NULL, 0, t)>50)
{

a=0;
}


Пробывал еще так:


if(a!=1&&iRSI(NULL, 0, 14, PRICE_CLOSE, i+1)>50) // такой вариант и на истории и на графике вперед работает как надо, но стоит войти во входные параметры и не чего
{                                                //не меняя нажать ок, на истории вылазят наложенные сигналы .
Отрисовка сигнала
t=iTime(NULL,0,i+1);
a=1;
}

if(Bars(NULL, 0, t,iTime(NULL,0,i+1))>50)
{
a=0;
}
 
Igor Kryuchkov:

Есть сигнал. У него рисуется линия на 50 баров вперед, но условия на отрисовку сигнала еще раз выполняются раз от раза в этот же момент и получается наложение сигналов другу на друга в некоторых местах. Мне надо что бы после сигнала не трогались условия еще 50 баров. Примерный код.

50 баров это PeriodSeconds()*50;

Так вот и сравнивай текущее время с временем запомненным в момент появления сигнала.

 
Alexey Viktorov:

50 баров это PeriodSeconds()*50;

Так вот и сравнивай текущее время с временем запомненным в момент появления сигнала.


Ни чего на истории не отображаеться.

 
Igor Kryuchkov:

Ни чего на истории не отображаеться.

Я не говорил что что-то должно отображаться. Это всего лишь ответ на конкретный вопрос.

if(a == 0 &&iRSI(NULL, 0, 14, PRICE_CLOSE, i+1)>50) // такой вариант подходит, но он работает только когда график идет вперед,на истории налазиет друг на друга
{
Отрисовка сигнала
t=iTime(NULL,0,i+1);
a=1;
}

if(a=1 && TimeCurrent()-t >= PeriodSeconds()*50)
{

a=0;
}

Пока не отсчитаем 50 баров, а будет равно 1 и в первое условие не войдём.

После того как "а" станет равно 0 войдём в первое условие, время t будет иметь новую точку отсчёта, "а" будет равно 1 и опять будет ожидание до обнуления переменной "а".

 
Alexey Viktorov:

Я не говорил что что-то должно отображаться. Это всего лишь ответ на конкретный вопрос.

Пока не отсчитаем 50 баров, а будет равно 1 и в первое условие не войдём.

После того как "а" станет равно 0 войдём в первое условие, время t будет иметь новую точку отсчёта, "а" будет равно 1 и опять будет ожидание до обнуления переменной "а".


Не подходит такое решение проблемы. Все равно в некоторых местах налазиет.

 
Igor Kryuchkov:

Не подходит такое решение проблемы. Все равно в некоторых местах налазиет.

Каков вопрос таков и ответ. За остальным сюда.

 
Alexey Viktorov:

Каков вопрос таков и ответ. За остальным сюда.


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

if(Bars(NULL, 0, t,iTime(NULL,0,i+1))>50)
{
a=0;
}
 
Igor Kryuchkov:

Есть сигнал. У него рисуется линия на 50 баров вперед, но условия на отрисовку сигнала еще раз выполняются раз от раза в этот же момент и получается наложение сигналов другу на друга в некоторых местах. Мне надо что бы после сигнала не трогались условия еще 50 баров. Примерный код.


Тогда так:

static datetime dtLastSignalTime = 0;

...
if (dtLastSignalTime == 0 && iRSI(NULL, 0, 14, PRICE_CLOSE, i+1) > 50)
{
   // Отрисовка сигнала
   dtLastSignalTime = iTime(NULL, 0, i + 1);
}

// тут нужно подождать 50 баров
int nLastSignalBarIndex = iBarShift(NULL, 0, dtLastSignalTime);
if (i + 1 - nLastSignalBarIndex > 50)
   dtLastSignalTime = 0;
 
Ihor Herasko:

Тогда так:


Рисует всего один сигнал на истории.

Причина обращения: