1. tick является уникальным идентификатором ордера. Торгуя в реале и уменьшив тикет своего ордера на 1, Вы пытаетесь установиться на чужой ордер или вообще несуществующий. Но для тестера прокатит.
2. Гляньте в справке по mql инфу по OrderSelect. Если SELECT_BY_TICKET, то игнорируется MODE_TRADES. Если OrderCloseTime() >0, то ордер уже закрыт и в истории.
3. Для закрытия нужных Вам ордеров нужно
- или в цикле перебирать все открытые ордера, проверять их параметры, а потом делать с ними чегонить.
- или поискать универсальные готовые решения по работе с ордерами. В частности 'Полезные функции от KimIV' (https://forum.mql4.com/ru/11287/page49#104688 или где-то там. Много всего полезного)
В массив заносите и проверяйте, сравнивайте... ордера
1. tick является уникальным идентификатором ордера. Торгуя в реале и уменьшив тикет своего ордера на 1, Вы пытаетесь установиться на чужой ордер или вообще несуществующий. Но для тестера прокатит.
2. Гляньте в справке по mql инфу по OrderSelect. Если SELECT_BY_TICKET, то игнорируется MODE_TRADES. Если OrderCloseTime() >0, то ордер уже закрыт и в истории.
3. Для закрытия нужных Вам ордеров нужно
- или в цикле перебирать все открытые ордера, проверять их параметры, а потом делать с ними чегонить.
- или поискать универсальные готовые решения по работе с ордерами. В частности 'Полезные функции от KimIV' (https://forum.mql4.com/ru/11287/page49#104688 или где-то там. Много всего полезного)
БОЛЬШОЕ БОЛЬШОООЕ СПАСИБО!!!)
1. tick является уникальным идентификатором ордера. Торгуя в реале и уменьшив тикет своего ордера на 1, Вы пытаетесь установиться на чужой ордер или вообще несуществующий. Но для тестера прокатит.
2. Гляньте в справке по mql инфу по OrderSelect. Если SELECT_BY_TICKET, то игнорируется MODE_TRADES. Если OrderCloseTime() >0, то ордер уже закрыт и в истории.
3. Для закрытия нужных Вам ордеров нужно
- или в цикле перебирать все открытые ордера, проверять их параметры, а потом делать с ними чегонить.
- или поискать универсальные готовые решения по работе с ордерами. В частности 'Полезные функции от KimIV' (https://forum.mql4.com/ru/11287/page49#104688 или где-то там. Много всего полезного)
Amba я вот тут глянул в код, и оказывается tick я сам создавал
int start();
{
int tick;
}
И вообще я могу ее переименовать и тоже самое будет, как надо сделать чтобы на реале работала норм? (Заранее СПАСИБО)
int OrderSend( | string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE) |
Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи.
Понятно, что tick Вы объявили. Иначе не компилилось бы. Другое дело, что значение этой переменной не Вы устанавливаете, а торговый сервер. С номером тикета нельзя оперировать математически. Почувствуйте разницу между позицией ордера в списке открытых (закрытых) ордеров и его уникальным номером. Это все равно что позиция сторублевки в бумажнике по порядку и серийного номера банкноты. Извиняюсь за пример, не знаю как нагляднее...
Советую:
скачать библиотеку от KimIV b-positions.mqh (http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=63)
для закрытия позиции воспользоваться, например, ClosePositions с указанием фильтра. Почитать ветку, почитать комменты в коде. Посмотреть на том же сайте еще библиотеки (на будущее).
----
ЗЫ. b-positions.mqh -> .experts\\include
в коде эксперта:
#include <b-positions.mqh>
tick=OrderSend(Symbol(),OP_SELL,lots,Bid,3,Bid+StopLoss,Bid-TakeProfit,"MACD trade",123457,0,Red);
if (tick>=1)
{
ClosePositions(NULL, OP_BUY, MagicNum)
и ВСЁ. команда закроет все открытые позы BUY.
int OrderSend( | string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE) |
Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи.
Понятно, что tick Вы объявили. Иначе не компилилось бы. Другое дело, что значение этой переменной не Вы устанавливаете, а торговый сервер. С номером тикета нельзя оперировать математически. Почувствуйте разницу между позицией ордера в списке открытых (закрытых) ордеров и его уникальным номером. Это все равно что позиция сторублевки в бумажнике по порядку и серийного номера банкноты. Извиняюсь за пример, не знаю как нагляднее...
Советую:
скачать библиотеку от KimIV b-positions.mqh (http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=63)
для закрытия позиции воспользоваться, например, ClosePositions с указанием фильтра. Почитать ветку, почитать комменты в коде. Посмотреть на том же сайте еще библиотеки (на будущее).
Отличный пример;) я все понял)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
if (tick>=1)
{
//Вроде как здесь идет проверка и если OrderSelect не получиться то программа должна остановиться так? а то он все равно продолжает и пытается закрыть ордера закрытые по стопу и вылазит у меня ошибка 1408
if(OrderSelect(tick-1,SELECT_BY_TICKET,MODE_TRADES)==true){
if(OrderType()==OP_BUY)//Знаю что здесь нужно добавить какое-то условие вот только какое не знаю(((
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
В коде я при селе пытаюсь закрыть предыдущий бай, вот только не которые ордера уже закрываются по стопу а OrderClose пытается закрыть их повторно и вот я не пойму как отфильтровать ордера которые уже закрыты???