Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Йен,
Проверьте эксперта Straddle&Trail. вы можете найти его здесь https://www.mql5.com/en/forum/general.
Привет всем,
Я хочу закрыть все мои ордера одновременно, но не могу.
Я попробовал этот код, но он не сработал:
''''''''''''''''''''''''''''''''''''''''
total = OrdersTotal();
for(i=0;i < total;i++)
{
if(OrderSelect(i, SELECT_BY_POS)==true)
{
OrderClose(OrderTicket(),OrderLots(),Ask,80,CLR_NONE);
OrderClose(OrderTicket(),OrderLots(),Bid,80,CLR_NONE);
}
}
''''''''''''''''''''''''''''''''''''''''
Может ли кто-нибудь помочь мне?
Я буду очень благодарен, если вы сможете мне помочь.
Мехди,
Поместите этот код (процедуру) вне секции start() и когда вы, если условие выполнено, закроете все сделки, просто вызовите процедуру таким образом:
int start()
{ // ваш код здесь .....
If (ваше условие здесь) ShutDownAllTrades();
}
void ShutDownAllTrades
{ int Retry;
While (OrdersTotal()>0)
{ for (int cnt=OrdersTotal()-1;cnt>=0;cnt--)
{ OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderType()==OP_BUY)
{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }
RefreshRates();
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);
Sleep(1000);
}
else if (OrderType()==OP_SELL)
{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }
RefreshRates();
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Yellow);
Sleep(1000);
}
else
{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }
OrderDelete(OrderTicket());
Sleep(1000);
}
}
}
}
HTH
Яннис
Уважаемый Яннис,
Спасибо за вашу помощь.
Желаю вам всего наилучшего.
Мехди,
Поместите этот код (процедуру) за пределами секции start(), и когда, если условие выполнено, чтобы закрыть все сделки, просто вызовите процедуру таким образом:
int start()
{ // ваш код здесь .....
If (ваше условие здесь) ShutDownAllTrades();
}
void ShutDownAllTrades
{ int Retry;
While (OrdersTotal()>0)
{ for (int cnt=OrdersTotal()-1;cnt>=0;cnt--)
{ OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderType()==OP_BUY)
{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }
RefreshRates();
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);
Sleep(1000);
}
else if (OrderType()==OP_SELL)
{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }
RefreshRates();
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Yellow);
Sleep(1000);
}
else
{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }
OrderDelete(OrderTicket());
Sleep(1000);
}
}
}
}
HTH
ЯннисУважаемый Яннис,
Я добавил вашу процедуру между " int deinit() { } " (вне начала), как вы сказали, но есть проблема при компиляции после void ShutDownAllTrades { : '{' ожидается запятая или точка с запятой.
С нетерпением жду ответа.
Большое спасибо
Упс, извините.
Не хватает () после void ShutDownAllTrades().
Будьте также внимательны к переменной с именем 'Slippage' в функции orderclose.
Возможно, вам придется заменить ее на ту, которую вы используете при выставлении ордеров.
Яннис
Упс, извините.
Не хватает только () после void ShutDownAllTrades().
Будьте также внимательны к переменной с именем 'Slippage' в функции orderclose.
Возможно, вам придется заменить ее на ту, которую вы используете при выставлении ордеров.
ЯннисЭто работает очень хорошо !
Еще раз спасибо
Я использую индикатор MTF CCI из потока индикаторов Multi Time Frame, он представляет собой желтую ступенчатую линию, см. прикрепленное изображение.
Когда линия находится выше уровня 100 (перекупленность) - цена идет вниз, а когда ниже -100 (перепроданность) - цена идет вверх.
Единственная проблема в том, что он не всегда обновляется, мне приходится делать это вручную, щелкая правой кнопкой мыши на графике и выбирая "Обновить".
Вопрос к программистам: Есть ли в MQ4 какая-нибудь функция для автоматического обновления графика на каждом тике?
Буду благодарен за совет.
евро пеан
Попробуйте это:
void ObjectsRedraw()
Перерисовывает все объекты на графике
Пример
ObjectsRedraw();
Возможно, сначала вам потребуется использовать ObjectCreate.
Попробуйте это:
void ObjectsRedraw()
Перерисовывает все объекты на графике
Пример
ObjectsRedraw();
Возможно, сначала вам придется использовать ObjectCreate.Спасибо за ответ.
Насколько я знаю, ObjectsRedraw() обновляет объекты, которые только что были "созданы" и "установлены".
Мне нужно обновить индикатор, которого нет в списке объектов, поэтому ObjectsRedraw() не работает.
Или, может быть, вы знаете, как обратиться к существующему индикатору?