Как сделать плавность изменения объектов, нарисованных по XY (MT4 vs MT5) - страница 10

 
Vitaliy Kuznetsov:

Спасибо, хороший шаблон, пригодится. Очень многого и интересного узнаю из Ваших наработок.

Дмитрий, всё равно считаю Вас программистом, способным продемонстрировать высокий навык.

И если есть предложения кодом, конструктивные мысли, то с радостью (и не только Я) перенял бы Ваш опыт.

P.S. Лучше 1 раз увидеть код, чем 100 раз о нём услышать.

Ага, построился, стою в очереди, держу на вытянутых руках... Код чего? 

 
Nikolai Semko:

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

Вот поэтому я не люблю объекты, так как они живут собственной жизнью в своих потоках, контроль над которой Вам не доступен. С канвасом напротив - все в ваших руках. Именно поэтому для тестера с канвасом приходится дописывать код, чтоб не тормозил, рассчитывая кадр на каждом тике более 30 раз в секунду. 
Да и работа с ТФ и с подгрузкой истории в MT5 реализована ужасно неразумно и неэффективно. Подгружаются только М1, причем в незапакованном виде, остальные только рассчитываются из M1. Поэтому если на первый раз включите MN1, то 100 баров будут грузится более 10 секунд. Мне пришлось самому писать загрузку баров и переводить М1 в упакованный вид и иметь все рассчитанные ТФ в памяти. Все мои ТФ вместе с M1 занимает места в ОЗУ в разы меньше места, чем только один штатный M1 в MT5.

Это покаяние, или восторг? 

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

Это покаяние, или восторг? 

Понимаешь, все наоборот. Ты создаешь программу - это мир, живущий по твоим законам. Ты сделал что-нибудь объектно-ориентированное: породил что-нибудь вроде амебы, или покруче, живущей вообще самостоятельно. 

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

Это покаяние, или восторг? 

Это бред на почве неадекватного самомнения. И очень далекий от реальностей работы в МТ5.

 
Nikolai Semko:

Ну для начала почините свой индикатор с объектами по этому алгоритму, который давал.

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

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

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

 
Vitaliy Kuznetsov:

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

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

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

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: Easy Canvas

Nikolai Semko, 2020.12.27 17:25

Я обычно поступаю по следующей схеме:

  1. всю отрисовку, привязанную к барам или времени, осуществляю в одной функции, например void Draw()
  2. в OnChartEvent добавляю строку
    if (id == CHARTEVENT_CHART_CHANGE ) Draw (); 
    , отслеживая событие изменение чарта (новый бар - это так же событие изменение чарта) 
  3. в OnCalculate для режима тестера добавляю строку для перерисовки например при наступлении нового бара, т.к. OnChartEvent в тестере не работает:
     if(rate_total != prev_calculated ) if (Canvas.tester) {ChartChanged (); Draw ();}

Если это не работает в MT4, значит что-то не так с событием CHARTEVENT_CHART_CHANGE. Сейчас не проверить, пока нет котировок.



 
Nikolai Semko:

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

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