Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
fxsaber, 2016.10.20 08:16
Правильно ли я понимаю, что на бирже модификация ордеров через СБ работать не будет?
//| Modify specified pending order |
//+------------------------------------------------------------------+
bool CTrade::OrderModify(const ulong ticket,const double price,const double sl,const double tp,
const ENUM_ORDER_TYPE_TIME type_time,const datetime expiration,const double stoplimit)
{
//--- check stopped
if(IsStopped(__FUNCTION__))
return(false);
//--- clean
ClearStructures();
//--- setting request
m_request.action =TRADE_ACTION_MODIFY;
m_request.magic =m_magic;
m_request.order =ticket;
m_request.price =price;
m_request.stoplimit =stoplimit;
m_request.sl =sl;
m_request.tp =tp;
m_request.type_time =type_time;
m_request.expiration =expiration;
//--- action and return the result
return(OrderSend(m_request,m_result));
}
filling не задается.
Т.е. СБ-OrderModify совсем не пользуются на MT5! И черт знает, это MT5 так непопулярен или СБ.
На эту тему еще было написано. Заявка в Сервисдеске разработчиками взята на рассмотрение.
Интересно, не то, что у разработчиков баг, а то, что баг, который должен был быть выявлен любым трейдером, кто пользуется СБ на MT5, еще несколько лет назад, озвучен на данный момент только Вами.
Мне кажется, что в функции CTrade::OrderModify при заполнении MqlTradeRequest упущена установка m_request.type_filling=m_type_filling;
Исходя из первичной документации при MqlTradeRequest::action=TRADE_ACTION_MODIFY поле MqlTradeRequest::type_filling не участвует в запросе. Соответственно его заполнение не имеет смысла
Заставляет задуматься, что Вы аж ~второй, кто это заметил
При MqlTradeRequest::action =TRADE_ACTION_MODIFY сама по себе строка
сомнительная. Я направлял как то сообщение в Сервисдеск о невозможности модифицировать magic как об ошибке - на что мне ответили что так задумано и magic - это священная корова и его менять нельзя ни при каких обстоятельствах
Исходя из первичной документации при MqlTradeRequest::action=TRADE_ACTION_MODIFY поле MqlTradeRequest::type_filling
не участвует в запросе. Соответственно его заполнение не имеет смысла
Может показаться, что filling нужен только для маркет-ордеров - TRADE_ACTION_DEAL. Однако, есть стоповые отложки, которые активируются торговым сервером в виде маркетов. Поэтому и для TRADE_ACTION_PENDING и для TRADE_ACTION_MODIFY необходимо задание filling.
А вот зачем задавать лимитными заявкам filling - не ясно.
Можно только рекомендовать написание своего варианта заполнения Request.type_filling = GetFilling(Request.symbol; при модификации. В MT4Orders это делается так
{
const ENUM_SYMBOL_TRADE_EXECUTION ExeMode = (ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Symb, SYMBOL_TRADE_EXEMODE);
const int FillingMode = (int)::SymbolInfoInteger(Symb, SYMBOL_FILLING_MODE);
return((FillingMode == 0 || (Type >= ORDER_FILLING_RETURN) || ((FillingMode & (Type + 1)) != Type + 1)) ?
(((ExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE) || (ExeMode == SYMBOL_TRADE_EXECUTION_INSTANT)) ?
ORDER_FILLING_RETURN : ((FillingMode == SYMBOL_FILLING_IOC) ? ORDER_FILLING_IOC : ORDER_FILLING_FOK)) :
(ENUM_ORDER_TYPE_FILLING)Type);
}
Можно только рекомендовать написание своего варианта заполнения Request.type_filling = GetFilling(Request.symbol; при модификации. В MT4Orders это делается так
Если на практике комбинация
m_request.magic =m_magic;
m_request.type_filling=m_type_filling;
Если на практике комбинация
m_request.magic =m_magic;
m_request.type_filling=m_type_filling;
Не устарела. Изначально была не верна (аргумент выше). Разработчики тестят все на Metaquotes-Demo. А там нарваться на Unsupported filling mode гораздо сложнее, чем на других серверах.
C filling полный кавардак. Заявка в СД также в рассмотрении. Мне только не ясно, почему трейдеры, которые торгуют на бирже, отмалчиваются? Ведь почти сразу должно бросаться в глаза такое.
Не устарела. Изначально была не верна (аргумент выше). Разработчики тестят все на Metaquotes-Demo. А там нарваться на Unsupported filling mode гораздо сложнее, чем на других серверах.
C filling полный кавардак. Заявка в СД также в рассмотрении. Мне только не ясно, почему трейдеры, которые торгуют на бирже, отмалчиваются? Ведь почти сразу должно бросаться в глаза такое.
Почему отмалчиваются?
Кто действительно торгует на Бирже, не используют стандартную библиотеку и всё нормально работает.
Почему отмалчиваются?
Кто действительно торгует на Бирже, не используют стандартную библиотеку и всё нормально работает.
Если на практике комбинация
m_request.magic =m_magic;
По факту такая комбинация не работает. Результат: в торговом запросе нет изменений
А зачем тогда в реализации стандартной библиотеки
const ENUM_ORDER_TYPE_TIME type_time,const datetime expiration,const double stoplimit)
такая строка
По факту такая комбинация не работает. Результат: в торговом запросе нет изменений
А зачем тогда в реализации стандартной библиотеки
const ENUM_ORDER_TYPE_TIME type_time,const datetime expiration,const double stoplimit)
такая строка
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день, уважаемый разработчик!
Мне кажется, что в функции CTrade::OrderModify при заполнении MqlTradeRequest упущена установка m_request.type_filling=m_type_filling;
Это приводит у тому, что в случае политики исполнения ордеров ORDER_FILLING_IOC при модификации отложенного ордера возникает сообщение Unsupported filling c Err 10030, так как по умолчанию взята политика
ORDER_FILLING_FOK.
С уважением, VVK963.