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

 
Tapochun:
Вы, как мне кажется, не здесь вопрос задаете. Создайте отдельную тему, прикрепите туда код индикатора и надейтесь, что кто-нибудь поможет. Без кода... маловероятно, что Вам кто-то подскажет.
Индикатор не покупает и не продаёт.)
 
При написании ТЗ, столкнулся с ситуацией в которой не пойму как правильно описать алгоритм. Подскажите возможно частичное закрытие позиции в работе советника?
 
Nikolay Lampickiy:
При написании ТЗ, столкнулся с ситуацией в которой не пойму как правильно описать алгоритм. Подскажите возможно частичное закрытие позиции в работе советника?
Для этого надо в приказе на закрытие указывать лот меньше, чем лот позиции (это если МТ4, в МТ5 можно открыть противоположную позицию с меньшим лотом, в итоге они перекрываются). В рынке останется позиция с остаточным лотом.
 
Nikolay Lampickiy:
При написании ТЗ, столкнулся с ситуацией в которой не пойму как правильно описать алгоритм. Подскажите возможно частичное закрытие позиции в работе советника?
А что там сложного ? Цена проходит определенное расстояние пунктов в профит, закрывается половина позиции, если позиция не делится ровно (например 0.09) то закрывается большая часть (0.05) и стоп переносится в безубыток, далее проходим ещё расстояние закрывает опять половину от того что осталось (0.02) и стоп переносим на расстояние шага закрытия в плюс и так пока не закроется вся позиция или не выбьет по стопу. Шаг может быть фиксированный или каждый раз рассчитываться от какого либо диапазона, зависит от торговой системы.
 
Vladimir Zubov:
А что там сложного ? Цена проходит определенное расстояние пунктов в профит, закрывается половина позиции, если позиция не делится ровно (например 0.09) то закрывается большая часть (0.05) и стоп переносится в безубыток, далее проходим ещё расстояние закрывает опять половину от того что осталось (0.02) и стоп переносим на расстояние шага закрытия в плюс и так пока не закроется вся позиция или не выбьет по стопу. Шаг может быть фиксированный или каждый раз рассчитываться от какого либо диапазона, зависит от торговой системы.

Я правильно понимаю? В программном языке MQL4 есть возможность формализовать закрытие только половины объёма рыночного ордера... типа лот 10 и при достижение ценой нужного уровня закрыть 5 лотов.

Или есть возможность 1/3?

Или проще реализовать эту идею, в советнике, через выставления разных ордеров. При достижении  нужного уровня ценой закрывается один ордер, а другой остаётся,  в место  частичного закрытия объёма рыночного ордера. Что скажите?

 
Vitalie Postolache:
Для этого надо в приказе на закрытие указывать лот меньше, чем лот позиции (это если МТ4, в МТ5 можно открыть противоположную позицию с меньшим лотом, в итоге они перекрываются). В рынке останется позиция с остаточным лотом.
противоположная позиция не устраивает... спасибо за ответ
 
Nikolay Lampickiy:

Я правильно понимаю? В программном языке MQL4 есть возможность формализовать закрытие только половины объёма рыночного ордера... типа лот 10 и при достижение ценой нужного уровня закрыть 5 лотов.

Или есть возможность 1/3?

Или проще реализовать эту идею, в советнике, через выставления разных ордеров. При достижении  нужного уровня ценой закрывается один ордер, а другой остаётся,  в место  частичного закрытия объёма рыночного ордера. Что скажите?

Можно и так и так. OrderClose позволяет закрывать объём который ему указывают. https://docs.mql4.com/ru/trading/orderclose

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

OrderClose - Документация на MQL4
  • docs.mql4.com
OrderClose - Документация на MQL4
 
Vladimir Zubov:

Можно и так и так. OrderClose позволяет закрывать объём который ему указывают. https://docs.mql4.com/ru/trading/orderclose

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

Спасибо за ответ..)))
 

Всем доброго времени суток! Столкнулась с проблемой, хотелось бы услышать мнение профессионалов или более опытных пользователей МТ5. Написала индикатор, а также класс CEventBase, с помощью которого индикатор генерирует события. При запуске экспертов, обрабатывающих эти события, рано или поздно, при запуске в реальном времени, сыпятся ошибки: 4001, 4102, 4104. Начав "сыпаться" они уже не перестают этого делать) прикрепляю код функции Generate, которая собчтвенно и является источником всех этих бед. Буду очень рада услышать Ваше мнение на этот  счет...)

Всем хорошего дня!


bool CEventBase::Generate(long _chart_id, int _id_ind, SEventData &_data,
                          const bool _is_custom=true)
  {
   bool is_generated = true;
   // если индекс id события в массиве не верен
   if (_id_ind < 0 || _id_ind >= aEvents.Total())
    {
     Print("Не верно задан индекс ID события");
     return (false);
    }
   // заполняем поля 
   CEvent *event = aEvents.At(_id_ind);
   this._id = (ushort)(CHARTEVENT_CUSTOM+event.id);
   this._data = _data;
   this._data.sparam = event.name; // сохраняем имя события
   
   if(_is_custom)
     {
      ResetLastError();
      is_generated = EventChartCustom(_chart_id, event.id, this._data.lparam,
                                      this._data.dparam, this._data.sparam);
      if(!is_generated && _LastError != 4104)
         {
          Print("is_generated = ", is_generated);
          PrintFormat("%s Error while generating a custom event: %d", __FUNCTION__,_LastError);
          Print( ChartSymbol(_chart_id)," ",PeriodToString(ChartPeriod(_chart_id)), "Ошибка! _chart_id =", _chart_id, " event.id = ", event.id, " data.dparam = " ,this._data.dparam, " data.sparam = ", this._data.sparam);
          
         }
     }
   return is_generated;
  }


 
dariamap:

Всем доброго времени суток! Столкнулась с проблемой, хотелось бы услышать мнение профессионалов или более опытных пользователей МТ5. Написала индикатор, а также класс CEventBase, с помощью которого индикатор генерирует события. При запуске экспертов, обрабатывающих эти события, рано или поздно, при запуске в реальном времени, сыпятся ошибки: 4001, 4102, 4104. Начав "сыпаться" они уже не перестают этого делать) прикрепляю код функции Generate, которая собчтвенно и является источником всех этих бед. Буду очень рада услышать Ваше мнение на этот  счет...)

Всем хорошего дня!

Очевидно что представленный вами метод является транзитным. Ошибка скорее всего не в нем. По представленным данным не понятно что происходит. Вариантов может быть несколько:

  • Неправильно указывается идентификатор графика (о чем и говорят ошибка 4101).
  • Слишком частые запросы;
  • Неверные другие параметры (идентификаторы событий например).

Судя по уровню написанного Вами кода можно сказать, что ошибка может быть где угодно и какая угодно.
Причина обращения: