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

 
Maxim Kuznetsov #:

у меня в индикаторах типичный цикл :

for(int bar=prev_calculated>0?prev_calculated-1:0 ; bar<rates_total; bar++) {

// bar используется если массив в стиле mt5

int idx = rates_total - bar - 1; // idx для обращения к массивам которые как тайм-серии, mt4-style

...

}

Спс. Вкурю....
 
Alexey Viktorov #:

Надо то понятно, а вот что есть в таком цикле не понятно.

Ведь на каждом цикле счётчик цикла будет начинаться с нуля. Не так разве?

Спс. Я доки еще почитаю - там все это расписано....
 
Aleksandr Slavskii #:

Направление не верное в цикле и в функциях. У вас получается расчёт с переду назад.

В таком цикле вы заканчиваете перебор на rates_total-1 баре, а в функциях iOpen(), iBarShift(), направление другое и самый крайний(правый) бар имеет индекс ноль.

Вам нужно что то типа так

Ну и без проверки деления на ноль, совсем плохо.

Ещё желательно добавить в OnInit() проверку символов

Спасибо. У меня тоже были сомнения с направлением в цикле... Спс за разъяснения.
 
Alexey Viktorov #:

Надо то понятно, а вот что есть в таком цикле не понятно.

Ведь на каждом цикле счётчик цикла будет начинаться с нуля. Не так разве?

это статью перечитывал.. переход с МТ 4 https://www.mql5.com/ru/articles/81

там понятно что уже много нового ввели типа

iOpen()
в общем данные актуализирую...
Переход с MQL4 на MQL5
Переход с MQL4 на MQL5
  • www.mql5.com
Данная статья, построенная в форме справочника по функциям MQL4, призвана помочь переходу с MQL4 на MQL5. Для каждой функции языка MQL4 приведено описание и представлен способ ее реализации на MQL5, что позволит вам значительно ускорить перевод своих программ с MQL4 на MQL5. Для удобства функции разбиты на группы, как в документации по MQL4.
 

Добрый день!

Подскажите, пожалуйста, возможно ли изменить текст КОММЕНТАРИЯ  к сделке или внести новый текст уже  ПОСЛЕ ОТКРЫТИЯ СДЕЛКИ?

Если возможно, то как это сделать?

Спасибо!

 
Aleksandr Slavskii #:

Можно модифицировать позицию - изменить стоп или тейк, заодно поменять коммент.

Увы! Графа "Комментарий" - не активна. Изменить не получится

Спасибо!

 
Kedrov #:

Увы! Графа "Комментарий" - не активна. Изменить не получится

Спасибо!

Я удалил коммент так как засомневался.

Если вы используете Trade.mqh, то придётся его немного поправить. Но я не уверен, что это будет работать.

//+------------------------------------------------------------------+
//| Modify specified opened position                                 |
//+------------------------------------------------------------------+
bool CTrade::PositionModify(const string symbol, const double sl, const double tp, const string comment)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- check position existence
   if(!SelectPosition(symbol))
      return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action  = TRADE_ACTION_SLTP;
   m_request.symbol  = symbol;
   m_request.magic   = m_magic;
   m_request.sl      = sl;
   m_request.tp      = tp;
   m_request.position = PositionGetInteger(POSITION_TICKET);
   m_request.comment = comment;
//--- action and return the result
   return(OrderSend(m_request, m_result));
  }

и в шапке класса тоже дописать 

   bool              PositionModify(const string symbol, const double sl, const double tp, const string comment);

Попробуйте, вдруг получится. Отпишитесь)))


Упс. У вас мт4, а я для мт5 описал действия.

 

Прошу поделится функцией супер-быстрого закрытия позиций

Открыто примерно 8-15 позиций, нужно их закрыть очень оперативно, чуть-ли не одновременно

--

Спасибо!

 
Vitaly Muzichenko #:

Прошу поделится функцией супер-быстрого закрытия позиций

Открыто примерно 8-15 позиций, нужно их закрыть очень оперативно, чуть-ли не одновременно

--

Спасибо!

#include <Trade\Trade.mqh>
CTrade         m_trade;
//+------------------------------------------------------------------+
void OnStart()
  {
   m_trade.SetAsyncMode(true);
   while(PositionsTotal() > 0 && !IsStopped())
      for(int i = PositionsTotal() - 1; i >= 0; i--)
         m_trade.PositionClose(PositionGetTicket(i));
  }
//+------------------------------------------------------------------+

Обычно это очень быстро.

 
Aleksandr Slavskii #:
#include <Trade\Trade.mqh> CTrade         m_trade; //+------------------------------------------------------------------+ void OnStart()   {    m_trade.SetAsyncMode(true);    while(PositionsTotal() > 0 && !IsStopped())       for(int i = PositionsTotal() - 1; i >= 0; i--)          m_trade.PositionClose(PositionGetTicket(i));   } //+------------------------------------------------------------------+

Спасибо! Успел только глазами моргнуть :)