Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1163

 
Roman:

Если её ввели, значит разница есть.
Чтение проинициализированной переменной, всегда быстрее чтения функции.

Нет никакой разницы. Не могу найти сейчас ссылку - но был ответ давно дан.

 
Vladimir Karputov:

Нет никакой разницы. Не могу найти сейчас ссылку - но был ответ давно дан.

Для Хуана и предупреждения компилятора, ни имеют ни какой разницы ))

 
Vladimir Karputov:

Нет никакой разницы. При компиляции всё сводится в единый вызов. Поэтому правильнее всё через функции делать.

А давайте ещё и об этом заведём отдельную ветку и будем спорить как о пипсах и пунктах... Вот будет чем людя́м заняться...

Как-же вы любите своё мнение навязывать всем и каждому...

 

Есть MA с некоторым сдвигом. Пусть MA_shift = 5;

Почему получается взять верное значение MA с нулевого бара чарта, только если передать в CopyBuffer двойной отрицательный сдвиг?
CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);

В MA_Buf[0] теперь верное значение.

 
RickD:

Есть MA с некоторым сдвигом. Пусть MA_shift = 5;

Почему получается взять верное значение MA с нулевого бара чарта, только если передать в CopyBuffer двойной отрицательный сдвиг?
CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);

В MA_Buf[0] теперь верное значение.

Картинку сначала нарисуйте и укажите что для Вас "нулевой бар" для индикатора с параметром shift.

 
Roman:

Чтение переменной, быстрее чем функции.

далеко не факт, вот проверял что быстрее _Symbol или Symbol() https://www.mql5.com/ru/forum/160683/page933#comment_12780905

т.е. время доступа один в один, оптимизация кода в MQL очень круто работает, поэтому, что удобнее то и используйте

по моим тестам время доступа к переменной может отличаться, смотря где описана переменная и с какими модификаторами, но там 2-5% скорости, что в принципе можно списать на реализацию в конкретном билде, от номера билда точно это зависит

 
Подскажите плз, как проще и быстрее всего получить результат последней сделки по текущему символу? А то из документации все сложно как то. Для получения результата надо найти сначала тикет нужной сделки, что б найти тикет нужно найти сделку в итории по ее индексу, индекс надо искать в истории, не говоря о том, что еще надо по символу отфильтровать. появляется чувство, что я слишком усложняю задачу
 
WinZip:
Подскажите плз, как проще и быстрее всего получить результат последней сделки по текущему символу? А то из документации все сложно как то. Для получения результата надо найти сначала тикет нужной сделки, что б найти тикет нужно найти сделку в итории по ее индексу, индекс надо искать в истории, не говоря о том, что еще надо по символу отфильтровать. появляется чувство, что я слишком усложняю задачу

Чтобы не лезть в торговую историю каждый раз - просто отлавливайте в OnTradeTransaction сделку с типом 

TRADE_TRANSACTION_DEAL_ADD – добавление сделки в историю


//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_ticket       =0;
      long     deal_order        =0;
      long     deal_time         =0;
      long     deal_time_msc     =0;
      long     deal_type         =-1;
      long     deal_entry        =-1;
      long     deal_magic        =0;
      long     deal_reason       =-1;
      long     deal_position_id  =0;
      double   deal_volume       =0.0;
      double   deal_price        =0.0;
      double   deal_commission   =0.0;
      double   deal_swap         =0.0;
      double   deal_profit       =0.0;
      string   deal_symbol       ="";
      string   deal_comment      ="";
      string   deal_external_id  ="";
      if(HistoryDealSelect(trans.deal))
        {
         deal_ticket       =HistoryDealGetInteger(trans.deal,DEAL_TICKET);
         deal_order        =HistoryDealGetInteger(trans.deal,DEAL_ORDER);
         deal_time         =HistoryDealGetInteger(trans.deal,DEAL_TIME);
         deal_time_msc     =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC);
         deal_type         =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_entry        =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_magic        =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason       =HistoryDealGetInteger(trans.deal,DEAL_REASON);
         deal_position_id  =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);

         deal_volume       =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_price        =HistoryDealGetDouble(trans.deal,DEAL_PRICE);
         deal_commission   =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION);
         deal_swap         =HistoryDealGetDouble(trans.deal,DEAL_SWAP);
         deal_profit       =HistoryDealGetDouble(trans.deal,DEAL_PROFIT);

         deal_symbol       =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_comment      =HistoryDealGetString(trans.deal,DEAL_COMMENT);
         deal_external_id  =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID);
        }
      else
         return;
      ENUM_DEAL_ENTRY enum_deal_entry=(ENUM_DEAL_ENTRY)deal_entry;
      if(deal_symbol==m_symbol.Name() && deal_magic==InpMagic)
        {
         if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
           {
            
...
           }
        }
     }
  }

m_symbol.Name() - текущий символ, InpMagic - уникальный идентификатор эксперта

 
Здравствуйте  я зарегистрировался через  сайт и с фейсбук почты и немогу зайти через мета трейдер 5-4 помогите и пополтил счет 
 
Igor Makanu:

далеко не факт, вот проверял что быстрее _Symbol или Symbol() https://www.mql5.com/ru/forum/160683/page933#comment_12780905

т.е. время доступа один в один, оптимизация кода в MQL очень круто работает, поэтому, что удобнее то и используйте

по моим тестам время доступа к переменной может отличаться, смотря где описана переменная и с какими модификаторами, но там 2-5% скорости, что в принципе можно списать на реализацию в конкретном билде, от номера билда точно это зависит

Согласен что оптимизатор работает хорошо, но полагаться всегда на оптимизатор компилятора, не верно.
Необходимо заранее продумывать как исполняется код на уровне памяти, инициализации и возврата значения.
То есть просчитывать количество выполняемых действий на операцию, меньше действий - быстрее код. И взять за практику сразу писать оптимальный код.
В коротких кодах, возможно разницы нет, а когда будет проект на сотни файлов, вот тогда и появятся задержки,
и потом только профилировщик и переписывание кода. Каждый выбирает свои грабли ))

Так же погугли за ключевые слова

__inline 
__forceinline
Как ни странно, они есть в mql как не документированные.