- Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6.
- [Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2.
- Можно ли изменить ордеру его Comment и MagicNumber ?
int fArrExistIn_int(int aValue, int & aArray[]){ for(int ti=0;ti<ArraySize(aArray);ti++){ if(aValue==aArray[ti]){ return(ti); } } return(-1); }
В любую функцию, вместо if(OrderMagicNumber()==Magic){... сделать
if(fArrExistIn_int(OrderMagicNumber(),MagicAr)!=-1){...
MagicAr - массив со всеми магиками.
Значит. Применил я выше описанное. Получилась вот такая готовая функция по закрытию рыночных ордеров с определенным перечнем магиков.:)
/////////////////////////Функция: ЗАКРЫТИЕ ДИАПОЗОНА ОРДЕРОВ С ОПРЕДЕЛЕННЫМИ МАГИКАМИ ///////////////////////////////////// int fArrExistIn_int(int aValue, int & aArray[]) { // Начало функции. int cnt,total=0,ticket=0,err=0,c=0,slip=7,tries=5; for(int ti=0;ti<ArraySize(aArray);ti++){ if(aValue==aArray[ti]){ if(fArrExistIn_int(OrderMagicNumber(),MagicAr)!=-1) // Где MagicAr - массив с магическими номерами. { switch(OrderType()) { case OP_BUY : for(c=0;c<tries;c++) { RefreshRates(); OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slip,Yellow); err = GetLastError(); if (err==0) break; else { Print("Errors Closing BUY order"); Print(ErrorDescription(err),", error ",err); if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors { Sleep(3000); continue; } } } break; case OP_SELL : for(c=0;c<tries;c++) { RefreshRates(); OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slip,Yellow); err = GetLastError(); if (err==0) break; else { Print("Errors Closing SELL order"); Print(ErrorDescription(err),", error ",err); if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors { Sleep(3000); continue; } } } break; } // switch } // if return(ti); } } return(-1); } // Конец Функции. ////////////// Конец Функции: ЗАКРЫТИЕ ДИАПОЗОНА ОРДЕРОВ С ОПРЕДЕЛЕННЫМИ МАГИКАМИ ////////////////
Вот только возникает маленькая проблемка при вызове функции. Выдает ошибку 1062,17? Вызываю вот так fArrExistIn_int(); там, где нужно запустить ее. Что не так я делаю, как будет правильно? :)
Значит. Применил я выше описанное. Получилась вот такая готовая функция по закрытию рыночных ордеров с определенным перечнем магиков.:)
/////////////////////////Функция: ЗАКРЫТИЕ ДИАПОЗОНА ОРДЕРОВ С ОПРЕДЕЛЕННЫМИ МАГИКАМИ ///////////////////////////////////// int fArrExistIn_int(int aValue, int & aArray[]) { // Начало функции. int cnt,total=0,ticket=0,err=0,c=0,slip=7,tries=5; for(int ti=0;ti<ArraySize(aArray);ti++){ if(aValue==aArray[ti]){ if(fArrExistIn_int(OrderMagicNumber(),MagicAr)!=-1) // Где MagicAr - массив с магическими номерами. { switch(OrderType()) { case OP_BUY : for(c=0;c<tries;c++) { RefreshRates(); OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slip,Yellow); err = GetLastError(); if (err==0) break; else { Print("Errors Closing BUY order"); Print(ErrorDescription(err),", error ",err); if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors { Sleep(3000); continue; } } } break; case OP_SELL : for(c=0;c<tries;c++) { RefreshRates(); OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slip,Yellow); err = GetLastError(); if (err==0) break; else { Print("Errors Closing SELL order"); Print(ErrorDescription(err),", error ",err); if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors { Sleep(3000); continue; } } } break; } // switch } // if return(ti); } } return(-1); } // Конец Функции. ////////////// Конец Функции: ЗАКРЫТИЕ ДИАПОЗОНА ОРДЕРОВ С ОПРЕДЕЛЕННЫМИ МАГИКАМИ ////////////////
И как, работает ? Буду удивлен ;).
Может ошибаюсь, но должно память забить "по самую макушку". Что такое рекурсия Вам известно (выделил в цитате болдом) ? Она не всегда полезна, а в данном случае тем более. Да и сделана для рекурсии неверно.
К тому же не выбирается ордер - от какого ордера берем магик, тип, лот ?.... И, интересно, какая может быть цена закрытия у еще не закрытого ордера ? Да там еще хватает...... Вы б сначала учебник то прочли.
Удачи.
ЗЫ или проще: возьмите функцию закрытия ордеров (просто найдите - здесь вариантов масса), добавьте функцию Дмитрия и именно так, как Вам сказали и будет Вам счастье.
И, интересно, какая может быть цена закрытия у еще не закрытого ордера ?
Именно та цена и будет BId для OP_BUY и Ask для OP_SELL :)
Именно та цена и будет BId для OP_BUY и Ask для OP_SELL :)
Вы код смотрели ? Или так просто отметились ;) ? Показываю куда надо смотреть ;) :
case OP_BUY : for(c=0;c<tries;c++) { RefreshRates(); OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slip,Yellow);
Удачи.
ЗЫ Для селл сами найдете ? ;).....
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования