заданное время работы эксперта

 
Подскажите, как задать время работы эксперта, дабы он совершал торговую операцию только на следующем баре (т.е., не раньше его открытия, и не позже, соответственно, его закрытия)...
 

Время открытия текущего бара плюс Period()*60, получаем закрытие текущего=открытие следующего.

Еще плюс Period()*60, получаем закрытие следующего.

Потом проверяем текущее время, и если оно вне диапазона - не торгуем.

 

новая тема - продолжение предыдущей, как я понимаю? https://www.mql5.com/ru/forum/127861

 
denis_orlov:

Время открытия текущего бара плюс Period()*60, получаем закрытие текущего=открытие следующего.

Еще плюс Period()*60, получаем закрытие следующего.

Потом проверяем текущее время, и если оно вне диапазона - не торгуем.


Таким образом? И, наверное, если текущее время в диапазоне - то торгуем?
datetime PB = Time[0]+Period()*60;
datetime PE = PB+Period()*60;
if (TimeCurrent()>PB && TimeCurrent()<PE)
{     }
DDFedor:

новая тема - продолжение предыдущей, как я понимаю? https://www.mql5.com/ru/forum/127861


понимаете не правильно.....
 
Таким образом? И, наверное, если текущее время в диапазоне - то торгуем?
datetime PB = Time[0]+Period()*60;
datetime PE = PB+Period()*60;
if (TimeCurrent()>PB && TimeCurrent()<PE)
{     }
Как можно торговать в будущем периоде?
 
abolk:
Как можно торговать в будущем периоде?



В первом посте я описал задачу... 

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

Если у вас есть желание просто поумничать - можете поумничать.....

 
Azerus:



В первом посте я описал задачу...

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

Если у вас есть желание просто поумничать - можете поумничать.....


Написанный Вами код соответствует описанной Вами в первом посте задачи. В связи с чем вопрос к Вам как постановщику задачи: "Как можно совершить торговую операцию на следующем баре?" У бара, следующего за текущим (нулевым) баром нет параметров открытия, закрытия и пр., как нет и самого бара.

Вывод: разберитесь в своём "понимании полученного ранее совета"

 

С точки зрения mql, если (i) - некоторый временной период, то следующий период по времени - (i-1). Ограничение (i>=0), т.к. (i=0) - это текущее время.

 
abolk:


Написанный Вами код соответствует описанной Вами в первом посте задачи. В связи с чем вопрос к Вам как постановщику задачи: "Как можно совершить торговую операцию на следующем баре?" У бара, следующего за текущим (нулевым) баром нет параметров открытия, закрытия и пр., как нет и самого бара.

Вывод: разберитесь в своём "понимании полученного ранее совета"

Под "следующим баром" имеется в виду бар, после бара, на котором советник подключен к чарту. По окончании бара, на котором советник подключен к чарту, открывается новый бар, и именно на нем советник должен\может совершить торговую операцию - не раньше и не позже.... 

Если Вы намекаете, что при открытии нового бара, переменные datetime PB = Time[0]+Period()*60; и datetime PE = PB+Period()*60; пересчитаются и условие станет заведомо невыполнимым, то я это отчасти и сам подозреваю.... Именно поэтому, я и выложил код для замечаний....

Уточню вопрос: как можно сделать так,  чтобы переменные datetime PB и datetime PE, будучи высчитанными на момент присоединения советника к чарту, больше не пересчитывались?



 
Azerus:

Уточню вопрос: как можно сделать так, чтобы переменные datetime PB и datetime PE, будучи высчитанными на момент присоединения советника к чарту, больше не пересчитывались?

Можно, например, так:

int start()
{
static datetime expStartTime= 0;
static datetime expStopTime = 0;
    if(expStartTime==0)
    {
        expStartTime = Time[0]+Period()*60;
        expStopTime  = expStartTime+Period()*60;
    }
    
    datetime  curTime = TimeCurrent();  
    if(curTime<expStartTime) return(0);
    if(curTime>expStopTime)
    {
        if(CheckOpenPositionCount()>0)
        {
            if(CheckforClose()>0)
            {
                if(CheckOpenPositionCount()>0)
                   CheckforTral();
            }
            else CheckforTral();
        }
        return(0);   
    }
    /*
    .................................................
    Y code heare
    .................................................
    */
    return(0);
}



Удачи.

 
VladislavVG:

Можно, например, так:


Удачи.



Немного не понятно это:

if(curTime<expStartTime) return(0);
    if(curTime>expStopTime)                // если время работы советника завершено.....
    {
        if(CheckOpenPositionCount()>0)     // проверка на открытые позиции ??????? - а зачем?
        {
            if(CheckforClose()>0)          // проверка на закрытие ??????? - что это?
            {
                if(CheckOpenPositionCount()>0)
                   CheckforTral();
            }
            else CheckforTral();
        }
        return(0);   
    }
    /*
    .................................................
    Y code heare
    .................................................
    */
    return(0);
}

Может для моего условия можно записать так:

if(curTime<expStartTime) return(0);
if(curTime>expStopTime) return(0);
    if(curTime>=expStartTime && curTime<expStopTime)



P.S. Хочу поблагодарить за конструктивное участие.....
Причина обращения: