Canvas - это круто! - страница 21

 
Nikolai Semko:

Да, был маленький косячок. Исправил.

Спасибо.

Пожалуйста, последний файл перезалили?

А вижу, да, теперь всё хорошо!
 
Nikolai Semko:

Для наглядности скорости...

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

X - меняется максимальный период МА

Y - шаг изменения периода МА


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

Намёк на создание методов отдачи данных из таких индикаторов - вот это будет интересней.

 
Artyom Trishkin:

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

Намёк на создание методов отдачи данных из таких индикаторов - вот это будет интересней.

Наладить способы отдачи данных из "канвасных" индикаторов не есть большая проблема. Я вижу массу вариантов.

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

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

Более того - большой вопрос: "А нужно ли вообще брать данные из индикатора?"

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

 
Nikolai Semko:

Наладить способы отдачи данных из "канвасных" индикаторов не есть большая проблема. Я вижу массу вариантов.

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

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

Более того - большой вопрос: "А нужно ли вообще брать данные из индикатора?"

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

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

А если возвращаемых данных канвасного индикатора будет больше 512 ? Тут буферы уже не помогут. А пользователи хотят просто получать данные от индикаторов в своих программах. И они не хотят их встраивать в тело советника (сову пожалею - пусть летает без погремушек в ...). И они хотят получать данные на любом запрашиваемом баре, а не только на видимых. И это оправдано. И оправдано не только ленью и желанием получать всё легко и просто, но и требованиями ТС.

 
Artyom Trishkin:

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

А если возвращаемых данных канвасного индикатора будет больше 512 ? Тут буферы уже не помогут. А пользователи хотят просто получать данные от индикаторов в своих программах. И они не хотят их встраивать в тело советника (сову пожалею - пусть летает без погремушек в ...). И они хотят получать данные на любом запрашиваемом баре, а не только на видимых. И это оправдано. И оправдано не только ленью и желанием получать всё легко и просто, но и требованиями ТС.

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

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

 
Nikolai Semko:

Наладить способы отдачи данных из "канвасных" индикаторов не есть большая проблема. Я вижу массу вариантов.

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

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

Более того - большой вопрос: "А нужно ли вообще брать данные из индикатора?"

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

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

 
Nikolai Semko:

Для наглядности скорости...

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

X - меняется максимальный период МА

Y - шаг изменения периода МА


Молодец, Николай. Так держать.

 
Alexey Viktorov:

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

согласен.
 
Кстати, еще одним приятным бонусом при использовании канвасных индикаторов является тот факт, что код практически кроссплатформенный.
 
Реter Konow:

Молодец, Николай. Так держать.

Обратим внимание, Петр, как я реализовал мультиградиент из 6 цветов.  

uint Grad(double p)
  {
   static uint Col[6]={0xFFFF0000,0xFFFF00FF,0xFF0000FF,0xFF00FFFF,0xFF00FF00,0xFFFFFF00};
   p=p*5;
   int n=(int)p;
   if(n==5) return Col[5];
   double k=1-p+(int)p;
   argb c1,c2;
   c1.clr=Col[n];
   c2.clr=Col[n+1];
   return ARGB(255,c2.c[0]+uchar(k*((int)c1.c[0]-(int)c2.c[0])+0.5),
               c2.c[1]+uchar(k*((int)c1.c[1]-(int)c2.c[1])+0.5),
               c2.c[2]+uchar(k*((int)c1.c[2]-(int)c2.c[2])+0.5));
  }

где p меняется от 0 до 1

ЗЫ правда там есть один недочет с крайним цветом, который еще руки не дошли исправить.

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