Rustam Bikbulatov: Привет Всем. Подскажите как изменить этот код for(int i=OrdersTotal()-1;i>=0;i--){
В данный момент он закрывает последние открывшиеся. А нужно наоборот чтобы закрывались сначала самые первые!
for( int i = 0; i < OrdersTotal(); i++ ) { if( /*Функция закрытия. Если вернула истину*/ ) i--; }
Попробуйте так. Вместо комментария функцию закрытия ордера. На работоспособность не проверял. И здесь, думаю, нужно будет вызывать функцию подсчета количества именно каждый раз, т.к. число ордеров будет уменьшаться.
Rustam Bikbulatov: Привет Всем. Подскажите как изменить этот код for(int i=OrdersTotal()-1;i>=0;i--){
В данный момент он закрывает последние открывшиеся. А нужно наоборот чтобы закрывались сначала самые первые!
//+------------------------------------------------------------------+ //| Закрыть все позиции начиная с первых | //+------------------------------------------------------------------+
double CloseOrders()
{ for(int i=0; i<OrdersTotal(); ) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderMagicNumber() != mn) break;
int type = OrderType();
bool result = false;
switch(type) { //Close opened long positions caseOP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, CloseColor ); break;
//Close opened short positions caseOP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), Slippage, CloseColor ); break; }
Предложенный мной вариант в целом несуразен для закрытия.
Если вы говорите о том, что нужно закрывать от старых к новым - значит вы закрываете сетку. Имея некоторый опыт работы с сетками, то уверенно могу сказать только то, что выбирать нужно не по старости позиции, а по её лотности, и закрывать нужно от бОльшего лота к меньшему. Если сетка однолотная, то разницы в очерёдности при закрытии нет никакой. Используйте готовые функции для закрытия, и не изобретайте то, что уже изобретено)
Предложенный мной вариант в целом несуразен для закрытия.
Если вы говорите о том, что нужно закрывать от старых к новым - значит вы закрываете сетку. Имея некоторый опыт работы с сетками, то уверенно могу сказать только то, что выбирать нужно не по старости позиции, а по её лотности, и закрывать нужно от бОльшего лота к меньшему. Если сетка однолотная, то разницы в очерёдности при закрытии нет никакой. Используйте готовые функции для закрытия, и не изобретайте то, что уже изобретено)
Господа разрабы! Всем доброго времени суток. Интересует вопрос по созданию шаблона эксперта(скрипта) при его создании. Такое можно где-то редактировать и как это делается?
Привет Всем. Подскажите как изменить этот код for(int i=OrdersTotal()-1;i>=0;i--){
Привет Всем. Подскажите как изменить этот код for(int i=OrdersTotal()-1;i>=0;i--){
{
if( /*Функция закрытия. Если вернула истину*/ )
i--;
}
Попробуйте так. Вместо комментария функцию закрытия ордера. На работоспособность не проверял. И здесь, думаю, нужно будет вызывать функцию подсчета количества именно каждый раз, т.к. число ордеров будет уменьшаться.
Также можно попробовать такой вариант:
/*Функция закрытия ордера*/
как то несуразно закрывает)
не правильно, но пока (до какого-то билда) работает : при успешном закрытии i--
Привет Всем. Подскажите как изменить этот код for(int i=OrdersTotal()-1;i>=0;i--){
//| Закрыть все позиции начиная с первых |
//+------------------------------------------------------------------+
double CloseOrders()
{
for(int i=0; i<OrdersTotal(); )
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
break;
if (OrderMagicNumber() != mn)
break;
int type = OrderType();
bool result = false;
switch(type)
{
//Close opened long positions
case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, CloseColor );
break;
//Close opened short positions
case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), Slippage, CloseColor );
break;
}
if(result == false)
{
Print("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
i++;
}
}
return (True);
}
// End
как то несуразно закрывает)