![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
счетчик?
Я программирую индикаторы уже столько месяцев, что немного не разбираюсь в экспертах, но я намерен решить эту проблему. По пути мне нужна небольшая помощь. В моем эксперте, который я собрал вместе, я хочу, чтобы он проверял при закрытии бара, если есть условие, которое оправдывает закрытие сделки.
Я начинаю с глобальной переменной,
datetime PreviousBar; // record candle/bar time[/CODE]
and set one bool in init()
{
do_this = true;
}
[/CODE]
blah blah boring stuff.... etc, etc
then in the main loop I have:
[CODE]
if(do_this == true)
{
PreviousBar = Time[0];
do_this= false; // so it does this only once only
}
if(NewBar() == true)
{
if(TotalOpenOrders() == blah blah close my order you crazy monkey)
}
and outside the main loop I have:
[CODE]//--- returns true if current bar just formed
bool NewBar()
{
if(PreviousBar<Time[0])
{
PreviousBar = Time[0];
return(true);
}
else
{
return(false);
}
return(false);
}Итак, она настроена на выполнение один раз за бар. Я хочу сделать функцию, которая увеличивает 90 секунд или 60 секунд или что-то еще, а затем устанавливает bool в true после увеличения времени. По сути, я хочу проверять индикаторы каждые 60, 90, 120 секунд или что-то еще, а не по закрытию бара. Как мне это сделать?
Спасибо за любую помощь,
- nittany1
Я программировал индикаторы так много месяцев, что немного не разбираюсь в экспертах, но я намерен решить эту проблему. На этом пути мне нужна небольшая помощь. В моем эксперте, который я собрал вместе, я проверяю при закрытии бара, есть ли условие, которое оправдывает закрытие сделки.
Я начинаю с глобальной переменной,
datetime PreviousBar; // record candle/bar time[/CODE]
and set one bool in init()
{
do_this = true;
}
[/CODE]
blah blah boring stuff.... etc, etc
then in the main loop I have:
[CODE]
if(do_this == true)
{
PreviousBar = Time[0];
do_this= false; // so it does this only once only
}
if(NewBar() == true)
{
if(TotalOpenOrders() == blah blah close my order you crazy monkey)
}
and outside the main loop I have:
[CODE]//--- returns true if current bar just formed
bool NewBar()
{
if(PreviousBar<Time[0])
{
PreviousBar = Time[0];
return(true);
}
else
{
return(false);
}
return(false);
}Итак, она настроена на выполнение один раз за бар. Я хочу сделать функцию, которая увеличивает 90 секунд или 60 секунд или что угодно, а затем устанавливает bool в true после увеличения этого времени. По сути, я хочу проверять индикаторы каждые 60, 90, 120 секунд или что-то еще, а не по закрытию бара. Как мне это сделать?
Спасибо за любую помощь,
- nittany1Это должно помочь. Помните, что MT использует тиковое исполнение, поэтому посекундная точность невозможна (если только вы не зациклите все в подзаголовке Init()).
if (CallIndicatorsCheck())
{
// ваш код здесь
}
bool CallIndicatorsCheck()
{
static datetime Oldtime;
int Secs = 90;
bool Flag;
if (CurrTime() >= Oldtime) {
Oldtime = CurrTime() + Secs;
Flag = true; }
return (Flag);
}
Размещение комментария
Кто-нибудь может показать мне код для размещения комментария в ПЕРВОМПРАВОМ углу экрана, а не в левом верхнем по умолчанию?
Спасибо!![](https://c.mql5.com/forextsd/smiles/regular_smile.png)
Не мог бы кто-нибудь показать мне код, чтобы поместить комментарий в верхнийправый угол экрана, а не в левый верхний по умолчанию? Спасибо!
Вы не можете. Из руководства по MQL4:
Если вам нужно по смерти, вы можете создавать объекты.
Кто-нибудь может показать мне код для размещения комментария вПРАВОМ верхнемуглу экрана, а не в левом верхнем по умолчанию? Спасибо!
LinusGuy прав; прямого пути нет. Простым обходным решением является заполнение комментария пробелами...
Comment(" hello world!");
сместит текст вправо.
Вы также можете вставить переносы строк для уменьшения страницы.
Comment("\n\n\n\n\n\n\n\nyour text");
или комбинируйте перевод строки и пробел для печати в правом нижнем углу экрана.
mog
LinusGuy прав, прямого пути нет. Простым обходным решением является заполнение комментария пробелами...
Comment(" hello world!");
сместит текст вправо.
Вы также можете вставить строчную подачу, чтобы опустить страницу вниз.
Comment("\n\n\n\n\n\n\nyour text");
или комбинируйте перевод строки и пробел для печати в правом нижнем углу экрана.
mogСпасибо за помощь. Я попробую!![](https://c.mql5.com/forextsd/smiles/regular_smile.png)
отсутствие новой сделки в течение X баров после убыточной сделки
привет команда - надеюсь, кто-нибудь сможет помочь, пожалуйста...
как остановить начало новой сделки в течение 10 баров, если последняя сделка была убыточной?
спасибо
Приведенная ниже функция вернет true, если в истории счета есть убыточная сделка, которая закрылась на открытии или после открытия 10:th прошлого бара (текущий бар равен 0),
и вернет false в противном случае.
{
datetime since = Time[ bar+10 ];
for ( int i = OrdersHistoryTotal() - 1; i >= 0; i-- ) {
if ( ! OrderSelect( i, SELECT_BY_POS, MODE_HISTORY )
continue;
if ( OrderProfit() = since )
return( true );
}
return( false );
}
[/PHP]
If you add that function to your EA, then include a statement like the following in the start() function, then Bob's your uncle.
[PHP]if ( postMortem() ) return( 0 );Спасибо большое за это - я попробую.
с уважением
ребята, у вас такая же проблема?
Я закодировал эксперта. Я хочу открывать позицию, когда цена совпадает с ценой одного индикатора. Для этого я использую следующее предложение:
//на покупку
double indicatorpast = icustom(....................,1);
double indicatornow = icustom(....................,0);
if (close[1]indicatornow) OpenBUY();
if (close[1]>indicatorpast && close[0]<indicatornow) OpenSELL();
но с этим сатацией эксперт открывает позиции не только когда цена пересекает индикатор, он открывает позицию и выше индикатора. Я хочу, чтобы эксперт открывал позицию ТОЛЬКО при пересечении индикатора, поэтому я попробовал так:
//на покупку
double indicatorpast = icustom(....................,1);
double indicatornow = icustom(....................,0);
if (close[1]<indicatorpast && close[0]==indicatornow) OpenBUY();
if (close[1]>indicatorpast && close[0]==indicatornow) OpenSELL();
Но это утверждение не выполняется.
Вы знаете, что происходит? Потому что я думаю, что в этом утверждении нет ошибок.
С уважением.