MetaTrader 5 на реальном счете - страница 2

 
IgorM:

Вы не опечатались, я про цену, а не про СЛ и ТР? и по какой цене мне должен открыть сервер рыночный ордер? по той цене которую он мне предоставил или по которой мне вздумалось?

почему бы мне не отправлять на сервер цену сразу с положительным спредом ;)

ЗЫ: USDJPY : 82.49 ;  82.51000000000001 ; 82.49 - может сразу 82.55 ?
 

вот вам пример отправки запроса с нормализованными ценами

//+------------------------------------------------------------------+
//| Функция открытия ордеров                                         |
//+------------------------------------------------------------------+
void OpenOpders(string sym,ENUM_ORDER_TYPE type)
  {
   int n=0;
   bool res=true;
   while(res)
     {
      n++;
      Alert(n," - Попытка открыть ордер: ",TypeToStr(type)," на  ",sym,", Лот - ",Lots);
      double Bid=SymbolInfoDouble(sym,SYMBOL_BID);
      double Ask=SymbolInfoDouble(sym,SYMBOL_ASK);
      int digit=(int)SymbolInfoInteger(sym,SYMBOL_DIGITS);
      double price=0.0;

      if(type==ORDER_TYPE_BUY)price=NormalizeDouble(Ask,digit);
      else if(type==ORDER_TYPE_SELL)price=NormalizeDouble(Bid,digit);

      request.action       = TRADE_ACTION_DEAL;
      request.symbol       = sym;
      request.volume       = Lots;
      request.price        = price;
      request.deviation    = Slip;
      request.type         = type;
      request.type_filling = ORDER_FILLING_AON;

      OrderSend(request,result);

      switch(Fun_Error(result.retcode))
        {
         case 0:res=false;break;
         case 1:res=true;break;
         case 2:res=false;break;
        }
     }
  }
//+------------------------------------------------------------------+
//| Функция обработки ошибок                                         |
//+------------------------------------------------------------------+
int Fun_Error(int Error)
  {
   switch(Error)
     {
      case 10004: Alert("Реквота");return(1);
      case 10006: Alert("Запрос отвергнут");Sleep(3000);return(1);
      case 10007: Alert("Запрос отменен трейдером");Work=false;return(0);
      case 10008: Alert("Ордер размещен");return(2);
      case 10009: Alert("Заявка выполнена");return(2);
      case 10010: Alert("Заявка выполнена частично");return(2);
      case 10011: Alert("Ошибка обработки запроса");return(1);
      case 10012: Alert("Запрос отменен по истечению времени");return(1);
      case 10013: Alert("Неправильный запрос");Work=false;return(0);
      case 10014: Alert("Неправильный объем в запросе");Work=false;return(0);
      case 10015: Alert("Неправильная цена в запросе");Work=false;return(0);
      case 10016: Alert("Неправильные стопы в запросе");Work=false;return(0);
      case 10017: Alert("Торговля запрещена");Work=false;return(0);
      case 10018: Alert("Рынок закрыт");Work=false;return(0);
      case 10019: Alert("Нет достаточных денежных средств для выполнения запроса");Work=false;return(0);
      case 10020: Alert("Цены изменились");return(1);
      case 10021: Alert("Отсутствуют котировки для обработки запроса");Sleep(3000);return(1);
      case 10022: Alert("Неверная дата истечения ордера в запросе");Work=false;return(0);
      case 10023: Alert("Состояние ордера изменилось");return(2);
      case 10024: Alert("Слишком частые запросы");Work=false;return(0);
      case 10025: Alert("В запросе нет изменений");Sleep(3000);return(1);
      case 10026: Alert("Автотрейдинг запрещен сервером");Work=false;return(0);
      case 10027: Alert("Автотрейдинг запрещен клиентским терминалом");Work=false;return(0);
      case 10028: Alert("Запрос заблокирован для обработки");return(2);
      case 10029: Alert("Ордер или позиция заморожены");return(2);
      case 10030: Alert("Указан неподдерживаемый тип исполнения ордера по остатку");Work=false;return(0);
      case 10031: Alert("Нет соединения с торговым сервером");Sleep(3000);return(1);
      case 10032: Alert("Операция разрешена только для реальных счетов");Work=false;return(0);
      case 10033: Alert("Достигнут лимит на количество отложенных ордеров");return(2);
      case 10034: Alert("Достигнут лимит на объем ордеров и позиций для данного символа");return(2);
      default:    Alert("Ошибка № - ",Error);Work=false;return(0);
     }
  }
//+------------------------------------------------------------------+
//| Функция преоброзования типа ордера в строку                      |
//+------------------------------------------------------------------+
string TypeToStr(ENUM_ORDER_TYPE type)
  {
   switch(type)
     {
      case  ORDER_TYPE_BUY:  return("BUY");
      case  ORDER_TYPE_SELL: return("SELL");
     }
   return("");
  }
 
Renat:
То есть, тезис о "сырости платформы" никак не подтвердился.

я нигде ни упоминал, про сырость платформы - перечитайте мои посты

свои замечания по сабжу я высказал - считаете их голословными, пусть значит так, но думаю, Ваша компания занимается продажами софта для брокеров под платформу МТ5

sergey1294:

вот вам пример отправки запроса с нормализованными ценами

спс, но у меня немного другие представления о торговле и о цене по которой я хочу открыть ордер, попробуйте нормализовать 82.47 ,82.45999999999999 ,82.47 

я не уверен, что сервер "выдумает" у себя цену  82.46 , т.к. такой цены у него не было в логах, а если цена не рыночная - она мне не нужна - пусть на сервере остается, а не ошибками у меня в логах идет

 
IgorM:

я нигде ни упоминал, про сырость платформы - перечитайте мои посты

свои замечания по сабжу я высказал - считаете их голословными, пусть значит так, но думаю, Ваша компания занимается продажами софта для брокеров под платформу МТ5

спс, но у меня немного другие представления о торговле и о цене по которой я хочу открыть ордер, попробуйте нормализовать 82.47 ,82.45999999999999 ,82.47 

я не уверен, что сервер "выдумает" у себя цену  82.46 , т.к. такой цены у него не было в логах, а если цена не рыночная - она мне не нужна - пусть на сервере остается, а не ошибками у меня в логах идет

К сожалению, Вы не в курсе базовой арифметики вещественных чисел и их представления в компьютерах. В этом и есть корень непонимания "ненормализованных" цен.

82.45999999(9) и есть double представление числа 82.46

 
IgorM:

я нигде ни упоминал, про сырость платформы - перечитайте мои посты

свои замечания по сабжу я высказал - считаете их голословными, пусть значит так, но думаю, Ваша компания занимается продажами софта для брокеров под платформу МТ5

спс, но у меня немного другие представления о торговле и о цене по которой я хочу открыть ордер, попробуйте нормализовать 82.47 ,82.45999999999999 ,82.47 

я не уверен, что сервер "выдумает" у себя цену  82.46 , т.к. такой цены у него не было в логах, а если цена не рыночная - она мне не нужна - пусть на сервере остается, а не ошибками у меня в логах идет

не совсем понял что у вас там за представления о ценах, обще принятая цена имеет пять или четыре знака после запятой, вот и нужно обрезать цену в запросе до этого знака. тогда с исполнением не будет роблем, но если во время запроса цена изменилась, ни какая нормализация не поможет, вы получите реквоту, необходимо отправлять новый запрос по новой цене.
 
Renat:

К сожалению, Вы не в курсе базовой арифметики вещественных чисел и их представления в компьютерах. В этом и есть корень непонимания "ненормализованных" цен.

82.45999999(9) и есть double представление числа 82.46

ОК, я найду время перечитать, возможно уже позабытый мною материал, т.е. такая цена (82.45999999(9)) будет принята торговым сервером для открытия рыночного ордера?

sergey1294  обратите внимание на то что Вам предоставили разработчики в качестве готовых примеров и классов, по крайней мере в предоставленном разработчиками классе CTrade отсутствуют ф-ции NormalizeDouble(), как и в примерах по Справочник MQL5 / Торговые функции / OrderSend 

я не собираюсь выдумывать и изначально писать неправильные программы если я прочитал в первоисточнике конкретные примеры , в справке МТ4 пример OrderSend() тоже не содержит нормализации цены

 
IgorM:

ОК, я найду время перечитать, возможно уже позабытый мною материал, т.е. такая цена (82.45999999(9)) будет принята торговым сервером для открытия рыночного ордера?

Да, если это корректная/существующая цена в тиковом потоке.


sergey1294  обратите внимание на то что Вам предоставили разработчики в качестве готовых примеров и классов, по крайней мере в предоставленном разработчиками классе CTrade отсутствуют ф-ции NormalizeDouble(), как и в примерах по Справочник MQL5 / Торговые функции / OrderSend 

я не собираюсь выдумывать и изначально писать неправильные программы если я прочитал в первоисточнике конкретные примеры 

Если Вы используете штатные Bid и Ask для совершения торговых операций, то они всегда нормализованные. А вот вычисляемые цены (например, стопы) уже нужно самостоятельно нормализовывать перед отсылкой торгового приказа.

Методы стандартного CTrade не нормализуют принудительно входящие цены заявок, так как это категорически неприемлемо - нельзя подменять цены, заявленные уровнем выше.

 
Renat:
Да, если это корректная/существующая цена в тиковом потоке.


Если Вы используете штатные Bid и Ask для совершения торговых операций, то они всегда нормализованные. А вот вычисляемые цены (например, стопы) уже нужно самостоятельно нормализовывать перед отсылкой торгового приказа.

Методы стандартного CTrade не нормализуют принудительно входящие цены заявок, так как это категорически неприемлемо - нельзя подменять цены, заявленные уровнем выше.

спс! не сочтите за труд, упомяните это несколько раз в справочнике МТ5, чтобы не было непонимания и можно было бы сразу послать читать справку :)

ЗЫ: про СЛ и ТР я знаю, но не помню или прочитал в справке или на форуме выяснил 

 
IgorM:

спс! не сочтите за труд, упомяните это несколько раз в справочнике МТ5, чтобы не было непонимания и можно было бы сразу послать читать справку :)

Да, документацию мы постоянно апгрейдим и добавим уточнения.
 
IgorM:

постоянно читаю это форум, и оччччень часто поражаюсь Вашим глубокомысленным и информативным постам ;)

по сабжу, сомневаюсь, что котировки на демосчетах отличаются от микрореала, но на демосчете уж очень часто в компаниях о которых упомянул Админ идут ненормализованные цены, при сильном движении - по ним ордер не откроешь и не закроешь, хотелось бы видимости порядка, что бы потом не винить МТ5 

На вкус и цвет товарищей нет (народная мудрость) - кому-то мешает работать "не нормализованная цена", хотя лично я не считаю это большой проблемой (поскольку уже давно пользуюсь отложниками, да и цены эти для меня не сильная проблема). А вот проблемой для меня являются такие вещи как нежелание работать OnTimer() в тестере или иные подобные моменты.

Но даже при этих вводных, при выборе терминала для торговле на центовом счете (с депозитом в 200$) я лично сделаю свой выбор в пользу МТ5.

ПРИ ВСЕХ ЕГО ТЕКУЩИХ НЕДОСТАТКАХ!

 
Interesting:

На вкус и цвет товарищей нет (народная мудрость) - кому-то мешает работать "не нормализованная цена", хотя лично я не считаю это большой проблемой (поскольку уже давно пользуюсь отложниками, да и цены эти для меня не сильная проблема). А вот проблемой для меня являются такие вещи как нежелание работать OnTimer() в тестере или иные подобные моменты.

Эта наша ошибка была следствием неудачной оптимизации и уже исправлена в вышедшем 358 билде.
Причина обращения: