почему скрипт не открывает ордера?

 
int start()
  {
   int t;
//----
   RefreshRates();
   t=OrderSend("EURUSD",OP_BUY,0.01,MarketInfo("EURUSD",MODE_BID),20,0,0,0,0,0,CLR_NONE);
   if(t<1) Print ("Косяк № ",GetLastError());
   RefreshRates();
   t=OrderSend("GBPUSD",OP_SELL,0.01,MarketInfo("GBPUSD",MODE_ASK),20,0,0,0,0,0,CLR_NONE);
   if(t<1) Print ("Косяк № ",GetLastError());
//----
   return(0);
  }

ручками с теми же параметрами всё нормально открывается.

https://book.mql4.com/ru/trading/ordersend вот тут пример описывающий подобную фишку, т.е. скрипты не привязаны только к тому инструменту, на котором включаются (думал, может ограничение есть такое).

 
Покупаем по Аску, продаем по Биду.
 

заработало, спасибо.)

а почему при slipage 200 не хочет выполняться? пробовал его завышать - не помогало.

 
Максимум при 4-х знаках - 5, при пяти - 50. Все что выше - бессмысленно.
 
Slippage сам по себе не решает проблему открытия. А в некоторых нехороших кухнях этим грязно пользуются, открывая ордер на Slippage хуже. А потом, когда заявляешь претензию, ссылаются на сам ордер: мол, Вы же сами и указали такой Slippage...
 
это понятно, но собственно ... в теории я могу взять цену евробакса, указать slip в размере 40к и тогда у меня откроется спокойно сделка и на фунтобаксе и на почти любой валюте. Но в последнее время заметил такую вещь, что это не срабатывает. А заметил на одной ленивой вещи - не хотелось париться с бидами и асками при закрытии ордера, и я просто slip ставил в размер двух спрэдов. На тестере срабатыват, а на демке в реале - не хочет. Такое ощущение, что slip как класс отменили в некоторых ДЦ. Похоже, что принудительно заставляют думать. )))
 
Roger:
Максимум при 4-х знаках - 5, при пяти - 50. Все что выше - бессмысленно.

почему? потому что не рационально или потому, что не работает?
 
kermit: почему? потому что не рационально или потому, что не работает?
Вы хотите докопаться до сути - попробуйте - как показали мои наблюдения, Slippage своей сути (как проскальзывание) не выполняет. Если Вы открываете ордер в сторону движения цены (с точки зрения "вектора тиковой цены"), то скорее всего в 9 ДЦ из 10 Вам ордер не откроют, причём и номер возвращаемой ошибки на отказ открыть ордер, в данном случае не имеет НИКАКОГО значения (каждое ДЦ "фантазирует" по-своему). Для любителей поспорить приведу пример ситуации (причём не у одного ДЦ), которая характеризует выше сказанное.

Все торговые операции в моих советниках выполняет отдельная библиотека и подробно пишет лог каждого события, в том числе и тиковые цены в моменты запроса и отказа на торговую операцию. Последовательность действия библиотеки (в общих чертах) на торговую операцию OrderSend():

  • в функцию (просто напоминаю) уже передаём цену, с которой советник "согласен", ну и естественно проскальзывание, т.е. "допуск" (говоря техническим языком), т.е. +- от "согласованной цены", пишем цену в лог;
  • проверяем валидность стопов, как их не перепутывание, так и на минимальное расстояние от цены (MODE_STOPLEVEL), если найдены проблемы, исправляем их, если не получилось исправить по какой-то волшебной причине, выходим (отказываемся от совершения торговой операции);
  • отдаём торговый приказ OrderSend - а в ответ получаем ошибку error 130 - ERR_INVALID_STOPS, ставить стопы по НУЛЯМ тоже ничего не даёт!!!

Напомню, что все попытки торговых операций пишутся в лог, так вот, - не важно, что "декларируемая" ДЦ цена находилась внутри "согласованной" Вами ценой +- Slippage (какое бы проскальзывание Вы не поставили) - если ДЦ не "хочет" в данный момент времени произвести торговую операцию, то не важно по каким отмазкам, НО она её и НЕ ПРОВЕДЁТ, при всех прочих правильных действиях с Вашей стороны (а точнее со стороны советника)!!!
Я Вас не очень загрузил??? :))

Причина обращения: