Любые вопросы новичков по 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
{ ticket = OrderSend(Symbol(),OP_SELL, Lot, Bid, slippage, 0, 0,NULL, Magic,0, Red); printf("При открытии: "+(string)ticket); 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 ("Ошибка модификации ордера"); } printf("перед выбором: "+(string)ticket); if(OrderSelect(ticket,SELECT_BY_TICKET)) { printf("текущее время: "+TimeToString(TimeCurrent())+", время закрытия: "+TimeToString(OrderOpenTime()+15*60)); if (TimeCurrent()>OrderOpenTime()+15*60) OrderClose(ticket,Lot,Bid,slippage,Green); } }И сравнивайте ожидаемое с результатом
"перед выбором: "
А где
"перед выбором: ""текущее время: "", время закрытия: "там что должно быть?
и как сравнивать ожидаемое с результатом?