Вопросы от "чайника" - страница 66

 
Yedelkin:

Всё зависит от того, какая логика заложена в пользовательский индикатор. В принципе, может и раз в сутки пересчитывать свои значения, пропуская все остальные тики. По воле автора, так сказать.

 В принципе, некоторые пытаются использовать такой чудовищный подход: создать копию индикатора через iCustom, скопировать нужные данные, уничтожить копию индикатора. По мере необходимости процедуру повторяют.

 ..Ещё есть функция OnTimer(). Сам с ней не работал, но, может быть, Вам удастся её скомпоновать под свою задачу.

Спасибо. Так и думал. OnTimer не подходит.

Есть ситуация, когда индикатор на M5, но обращение к нему происходит раз в час к примеру. Получается, что индикатор будет рассчитываться в советнике в холостую каждые 5 минут ради вызова его раз в час. Поэтому и интересуюсь - нет ли возможности приостановить пересчет индикатора.

 
masharov:

Есть ситуация, когда индикатор на M5, но обращение к нему происходит раз в час к примеру. Получается, что индикатор будет рассчитываться в советнике в холостую каждые 5 минут ради вызова его раз в час.

А переписать индикатор так, чтоб и он рассчитывался ежечасно, не получается?
 
Yedelkin:
А переписать индикатор так, чтоб и он рассчитывался ежечасно, не получается?
торговля идет на M5. Неизвестно, когда будет вызов индикатора. Может быть раз в два часа, а может быть три раза за час. Индикатор используется для подтверждения решения о сделке.
Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • 2010.03.09
  • KlimMalgin
  • www.mql5.com
C появлением новой версии языка MQL, не только изменился подход к работе с индикаторами, но и появились новые способы создания индикаторов. Кроме того, появилась дополнительная гибкость при работе с индикаторными буферами - теперь вы можете самостоятельно указать нужное направление индексации и получать ровно столько значений индикатора, сколько вам требуется. В этой статье рассмотрены базовые методы вызова индикаторов и получения данных из индикаторных буферов.
 
masharov:
торговля идет на M5. Неизвестно, когда будет вызов индикатора. Может быть раз в два часа, а может быть три раза за час. Индикатор используется для подтверждения решения о сделке.
Логика понятна. Я в таких случаях делал тупо и сердито: блок расчётов из индикатора переносил непосредственно в эксперт. Т.е. вместо внешнего источника данных (индикатора) эксперт пользовался одной из своих функций - той, которая воспроизводила расчётный алгоритм индикатора. В таком случае эта функция вызывалась по мере необходимости, с полным пересчётом нужных значений.
 

Здравствуйте! Скажите пожалуйста,

1)Что делать с ошибками типа TRADE_RETCODE_LOCKED, TRADE_RETCODE_FROZEN и в каком случае блокируется запрос или морозится позиция/ордер?

2)Также интересно, что делать с TRADE_RETCODE_INVALID_FILL и в каком случае она возникает?

 
PunkBASSter:

Здравствуйте! Скажите пожалуйста,

1)Что делать с ошибками типа TRADE_RETCODE_LOCKED, TRADE_RETCODE_FROZEN и в каком случае блокируется запрос или морозится позиция/ордер?

2)Также интересно, что делать с TRADE_RETCODE_INVALID_FILL и в каком случае она возникает?

1) Посмотрите поиском по форуму. С год назад обсуждалось.

2) Смотрите в Справочнике ENUM_ORDER_TYPE_FILLING. Вероятно, несоответствие в торговом запросе заданного "типа ордера по исполнению" режиму исполнения и приведёт к указанному коду возврата. 

Например, ORDER_FILLING_FOK и SYMBOL_TRADE_EXECUTION_MARKET.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
Yedelkin, большое спасибо)
 
masharov:

Возникло подозрение, что если индикатор активирован через iCustom, то он рассчитывается на каждом тике. И это не зависит от обращений к нему через CopyBuffer. Это верно?

Если верно, то можно ли отключить пересчет индикатора и включить только перед обращением к CopyBuffer ? 

 

 Если я правильно Вас понял, то ограничить расчёты на последующих тиках можно попробовать по примеру из справки по iFractals (см. множественные условия в OnCalculate).

 Ещё, вероятно, можно флагировать в OnCalculate через true первичное выполнение индикаторных расчётов на всех необходимых барах и проверять серверное время терминала, а по наступлению оного с необходимым шагом t сбрасывать флаг в false, тем самым разрешив перерасчёт, и снова ставить в true... и так далее.

 Ну или даже так: написать внешнюю функцию с расчётами, вызвать её в OnInit, где она отработает единожды при первом запуске индикатора (а также при смене ТФ и т. п., что происходит по инициативе пользователя), а затем эту же функцию вызывать в OnCalculate вторым способом (по наступлению заданного времени на сервере и флагированием).

 Но первый способ всё же хорош тем, что не просто не грузит процессор полными перерасчётами (зачастую ни к каким новым результатам не ведущими вовсе) на каждом тике, но даже не будет делать полные перерасчёты через заданный интервал времени, а лишь будет обсчитывать самые новые бары (если на каждом тике, то по одному новому, а если раз в t, то несколько накопившихся за это время). ...Хотя этот вариант лучше уточнить лично, могу ошибаться... К тому же всё зависит от конкретной цели индикатора. Если он зависит от большой или даже всей истории рынка, то от пересчётов всей истории никуда не деться.

 

 Не понял юмора шутки (пишу индикатор, хотя без разницы):

struct TBuffer
{
  double buffer[];
};

TBuffer BuffArray[4];

 Компилируется без ошибок и предупреждений.

int elements=4;

struct TBuffer
{
  double buffer[];
};

TBuffer BuffArray[elements];

 Компилируется с 1 error(s), 0 warning(s): 'elements' - invalid index value.

  Что тут может быть мимо очевидного здравого смысла??

 
x100intraday:

 
  Что тут может быть мимо очевидного здравого смысла??

число элементов массива задается константой

если число элементов заранее не известно, то чтоб задавать размер с помощью переменных пользуйтесь ArrayResize.

Это азы c++.

поэтому или

#define elements 4
Причина обращения: