Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2204

 
Pavel Kuznetsov #:

Не могу сооброзить как правильно

Вот часть  кода на открытие:


     if(lFlagBuyOpen && OrderBuyStop()==0 && (CheckVolumeValue(buylot, сюда требуется какоето значение string)==true))

  

Просто удалите выделенное

bool CheckVolumeValue(double volume,string &description)
 

Да у меня всё отлично работает и торгует ,всё хорошо. Имеется проверка мин.лота и макс.лота, в начала кода. В маркете эту шляпу требуют

 
Удалял, ошибку выдаёт, многое пробывал.
 
Pavel Kuznetsov #:
Удалял, ошибку выдаёт, многое пробывал.

Я выделил в двух местах. Только скобки не считал, надеюсь с этим сами справитесь…

 

Короче Всё что выделил удалить и тогда проходит, вот только маркет наверное опять не пропустит

//+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+
bool CheckVolumeValue(double volume,string &description)
  {
//--- минимально допустимый объем для торговых операций
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(volume<min_volume)
     {
      description=StringFormat("Объем меньше минимально допустимого SYMBOL_VOLUME_MIN=%.2f",min_volume);
      return(false);
     }

//--- максимально допустимый объем для торговых операций
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(volume>max_volume)
     {
      description=StringFormat("Объем больше максимально допустимого SYMBOL_VOLUME_MAX=%.2f",max_volume);
      return(false);
     }

//--- получим минимальную градацию объема
   double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   int ratio=(int)MathRound(volume/volume_step);
   if(MathAbs(ratio*volume_step-volume)>0.0000001)
     {
      description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",
                               volume_step,ratio*volume_step);
      return(false);
     }
   description="Корректное значение объема";
   return(true);
  }

------------------------------------------------

 if(lFlagBuyOpen && OrderBuyStop()==0 && CheckVolumeValue(buylot) - вот так проходит



 
Pavel Kuznetsov #:

Короче Всё что выделил удалить и тогда проходит, вот только маркет наверное опять не пропустит

Ну да… Я ведь дальше не читал код…

 

Здравствуйте. Подскажите, пожалста. Можно ли при инициализации узнать сдвиг часовых поясов брокера?

Есть индикатор который берет данные об объектах из базы данных, работает по таймеру который включается при инициализации. Объекты в бд с GMT + 3, а у брокеров время может быть разным.

Сравнивать с TimeCurrent(), предположу, не стоит тк индикатор можно включить и в нерабочее время.

 
Andrei Sokolov #:

Здравствуйте. Подскажите, пожалста. Можно ли при инициализации узнать сдвиг часовых поясов брокера?

Есть индикатор который берет данные об объектах из базы данных, работает по таймеру который включается при инициализации. Объекты в бд с GMT + 3, а у брокеров время может быть разным.

Сравнивать с TimeCurrent(), предположу, не стоит тк индикатор можно включить и в нерабочее время.

А если сравнивать TimeTradeServer() с TimeGMT()?

 
JRandomTrader #:

А если сравнивать TimeTradeServer() с TimeGMT()?

Возвращает расчетное текущее время торгового сервера. В отличие от функции TimeCurrent(), расчет значения времени производится в клиентском терминале и зависит от настроек времени на компьютере пользователя. 

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

И я забыл уточнить, надо для мт4.

 
Andrei Sokolov #:


Сравнивать с TimeCurrent(), предположу, не стоит тк индикатор можно включить и в нерабочее время.

RefreshRates() перед  TimeCurrent(), тогда, вроде, все правильно получается.

Хотелось бы иметь  параметр сдвиг часов брокера чтоб было проще.

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