Ошибка при отправке запроса на реале: "failed market buy 0.01 NZDCHF.m [Invalid volume]"

 
Доброй ночи.
На демо счете код работает нормально.
Поставил потестить на истории на реальном счете.
(Депозит там нулевой)
И советник отказывается совершать сделку:
"failed market buy 0.01 NZDCHF.m [Invalid volume]"

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

bool SendOrderBuy(double price, double volume, double pos_prof, double prc_bid)
{  
   
   if(volume >= 50){
       volume = 50;
   }
   
   /*----------
   
   else if(volume >= 500){
      Print("ОШИБКА! Обьем Ордера привысил размер 50 лотов и сейчас ровняется", volume,"-м");
      return(false);
   };
   
   ------------*/

   MqlTradeRequest request = {0};
   MqlTradeResult  result  = {0};
   //---заполняем поля торгового запроса
   request.action       = TRADE_ACTION_DEAL;       // Тип выполняемого действия
   request.symbol       = _Symbol;                 // Имя торгового инструмента
   request.magic        = magic_number;            // Магический Ордер
   request.volume       = volume;                  // Запрашиваемый объем сделки в лотах
   request.price        = price;                   // Цена  
   request.type         = ORDER_TYPE_BUY;          // Тип ордера
   request.tp           = 0;                       // Цена, по которой сработает Take Profit ордер при движении цены в благоприятном направлении
   request.sl           = 0;                       // Цена, по которой сработает Stop Loss ордер при движении цены в неблагоприятном направлении
   request.deviation    = 0;                       // Максимально приемлемое отклонение от запрашиваемой цены, задаваемое в пунктах
   request.type_filling = ORDER_FILLING_IOC;       // Тип ордера по исполнению
   request.type_time    = ORDER_TIME_DAY;          // Тип  длительности действия ордера               
                  
                  
   //---проверим хватает ли средств для открытия позиции
        double margin = 0.0;
                     
   if (!OrderCalcMargin(request.type, request.symbol, request.volume, request.price, margin))
                        return(false);
                     
   if (margin > AccountInfoDouble(ACCOUNT_FREEMARGIN))
                        return(false);
                  
                     
   //---отправка запроса на сервер и проверка результата отправки
   if (OrderSend(request,result))
       {
         if ( result.retcode == TRADE_RETCODE_DONE)
              {
                 return (true);
              };
            };

                                                  
                     return(false);
   };// функция торгового запроса-------------------------------------------------------------------------------------------------+  
Вопрос: 

В чем может быть проблема?


+ такой момент для себя хотел ещё выяснить:

Допустим я хочу перебрать все инструменты существующие, по нужным мне 
критериям и что бы в одном советнике можно было торговать сразу на всех 
инструментах.

Как это можно реализовать правильно?

Что конкретно прописать необходимо?

(в общем саму идею(максимально рациональную) хотелось бы увидеть.)



P.S. Буду благодарен за советы.

 
Mike_Kharkov:
И советник отказывается совершать сделку:
"failed market buy 0.01 NZDCHF.m [Invalid volume]"
    С этим вроде разобрался.
    На том типе счета просто нельзя тоговать сотыми долями лота(микролота).
    Остается вопрос с перебором инструментов...
  
    P.S. Во время тестирования на истории мне так же непонятен момент со свопами:
    Если я торгую объемом 0.01(на демо на истории) или объемом 0.1(на реале на истории) то своп взымается(или начисляется) таким образом, как будто я торгую одним лотом!?
   
    Почему это происходит?
    Это же полная дезинформация для новичков получается.
    (от этого же очень сильно результаты тестирования зависеть могут в некоторых стратегиях.)
 

Какой билд клиентского терминала вы используете?

Какие настройки свопов по инструменту на сервере?

Можете приложить отчет тестера?

 
alexvd:

Какой билд клиентского терминала вы используете?

Какие настройки свопов по инструменту на сервере?

Можете приложить отчет тестера?

Провел похожий тест. В билде 1010 свопы по паре GBPUSD для всех сделок (0.1 -0.24 лотов) считаются как для сделок объемом 1 лот. В билде 1014 этого уже не наблюдается и свопы выглядят правильными...
 
alexvd:

Какой билд клиентского терминала вы используете?

Какие настройки свопов по инструменту на сервере?

Можете приложить отчет тестера?

   Использую Билд 1010.
   Насколько я понял - все что до 1-го лота(объемы) считаются по свопам как 1 лот.
   Отчет пока не могу приложить.
   Файлы(TXT) в логах по удалял в свое время(что бы они винт не грузили своим объемом.) - теперь ничего там нет. ))

   P.S. А обновиться как то можно до билда 1014?
   (и почему автоматичеcкого обновления не произошло(до последней версии) в таком случае?)
 
Mike_Kharkov:

   P.S. А обновиться как то можно до билда 1014?
   (и почему автоматичеcкого обновления не произошло(до последней версии) в таком случае?)
На MetaQuotes-Demo выложен билд 1016. Там проблема с расчетом свопов уже исправлена.
 
alexvd:
На MetaQuotes-Demo выложен билд 1016. Там проблема с расчетом свопов уже исправлена.

В версии 1016 походу что-то сломалось с работой с файлами в облаке.

Появилась такая ошибка (только при использовании облака):

2014.11.18 11:15:42    Tester    expert file C:\Users\a.barinov\AppData\Roaming\MetaQuotes\Terminal\Common\Files\calendar_statement.csv process error

В билдах 1010 и 1014 все работало...

Андрей.

 
Wahoo:

В версии 1016 походу что-то сломалось с работой с файлами в облаке.

Появилась такая ошибка (только при использовании облака):

2014.11.18 11:15:42    Tester    expert file C:\Users\a.barinov\AppData\Roaming\MetaQuotes\Terminal\Common\Files\calendar_statement.csv process error

В билдах 1010 и 1014 все работало...

Андрей.

Давайте все подробности + исходник в сервисдеск.
 
alexvd:
Давайте все подробности + исходник в сервисдеск.

Запостил.

File processing error
Ошибки, MetaTrader 5 Client, Открыта, Начата: 2014.11.18 13:59, #1106690
Причина обращения: