Если вечером открылись, скажем в 22 часа, а между 23 и 24 условия входа не выполнялись, то утром никак не произойдет открытие, потому-что час меньше часа из переменной.
BlockedTrade1 = Hour()+1;
заменить на
BlockedTrade1 = TimeCurrent()+3600;
А проверку
Hour() > BlockedTrade1
Заменить на
TimeCurrent() > BlockedTrade1
Сделал как вы сказали.
Вначале кода так же объявляю переменную:
int BlockedTrade1 = 0;
Начало кода проверки выглядит теперь так:
if (TimeCurrent() > BlockedTrade1 && eventSellClosed_SL > 0)
{
if (consecutive_loss==1)
Ордер на котором добавляю значение к переменной выглядит так:
if (consecutive_loss==4)
{
ticket = OrderSend(Symbol(), OP_BUY, lotd, Ask, 3, 0, 0, "", magicnumber, 0, Blue);
BlockedTrade1 = TimeCurrent()+3600;
}
Но в итоге так же, после того как задается переменная BlockedTrade1 (код выше) торговля прекращается , проходит час и сделки больше не открываются, ждал и след. дня результата нет.
Вывел для проверки comment BlockedTrade1
Сделка должна была открыться сразу
Очень надеюсь на вашу помощь
сделайте хотя бы TimeToString(BlockedTrade1 )
так удобнее смотреть
Очень надеюсь на вашу помощь
Сделал как вы сказали.
Вначале кода так же объявляю переменную:
int BlockedTrade1 = 0;
Начало кода проверки выглядит теперь так:
if (TimeCurrent() > BlockedTrade1 && eventSellClosed_SL > 0)
{
if (consecutive_loss==1)
Ордер на котором добавляю значение к переменной выглядит так:
if (consecutive_loss==4)
{
ticket = OrderSend(Symbol(), OP_BUY, lotd, Ask, 3, 0, 0, "", magicnumber, 0, Blue);
BlockedTrade1 = TimeCurrent()+3600;
}
Но в итоге так же, после того как задается переменная BlockedTrade1 (код выше) торговля прекращается , проходит час и сделки больше не открываются, ждал и след. дня результата нет.
Вывел для проверки comment BlockedTrade1
Сделка должна была открыться сразу
Очень надеюсь на вашу помощь
А вы попробуйте проверять не время, а количество часовых свечей прошедших после закрытия последнего ордера и, если он четвёртый по счёту из разрешённых, то если часовой бар его закрытия меньше, либо равен 2, то запрет на открытие. Иначе - можно открываться.
Теперь переменная объявляется правильно
Но осталась проблема с проверкой , как и в начале, сделки перестают открываться после как время устанавливается в переменной, после как проходит нужное время и сделки больше не запускаются.
Функция проверки:
if ( eventBuyClosed_SL > 0 && TimeCurrent() > BlockedTrade1)
{
if (consecutive_loss==1)
ticket = OrderSend(Symbol(), OP_SELL, lota, Bid, 3, 0, 0, "", magicnumber, 0, Red);
Может ли быть проблема из за того что функцию eventBuyClosed_SL > 0 , подключена через инклуд?
При компиляции выходят варнинги
варнинг: possible loss of data due to type conversion 3_13_v2.mq4 307 27
выдается на строку:
BlockedTrade1 = TimeCurrent()+3600;
...
варнинг: possible loss of data due to type conversion 3_13_v2.mq4 307 27
выдается на строку:
BlockedTrade1 = TimeCurrent()+3600;
Переменная BlockedTrade1 у вас имеет тип int. А TimeCurrent() - datetime.
P./S.: По приведению типов и преобразованию данных, если оно нужно, можно посмотреть инфу в Справочнике по MQL4/MQL5 в таких разделах как: Приведение типов и/или Преобразование данных.
Варнингов больше нет.
Но проблема все та-же. Сделки перестают открываться как проходит нужное время. Может return или повтор функции какой то сделать, я уже не знаю даже.
Еще раз распишу все:
При запуске советника объявляется время
datetime BlockedTrade1 = 0;
После идет функция с проверкой:
if ( eventBuyClosed_SL > 0 && TimeCurrent() > BlockedTrade1)
{
if (consecutive_loss==1)
ticket = OrderSend(Symbol(), OP_SELL, lot1, Bid, 3, 0, 0, "", magicnumber, 0, Red);
if (consecutive_loss==2)
ticket = OrderSend(Symbol(), OP_SELL, lot2, Bid, 3, 0, 0, "", magicnumber, 0, Red);
if (consecutive_loss==3)
ticket = OrderSend(Symbol(), OP_SELL, lot3, Bid, 3, 0, 0, "", magicnumber, 0, Red);
if (consecutive_loss==4)
{
ticket = OrderSend(Symbol(), OP_SELL, lot4, Bid, 3, 0, 0, "", magicnumber, 0, Red);
BlockedTrade1 = TimeCurrent()+3600;
}
if (consecutive_loss==5)
ticket = OrderSend(Symbol(), OP_SELL, lot5, Bid, 3, 0, 0, "", magicnumber, 0, Red);
((( p.s функция eventBuyClosed_SL > 0 подключена через инклуд )))
На if (consecutive_loss==4)
Добавляю в переменную BlockedTrade1 текущее время + час.
И после как проходит время (т.е TimeCurrent() > BlockedTrade1) должен открыться if (consecutive_loss==5) .
В итоге торговля прекращается и функция if (consecutive_loss==5) не выполняется.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день. Не как не могу понять в чем дело
Опишу ситуацию.
Что мне нужно было сделать:
Когда срабатывал 4ый ордер, я хотел запретить сове открывать сделки в течении текущего и следующего часа.
if (consecutive_loss==4)
{
ticket = OrderSend(Symbol(), OP_BUY, lotd, Ask, 3, 0, 0, "", magicnumber, 0, Blue);
BlockedTrade1 = Hour()+1;
}
Объявил переменную вначале кода : int BlockedTrade1 = 0;
Запретил выполнять следующую функцию пока блокрейд не станет меньше текущего часа:
if (consecutive_loss==5 && Hour() > BlockedTrade1)
{
ticket = OrderSend(Symbol(), OP_BUY, lotd, Ask, 3, 0, 0, "", magicnumber, 0, Blue);
BlockedTrade1 = Hour()+1;
}
Так же я пробовал сделать проверку отдельно, т.е если текущий час больше BlockedTrade1 я объявлял переменную BlockedTrade1 = 0. Ну и соответственно проверку изменял if (consecutive_loss==5 && BlockedTrade1 == 0)
if (Hour() == BlockedTrade1)
{
BlockedTrade1 = 0;
}
На экран выводил значения BlockedTrade1 , все работает тоесть он обнуляется.
Что у меня получилось:
Сделки открываться перестали после того как срабатывала функция BlockedTrade1 = Hour()+1; , но после как проходило нужное время сделки больше не открывались вообще