Нужна помощь с закрытием ордеров!

 

у меня такой вопрос: как  написать в коде чтобы ордер закрывался за 5 минут до закрытия свечи 4Н?

для дневок я понимаю как сделать :

if(Hour()>23 && Minute()>55)

for(i=0;i<OrderTotal();i++)

OrderClose(.....)

И еще вопрос есть ли принципиальное отличие в циклах for(i=0;i<OrderTotal();i++) и for(i=OrderTotal();i>=0;i--)

или отличие только в порядке выбора ордеров?

                                    

 
nord >>:

И еще вопрос есть ли принципиальное отличие в циклах for(i=0;i<OrderTotal();i++) и for(i=OrderTotal();i>=0;i--)

или отличие только в порядке выбора ордеров?


for(i=0;i<OrderTotal();i++) здесь будут обработаны не все ордера т,к уже на втором цикле i=1, а индекс первого ордера будет равен 0.

for(i=OrderTotal();i>=0;i--) здесь они вообще не будут закрыты, есть ордера 1,2,3 индексы у них соответсвенно 0,1,2; a i=3.

Вывод: надо почитать учебник.


https://book.mql4.com/ru/trading/orderclose
 
nord писал(а) >>

у меня такой вопрос: как написать в коде чтобы ордер закрывался за 5 минут до закрытия свечи 4Н?

для дневок я понимаю как сделать :

if(Hour()>23 && Minute()>55)

for(i=0;i<OrderTotal();i++)

OrderClose(.....)

И еще вопрос есть ли принципиальное отличие в циклах for(i=0;i<OrderTotal();i++) и for(i=OrderTotal();i>=0;i--)

или отличие только в порядке выбора ордеров?

Вызвать переменную Time[0] - это начало текущей свечи и прибавить к ней 3*60+55 минут, и закрывать ордера.

if(CurrentTime() > Time[0] + (3*60 +55)*60 ) OrderClose(....);

 
FION >>:

Вызвать переменную Time[0] - это начало текущей свечи и прибавить к ней 3*60+55 минут, и закрывать ордера.

if(CurrentTime() > Time[0] + (3*60 +55)*60 ) OrderClose(....);

Спасибо...а зачем еще раз умножать на 60 

(3*60 +55)*60 ?

 
FION >>:

Вызвать переменную Time[0] - это начало текущей свечи и прибавить к ней 3*60+55 минут, и закрывать ордера.

if(CurrentTime() > Time[0] + (3*60 +55)*60 ) OrderClose(....);

Как-то не правильно.

 
Murman >>:

Как-то не правильно.

а как правильно?

 
Murman >>:

Как-то не правильно.

а как правильно?

 
nord >>:

а как правильно?


Сложный вопрос. У Вас в первом посте вроде как вариант. Только правильней надо писать так наверно: TimeHour(TimeCurrent())......

А так же не забывать что не все свечи Н4 состоят из четырех свечей Н1.


ЗЫ. Про закрытие ордеров здесь еще хорошо написано:

http://www.alpari.ru/ru/articles_mql4/8.html
 
nord писал(а) >>

Спасибо...а зачем еще раз умножать на 60

(3*60 +55)*60 ?

3*60 = 3 чачса по 60 минут,

(3*60 +55)*60 = кол-во секунд во всех вместе взятых минутах.

 

Попробуйте так:

if((Hour()==3 || Hour()==7 || Hour()==11 || Hour()==15 || Hour()==19 || Hour()==23) && Minute()>=55)
  {
   OrderClose(....);
  }
 
Murman >>:

Сложный вопрос. У Вас в первом посте вроде как вариант. Только правильней надо писать так наверно: TimeHour(TimeCurrent())......


А так же не забывать что не все свечи Н4 состоят из четырех свечей Н1.

может сделать так:

if((TimeHour(TimeCurrent())*60 +TimeMinute(TimeCurrent()))*60 > iTime(NULL,240,0)+(3*60+55)*60)

iTime() возвращает значение в секундах?

По моему надо использовать функции Hour() и Minute()

"Функции TimeSeconds (), TimeMinute(), TimeHour(), TimeDay(), TimeMonth(), TimeYear(), TimeDayOfWeek () и TimeDayOfYear()
Это - группа подобных функций, возвращающих соответственно количество секунд, прошедших с начала минуты, минуту, час, день, месяц, год, день недели и день в году для указанного времени"