Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
#Объектный порядок
Я создал 3 объекта, и эти объекты пересекают друг друга.
#1 Горизонтальная линия, #2 Вертикальная линия, #3 Линия тренда.
Мне нужно задать их z-позиции.
Как я могу задать им значение z позиции?
Спасибо.
Вы можете нарисовать все линии в OnInit(), а затем рисовать новые всякий раз, когда время открытия последнего бара изменится, вы будете знать, что был новый бар.
Но я не уверен, что именно вы хотите сделать.
ХОРОШО! Я попробую что-нибудь сделать. Затем я вернусь сюда.
Спасибо.
@Marco vd Heijden
Прежде чем я начну исследования по этому поводу. Я действительно хочу спросить, замедляет ли функция start() график (/ платформы MT4)?
p.s Я поместил все коды в специальную функцию start() , этот код работает на линиях периодов- H1, H4, D1, W1, MN1.
Хороших выходных и заранее спасибо.
Спасибо за ваш комментарий. (После вашего комментария я решил, что изменю кое-что в своих индикаторах - потому что почти все свои индикаторы я сделал вфункции start() ).
Я поместил нижеприведенный код в функцию start(), так что не могли бы вы мне помочь, какой способ подойдет для моего индикатора?
На самом деле я понятия не имею, как можно изменить приведенный ниже код, чтобы он перестал постоянно обновляться (без всех кодов start(), помещенных в функцию init()).
int _cnt_MN1 = 11; // 12 lines for a year 24 for two years and etc.
for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ )
{
if ( _Period < PERIOD_MN1 )
{
//---time convert
datetime _tltpMN1 = TimeToString( iTime( Symbol(), PERIOD_MN1, i_MN ), TIME_DATE );
datetime _time = iTime( Symbol(), PERIOD_MN1, i_MN );// + PeriodSeconds( PERIOD_MN1 );
//---name
string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
ObjectCreate ( 0, _vlineName_MN, OBJ_VLINE , 0, _time, 0 );
ObjectSetString ( 0, _vlineName_MN, OBJPROP_TOOLTIP , _tltpMN1 );
ObjectSetInteger ( 0, _vlineName_MN, OBJPROP_COLOR , C'180,160,080' );
ObjectSet ( _vlineName_MN, OBJPROP_BACK , true );
ObjectSet ( _vlineName_MN, OBJPROP_HIDDEN , true );
ObjectSet ( _vlineName_MN, OBJPROP_SELECTABLE , false );
ObjectSet ( _vlineName_MN, OBJPROP_STYLE , STYLE_SOLID );
} //---if Close
} //---for Close
Спасибо!
Мне очень нужна помощь, пожалуйста, кто-нибудь ответьте на мой вопрос.
Спасибо.
Я не согласен с созданием функции new bar, потому что она может быть вызвана только один раз за тик. Переменная может быть проверена несколько раз.
static datetime BOMcur=0; dateTime BOMpre = BOMcur;
BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool isNewMonth = BOMcur != BOMpre;
if(isNewMonth){
DO_UPDATE(); ...
}
string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
Пожалуйста, поместите его в эксперт вместо индикатора, это позволит легче использовать его в будущем, когда вы захотите добавить свою торговую стратегию.
Что касается вопроса о барах, храните время открытия бара в переменной datetime и просто сравнивайте записанное время с реальным временем, тогда всякий раз, когда возникает новый бар, он будет срабатывать.
Вот пример:
int OnInit()
{
//--- create timer
EventSetMillisecondTimer(250);
//--- create some things
CreateLines(); // Function that creates time lines
//--- load open times
M1=iTime(Symbol(),PERIOD_M1,0);
M5=iTime(Symbol(),PERIOD_M5,0);
M15=iTime(Symbol(),PERIOD_M15,0);
M30=iTime(Symbol(),PERIOD_M30,0);
H1=iTime(Symbol(),PERIOD_H1,0);
H4=iTime(Symbol(),PERIOD_H4,0);
D1=iTime(Symbol(),PERIOD_D1,0);
W1=iTime(Symbol(),PERIOD_W1,0);
MN1=iTime(Symbol(),PERIOD_MN1,0);
//--- set timelines
ObjectMove(0,"Time-M1",0,M1,0);
ObjectMove(0,"Time-M5",0,M5,0);
ObjectMove(0,"Time-M15",0,M15,0);
ObjectMove(0,"Time-M30",0,M30,0);
ObjectMove(0,"Time-H1",0,H1,0);
ObjectMove(0,"Time-H4",0,H4,0);
ObjectMove(0,"Time-D1",0,D1,0);
ObjectMove(0,"Time-W1",0,W1,0);
ObjectMove(0,"Time-MN1",0,MN1,0);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
if(M1!=iTime(Symbol(),PERIOD_M1,0))
{
M1=iTime(Symbol(),PERIOD_M1,0); // overwrite old value with new value
//Alert("New Bar on M1! ",TimeToString(M1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M1",0,M1,0);
}
if(M5!=iTime(Symbol(),PERIOD_M5,0))
{
M5=iTime(Symbol(),PERIOD_M5,0);
//Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M5",0,M5,0);
}
if(M15!=iTime(Symbol(),PERIOD_M15,0))
{
M15=iTime(Symbol(),PERIOD_M15,0);
//Alert("New Bar on M15! ",TimeToString(M15,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M15",0,M15,0);
}
if(M30!=iTime(Symbol(),PERIOD_M30,0))
{
M30=iTime(Symbol(),PERIOD_M30,0);
//Alert("New Bar on M30! ",TimeToString(M30,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M30",0,M30,0);
}
if(H1!=iTime(Symbol(),PERIOD_H1,0))
{
H1=iTime(Symbol(),PERIOD_H1,0);
//Alert("New Bar on H1! ",TimeToString(H1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-H1",0,H1,0);
}
if(H4!=iTime(Symbol(),PERIOD_H4,0))
{
H4=iTime(Symbol(),PERIOD_H4,0);
//Alert("New Bar on H4! ",TimeToString(H4,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-H4",0,H4,0);
}
if(D1!=iTime(Symbol(),PERIOD_D1,0))
{
D1=iTime(Symbol(),PERIOD_D1,0);
//Alert("New Bar on D1! ",TimeToString(D1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-D1",0,D1,0);
}
if(W1!=iTime(Symbol(),PERIOD_W1,0))
{
W1=iTime(Symbol(),PERIOD_W1,0);
//Alert("New Bar on W1! ",TimeToString(W1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-W1",0,W1,0);
}
if(MN1!=iTime(Symbol(),PERIOD_MN1,0))
{
MN1=iTime(Symbol(),PERIOD_MN1,0);
//Alert("New Bar on MN1! ",TimeToString(MN1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-MN1",0,MN1,0);
}
}
//+------------------------------------------------------------------+
static datetime BOMcur=0; dateTime BOMpre = BOMcur;
BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool isNewMonth = BOMcur != BOMpre;
if(isNewMonth){
DO_UPDATE(); ...
}
string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
Спасибо за ваш комментарий.
После вашего комментария я начал пытаться изучить ваш комментарий. (Потому что я никогда не использовал функцию 'Void OnTick()').
В любом случае, мистер Уильям, ваш комментарий действительно дал мне идею и также научил меня кое-чему.
(p.s. если я думаю неправильно, пожалуйста, дайте мне знать).
До сборки 600 (3 февраля2014 года) был только start(). Теперь есть OnTick (советники,) OnCalculate (индикаторы,) и OnStart (скрипты.) Я забыл, что вы говорили об индикаторе.
Начните использовать новые функции обработки событий - Функции - Основы языка - Справочник MQL4. Смотрите Как правильно делать обратный просмотр.