Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 30
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я только учусь, пытаюсь пользоваться справочником, но понимаю что получается какой-то бред, хочется увидеть на примере как это сделать.
Всем доброго дня! Подскажите пожалуйста как поставить удаление ордера в советнике.
Ситуация такая:
выставляем 2 отложенных ордера в разных направлениях, как только срабатывает один из них, то другой удаляется и больше не выставляется.
Буду очень благодарен за помощь.
Спасибо.
Что-то типа того
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderType()>1)//Если найденный ордер отложенный
{
ticket=OrderTicket();//Запомним его тикет
}
else//Если ордер не отложенный
{
trade=1;//Запомним,что есть открытая позиция
}
if(ticket!=0 && trade==1)//И если известен отложенный и открыта позиция
{
int OD=OrderDelete(ticket);//Удаляем отложенный
}
}
"Продолжим искать"-надо убрать!
На форуме можео редактировать свои посты самому. Всё, что вы написали отдельными постами выше, можно уместить в один.
Здравствуйте! Ввел трал тейкпрофита по следующему алгоритму:
if(total>0)
{for (int i=OrdersTotal()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderMagicNumber()==magic && OrderSymbol()==asset && OrderType()==OP_BUY)
{
RefreshRates();
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600))
{
УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
}
}
}
}
но почему-то не срабатывает временнОе ограничение, и бывает так, что, если позиция не закрылась в текущем таймфрейме, то тралит и в следующем при соблюдении условий.
Что у меня не так в последнем if()?
Здравствуйте! Ввел трал тейкпрофита по следующему алгоритму:
if(total>0)
{for (int i=OrdersTotal()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderMagicNumber()==magic && OrderSymbol()==asset && OrderType()==OP_BUY)
{
RefreshRates();
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600))
{
УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
}
}
}
}
но почему-то не срабатывает временнОе ограничение, и бывает так, что, если позиция не закрылась в текущем таймфрейме, то тралит и в следующем при соблюдении условий.
Что у меня не так в последнем if()?
Ну не знаю, не вижу пока беглым взглядом что там не так. Убрал лишнюю проверку на количество ордеров (она в условиях цикла уже есть) и добавил проверку на оба типа позиций (Buy и Sell)
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderType()>OP_SELL) continue;
if(OrderMagicNumber()==magic && OrderSymbol()==asset) {
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=OrderOpenTime()+PeriodSeconds(PERIOD_H1)) {
// УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
// МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
}
}
}
}
//+------------------------------------------------------------------+
Там, где // условия трала и модификации, вставьте Print() со значениями переменных времени и поглядите что в журнале будет писать.
Ну не знаю, не вижу пока беглым взглядом что там не так. Убрал лишнюю проверку на количество ордеров (она в условиях цикла уже есть) и добавил проверку на оба типа позиций (Buy и Sell)
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderType()>OP_SELL) continue;
if(OrderMagicNumber()==magic && OrderSymbol()==asset) {
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=OrderOpenTime()+PeriodSeconds(PERIOD_H1)) {
// УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
// МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
}
}
}
}
//+------------------------------------------------------------------+
Там, где // условия трала и модификации, вставьте Print() со значениями переменных времени и поглядите что в журнале будет писать.
Для СЕЛЛ у меня другие условия трала, поэтому я показал только БАЙ.
" со значениями переменных времени" - имеется в виду TimeCurrent()? Извините, если Вас это удивляет - я в программировании ноль с минусом.
И вот это не понял - OrderType()>OP_SELL. Почему >? Тип операции OP_SELL имеет значение = 1, а OP_BUY = 0. Следовательно, д.быть <= ? Спасибо.
Для СЕЛЛ у меня другие условия трала, поэтому я показал только БАЙ.
" со значениями переменных времени" - имеется в виду TimeCurrent()? Извините, если Вас это удивляет - я в программировании ноль с минусом.
И вот это не понял - OrderType()>OP_SELL. Почему >? Тип операции OP_SELL имеет значение = 1, а OP_BUY = 0. Следовательно, д.быть <= ? Спасибо.
Приветствую. Подскажите, пожалста, почему при вот такой записи
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
сплошняком выдает ошибки
: invalid ticket for OrderDelete function
: OrderDelete error 4051
по справочнику это
Недопустимое значение параметра функции
хотя параметры, вроде, такие-же.
Хотя если убрать условие и оставить только
OrderDelete(ticketD);
OrderDelete(ticketUP);
то удаляет успешно (но надо то по условию). Что я делаю не так?
Приветствую. Подскажите, пожалста, почему при вот такой записи
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
сплошняком выдает ошибки
: invalid ticket for OrderDelete function
: OrderDelete error 4051
по справочнику это
Недопустимое значение параметра функции
хотя параметры, вроде, такие-же.
Хотя если убрать условие и оставить только
OrderDelete(ticketD);
OrderDelete(ticketUP);
то удаляет успешно (но надо то по условию). Что я делаю не так?