Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2266
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Примерно так?
if(iBarShift(symbol,tf,time,exact)>=Barcount) Cls_B=true;
Примерно так?
if(iBarShift(symbol,tf,time,exact)>=Barcount) Cls_B=true;
Спасибо! Если period будет равен единице, то t будет равно часу? То есть ордер будет закрываться через час?
Спасибо! Это закрытие ордера по времени, а по определенному количеству баров как сделать?
1 бар = _Period*60
здесь к открытию ордера добавляем 5 баров
1 бар = _Period*60
здесь к открытию ордера добавляем 5 баров
Не совсем понял, то есть _Period это значение, которое я должен обозначить выше в программе?
Бар - это единица времени на графике!
"_Period" или "Period ()" на М15 = 15 минут, на М30 = 30, на Н1 = 60 и т.д.
5 баров на М15 - это 15*5 и умножить на секунды, т.е. 15*5*60
Бар - это единица времени на графике!
"_Period" или "Period ()" на М15 = 15 минут, на М30 = 30, на Н1 = 60 и т.д.
5 баров на М15 - это 15*5 и умножить на секунды, т.е. 15*5*60
Это понятно, у меня вобщем-то немного другая проблема возникла, я ее пытаюсь подобным образом решить.
Дело в том что в своем советнике я открываю ордер с помощью МА, а закрываю с помощью RSI. И вот тут возникает зависание, то есть ордер десятки раз в один и тот же период времени
открывается и сразу закрывается, наверное, сталкивались с таким. Поэтому я и хочу решить проблему таким образом, чтобы RSI сразу не закрывал в ту же секунду открытый ордер. Ну к примеру, вот так:
if(MA_1a < MA_2 && MA_1 > MA_2) Opn_B=true;
if(R_1 < RSI_level_1 && R_2 > RSI_level_1) Cls_B=true;
Вот в этом случае, в ряде случаев, кода поступают сигналы на открытие и сразу закрытие ордера, возникает зависание с многократным закрытием и открытием ордера в одно и тоже время. Я пробовал решить проблему вот так:
if(MA_1a < MA_2 && MA_1 > MA_2) Opn_B=true;
if(R_1 < RSI_level_1 && R_2 > RSI_level_1 && OrderOpenTime() <TimeCurrent()) Cls_B=true;
Но тогда сделки вообще с помощью RSI не закрываются. Поэтому я и спросил о закрытии через, к примеру больше, чем 1 бар, чтобы не было совпадения команды на открытие и закрытие ордера. Подскажите, пожалуйста, как решить эту проблему?
Это понятно, у меня вобщем-то немного другая проблема возникла, я ее пытаюсь подобным образом решить.
Дело в том что в своем советнике я открываю ордер с помощью МА, а закрываю с помощью RSI. И вот тут возникает зависание, то есть ордер десятки раз в один и тот же период времени
открывается и сразу закрывается, наверное, сталкивались с таким. Поэтому я и хочу решить проблему таким образом, чтобы RSI сразу не закрывал в ту же секунду открытый ордер. Ну к примеру, вот так:
if(MA_1a < MA_2 && MA_1 > MA_2) Opn_B=true;
if(R_1 < RSI_level_1 && R_2 > RSI_level_1) Cls_B=true;
Вот в этом случае, в ряде случаев, кода поступают сигналы на открытие и сразу закрытие ордера, возникает зависание с многократным закрытием и открытием ордера в одно и тоже время. Я пробовал решить проблему вот так:
if(MA_1a < MA_2 && MA_1 > MA_2) Opn_B=true;
if(R_1 < RSI_level_1 && R_2 > RSI_level_1 && OrderOpenTime() <TimeCurrent()) Cls_B=true;
Но тогда сделки вообще с помощью RSI не закрываются. Поэтому я и спросил о закрытии через, к примеру больше, чем 1 бар, чтобы не было совпадения команды на открытие и закрытие ордера. Подскажите, пожалуйста, как решить эту проблему?
Ошибку надо искать не здесь.
1) Проверьте функцию закрытия ордеров, которую я дал. Я там исправил ошибку.
2) если первый пункт не поможет, то покажите код где идет обработка Opn_B и Cls_B
Спасибо! Это закрытие ордера по времени, а по определенному количеству баров как сделать?
я честно говоря не понял ради чего вам дают заведомо неверные ответы (они чётко в 00:01 понедельника и ещё "кое-когда" будут закрывать ордера), но
кол-во баров прошедших с момента открытия это iBarShift(_Symbol,_Period,OrderOpenTime()); то есть одно из условий для закрытия ордера:
if (iBarShift(OrderSymbol(),TIMEFRAME,OrderOpenTime()) > BARS_TO_CLOSE) { /* прошло более BARS_TO_CLOSE баров на таймфейме TIMEFRAME */ .... }