Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 249

 
Sepulca:

Может так лучше

Только местами поменять. Всё-таки Hour()>OpenHH чаще чем час с минутами.
 
artmedia70:
Только местами поменять. Всё-таки Hour()>OpenHH чаще чем час с минутами.


Вы думаете это повысит шустрость советника? Интересно, может быть... Честно говоря никогда не задумывался над порядком выставления условий в IFе..)
 
Sepulca:

Вы думаете это повысит шустрость советника? Интересно, может быть... Честно говоря никогда не задумывался над порядком выставления условий в IFе..)
Ну... Я не говорю о огромном приросте, но, всё же... пока ещё не вышел обновлённый терминал с новым MQL4, все логические условия читаются до конца, даже если первое ложно
 
Sepulca:


Вроде всё правильно, должно работать. Попробовал Ваш код у себя - работает с минутами. Но только с 14:25 до 14:59, с 15:25 до 15:59 и т.д.


Спасибо за скорый ответ, но - увы, что-то не получается... Код работает только в таком варианте, как в теле скрипта, так и в теле советника. По времени и функционалу - все нормально. Ордера выставляются только по часам!
int start()
{
int OpenHH=14,OpenMM=25;
bool Trade=true;
//----
if (Trade) // Разрешение на торговлю.
if (TimeHour(TimeCurrent()) >= OpenHH ) // В назначенный час
{ OpenOrders();Print("Время пришло ",TimeHour(TimeCurrent()),":",TimeMinute(TimeCurrent())); return(0); } // открыть ордера.
//----
return(0);
}
//+------------------------------------------------------------------+
void OpenOrders(){return(0);}

Но как только в код добавляем минуты ( TimeMinute(TimeCurrent()) >= OpenMM ) - никакого результата.

Советник также отказывается выставлять ордера по минутам, при использовании функции StrToTime().

Спасибо еще раз... Буду копать дальше...

 
Sepulca:

Может так лучше

Не... Так тоже не работает...

Даже при использовании другой функции StrToTime() - если указать время в целых часах - все нормально, но как только добавляются минуты - никакого результата. Хотя, как я писал в 1-ом сообщении, по пятницам ордера в 23:45 закрываются без проблем...

bool Trade=true;

string OpenTime = "14:00"; // Вот так работает!!!

string OpenTime = "14:25"; // А вот так - не работает!!!

if ( StrToTime(OpenTime) == TimeCurrent() && Trade )

{ OpenOrders();Print("Время пришло ",TimeHour(TimeCurrent()),":",TimeMinute(TimeCurrent())); return(0); }
//----
return(0);
}
//+------------------------------------------------------------------+
void OpenOrders(){return(0);}

 
Crosswert:

Не... Так тоже не работает...

Даже при использовании другой функции StrToTime() - если указать время в целых часах - все нормально, но как только добавляются минуты - никакого результата. Хотя, как я писал в 1-ом сообщении, по пятницам ордера в 23:45 закрываются без проблем...

bool Trade=true;

string OpenTime = "14:00"; // Вот так работает!!!

string OpenTime = "14:25"; // А вот так - не работает!!!

if ( StrToTime(OpenTime) == TimeCurrent() && Trade )

{ OpenOrders();Print("Время пришло ",TimeHour(TimeCurrent()),":",TimeMinute(TimeCurrent())); return(0); }
//----
return(0);
}
//+------------------------------------------------------------------+
void OpenOrders(){return(0);}


Ну не знаю... У меня и этот код работает....

 
А как Вы тестируете? Если,к примеру, на H1 и по ценам открытия, то наверное не будет работать.
 
Sepulca:
А как Вы тестируете? Если,к примеру, на H1 и по ценам открытия, то наверное не будет работать.
Посоветуйте на минутках по ценам открытия тестировать.
 
Sepulca:
А как Вы тестируете? Если,к примеру, на H1 и по ценам открытия, то наверное не будет работать.

Ну вот видите как все оказывается просто... Необходимо чтобы минуты были кратны ТФ ...

Теперь / if ( TimeCurrent() == StrToTime(OpenTime) && Trade ), при OpenTime = 14:25 / будет работать, но только на ТФ=М1 и М5... Для функции открытия ордеров нужны текущие котировки, для функции закрытия ордеров они не нужны...

Этот момент я как-то "протупил" (не додумал), видно по неопытности...

Спасибо огромное, вроде разобрался...

 

Sepulca:

А как Вы тестируете? Если,к примеру, на H1 и по ценам открытия, то наверное не будет работать.


Ха-ха... А вот и наврал...

Проблема оказалась в функции открытия ордеров OpenOrders(). Совсем забыл убрать контроль открытия ордеров на пробое свечи (баре):

if (Volume[0] > 1) return;

Поэтому на каком ТФ советник тестировался - на таких минутах он ордера открывал...

Протупил вообще, по тяжелой...

Спасибо...

Причина обращения: