Эта функция возвращает тип последней закрытой позиции или -1. Более точный отбор учитываемых позиций задаётся внешними параметрами:
sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает тип последней закрытой позиции или -1 |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+intGetTypeLastClosePos(stringsy="", intmn=-1){datetimet;
inti, k=OrdersHistoryTotal(), r=-1;
if(sy=="0")sy=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)){if(OrderType()==OP_BUY || OrderType()==OP_SELL){if(t<OrderCloseTime()){t=OrderCloseTime();
r=OrderType();
}}}}}return(r);
}
ЗЫ. Во вложении скрипт для тестирования функции GetTypeLastClosePos().
Эта функция возвращает тип последней открытой позиции или -1. Более точный отбор учитываемых позиций задаётся внешними параметрами:
sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает тип последней открытой позиции или -1 |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+intGetTypeLastOpenPos(stringsy="", intmn=-1){datetimet;
inti, k=OrdersTotal(), r=-1;
if(sy=="0")sy=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)){if(OrderType()==OP_BUY || OrderType()==OP_SELL){if(t<OrderOpenTime()){t=OrderOpenTime();
r=OrderType();
}}}}}return(r);
}
ЗЫ. Во вложении скрипт для тестирования функции GetTypeLastOpenPos().
kombat писал (а): Ладно, если вопрос ламерский, то ещё раз простите, и можно без ответа.
не-е... давайте разберёмся... разборки углубляют понимание... Просто я не понимаю, что Вам непонятно. Сформулируйте вопрос попроще и в общепринятых терминах. Вас интервал спячки смущает? Почему именно 66 секунд?
хм... Я всё-равно ничё не понял. Буду стрелять наугад. Всё нижесказанное будет относиться к ошибкам 128, 142 и 143.
Если никак не обработать ошибку 128, то появляется риск получить две одинаковые открытые позиции вместо одной. За два года торговли на двух реальных счетах у меня такой случай был всего один раз. Дублирование позиции происходит потому, что торговый сервер по каким-то причинам вернул терминалу сообщение об истечении срока ожидания исполнения сделки. Терминалу не было отказано в обслуживании. И сделка может быть ещё исполнена. Просто её исполнение задержалось на "непозволительно" длительное время. Если после такого сообщения отправить ещё один запрос на исполнение, то могут исполниться оба запроса: тот, который задержался и новый. Чтобы избежать такой ситуации нужно, по рекомендации разработчиков, сделать паузу не менее одной минуты и проверить, а не исполнился ли запрос, по поводу которого торговый сервер присылал сообщение, что мол исполнение задерживается. Если ДА, то цель достигнута - позиция открыта, если НЕТ, то можно повторить торговый запрос. Вот такую логику обработки ошибок 128, 142 и 143 реализует мой код.
Функция GetTypeLastClosePos().
Эта функция возвращает тип последней закрытой позиции или -1. Более точный отбор учитываемых позиций задаётся внешними параметрами:
- sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
- mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
ЗЫ. Во вложении скрипт для тестирования функции GetTypeLastClosePos().Функция GetTypeLastOpenPos().
Эта функция возвращает тип последней открытой позиции или -1. Более точный отбор учитываемых позиций задаётся внешними параметрами:
- sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
- mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
ЗЫ. Во вложении скрипт для тестирования функции GetTypeLastOpenPos().Функция OpenPosition() для online.
Что означают коды ошибок 142 и 143.
Спасибо.
Что означают коды ошибок 142 и 143.
142 - Ордер поставлен в очередь.
143 - Ордер принят дилером к сиполнению.
Подробнее см. здесь
В доке совет обрабатывать их как ошибку 128
если возможно, пару слов об этом с Вашей точки зрения или позиции...
В доке совет обрабатывать их как ошибку 128
если возможно, пару слов об этом с Вашей точки зрения или позиции...
Моя точка зрения выражена в коде, который привёл Андрей двумя постами выше.
Сорри... видел конечно...
П р о с т о чуток непонятно в моём понимании.
кроме этого, и ежу понятно... спим...
А вот если и если дальнейшие, не очень.
т.е. спим, потом если существует позиция, если играем марш.
-
Ладно, если вопрос ламерский, то ещё раз простите, и можно без ответа.
Ладно, если вопрос ламерский, то ещё раз простите, и можно без ответа.
не-е... давайте разберёмся... разборки углубляют понимание... Просто я не понимаю, что Вам непонятно. Сформулируйте вопрос попроще и в общепринятых терминах. Вас интервал спячки смущает? Почему именно 66 секунд?
Нет, не это! с этим то и нет вопросов... абсолютно!
А вот дальнейшее логико-последовательное действо в этом фрагменте не очень.
Допустим получили код ошибки, спим, потом ифим на наличие болучаем булт, играет вальс Шпоена если включена эта функция...
-
(блин, пропадают хвосты сообщений, приходится повторяться :(((
-
Гораздо больше интересуют вопросы как продолжить начатое!
т.е. дальнейшие торговые телодвижения: либо функция будет долбить
пока не откроет, либо передаст управление другой...
В первом случае непонятно как "зациклить", вызывать "саму себя" или как?
хм... Я всё-равно ничё не понял. Буду стрелять наугад. Всё нижесказанное будет относиться к ошибкам 128, 142 и 143.
Если никак не обработать ошибку 128, то появляется риск получить две одинаковые открытые позиции вместо одной. За два года торговли на двух реальных счетах у меня такой случай был всего один раз. Дублирование позиции происходит потому, что торговый сервер по каким-то причинам вернул терминалу сообщение об истечении срока ожидания исполнения сделки. Терминалу не было отказано в обслуживании. И сделка может быть ещё исполнена. Просто её исполнение задержалось на "непозволительно" длительное время. Если после такого сообщения отправить ещё один запрос на исполнение, то могут исполниться оба запроса: тот, который задержался и новый. Чтобы избежать такой ситуации нужно, по рекомендации разработчиков, сделать паузу не менее одной минуты и проверить, а не исполнился ли запрос, по поводу которого торговый сервер присылал сообщение, что мол исполнение задерживается. Если ДА, то цель достигнута - позиция открыта, если НЕТ, то можно повторить торговый запрос. Вот такую логику обработки ошибок 128, 142 и 143 реализует мой код.