Получить минимальный размер лота данного актива в MQL5

Я пытаюсь создать простой тестер стратегий для автоматической торговли, но для некоторых активов функция «Купить» не работает с кодом ошибки 10014 «TRADE_RETCODE_INVALID_VOLUME». Самое простое решение для этого, на мой взгляд, - заранее знать минимальный объем актива, принимаемого для торговли им. Мой код до сих пор:

void OnTick()
  {
   double ask = NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_ASK), _Digits);
   MqlRates PriceInfo[];
   ArraySetAsSeries(PriceInfo, true);

   int PriceData = CopyRates(_Symbol, _Period, 0 ,3, PriceInfo);

   if(PositionsTotal() == 0)
   {
      bool result = trade.Buy(
      100, //100, 10, 1, 0.1, 0.01, 0.001... any value gives "invalid volume"
      NULL,
      ask, 
      ask-300 * _Point, // stop loss
      ask+150 * _Point, // take profit
      NULL
      );
      if(result){
         double balance = AccountInfoDouble(ACCOUNT_BALANCE);
         Comment("Preco de compra: " +  ask + " stop loss: " + (ask-300 * _Point) + " take profit: " + (ask+150 * _Point)  );
         }
      else{
         Comment("Erro ao realizar compra");

      }
   }
  } 

Я просто хочу заменить первый параметр функции покупки минимальным ДЕЙСТВИТЕЛЬНЫМ объемом для данного символа. Заранее спасибо.


person Fabiotk    schedule 23.09.2019    source источник


Ответы (1)


Я нашел себе ответ, чтобы получить минимально допустимый объем для актива:

double minVol = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);

Затем я добавил его в вызов функции

  bool result = trade.Buy(
  minVol,
  NULL,
  ask,
  ask-300 * _Point, // stop loss
  ask+150 * _Point, // take profit
  NULL
  );

Источник: https://www.mql5.com/en/docs/constants/environment_state/marketinfoconstants

person Fabiotk    schedule 23.09.2019