Индикатор Разные вопросы - страница 6

 
Он ответил, присмотревшись.
 
Marco vd Heijden:

Если речь идет о переключении таймфреймов, то таймер - не лучший вариант, потому что таймер уничтожается при переключении фрейма.

Вы можете создавать свои строки в функции OnInit(), а обновлять их в функции OnTick() или OnTimer().

Также обратите внимание на ObjectsDeleteAll() в функции OnDeint(), это позволит убедиться, что все объекты будут удалены до того, как они будут созданы снова на новом кадре.

---

Кроме того, если вы хотите обновлять линии каждый раз, когда возникает новая свеча, вы можете объединить пример на предыдущей странице с последним, чтобы получить следующее:

...

Если есть еще какие-либо проблемы, пожалуйста, покажите код.

Я изучил ваши последние комментарии.

Еще 2 замечательных комментария. Похоже, что код похож (ваш комментарий #18), но для меня это совсем другое.

Итак, да, я чувствовал, что 'Timer' разрушается, когда я переключаю кадр. Но это очень полезно для меня, потому что мой индикатор обновляется раз в PERIOD_**'s.

Да! Я уже создал основные линии в специальной функции init(), а их обновление в функции OnTimer().

(Вы можете понять меня более четко из приведенного ниже кода)

... новые свечи возникают, вы можете комбинировать...

Если есть еще какие-либопроблемы...

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

Как я уже сказал, есть одна проблема, которая требует больше времени. Сейчас мне нужно показать вам часть кода моего индикатора. И я не использую 'switch operator & ObjectMove()' в своем индикаторе.

@Marco

Пожалуйста, сообщите мне , хорош ли приведенный ниже код или нет?

Что вы посоветуете, могу ли я начать исследовать широко ваши последние два комментария и могу ли я включить 'switch() и ObjectMove()' в мой индикатор? (Почему я спрашиваю, прежде чем сделать? - потому что это займет много времени).

(Как вы видите, я получил больше пользы от вашего комментария #18 - и теперь я стою перед дилеммой между моим кодом ниже и вашими последними двумя замечательными комментариями).

//|+--------------------------------------------------------------------------------+
int  init()
{
    EventSetMillisecondTimer( 1250 );
    _CreateLines_M5();

    return(INIT_SUCCEEDED);
}
//|+--------------------------------------------------------------------------------+
int  start()
{
    return(0);
}
//|+--------------------------------------------------------------------------------+
int  deinit()
{
    ObjectsDeleteAll( 0, _prefix );
    return(0);
}
//|+--------------------------------------------------------------------------------+
void OnTimer()
{
    //---
    if ( _dt_Prd_M5 != iTime( Symbol(), _prd_M5, 0 ) )
    {
         _dt_Prd_M5  = iTime( Symbol(), _prd_M5, 0 );
         _CreateLines_M5();
    }
    return;
}
//|+--------------------------------------------------------------------------------+
void _CreateLines_M5( )
{
    //---
    int _dayCnt_M5 = _prd_cnt + 0;
    int    _cnt_M5 = iBarShift( Symbol(), 0, iTime( Symbol(), PERIOD_W1, _dayCnt_M5 ) );
    for ( i = 0; i < _cnt_M5; i++ )
    {
        _time_M5     = Time[i];
        _prdCvrt_M5  = PeriodSeconds( _prd_M5 );
        _timeCvrt_M5 = _time_M5 - ( _time_M5 % _prdCvrt_M5 ) + _prdCvrt_M5;

        _vlineName_M5 = _prefix + "PERIOD_M5 - " + TimeToStr( _timeCvrt_M5, TIME_DATE|TIME_MINUTES );

        if ( _Period < PERIOD_M15 )
        {
            if (
                    ...
                    TimeHour( _timeCvrt_M5 ) == 12
               )
            {
                ObjectCreate ( _vlineName_M5, OBJ_VLINE, 0, _timeCvrt_M5, 0  );
            }
        }
    }
    return;
}

Всего вам наилучшего.

 
Keith Watford:

Не знаю, как другие, но меня отвлекает и раздражает ваше сочетание шрифта, цветов, жирного и курсивного начертания. На самом деле я не мог потрудиться прочитать этот пост.

Полностью согласен, с самого начала темы я "прыгаю" выше всех этих комментариев.
 
Max Enrik:

Я изучил ваши последние комментарии.

Еще 2 замечательных комментария. Похоже, что код похож (ваш комментарий #18), но для меня это совсем другое.

Итак, да, я чувствовал, что 'Timer' разрушается, когда я переключаю кадр. Но это очень полезно для меня, потому что мой индикатор обновляется раз в PERIOD_**'s.

Да! Я уже создал основные линии в специальной функции init(), а их обновление в функции OnTimer().

(Вы можете понять меня более четко из приведенного ниже кода)

... новые свечи возникают, вы можете комбинировать...

Если есть еще какие-либопроблемы...

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

Как я уже сказал, есть одна проблема, которая требует больше времени. Сейчас мне нужно показать вам часть кода моего индикатора. И я не использую 'switch operator & ObjectMove()' в своем индикаторе.

@Marco

Пожалуйста, сообщите мне , хорош ли приведенный ниже код или нет?

Что вы посоветуете, могу ли я начать исследовать широко ваши последние два комментария и могу ли я включить 'switch() и ObjectMove()' в мой индикатор? (Почему я спрашиваю, прежде чем сделать? - потому что это займет много времени).

(Как вы видите, я получил больше пользы от вашего комментария #18 - и теперь я стою перед дилеммой между моим кодом ниже и вашими последними двумя замечательными комментариями).

//|+--------------------------------------------------------------------------------+
int  init()
{
    EventSetMillisecondTimer( 1250 );
    _CreateLines_M5();

    return(INIT_SUCCEEDED);
}
//|+--------------------------------------------------------------------------------+
int  start()
{
    return(0);
}
//|+--------------------------------------------------------------------------------+
int  deinit()
{
    ObjectsDeleteAll( 0, _prefix );
    return(0);
}
//|+--------------------------------------------------------------------------------+
void OnTimer()
{
    //---
    if ( _dt_Prd_M5 != iTime( Symbol(), _prd_M5, 0 ) )
    {
         _dt_Prd_M5  = iTime( Symbol(), _prd_M5, 0 );
         _CreateLines_M5();
    }
    return;
}
//|+--------------------------------------------------------------------------------+
void _CreateLines_M5( )
{
    //---
    int _dayCnt_M5 = _prd_cnt + 0;
    int    _cnt_M5 = iBarShift( Symbol(), 0, iTime( Symbol(), PERIOD_W1, _dayCnt_M5 ) );
    for ( i = 0; i < _cnt_M5; i++ )
    {
        _time_M5     = Time[i];
        _prdCvrt_M5  = PeriodSeconds( _prd_M5 );
        _timeCvrt_M5 = _time_M5 - ( _time_M5 % _prdCvrt_M5 ) + _prdCvrt_M5;

        _vlineName_M5 = _prefix + "PERIOD_M5 - " + TimeToStr( _timeCvrt_M5, TIME_DATE|TIME_MINUTES );

        if ( _Period < PERIOD_M15 )
        {
            if (
                    ...
                    TimeHour( _timeCvrt_M5 ) == 12
               )
            {
                ObjectCreate ( _vlineName_M5, OBJ_VLINE, 0, _timeCvrt_M5, 0  );
            }
        }
    }
    return;
}

Всего вам наилучшего.

Если получится, а если нет - продолжайте пробовать.

 
Marco vd Heijden:

Если получится, а если нет, просто продолжайте пробовать.

Большое спасибо!
 

#Время брокера - повторное открытие

Я прочитал несколько форумов здесь и там. Возможно, мое решение есть на одном из них. Но я так и не понял.

Перед этим комментарием - я попробовал еще раз. Но я не могу найти решение.
Итак, у меня есть 2 брокера, A и B.

  • A: Vline объекты размещают правильное время. Например: Время 2017.02.18 0:00 и vline объект размещает то же время.
  • B: Vline объект размещает неправильное время (возможно я ошибаюсь). например: Время 2017.02.18 1:00, но vline объект размещает 0:00.
Так что если кто-то понимает мою проблему, любой комментарий будет лучше для меня.

Хороших выходных.

 
Max Enrik:

#Время брокера - повторное открытие

Я прочитал несколько форумов здесь и там. Возможно, мое решение есть на одном из них. Но я так и не понял.

Перед этим комментарием - я попробовал еще раз. Но я не могу найти решение.
Итак, у меня есть 2 брокера, A и B.

  • A: Vline объекты размещают правильное время. Например: Время 2017.02.18 0:00 и vline объект размещает то же время.
  • B: Vline объект размещает неправильное время (возможно я ошибаюсь). например: Время 2017.02.18 1:00, но vline объект размещает 0:00.
Так что если кто-то понимает мою проблему, любой комментарий будет лучше для меня.

Хороших выходных.

Мне нужно увидеть код
 

Приведенный ниже код дает мне разные результаты в двух разных брокерах.
(Мой предыдущий комментарий может помочь вам понять меня)

Заранее спасибо.

void PerioDay()
  {
// High

   ObjectSet("PeriodHigh",OBJPROP_PRICE1,iHigh(Symbol(),PERIOD_D1,0));
   ObjectSet("PeriodHigh",OBJPROP_PRICE2,iHigh(Symbol(),PERIOD_D1,0));

   ObjectSet("PeriodHigh",OBJPROP_TIME1,TimeCurrent());
   ObjectSet("PeriodHigh",OBJPROP_TIME2,TimeCurrent() -(TimeCurrent()-iTime(Symbol(),PERIOD_D1,0)));

// Low

   ObjectSet("PeriodLow",OBJPROP_PRICE1,iLow(Symbol(),PERIOD_D1,0));
   ObjectSet("PeriodLow",OBJPROP_PRICE2,iLow(Symbol(),PERIOD_D1,0));

   ObjectSet("PeriodLow",OBJPROP_TIME1,TimeCurrent());
   ObjectSet("PeriodLow",OBJPROP_TIME2,TimeCurrent() -(TimeCurrent()-iTime(Symbol(),PERIOD_D1,0)));
  }
 

Если вы имеете в виду, что значения iHigh и iLow отличаются у разных брокеров, то это вполне обычное явление.

2 причины:

1. Цены у разных брокеров немного отличаются, и

2. Если серверы брокеров имеют разное смещение по Гринвичу, то бары начинаются в разное время.

 
honest_knave:

Если вы имеете в виду, что значения iHigh и iLow отличаются у разных брокеров, то это довольно частое явление.
2 причины:
1. Цены немного отличаются у разных брокеров, и
2. Если серверы брокеров имеют разное смещение по Гринвичу, то бары начинаются в разное время.

Я имею в виду только разное время.

Итак, есть ли шанс решить эту проблему, пожалуйста?

Большое спасибо.