Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Если речь идет о переключении таймфреймов, то таймер - не лучший вариант, потому что таймер уничтожается при переключении фрейма.
Вы можете создавать свои строки в функции 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;
}
Всего вам наилучшего.
Не знаю, как другие, но меня отвлекает и раздражает ваше сочетание шрифта, цветов, жирного и курсивного начертания. На самом деле я не мог потрудиться прочитать этот пост.
Я изучил ваши последние комментарии.
Еще 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;
}
Всего вам наилучшего.
Если получится, а если нет - продолжайте пробовать.
Если получится, а если нет, просто продолжайте пробовать.
#Время брокера - повторное открытие
Я прочитал несколько форумов здесь и там. Возможно, мое решение есть на одном из них. Но я так и не понял.
Перед этим комментарием - я попробовал еще раз. Но я не могу найти решение.
Итак, у меня есть 2 брокера, A и B.
- A: Vline объекты размещают правильное время. Например: Время 2017.02.18 0:00 и vline объект размещает то же время.
- B: Vline объект размещает неправильное время (возможно я ошибаюсь). например: Время 2017.02.18 1:00, но vline объект размещает 0:00.
Так что если кто-то понимает мою проблему, любой комментарий будет лучше для меня.Хороших выходных.
#Время брокера - повторное открытие
Я прочитал несколько форумов здесь и там. Возможно, мое решение есть на одном из них. Но я так и не понял.
Перед этим комментарием - я попробовал еще раз. Но я не могу найти решение.
Итак, у меня есть 2 брокера, A и B.
- A: Vline объекты размещают правильное время. Например: Время 2017.02.18 0:00 и vline объект размещает то же время.
- B: Vline объект размещает неправильное время (возможно я ошибаюсь). например: Время 2017.02.18 1:00, но vline объект размещает 0:00.
Так что если кто-то понимает мою проблему, любой комментарий будет лучше для меня.Хороших выходных.
Приведенный ниже код дает мне разные результаты в двух разных брокерах.
(Мой предыдущий комментарий может помочь вам понять меня)
Заранее спасибо.
{
// 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. Если серверы брокеров имеют разное смещение по Гринвичу, то бары начинаются в разное время.
Если вы имеете в виду, что значения iHigh и iLow отличаются у разных брокеров, то это довольно частое явление.
2 причины:
1. Цены немного отличаются у разных брокеров, и
2. Если серверы брокеров имеют разное смещение по Гринвичу, то бары начинаются в разное время.
Я имею в виду только разное время.
Итак, есть ли шанс решить эту проблему, пожалуйста?
Большое спасибо.