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

 
Valeriy Yastremskiy #:
Тики сохраняются только в 5ке. В 4ке только опен клоз хай лоу. Тики в тестере моделируются рандомно.

Тики в 5-ке сохраняются на терминале/компе пользователя? Какой же размер файла истории?

Или

Тики сохраняются на сервере? Тогда вопрос, какая глубина истории (по времени) ?

 
Putnik #:

Тики в 5-ке сохраняются на терминале/компе пользователя? Какой же размер файла истории?

Или

Тики сохраняются на сервере? Тогда вопрос, какая глубина истории (по времени) ?

У каждого брокера по своему, пару месяцев на минутках уже хорошо))) На квотах демо лучше, на минутках в тестере пару лет можно получить. Если терминал включать раз в неделю в течении 5 лет, то история будет лет 10 на минутках, но надо понимать, что это гигов 100 просто по мажорам, а это всего 10 символов.

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

 
Valeriy Yastremskiy #:

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

Ок, понятно.

 

Подскажите пожалуйста.

Как вставляется данная функция для проверки объёма перед открытием ордера? Данную функцию я скопировал и вставил в код, а как правильно ей воспользоваться? Как правильно прописать в коде перед открытием?

//+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+
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);
  }
 
CheckVolumeValue(лот из input)

и там смотреть false или true

description

по ссылке передается, на него можно не обращать внимание в вызове функции

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

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

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


 //--Открытие на Buy  

 

 if(AllOupenTradeBuy()==0)                                                                   

   {   

    if(AccountFreeMarginCheck(Symbol(),OP_BUY,buylot)<=0 || GetLastError()==134)

    {

     Alert("Not enough free funds   ",GetLastError()); 

       return;

    }   

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

     OpenBuy();                                                                                                                 

 }

                                                                                            

//--Открытие на Sell                                                                            


МОЖЕТ ВООБЩЕ НЕ ПРАВИЛЬНО ПИШУ

 
Pavel Kuznetsov #:

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


string там, это отдельная эпопея, 

в эту функцию передается input lot, для проверки корректности, string передается по ссылке благодаря символу @. Это для того что-бы получить не только ДА или НЕТ из (bool функции), а еще и другое, типа - многофункциональная функция становится

если переменную обозначить перед вызовом, то после работы функции в ней будут данные которые по ссылке передались, иногда полезно может быть

 
Pavel Kuznetsov #:

Подскажите пожалуйста.

Как вставляется данная функция для проверки объёма перед открытием ордера? Данную функцию я скопировал и вставил в код, а как правильно ей воспользоваться? Как правильно прописать в коде перед открытием?

А чем вам не нравится стандартная функция OrderCheck() и в структуре

struct MqlTradeCheckResult 
  { 
   uint         retcode;             // Код ответа 
   double       balance;             // Баланс после совершения сделки 
   double       equity;              // Эквити после совершения сделки 
   double       profit;              // Плавающая прибыль 
   double       margin;              // Маржевые требования 
   double       margin_free;         // Свободная маржа 
   double       margin_level;        // Уровень маржи 
   string       comment;             // Комментарий к коду ответа (описание ошибки) 
  };

можно много чего прочесть… 

Документация по MQL5: Торговые функции / OrderCheck
Документация по MQL5: Торговые функции / OrderCheck
  • www.mql5.com
OrderCheck - Торговые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5