Советник без индикатора.Возможно ли такое? - страница 3

 
Алексей Тарабанов:

Опасное заблуждение. 

Какое заблуждение?
Если нужен массив истории - делаем его. Не нужен - не делаем.
Лично я в основном делаю массив, т. к. использую часто внутренние тесты и т.д.. Но мой массив редко бывает равным колличеству баров в чарте. Иногда меньше, иногда больше.
Возьмите, к примеру,  обычный зигзаг. Там информативных элементов массива меньше 10%, остальные пустые, но перебор ведётся по всему массиву. Ну и что? Это эффективно? Совершенно очевидно, что более правильно использовать более короткий массив структур со значением и индексом.
 

 Но мой массив редко бывает равным колличеству баров в чарте. Иногда меньше, иногда больше.

Меня тревожит то, что он может быть больше. 

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

А что целесообразнее в смысле экономии ресурсов, считать в индикаторе или считать то же самое в советнике, что быстрее пробовали?

 
Алексей Тарабанов:

 Но мой массив редко бывает равным колличеству баров в чарте. Иногда меньше, иногда больше.

Меня тревожит то, что он может быть больше. 

Напрасно тревожитесь, Алексей. 
Ситуаций может быть, когда такое необходимо, гугильён.
Например.
В основном я использую данные минутных баров или тики, вне зависимости от ТФ.
Это очень неправильно и расточительно, когда при каждой смене ТФ ваш эксперт должен пересчитывать все буферные индикаторы. У меня такого не происходит.
Поэтому если я на недельном ТФ, то понятное дело массив мой будет гораздо больше количества баров в чарте.
Про тики вообще молчу.
Как правило, у меня несколько массивов структур и индексные массивы для увеличения производительности и экономии памяти. Их размерность может быть самая разная. 
Вообще, когда вы используете индикаторы через iCustom, вы очень ограничены во многих вещах. 
Вы жестко привязаны к размеру массиву, равному количеству баров в чарте. А если там у вас стоит unlimited?
Вы привязаны только к одному типу double. Про массив структур можете даже и не мечтать.
С color индикаторами вообще смех. 8 байт на каждый бар - явный перебор.
Индикаторные буферы очень расточительны в плане потребления памяти. 
Тем более доступ у вас к буферам только через CopyBuffer, даже если вам нужен только один последний бар. В любом случае эта операция значительно медленнее, чем простое обращение к элементу массива. 

ЗЫ конечно если вы используете стандартные встроенные индикаторы типа iMA, то можно сильно не заморачиваться. Но все же я думаю, речь здесь именно о пользовательских индикаторах. Сомневаюсь, что профи используют встроенные индикаторы для реальной торговли.


 
VVT:

А что целесообразнее в смысле экономии ресурсов, считать в индикаторе или считать то же самое в советнике, что быстрее пробовали?

Частично ответил в предыдущем посте.
Это чрезвычайно объемный вопрос и его лучше задавать разработчикам, причем именно тем кто отвечает за многопоточность. 

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

 
Dmitry Fedoseev:

И каждый раз бегать в цикле? С ЕМА будет еще интересней.

Используйте однопроходный алгоритм расчета экспоненциально взвешенного среднего

ma = (1 - a) * price + a * ma

 
Dmitry Fedoseev:

Нормальный индикатор считает все бары только на запуске, а потом досчитывает 1 бар. В индикаторе легко сделать SMA так, что даже при досчете 1-го бара не понадобится елозить в цикле по всему периоду МА. 

Конечно, можно и в эксперте сделать буферы из массивом... Но зачем, если есть специально проработанный элемент - индикаторы?

Так в чём, собственно говоря, проблема? Появился новый бар - учли его. 

 
anim:
Хочется чтобы советник не был привязан к индикатору. И рассчитывал бары и брал сигналы на покупку/продажу внутри себя. Возможно ли такое?
Конечно это возможно, если внедрить формулу индикатора в советник!
 
Vladimir Mikhailov:

Используйте однопроходный алгоритм расчета экспоненциально взвешенного среднего

ma = (1 - a) * price + a * ma

Так неверно!

Правильно так:

ma[i] = (1 - a) * price + a * ma[i+1]

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

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

Всё это легко проверить, сравнив показания индикатора и соответствующие расчёты в эксперте.
 
Dmitry Fedoseev:

Конечно, можно и в эксперте сделать буферы из массивом... Но зачем, если есть специально проработанный элемент - индикаторы?

у меня есть проблема с пропусками сигналов от индикатора, рекомендацию никто не дал

https://www.mql5.com/ru/forum/365021

принты показали, что приходит событие от индикатор шпиона, проходит проверку нового бара, и там данные прошлого бара, а не нового

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

В моих ТС пропуск сигнала
В моих ТС пропуск сигнала
  • 2021.03.16
  • www.mql5.com
Не люблю создавать новые темы, Небольшие исходные данные: Советник работает в OnChatEvent, 7 символов, циклов нет, прямая передача номера за минусо...