Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2282
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Коллеги вопрос сам разобрал и решил, кому надо сумма лотов ордеров по направлениям: считаю лоты ордеров по направлениям бай и селл
если задействовать OO и сначала подумать над вариантами use-case,
то можно было сделать элегантную конструкцию, чтобы потом многократно использовать.
в стиле :
Здесь
если задействовать OO и сначала подумать над вариантами use-case,
то можно было сделать элегантную конструкцию, чтобы потом многократно использовать.
в стиле :
проверьте пожалуйста элемент кода
{
ticket = OrderSend(Symbol(),OP_SELL, Lot, Bid, slippage, 0, 0,NULL, Magic,0, Red);
if (TimeCurrent()>OrderOpenTime()+15*60) OrderClose(ticket,Lot,Bid,slippage,Green);
if (ticket>0)
{
SL = NormalizeDouble(Ask + stoploss*Point, Digits);
TP = NormalizeDouble(Bid - takeprofit*Point, Digits);
if (OrderSelect(ticket,SELECT_BY_TICKET))
if (OrderModify(ticket, OrderOpenPrice(),SL, TP,0))
Print ("Ошибка модификации ордера");
должен закрывать ордер через 15 минут, а закрывает сразу и не всегда
}
Перед использованием OrderOpenTime() нужно выбрать ордер OrderSelect
Перед использованием OrderOpenTime() нужно выбрать ордер OrderSelect
OrderSelect(ticket,SELECT_BY_TICKET);
if (TimeCurrent()>OrderOpenTime()+15*60) OrderClose(ticket,Lot,Ask,slippage,Green);
Так?
Да, а то получается, что Вы запрашиваете время открытия ордера, который выбирали в прошлый раз по коду ниже, или вообще не выбирали
Да, а то получается, что вы запрашиваете время открытия ордера, который выбирали в прошлый раз по коду ниже, или вообще не выбирали
{
ticket = OrderSend(Symbol(),OP_SELL, Lot, Bid, slippage, 0, 0,NULL, Magic,0, Red);
if (ticket>0)
{
SL = NormalizeDouble(Ask + stoploss*Point, Digits);
TP = NormalizeDouble(Bid - takeprofit*Point, Digits);
if (OrderSelect(ticket,SELECT_BY_TICKET))
if (OrderModify(ticket, OrderOpenPrice(),SL, TP,0))
Print ("Ошибка модификации ордера");
}
if(OrderSelect(ticket,SELECT_BY_TICKET))
{
if (TimeCurrent()>OrderOpenTime()+15*60) OrderClose(ticket,Lot,Bid,slippage,Green);
}
}
//---------------------
на тестере не закрывает через 15 минут, а вышебает по S/L
Используйте printf() для поиска ошибок. Проверьте, доступна ли переменная ticket перед вызовом OrderSelect
И сравнивайте ожидаемое с результатом
"перед выбором: "
А где
"перед выбором: "
"текущее время: "
", время закрытия: "
там что должно быть?
и как сравнивать ожидаемое с результатом?