Индикатор или Эксперт - страница 3

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

Совершенно не получается. В MQL4 есть доступ ко всем индикаторам, которые считаются очень экономно и быстро:

double iAC( string symbol, int timeframe, int shift)
double iAD( string symbol, int timeframe, int shift)
double iAlligator( string symbol, int timeframe, int jaw_period, int jaw_shift, int teeth_period, int teeth_shift, int lips_period, int lips_shift, int ma_method, int applied_price, int mode, int shift)
double iADX( string symbol, int timeframe, int period, int applied_price, int mode, int shift)
double iATR( string symbol, int timeframe, int period, int shift)
double iAO( string symbol, int timeframe, int shift)
double iBearsPower( string symbol, int timeframe, int period, int applied_price, int shift)
double iBands( string symbol, int timeframe, int period, double deviation, int bands_shift, int applied_price, int mode, int shift)
double iBandsOnArray( double array[], int total, int period, double deviation, int bands_shift, int mode, int shift)
double iBullsPower( string symbol, int timeframe, int period, int applied_price, int shift)
double iCCI( string symbol, int timeframe, int period, int applied_price, int shift)
double iCCIOnArray( double array[], int total, int period, int shift)
double iCustom( string symbol, int timeframe, string name, ... , int mode, int shift)
double iDeMarker( string symbol, int timeframe, int period, int shift)
double iEnvelopes( string symbol, int timeframe, int ma_period, int ma_method, int ma_shift, int applied_price, double deviation, int mode, int shift)
double iEnvelopesOnArray( double array[], int total, int ma_period, int ma_method, int ma_shift, double deviation, int mode, int shift)
double iForce( string symbol, int timeframe, int period, int ma_method, int applied_price, int shift)
double iFractals( string symbol, int timeframe, int mode, int shift)
double iGator( string symbol, int timeframe, int jaw_period, int jaw_shift, int teeth_period, int teeth_shift, int lips_period, int lips_shift, int ma_method, int applied_price, int mode, int shift)
double iIchimoku( string symbol, int timeframe, int tenkan_sen, int kijun_sen, int senkou_span_b, int mode, int shift)
double iBWMFI( string symbol, int timeframe, int shift)
double iMomentum( string symbol, int timeframe, int period, int applied_price, int shift)
double iMomentumOnArray( double array[], int total, int period, int shift)
double iMFI( string symbol, int timeframe, int period, int shift)
double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)
double iMAOnArray( double array[], int total, int period, int ma_shift, int ma_method, int shift)
double iOsMA( string symbol, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, int shift)
double iMACD( string symbol, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, int mode, int shift)
double iOBV( string symbol, int timeframe, int applied_price, int shift)
double iSAR( string symbol, int timeframe, int step, int maximum, int shift)
double iRSI( string symbol, void timeframe, int period, int applied_price, int shift)
double iRSIOnArray( double array[], int total, int period, int shift)
double iRVI( string symbol, int timeframe, int period, int mode, int shift)
double iStdDev( string symbol, int timeframe, int ma_period, int ma_method, int ma_shift, int applied_price, int shift)
double iStdDevOnArray( double array[], int total, int ma_period, int ma_method, int ma_shift, int shift)
double iStochastic( string symbol, int timeframe, int %Kperiod, int %Dperiod, int slowing, int method, int price field, int mode, int shift)
double iWPR( string symbol, int timeframe, int period, int shift)

Как после этого можно заявлять что самому надо своими ручками реализовывать расчет индикаторов?

У меня два индикатора, три буфера. Скомпоновать их вместе,
добавить торговлю и будет одна программа-эксперт. Но получается,
что это невозможно, я должен писать три программы, которые будут взаимодействовать на рынке. При этом еще и потеря качества:
сколько чисел мне нужно для анализа столько раз я должен обращаться
к индикаторам. А для анализа эти числа надо еще и организовать ...

Получается все отлично - используйте iCustom и вызывайте свой кастомный индикатор из эксперта. Легко, прозрачно и очень просто.

Вношу простейшее предложение !
Введите одно простое #property которое будет различать в каком
потоке работает программа: в синхронном или асинхронном.
И это #property будет отличать индикаторов и экспертов. В остальном
же дайте экспертам возможности, которые есть у индикаторов.

А вот это вообще не должно волновать экспертописателя. Изначальный вопрос "а зачем разделили код на экспертов, индикаторы и скрипты" был совершенно с другим смыслом. Все совершенно просто и хорошо работает. Но не все читают существующую документацию, не пробуют писать и занимаются домыслами.

Не нужно домыслов. Все спроектировано хорошо и отлично работает.
Попробуйте на практике вызвать кастомный индикатор из эксперта.
 
Слава,
Жаль, что такую информацию приходится добывать урывками
и с боем.
..
Почему ничего этого нет в описании MQL ?
Разве этот язык не для того создан чтобы писать скрипты, индикаторы
и эксперты ? А как их можно писать не зная замыслов разработчиков
относительно этих сущностей и их использования ?

Слава, Ваш ответ меня устраивает, поскольку проясняет суть дела.
Но этого недостаточно, поскольку теперь возникает куча новых
вопросов..


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

Уважаемые производители, прислушайтесь, пожалуйста.
Нужен русскоязычный ресурс, описывающий MQL и особенности написания экспертов с примерами. В словаре программы тоже обязательно должно присутствовать описание функций на русском языке.
Форум не место для получения исходных знаний.

И ещё позарез нужен тестер.
 
Как после этого можно заявлять что самому надо своими ручками реализовывать расчет индикаторов?

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

Можно ведь было сказать тоже самое, но в другой форме.

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

И с потоками тоже не все так, как вы говорите.
Вот у меня сейчас запущено 17 экспертов на 17 чартах, а потоков всего 6.
Получается что не каждый эксперт в своем потоке?
Получается все отлично - используйте iCustom и вызывайте свой кастомный индикатор из эксперта. Легко, прозрачно и очень просто.

Ну пока не очень отлично, уходя с работы домой оставил МТ включенным с ВМ > 300Мб.
Вот сейчас думаю, что будет утром, упасть комп вроде бы не должен.
А вот это вообще не должно волновать экспертописателя. Изначальный вопрос "а зачем разделили код на экспертов, индикаторы и скрипты" был совершенно с другим смыслом. Все совершенно просто и хорошо работает. Но не все читают существующую документацию, не пробуют писать и занимаются домыслами.

Знаете, что должно, а что не должно волновать - это как бы от разработчиков не зависит.
Вот есть проблема или непонятки, и они волнуют, это собственно по форуму видно, тема эта постоянно поднимается. (И опять же - стиль? :(()
Не нужно домыслов. Все спроектировано хорошо и отлично работает.

Спроектировано хорошо, только юзера об этом не знают.
Попробуйте на практике вызвать кастомный индикатор из эксперта.

Попробовал - "неэффективность" достала, надеюсь Слава ее вылечит и тогда действительно будет все хорошо.
-----------------------------------------------------------------

Всем учасникам.

Действительно с помощью iCustom можно выкрутиться и сделать из индикатора эксперта.

Делается просто.
Работает эффективно - процессор совсем не нагружает.
За счет всяческого кеширования результатов, работать будет даже быстрее, чем если самому в эксперта переписывать (в большинстве случаев и при использовании нескольких индикаторов).

И есть еще один БОЛЬШОЙ плюс.
В эксперте используется Точно Тот же Код, который рисует картинку индикатора.

У меня есть индикатор и эксперт на нем построенный (точнее рыба пока).
Сначала я все считал и там и там, считал совершенно одинаково (алгоритм одинаков),
но результат в эксперте и индикаторе получался разный.
Разница небольшая, но существенная,
получалось что по индикатору невозможно было понять что будет делать эксперт.
Когда я переделал на iCustom, все встало на свои места.

Эксперт стал намного проще, вся логика генерации сигнала теперь в индикаторе (в одном месте).
Осталось еще "неэффективность" исправить :))
(сорри, у кого что болит ...)
 
2Mak
...Разница небольшая, но существенная,
получалось что по индикатору невозможно было понять что будет делать эксперт.
Когда я переделал на iCustom, все встало на свои места..

Что-то я совсем запутался, ты имеешь в виду что использование внутри эксперта iCustom рациональнее (оптимальнее) "встроенного расчета значений индикатора"?
 
Но что бы вы не говорили - разделение на индикаторы, эксперты и скрипты выглядит искуственным, и все участники тут с этим согласятся.

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

И с потоками тоже не все так, как вы говорите.
Вот у меня сейчас запущено 17 экспертов на 17 чартах, а потоков всего 6.
Получается что не каждый эксперт в своем потоке?

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

Ну пока не очень отлично, уходя с работы домой оставил МТ включенным с ВМ > 300Мб.
Вот сейчас думаю, что будет утром, упасть комп вроде бы не должен.

17 экспертов с вызовами iCustom - это не менее 34 запущенных программ, у которых масса закешированных буферов (особенно у индикаторов). Уверен, что кроме экспертов, на графики явно наложены те же самые кастомные индикаторы. Грубым итогом будет 17 экспертов + 17 индикаторов в экспертах + 17 индикаторов на графиках = 51 MQL4 программ, запущенных в одном терминале. За удовольствие работать с таким количеством собственного кода надо платить. В данном случае - памятью. И 300Mb - это совсем мало.

Попробовал - "неэффективность" достала, надеюсь Слава ее вылечит и тогда действительно будет все хорошо.

Дело тут в другом и ошибок нет - наращивайте память.

Что-то я совсем запутался, ты имеешь в виду что использование внутри эксперта iCustom рациональнее (оптимальнее) "встроенного расчета значений индикатора"?

В краткосрочной перспективе лучше всего использовать iCustom. Можно сразу же получить результат и он 100% идентичен индикатору. В долгосрочной перспективе, если эксперт или индикатор затратные по ресурсам и постоянно используются, гоняются на тестировании, то возможно лучше будет реализовать расчет индикатора в локальном массиве. Можно будет добиться экономии 10% на вызове индикатора.
 
Что-то я совсем запутался, ты имеешь в виду что использование внутри эксперта iCustom рациональнее (оптимальнее) "встроенного расчета значений индикатора"?

Да.
Индикатор расчитывается 1 раз, только его последний бар пересчитывается когда нужно.
iCustom фактически просто созвращает значение из буфера индикатора, т.е. это очень быстро.
Если гдето используется индикатор А, то вычисляется он только 1 раз,
независимо от того, сколько iCustom и где мы напишем.

Ну и мы гарантированно видим то же самое, что и эксперт
(эксперт на тик позже у меня получалось).

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

Информация очень существенная ! Из нее следует, что в эксперте
практически ничем нельзя пользоваться из того, что делает
индикатор полезным. Все надо делать своими руками.

зачем? чем отличается индикатор на графике и индикатор, вызванный из эксперта? практически только одним моментом - индикатор, вызванный из эксперта, не отрисовывается на графике! И ВСЁ.

Жаль, что такую информацию приходится добывать урывками
и с боем. Из 18 постов в теме только один, Ваш, относится к
сути дела. Да и то, предельно лаконичен.

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


Почему ничего этого нет в описании MQL ?
Разве этот язык не для того создан чтобы писать скрипты, индикаторы
и эксперты ? А как их можно писать не зная замыслов разработчиков
относительно этих сущностей и их использования ?

обязательно будет описано!
"погодите, дети,
дайте только срок.
будет вам и белка,
будет и свисток"


Слава, Ваш ответ меня устраивает, поскольку проясняет суть дела.
Но этого недостаточно, поскольку теперь возникает куча новых
вопросов. Например:
Ни буферы, ни средства их использования получается в экспертах
использовать нельзя. Чего еще нельзя делать в экспертах ?
Как сами разработчики представляют стратегию использования
индикаторов и экспертов ? И т.д.

это не вопрос. пожалуйста, используйте массивы любой длины, которую пропустит система. почитайте на нашем сайте "особенности написания пользовательских индикаторов", посмотрите наши примеры. при вдумчивом изучении а также понимании разницы между понятием "эксперт" aka "механическая торговая система" и понятием "индикатор" aka "графическое построение, выполненное на основе ценовых серий" у Вас не будет проблем философского характера.


Напишите один раз подробное пояснение и добавьте его в качестве
отдельной страницы на сайте в разделе MQL.

обязательно будет.
 
17 экспертов с вызовами iCustom - это не менее 34 запущенных программ, у которых масса закешированных буферов (особенно у индикаторов). Уверен, что кроме экспертов, на графики явно наложены те же самые кастомные индикаторы. Грубым итогом будет 17 экспертов + 17 индикаторов в экспертах + 17 индикаторов на графиках = 51 MQL4 программ, запущенных в одном терминале. За удовольствие работать с таким количеством собственного кода надо платить. В данном случае - памятью. И 300Mb - это совсем мало.

Дело тут в другом и ошибок нет - наращивайте память.

Менее чем за 20 часов работы МТ - VM использовано 526Мб,
и продолжает расти с той же скоростью.

Ренат, посоветуйте, сколько мне нужно поставить памяти в комп,
чтобы хватило хотя бы на неделю непрерывной работы?

И вы будете продолжать настаивать что это не баг а фича?
:))
 
И вы будете продолжать настаивать что это не баг а фича?

Пришлите, пожалуйста, заархивированный полный рабочий профайл со всеми окнами и используемыми экспертами с индикаторами на stringo @ . Нужен именно полный профайл.
 
"погодите, дети,
дайте только срок.
будет вам и белка,
будет и свисток"


:)))
Причина обращения: