Проверка SYMBOL_VOLUME_LIMIT у некоторых брокеров всегда нуль, советник не проходит проверку маркета

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Evgeniy Scherbina
24115
Evgeniy Scherbina  

Изучаю внимательно публикацию https://www.mql5.com/ru/articles/2555 на предмет ошибок, которые можно допустить в советнике, перед публикацией на маркете.

Там есть пример проверки максимально допустимого объема NewOrderAllowedVolume(string symbol). Эта проверка всегда возвращает нуль для некоторых брокеров, среди которых Альпари МТ5 и Робофорекс МТ5, так как у них в спецификации символов этот параметр всегда нуль. Без этого параметра проверку на маркете пройти невозможно. Но и продавать такой товар невыгодно, так как выпадают серьезные брокеры. И что же делать?

Какие проверки должен пройти торговый робот перед публикацией в Маркете
Какие проверки должен пройти торговый робот перед публикацией в Маркете
  • www.mql5.com
Все продукты Маркета перед публикацией проходят обязательную предварительную проверку, так как небольшая ошибка в логике советника или индикатора может привести к убыткам на торговом счете. Именно поэтому нами разработана серия базовых проверок, призванных обеспечить необходимый уровень качества продуктов Маркета. Если в процессе проверки...
Vladimir Karputov
Модератор
182183
Vladimir Karputov  
Evgeniy Scherbina:

Изучаю внимательно публикацию: https://www.mql5.com/ru/articles/2555 на предмет ошибок, которые можно допустить в советник, перед публикацией на маркете.

Там есть пример проверки максимально допустимого объема NewOrderAllowedVolume(string symbol). Эта проверка всегда возвращает нуль для некоторых брокеров, среди которых Альпари МТ5 и Робофорекс МТ5, так как у них в спецификации символов этот параметр всегда нуль. Без этого параметра проверку на маркете пройти невозможно. Но и продавать такой товар невыгодно, так как выпадают серьезные брокеры. И что же делать?

Если != 0.0, выполнять проверку. Если == 0.0, значит переходить дальше и выполнять другие проверки.

То есть предусмотреть два варианта.

Evgeniy Scherbina
24115
Evgeniy Scherbina  

Наваял вот так:

double get_allowed_volume(){
  double allowed_volume = 0;
  double volume_max_all_brokers = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
  
  
  // этот параметр присутствует не у всех брокеров в спецификации символа
  // однако проверку маркета пройти все равно можно, если схитрить
  double volume_max_for_market = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_LIMIT);
  
  
  double opened_volume = 0;
  for(int i=0; i<PositionsTotal(); i++){
    if(PositionGetSymbol(i) == _Symbol){
      if(PositionGetString(POSITION_COMMENT) == "bny"){
        opened_volume += PositionGetDouble(POSITION_VOLUME);
      }
    }
  }
  
  
  // здесь можно убедиться, что проверку выполняет маркет
  if(volume_max_for_market != 0){
    if(opened_volume >= 0 && volume_max_for_market - opened_volume <= 0){
      return(0);
    }
    
    allowed_volume = volume_max_for_market - opened_volume;
  
  
  // а это для всего остального
  }else{
    if(opened_volume >= 0 && volume_max_all_brokers - opened_volume <= 0){
      return(0);
    }
    
    allowed_volume = volume_max_all_brokers - opened_volume;
  }
  

  return(allowed_volume);
}
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий